From 7a5c8721ddf6a69a240f8047e191688e94b9fb32 Mon Sep 17 00:00:00 2001 From: Yasien Mac Mini Date: Wed, 1 Jul 2026 14:01:25 +0200 Subject: [PATCH] Adoird build migration and update --- mih_ui/android/app/build.gradle.kts | 20 +- .../firebase_app_check-0.4.5/CHANGELOG.md | 576 ++ .../firebase_app_check-0.4.5/LICENSE | 27 + .../firebase_app_check-0.4.5/README.md | 24 + .../android/build.gradle | 94 + .../android/gradle.properties | 2 + .../gradle/wrapper/gradle-wrapper.properties | 5 + .../android/local-config.gradle | 7 + .../android/settings.gradle | 10 + .../android/src/main/AndroidManifest.xml | 9 + .../appcheck/FirebaseAppCheckPlugin.kt | 161 + .../appcheck/FlutterFirebaseAppRegistrar.kt | 37 + .../GeneratedAndroidFirebaseAppCheck.g.kt | 223 + .../appcheck/TokenChannelStreamHandler.kt | 30 + .../android/user-agent.gradle | 22 + .../example/README.md | 8 + .../example/analysis_options.yaml | 10 + .../example/android/app/build.gradle | 65 + .../example/android/app/google-services.json | 615 ++ .../android/app/src/debug/AndroidManifest.xml | 7 + .../android/app/src/main/AndroidManifest.xml | 45 + .../firebase/appcheck/example/MainActivity.kt | 5 + .../res/drawable-v21/launch_background.xml | 12 + .../main/res/drawable/launch_background.xml | 12 + .../src/main/res/mipmap-hdpi/ic_launcher.png | Bin 0 -> 544 bytes .../src/main/res/mipmap-mdpi/ic_launcher.png | Bin 0 -> 442 bytes .../src/main/res/mipmap-xhdpi/ic_launcher.png | Bin 0 -> 721 bytes .../main/res/mipmap-xxhdpi/ic_launcher.png | Bin 0 -> 1031 bytes .../main/res/mipmap-xxxhdpi/ic_launcher.png | Bin 0 -> 1443 bytes .../app/src/main/res/values-night/styles.xml | 18 + .../app/src/main/res/values/styles.xml | 18 + .../app/src/profile/AndroidManifest.xml | 7 + .../example/android/build.gradle | 18 + .../example/android/gradle.properties | 4 + .../gradle/wrapper/gradle-wrapper.properties | 5 + .../example/android/settings.gradle | 28 + .../ios/Flutter/AppFrameworkInfo.plist | 24 + .../example/ios/Flutter/Debug.xcconfig | 2 + .../example/ios/Flutter/Release.xcconfig | 2 + .../example/ios/Podfile | 43 + .../ios/Runner.xcodeproj/project.pbxproj | 553 ++ .../contents.xcworkspacedata | 7 + .../xcshareddata/IDEWorkspaceChecks.plist | 8 + .../xcshareddata/WorkspaceSettings.xcsettings | 8 + .../xcshareddata/xcschemes/Runner.xcscheme | 114 + .../contents.xcworkspacedata | 10 + .../xcshareddata/IDEWorkspaceChecks.plist | 8 + .../xcshareddata/WorkspaceSettings.xcsettings | 8 + .../example/ios/Runner/AppDelegate.h | 6 + .../example/ios/Runner/AppDelegate.m | 16 + .../AppIcon.appiconset/Contents.json | 122 + .../Icon-App-1024x1024@1x.png | Bin 0 -> 10932 bytes .../AppIcon.appiconset/Icon-App-20x20@1x.png | Bin 0 -> 564 bytes .../AppIcon.appiconset/Icon-App-20x20@2x.png | Bin 0 -> 1283 bytes .../AppIcon.appiconset/Icon-App-20x20@3x.png | Bin 0 -> 1588 bytes .../AppIcon.appiconset/Icon-App-29x29@1x.png | Bin 0 -> 1025 bytes .../AppIcon.appiconset/Icon-App-29x29@2x.png | Bin 0 -> 1716 bytes .../AppIcon.appiconset/Icon-App-29x29@3x.png | Bin 0 -> 1920 bytes .../AppIcon.appiconset/Icon-App-40x40@1x.png | Bin 0 -> 1283 bytes .../AppIcon.appiconset/Icon-App-40x40@2x.png | Bin 0 -> 1895 bytes .../AppIcon.appiconset/Icon-App-40x40@3x.png | Bin 0 -> 2665 bytes .../AppIcon.appiconset/Icon-App-60x60@2x.png | Bin 0 -> 2665 bytes .../AppIcon.appiconset/Icon-App-60x60@3x.png | Bin 0 -> 3831 bytes .../AppIcon.appiconset/Icon-App-76x76@1x.png | Bin 0 -> 1888 bytes .../AppIcon.appiconset/Icon-App-76x76@2x.png | Bin 0 -> 3294 bytes .../Icon-App-83.5x83.5@2x.png | Bin 0 -> 3612 bytes .../LaunchImage.imageset/Contents.json | 23 + .../LaunchImage.imageset/LaunchImage.png | Bin 0 -> 68 bytes .../LaunchImage.imageset/LaunchImage@2x.png | Bin 0 -> 68 bytes .../LaunchImage.imageset/LaunchImage@3x.png | Bin 0 -> 68 bytes .../LaunchImage.imageset/README.md | 5 + .../Runner/Base.lproj/LaunchScreen.storyboard | 37 + .../ios/Runner/Base.lproj/Main.storyboard | 26 + .../ios/Runner/GoogleService-Info.plist | 38 + .../example/ios/Runner/Info.plist | 70 + .../example/ios/Runner/Runner.entitlements | 8 + .../ios/Runner/RunnerRelease.entitlements | 8 + .../example/ios/Runner/main.m | 9 + .../example/ios/firebase_app_id_file.json | 7 + .../example/lib/firebase_options.dart | 98 + .../example/lib/main.dart | 249 + .../macos/Flutter/Flutter-Debug.xcconfig | 2 + .../macos/Flutter/Flutter-Release.xcconfig | 2 + .../example/macos/Podfile | 42 + .../macos/Runner.xcodeproj/project.pbxproj | 613 ++ .../xcshareddata/IDEWorkspaceChecks.plist | 8 + .../xcshareddata/xcschemes/Runner.xcscheme | 105 + .../contents.xcworkspacedata | 10 + .../xcshareddata/IDEWorkspaceChecks.plist | 8 + .../example/macos/Runner/AppDelegate.swift | 13 + .../AppIcon.appiconset/Contents.json | 68 + .../AppIcon.appiconset/app_icon_1024.png | Bin 0 -> 46993 bytes .../AppIcon.appiconset/app_icon_128.png | Bin 0 -> 3276 bytes .../AppIcon.appiconset/app_icon_16.png | Bin 0 -> 1429 bytes .../AppIcon.appiconset/app_icon_256.png | Bin 0 -> 5933 bytes .../AppIcon.appiconset/app_icon_32.png | Bin 0 -> 1243 bytes .../AppIcon.appiconset/app_icon_512.png | Bin 0 -> 14800 bytes .../AppIcon.appiconset/app_icon_64.png | Bin 0 -> 1874 bytes .../macos/Runner/Base.lproj/MainMenu.xib | 339 + .../macos/Runner/Configs/AppInfo.xcconfig | 14 + .../macos/Runner/Configs/Debug.xcconfig | 2 + .../macos/Runner/Configs/Release.xcconfig | 2 + .../macos/Runner/Configs/Warnings.xcconfig | 13 + .../macos/Runner/DebugProfile.entitlements | 12 + .../macos/Runner/GoogleService-Info.plist | 38 + .../example/macos/Runner/Info.plist | 32 + .../macos/Runner/MainFlutterWindow.swift | 15 + .../example/macos/Runner/Release.entitlements | 5 + .../example/macos/firebase_app_id_file.json | 7 + .../example/pubspec.yaml | 21 + .../example/web/favicon.png | Bin 0 -> 917 bytes .../example/web/icons/Icon-192.png | Bin 0 -> 5292 bytes .../example/web/icons/Icon-512.png | Bin 0 -> 8252 bytes .../example/web/icons/Icon-maskable-192.png | Bin 0 -> 5594 bytes .../example/web/icons/Icon-maskable-512.png | Bin 0 -> 20998 bytes .../example/web/index.html | 41 + .../example/web/manifest.json | 35 + .../example/windows/CMakeLists.txt | 108 + .../example/windows/flutter/CMakeLists.txt | 109 + .../example/windows/runner/CMakeLists.txt | 40 + .../example/windows/runner/Runner.rc | 121 + .../example/windows/runner/flutter_window.cpp | 73 + .../example/windows/runner/flutter_window.h | 37 + .../example/windows/runner/main.cpp | 46 + .../example/windows/runner/resource.h | 20 + .../windows/runner/resources/app_icon.ico | Bin 0 -> 33772 bytes .../windows/runner/runner.exe.manifest | 14 + .../example/windows/runner/utils.cpp | 69 + .../example/windows/runner/utils.h | 23 + .../example/windows/runner/win32_window.cpp | 284 + .../example/windows/runner/win32_window.h | 104 + .../ios/firebase_app_check.podspec | 46 + .../ios/firebase_app_check/Package.swift | 41 + .../firebase_app_check/Constants.swift | 6 + .../FirebaseAppCheckMessages.g.swift | 236 + .../FirebaseAppCheckPlugin.swift | 369 ++ .../lib/firebase_app_check.dart | 34 + .../lib/src/firebase_app_check.dart | 156 + .../macos/firebase_app_check.podspec | 63 + .../macos/firebase_app_check/Package.swift | 36 + .../firebase_app_check/Constants.swift | 6 + .../FirebaseAppCheckMessages.g.swift | 236 + .../FirebaseAppCheckPlugin.swift | 369 ++ .../firebase_app_check-0.4.5/pubspec.yaml | 48 + .../test/firebase_app_check_test.dart | 79 + .../firebase_app_check-0.4.5/test/mock.dart | 35 + .../windows/CMakeLists.txt | 81 + .../windows/firebase_app_check_plugin.cpp | 249 + .../windows/firebase_app_check_plugin.h | 72 + .../firebase_app_check_plugin_c_api.cpp | 16 + .../firebase_app_check_plugin_c_api.h | 29 + .../windows/messages.g.cpp | 517 ++ .../windows/messages.g.h | 119 + .../windows/plugin_version.h.in | 13 + .../firebase_auth-6.5.4/CHANGELOG.md | 1613 +++++ .../firebase_auth-6.5.4/LICENSE | 27 + .../firebase_auth-6.5.4/README.md | 26 + .../firebase_auth-6.5.4/android/build.gradle | 66 + .../android/gradle.properties | 1 + .../gradle/wrapper/gradle-wrapper.properties | 5 + .../android/settings.gradle | 8 + .../android/src/main/AndroidManifest.xml | 9 + .../auth/AuthStateChannelStreamHandler.java | 63 + .../plugins/firebase/auth/Constants.java | 46 + .../auth/FlutterFirebaseAuthPlugin.java | 782 +++ .../FlutterFirebaseAuthPluginException.java | 157 + .../auth/FlutterFirebaseAuthRegistrar.java | 21 + .../auth/FlutterFirebaseAuthUser.java | 548 ++ .../auth/FlutterFirebaseMultiFactor.java | 252 + .../auth/FlutterFirebaseTotpMultiFactor.java | 82 + .../auth/FlutterFirebaseTotpSecret.java | 42 + .../auth/GeneratedAndroidFirebaseAuth.java | 5308 ++++++++++++++++ .../auth/IdTokenChannelStreamHandler.java | 63 + .../PhoneNumberVerificationStreamHandler.java | 197 + .../plugins/firebase/auth/PigeonParser.java | 382 ++ .../android/user-agent.gradle | 22 + .../firebase_auth-6.5.4/example/README.md | 58 + .../example/analysis_options.yaml | 7 + .../example/android/app/build.gradle | 62 + .../example/android/app/google-services.json | 615 ++ .../android/app/src/debug/AndroidManifest.xml | 7 + .../android/app/src/main/AndroidManifest.xml | 45 + .../firebase/auth/example/MainActivity.kt | 5 + .../res/drawable-v21/launch_background.xml | 12 + .../main/res/drawable/launch_background.xml | 12 + .../src/main/res/mipmap-hdpi/ic_launcher.png | Bin 0 -> 544 bytes .../src/main/res/mipmap-mdpi/ic_launcher.png | Bin 0 -> 442 bytes .../src/main/res/mipmap-xhdpi/ic_launcher.png | Bin 0 -> 721 bytes .../main/res/mipmap-xxhdpi/ic_launcher.png | Bin 0 -> 1031 bytes .../main/res/mipmap-xxxhdpi/ic_launcher.png | Bin 0 -> 1443 bytes .../app/src/main/res/values-night/styles.xml | 18 + .../app/src/main/res/values/styles.xml | 18 + .../app/src/profile/AndroidManifest.xml | 7 + .../example/android/build.gradle | 18 + .../example/android/gradle.properties | 3 + .../gradle/wrapper/gradle-wrapper.properties | 5 + .../example/android/settings.gradle | 28 + .../ios/Flutter/AppFrameworkInfo.plist | 30 + .../example/ios/Flutter/Debug.xcconfig | 2 + .../example/ios/Flutter/Release.xcconfig | 3 + .../firebase_auth-6.5.4/example/ios/Podfile | 48 + .../ios/Runner.xcodeproj/project.pbxproj | 700 +++ .../contents.xcworkspacedata | 7 + .../xcshareddata/IDEWorkspaceChecks.plist | 8 + .../xcshareddata/WorkspaceSettings.xcsettings | 8 + .../xcshareddata/xcschemes/Runner.xcscheme | 94 + .../contents.xcworkspacedata | 10 + .../xcshareddata/IDEWorkspaceChecks.plist | 8 + .../xcshareddata/WorkspaceSettings.xcsettings | 8 + .../example/ios/Runner/AppDelegate.h | 6 + .../example/ios/Runner/AppDelegate.m | 13 + .../example/ios/Runner/AppDelegate.swift | 13 + .../AppIcon.appiconset/Contents.json | 122 + .../Icon-App-1024x1024@1x.png | Bin 0 -> 10932 bytes .../AppIcon.appiconset/Icon-App-20x20@1x.png | Bin 0 -> 564 bytes .../AppIcon.appiconset/Icon-App-20x20@2x.png | Bin 0 -> 1283 bytes .../AppIcon.appiconset/Icon-App-20x20@3x.png | Bin 0 -> 1588 bytes .../AppIcon.appiconset/Icon-App-29x29@1x.png | Bin 0 -> 1025 bytes .../AppIcon.appiconset/Icon-App-29x29@2x.png | Bin 0 -> 1716 bytes .../AppIcon.appiconset/Icon-App-29x29@3x.png | Bin 0 -> 1920 bytes .../AppIcon.appiconset/Icon-App-40x40@1x.png | Bin 0 -> 1283 bytes .../AppIcon.appiconset/Icon-App-40x40@2x.png | Bin 0 -> 1895 bytes .../AppIcon.appiconset/Icon-App-40x40@3x.png | Bin 0 -> 2665 bytes .../AppIcon.appiconset/Icon-App-60x60@2x.png | Bin 0 -> 2665 bytes .../AppIcon.appiconset/Icon-App-60x60@3x.png | Bin 0 -> 3831 bytes .../AppIcon.appiconset/Icon-App-76x76@1x.png | Bin 0 -> 1888 bytes .../AppIcon.appiconset/Icon-App-76x76@2x.png | Bin 0 -> 3294 bytes .../Icon-App-83.5x83.5@2x.png | Bin 0 -> 3612 bytes .../LaunchImage.imageset/Contents.json | 23 + .../LaunchImage.imageset/LaunchImage.png | Bin 0 -> 68 bytes .../LaunchImage.imageset/LaunchImage@2x.png | Bin 0 -> 68 bytes .../LaunchImage.imageset/LaunchImage@3x.png | Bin 0 -> 68 bytes .../LaunchImage.imageset/README.md | 5 + .../Runner/Base.lproj/LaunchScreen.storyboard | 37 + .../ios/Runner/Base.lproj/Main.storyboard | 26 + .../ios/Runner/GoogleService-Info.plist | 38 + .../example/ios/Runner/Info.plist | 98 + .../ios/Runner/Runner-Bridging-Header.h | 1 + .../example/ios/Runner/Runner.entitlements | 14 + .../example/ios/Runner/main.m | 9 + .../example/ios/firebase_app_id_file.json | 7 + .../firebase_auth-6.5.4/example/lib/auth.dart | 748 +++ .../example/lib/firebase_options.dart | 98 + .../firebase_auth-6.5.4/example/lib/main.dart | 108 + .../example/lib/profile.dart | 391 ++ .../macos/Flutter/Flutter-Debug.xcconfig | 2 + .../macos/Flutter/Flutter-Release.xcconfig | 2 + .../firebase_auth-6.5.4/example/macos/Podfile | 40 + .../macos/Runner.xcodeproj/project.pbxproj | 718 +++ .../contents.xcworkspacedata | 7 + .../xcshareddata/IDEWorkspaceChecks.plist | 8 + .../xcshareddata/xcschemes/Runner.xcscheme | 120 + .../contents.xcworkspacedata | 10 + .../xcshareddata/IDEWorkspaceChecks.plist | 8 + .../xcshareddata/WorkspaceSettings.xcsettings | 8 + .../example/macos/Runner/AppDelegate.swift | 13 + .../AppIcon.appiconset/Contents.json | 68 + .../AppIcon.appiconset/app_icon_1024.png | Bin 0 -> 46993 bytes .../AppIcon.appiconset/app_icon_128.png | Bin 0 -> 3276 bytes .../AppIcon.appiconset/app_icon_16.png | Bin 0 -> 1429 bytes .../AppIcon.appiconset/app_icon_256.png | Bin 0 -> 5933 bytes .../AppIcon.appiconset/app_icon_32.png | Bin 0 -> 1243 bytes .../AppIcon.appiconset/app_icon_512.png | Bin 0 -> 14800 bytes .../AppIcon.appiconset/app_icon_64.png | Bin 0 -> 1874 bytes .../macos/Runner/Base.lproj/MainMenu.xib | 339 + .../macos/Runner/Configs/AppInfo.xcconfig | 14 + .../macos/Runner/Configs/Debug.xcconfig | 2 + .../macos/Runner/Configs/Release.xcconfig | 2 + .../macos/Runner/Configs/Warnings.xcconfig | 13 + .../macos/Runner/DebugProfile.entitlements | 18 + .../macos/Runner/GoogleService-Info.plist | 38 + .../example/macos/Runner/Info.plist | 48 + .../macos/Runner/MainFlutterWindow.swift | 15 + .../example/macos/Runner/Release.entitlements | 14 + .../example/macos/firebase_app_id_file.json | 7 + .../firebase_auth-6.5.4/example/pubspec.yaml | 26 + .../example/web/favicon.png | Bin 0 -> 917 bytes .../example/web/icons/Icon-192.png | Bin 0 -> 5292 bytes .../example/web/icons/Icon-512.png | Bin 0 -> 8252 bytes .../example/web/icons/Icon-maskable-192.png | Bin 0 -> 5594 bytes .../example/web/icons/Icon-maskable-512.png | Bin 0 -> 20998 bytes .../example/web/index.html | 38 + .../example/web/manifest.json | 35 + .../example/windows/CMakeLists.txt | 102 + .../example/windows/flutter/CMakeLists.txt | 109 + .../example/windows/runner/CMakeLists.txt | 40 + .../example/windows/runner/Runner.rc | 121 + .../example/windows/runner/flutter_window.cpp | 68 + .../example/windows/runner/flutter_window.h | 39 + .../example/windows/runner/main.cpp | 46 + .../example/windows/runner/resource.h | 22 + .../windows/runner/resources/app_icon.ico | Bin 0 -> 33772 bytes .../windows/runner/runner.exe.manifest | 20 + .../example/windows/runner/utils.cpp | 69 + .../example/windows/runner/utils.h | 25 + .../example/windows/runner/win32_window.cpp | 284 + .../example/windows/runner/win32_window.h | 106 + .../ios/firebase_auth.podspec | 43 + .../ios/firebase_auth/Package.swift | 43 + .../FLTAuthStateChannelStreamHandler.m | 56 + .../firebase_auth/FLTFirebaseAuthPlugin.m | 2376 +++++++ .../FLTIdTokenChannelStreamHandler.m | 54 + .../FLTPhoneNumberVerificationStreamHandler.m | 98 + .../Sources/firebase_auth/PigeonParser.m | 171 + .../firebase_auth/firebase_auth_messages.g.m | 3005 +++++++++ .../FLTAuthStateChannelStreamHandler.h | 26 + .../Private/FLTIdTokenChannelStreamHandler.h | 27 + .../FLTPhoneNumberVerificationStreamHandler.h | 36 + .../include/Private/PigeonParser.h | 33 + .../include/Public/CustomPigeonHeader.h | 16 + .../include/Public/FLTFirebaseAuthPlugin.h | 45 + .../include/Public/firebase_auth_messages.g.h | 571 ++ .../lib/firebase_auth.dart | 72 + .../lib/src/confirmation_result.dart | 36 + .../lib/src/firebase_auth.dart | 893 +++ .../lib/src/multi_factor.dart | 213 + .../lib/src/recaptcha_verifier.dart | 100 + .../firebase_auth-6.5.4/lib/src/user.dart | 685 ++ .../lib/src/user_credential.dart | 39 + .../macos/firebase_auth.podspec | 65 + .../macos/firebase_auth/Package.swift | 43 + .../FLTAuthStateChannelStreamHandler.m | 56 + .../firebase_auth/FLTFirebaseAuthPlugin.m | 2376 +++++++ .../FLTIdTokenChannelStreamHandler.m | 54 + .../FLTPhoneNumberVerificationStreamHandler.m | 98 + .../Sources/firebase_auth/PigeonParser.m | 171 + .../firebase_auth/firebase_auth_messages.g.m | 3005 +++++++++ .../FLTAuthStateChannelStreamHandler.h | 26 + .../Private/FLTIdTokenChannelStreamHandler.h | 27 + .../FLTPhoneNumberVerificationStreamHandler.h | 36 + .../include/Private/PigeonParser.h | 33 + .../include/Public/CustomPigeonHeader.h | 16 + .../include/Public/FLTFirebaseAuthPlugin.h | 45 + .../include/Public/firebase_auth_messages.g.h | 571 ++ .../firebase_auth-6.5.4/pubspec.yaml | 52 + .../test/firebase_auth_test.dart | 1382 ++++ .../firebase_auth-6.5.4/test/mock.dart | 40 + .../firebase_auth-6.5.4/test/user_test.dart | 571 ++ .../windows/CMakeLists.txt | 123 + .../windows/firebase_auth_plugin.cpp | 1341 ++++ .../windows/firebase_auth_plugin.h | 218 + .../windows/firebase_auth_plugin_c_api.cpp | 16 + .../firebase_auth_plugin_c_api.h | 29 + .../windows/messages.g.cpp | 5562 +++++++++++++++++ .../firebase_auth-6.5.4/windows/messages.g.h | 1531 +++++ .../windows/plugin_version.h.in | 13 + .../test/firebase_auth_plugin_test.cpp | 47 + .../google_mobile_ads-8.0.0/CHANGELOG.md | 695 ++ .../google_mobile_ads-8.0.0/LICENSE | 202 + .../google_mobile_ads-8.0.0/README.md | 33 + .../android/build.gradle | 77 + .../android/gradle.properties | 15 + .../gradle/gradle-daemon-jvm.properties | 12 + .../gradle/wrapper/gradle-wrapper.properties | 6 + .../android/settings.gradle | 1 + .../android/src/main/AndroidManifest.xml | 9 + .../nativetemplates/NativeTemplateStyle.java | 272 + .../ads/nativetemplates/TemplateView.java | 295 + .../googlemobileads/AdInstanceManager.java | 245 + .../googlemobileads/AdMessageCodec.java | 484 ++ .../googlemobileads/AppStateNotifier.java | 94 + .../googlemobileads/BannerAdCreator.java | 40 + .../plugins/googlemobileads/Constants.java | 27 + .../FluidAdManagerBannerAd.java | 125 + .../plugins/googlemobileads/FlutterAd.java | 388 ++ .../googlemobileads/FlutterAdListener.java | 112 + .../googlemobileads/FlutterAdLoader.java | 140 + .../FlutterAdManagerAdRequest.java | 163 + .../FlutterAdManagerBannerAd.java | 131 + .../FlutterAdManagerInterstitialAd.java | 143 + .../googlemobileads/FlutterAdRequest.java | 359 ++ .../googlemobileads/FlutterAdSize.java | 200 + .../googlemobileads/FlutterAdValue.java | 30 + .../googlemobileads/FlutterAdapterStatus.java | 88 + .../googlemobileads/FlutterAppOpenAd.java | 130 + .../googlemobileads/FlutterBannerAd.java | 102 + .../googlemobileads/FlutterDestroyableAd.java | 22 + .../FlutterFullScreenContentCallback.java | 60 + .../FlutterInitializationStatus.java | 44 + .../FlutterInterstitialAd.java | 119 + .../FlutterMediationExtras.java | 68 + .../FlutterMobileAdsWrapper.java | 93 + .../googlemobileads/FlutterNativeAd.java | 273 + .../FlutterNativeAdOptions.java | 68 + .../FlutterPaidEventListener.java | 38 + .../googlemobileads/FlutterPlatformView.java | 40 + .../FlutterRequestAgentProvider.java | 71 + .../googlemobileads/FlutterRewardedAd.java | 213 + .../FlutterRewardedInterstitialAd.java | 187 + .../FlutterServerSideVerificationOptions.java | 57 + .../googlemobileads/FlutterVideoOptions.java | 49 + .../GoogleMobileAdsPlugin.java | 724 +++ .../GoogleMobileAdsViewFactory.java | 99 + .../MediationNetworkExtrasProvider.java | 54 + .../FlutterNativeTemplateFontStyle.java | 47 + .../FlutterNativeTemplateStyle.java | 180 + .../FlutterNativeTemplateTextStyle.java | 82 + .../FlutterNativeTemplateType.java | 41 + .../ConsentDebugSettingsWrapper.java | 77 + .../ConsentRequestParametersWrapper.java | 74 + .../UserMessagingCodec.java | 124 + .../UserMessagingPlatformManager.java | 237 + .../main/res/drawable/gnt_outline_shape.xml | 6 + .../drawable/gnt_rounded_corners_shape.xml | 17 + .../res/layout/gnt_medium_template_view.xml | 231 + .../res/layout/gnt_small_template_view.xml | 189 + .../layout/medium_template_view_layout.xml | 8 + .../res/layout/small_template_view_layout.xml | 8 + .../android/src/main/res/values/attrs.xml | 7 + .../android/src/main/res/values/colors.xml | 13 + .../android/src/main/res/values/dimens.xml | 21 + .../googlemobileads/AdMessageCodecTest.java | 547 ++ .../FluidAdManagerBannerAdTest.java | 202 + .../FlutterAdManagerAdRequestTest.java | 111 + .../FlutterAdManagerBannerAdTest.java | 184 + .../FlutterAdManagerInterstitialAdTest.java | 284 + .../googlemobileads/FlutterAdRequestTest.java | 96 + .../googlemobileads/FlutterAppOpenAdTest.java | 458 ++ .../googlemobileads/FlutterBannerAdTest.java | 182 + .../FlutterInterstitialAdTest.java | 233 + .../FlutterNativeAdOptionsTest.java | 64 + .../googlemobileads/FlutterNativeAdTest.java | 375 ++ .../FlutterRequestAgentProviderTest.java | 118 + .../FlutterRewardedAdTest.java | 373 ++ .../FlutterRewardedInterstitialAdTest.java | 393 ++ .../FlutterVideoOptionsTest.java | 50 + .../googlemobileads/GoogleMobileAdsTest.java | 1035 +++ .../FlutterNativeTemplateFontStyleTest.java | 40 + .../FlutterNativeTemplateStyleTest.java | 215 + .../FlutterNativeTemplateTextStyleTest.java | 42 + .../FlutterNativeTemplateTypeTest.java | 40 + .../UserMessagingCodecTest.java | 146 + .../UserMessagingPlatformManagerTest.java | 364 ++ .../google_mobile_ads-8.0.0/example/README.md | 8 + .../example/analysis_options.yaml | 15 + .../example/android/app/build.gradle | 70 + .../android/app/src/main/AndroidManifest.xml | 23 + .../googlemobileadsexample/MainActivity.java | 34 + .../NativeAdFactoryExample.java | 114 + .../app/src/main/res/layout/my_native_ad.xml | 131 + .../src/main/res/mipmap-hdpi/ic_launcher.png | Bin 0 -> 544 bytes .../src/main/res/mipmap-mdpi/ic_launcher.png | Bin 0 -> 442 bytes .../src/main/res/mipmap-xhdpi/ic_launcher.png | Bin 0 -> 721 bytes .../main/res/mipmap-xxhdpi/ic_launcher.png | Bin 0 -> 1031 bytes .../main/res/mipmap-xxxhdpi/ic_launcher.png | Bin 0 -> 1443 bytes .../example/android/build.gradle | 18 + .../example/android/gradle.properties | 3 + .../gradle/wrapper/gradle-wrapper.properties | 6 + .../example/android/settings.gradle | 25 + .../ios/Flutter/AppFrameworkInfo.plist | 28 + .../example/ios/Flutter/Debug.xcconfig | 3 + .../example/ios/Flutter/Release.xcconfig | 3 + .../example/ios/Podfile | 46 + .../ios/Runner.xcodeproj/project.pbxproj | 822 +++ .../contents.xcworkspacedata | 7 + .../xcshareddata/swiftpm/Package.resolved | 23 + .../xcshareddata/xcschemes/Runner.xcscheme | 112 + .../contents.xcworkspacedata | 10 + .../xcshareddata/swiftpm/Package.resolved | 23 + .../example/ios/Runner/AppDelegate.h | 20 + .../example/ios/Runner/AppDelegate.m | 88 + .../AppIcon.appiconset/Contents.json | 121 + .../AppIcon.appiconset/Icon-App-20x20@1x.png | Bin 0 -> 564 bytes .../AppIcon.appiconset/Icon-App-20x20@2x.png | Bin 0 -> 1283 bytes .../AppIcon.appiconset/Icon-App-20x20@3x.png | Bin 0 -> 1588 bytes .../AppIcon.appiconset/Icon-App-29x29@1x.png | Bin 0 -> 1025 bytes .../AppIcon.appiconset/Icon-App-29x29@2x.png | Bin 0 -> 1716 bytes .../AppIcon.appiconset/Icon-App-29x29@3x.png | Bin 0 -> 1920 bytes .../AppIcon.appiconset/Icon-App-40x40@1x.png | Bin 0 -> 1283 bytes .../AppIcon.appiconset/Icon-App-40x40@2x.png | Bin 0 -> 1895 bytes .../AppIcon.appiconset/Icon-App-40x40@3x.png | Bin 0 -> 2665 bytes .../AppIcon.appiconset/Icon-App-60x60@2x.png | Bin 0 -> 2665 bytes .../AppIcon.appiconset/Icon-App-60x60@3x.png | Bin 0 -> 3831 bytes .../AppIcon.appiconset/Icon-App-76x76@1x.png | Bin 0 -> 1888 bytes .../AppIcon.appiconset/Icon-App-76x76@2x.png | Bin 0 -> 3294 bytes .../Icon-App-83.5x83.5@2x.png | Bin 0 -> 3612 bytes .../Runner/Base.lproj/LaunchScreen.storyboard | 27 + .../ios/Runner/Base.lproj/Main.storyboard | 26 + .../example/ios/Runner/Info.plist | 85 + .../example/ios/Runner/NativeAdView.xib | 149 + .../example/ios/Runner/main.m | 24 + .../ios/RunnerTests/FLTAdRequestTest.m | 145 + .../example/ios/RunnerTests/FLTAdUtilTest.m | 97 + .../ios/RunnerTests/FLTAppOpenAdTest.m | 185 + .../example/ios/RunnerTests/FLTBannerAdTest.m | 126 + .../ios/RunnerTests/FLTFluidGAMBannerAdTest.m | 204 + .../ios/RunnerTests/FLTGAMAdRequestTest.m | 152 + .../ios/RunnerTests/FLTGAMBannerAdTest.m | 137 + .../RunnerTests/FLTGamInterstitialAdTest.m | 173 + .../FLTGoogleMobileAdsPluginMethodCallsTest.m | 712 +++ .../FLTGoogleMobileAdsReaderWriterTest.m | 816 +++ .../ios/RunnerTests/FLTGoogleMobileAdsTest.m | 472 ++ .../ios/RunnerTests/FLTInterstitialAdTest.m | 154 + .../example/ios/RunnerTests/FLTNativeAdTest.m | 197 + .../ios/RunnerTests/FLTRewardedAdTest.m | 239 + .../FLTRewardedInterstitialAdTest.m | 232 + .../FLTUserMessagingPlatformManagerTest.m | 454 ++ ...FLTUserMessagingPlatformReaderWriterTest.m | 115 + .../FLTNativeTemplateColorTest.m | 41 + .../FLTNativeTemplateFontStyleTest.m | 38 + .../FLTNativeTemplateStyleTest.m | 222 + .../FLTNativeTemplateTextStyleTest.m | 148 + .../FLTNativeTemplateTypeTest.m | 42 + .../google_mobile_ads_exampleTests/Info.plist | 22 + .../lib/anchored_adaptive_example.dart | 146 + .../example/lib/constants.dart | 30 + .../example/lib/fluid_example.dart | 102 + .../example/lib/inline_adaptive_example.dart | 154 + .../example/lib/main.dart | 388 ++ ..._adaptive_inline_with_recycle_example.dart | 148 + .../example/lib/native_template_example.dart | 106 + .../example/lib/reusable_inline_example.dart | 163 + .../lib/snippets/banner_ad_snippets.dart | 79 + .../snippets/interstitial_ad_snippets.dart | 112 + .../lib/snippets/rewarded_ad_snippets.dart | 152 + .../rewarded_interstitial_ad_snippets.dart | 153 + .../example/lib/webview_example.dart | 77 + .../example/pubspec.yaml | 37 + .../ios/google_mobile_ads.podspec | 31 + .../ios/google_mobile_ads/Package.swift | 34 + .../FLTAdInstanceManager_Internal.m | 259 + .../Sources/google_mobile_ads/FLTAdUtil.m | 58 + .../google_mobile_ads/FLTAd_Internal.m | 1407 +++++ .../google_mobile_ads/FLTAppStateNotifier.m | 142 + .../FLTGoogleMobileAdsCollection_Internal.m | 70 + .../FLTGoogleMobileAdsPlugin.m | 592 ++ .../FLTGoogleMobileAdsReaderWriter_Internal.m | 532 ++ .../google_mobile_ads/FLTMobileAds_Internal.m | 61 + .../Sources/google_mobile_ads/FLTNSString.m | 24 + .../GADTFullScreenTemplateView.m | 30 + .../GADTMediumTemplateView.m | 29 + .../GADTSmallTemplateView.m | 30 + .../GADTTemplateView.m | 326 + .../NativeTemplates/FLTNativeTemplateColor.m | 45 + .../FLTNativeTemplateFontStyle.m | 45 + .../NativeTemplates/FLTNativeTemplateStyle.m | 157 + .../FLTNativeTemplateTextStyle.m | 67 + .../NativeTemplates/FLTNativeTemplateType.m | 69 + .../Resources/GADTFullScreenTemplateView.xib | 134 + .../Resources/GADTMediumTemplateView.xib | 192 + .../Resources/GADTSmallTemplateView.xib | 121 + .../FLTUserMessagingPlatformManager.m | 180 + .../FLTUserMessagingPlatformReaderWriter.m | 138 + .../FLTAdInstanceManager_Internal.h | 74 + .../include/google_mobile_ads/FLTAdUtil.h | 31 + .../google_mobile_ads/FLTAd_Internal.h | 319 + .../google_mobile_ads/FLTAppStateNotifier.h | 22 + .../include/google_mobile_ads/FLTConstants.h | 16 + .../FLTGoogleMobileAdsCollection_Internal.h | 29 + .../FLTGoogleMobileAdsPlugin.h | 111 + .../FLTGoogleMobileAdsReaderWriter_Internal.h | 38 + .../google_mobile_ads/FLTMediationExtras.h | 35 + .../FLTMediationNetworkExtrasProvider.h | 42 + .../google_mobile_ads/FLTMobileAds_Internal.h | 57 + .../include/google_mobile_ads/FLTNSString.h | 22 + .../FLTNativeTemplateColor.h | 34 + .../FLTNativeTemplateFontStyle.h | 36 + .../FLTNativeTemplateStyle.h | 58 + .../FLTNativeTemplateTextStyle.h | 35 + .../google_mobile_ads/FLTNativeTemplateType.h | 27 + .../FLTUserMessagingPlatformManager.h | 29 + .../FLTUserMessagingPlatformReaderWriter.h | 24 + .../GADTFullScreenTemplateView.h | 21 + .../GADTMediumTemplateView.h | 23 + .../google_mobile_ads/GADTSmallTemplateView.h | 22 + .../google_mobile_ads/GADTTemplateView.h | 114 + .../lib/google_mobile_ads.dart | 28 + .../lib/src/ad_containers.dart | 1663 +++++ .../lib/src/ad_inspector_containers.dart | 31 + .../lib/src/ad_instance_manager.dart | 1488 +++++ .../lib/src/ad_listeners.dart | 325 + .../src/app_background_event_notifier.dart | 63 + .../lib/src/mediation_extras.dart | 39 + .../lib/src/mobile_ads.dart | 186 + .../native_template_font_style.dart | 28 + .../native_template_style.dart | 85 + .../native_template_text_style.dart | 51 + .../src/nativetemplates/template_type.dart | 22 + .../lib/src/request_configuration.dart | 105 + .../lib/src/ump/consent_form.dart | 71 + .../lib/src/ump/consent_form_impl.dart | 43 + .../lib/src/ump/consent_information.dart | 85 + .../lib/src/ump/consent_information_impl.dart | 61 + .../src/ump/consent_request_parameters.dart | 86 + .../lib/src/ump/form_error.dart | 43 + .../lib/src/ump/user_messaging_channel.dart | 200 + .../lib/src/ump/user_messaging_codec.dart | 88 + .../lib/src/webview_controller_util.dart | 35 + .../google_mobile_ads-8.0.0/pubspec.yaml | 52 + .../test/ad_containers_test.dart | 1573 +++++ .../test/admanager_banner_ad_test.dart | 360 ++ .../test/app_open_test.dart | 292 + .../test/banner_ad_test.dart | 380 ++ .../test/fluid_ad_test.dart | 268 + .../test/mobile_ads_test.dart | 638 ++ .../test/mobile_ads_test.mocks.dart | 754 +++ .../test/rewarded_interstitial_ad_test.dart | 519 ++ .../test/test_util.dart | 47 + .../test/ump/consent_form_impl_test.dart | 80 + .../ump/consent_form_impl_test.mocks.dart | 140 + .../test/ump/consent_form_test.dart | 133 + .../test/ump/consent_form_test.mocks.dart | 147 + .../ump/consent_information_impl_test.dart | 140 + .../consent_information_impl_test.mocks.dart | 140 + .../test/ump/user_messaging_channel_test.dart | 460 ++ .../test/ump/user_messaging_codec_test.dart | 84 + ...ins=1OJSG6M1FOV3XYQCBH7Z29RZ0FPR9XDE1-json | 1 + ...hash=046b943ca2c386252fefb70091df62cb-json | 1 + ...hash=091b7b21a80cde9e2510d4e82d4cbd78-json | 1 + ...hash=0a63255185fd1fe5f5bce3e3d92075cc-json | 1 + ...hash=0b58e1096693d1b2f665847f3d6ed644-json | 1 + ...hash=0b5c502676ea77f04ab6ea7a2e8956d9-json | 1 + ...hash=110600b415fe8fc7dd4ca8c0f3c4e215-json | 1 + ...hash=1140ca82d597cd38dc60054d3a158f68-json | 1 + ...hash=14b6e6d9e2eda3680623b9cb266fb1b3-json | 1 + ...hash=1a4fe29d3cb9f9220793e4797839ee1f-json | 1 + ...hash=1abbdfc13b53a75a94289fd5712275b6-json | 1 + ...hash=1e4d2a3be90cd0a545f0c49cf9dce02c-json | 1 + ...hash=1f36083119fed8be641437f19af66acc-json | 1 + ...hash=2044c736a22918f3a12ecb44d3e0c006-json | 1 + ...hash=211721151cd848f04aa31d195dc75f4a-json | 1 + ...hash=218c90a1920c10390be2408439f5191f-json | 1 + ...hash=25067fd2852a0fd76a8f9f479b2d4630-json | 1 + ...hash=35adaf1be68b319de0505ded2815bc62-json | 1 + ...hash=376189dccaae382545d5e718c59412f6-json | 1 + ...hash=3a7fbdb39c618b52ee7b40baa1e884b1-json | 1 + ...hash=3af0402199bd31e72f681872a46f8b81-json | 1 + ...hash=46e4fdabe3969081354e9e5e60b64b4b-json | 1 + ...hash=4b924fd5a51dd455efd4e7fe9f2f3ae9-json | 1 + ...hash=4cabd0c48a00d7a4ed741cb699f1cc8e-json | 1 + ...hash=4cc1f6e212912d53710de3aa08e4aa3c-json | 1 + ...hash=4d623afd122ecb9d6d730809785df91d-json | 1 + ...hash=5248d9ba098cf8d77d31b3cf7f8b5a69-json | 1 + ...hash=525a617ce5cf51a2c10a01508fbe4adf-json | 1 + ...hash=5319ba36858c0aa8d085cf090833a92c-json | 1 + ...hash=558846d52469eb6457f7fa805fbcac19-json | 1 + ...hash=55e76bc78bd49d51860d689a4f5e9c62-json | 1 + ...hash=5815137460cbcfbe6d2f7a5b54b4ca09-json | 1 + ...hash=5b871dc0aeb742795842305fce24cf10-json | 1 + ...hash=5bd0bad9e37ac0efe7eb7e9b6a040622-json | 1 + ...hash=61f30aa6dfaff3adeef504cd04583578-json | 1 + ...hash=6a019aebe92f33ef6d2d1a27354a274c-json | 1 + ...hash=6fb30a1c5b3e857d561640581873eb18-json | 1 + ...hash=754922e16fd2edb654ed183d0b9ffc4e-json | 1 + ...hash=76c81320e671cd52e5aa73c6af313230-json | 1 + ...hash=7aa8351d9b24919942e9946725aa9a4e-json | 1 + ...hash=7b3186407410bb111b40b5143ff956ed-json | 1 + ...hash=7c10b1b705eef3cc27b008fa5df200ca-json | 1 + ...hash=7dc9dce1405849bf477070cc9de38aed-json | 1 + ...hash=8078b8651d861575cd929af1542b7261-json | 1 + ...hash=8d133a19301914cd8e6a4b60878e87a2-json | 1 + ...hash=98c62b097118c3a71fbcc1ac381d0554-json | 1 + ...hash=a067526aa1156f18ea027d11109a29d4-json | 1 + ...hash=a1626071b7e4461b7a78f87d063ecc17-json | 1 + ...hash=a6be57b3049abd7b9f2b4e20f4ba91af-json | 1 + ...hash=a771b9f79fd75fad08749ef861b3bddf-json | 1 + ...hash=aa56745ff0f6a68146d6117b991ff12e-json | 1 + ...hash=ab724a4a507acc9a546958f9aaaa80fd-json | 1 + ...hash=b02384d9efc0e497521a0ba9096939bd-json | 1 + ...hash=b77db6430f49f02a32943c46bd03734b-json | 1 + ...hash=bca7282312c3cbd6420517c0b06b2299-json | 1 + ...hash=bec8a7e752ab7d5daa41943969c542ce-json | 1 + ...hash=c1be6d82376acb043052cbc000a547ae-json | 1 + ...hash=c369ca2358afe46d56e9c4f067675637-json | 1 + ...hash=c57ff86689b99a8853e2ae591b9ac8c6-json | 1 + ...hash=c5e74116acf786c1a12c0ae36c3b648b-json | 1 + ...hash=c7e279690d57f8e9617670c2dd8215da-json | 1 + ...hash=c832b6797055a73fc2a937f2ace5a80c-json | 1 + ...hash=cbb1eb454f498b998b145ed6dace7d98-json | 1 + ...hash=cc4efb059f8f4ef111f94e7221f71ad1-json | 1 + ...hash=cc9ef9cfbfe34cf5230700b7d8fcc951-json | 1 + ...hash=cccb0eb2cb0393abaa5f1f05d755160e-json | 1 + ...hash=cf214d336cf673b4a25ba8952e58ad2f-json | 1 + ...hash=d014b307105d5d21e3d383fba60d7745-json | 1 + ...hash=d1efbd94e043870162f1a431e0d81426-json | 1 + ...hash=d204a2d23a6add831c951cc6c525c071-json | 1 + ...hash=d360bbd5e759c5936a6004b5766066e3-json | 1 + ...hash=d560c2e797b744ca35425688afeb9717-json | 1 + ...hash=d5f04c64bab0734f1ab47fd9bcf15bc4-json | 1 + ...hash=d67c7fe50f94aa30e853cef078cfecc9-json | 1 + ...hash=d6e43cdf0cbce99338da86c88c7a9b38-json | 1 + ...hash=dbb0219d17436c670986b94b7945fa23-json | 1 + ...hash=ddbefab0336a5b7a75af7835b2eb8ae3-json | 1 + ...hash=de9cdf72fffe1fdedbf989540b2a67e3-json | 1 + ...hash=dfe05d0a1a29529d21d126a4eec3834c-json | 1 + ...hash=e04e9400c66a280cff3815703b38f084-json | 1 + ...hash=e48e30a0663eeb6ce1b0165ff162002a-json | 1 + ...hash=eb424d111b233087eeb27f0dcd5e1868-json | 1 + ...hash=eb71d09d11dfb3cc8ccae98e4e65ea84-json | 1 + ...hash=ebe021611ae425ec05c93c24ce7a6607-json | 1 + ...hash=ec851e59095ec5bf084fefcd5588ef75-json | 1 + ...hash=f3bbe05679242975dafb6d8e69ca7557-json | 1 + ...hash=f8fcc6d355b2806d43f663daae6a06d4-json | 1 + ...hash=fbb75b67977f7fd3136c2c9e82b06c66-json | 1 + ...hash=ff36872ab1512227359a12a6bdfb005a-json | 1 + ...hash=ff5000f2df75d09390a7c02a18cf47cb-json | 1 + ...hash=ff93596a3d92ba01970679242c7f2f1b-json | 1 + ...ects=d4d37871a9d2a6dba5291c9ce70cda86-json | 1 + .../firebase_app_check-0.4.5/CHANGELOG.md | 576 ++ .../firebase_app_check-0.4.5/LICENSE | 27 + .../firebase_app_check-0.4.5/README.md | 24 + .../android/build.gradle | 94 + .../android/gradle.properties | 2 + .../gradle/wrapper/gradle-wrapper.properties | 5 + .../android/local-config.gradle | 7 + .../android/settings.gradle | 10 + .../android/src/main/AndroidManifest.xml | 9 + .../appcheck/FirebaseAppCheckPlugin.kt | 161 + .../appcheck/FlutterFirebaseAppRegistrar.kt | 37 + .../GeneratedAndroidFirebaseAppCheck.g.kt | 223 + .../appcheck/TokenChannelStreamHandler.kt | 30 + .../android/user-agent.gradle | 22 + .../example/README.md | 8 + .../example/analysis_options.yaml | 10 + .../example/android/app/build.gradle | 65 + .../example/android/app/google-services.json | 615 ++ .../android/app/src/debug/AndroidManifest.xml | 7 + .../android/app/src/main/AndroidManifest.xml | 45 + .../firebase/appcheck/example/MainActivity.kt | 5 + .../res/drawable-v21/launch_background.xml | 12 + .../main/res/drawable/launch_background.xml | 12 + .../src/main/res/mipmap-hdpi/ic_launcher.png | Bin 0 -> 544 bytes .../src/main/res/mipmap-mdpi/ic_launcher.png | Bin 0 -> 442 bytes .../src/main/res/mipmap-xhdpi/ic_launcher.png | Bin 0 -> 721 bytes .../main/res/mipmap-xxhdpi/ic_launcher.png | Bin 0 -> 1031 bytes .../main/res/mipmap-xxxhdpi/ic_launcher.png | Bin 0 -> 1443 bytes .../app/src/main/res/values-night/styles.xml | 18 + .../app/src/main/res/values/styles.xml | 18 + .../app/src/profile/AndroidManifest.xml | 7 + .../example/android/build.gradle | 18 + .../example/android/gradle.properties | 4 + .../gradle/wrapper/gradle-wrapper.properties | 5 + .../example/android/settings.gradle | 28 + .../ios/Flutter/AppFrameworkInfo.plist | 24 + .../example/ios/Flutter/Debug.xcconfig | 2 + .../example/ios/Flutter/Release.xcconfig | 2 + .../example/ios/Podfile | 43 + .../ios/Runner.xcodeproj/project.pbxproj | 553 ++ .../contents.xcworkspacedata | 7 + .../xcshareddata/IDEWorkspaceChecks.plist | 8 + .../xcshareddata/WorkspaceSettings.xcsettings | 8 + .../xcshareddata/xcschemes/Runner.xcscheme | 114 + .../contents.xcworkspacedata | 10 + .../xcshareddata/IDEWorkspaceChecks.plist | 8 + .../xcshareddata/WorkspaceSettings.xcsettings | 8 + .../example/ios/Runner/AppDelegate.h | 6 + .../example/ios/Runner/AppDelegate.m | 16 + .../AppIcon.appiconset/Contents.json | 122 + .../Icon-App-1024x1024@1x.png | Bin 0 -> 10932 bytes .../AppIcon.appiconset/Icon-App-20x20@1x.png | Bin 0 -> 564 bytes .../AppIcon.appiconset/Icon-App-20x20@2x.png | Bin 0 -> 1283 bytes .../AppIcon.appiconset/Icon-App-20x20@3x.png | Bin 0 -> 1588 bytes .../AppIcon.appiconset/Icon-App-29x29@1x.png | Bin 0 -> 1025 bytes .../AppIcon.appiconset/Icon-App-29x29@2x.png | Bin 0 -> 1716 bytes .../AppIcon.appiconset/Icon-App-29x29@3x.png | Bin 0 -> 1920 bytes .../AppIcon.appiconset/Icon-App-40x40@1x.png | Bin 0 -> 1283 bytes .../AppIcon.appiconset/Icon-App-40x40@2x.png | Bin 0 -> 1895 bytes .../AppIcon.appiconset/Icon-App-40x40@3x.png | Bin 0 -> 2665 bytes .../AppIcon.appiconset/Icon-App-60x60@2x.png | Bin 0 -> 2665 bytes .../AppIcon.appiconset/Icon-App-60x60@3x.png | Bin 0 -> 3831 bytes .../AppIcon.appiconset/Icon-App-76x76@1x.png | Bin 0 -> 1888 bytes .../AppIcon.appiconset/Icon-App-76x76@2x.png | Bin 0 -> 3294 bytes .../Icon-App-83.5x83.5@2x.png | Bin 0 -> 3612 bytes .../LaunchImage.imageset/Contents.json | 23 + .../LaunchImage.imageset/LaunchImage.png | Bin 0 -> 68 bytes .../LaunchImage.imageset/LaunchImage@2x.png | Bin 0 -> 68 bytes .../LaunchImage.imageset/LaunchImage@3x.png | Bin 0 -> 68 bytes .../LaunchImage.imageset/README.md | 5 + .../Runner/Base.lproj/LaunchScreen.storyboard | 37 + .../ios/Runner/Base.lproj/Main.storyboard | 26 + .../ios/Runner/GoogleService-Info.plist | 38 + .../example/ios/Runner/Info.plist | 70 + .../example/ios/Runner/Runner.entitlements | 8 + .../ios/Runner/RunnerRelease.entitlements | 8 + .../example/ios/Runner/main.m | 9 + .../example/ios/firebase_app_id_file.json | 7 + .../example/lib/firebase_options.dart | 98 + .../example/lib/main.dart | 249 + .../macos/Flutter/Flutter-Debug.xcconfig | 2 + .../macos/Flutter/Flutter-Release.xcconfig | 2 + .../example/macos/Podfile | 42 + .../macos/Runner.xcodeproj/project.pbxproj | 613 ++ .../xcshareddata/IDEWorkspaceChecks.plist | 8 + .../xcshareddata/xcschemes/Runner.xcscheme | 105 + .../contents.xcworkspacedata | 10 + .../xcshareddata/IDEWorkspaceChecks.plist | 8 + .../example/macos/Runner/AppDelegate.swift | 13 + .../AppIcon.appiconset/Contents.json | 68 + .../AppIcon.appiconset/app_icon_1024.png | Bin 0 -> 46993 bytes .../AppIcon.appiconset/app_icon_128.png | Bin 0 -> 3276 bytes .../AppIcon.appiconset/app_icon_16.png | Bin 0 -> 1429 bytes .../AppIcon.appiconset/app_icon_256.png | Bin 0 -> 5933 bytes .../AppIcon.appiconset/app_icon_32.png | Bin 0 -> 1243 bytes .../AppIcon.appiconset/app_icon_512.png | Bin 0 -> 14800 bytes .../AppIcon.appiconset/app_icon_64.png | Bin 0 -> 1874 bytes .../macos/Runner/Base.lproj/MainMenu.xib | 339 + .../macos/Runner/Configs/AppInfo.xcconfig | 14 + .../macos/Runner/Configs/Debug.xcconfig | 2 + .../macos/Runner/Configs/Release.xcconfig | 2 + .../macos/Runner/Configs/Warnings.xcconfig | 13 + .../macos/Runner/DebugProfile.entitlements | 12 + .../macos/Runner/GoogleService-Info.plist | 38 + .../example/macos/Runner/Info.plist | 32 + .../macos/Runner/MainFlutterWindow.swift | 15 + .../example/macos/Runner/Release.entitlements | 5 + .../example/macos/firebase_app_id_file.json | 7 + .../example/pubspec.yaml | 21 + .../example/web/favicon.png | Bin 0 -> 917 bytes .../example/web/icons/Icon-192.png | Bin 0 -> 5292 bytes .../example/web/icons/Icon-512.png | Bin 0 -> 8252 bytes .../example/web/icons/Icon-maskable-192.png | Bin 0 -> 5594 bytes .../example/web/icons/Icon-maskable-512.png | Bin 0 -> 20998 bytes .../example/web/index.html | 41 + .../example/web/manifest.json | 35 + .../example/windows/CMakeLists.txt | 108 + .../example/windows/flutter/CMakeLists.txt | 109 + .../example/windows/runner/CMakeLists.txt | 40 + .../example/windows/runner/Runner.rc | 121 + .../example/windows/runner/flutter_window.cpp | 73 + .../example/windows/runner/flutter_window.h | 37 + .../example/windows/runner/main.cpp | 46 + .../example/windows/runner/resource.h | 20 + .../windows/runner/resources/app_icon.ico | Bin 0 -> 33772 bytes .../windows/runner/runner.exe.manifest | 14 + .../example/windows/runner/utils.cpp | 69 + .../example/windows/runner/utils.h | 23 + .../example/windows/runner/win32_window.cpp | 284 + .../example/windows/runner/win32_window.h | 104 + .../ios/firebase_app_check.podspec | 46 + .../ios/firebase_app_check/Package.swift | 41 + .../firebase_app_check/Constants.swift | 6 + .../FirebaseAppCheckMessages.g.swift | 236 + .../FirebaseAppCheckPlugin.swift | 369 ++ .../lib/firebase_app_check.dart | 34 + .../lib/src/firebase_app_check.dart | 156 + .../macos/firebase_app_check.podspec | 63 + .../macos/firebase_app_check/Package.swift | 36 + .../firebase_app_check/Constants.swift | 6 + .../FirebaseAppCheckMessages.g.swift | 236 + .../FirebaseAppCheckPlugin.swift | 369 ++ .../firebase_app_check-0.4.5/pubspec.yaml | 48 + .../test/firebase_app_check_test.dart | 79 + .../firebase_app_check-0.4.5/test/mock.dart | 35 + .../windows/CMakeLists.txt | 81 + .../windows/firebase_app_check_plugin.cpp | 249 + .../windows/firebase_app_check_plugin.h | 72 + .../firebase_app_check_plugin_c_api.cpp | 16 + .../firebase_app_check_plugin_c_api.h | 29 + .../windows/messages.g.cpp | 517 ++ .../windows/messages.g.h | 119 + .../windows/plugin_version.h.in | 13 + .../firebase_auth-6.5.4/CHANGELOG.md | 1613 +++++ .../firebase_auth-6.5.4/LICENSE | 27 + .../firebase_auth-6.5.4/README.md | 26 + .../firebase_auth-6.5.4/android/build.gradle | 66 + .../android/gradle.properties | 1 + .../gradle/wrapper/gradle-wrapper.properties | 5 + .../android/settings.gradle | 8 + .../android/src/main/AndroidManifest.xml | 9 + .../auth/AuthStateChannelStreamHandler.java | 63 + .../plugins/firebase/auth/Constants.java | 46 + .../auth/FlutterFirebaseAuthPlugin.java | 782 +++ .../FlutterFirebaseAuthPluginException.java | 157 + .../auth/FlutterFirebaseAuthRegistrar.java | 21 + .../auth/FlutterFirebaseAuthUser.java | 548 ++ .../auth/FlutterFirebaseMultiFactor.java | 252 + .../auth/FlutterFirebaseTotpMultiFactor.java | 82 + .../auth/FlutterFirebaseTotpSecret.java | 42 + .../auth/GeneratedAndroidFirebaseAuth.java | 5308 ++++++++++++++++ .../auth/IdTokenChannelStreamHandler.java | 63 + .../PhoneNumberVerificationStreamHandler.java | 197 + .../plugins/firebase/auth/PigeonParser.java | 382 ++ .../android/user-agent.gradle | 22 + .../firebase_auth-6.5.4/example/README.md | 58 + .../example/analysis_options.yaml | 7 + .../example/android/app/build.gradle | 62 + .../example/android/app/google-services.json | 615 ++ .../android/app/src/debug/AndroidManifest.xml | 7 + .../android/app/src/main/AndroidManifest.xml | 45 + .../firebase/auth/example/MainActivity.kt | 5 + .../res/drawable-v21/launch_background.xml | 12 + .../main/res/drawable/launch_background.xml | 12 + .../src/main/res/mipmap-hdpi/ic_launcher.png | Bin 0 -> 544 bytes .../src/main/res/mipmap-mdpi/ic_launcher.png | Bin 0 -> 442 bytes .../src/main/res/mipmap-xhdpi/ic_launcher.png | Bin 0 -> 721 bytes .../main/res/mipmap-xxhdpi/ic_launcher.png | Bin 0 -> 1031 bytes .../main/res/mipmap-xxxhdpi/ic_launcher.png | Bin 0 -> 1443 bytes .../app/src/main/res/values-night/styles.xml | 18 + .../app/src/main/res/values/styles.xml | 18 + .../app/src/profile/AndroidManifest.xml | 7 + .../example/android/build.gradle | 18 + .../example/android/gradle.properties | 3 + .../gradle/wrapper/gradle-wrapper.properties | 5 + .../example/android/settings.gradle | 28 + .../ios/Flutter/AppFrameworkInfo.plist | 30 + .../example/ios/Flutter/Debug.xcconfig | 2 + .../example/ios/Flutter/Release.xcconfig | 3 + .../firebase_auth-6.5.4/example/ios/Podfile | 48 + .../ios/Runner.xcodeproj/project.pbxproj | 700 +++ .../contents.xcworkspacedata | 7 + .../xcshareddata/IDEWorkspaceChecks.plist | 8 + .../xcshareddata/WorkspaceSettings.xcsettings | 8 + .../xcshareddata/xcschemes/Runner.xcscheme | 94 + .../contents.xcworkspacedata | 10 + .../xcshareddata/IDEWorkspaceChecks.plist | 8 + .../xcshareddata/WorkspaceSettings.xcsettings | 8 + .../example/ios/Runner/AppDelegate.h | 6 + .../example/ios/Runner/AppDelegate.m | 13 + .../example/ios/Runner/AppDelegate.swift | 13 + .../AppIcon.appiconset/Contents.json | 122 + .../Icon-App-1024x1024@1x.png | Bin 0 -> 10932 bytes .../AppIcon.appiconset/Icon-App-20x20@1x.png | Bin 0 -> 564 bytes .../AppIcon.appiconset/Icon-App-20x20@2x.png | Bin 0 -> 1283 bytes .../AppIcon.appiconset/Icon-App-20x20@3x.png | Bin 0 -> 1588 bytes .../AppIcon.appiconset/Icon-App-29x29@1x.png | Bin 0 -> 1025 bytes .../AppIcon.appiconset/Icon-App-29x29@2x.png | Bin 0 -> 1716 bytes .../AppIcon.appiconset/Icon-App-29x29@3x.png | Bin 0 -> 1920 bytes .../AppIcon.appiconset/Icon-App-40x40@1x.png | Bin 0 -> 1283 bytes .../AppIcon.appiconset/Icon-App-40x40@2x.png | Bin 0 -> 1895 bytes .../AppIcon.appiconset/Icon-App-40x40@3x.png | Bin 0 -> 2665 bytes .../AppIcon.appiconset/Icon-App-60x60@2x.png | Bin 0 -> 2665 bytes .../AppIcon.appiconset/Icon-App-60x60@3x.png | Bin 0 -> 3831 bytes .../AppIcon.appiconset/Icon-App-76x76@1x.png | Bin 0 -> 1888 bytes .../AppIcon.appiconset/Icon-App-76x76@2x.png | Bin 0 -> 3294 bytes .../Icon-App-83.5x83.5@2x.png | Bin 0 -> 3612 bytes .../LaunchImage.imageset/Contents.json | 23 + .../LaunchImage.imageset/LaunchImage.png | Bin 0 -> 68 bytes .../LaunchImage.imageset/LaunchImage@2x.png | Bin 0 -> 68 bytes .../LaunchImage.imageset/LaunchImage@3x.png | Bin 0 -> 68 bytes .../LaunchImage.imageset/README.md | 5 + .../Runner/Base.lproj/LaunchScreen.storyboard | 37 + .../ios/Runner/Base.lproj/Main.storyboard | 26 + .../ios/Runner/GoogleService-Info.plist | 38 + .../example/ios/Runner/Info.plist | 98 + .../ios/Runner/Runner-Bridging-Header.h | 1 + .../example/ios/Runner/Runner.entitlements | 14 + .../example/ios/Runner/main.m | 9 + .../example/ios/firebase_app_id_file.json | 7 + .../firebase_auth-6.5.4/example/lib/auth.dart | 748 +++ .../example/lib/firebase_options.dart | 98 + .../firebase_auth-6.5.4/example/lib/main.dart | 108 + .../example/lib/profile.dart | 391 ++ .../macos/Flutter/Flutter-Debug.xcconfig | 2 + .../macos/Flutter/Flutter-Release.xcconfig | 2 + .../firebase_auth-6.5.4/example/macos/Podfile | 40 + .../macos/Runner.xcodeproj/project.pbxproj | 718 +++ .../contents.xcworkspacedata | 7 + .../xcshareddata/IDEWorkspaceChecks.plist | 8 + .../xcshareddata/xcschemes/Runner.xcscheme | 120 + .../contents.xcworkspacedata | 10 + .../xcshareddata/IDEWorkspaceChecks.plist | 8 + .../xcshareddata/WorkspaceSettings.xcsettings | 8 + .../example/macos/Runner/AppDelegate.swift | 13 + .../AppIcon.appiconset/Contents.json | 68 + .../AppIcon.appiconset/app_icon_1024.png | Bin 0 -> 46993 bytes .../AppIcon.appiconset/app_icon_128.png | Bin 0 -> 3276 bytes .../AppIcon.appiconset/app_icon_16.png | Bin 0 -> 1429 bytes .../AppIcon.appiconset/app_icon_256.png | Bin 0 -> 5933 bytes .../AppIcon.appiconset/app_icon_32.png | Bin 0 -> 1243 bytes .../AppIcon.appiconset/app_icon_512.png | Bin 0 -> 14800 bytes .../AppIcon.appiconset/app_icon_64.png | Bin 0 -> 1874 bytes .../macos/Runner/Base.lproj/MainMenu.xib | 339 + .../macos/Runner/Configs/AppInfo.xcconfig | 14 + .../macos/Runner/Configs/Debug.xcconfig | 2 + .../macos/Runner/Configs/Release.xcconfig | 2 + .../macos/Runner/Configs/Warnings.xcconfig | 13 + .../macos/Runner/DebugProfile.entitlements | 18 + .../macos/Runner/GoogleService-Info.plist | 38 + .../example/macos/Runner/Info.plist | 48 + .../macos/Runner/MainFlutterWindow.swift | 15 + .../example/macos/Runner/Release.entitlements | 14 + .../example/macos/firebase_app_id_file.json | 7 + .../firebase_auth-6.5.4/example/pubspec.yaml | 26 + .../example/web/favicon.png | Bin 0 -> 917 bytes .../example/web/icons/Icon-192.png | Bin 0 -> 5292 bytes .../example/web/icons/Icon-512.png | Bin 0 -> 8252 bytes .../example/web/icons/Icon-maskable-192.png | Bin 0 -> 5594 bytes .../example/web/icons/Icon-maskable-512.png | Bin 0 -> 20998 bytes .../example/web/index.html | 38 + .../example/web/manifest.json | 35 + .../example/windows/CMakeLists.txt | 102 + .../example/windows/flutter/CMakeLists.txt | 109 + .../example/windows/runner/CMakeLists.txt | 40 + .../example/windows/runner/Runner.rc | 121 + .../example/windows/runner/flutter_window.cpp | 68 + .../example/windows/runner/flutter_window.h | 39 + .../example/windows/runner/main.cpp | 46 + .../example/windows/runner/resource.h | 22 + .../windows/runner/resources/app_icon.ico | Bin 0 -> 33772 bytes .../windows/runner/runner.exe.manifest | 20 + .../example/windows/runner/utils.cpp | 69 + .../example/windows/runner/utils.h | 25 + .../example/windows/runner/win32_window.cpp | 284 + .../example/windows/runner/win32_window.h | 106 + .../ios/firebase_auth.podspec | 43 + .../ios/firebase_auth/Package.swift | 43 + .../FLTAuthStateChannelStreamHandler.m | 56 + .../firebase_auth/FLTFirebaseAuthPlugin.m | 2376 +++++++ .../FLTIdTokenChannelStreamHandler.m | 54 + .../FLTPhoneNumberVerificationStreamHandler.m | 98 + .../Sources/firebase_auth/PigeonParser.m | 171 + .../firebase_auth/firebase_auth_messages.g.m | 3005 +++++++++ .../FLTAuthStateChannelStreamHandler.h | 26 + .../Private/FLTIdTokenChannelStreamHandler.h | 27 + .../FLTPhoneNumberVerificationStreamHandler.h | 36 + .../include/Private/PigeonParser.h | 33 + .../include/Public/CustomPigeonHeader.h | 16 + .../include/Public/FLTFirebaseAuthPlugin.h | 45 + .../include/Public/firebase_auth_messages.g.h | 571 ++ .../lib/firebase_auth.dart | 72 + .../lib/src/confirmation_result.dart | 36 + .../lib/src/firebase_auth.dart | 893 +++ .../lib/src/multi_factor.dart | 213 + .../lib/src/recaptcha_verifier.dart | 100 + .../firebase_auth-6.5.4/lib/src/user.dart | 685 ++ .../lib/src/user_credential.dart | 39 + .../macos/firebase_auth.podspec | 65 + .../macos/firebase_auth/Package.swift | 43 + .../FLTAuthStateChannelStreamHandler.m | 56 + .../firebase_auth/FLTFirebaseAuthPlugin.m | 2376 +++++++ .../FLTIdTokenChannelStreamHandler.m | 54 + .../FLTPhoneNumberVerificationStreamHandler.m | 98 + .../Sources/firebase_auth/PigeonParser.m | 171 + .../firebase_auth/firebase_auth_messages.g.m | 3005 +++++++++ .../FLTAuthStateChannelStreamHandler.h | 26 + .../Private/FLTIdTokenChannelStreamHandler.h | 27 + .../FLTPhoneNumberVerificationStreamHandler.h | 36 + .../include/Private/PigeonParser.h | 33 + .../include/Public/CustomPigeonHeader.h | 16 + .../include/Public/FLTFirebaseAuthPlugin.h | 45 + .../include/Public/firebase_auth_messages.g.h | 571 ++ .../firebase_auth-6.5.4/pubspec.yaml | 52 + .../test/firebase_auth_test.dart | 1382 ++++ .../firebase_auth-6.5.4/test/mock.dart | 40 + .../firebase_auth-6.5.4/test/user_test.dart | 571 ++ .../windows/CMakeLists.txt | 123 + .../windows/firebase_auth_plugin.cpp | 1341 ++++ .../windows/firebase_auth_plugin.h | 218 + .../windows/firebase_auth_plugin_c_api.cpp | 16 + .../firebase_auth_plugin_c_api.h | 29 + .../windows/messages.g.cpp | 5562 +++++++++++++++++ .../firebase_auth-6.5.4/windows/messages.g.h | 1531 +++++ .../windows/plugin_version.h.in | 13 + .../test/firebase_auth_plugin_test.cpp | 47 + .../reports/problems/problems-report.html | 4 +- .../gradle/wrapper/gradle-wrapper.properties | 2 +- mih_ui/android/settings.gradle.kts | 6 +- mih_ui/android_build_logs.txt | 399 ++ mih_ui/ios/Runner.xcodeproj/project.pbxproj | 22 + .../xcshareddata/swiftpm/Package.resolved | 149 + .../xcshareddata/xcschemes/Runner.xcscheme | 18 + mih_ui/lib/main_prod.dart | 45 +- .../mih_circle_avatar.dart | 3 +- .../mih_image_display.dart | 3 +- .../package_tools/mih_business_qr_code.dart | 5 +- .../package_tools/mih_personal_qr_code.dart | 8 +- .../package_tools/patient_documents.dart | 4 +- mih_ui/lib/mih_providers/ollama_provider.dart | 95 +- .../flutter/generated_plugin_registrant.cc | 4 + mih_ui/linux/flutter/generated_plugins.cmake | 1 + mih_ui/pubspec.lock | 256 +- mih_ui/pubspec.yaml | 26 +- 1062 files changed, 143083 insertions(+), 221 deletions(-) create mode 100644 mih_ui/android/build/ios/SourcePackages/firebase_app_check-0.4.5/CHANGELOG.md create mode 100644 mih_ui/android/build/ios/SourcePackages/firebase_app_check-0.4.5/LICENSE create mode 100644 mih_ui/android/build/ios/SourcePackages/firebase_app_check-0.4.5/README.md create mode 100644 mih_ui/android/build/ios/SourcePackages/firebase_app_check-0.4.5/android/build.gradle create mode 100644 mih_ui/android/build/ios/SourcePackages/firebase_app_check-0.4.5/android/gradle.properties create mode 100644 mih_ui/android/build/ios/SourcePackages/firebase_app_check-0.4.5/android/gradle/wrapper/gradle-wrapper.properties create mode 100644 mih_ui/android/build/ios/SourcePackages/firebase_app_check-0.4.5/android/local-config.gradle create mode 100644 mih_ui/android/build/ios/SourcePackages/firebase_app_check-0.4.5/android/settings.gradle create mode 100644 mih_ui/android/build/ios/SourcePackages/firebase_app_check-0.4.5/android/src/main/AndroidManifest.xml create mode 100644 mih_ui/android/build/ios/SourcePackages/firebase_app_check-0.4.5/android/src/main/kotlin/io/flutter/plugins/firebase/appcheck/FirebaseAppCheckPlugin.kt create mode 100644 mih_ui/android/build/ios/SourcePackages/firebase_app_check-0.4.5/android/src/main/kotlin/io/flutter/plugins/firebase/appcheck/FlutterFirebaseAppRegistrar.kt create mode 100644 mih_ui/android/build/ios/SourcePackages/firebase_app_check-0.4.5/android/src/main/kotlin/io/flutter/plugins/firebase/appcheck/GeneratedAndroidFirebaseAppCheck.g.kt create mode 100644 mih_ui/android/build/ios/SourcePackages/firebase_app_check-0.4.5/android/src/main/kotlin/io/flutter/plugins/firebase/appcheck/TokenChannelStreamHandler.kt create mode 100644 mih_ui/android/build/ios/SourcePackages/firebase_app_check-0.4.5/android/user-agent.gradle create mode 100644 mih_ui/android/build/ios/SourcePackages/firebase_app_check-0.4.5/example/README.md create mode 100644 mih_ui/android/build/ios/SourcePackages/firebase_app_check-0.4.5/example/analysis_options.yaml create mode 100644 mih_ui/android/build/ios/SourcePackages/firebase_app_check-0.4.5/example/android/app/build.gradle create mode 100644 mih_ui/android/build/ios/SourcePackages/firebase_app_check-0.4.5/example/android/app/google-services.json create mode 100644 mih_ui/android/build/ios/SourcePackages/firebase_app_check-0.4.5/example/android/app/src/debug/AndroidManifest.xml create mode 100644 mih_ui/android/build/ios/SourcePackages/firebase_app_check-0.4.5/example/android/app/src/main/AndroidManifest.xml create mode 100644 mih_ui/android/build/ios/SourcePackages/firebase_app_check-0.4.5/example/android/app/src/main/kotlin/io/flutter/plugins/firebase/appcheck/example/MainActivity.kt create mode 100644 mih_ui/android/build/ios/SourcePackages/firebase_app_check-0.4.5/example/android/app/src/main/res/drawable-v21/launch_background.xml create mode 100644 mih_ui/android/build/ios/SourcePackages/firebase_app_check-0.4.5/example/android/app/src/main/res/drawable/launch_background.xml create mode 100644 mih_ui/android/build/ios/SourcePackages/firebase_app_check-0.4.5/example/android/app/src/main/res/mipmap-hdpi/ic_launcher.png create mode 100644 mih_ui/android/build/ios/SourcePackages/firebase_app_check-0.4.5/example/android/app/src/main/res/mipmap-mdpi/ic_launcher.png create mode 100644 mih_ui/android/build/ios/SourcePackages/firebase_app_check-0.4.5/example/android/app/src/main/res/mipmap-xhdpi/ic_launcher.png create mode 100644 mih_ui/android/build/ios/SourcePackages/firebase_app_check-0.4.5/example/android/app/src/main/res/mipmap-xxhdpi/ic_launcher.png create mode 100644 mih_ui/android/build/ios/SourcePackages/firebase_app_check-0.4.5/example/android/app/src/main/res/mipmap-xxxhdpi/ic_launcher.png create mode 100644 mih_ui/android/build/ios/SourcePackages/firebase_app_check-0.4.5/example/android/app/src/main/res/values-night/styles.xml create mode 100644 mih_ui/android/build/ios/SourcePackages/firebase_app_check-0.4.5/example/android/app/src/main/res/values/styles.xml create mode 100644 mih_ui/android/build/ios/SourcePackages/firebase_app_check-0.4.5/example/android/app/src/profile/AndroidManifest.xml create mode 100644 mih_ui/android/build/ios/SourcePackages/firebase_app_check-0.4.5/example/android/build.gradle create mode 100644 mih_ui/android/build/ios/SourcePackages/firebase_app_check-0.4.5/example/android/gradle.properties create mode 100644 mih_ui/android/build/ios/SourcePackages/firebase_app_check-0.4.5/example/android/gradle/wrapper/gradle-wrapper.properties create mode 100644 mih_ui/android/build/ios/SourcePackages/firebase_app_check-0.4.5/example/android/settings.gradle create mode 100644 mih_ui/android/build/ios/SourcePackages/firebase_app_check-0.4.5/example/ios/Flutter/AppFrameworkInfo.plist create mode 100644 mih_ui/android/build/ios/SourcePackages/firebase_app_check-0.4.5/example/ios/Flutter/Debug.xcconfig create mode 100644 mih_ui/android/build/ios/SourcePackages/firebase_app_check-0.4.5/example/ios/Flutter/Release.xcconfig create mode 100644 mih_ui/android/build/ios/SourcePackages/firebase_app_check-0.4.5/example/ios/Podfile create mode 100644 mih_ui/android/build/ios/SourcePackages/firebase_app_check-0.4.5/example/ios/Runner.xcodeproj/project.pbxproj create mode 100644 mih_ui/android/build/ios/SourcePackages/firebase_app_check-0.4.5/example/ios/Runner.xcodeproj/project.xcworkspace/contents.xcworkspacedata create mode 100644 mih_ui/android/build/ios/SourcePackages/firebase_app_check-0.4.5/example/ios/Runner.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist create mode 100644 mih_ui/android/build/ios/SourcePackages/firebase_app_check-0.4.5/example/ios/Runner.xcodeproj/project.xcworkspace/xcshareddata/WorkspaceSettings.xcsettings create mode 100644 mih_ui/android/build/ios/SourcePackages/firebase_app_check-0.4.5/example/ios/Runner.xcodeproj/xcshareddata/xcschemes/Runner.xcscheme create mode 100644 mih_ui/android/build/ios/SourcePackages/firebase_app_check-0.4.5/example/ios/Runner.xcworkspace/contents.xcworkspacedata create mode 100644 mih_ui/android/build/ios/SourcePackages/firebase_app_check-0.4.5/example/ios/Runner.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist create mode 100644 mih_ui/android/build/ios/SourcePackages/firebase_app_check-0.4.5/example/ios/Runner.xcworkspace/xcshareddata/WorkspaceSettings.xcsettings create mode 100644 mih_ui/android/build/ios/SourcePackages/firebase_app_check-0.4.5/example/ios/Runner/AppDelegate.h create mode 100644 mih_ui/android/build/ios/SourcePackages/firebase_app_check-0.4.5/example/ios/Runner/AppDelegate.m create mode 100644 mih_ui/android/build/ios/SourcePackages/firebase_app_check-0.4.5/example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Contents.json create mode 100644 mih_ui/android/build/ios/SourcePackages/firebase_app_check-0.4.5/example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-1024x1024@1x.png create mode 100644 mih_ui/android/build/ios/SourcePackages/firebase_app_check-0.4.5/example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@1x.png create mode 100644 mih_ui/android/build/ios/SourcePackages/firebase_app_check-0.4.5/example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@2x.png create mode 100644 mih_ui/android/build/ios/SourcePackages/firebase_app_check-0.4.5/example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@3x.png create mode 100644 mih_ui/android/build/ios/SourcePackages/firebase_app_check-0.4.5/example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@1x.png create mode 100644 mih_ui/android/build/ios/SourcePackages/firebase_app_check-0.4.5/example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@2x.png create mode 100644 mih_ui/android/build/ios/SourcePackages/firebase_app_check-0.4.5/example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@3x.png create mode 100644 mih_ui/android/build/ios/SourcePackages/firebase_app_check-0.4.5/example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@1x.png create mode 100644 mih_ui/android/build/ios/SourcePackages/firebase_app_check-0.4.5/example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@2x.png create mode 100644 mih_ui/android/build/ios/SourcePackages/firebase_app_check-0.4.5/example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@3x.png create mode 100644 mih_ui/android/build/ios/SourcePackages/firebase_app_check-0.4.5/example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-60x60@2x.png create mode 100644 mih_ui/android/build/ios/SourcePackages/firebase_app_check-0.4.5/example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-60x60@3x.png create mode 100644 mih_ui/android/build/ios/SourcePackages/firebase_app_check-0.4.5/example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-76x76@1x.png create mode 100644 mih_ui/android/build/ios/SourcePackages/firebase_app_check-0.4.5/example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-76x76@2x.png create mode 100644 mih_ui/android/build/ios/SourcePackages/firebase_app_check-0.4.5/example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-83.5x83.5@2x.png create mode 100644 mih_ui/android/build/ios/SourcePackages/firebase_app_check-0.4.5/example/ios/Runner/Assets.xcassets/LaunchImage.imageset/Contents.json create mode 100644 mih_ui/android/build/ios/SourcePackages/firebase_app_check-0.4.5/example/ios/Runner/Assets.xcassets/LaunchImage.imageset/LaunchImage.png create mode 100644 mih_ui/android/build/ios/SourcePackages/firebase_app_check-0.4.5/example/ios/Runner/Assets.xcassets/LaunchImage.imageset/LaunchImage@2x.png create mode 100644 mih_ui/android/build/ios/SourcePackages/firebase_app_check-0.4.5/example/ios/Runner/Assets.xcassets/LaunchImage.imageset/LaunchImage@3x.png create mode 100644 mih_ui/android/build/ios/SourcePackages/firebase_app_check-0.4.5/example/ios/Runner/Assets.xcassets/LaunchImage.imageset/README.md create mode 100644 mih_ui/android/build/ios/SourcePackages/firebase_app_check-0.4.5/example/ios/Runner/Base.lproj/LaunchScreen.storyboard create mode 100644 mih_ui/android/build/ios/SourcePackages/firebase_app_check-0.4.5/example/ios/Runner/Base.lproj/Main.storyboard create mode 100644 mih_ui/android/build/ios/SourcePackages/firebase_app_check-0.4.5/example/ios/Runner/GoogleService-Info.plist create mode 100644 mih_ui/android/build/ios/SourcePackages/firebase_app_check-0.4.5/example/ios/Runner/Info.plist create mode 100644 mih_ui/android/build/ios/SourcePackages/firebase_app_check-0.4.5/example/ios/Runner/Runner.entitlements create mode 100644 mih_ui/android/build/ios/SourcePackages/firebase_app_check-0.4.5/example/ios/Runner/RunnerRelease.entitlements create mode 100644 mih_ui/android/build/ios/SourcePackages/firebase_app_check-0.4.5/example/ios/Runner/main.m create mode 100644 mih_ui/android/build/ios/SourcePackages/firebase_app_check-0.4.5/example/ios/firebase_app_id_file.json create mode 100644 mih_ui/android/build/ios/SourcePackages/firebase_app_check-0.4.5/example/lib/firebase_options.dart create mode 100644 mih_ui/android/build/ios/SourcePackages/firebase_app_check-0.4.5/example/lib/main.dart create mode 100644 mih_ui/android/build/ios/SourcePackages/firebase_app_check-0.4.5/example/macos/Flutter/Flutter-Debug.xcconfig create mode 100644 mih_ui/android/build/ios/SourcePackages/firebase_app_check-0.4.5/example/macos/Flutter/Flutter-Release.xcconfig create mode 100644 mih_ui/android/build/ios/SourcePackages/firebase_app_check-0.4.5/example/macos/Podfile create mode 100644 mih_ui/android/build/ios/SourcePackages/firebase_app_check-0.4.5/example/macos/Runner.xcodeproj/project.pbxproj create mode 100644 mih_ui/android/build/ios/SourcePackages/firebase_app_check-0.4.5/example/macos/Runner.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist create mode 100644 mih_ui/android/build/ios/SourcePackages/firebase_app_check-0.4.5/example/macos/Runner.xcodeproj/xcshareddata/xcschemes/Runner.xcscheme create mode 100644 mih_ui/android/build/ios/SourcePackages/firebase_app_check-0.4.5/example/macos/Runner.xcworkspace/contents.xcworkspacedata create mode 100644 mih_ui/android/build/ios/SourcePackages/firebase_app_check-0.4.5/example/macos/Runner.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist create mode 100644 mih_ui/android/build/ios/SourcePackages/firebase_app_check-0.4.5/example/macos/Runner/AppDelegate.swift create mode 100644 mih_ui/android/build/ios/SourcePackages/firebase_app_check-0.4.5/example/macos/Runner/Assets.xcassets/AppIcon.appiconset/Contents.json create mode 100644 mih_ui/android/build/ios/SourcePackages/firebase_app_check-0.4.5/example/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_1024.png create mode 100644 mih_ui/android/build/ios/SourcePackages/firebase_app_check-0.4.5/example/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_128.png create mode 100644 mih_ui/android/build/ios/SourcePackages/firebase_app_check-0.4.5/example/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_16.png create mode 100644 mih_ui/android/build/ios/SourcePackages/firebase_app_check-0.4.5/example/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_256.png create mode 100644 mih_ui/android/build/ios/SourcePackages/firebase_app_check-0.4.5/example/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_32.png create mode 100644 mih_ui/android/build/ios/SourcePackages/firebase_app_check-0.4.5/example/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_512.png create mode 100644 mih_ui/android/build/ios/SourcePackages/firebase_app_check-0.4.5/example/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_64.png create mode 100644 mih_ui/android/build/ios/SourcePackages/firebase_app_check-0.4.5/example/macos/Runner/Base.lproj/MainMenu.xib create mode 100644 mih_ui/android/build/ios/SourcePackages/firebase_app_check-0.4.5/example/macos/Runner/Configs/AppInfo.xcconfig create mode 100644 mih_ui/android/build/ios/SourcePackages/firebase_app_check-0.4.5/example/macos/Runner/Configs/Debug.xcconfig create mode 100644 mih_ui/android/build/ios/SourcePackages/firebase_app_check-0.4.5/example/macos/Runner/Configs/Release.xcconfig create mode 100644 mih_ui/android/build/ios/SourcePackages/firebase_app_check-0.4.5/example/macos/Runner/Configs/Warnings.xcconfig create mode 100644 mih_ui/android/build/ios/SourcePackages/firebase_app_check-0.4.5/example/macos/Runner/DebugProfile.entitlements create mode 100644 mih_ui/android/build/ios/SourcePackages/firebase_app_check-0.4.5/example/macos/Runner/GoogleService-Info.plist create mode 100644 mih_ui/android/build/ios/SourcePackages/firebase_app_check-0.4.5/example/macos/Runner/Info.plist create mode 100644 mih_ui/android/build/ios/SourcePackages/firebase_app_check-0.4.5/example/macos/Runner/MainFlutterWindow.swift create mode 100644 mih_ui/android/build/ios/SourcePackages/firebase_app_check-0.4.5/example/macos/Runner/Release.entitlements create mode 100644 mih_ui/android/build/ios/SourcePackages/firebase_app_check-0.4.5/example/macos/firebase_app_id_file.json create mode 100644 mih_ui/android/build/ios/SourcePackages/firebase_app_check-0.4.5/example/pubspec.yaml create mode 100644 mih_ui/android/build/ios/SourcePackages/firebase_app_check-0.4.5/example/web/favicon.png create mode 100644 mih_ui/android/build/ios/SourcePackages/firebase_app_check-0.4.5/example/web/icons/Icon-192.png create mode 100644 mih_ui/android/build/ios/SourcePackages/firebase_app_check-0.4.5/example/web/icons/Icon-512.png create mode 100644 mih_ui/android/build/ios/SourcePackages/firebase_app_check-0.4.5/example/web/icons/Icon-maskable-192.png create mode 100644 mih_ui/android/build/ios/SourcePackages/firebase_app_check-0.4.5/example/web/icons/Icon-maskable-512.png create mode 100644 mih_ui/android/build/ios/SourcePackages/firebase_app_check-0.4.5/example/web/index.html create mode 100644 mih_ui/android/build/ios/SourcePackages/firebase_app_check-0.4.5/example/web/manifest.json create mode 100644 mih_ui/android/build/ios/SourcePackages/firebase_app_check-0.4.5/example/windows/CMakeLists.txt create mode 100644 mih_ui/android/build/ios/SourcePackages/firebase_app_check-0.4.5/example/windows/flutter/CMakeLists.txt create mode 100644 mih_ui/android/build/ios/SourcePackages/firebase_app_check-0.4.5/example/windows/runner/CMakeLists.txt create mode 100644 mih_ui/android/build/ios/SourcePackages/firebase_app_check-0.4.5/example/windows/runner/Runner.rc create mode 100644 mih_ui/android/build/ios/SourcePackages/firebase_app_check-0.4.5/example/windows/runner/flutter_window.cpp create mode 100644 mih_ui/android/build/ios/SourcePackages/firebase_app_check-0.4.5/example/windows/runner/flutter_window.h create mode 100644 mih_ui/android/build/ios/SourcePackages/firebase_app_check-0.4.5/example/windows/runner/main.cpp create mode 100644 mih_ui/android/build/ios/SourcePackages/firebase_app_check-0.4.5/example/windows/runner/resource.h create mode 100644 mih_ui/android/build/ios/SourcePackages/firebase_app_check-0.4.5/example/windows/runner/resources/app_icon.ico create mode 100644 mih_ui/android/build/ios/SourcePackages/firebase_app_check-0.4.5/example/windows/runner/runner.exe.manifest create mode 100644 mih_ui/android/build/ios/SourcePackages/firebase_app_check-0.4.5/example/windows/runner/utils.cpp create mode 100644 mih_ui/android/build/ios/SourcePackages/firebase_app_check-0.4.5/example/windows/runner/utils.h create mode 100644 mih_ui/android/build/ios/SourcePackages/firebase_app_check-0.4.5/example/windows/runner/win32_window.cpp create mode 100644 mih_ui/android/build/ios/SourcePackages/firebase_app_check-0.4.5/example/windows/runner/win32_window.h create mode 100644 mih_ui/android/build/ios/SourcePackages/firebase_app_check-0.4.5/ios/firebase_app_check.podspec create mode 100644 mih_ui/android/build/ios/SourcePackages/firebase_app_check-0.4.5/ios/firebase_app_check/Package.swift create mode 100644 mih_ui/android/build/ios/SourcePackages/firebase_app_check-0.4.5/ios/firebase_app_check/Sources/firebase_app_check/Constants.swift create mode 100644 mih_ui/android/build/ios/SourcePackages/firebase_app_check-0.4.5/ios/firebase_app_check/Sources/firebase_app_check/FirebaseAppCheckMessages.g.swift create mode 100644 mih_ui/android/build/ios/SourcePackages/firebase_app_check-0.4.5/ios/firebase_app_check/Sources/firebase_app_check/FirebaseAppCheckPlugin.swift create mode 100644 mih_ui/android/build/ios/SourcePackages/firebase_app_check-0.4.5/lib/firebase_app_check.dart create mode 100644 mih_ui/android/build/ios/SourcePackages/firebase_app_check-0.4.5/lib/src/firebase_app_check.dart create mode 100644 mih_ui/android/build/ios/SourcePackages/firebase_app_check-0.4.5/macos/firebase_app_check.podspec create mode 100644 mih_ui/android/build/ios/SourcePackages/firebase_app_check-0.4.5/macos/firebase_app_check/Package.swift create mode 100644 mih_ui/android/build/ios/SourcePackages/firebase_app_check-0.4.5/macos/firebase_app_check/Sources/firebase_app_check/Constants.swift create mode 100644 mih_ui/android/build/ios/SourcePackages/firebase_app_check-0.4.5/macos/firebase_app_check/Sources/firebase_app_check/FirebaseAppCheckMessages.g.swift create mode 100644 mih_ui/android/build/ios/SourcePackages/firebase_app_check-0.4.5/macos/firebase_app_check/Sources/firebase_app_check/FirebaseAppCheckPlugin.swift create mode 100644 mih_ui/android/build/ios/SourcePackages/firebase_app_check-0.4.5/pubspec.yaml create mode 100755 mih_ui/android/build/ios/SourcePackages/firebase_app_check-0.4.5/test/firebase_app_check_test.dart create mode 100644 mih_ui/android/build/ios/SourcePackages/firebase_app_check-0.4.5/test/mock.dart create mode 100644 mih_ui/android/build/ios/SourcePackages/firebase_app_check-0.4.5/windows/CMakeLists.txt create mode 100644 mih_ui/android/build/ios/SourcePackages/firebase_app_check-0.4.5/windows/firebase_app_check_plugin.cpp create mode 100644 mih_ui/android/build/ios/SourcePackages/firebase_app_check-0.4.5/windows/firebase_app_check_plugin.h create mode 100644 mih_ui/android/build/ios/SourcePackages/firebase_app_check-0.4.5/windows/firebase_app_check_plugin_c_api.cpp create mode 100644 mih_ui/android/build/ios/SourcePackages/firebase_app_check-0.4.5/windows/include/firebase_app_check/firebase_app_check_plugin_c_api.h create mode 100644 mih_ui/android/build/ios/SourcePackages/firebase_app_check-0.4.5/windows/messages.g.cpp create mode 100644 mih_ui/android/build/ios/SourcePackages/firebase_app_check-0.4.5/windows/messages.g.h create mode 100644 mih_ui/android/build/ios/SourcePackages/firebase_app_check-0.4.5/windows/plugin_version.h.in create mode 100644 mih_ui/android/build/ios/SourcePackages/firebase_auth-6.5.4/CHANGELOG.md create mode 100644 mih_ui/android/build/ios/SourcePackages/firebase_auth-6.5.4/LICENSE create mode 100755 mih_ui/android/build/ios/SourcePackages/firebase_auth-6.5.4/README.md create mode 100755 mih_ui/android/build/ios/SourcePackages/firebase_auth-6.5.4/android/build.gradle create mode 100755 mih_ui/android/build/ios/SourcePackages/firebase_auth-6.5.4/android/gradle.properties create mode 100644 mih_ui/android/build/ios/SourcePackages/firebase_auth-6.5.4/android/gradle/wrapper/gradle-wrapper.properties create mode 100755 mih_ui/android/build/ios/SourcePackages/firebase_auth-6.5.4/android/settings.gradle create mode 100755 mih_ui/android/build/ios/SourcePackages/firebase_auth-6.5.4/android/src/main/AndroidManifest.xml create mode 100644 mih_ui/android/build/ios/SourcePackages/firebase_auth-6.5.4/android/src/main/java/io/flutter/plugins/firebase/auth/AuthStateChannelStreamHandler.java create mode 100644 mih_ui/android/build/ios/SourcePackages/firebase_auth-6.5.4/android/src/main/java/io/flutter/plugins/firebase/auth/Constants.java create mode 100755 mih_ui/android/build/ios/SourcePackages/firebase_auth-6.5.4/android/src/main/java/io/flutter/plugins/firebase/auth/FlutterFirebaseAuthPlugin.java create mode 100644 mih_ui/android/build/ios/SourcePackages/firebase_auth-6.5.4/android/src/main/java/io/flutter/plugins/firebase/auth/FlutterFirebaseAuthPluginException.java create mode 100644 mih_ui/android/build/ios/SourcePackages/firebase_auth-6.5.4/android/src/main/java/io/flutter/plugins/firebase/auth/FlutterFirebaseAuthRegistrar.java create mode 100644 mih_ui/android/build/ios/SourcePackages/firebase_auth-6.5.4/android/src/main/java/io/flutter/plugins/firebase/auth/FlutterFirebaseAuthUser.java create mode 100644 mih_ui/android/build/ios/SourcePackages/firebase_auth-6.5.4/android/src/main/java/io/flutter/plugins/firebase/auth/FlutterFirebaseMultiFactor.java create mode 100644 mih_ui/android/build/ios/SourcePackages/firebase_auth-6.5.4/android/src/main/java/io/flutter/plugins/firebase/auth/FlutterFirebaseTotpMultiFactor.java create mode 100644 mih_ui/android/build/ios/SourcePackages/firebase_auth-6.5.4/android/src/main/java/io/flutter/plugins/firebase/auth/FlutterFirebaseTotpSecret.java create mode 100644 mih_ui/android/build/ios/SourcePackages/firebase_auth-6.5.4/android/src/main/java/io/flutter/plugins/firebase/auth/GeneratedAndroidFirebaseAuth.java create mode 100644 mih_ui/android/build/ios/SourcePackages/firebase_auth-6.5.4/android/src/main/java/io/flutter/plugins/firebase/auth/IdTokenChannelStreamHandler.java create mode 100644 mih_ui/android/build/ios/SourcePackages/firebase_auth-6.5.4/android/src/main/java/io/flutter/plugins/firebase/auth/PhoneNumberVerificationStreamHandler.java create mode 100644 mih_ui/android/build/ios/SourcePackages/firebase_auth-6.5.4/android/src/main/java/io/flutter/plugins/firebase/auth/PigeonParser.java create mode 100644 mih_ui/android/build/ios/SourcePackages/firebase_auth-6.5.4/android/user-agent.gradle create mode 100644 mih_ui/android/build/ios/SourcePackages/firebase_auth-6.5.4/example/README.md create mode 100644 mih_ui/android/build/ios/SourcePackages/firebase_auth-6.5.4/example/analysis_options.yaml create mode 100644 mih_ui/android/build/ios/SourcePackages/firebase_auth-6.5.4/example/android/app/build.gradle create mode 100644 mih_ui/android/build/ios/SourcePackages/firebase_auth-6.5.4/example/android/app/google-services.json create mode 100644 mih_ui/android/build/ios/SourcePackages/firebase_auth-6.5.4/example/android/app/src/debug/AndroidManifest.xml create mode 100644 mih_ui/android/build/ios/SourcePackages/firebase_auth-6.5.4/example/android/app/src/main/AndroidManifest.xml create mode 100644 mih_ui/android/build/ios/SourcePackages/firebase_auth-6.5.4/example/android/app/src/main/kotlin/io/flutter/plugins/firebase/auth/example/MainActivity.kt create mode 100644 mih_ui/android/build/ios/SourcePackages/firebase_auth-6.5.4/example/android/app/src/main/res/drawable-v21/launch_background.xml create mode 100644 mih_ui/android/build/ios/SourcePackages/firebase_auth-6.5.4/example/android/app/src/main/res/drawable/launch_background.xml create mode 100644 mih_ui/android/build/ios/SourcePackages/firebase_auth-6.5.4/example/android/app/src/main/res/mipmap-hdpi/ic_launcher.png create mode 100644 mih_ui/android/build/ios/SourcePackages/firebase_auth-6.5.4/example/android/app/src/main/res/mipmap-mdpi/ic_launcher.png create mode 100644 mih_ui/android/build/ios/SourcePackages/firebase_auth-6.5.4/example/android/app/src/main/res/mipmap-xhdpi/ic_launcher.png create mode 100644 mih_ui/android/build/ios/SourcePackages/firebase_auth-6.5.4/example/android/app/src/main/res/mipmap-xxhdpi/ic_launcher.png create mode 100644 mih_ui/android/build/ios/SourcePackages/firebase_auth-6.5.4/example/android/app/src/main/res/mipmap-xxxhdpi/ic_launcher.png create mode 100644 mih_ui/android/build/ios/SourcePackages/firebase_auth-6.5.4/example/android/app/src/main/res/values-night/styles.xml create mode 100644 mih_ui/android/build/ios/SourcePackages/firebase_auth-6.5.4/example/android/app/src/main/res/values/styles.xml create mode 100644 mih_ui/android/build/ios/SourcePackages/firebase_auth-6.5.4/example/android/app/src/profile/AndroidManifest.xml create mode 100644 mih_ui/android/build/ios/SourcePackages/firebase_auth-6.5.4/example/android/build.gradle create mode 100644 mih_ui/android/build/ios/SourcePackages/firebase_auth-6.5.4/example/android/gradle.properties create mode 100644 mih_ui/android/build/ios/SourcePackages/firebase_auth-6.5.4/example/android/gradle/wrapper/gradle-wrapper.properties create mode 100644 mih_ui/android/build/ios/SourcePackages/firebase_auth-6.5.4/example/android/settings.gradle create mode 100644 mih_ui/android/build/ios/SourcePackages/firebase_auth-6.5.4/example/ios/Flutter/AppFrameworkInfo.plist create mode 100644 mih_ui/android/build/ios/SourcePackages/firebase_auth-6.5.4/example/ios/Flutter/Debug.xcconfig create mode 100644 mih_ui/android/build/ios/SourcePackages/firebase_auth-6.5.4/example/ios/Flutter/Release.xcconfig create mode 100644 mih_ui/android/build/ios/SourcePackages/firebase_auth-6.5.4/example/ios/Podfile create mode 100644 mih_ui/android/build/ios/SourcePackages/firebase_auth-6.5.4/example/ios/Runner.xcodeproj/project.pbxproj create mode 100644 mih_ui/android/build/ios/SourcePackages/firebase_auth-6.5.4/example/ios/Runner.xcodeproj/project.xcworkspace/contents.xcworkspacedata create mode 100644 mih_ui/android/build/ios/SourcePackages/firebase_auth-6.5.4/example/ios/Runner.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist create mode 100644 mih_ui/android/build/ios/SourcePackages/firebase_auth-6.5.4/example/ios/Runner.xcodeproj/project.xcworkspace/xcshareddata/WorkspaceSettings.xcsettings create mode 100644 mih_ui/android/build/ios/SourcePackages/firebase_auth-6.5.4/example/ios/Runner.xcodeproj/xcshareddata/xcschemes/Runner.xcscheme create mode 100644 mih_ui/android/build/ios/SourcePackages/firebase_auth-6.5.4/example/ios/Runner.xcworkspace/contents.xcworkspacedata create mode 100644 mih_ui/android/build/ios/SourcePackages/firebase_auth-6.5.4/example/ios/Runner.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist create mode 100644 mih_ui/android/build/ios/SourcePackages/firebase_auth-6.5.4/example/ios/Runner.xcworkspace/xcshareddata/WorkspaceSettings.xcsettings create mode 100644 mih_ui/android/build/ios/SourcePackages/firebase_auth-6.5.4/example/ios/Runner/AppDelegate.h create mode 100644 mih_ui/android/build/ios/SourcePackages/firebase_auth-6.5.4/example/ios/Runner/AppDelegate.m create mode 100644 mih_ui/android/build/ios/SourcePackages/firebase_auth-6.5.4/example/ios/Runner/AppDelegate.swift create mode 100644 mih_ui/android/build/ios/SourcePackages/firebase_auth-6.5.4/example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Contents.json create mode 100644 mih_ui/android/build/ios/SourcePackages/firebase_auth-6.5.4/example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-1024x1024@1x.png create mode 100644 mih_ui/android/build/ios/SourcePackages/firebase_auth-6.5.4/example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@1x.png create mode 100644 mih_ui/android/build/ios/SourcePackages/firebase_auth-6.5.4/example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@2x.png create mode 100644 mih_ui/android/build/ios/SourcePackages/firebase_auth-6.5.4/example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@3x.png create mode 100644 mih_ui/android/build/ios/SourcePackages/firebase_auth-6.5.4/example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@1x.png create mode 100644 mih_ui/android/build/ios/SourcePackages/firebase_auth-6.5.4/example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@2x.png create mode 100644 mih_ui/android/build/ios/SourcePackages/firebase_auth-6.5.4/example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@3x.png create mode 100644 mih_ui/android/build/ios/SourcePackages/firebase_auth-6.5.4/example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@1x.png create mode 100644 mih_ui/android/build/ios/SourcePackages/firebase_auth-6.5.4/example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@2x.png create mode 100644 mih_ui/android/build/ios/SourcePackages/firebase_auth-6.5.4/example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@3x.png create mode 100644 mih_ui/android/build/ios/SourcePackages/firebase_auth-6.5.4/example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-60x60@2x.png create mode 100644 mih_ui/android/build/ios/SourcePackages/firebase_auth-6.5.4/example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-60x60@3x.png create mode 100644 mih_ui/android/build/ios/SourcePackages/firebase_auth-6.5.4/example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-76x76@1x.png create mode 100644 mih_ui/android/build/ios/SourcePackages/firebase_auth-6.5.4/example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-76x76@2x.png create mode 100644 mih_ui/android/build/ios/SourcePackages/firebase_auth-6.5.4/example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-83.5x83.5@2x.png create mode 100644 mih_ui/android/build/ios/SourcePackages/firebase_auth-6.5.4/example/ios/Runner/Assets.xcassets/LaunchImage.imageset/Contents.json create mode 100644 mih_ui/android/build/ios/SourcePackages/firebase_auth-6.5.4/example/ios/Runner/Assets.xcassets/LaunchImage.imageset/LaunchImage.png create mode 100644 mih_ui/android/build/ios/SourcePackages/firebase_auth-6.5.4/example/ios/Runner/Assets.xcassets/LaunchImage.imageset/LaunchImage@2x.png create mode 100644 mih_ui/android/build/ios/SourcePackages/firebase_auth-6.5.4/example/ios/Runner/Assets.xcassets/LaunchImage.imageset/LaunchImage@3x.png create mode 100644 mih_ui/android/build/ios/SourcePackages/firebase_auth-6.5.4/example/ios/Runner/Assets.xcassets/LaunchImage.imageset/README.md create mode 100644 mih_ui/android/build/ios/SourcePackages/firebase_auth-6.5.4/example/ios/Runner/Base.lproj/LaunchScreen.storyboard create mode 100644 mih_ui/android/build/ios/SourcePackages/firebase_auth-6.5.4/example/ios/Runner/Base.lproj/Main.storyboard create mode 100644 mih_ui/android/build/ios/SourcePackages/firebase_auth-6.5.4/example/ios/Runner/GoogleService-Info.plist create mode 100644 mih_ui/android/build/ios/SourcePackages/firebase_auth-6.5.4/example/ios/Runner/Info.plist create mode 100644 mih_ui/android/build/ios/SourcePackages/firebase_auth-6.5.4/example/ios/Runner/Runner-Bridging-Header.h create mode 100644 mih_ui/android/build/ios/SourcePackages/firebase_auth-6.5.4/example/ios/Runner/Runner.entitlements create mode 100644 mih_ui/android/build/ios/SourcePackages/firebase_auth-6.5.4/example/ios/Runner/main.m create mode 100644 mih_ui/android/build/ios/SourcePackages/firebase_auth-6.5.4/example/ios/firebase_app_id_file.json create mode 100644 mih_ui/android/build/ios/SourcePackages/firebase_auth-6.5.4/example/lib/auth.dart create mode 100644 mih_ui/android/build/ios/SourcePackages/firebase_auth-6.5.4/example/lib/firebase_options.dart create mode 100755 mih_ui/android/build/ios/SourcePackages/firebase_auth-6.5.4/example/lib/main.dart create mode 100644 mih_ui/android/build/ios/SourcePackages/firebase_auth-6.5.4/example/lib/profile.dart create mode 100644 mih_ui/android/build/ios/SourcePackages/firebase_auth-6.5.4/example/macos/Flutter/Flutter-Debug.xcconfig create mode 100644 mih_ui/android/build/ios/SourcePackages/firebase_auth-6.5.4/example/macos/Flutter/Flutter-Release.xcconfig create mode 100644 mih_ui/android/build/ios/SourcePackages/firebase_auth-6.5.4/example/macos/Podfile create mode 100644 mih_ui/android/build/ios/SourcePackages/firebase_auth-6.5.4/example/macos/Runner.xcodeproj/project.pbxproj create mode 100644 mih_ui/android/build/ios/SourcePackages/firebase_auth-6.5.4/example/macos/Runner.xcodeproj/project.xcworkspace/contents.xcworkspacedata create mode 100644 mih_ui/android/build/ios/SourcePackages/firebase_auth-6.5.4/example/macos/Runner.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist create mode 100644 mih_ui/android/build/ios/SourcePackages/firebase_auth-6.5.4/example/macos/Runner.xcodeproj/xcshareddata/xcschemes/Runner.xcscheme create mode 100644 mih_ui/android/build/ios/SourcePackages/firebase_auth-6.5.4/example/macos/Runner.xcworkspace/contents.xcworkspacedata create mode 100644 mih_ui/android/build/ios/SourcePackages/firebase_auth-6.5.4/example/macos/Runner.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist create mode 100644 mih_ui/android/build/ios/SourcePackages/firebase_auth-6.5.4/example/macos/Runner.xcworkspace/xcshareddata/WorkspaceSettings.xcsettings create mode 100644 mih_ui/android/build/ios/SourcePackages/firebase_auth-6.5.4/example/macos/Runner/AppDelegate.swift create mode 100644 mih_ui/android/build/ios/SourcePackages/firebase_auth-6.5.4/example/macos/Runner/Assets.xcassets/AppIcon.appiconset/Contents.json create mode 100644 mih_ui/android/build/ios/SourcePackages/firebase_auth-6.5.4/example/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_1024.png create mode 100644 mih_ui/android/build/ios/SourcePackages/firebase_auth-6.5.4/example/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_128.png create mode 100644 mih_ui/android/build/ios/SourcePackages/firebase_auth-6.5.4/example/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_16.png create mode 100644 mih_ui/android/build/ios/SourcePackages/firebase_auth-6.5.4/example/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_256.png create mode 100644 mih_ui/android/build/ios/SourcePackages/firebase_auth-6.5.4/example/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_32.png create mode 100644 mih_ui/android/build/ios/SourcePackages/firebase_auth-6.5.4/example/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_512.png create mode 100644 mih_ui/android/build/ios/SourcePackages/firebase_auth-6.5.4/example/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_64.png create mode 100644 mih_ui/android/build/ios/SourcePackages/firebase_auth-6.5.4/example/macos/Runner/Base.lproj/MainMenu.xib create mode 100644 mih_ui/android/build/ios/SourcePackages/firebase_auth-6.5.4/example/macos/Runner/Configs/AppInfo.xcconfig create mode 100644 mih_ui/android/build/ios/SourcePackages/firebase_auth-6.5.4/example/macos/Runner/Configs/Debug.xcconfig create mode 100644 mih_ui/android/build/ios/SourcePackages/firebase_auth-6.5.4/example/macos/Runner/Configs/Release.xcconfig create mode 100644 mih_ui/android/build/ios/SourcePackages/firebase_auth-6.5.4/example/macos/Runner/Configs/Warnings.xcconfig create mode 100644 mih_ui/android/build/ios/SourcePackages/firebase_auth-6.5.4/example/macos/Runner/DebugProfile.entitlements create mode 100644 mih_ui/android/build/ios/SourcePackages/firebase_auth-6.5.4/example/macos/Runner/GoogleService-Info.plist create mode 100644 mih_ui/android/build/ios/SourcePackages/firebase_auth-6.5.4/example/macos/Runner/Info.plist create mode 100644 mih_ui/android/build/ios/SourcePackages/firebase_auth-6.5.4/example/macos/Runner/MainFlutterWindow.swift create mode 100644 mih_ui/android/build/ios/SourcePackages/firebase_auth-6.5.4/example/macos/Runner/Release.entitlements create mode 100644 mih_ui/android/build/ios/SourcePackages/firebase_auth-6.5.4/example/macos/firebase_app_id_file.json create mode 100644 mih_ui/android/build/ios/SourcePackages/firebase_auth-6.5.4/example/pubspec.yaml create mode 100644 mih_ui/android/build/ios/SourcePackages/firebase_auth-6.5.4/example/web/favicon.png create mode 100644 mih_ui/android/build/ios/SourcePackages/firebase_auth-6.5.4/example/web/icons/Icon-192.png create mode 100644 mih_ui/android/build/ios/SourcePackages/firebase_auth-6.5.4/example/web/icons/Icon-512.png create mode 100644 mih_ui/android/build/ios/SourcePackages/firebase_auth-6.5.4/example/web/icons/Icon-maskable-192.png create mode 100644 mih_ui/android/build/ios/SourcePackages/firebase_auth-6.5.4/example/web/icons/Icon-maskable-512.png create mode 100644 mih_ui/android/build/ios/SourcePackages/firebase_auth-6.5.4/example/web/index.html create mode 100644 mih_ui/android/build/ios/SourcePackages/firebase_auth-6.5.4/example/web/manifest.json create mode 100644 mih_ui/android/build/ios/SourcePackages/firebase_auth-6.5.4/example/windows/CMakeLists.txt create mode 100644 mih_ui/android/build/ios/SourcePackages/firebase_auth-6.5.4/example/windows/flutter/CMakeLists.txt create mode 100644 mih_ui/android/build/ios/SourcePackages/firebase_auth-6.5.4/example/windows/runner/CMakeLists.txt create mode 100644 mih_ui/android/build/ios/SourcePackages/firebase_auth-6.5.4/example/windows/runner/Runner.rc create mode 100644 mih_ui/android/build/ios/SourcePackages/firebase_auth-6.5.4/example/windows/runner/flutter_window.cpp create mode 100644 mih_ui/android/build/ios/SourcePackages/firebase_auth-6.5.4/example/windows/runner/flutter_window.h create mode 100644 mih_ui/android/build/ios/SourcePackages/firebase_auth-6.5.4/example/windows/runner/main.cpp create mode 100644 mih_ui/android/build/ios/SourcePackages/firebase_auth-6.5.4/example/windows/runner/resource.h create mode 100644 mih_ui/android/build/ios/SourcePackages/firebase_auth-6.5.4/example/windows/runner/resources/app_icon.ico create mode 100644 mih_ui/android/build/ios/SourcePackages/firebase_auth-6.5.4/example/windows/runner/runner.exe.manifest create mode 100644 mih_ui/android/build/ios/SourcePackages/firebase_auth-6.5.4/example/windows/runner/utils.cpp create mode 100644 mih_ui/android/build/ios/SourcePackages/firebase_auth-6.5.4/example/windows/runner/utils.h create mode 100644 mih_ui/android/build/ios/SourcePackages/firebase_auth-6.5.4/example/windows/runner/win32_window.cpp create mode 100644 mih_ui/android/build/ios/SourcePackages/firebase_auth-6.5.4/example/windows/runner/win32_window.h create mode 100755 mih_ui/android/build/ios/SourcePackages/firebase_auth-6.5.4/ios/firebase_auth.podspec create mode 100644 mih_ui/android/build/ios/SourcePackages/firebase_auth-6.5.4/ios/firebase_auth/Package.swift create mode 100644 mih_ui/android/build/ios/SourcePackages/firebase_auth-6.5.4/ios/firebase_auth/Sources/firebase_auth/FLTAuthStateChannelStreamHandler.m create mode 100644 mih_ui/android/build/ios/SourcePackages/firebase_auth-6.5.4/ios/firebase_auth/Sources/firebase_auth/FLTFirebaseAuthPlugin.m create mode 100644 mih_ui/android/build/ios/SourcePackages/firebase_auth-6.5.4/ios/firebase_auth/Sources/firebase_auth/FLTIdTokenChannelStreamHandler.m create mode 100644 mih_ui/android/build/ios/SourcePackages/firebase_auth-6.5.4/ios/firebase_auth/Sources/firebase_auth/FLTPhoneNumberVerificationStreamHandler.m create mode 100644 mih_ui/android/build/ios/SourcePackages/firebase_auth-6.5.4/ios/firebase_auth/Sources/firebase_auth/PigeonParser.m create mode 100644 mih_ui/android/build/ios/SourcePackages/firebase_auth-6.5.4/ios/firebase_auth/Sources/firebase_auth/firebase_auth_messages.g.m create mode 100644 mih_ui/android/build/ios/SourcePackages/firebase_auth-6.5.4/ios/firebase_auth/Sources/firebase_auth/include/Private/FLTAuthStateChannelStreamHandler.h create mode 100644 mih_ui/android/build/ios/SourcePackages/firebase_auth-6.5.4/ios/firebase_auth/Sources/firebase_auth/include/Private/FLTIdTokenChannelStreamHandler.h create mode 100644 mih_ui/android/build/ios/SourcePackages/firebase_auth-6.5.4/ios/firebase_auth/Sources/firebase_auth/include/Private/FLTPhoneNumberVerificationStreamHandler.h create mode 100644 mih_ui/android/build/ios/SourcePackages/firebase_auth-6.5.4/ios/firebase_auth/Sources/firebase_auth/include/Private/PigeonParser.h create mode 100644 mih_ui/android/build/ios/SourcePackages/firebase_auth-6.5.4/ios/firebase_auth/Sources/firebase_auth/include/Public/CustomPigeonHeader.h create mode 100644 mih_ui/android/build/ios/SourcePackages/firebase_auth-6.5.4/ios/firebase_auth/Sources/firebase_auth/include/Public/FLTFirebaseAuthPlugin.h create mode 100644 mih_ui/android/build/ios/SourcePackages/firebase_auth-6.5.4/ios/firebase_auth/Sources/firebase_auth/include/Public/firebase_auth_messages.g.h create mode 100755 mih_ui/android/build/ios/SourcePackages/firebase_auth-6.5.4/lib/firebase_auth.dart create mode 100644 mih_ui/android/build/ios/SourcePackages/firebase_auth-6.5.4/lib/src/confirmation_result.dart create mode 100644 mih_ui/android/build/ios/SourcePackages/firebase_auth-6.5.4/lib/src/firebase_auth.dart create mode 100644 mih_ui/android/build/ios/SourcePackages/firebase_auth-6.5.4/lib/src/multi_factor.dart create mode 100644 mih_ui/android/build/ios/SourcePackages/firebase_auth-6.5.4/lib/src/recaptcha_verifier.dart create mode 100644 mih_ui/android/build/ios/SourcePackages/firebase_auth-6.5.4/lib/src/user.dart create mode 100644 mih_ui/android/build/ios/SourcePackages/firebase_auth-6.5.4/lib/src/user_credential.dart create mode 100755 mih_ui/android/build/ios/SourcePackages/firebase_auth-6.5.4/macos/firebase_auth.podspec create mode 100644 mih_ui/android/build/ios/SourcePackages/firebase_auth-6.5.4/macos/firebase_auth/Package.swift create mode 100644 mih_ui/android/build/ios/SourcePackages/firebase_auth-6.5.4/macos/firebase_auth/Sources/firebase_auth/FLTAuthStateChannelStreamHandler.m create mode 100644 mih_ui/android/build/ios/SourcePackages/firebase_auth-6.5.4/macos/firebase_auth/Sources/firebase_auth/FLTFirebaseAuthPlugin.m create mode 100644 mih_ui/android/build/ios/SourcePackages/firebase_auth-6.5.4/macos/firebase_auth/Sources/firebase_auth/FLTIdTokenChannelStreamHandler.m create mode 100644 mih_ui/android/build/ios/SourcePackages/firebase_auth-6.5.4/macos/firebase_auth/Sources/firebase_auth/FLTPhoneNumberVerificationStreamHandler.m create mode 100644 mih_ui/android/build/ios/SourcePackages/firebase_auth-6.5.4/macos/firebase_auth/Sources/firebase_auth/PigeonParser.m create mode 100644 mih_ui/android/build/ios/SourcePackages/firebase_auth-6.5.4/macos/firebase_auth/Sources/firebase_auth/firebase_auth_messages.g.m create mode 100644 mih_ui/android/build/ios/SourcePackages/firebase_auth-6.5.4/macos/firebase_auth/Sources/firebase_auth/include/Private/FLTAuthStateChannelStreamHandler.h create mode 100644 mih_ui/android/build/ios/SourcePackages/firebase_auth-6.5.4/macos/firebase_auth/Sources/firebase_auth/include/Private/FLTIdTokenChannelStreamHandler.h create mode 100644 mih_ui/android/build/ios/SourcePackages/firebase_auth-6.5.4/macos/firebase_auth/Sources/firebase_auth/include/Private/FLTPhoneNumberVerificationStreamHandler.h create mode 100644 mih_ui/android/build/ios/SourcePackages/firebase_auth-6.5.4/macos/firebase_auth/Sources/firebase_auth/include/Private/PigeonParser.h create mode 100644 mih_ui/android/build/ios/SourcePackages/firebase_auth-6.5.4/macos/firebase_auth/Sources/firebase_auth/include/Public/CustomPigeonHeader.h create mode 100644 mih_ui/android/build/ios/SourcePackages/firebase_auth-6.5.4/macos/firebase_auth/Sources/firebase_auth/include/Public/FLTFirebaseAuthPlugin.h create mode 100644 mih_ui/android/build/ios/SourcePackages/firebase_auth-6.5.4/macos/firebase_auth/Sources/firebase_auth/include/Public/firebase_auth_messages.g.h create mode 100755 mih_ui/android/build/ios/SourcePackages/firebase_auth-6.5.4/pubspec.yaml create mode 100644 mih_ui/android/build/ios/SourcePackages/firebase_auth-6.5.4/test/firebase_auth_test.dart create mode 100644 mih_ui/android/build/ios/SourcePackages/firebase_auth-6.5.4/test/mock.dart create mode 100644 mih_ui/android/build/ios/SourcePackages/firebase_auth-6.5.4/test/user_test.dart create mode 100644 mih_ui/android/build/ios/SourcePackages/firebase_auth-6.5.4/windows/CMakeLists.txt create mode 100644 mih_ui/android/build/ios/SourcePackages/firebase_auth-6.5.4/windows/firebase_auth_plugin.cpp create mode 100644 mih_ui/android/build/ios/SourcePackages/firebase_auth-6.5.4/windows/firebase_auth_plugin.h create mode 100644 mih_ui/android/build/ios/SourcePackages/firebase_auth-6.5.4/windows/firebase_auth_plugin_c_api.cpp create mode 100644 mih_ui/android/build/ios/SourcePackages/firebase_auth-6.5.4/windows/include/firebase_auth/firebase_auth_plugin_c_api.h create mode 100644 mih_ui/android/build/ios/SourcePackages/firebase_auth-6.5.4/windows/messages.g.cpp create mode 100644 mih_ui/android/build/ios/SourcePackages/firebase_auth-6.5.4/windows/messages.g.h create mode 100644 mih_ui/android/build/ios/SourcePackages/firebase_auth-6.5.4/windows/plugin_version.h.in create mode 100644 mih_ui/android/build/ios/SourcePackages/firebase_auth-6.5.4/windows/test/firebase_auth_plugin_test.cpp create mode 100644 mih_ui/android/build/ios/SourcePackages/google_mobile_ads-8.0.0/CHANGELOG.md create mode 100644 mih_ui/android/build/ios/SourcePackages/google_mobile_ads-8.0.0/LICENSE create mode 100644 mih_ui/android/build/ios/SourcePackages/google_mobile_ads-8.0.0/README.md create mode 100644 mih_ui/android/build/ios/SourcePackages/google_mobile_ads-8.0.0/android/build.gradle create mode 100644 mih_ui/android/build/ios/SourcePackages/google_mobile_ads-8.0.0/android/gradle.properties create mode 100644 mih_ui/android/build/ios/SourcePackages/google_mobile_ads-8.0.0/android/gradle/gradle-daemon-jvm.properties create mode 100644 mih_ui/android/build/ios/SourcePackages/google_mobile_ads-8.0.0/android/gradle/wrapper/gradle-wrapper.properties create mode 100644 mih_ui/android/build/ios/SourcePackages/google_mobile_ads-8.0.0/android/settings.gradle create mode 100644 mih_ui/android/build/ios/SourcePackages/google_mobile_ads-8.0.0/android/src/main/AndroidManifest.xml create mode 100644 mih_ui/android/build/ios/SourcePackages/google_mobile_ads-8.0.0/android/src/main/java/com/google/android/ads/nativetemplates/NativeTemplateStyle.java create mode 100644 mih_ui/android/build/ios/SourcePackages/google_mobile_ads-8.0.0/android/src/main/java/com/google/android/ads/nativetemplates/TemplateView.java create mode 100644 mih_ui/android/build/ios/SourcePackages/google_mobile_ads-8.0.0/android/src/main/java/io/flutter/plugins/googlemobileads/AdInstanceManager.java create mode 100644 mih_ui/android/build/ios/SourcePackages/google_mobile_ads-8.0.0/android/src/main/java/io/flutter/plugins/googlemobileads/AdMessageCodec.java create mode 100644 mih_ui/android/build/ios/SourcePackages/google_mobile_ads-8.0.0/android/src/main/java/io/flutter/plugins/googlemobileads/AppStateNotifier.java create mode 100644 mih_ui/android/build/ios/SourcePackages/google_mobile_ads-8.0.0/android/src/main/java/io/flutter/plugins/googlemobileads/BannerAdCreator.java create mode 100644 mih_ui/android/build/ios/SourcePackages/google_mobile_ads-8.0.0/android/src/main/java/io/flutter/plugins/googlemobileads/Constants.java create mode 100644 mih_ui/android/build/ios/SourcePackages/google_mobile_ads-8.0.0/android/src/main/java/io/flutter/plugins/googlemobileads/FluidAdManagerBannerAd.java create mode 100644 mih_ui/android/build/ios/SourcePackages/google_mobile_ads-8.0.0/android/src/main/java/io/flutter/plugins/googlemobileads/FlutterAd.java create mode 100644 mih_ui/android/build/ios/SourcePackages/google_mobile_ads-8.0.0/android/src/main/java/io/flutter/plugins/googlemobileads/FlutterAdListener.java create mode 100644 mih_ui/android/build/ios/SourcePackages/google_mobile_ads-8.0.0/android/src/main/java/io/flutter/plugins/googlemobileads/FlutterAdLoader.java create mode 100644 mih_ui/android/build/ios/SourcePackages/google_mobile_ads-8.0.0/android/src/main/java/io/flutter/plugins/googlemobileads/FlutterAdManagerAdRequest.java create mode 100644 mih_ui/android/build/ios/SourcePackages/google_mobile_ads-8.0.0/android/src/main/java/io/flutter/plugins/googlemobileads/FlutterAdManagerBannerAd.java create mode 100644 mih_ui/android/build/ios/SourcePackages/google_mobile_ads-8.0.0/android/src/main/java/io/flutter/plugins/googlemobileads/FlutterAdManagerInterstitialAd.java create mode 100644 mih_ui/android/build/ios/SourcePackages/google_mobile_ads-8.0.0/android/src/main/java/io/flutter/plugins/googlemobileads/FlutterAdRequest.java create mode 100644 mih_ui/android/build/ios/SourcePackages/google_mobile_ads-8.0.0/android/src/main/java/io/flutter/plugins/googlemobileads/FlutterAdSize.java create mode 100644 mih_ui/android/build/ios/SourcePackages/google_mobile_ads-8.0.0/android/src/main/java/io/flutter/plugins/googlemobileads/FlutterAdValue.java create mode 100644 mih_ui/android/build/ios/SourcePackages/google_mobile_ads-8.0.0/android/src/main/java/io/flutter/plugins/googlemobileads/FlutterAdapterStatus.java create mode 100644 mih_ui/android/build/ios/SourcePackages/google_mobile_ads-8.0.0/android/src/main/java/io/flutter/plugins/googlemobileads/FlutterAppOpenAd.java create mode 100644 mih_ui/android/build/ios/SourcePackages/google_mobile_ads-8.0.0/android/src/main/java/io/flutter/plugins/googlemobileads/FlutterBannerAd.java create mode 100644 mih_ui/android/build/ios/SourcePackages/google_mobile_ads-8.0.0/android/src/main/java/io/flutter/plugins/googlemobileads/FlutterDestroyableAd.java create mode 100644 mih_ui/android/build/ios/SourcePackages/google_mobile_ads-8.0.0/android/src/main/java/io/flutter/plugins/googlemobileads/FlutterFullScreenContentCallback.java create mode 100644 mih_ui/android/build/ios/SourcePackages/google_mobile_ads-8.0.0/android/src/main/java/io/flutter/plugins/googlemobileads/FlutterInitializationStatus.java create mode 100644 mih_ui/android/build/ios/SourcePackages/google_mobile_ads-8.0.0/android/src/main/java/io/flutter/plugins/googlemobileads/FlutterInterstitialAd.java create mode 100644 mih_ui/android/build/ios/SourcePackages/google_mobile_ads-8.0.0/android/src/main/java/io/flutter/plugins/googlemobileads/FlutterMediationExtras.java create mode 100644 mih_ui/android/build/ios/SourcePackages/google_mobile_ads-8.0.0/android/src/main/java/io/flutter/plugins/googlemobileads/FlutterMobileAdsWrapper.java create mode 100644 mih_ui/android/build/ios/SourcePackages/google_mobile_ads-8.0.0/android/src/main/java/io/flutter/plugins/googlemobileads/FlutterNativeAd.java create mode 100644 mih_ui/android/build/ios/SourcePackages/google_mobile_ads-8.0.0/android/src/main/java/io/flutter/plugins/googlemobileads/FlutterNativeAdOptions.java create mode 100644 mih_ui/android/build/ios/SourcePackages/google_mobile_ads-8.0.0/android/src/main/java/io/flutter/plugins/googlemobileads/FlutterPaidEventListener.java create mode 100644 mih_ui/android/build/ios/SourcePackages/google_mobile_ads-8.0.0/android/src/main/java/io/flutter/plugins/googlemobileads/FlutterPlatformView.java create mode 100644 mih_ui/android/build/ios/SourcePackages/google_mobile_ads-8.0.0/android/src/main/java/io/flutter/plugins/googlemobileads/FlutterRequestAgentProvider.java create mode 100644 mih_ui/android/build/ios/SourcePackages/google_mobile_ads-8.0.0/android/src/main/java/io/flutter/plugins/googlemobileads/FlutterRewardedAd.java create mode 100644 mih_ui/android/build/ios/SourcePackages/google_mobile_ads-8.0.0/android/src/main/java/io/flutter/plugins/googlemobileads/FlutterRewardedInterstitialAd.java create mode 100644 mih_ui/android/build/ios/SourcePackages/google_mobile_ads-8.0.0/android/src/main/java/io/flutter/plugins/googlemobileads/FlutterServerSideVerificationOptions.java create mode 100644 mih_ui/android/build/ios/SourcePackages/google_mobile_ads-8.0.0/android/src/main/java/io/flutter/plugins/googlemobileads/FlutterVideoOptions.java create mode 100644 mih_ui/android/build/ios/SourcePackages/google_mobile_ads-8.0.0/android/src/main/java/io/flutter/plugins/googlemobileads/GoogleMobileAdsPlugin.java create mode 100644 mih_ui/android/build/ios/SourcePackages/google_mobile_ads-8.0.0/android/src/main/java/io/flutter/plugins/googlemobileads/GoogleMobileAdsViewFactory.java create mode 100644 mih_ui/android/build/ios/SourcePackages/google_mobile_ads-8.0.0/android/src/main/java/io/flutter/plugins/googlemobileads/MediationNetworkExtrasProvider.java create mode 100644 mih_ui/android/build/ios/SourcePackages/google_mobile_ads-8.0.0/android/src/main/java/io/flutter/plugins/googlemobileads/nativetemplates/FlutterNativeTemplateFontStyle.java create mode 100644 mih_ui/android/build/ios/SourcePackages/google_mobile_ads-8.0.0/android/src/main/java/io/flutter/plugins/googlemobileads/nativetemplates/FlutterNativeTemplateStyle.java create mode 100644 mih_ui/android/build/ios/SourcePackages/google_mobile_ads-8.0.0/android/src/main/java/io/flutter/plugins/googlemobileads/nativetemplates/FlutterNativeTemplateTextStyle.java create mode 100644 mih_ui/android/build/ios/SourcePackages/google_mobile_ads-8.0.0/android/src/main/java/io/flutter/plugins/googlemobileads/nativetemplates/FlutterNativeTemplateType.java create mode 100644 mih_ui/android/build/ios/SourcePackages/google_mobile_ads-8.0.0/android/src/main/java/io/flutter/plugins/googlemobileads/usermessagingplatform/ConsentDebugSettingsWrapper.java create mode 100644 mih_ui/android/build/ios/SourcePackages/google_mobile_ads-8.0.0/android/src/main/java/io/flutter/plugins/googlemobileads/usermessagingplatform/ConsentRequestParametersWrapper.java create mode 100644 mih_ui/android/build/ios/SourcePackages/google_mobile_ads-8.0.0/android/src/main/java/io/flutter/plugins/googlemobileads/usermessagingplatform/UserMessagingCodec.java create mode 100644 mih_ui/android/build/ios/SourcePackages/google_mobile_ads-8.0.0/android/src/main/java/io/flutter/plugins/googlemobileads/usermessagingplatform/UserMessagingPlatformManager.java create mode 100644 mih_ui/android/build/ios/SourcePackages/google_mobile_ads-8.0.0/android/src/main/res/drawable/gnt_outline_shape.xml create mode 100644 mih_ui/android/build/ios/SourcePackages/google_mobile_ads-8.0.0/android/src/main/res/drawable/gnt_rounded_corners_shape.xml create mode 100644 mih_ui/android/build/ios/SourcePackages/google_mobile_ads-8.0.0/android/src/main/res/layout/gnt_medium_template_view.xml create mode 100644 mih_ui/android/build/ios/SourcePackages/google_mobile_ads-8.0.0/android/src/main/res/layout/gnt_small_template_view.xml create mode 100644 mih_ui/android/build/ios/SourcePackages/google_mobile_ads-8.0.0/android/src/main/res/layout/medium_template_view_layout.xml create mode 100644 mih_ui/android/build/ios/SourcePackages/google_mobile_ads-8.0.0/android/src/main/res/layout/small_template_view_layout.xml create mode 100644 mih_ui/android/build/ios/SourcePackages/google_mobile_ads-8.0.0/android/src/main/res/values/attrs.xml create mode 100644 mih_ui/android/build/ios/SourcePackages/google_mobile_ads-8.0.0/android/src/main/res/values/colors.xml create mode 100644 mih_ui/android/build/ios/SourcePackages/google_mobile_ads-8.0.0/android/src/main/res/values/dimens.xml create mode 100644 mih_ui/android/build/ios/SourcePackages/google_mobile_ads-8.0.0/android/src/test/java/io/flutter/plugins/googlemobileads/AdMessageCodecTest.java create mode 100644 mih_ui/android/build/ios/SourcePackages/google_mobile_ads-8.0.0/android/src/test/java/io/flutter/plugins/googlemobileads/FluidAdManagerBannerAdTest.java create mode 100644 mih_ui/android/build/ios/SourcePackages/google_mobile_ads-8.0.0/android/src/test/java/io/flutter/plugins/googlemobileads/FlutterAdManagerAdRequestTest.java create mode 100644 mih_ui/android/build/ios/SourcePackages/google_mobile_ads-8.0.0/android/src/test/java/io/flutter/plugins/googlemobileads/FlutterAdManagerBannerAdTest.java create mode 100644 mih_ui/android/build/ios/SourcePackages/google_mobile_ads-8.0.0/android/src/test/java/io/flutter/plugins/googlemobileads/FlutterAdManagerInterstitialAdTest.java create mode 100644 mih_ui/android/build/ios/SourcePackages/google_mobile_ads-8.0.0/android/src/test/java/io/flutter/plugins/googlemobileads/FlutterAdRequestTest.java create mode 100644 mih_ui/android/build/ios/SourcePackages/google_mobile_ads-8.0.0/android/src/test/java/io/flutter/plugins/googlemobileads/FlutterAppOpenAdTest.java create mode 100644 mih_ui/android/build/ios/SourcePackages/google_mobile_ads-8.0.0/android/src/test/java/io/flutter/plugins/googlemobileads/FlutterBannerAdTest.java create mode 100644 mih_ui/android/build/ios/SourcePackages/google_mobile_ads-8.0.0/android/src/test/java/io/flutter/plugins/googlemobileads/FlutterInterstitialAdTest.java create mode 100644 mih_ui/android/build/ios/SourcePackages/google_mobile_ads-8.0.0/android/src/test/java/io/flutter/plugins/googlemobileads/FlutterNativeAdOptionsTest.java create mode 100644 mih_ui/android/build/ios/SourcePackages/google_mobile_ads-8.0.0/android/src/test/java/io/flutter/plugins/googlemobileads/FlutterNativeAdTest.java create mode 100644 mih_ui/android/build/ios/SourcePackages/google_mobile_ads-8.0.0/android/src/test/java/io/flutter/plugins/googlemobileads/FlutterRequestAgentProviderTest.java create mode 100644 mih_ui/android/build/ios/SourcePackages/google_mobile_ads-8.0.0/android/src/test/java/io/flutter/plugins/googlemobileads/FlutterRewardedAdTest.java create mode 100644 mih_ui/android/build/ios/SourcePackages/google_mobile_ads-8.0.0/android/src/test/java/io/flutter/plugins/googlemobileads/FlutterRewardedInterstitialAdTest.java create mode 100644 mih_ui/android/build/ios/SourcePackages/google_mobile_ads-8.0.0/android/src/test/java/io/flutter/plugins/googlemobileads/FlutterVideoOptionsTest.java create mode 100644 mih_ui/android/build/ios/SourcePackages/google_mobile_ads-8.0.0/android/src/test/java/io/flutter/plugins/googlemobileads/GoogleMobileAdsTest.java create mode 100644 mih_ui/android/build/ios/SourcePackages/google_mobile_ads-8.0.0/android/src/test/java/io/flutter/plugins/googlemobileads/nativetemplates/FlutterNativeTemplateFontStyleTest.java create mode 100644 mih_ui/android/build/ios/SourcePackages/google_mobile_ads-8.0.0/android/src/test/java/io/flutter/plugins/googlemobileads/nativetemplates/FlutterNativeTemplateStyleTest.java create mode 100644 mih_ui/android/build/ios/SourcePackages/google_mobile_ads-8.0.0/android/src/test/java/io/flutter/plugins/googlemobileads/nativetemplates/FlutterNativeTemplateTextStyleTest.java create mode 100644 mih_ui/android/build/ios/SourcePackages/google_mobile_ads-8.0.0/android/src/test/java/io/flutter/plugins/googlemobileads/nativetemplates/FlutterNativeTemplateTypeTest.java create mode 100644 mih_ui/android/build/ios/SourcePackages/google_mobile_ads-8.0.0/android/src/test/java/io/flutter/plugins/googlemobileads/usermessagingplatform/UserMessagingCodecTest.java create mode 100644 mih_ui/android/build/ios/SourcePackages/google_mobile_ads-8.0.0/android/src/test/java/io/flutter/plugins/googlemobileads/usermessagingplatform/UserMessagingPlatformManagerTest.java create mode 100644 mih_ui/android/build/ios/SourcePackages/google_mobile_ads-8.0.0/example/README.md create mode 100644 mih_ui/android/build/ios/SourcePackages/google_mobile_ads-8.0.0/example/analysis_options.yaml create mode 100644 mih_ui/android/build/ios/SourcePackages/google_mobile_ads-8.0.0/example/android/app/build.gradle create mode 100644 mih_ui/android/build/ios/SourcePackages/google_mobile_ads-8.0.0/example/android/app/src/main/AndroidManifest.xml create mode 100644 mih_ui/android/build/ios/SourcePackages/google_mobile_ads-8.0.0/example/android/app/src/main/java/io/flutter/plugins/googlemobileadsexample/MainActivity.java create mode 100644 mih_ui/android/build/ios/SourcePackages/google_mobile_ads-8.0.0/example/android/app/src/main/java/io/flutter/plugins/googlemobileadsexample/NativeAdFactoryExample.java create mode 100644 mih_ui/android/build/ios/SourcePackages/google_mobile_ads-8.0.0/example/android/app/src/main/res/layout/my_native_ad.xml create mode 100644 mih_ui/android/build/ios/SourcePackages/google_mobile_ads-8.0.0/example/android/app/src/main/res/mipmap-hdpi/ic_launcher.png create mode 100644 mih_ui/android/build/ios/SourcePackages/google_mobile_ads-8.0.0/example/android/app/src/main/res/mipmap-mdpi/ic_launcher.png create mode 100644 mih_ui/android/build/ios/SourcePackages/google_mobile_ads-8.0.0/example/android/app/src/main/res/mipmap-xhdpi/ic_launcher.png create mode 100644 mih_ui/android/build/ios/SourcePackages/google_mobile_ads-8.0.0/example/android/app/src/main/res/mipmap-xxhdpi/ic_launcher.png create mode 100644 mih_ui/android/build/ios/SourcePackages/google_mobile_ads-8.0.0/example/android/app/src/main/res/mipmap-xxxhdpi/ic_launcher.png create mode 100644 mih_ui/android/build/ios/SourcePackages/google_mobile_ads-8.0.0/example/android/build.gradle create mode 100644 mih_ui/android/build/ios/SourcePackages/google_mobile_ads-8.0.0/example/android/gradle.properties create mode 100644 mih_ui/android/build/ios/SourcePackages/google_mobile_ads-8.0.0/example/android/gradle/wrapper/gradle-wrapper.properties create mode 100644 mih_ui/android/build/ios/SourcePackages/google_mobile_ads-8.0.0/example/android/settings.gradle create mode 100644 mih_ui/android/build/ios/SourcePackages/google_mobile_ads-8.0.0/example/ios/Flutter/AppFrameworkInfo.plist create mode 100644 mih_ui/android/build/ios/SourcePackages/google_mobile_ads-8.0.0/example/ios/Flutter/Debug.xcconfig create mode 100644 mih_ui/android/build/ios/SourcePackages/google_mobile_ads-8.0.0/example/ios/Flutter/Release.xcconfig create mode 100644 mih_ui/android/build/ios/SourcePackages/google_mobile_ads-8.0.0/example/ios/Podfile create mode 100644 mih_ui/android/build/ios/SourcePackages/google_mobile_ads-8.0.0/example/ios/Runner.xcodeproj/project.pbxproj create mode 100644 mih_ui/android/build/ios/SourcePackages/google_mobile_ads-8.0.0/example/ios/Runner.xcodeproj/project.xcworkspace/contents.xcworkspacedata create mode 100644 mih_ui/android/build/ios/SourcePackages/google_mobile_ads-8.0.0/example/ios/Runner.xcodeproj/project.xcworkspace/xcshareddata/swiftpm/Package.resolved create mode 100644 mih_ui/android/build/ios/SourcePackages/google_mobile_ads-8.0.0/example/ios/Runner.xcodeproj/xcshareddata/xcschemes/Runner.xcscheme create mode 100644 mih_ui/android/build/ios/SourcePackages/google_mobile_ads-8.0.0/example/ios/Runner.xcworkspace/contents.xcworkspacedata create mode 100644 mih_ui/android/build/ios/SourcePackages/google_mobile_ads-8.0.0/example/ios/Runner.xcworkspace/xcshareddata/swiftpm/Package.resolved create mode 100644 mih_ui/android/build/ios/SourcePackages/google_mobile_ads-8.0.0/example/ios/Runner/AppDelegate.h create mode 100644 mih_ui/android/build/ios/SourcePackages/google_mobile_ads-8.0.0/example/ios/Runner/AppDelegate.m create mode 100644 mih_ui/android/build/ios/SourcePackages/google_mobile_ads-8.0.0/example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Contents.json create mode 100644 mih_ui/android/build/ios/SourcePackages/google_mobile_ads-8.0.0/example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@1x.png create mode 100644 mih_ui/android/build/ios/SourcePackages/google_mobile_ads-8.0.0/example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@2x.png create mode 100644 mih_ui/android/build/ios/SourcePackages/google_mobile_ads-8.0.0/example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@3x.png create mode 100644 mih_ui/android/build/ios/SourcePackages/google_mobile_ads-8.0.0/example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@1x.png create mode 100644 mih_ui/android/build/ios/SourcePackages/google_mobile_ads-8.0.0/example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@2x.png create mode 100644 mih_ui/android/build/ios/SourcePackages/google_mobile_ads-8.0.0/example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@3x.png create mode 100644 mih_ui/android/build/ios/SourcePackages/google_mobile_ads-8.0.0/example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@1x.png create mode 100644 mih_ui/android/build/ios/SourcePackages/google_mobile_ads-8.0.0/example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@2x.png create mode 100644 mih_ui/android/build/ios/SourcePackages/google_mobile_ads-8.0.0/example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@3x.png create mode 100644 mih_ui/android/build/ios/SourcePackages/google_mobile_ads-8.0.0/example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-60x60@2x.png create mode 100644 mih_ui/android/build/ios/SourcePackages/google_mobile_ads-8.0.0/example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-60x60@3x.png create mode 100644 mih_ui/android/build/ios/SourcePackages/google_mobile_ads-8.0.0/example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-76x76@1x.png create mode 100644 mih_ui/android/build/ios/SourcePackages/google_mobile_ads-8.0.0/example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-76x76@2x.png create mode 100644 mih_ui/android/build/ios/SourcePackages/google_mobile_ads-8.0.0/example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-83.5x83.5@2x.png create mode 100644 mih_ui/android/build/ios/SourcePackages/google_mobile_ads-8.0.0/example/ios/Runner/Base.lproj/LaunchScreen.storyboard create mode 100644 mih_ui/android/build/ios/SourcePackages/google_mobile_ads-8.0.0/example/ios/Runner/Base.lproj/Main.storyboard create mode 100644 mih_ui/android/build/ios/SourcePackages/google_mobile_ads-8.0.0/example/ios/Runner/Info.plist create mode 100644 mih_ui/android/build/ios/SourcePackages/google_mobile_ads-8.0.0/example/ios/Runner/NativeAdView.xib create mode 100644 mih_ui/android/build/ios/SourcePackages/google_mobile_ads-8.0.0/example/ios/Runner/main.m create mode 100644 mih_ui/android/build/ios/SourcePackages/google_mobile_ads-8.0.0/example/ios/RunnerTests/FLTAdRequestTest.m create mode 100644 mih_ui/android/build/ios/SourcePackages/google_mobile_ads-8.0.0/example/ios/RunnerTests/FLTAdUtilTest.m create mode 100644 mih_ui/android/build/ios/SourcePackages/google_mobile_ads-8.0.0/example/ios/RunnerTests/FLTAppOpenAdTest.m create mode 100644 mih_ui/android/build/ios/SourcePackages/google_mobile_ads-8.0.0/example/ios/RunnerTests/FLTBannerAdTest.m create mode 100644 mih_ui/android/build/ios/SourcePackages/google_mobile_ads-8.0.0/example/ios/RunnerTests/FLTFluidGAMBannerAdTest.m create mode 100644 mih_ui/android/build/ios/SourcePackages/google_mobile_ads-8.0.0/example/ios/RunnerTests/FLTGAMAdRequestTest.m create mode 100644 mih_ui/android/build/ios/SourcePackages/google_mobile_ads-8.0.0/example/ios/RunnerTests/FLTGAMBannerAdTest.m create mode 100644 mih_ui/android/build/ios/SourcePackages/google_mobile_ads-8.0.0/example/ios/RunnerTests/FLTGamInterstitialAdTest.m create mode 100644 mih_ui/android/build/ios/SourcePackages/google_mobile_ads-8.0.0/example/ios/RunnerTests/FLTGoogleMobileAdsPluginMethodCallsTest.m create mode 100644 mih_ui/android/build/ios/SourcePackages/google_mobile_ads-8.0.0/example/ios/RunnerTests/FLTGoogleMobileAdsReaderWriterTest.m create mode 100644 mih_ui/android/build/ios/SourcePackages/google_mobile_ads-8.0.0/example/ios/RunnerTests/FLTGoogleMobileAdsTest.m create mode 100644 mih_ui/android/build/ios/SourcePackages/google_mobile_ads-8.0.0/example/ios/RunnerTests/FLTInterstitialAdTest.m create mode 100644 mih_ui/android/build/ios/SourcePackages/google_mobile_ads-8.0.0/example/ios/RunnerTests/FLTNativeAdTest.m create mode 100644 mih_ui/android/build/ios/SourcePackages/google_mobile_ads-8.0.0/example/ios/RunnerTests/FLTRewardedAdTest.m create mode 100644 mih_ui/android/build/ios/SourcePackages/google_mobile_ads-8.0.0/example/ios/RunnerTests/FLTRewardedInterstitialAdTest.m create mode 100644 mih_ui/android/build/ios/SourcePackages/google_mobile_ads-8.0.0/example/ios/RunnerTests/FLTUserMessagingPlatformManagerTest.m create mode 100644 mih_ui/android/build/ios/SourcePackages/google_mobile_ads-8.0.0/example/ios/RunnerTests/FLTUserMessagingPlatformReaderWriterTest.m create mode 100644 mih_ui/android/build/ios/SourcePackages/google_mobile_ads-8.0.0/example/ios/RunnerTests/NativeTemplates/FLTNativeTemplateColorTest.m create mode 100644 mih_ui/android/build/ios/SourcePackages/google_mobile_ads-8.0.0/example/ios/RunnerTests/NativeTemplates/FLTNativeTemplateFontStyleTest.m create mode 100644 mih_ui/android/build/ios/SourcePackages/google_mobile_ads-8.0.0/example/ios/RunnerTests/NativeTemplates/FLTNativeTemplateStyleTest.m create mode 100644 mih_ui/android/build/ios/SourcePackages/google_mobile_ads-8.0.0/example/ios/RunnerTests/NativeTemplates/FLTNativeTemplateTextStyleTest.m create mode 100644 mih_ui/android/build/ios/SourcePackages/google_mobile_ads-8.0.0/example/ios/RunnerTests/NativeTemplates/FLTNativeTemplateTypeTest.m create mode 100644 mih_ui/android/build/ios/SourcePackages/google_mobile_ads-8.0.0/example/ios/google_mobile_ads_exampleTests/Info.plist create mode 100644 mih_ui/android/build/ios/SourcePackages/google_mobile_ads-8.0.0/example/lib/anchored_adaptive_example.dart create mode 100644 mih_ui/android/build/ios/SourcePackages/google_mobile_ads-8.0.0/example/lib/constants.dart create mode 100644 mih_ui/android/build/ios/SourcePackages/google_mobile_ads-8.0.0/example/lib/fluid_example.dart create mode 100644 mih_ui/android/build/ios/SourcePackages/google_mobile_ads-8.0.0/example/lib/inline_adaptive_example.dart create mode 100644 mih_ui/android/build/ios/SourcePackages/google_mobile_ads-8.0.0/example/lib/main.dart create mode 100644 mih_ui/android/build/ios/SourcePackages/google_mobile_ads-8.0.0/example/lib/multi_adaptive_inline_with_recycle_example.dart create mode 100644 mih_ui/android/build/ios/SourcePackages/google_mobile_ads-8.0.0/example/lib/native_template_example.dart create mode 100644 mih_ui/android/build/ios/SourcePackages/google_mobile_ads-8.0.0/example/lib/reusable_inline_example.dart create mode 100644 mih_ui/android/build/ios/SourcePackages/google_mobile_ads-8.0.0/example/lib/snippets/banner_ad_snippets.dart create mode 100644 mih_ui/android/build/ios/SourcePackages/google_mobile_ads-8.0.0/example/lib/snippets/interstitial_ad_snippets.dart create mode 100644 mih_ui/android/build/ios/SourcePackages/google_mobile_ads-8.0.0/example/lib/snippets/rewarded_ad_snippets.dart create mode 100644 mih_ui/android/build/ios/SourcePackages/google_mobile_ads-8.0.0/example/lib/snippets/rewarded_interstitial_ad_snippets.dart create mode 100644 mih_ui/android/build/ios/SourcePackages/google_mobile_ads-8.0.0/example/lib/webview_example.dart create mode 100644 mih_ui/android/build/ios/SourcePackages/google_mobile_ads-8.0.0/example/pubspec.yaml create mode 100644 mih_ui/android/build/ios/SourcePackages/google_mobile_ads-8.0.0/ios/google_mobile_ads.podspec create mode 100644 mih_ui/android/build/ios/SourcePackages/google_mobile_ads-8.0.0/ios/google_mobile_ads/Package.swift create mode 100644 mih_ui/android/build/ios/SourcePackages/google_mobile_ads-8.0.0/ios/google_mobile_ads/Sources/google_mobile_ads/FLTAdInstanceManager_Internal.m create mode 100644 mih_ui/android/build/ios/SourcePackages/google_mobile_ads-8.0.0/ios/google_mobile_ads/Sources/google_mobile_ads/FLTAdUtil.m create mode 100644 mih_ui/android/build/ios/SourcePackages/google_mobile_ads-8.0.0/ios/google_mobile_ads/Sources/google_mobile_ads/FLTAd_Internal.m create mode 100644 mih_ui/android/build/ios/SourcePackages/google_mobile_ads-8.0.0/ios/google_mobile_ads/Sources/google_mobile_ads/FLTAppStateNotifier.m create mode 100644 mih_ui/android/build/ios/SourcePackages/google_mobile_ads-8.0.0/ios/google_mobile_ads/Sources/google_mobile_ads/FLTGoogleMobileAdsCollection_Internal.m create mode 100644 mih_ui/android/build/ios/SourcePackages/google_mobile_ads-8.0.0/ios/google_mobile_ads/Sources/google_mobile_ads/FLTGoogleMobileAdsPlugin.m create mode 100644 mih_ui/android/build/ios/SourcePackages/google_mobile_ads-8.0.0/ios/google_mobile_ads/Sources/google_mobile_ads/FLTGoogleMobileAdsReaderWriter_Internal.m create mode 100644 mih_ui/android/build/ios/SourcePackages/google_mobile_ads-8.0.0/ios/google_mobile_ads/Sources/google_mobile_ads/FLTMobileAds_Internal.m create mode 100644 mih_ui/android/build/ios/SourcePackages/google_mobile_ads-8.0.0/ios/google_mobile_ads/Sources/google_mobile_ads/FLTNSString.m create mode 100644 mih_ui/android/build/ios/SourcePackages/google_mobile_ads-8.0.0/ios/google_mobile_ads/Sources/google_mobile_ads/GoogleAdsMobileIosNativeTemplates/GADTFullScreenTemplateView.m create mode 100644 mih_ui/android/build/ios/SourcePackages/google_mobile_ads-8.0.0/ios/google_mobile_ads/Sources/google_mobile_ads/GoogleAdsMobileIosNativeTemplates/GADTMediumTemplateView.m create mode 100644 mih_ui/android/build/ios/SourcePackages/google_mobile_ads-8.0.0/ios/google_mobile_ads/Sources/google_mobile_ads/GoogleAdsMobileIosNativeTemplates/GADTSmallTemplateView.m create mode 100644 mih_ui/android/build/ios/SourcePackages/google_mobile_ads-8.0.0/ios/google_mobile_ads/Sources/google_mobile_ads/GoogleAdsMobileIosNativeTemplates/GADTTemplateView.m create mode 100644 mih_ui/android/build/ios/SourcePackages/google_mobile_ads-8.0.0/ios/google_mobile_ads/Sources/google_mobile_ads/NativeTemplates/FLTNativeTemplateColor.m create mode 100644 mih_ui/android/build/ios/SourcePackages/google_mobile_ads-8.0.0/ios/google_mobile_ads/Sources/google_mobile_ads/NativeTemplates/FLTNativeTemplateFontStyle.m create mode 100644 mih_ui/android/build/ios/SourcePackages/google_mobile_ads-8.0.0/ios/google_mobile_ads/Sources/google_mobile_ads/NativeTemplates/FLTNativeTemplateStyle.m create mode 100644 mih_ui/android/build/ios/SourcePackages/google_mobile_ads-8.0.0/ios/google_mobile_ads/Sources/google_mobile_ads/NativeTemplates/FLTNativeTemplateTextStyle.m create mode 100644 mih_ui/android/build/ios/SourcePackages/google_mobile_ads-8.0.0/ios/google_mobile_ads/Sources/google_mobile_ads/NativeTemplates/FLTNativeTemplateType.m create mode 100644 mih_ui/android/build/ios/SourcePackages/google_mobile_ads-8.0.0/ios/google_mobile_ads/Sources/google_mobile_ads/Resources/GADTFullScreenTemplateView.xib create mode 100644 mih_ui/android/build/ios/SourcePackages/google_mobile_ads-8.0.0/ios/google_mobile_ads/Sources/google_mobile_ads/Resources/GADTMediumTemplateView.xib create mode 100644 mih_ui/android/build/ios/SourcePackages/google_mobile_ads-8.0.0/ios/google_mobile_ads/Sources/google_mobile_ads/Resources/GADTSmallTemplateView.xib create mode 100644 mih_ui/android/build/ios/SourcePackages/google_mobile_ads-8.0.0/ios/google_mobile_ads/Sources/google_mobile_ads/UserMessagingPlatform/FLTUserMessagingPlatformManager.m create mode 100644 mih_ui/android/build/ios/SourcePackages/google_mobile_ads-8.0.0/ios/google_mobile_ads/Sources/google_mobile_ads/UserMessagingPlatform/FLTUserMessagingPlatformReaderWriter.m create mode 100644 mih_ui/android/build/ios/SourcePackages/google_mobile_ads-8.0.0/ios/google_mobile_ads/Sources/google_mobile_ads/include/google_mobile_ads/FLTAdInstanceManager_Internal.h create mode 100644 mih_ui/android/build/ios/SourcePackages/google_mobile_ads-8.0.0/ios/google_mobile_ads/Sources/google_mobile_ads/include/google_mobile_ads/FLTAdUtil.h create mode 100644 mih_ui/android/build/ios/SourcePackages/google_mobile_ads-8.0.0/ios/google_mobile_ads/Sources/google_mobile_ads/include/google_mobile_ads/FLTAd_Internal.h create mode 100644 mih_ui/android/build/ios/SourcePackages/google_mobile_ads-8.0.0/ios/google_mobile_ads/Sources/google_mobile_ads/include/google_mobile_ads/FLTAppStateNotifier.h create mode 100644 mih_ui/android/build/ios/SourcePackages/google_mobile_ads-8.0.0/ios/google_mobile_ads/Sources/google_mobile_ads/include/google_mobile_ads/FLTConstants.h create mode 100644 mih_ui/android/build/ios/SourcePackages/google_mobile_ads-8.0.0/ios/google_mobile_ads/Sources/google_mobile_ads/include/google_mobile_ads/FLTGoogleMobileAdsCollection_Internal.h create mode 100644 mih_ui/android/build/ios/SourcePackages/google_mobile_ads-8.0.0/ios/google_mobile_ads/Sources/google_mobile_ads/include/google_mobile_ads/FLTGoogleMobileAdsPlugin.h create mode 100644 mih_ui/android/build/ios/SourcePackages/google_mobile_ads-8.0.0/ios/google_mobile_ads/Sources/google_mobile_ads/include/google_mobile_ads/FLTGoogleMobileAdsReaderWriter_Internal.h create mode 100644 mih_ui/android/build/ios/SourcePackages/google_mobile_ads-8.0.0/ios/google_mobile_ads/Sources/google_mobile_ads/include/google_mobile_ads/FLTMediationExtras.h create mode 100644 mih_ui/android/build/ios/SourcePackages/google_mobile_ads-8.0.0/ios/google_mobile_ads/Sources/google_mobile_ads/include/google_mobile_ads/FLTMediationNetworkExtrasProvider.h create mode 100644 mih_ui/android/build/ios/SourcePackages/google_mobile_ads-8.0.0/ios/google_mobile_ads/Sources/google_mobile_ads/include/google_mobile_ads/FLTMobileAds_Internal.h create mode 100644 mih_ui/android/build/ios/SourcePackages/google_mobile_ads-8.0.0/ios/google_mobile_ads/Sources/google_mobile_ads/include/google_mobile_ads/FLTNSString.h create mode 100644 mih_ui/android/build/ios/SourcePackages/google_mobile_ads-8.0.0/ios/google_mobile_ads/Sources/google_mobile_ads/include/google_mobile_ads/FLTNativeTemplateColor.h create mode 100644 mih_ui/android/build/ios/SourcePackages/google_mobile_ads-8.0.0/ios/google_mobile_ads/Sources/google_mobile_ads/include/google_mobile_ads/FLTNativeTemplateFontStyle.h create mode 100644 mih_ui/android/build/ios/SourcePackages/google_mobile_ads-8.0.0/ios/google_mobile_ads/Sources/google_mobile_ads/include/google_mobile_ads/FLTNativeTemplateStyle.h create mode 100644 mih_ui/android/build/ios/SourcePackages/google_mobile_ads-8.0.0/ios/google_mobile_ads/Sources/google_mobile_ads/include/google_mobile_ads/FLTNativeTemplateTextStyle.h create mode 100644 mih_ui/android/build/ios/SourcePackages/google_mobile_ads-8.0.0/ios/google_mobile_ads/Sources/google_mobile_ads/include/google_mobile_ads/FLTNativeTemplateType.h create mode 100644 mih_ui/android/build/ios/SourcePackages/google_mobile_ads-8.0.0/ios/google_mobile_ads/Sources/google_mobile_ads/include/google_mobile_ads/FLTUserMessagingPlatformManager.h create mode 100644 mih_ui/android/build/ios/SourcePackages/google_mobile_ads-8.0.0/ios/google_mobile_ads/Sources/google_mobile_ads/include/google_mobile_ads/FLTUserMessagingPlatformReaderWriter.h create mode 100644 mih_ui/android/build/ios/SourcePackages/google_mobile_ads-8.0.0/ios/google_mobile_ads/Sources/google_mobile_ads/include/google_mobile_ads/GADTFullScreenTemplateView.h create mode 100644 mih_ui/android/build/ios/SourcePackages/google_mobile_ads-8.0.0/ios/google_mobile_ads/Sources/google_mobile_ads/include/google_mobile_ads/GADTMediumTemplateView.h create mode 100644 mih_ui/android/build/ios/SourcePackages/google_mobile_ads-8.0.0/ios/google_mobile_ads/Sources/google_mobile_ads/include/google_mobile_ads/GADTSmallTemplateView.h create mode 100644 mih_ui/android/build/ios/SourcePackages/google_mobile_ads-8.0.0/ios/google_mobile_ads/Sources/google_mobile_ads/include/google_mobile_ads/GADTTemplateView.h create mode 100644 mih_ui/android/build/ios/SourcePackages/google_mobile_ads-8.0.0/lib/google_mobile_ads.dart create mode 100644 mih_ui/android/build/ios/SourcePackages/google_mobile_ads-8.0.0/lib/src/ad_containers.dart create mode 100644 mih_ui/android/build/ios/SourcePackages/google_mobile_ads-8.0.0/lib/src/ad_inspector_containers.dart create mode 100644 mih_ui/android/build/ios/SourcePackages/google_mobile_ads-8.0.0/lib/src/ad_instance_manager.dart create mode 100644 mih_ui/android/build/ios/SourcePackages/google_mobile_ads-8.0.0/lib/src/ad_listeners.dart create mode 100644 mih_ui/android/build/ios/SourcePackages/google_mobile_ads-8.0.0/lib/src/app_background_event_notifier.dart create mode 100644 mih_ui/android/build/ios/SourcePackages/google_mobile_ads-8.0.0/lib/src/mediation_extras.dart create mode 100644 mih_ui/android/build/ios/SourcePackages/google_mobile_ads-8.0.0/lib/src/mobile_ads.dart create mode 100644 mih_ui/android/build/ios/SourcePackages/google_mobile_ads-8.0.0/lib/src/nativetemplates/native_template_font_style.dart create mode 100644 mih_ui/android/build/ios/SourcePackages/google_mobile_ads-8.0.0/lib/src/nativetemplates/native_template_style.dart create mode 100644 mih_ui/android/build/ios/SourcePackages/google_mobile_ads-8.0.0/lib/src/nativetemplates/native_template_text_style.dart create mode 100644 mih_ui/android/build/ios/SourcePackages/google_mobile_ads-8.0.0/lib/src/nativetemplates/template_type.dart create mode 100644 mih_ui/android/build/ios/SourcePackages/google_mobile_ads-8.0.0/lib/src/request_configuration.dart create mode 100644 mih_ui/android/build/ios/SourcePackages/google_mobile_ads-8.0.0/lib/src/ump/consent_form.dart create mode 100644 mih_ui/android/build/ios/SourcePackages/google_mobile_ads-8.0.0/lib/src/ump/consent_form_impl.dart create mode 100644 mih_ui/android/build/ios/SourcePackages/google_mobile_ads-8.0.0/lib/src/ump/consent_information.dart create mode 100644 mih_ui/android/build/ios/SourcePackages/google_mobile_ads-8.0.0/lib/src/ump/consent_information_impl.dart create mode 100644 mih_ui/android/build/ios/SourcePackages/google_mobile_ads-8.0.0/lib/src/ump/consent_request_parameters.dart create mode 100644 mih_ui/android/build/ios/SourcePackages/google_mobile_ads-8.0.0/lib/src/ump/form_error.dart create mode 100644 mih_ui/android/build/ios/SourcePackages/google_mobile_ads-8.0.0/lib/src/ump/user_messaging_channel.dart create mode 100644 mih_ui/android/build/ios/SourcePackages/google_mobile_ads-8.0.0/lib/src/ump/user_messaging_codec.dart create mode 100644 mih_ui/android/build/ios/SourcePackages/google_mobile_ads-8.0.0/lib/src/webview_controller_util.dart create mode 100644 mih_ui/android/build/ios/SourcePackages/google_mobile_ads-8.0.0/pubspec.yaml create mode 100644 mih_ui/android/build/ios/SourcePackages/google_mobile_ads-8.0.0/test/ad_containers_test.dart create mode 100644 mih_ui/android/build/ios/SourcePackages/google_mobile_ads-8.0.0/test/admanager_banner_ad_test.dart create mode 100644 mih_ui/android/build/ios/SourcePackages/google_mobile_ads-8.0.0/test/app_open_test.dart create mode 100644 mih_ui/android/build/ios/SourcePackages/google_mobile_ads-8.0.0/test/banner_ad_test.dart create mode 100644 mih_ui/android/build/ios/SourcePackages/google_mobile_ads-8.0.0/test/fluid_ad_test.dart create mode 100644 mih_ui/android/build/ios/SourcePackages/google_mobile_ads-8.0.0/test/mobile_ads_test.dart create mode 100644 mih_ui/android/build/ios/SourcePackages/google_mobile_ads-8.0.0/test/mobile_ads_test.mocks.dart create mode 100644 mih_ui/android/build/ios/SourcePackages/google_mobile_ads-8.0.0/test/rewarded_interstitial_ad_test.dart create mode 100644 mih_ui/android/build/ios/SourcePackages/google_mobile_ads-8.0.0/test/test_util.dart create mode 100644 mih_ui/android/build/ios/SourcePackages/google_mobile_ads-8.0.0/test/ump/consent_form_impl_test.dart create mode 100644 mih_ui/android/build/ios/SourcePackages/google_mobile_ads-8.0.0/test/ump/consent_form_impl_test.mocks.dart create mode 100644 mih_ui/android/build/ios/SourcePackages/google_mobile_ads-8.0.0/test/ump/consent_form_test.dart create mode 100644 mih_ui/android/build/ios/SourcePackages/google_mobile_ads-8.0.0/test/ump/consent_form_test.mocks.dart create mode 100644 mih_ui/android/build/ios/SourcePackages/google_mobile_ads-8.0.0/test/ump/consent_information_impl_test.dart create mode 100644 mih_ui/android/build/ios/SourcePackages/google_mobile_ads-8.0.0/test/ump/consent_information_impl_test.mocks.dart create mode 100644 mih_ui/android/build/ios/SourcePackages/google_mobile_ads-8.0.0/test/ump/user_messaging_channel_test.dart create mode 100644 mih_ui/android/build/ios/SourcePackages/google_mobile_ads-8.0.0/test/ump/user_messaging_codec_test.dart create mode 100644 mih_ui/android/build/ios/XCBuildData/PIFCache/project/PROJECT@v11_mod=d0293ee0112d0357cf900112c05ab991_hash=bfdfe7dc352907fc980b868725387e98plugins=1OJSG6M1FOV3XYQCBH7Z29RZ0FPR9XDE1-json create mode 100644 mih_ui/android/build/ios/XCBuildData/PIFCache/target/TARGET@v11_hash=046b943ca2c386252fefb70091df62cb-json create mode 100644 mih_ui/android/build/ios/XCBuildData/PIFCache/target/TARGET@v11_hash=091b7b21a80cde9e2510d4e82d4cbd78-json create mode 100644 mih_ui/android/build/ios/XCBuildData/PIFCache/target/TARGET@v11_hash=0a63255185fd1fe5f5bce3e3d92075cc-json create mode 100644 mih_ui/android/build/ios/XCBuildData/PIFCache/target/TARGET@v11_hash=0b58e1096693d1b2f665847f3d6ed644-json create mode 100644 mih_ui/android/build/ios/XCBuildData/PIFCache/target/TARGET@v11_hash=0b5c502676ea77f04ab6ea7a2e8956d9-json create mode 100644 mih_ui/android/build/ios/XCBuildData/PIFCache/target/TARGET@v11_hash=110600b415fe8fc7dd4ca8c0f3c4e215-json create mode 100644 mih_ui/android/build/ios/XCBuildData/PIFCache/target/TARGET@v11_hash=1140ca82d597cd38dc60054d3a158f68-json create mode 100644 mih_ui/android/build/ios/XCBuildData/PIFCache/target/TARGET@v11_hash=14b6e6d9e2eda3680623b9cb266fb1b3-json create mode 100644 mih_ui/android/build/ios/XCBuildData/PIFCache/target/TARGET@v11_hash=1a4fe29d3cb9f9220793e4797839ee1f-json create mode 100644 mih_ui/android/build/ios/XCBuildData/PIFCache/target/TARGET@v11_hash=1abbdfc13b53a75a94289fd5712275b6-json create mode 100644 mih_ui/android/build/ios/XCBuildData/PIFCache/target/TARGET@v11_hash=1e4d2a3be90cd0a545f0c49cf9dce02c-json create mode 100644 mih_ui/android/build/ios/XCBuildData/PIFCache/target/TARGET@v11_hash=1f36083119fed8be641437f19af66acc-json create mode 100644 mih_ui/android/build/ios/XCBuildData/PIFCache/target/TARGET@v11_hash=2044c736a22918f3a12ecb44d3e0c006-json create mode 100644 mih_ui/android/build/ios/XCBuildData/PIFCache/target/TARGET@v11_hash=211721151cd848f04aa31d195dc75f4a-json create mode 100644 mih_ui/android/build/ios/XCBuildData/PIFCache/target/TARGET@v11_hash=218c90a1920c10390be2408439f5191f-json create mode 100644 mih_ui/android/build/ios/XCBuildData/PIFCache/target/TARGET@v11_hash=25067fd2852a0fd76a8f9f479b2d4630-json create mode 100644 mih_ui/android/build/ios/XCBuildData/PIFCache/target/TARGET@v11_hash=35adaf1be68b319de0505ded2815bc62-json create mode 100644 mih_ui/android/build/ios/XCBuildData/PIFCache/target/TARGET@v11_hash=376189dccaae382545d5e718c59412f6-json create mode 100644 mih_ui/android/build/ios/XCBuildData/PIFCache/target/TARGET@v11_hash=3a7fbdb39c618b52ee7b40baa1e884b1-json create mode 100644 mih_ui/android/build/ios/XCBuildData/PIFCache/target/TARGET@v11_hash=3af0402199bd31e72f681872a46f8b81-json create mode 100644 mih_ui/android/build/ios/XCBuildData/PIFCache/target/TARGET@v11_hash=46e4fdabe3969081354e9e5e60b64b4b-json create mode 100644 mih_ui/android/build/ios/XCBuildData/PIFCache/target/TARGET@v11_hash=4b924fd5a51dd455efd4e7fe9f2f3ae9-json create mode 100644 mih_ui/android/build/ios/XCBuildData/PIFCache/target/TARGET@v11_hash=4cabd0c48a00d7a4ed741cb699f1cc8e-json create mode 100644 mih_ui/android/build/ios/XCBuildData/PIFCache/target/TARGET@v11_hash=4cc1f6e212912d53710de3aa08e4aa3c-json create mode 100644 mih_ui/android/build/ios/XCBuildData/PIFCache/target/TARGET@v11_hash=4d623afd122ecb9d6d730809785df91d-json create mode 100644 mih_ui/android/build/ios/XCBuildData/PIFCache/target/TARGET@v11_hash=5248d9ba098cf8d77d31b3cf7f8b5a69-json create mode 100644 mih_ui/android/build/ios/XCBuildData/PIFCache/target/TARGET@v11_hash=525a617ce5cf51a2c10a01508fbe4adf-json create mode 100644 mih_ui/android/build/ios/XCBuildData/PIFCache/target/TARGET@v11_hash=5319ba36858c0aa8d085cf090833a92c-json create mode 100644 mih_ui/android/build/ios/XCBuildData/PIFCache/target/TARGET@v11_hash=558846d52469eb6457f7fa805fbcac19-json create mode 100644 mih_ui/android/build/ios/XCBuildData/PIFCache/target/TARGET@v11_hash=55e76bc78bd49d51860d689a4f5e9c62-json create mode 100644 mih_ui/android/build/ios/XCBuildData/PIFCache/target/TARGET@v11_hash=5815137460cbcfbe6d2f7a5b54b4ca09-json create mode 100644 mih_ui/android/build/ios/XCBuildData/PIFCache/target/TARGET@v11_hash=5b871dc0aeb742795842305fce24cf10-json create mode 100644 mih_ui/android/build/ios/XCBuildData/PIFCache/target/TARGET@v11_hash=5bd0bad9e37ac0efe7eb7e9b6a040622-json create mode 100644 mih_ui/android/build/ios/XCBuildData/PIFCache/target/TARGET@v11_hash=61f30aa6dfaff3adeef504cd04583578-json create mode 100644 mih_ui/android/build/ios/XCBuildData/PIFCache/target/TARGET@v11_hash=6a019aebe92f33ef6d2d1a27354a274c-json create mode 100644 mih_ui/android/build/ios/XCBuildData/PIFCache/target/TARGET@v11_hash=6fb30a1c5b3e857d561640581873eb18-json create mode 100644 mih_ui/android/build/ios/XCBuildData/PIFCache/target/TARGET@v11_hash=754922e16fd2edb654ed183d0b9ffc4e-json create mode 100644 mih_ui/android/build/ios/XCBuildData/PIFCache/target/TARGET@v11_hash=76c81320e671cd52e5aa73c6af313230-json create mode 100644 mih_ui/android/build/ios/XCBuildData/PIFCache/target/TARGET@v11_hash=7aa8351d9b24919942e9946725aa9a4e-json create mode 100644 mih_ui/android/build/ios/XCBuildData/PIFCache/target/TARGET@v11_hash=7b3186407410bb111b40b5143ff956ed-json create mode 100644 mih_ui/android/build/ios/XCBuildData/PIFCache/target/TARGET@v11_hash=7c10b1b705eef3cc27b008fa5df200ca-json create mode 100644 mih_ui/android/build/ios/XCBuildData/PIFCache/target/TARGET@v11_hash=7dc9dce1405849bf477070cc9de38aed-json create mode 100644 mih_ui/android/build/ios/XCBuildData/PIFCache/target/TARGET@v11_hash=8078b8651d861575cd929af1542b7261-json create mode 100644 mih_ui/android/build/ios/XCBuildData/PIFCache/target/TARGET@v11_hash=8d133a19301914cd8e6a4b60878e87a2-json create mode 100644 mih_ui/android/build/ios/XCBuildData/PIFCache/target/TARGET@v11_hash=98c62b097118c3a71fbcc1ac381d0554-json create mode 100644 mih_ui/android/build/ios/XCBuildData/PIFCache/target/TARGET@v11_hash=a067526aa1156f18ea027d11109a29d4-json create mode 100644 mih_ui/android/build/ios/XCBuildData/PIFCache/target/TARGET@v11_hash=a1626071b7e4461b7a78f87d063ecc17-json create mode 100644 mih_ui/android/build/ios/XCBuildData/PIFCache/target/TARGET@v11_hash=a6be57b3049abd7b9f2b4e20f4ba91af-json create mode 100644 mih_ui/android/build/ios/XCBuildData/PIFCache/target/TARGET@v11_hash=a771b9f79fd75fad08749ef861b3bddf-json create mode 100644 mih_ui/android/build/ios/XCBuildData/PIFCache/target/TARGET@v11_hash=aa56745ff0f6a68146d6117b991ff12e-json create mode 100644 mih_ui/android/build/ios/XCBuildData/PIFCache/target/TARGET@v11_hash=ab724a4a507acc9a546958f9aaaa80fd-json create mode 100644 mih_ui/android/build/ios/XCBuildData/PIFCache/target/TARGET@v11_hash=b02384d9efc0e497521a0ba9096939bd-json create mode 100644 mih_ui/android/build/ios/XCBuildData/PIFCache/target/TARGET@v11_hash=b77db6430f49f02a32943c46bd03734b-json create mode 100644 mih_ui/android/build/ios/XCBuildData/PIFCache/target/TARGET@v11_hash=bca7282312c3cbd6420517c0b06b2299-json create mode 100644 mih_ui/android/build/ios/XCBuildData/PIFCache/target/TARGET@v11_hash=bec8a7e752ab7d5daa41943969c542ce-json create mode 100644 mih_ui/android/build/ios/XCBuildData/PIFCache/target/TARGET@v11_hash=c1be6d82376acb043052cbc000a547ae-json create mode 100644 mih_ui/android/build/ios/XCBuildData/PIFCache/target/TARGET@v11_hash=c369ca2358afe46d56e9c4f067675637-json create mode 100644 mih_ui/android/build/ios/XCBuildData/PIFCache/target/TARGET@v11_hash=c57ff86689b99a8853e2ae591b9ac8c6-json create mode 100644 mih_ui/android/build/ios/XCBuildData/PIFCache/target/TARGET@v11_hash=c5e74116acf786c1a12c0ae36c3b648b-json create mode 100644 mih_ui/android/build/ios/XCBuildData/PIFCache/target/TARGET@v11_hash=c7e279690d57f8e9617670c2dd8215da-json create mode 100644 mih_ui/android/build/ios/XCBuildData/PIFCache/target/TARGET@v11_hash=c832b6797055a73fc2a937f2ace5a80c-json create mode 100644 mih_ui/android/build/ios/XCBuildData/PIFCache/target/TARGET@v11_hash=cbb1eb454f498b998b145ed6dace7d98-json create mode 100644 mih_ui/android/build/ios/XCBuildData/PIFCache/target/TARGET@v11_hash=cc4efb059f8f4ef111f94e7221f71ad1-json create mode 100644 mih_ui/android/build/ios/XCBuildData/PIFCache/target/TARGET@v11_hash=cc9ef9cfbfe34cf5230700b7d8fcc951-json create mode 100644 mih_ui/android/build/ios/XCBuildData/PIFCache/target/TARGET@v11_hash=cccb0eb2cb0393abaa5f1f05d755160e-json create mode 100644 mih_ui/android/build/ios/XCBuildData/PIFCache/target/TARGET@v11_hash=cf214d336cf673b4a25ba8952e58ad2f-json create mode 100644 mih_ui/android/build/ios/XCBuildData/PIFCache/target/TARGET@v11_hash=d014b307105d5d21e3d383fba60d7745-json create mode 100644 mih_ui/android/build/ios/XCBuildData/PIFCache/target/TARGET@v11_hash=d1efbd94e043870162f1a431e0d81426-json create mode 100644 mih_ui/android/build/ios/XCBuildData/PIFCache/target/TARGET@v11_hash=d204a2d23a6add831c951cc6c525c071-json create mode 100644 mih_ui/android/build/ios/XCBuildData/PIFCache/target/TARGET@v11_hash=d360bbd5e759c5936a6004b5766066e3-json create mode 100644 mih_ui/android/build/ios/XCBuildData/PIFCache/target/TARGET@v11_hash=d560c2e797b744ca35425688afeb9717-json create mode 100644 mih_ui/android/build/ios/XCBuildData/PIFCache/target/TARGET@v11_hash=d5f04c64bab0734f1ab47fd9bcf15bc4-json create mode 100644 mih_ui/android/build/ios/XCBuildData/PIFCache/target/TARGET@v11_hash=d67c7fe50f94aa30e853cef078cfecc9-json create mode 100644 mih_ui/android/build/ios/XCBuildData/PIFCache/target/TARGET@v11_hash=d6e43cdf0cbce99338da86c88c7a9b38-json create mode 100644 mih_ui/android/build/ios/XCBuildData/PIFCache/target/TARGET@v11_hash=dbb0219d17436c670986b94b7945fa23-json create mode 100644 mih_ui/android/build/ios/XCBuildData/PIFCache/target/TARGET@v11_hash=ddbefab0336a5b7a75af7835b2eb8ae3-json create mode 100644 mih_ui/android/build/ios/XCBuildData/PIFCache/target/TARGET@v11_hash=de9cdf72fffe1fdedbf989540b2a67e3-json create mode 100644 mih_ui/android/build/ios/XCBuildData/PIFCache/target/TARGET@v11_hash=dfe05d0a1a29529d21d126a4eec3834c-json create mode 100644 mih_ui/android/build/ios/XCBuildData/PIFCache/target/TARGET@v11_hash=e04e9400c66a280cff3815703b38f084-json create mode 100644 mih_ui/android/build/ios/XCBuildData/PIFCache/target/TARGET@v11_hash=e48e30a0663eeb6ce1b0165ff162002a-json create mode 100644 mih_ui/android/build/ios/XCBuildData/PIFCache/target/TARGET@v11_hash=eb424d111b233087eeb27f0dcd5e1868-json create mode 100644 mih_ui/android/build/ios/XCBuildData/PIFCache/target/TARGET@v11_hash=eb71d09d11dfb3cc8ccae98e4e65ea84-json create mode 100644 mih_ui/android/build/ios/XCBuildData/PIFCache/target/TARGET@v11_hash=ebe021611ae425ec05c93c24ce7a6607-json create mode 100644 mih_ui/android/build/ios/XCBuildData/PIFCache/target/TARGET@v11_hash=ec851e59095ec5bf084fefcd5588ef75-json create mode 100644 mih_ui/android/build/ios/XCBuildData/PIFCache/target/TARGET@v11_hash=f3bbe05679242975dafb6d8e69ca7557-json create mode 100644 mih_ui/android/build/ios/XCBuildData/PIFCache/target/TARGET@v11_hash=f8fcc6d355b2806d43f663daae6a06d4-json create mode 100644 mih_ui/android/build/ios/XCBuildData/PIFCache/target/TARGET@v11_hash=fbb75b67977f7fd3136c2c9e82b06c66-json create mode 100644 mih_ui/android/build/ios/XCBuildData/PIFCache/target/TARGET@v11_hash=ff36872ab1512227359a12a6bdfb005a-json create mode 100644 mih_ui/android/build/ios/XCBuildData/PIFCache/target/TARGET@v11_hash=ff5000f2df75d09390a7c02a18cf47cb-json create mode 100644 mih_ui/android/build/ios/XCBuildData/PIFCache/target/TARGET@v11_hash=ff93596a3d92ba01970679242c7f2f1b-json create mode 100644 mih_ui/android/build/ios/XCBuildData/PIFCache/workspace/WORKSPACE@v11_hash=(null)_subobjects=d4d37871a9d2a6dba5291c9ce70cda86-json create mode 100644 mih_ui/android/build/macos/SourcePackages/firebase_app_check-0.4.5/CHANGELOG.md create mode 100644 mih_ui/android/build/macos/SourcePackages/firebase_app_check-0.4.5/LICENSE create mode 100644 mih_ui/android/build/macos/SourcePackages/firebase_app_check-0.4.5/README.md create mode 100644 mih_ui/android/build/macos/SourcePackages/firebase_app_check-0.4.5/android/build.gradle create mode 100644 mih_ui/android/build/macos/SourcePackages/firebase_app_check-0.4.5/android/gradle.properties create mode 100644 mih_ui/android/build/macos/SourcePackages/firebase_app_check-0.4.5/android/gradle/wrapper/gradle-wrapper.properties create mode 100644 mih_ui/android/build/macos/SourcePackages/firebase_app_check-0.4.5/android/local-config.gradle create mode 100644 mih_ui/android/build/macos/SourcePackages/firebase_app_check-0.4.5/android/settings.gradle create mode 100644 mih_ui/android/build/macos/SourcePackages/firebase_app_check-0.4.5/android/src/main/AndroidManifest.xml create mode 100644 mih_ui/android/build/macos/SourcePackages/firebase_app_check-0.4.5/android/src/main/kotlin/io/flutter/plugins/firebase/appcheck/FirebaseAppCheckPlugin.kt create mode 100644 mih_ui/android/build/macos/SourcePackages/firebase_app_check-0.4.5/android/src/main/kotlin/io/flutter/plugins/firebase/appcheck/FlutterFirebaseAppRegistrar.kt create mode 100644 mih_ui/android/build/macos/SourcePackages/firebase_app_check-0.4.5/android/src/main/kotlin/io/flutter/plugins/firebase/appcheck/GeneratedAndroidFirebaseAppCheck.g.kt create mode 100644 mih_ui/android/build/macos/SourcePackages/firebase_app_check-0.4.5/android/src/main/kotlin/io/flutter/plugins/firebase/appcheck/TokenChannelStreamHandler.kt create mode 100644 mih_ui/android/build/macos/SourcePackages/firebase_app_check-0.4.5/android/user-agent.gradle create mode 100644 mih_ui/android/build/macos/SourcePackages/firebase_app_check-0.4.5/example/README.md create mode 100644 mih_ui/android/build/macos/SourcePackages/firebase_app_check-0.4.5/example/analysis_options.yaml create mode 100644 mih_ui/android/build/macos/SourcePackages/firebase_app_check-0.4.5/example/android/app/build.gradle create mode 100644 mih_ui/android/build/macos/SourcePackages/firebase_app_check-0.4.5/example/android/app/google-services.json create mode 100644 mih_ui/android/build/macos/SourcePackages/firebase_app_check-0.4.5/example/android/app/src/debug/AndroidManifest.xml create mode 100644 mih_ui/android/build/macos/SourcePackages/firebase_app_check-0.4.5/example/android/app/src/main/AndroidManifest.xml create mode 100644 mih_ui/android/build/macos/SourcePackages/firebase_app_check-0.4.5/example/android/app/src/main/kotlin/io/flutter/plugins/firebase/appcheck/example/MainActivity.kt create mode 100644 mih_ui/android/build/macos/SourcePackages/firebase_app_check-0.4.5/example/android/app/src/main/res/drawable-v21/launch_background.xml create mode 100644 mih_ui/android/build/macos/SourcePackages/firebase_app_check-0.4.5/example/android/app/src/main/res/drawable/launch_background.xml create mode 100644 mih_ui/android/build/macos/SourcePackages/firebase_app_check-0.4.5/example/android/app/src/main/res/mipmap-hdpi/ic_launcher.png create mode 100644 mih_ui/android/build/macos/SourcePackages/firebase_app_check-0.4.5/example/android/app/src/main/res/mipmap-mdpi/ic_launcher.png create mode 100644 mih_ui/android/build/macos/SourcePackages/firebase_app_check-0.4.5/example/android/app/src/main/res/mipmap-xhdpi/ic_launcher.png create mode 100644 mih_ui/android/build/macos/SourcePackages/firebase_app_check-0.4.5/example/android/app/src/main/res/mipmap-xxhdpi/ic_launcher.png create mode 100644 mih_ui/android/build/macos/SourcePackages/firebase_app_check-0.4.5/example/android/app/src/main/res/mipmap-xxxhdpi/ic_launcher.png create mode 100644 mih_ui/android/build/macos/SourcePackages/firebase_app_check-0.4.5/example/android/app/src/main/res/values-night/styles.xml create mode 100644 mih_ui/android/build/macos/SourcePackages/firebase_app_check-0.4.5/example/android/app/src/main/res/values/styles.xml create mode 100644 mih_ui/android/build/macos/SourcePackages/firebase_app_check-0.4.5/example/android/app/src/profile/AndroidManifest.xml create mode 100644 mih_ui/android/build/macos/SourcePackages/firebase_app_check-0.4.5/example/android/build.gradle create mode 100644 mih_ui/android/build/macos/SourcePackages/firebase_app_check-0.4.5/example/android/gradle.properties create mode 100644 mih_ui/android/build/macos/SourcePackages/firebase_app_check-0.4.5/example/android/gradle/wrapper/gradle-wrapper.properties create mode 100644 mih_ui/android/build/macos/SourcePackages/firebase_app_check-0.4.5/example/android/settings.gradle create mode 100644 mih_ui/android/build/macos/SourcePackages/firebase_app_check-0.4.5/example/ios/Flutter/AppFrameworkInfo.plist create mode 100644 mih_ui/android/build/macos/SourcePackages/firebase_app_check-0.4.5/example/ios/Flutter/Debug.xcconfig create mode 100644 mih_ui/android/build/macos/SourcePackages/firebase_app_check-0.4.5/example/ios/Flutter/Release.xcconfig create mode 100644 mih_ui/android/build/macos/SourcePackages/firebase_app_check-0.4.5/example/ios/Podfile create mode 100644 mih_ui/android/build/macos/SourcePackages/firebase_app_check-0.4.5/example/ios/Runner.xcodeproj/project.pbxproj create mode 100644 mih_ui/android/build/macos/SourcePackages/firebase_app_check-0.4.5/example/ios/Runner.xcodeproj/project.xcworkspace/contents.xcworkspacedata create mode 100644 mih_ui/android/build/macos/SourcePackages/firebase_app_check-0.4.5/example/ios/Runner.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist create mode 100644 mih_ui/android/build/macos/SourcePackages/firebase_app_check-0.4.5/example/ios/Runner.xcodeproj/project.xcworkspace/xcshareddata/WorkspaceSettings.xcsettings create mode 100644 mih_ui/android/build/macos/SourcePackages/firebase_app_check-0.4.5/example/ios/Runner.xcodeproj/xcshareddata/xcschemes/Runner.xcscheme create mode 100644 mih_ui/android/build/macos/SourcePackages/firebase_app_check-0.4.5/example/ios/Runner.xcworkspace/contents.xcworkspacedata create mode 100644 mih_ui/android/build/macos/SourcePackages/firebase_app_check-0.4.5/example/ios/Runner.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist create mode 100644 mih_ui/android/build/macos/SourcePackages/firebase_app_check-0.4.5/example/ios/Runner.xcworkspace/xcshareddata/WorkspaceSettings.xcsettings create mode 100644 mih_ui/android/build/macos/SourcePackages/firebase_app_check-0.4.5/example/ios/Runner/AppDelegate.h create mode 100644 mih_ui/android/build/macos/SourcePackages/firebase_app_check-0.4.5/example/ios/Runner/AppDelegate.m create mode 100644 mih_ui/android/build/macos/SourcePackages/firebase_app_check-0.4.5/example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Contents.json create mode 100644 mih_ui/android/build/macos/SourcePackages/firebase_app_check-0.4.5/example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-1024x1024@1x.png create mode 100644 mih_ui/android/build/macos/SourcePackages/firebase_app_check-0.4.5/example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@1x.png create mode 100644 mih_ui/android/build/macos/SourcePackages/firebase_app_check-0.4.5/example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@2x.png create mode 100644 mih_ui/android/build/macos/SourcePackages/firebase_app_check-0.4.5/example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@3x.png create mode 100644 mih_ui/android/build/macos/SourcePackages/firebase_app_check-0.4.5/example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@1x.png create mode 100644 mih_ui/android/build/macos/SourcePackages/firebase_app_check-0.4.5/example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@2x.png create mode 100644 mih_ui/android/build/macos/SourcePackages/firebase_app_check-0.4.5/example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@3x.png create mode 100644 mih_ui/android/build/macos/SourcePackages/firebase_app_check-0.4.5/example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@1x.png create mode 100644 mih_ui/android/build/macos/SourcePackages/firebase_app_check-0.4.5/example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@2x.png create mode 100644 mih_ui/android/build/macos/SourcePackages/firebase_app_check-0.4.5/example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@3x.png create mode 100644 mih_ui/android/build/macos/SourcePackages/firebase_app_check-0.4.5/example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-60x60@2x.png create mode 100644 mih_ui/android/build/macos/SourcePackages/firebase_app_check-0.4.5/example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-60x60@3x.png create mode 100644 mih_ui/android/build/macos/SourcePackages/firebase_app_check-0.4.5/example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-76x76@1x.png create mode 100644 mih_ui/android/build/macos/SourcePackages/firebase_app_check-0.4.5/example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-76x76@2x.png create mode 100644 mih_ui/android/build/macos/SourcePackages/firebase_app_check-0.4.5/example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-83.5x83.5@2x.png create mode 100644 mih_ui/android/build/macos/SourcePackages/firebase_app_check-0.4.5/example/ios/Runner/Assets.xcassets/LaunchImage.imageset/Contents.json create mode 100644 mih_ui/android/build/macos/SourcePackages/firebase_app_check-0.4.5/example/ios/Runner/Assets.xcassets/LaunchImage.imageset/LaunchImage.png create mode 100644 mih_ui/android/build/macos/SourcePackages/firebase_app_check-0.4.5/example/ios/Runner/Assets.xcassets/LaunchImage.imageset/LaunchImage@2x.png create mode 100644 mih_ui/android/build/macos/SourcePackages/firebase_app_check-0.4.5/example/ios/Runner/Assets.xcassets/LaunchImage.imageset/LaunchImage@3x.png create mode 100644 mih_ui/android/build/macos/SourcePackages/firebase_app_check-0.4.5/example/ios/Runner/Assets.xcassets/LaunchImage.imageset/README.md create mode 100644 mih_ui/android/build/macos/SourcePackages/firebase_app_check-0.4.5/example/ios/Runner/Base.lproj/LaunchScreen.storyboard create mode 100644 mih_ui/android/build/macos/SourcePackages/firebase_app_check-0.4.5/example/ios/Runner/Base.lproj/Main.storyboard create mode 100644 mih_ui/android/build/macos/SourcePackages/firebase_app_check-0.4.5/example/ios/Runner/GoogleService-Info.plist create mode 100644 mih_ui/android/build/macos/SourcePackages/firebase_app_check-0.4.5/example/ios/Runner/Info.plist create mode 100644 mih_ui/android/build/macos/SourcePackages/firebase_app_check-0.4.5/example/ios/Runner/Runner.entitlements create mode 100644 mih_ui/android/build/macos/SourcePackages/firebase_app_check-0.4.5/example/ios/Runner/RunnerRelease.entitlements create mode 100644 mih_ui/android/build/macos/SourcePackages/firebase_app_check-0.4.5/example/ios/Runner/main.m create mode 100644 mih_ui/android/build/macos/SourcePackages/firebase_app_check-0.4.5/example/ios/firebase_app_id_file.json create mode 100644 mih_ui/android/build/macos/SourcePackages/firebase_app_check-0.4.5/example/lib/firebase_options.dart create mode 100644 mih_ui/android/build/macos/SourcePackages/firebase_app_check-0.4.5/example/lib/main.dart create mode 100644 mih_ui/android/build/macos/SourcePackages/firebase_app_check-0.4.5/example/macos/Flutter/Flutter-Debug.xcconfig create mode 100644 mih_ui/android/build/macos/SourcePackages/firebase_app_check-0.4.5/example/macos/Flutter/Flutter-Release.xcconfig create mode 100644 mih_ui/android/build/macos/SourcePackages/firebase_app_check-0.4.5/example/macos/Podfile create mode 100644 mih_ui/android/build/macos/SourcePackages/firebase_app_check-0.4.5/example/macos/Runner.xcodeproj/project.pbxproj create mode 100644 mih_ui/android/build/macos/SourcePackages/firebase_app_check-0.4.5/example/macos/Runner.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist create mode 100644 mih_ui/android/build/macos/SourcePackages/firebase_app_check-0.4.5/example/macos/Runner.xcodeproj/xcshareddata/xcschemes/Runner.xcscheme create mode 100644 mih_ui/android/build/macos/SourcePackages/firebase_app_check-0.4.5/example/macos/Runner.xcworkspace/contents.xcworkspacedata create mode 100644 mih_ui/android/build/macos/SourcePackages/firebase_app_check-0.4.5/example/macos/Runner.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist create mode 100644 mih_ui/android/build/macos/SourcePackages/firebase_app_check-0.4.5/example/macos/Runner/AppDelegate.swift create mode 100644 mih_ui/android/build/macos/SourcePackages/firebase_app_check-0.4.5/example/macos/Runner/Assets.xcassets/AppIcon.appiconset/Contents.json create mode 100644 mih_ui/android/build/macos/SourcePackages/firebase_app_check-0.4.5/example/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_1024.png create mode 100644 mih_ui/android/build/macos/SourcePackages/firebase_app_check-0.4.5/example/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_128.png create mode 100644 mih_ui/android/build/macos/SourcePackages/firebase_app_check-0.4.5/example/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_16.png create mode 100644 mih_ui/android/build/macos/SourcePackages/firebase_app_check-0.4.5/example/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_256.png create mode 100644 mih_ui/android/build/macos/SourcePackages/firebase_app_check-0.4.5/example/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_32.png create mode 100644 mih_ui/android/build/macos/SourcePackages/firebase_app_check-0.4.5/example/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_512.png create mode 100644 mih_ui/android/build/macos/SourcePackages/firebase_app_check-0.4.5/example/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_64.png create mode 100644 mih_ui/android/build/macos/SourcePackages/firebase_app_check-0.4.5/example/macos/Runner/Base.lproj/MainMenu.xib create mode 100644 mih_ui/android/build/macos/SourcePackages/firebase_app_check-0.4.5/example/macos/Runner/Configs/AppInfo.xcconfig create mode 100644 mih_ui/android/build/macos/SourcePackages/firebase_app_check-0.4.5/example/macos/Runner/Configs/Debug.xcconfig create mode 100644 mih_ui/android/build/macos/SourcePackages/firebase_app_check-0.4.5/example/macos/Runner/Configs/Release.xcconfig create mode 100644 mih_ui/android/build/macos/SourcePackages/firebase_app_check-0.4.5/example/macos/Runner/Configs/Warnings.xcconfig create mode 100644 mih_ui/android/build/macos/SourcePackages/firebase_app_check-0.4.5/example/macos/Runner/DebugProfile.entitlements create mode 100644 mih_ui/android/build/macos/SourcePackages/firebase_app_check-0.4.5/example/macos/Runner/GoogleService-Info.plist create mode 100644 mih_ui/android/build/macos/SourcePackages/firebase_app_check-0.4.5/example/macos/Runner/Info.plist create mode 100644 mih_ui/android/build/macos/SourcePackages/firebase_app_check-0.4.5/example/macos/Runner/MainFlutterWindow.swift create mode 100644 mih_ui/android/build/macos/SourcePackages/firebase_app_check-0.4.5/example/macos/Runner/Release.entitlements create mode 100644 mih_ui/android/build/macos/SourcePackages/firebase_app_check-0.4.5/example/macos/firebase_app_id_file.json create mode 100644 mih_ui/android/build/macos/SourcePackages/firebase_app_check-0.4.5/example/pubspec.yaml create mode 100644 mih_ui/android/build/macos/SourcePackages/firebase_app_check-0.4.5/example/web/favicon.png create mode 100644 mih_ui/android/build/macos/SourcePackages/firebase_app_check-0.4.5/example/web/icons/Icon-192.png create mode 100644 mih_ui/android/build/macos/SourcePackages/firebase_app_check-0.4.5/example/web/icons/Icon-512.png create mode 100644 mih_ui/android/build/macos/SourcePackages/firebase_app_check-0.4.5/example/web/icons/Icon-maskable-192.png create mode 100644 mih_ui/android/build/macos/SourcePackages/firebase_app_check-0.4.5/example/web/icons/Icon-maskable-512.png create mode 100644 mih_ui/android/build/macos/SourcePackages/firebase_app_check-0.4.5/example/web/index.html create mode 100644 mih_ui/android/build/macos/SourcePackages/firebase_app_check-0.4.5/example/web/manifest.json create mode 100644 mih_ui/android/build/macos/SourcePackages/firebase_app_check-0.4.5/example/windows/CMakeLists.txt create mode 100644 mih_ui/android/build/macos/SourcePackages/firebase_app_check-0.4.5/example/windows/flutter/CMakeLists.txt create mode 100644 mih_ui/android/build/macos/SourcePackages/firebase_app_check-0.4.5/example/windows/runner/CMakeLists.txt create mode 100644 mih_ui/android/build/macos/SourcePackages/firebase_app_check-0.4.5/example/windows/runner/Runner.rc create mode 100644 mih_ui/android/build/macos/SourcePackages/firebase_app_check-0.4.5/example/windows/runner/flutter_window.cpp create mode 100644 mih_ui/android/build/macos/SourcePackages/firebase_app_check-0.4.5/example/windows/runner/flutter_window.h create mode 100644 mih_ui/android/build/macos/SourcePackages/firebase_app_check-0.4.5/example/windows/runner/main.cpp create mode 100644 mih_ui/android/build/macos/SourcePackages/firebase_app_check-0.4.5/example/windows/runner/resource.h create mode 100644 mih_ui/android/build/macos/SourcePackages/firebase_app_check-0.4.5/example/windows/runner/resources/app_icon.ico create mode 100644 mih_ui/android/build/macos/SourcePackages/firebase_app_check-0.4.5/example/windows/runner/runner.exe.manifest create mode 100644 mih_ui/android/build/macos/SourcePackages/firebase_app_check-0.4.5/example/windows/runner/utils.cpp create mode 100644 mih_ui/android/build/macos/SourcePackages/firebase_app_check-0.4.5/example/windows/runner/utils.h create mode 100644 mih_ui/android/build/macos/SourcePackages/firebase_app_check-0.4.5/example/windows/runner/win32_window.cpp create mode 100644 mih_ui/android/build/macos/SourcePackages/firebase_app_check-0.4.5/example/windows/runner/win32_window.h create mode 100644 mih_ui/android/build/macos/SourcePackages/firebase_app_check-0.4.5/ios/firebase_app_check.podspec create mode 100644 mih_ui/android/build/macos/SourcePackages/firebase_app_check-0.4.5/ios/firebase_app_check/Package.swift create mode 100644 mih_ui/android/build/macos/SourcePackages/firebase_app_check-0.4.5/ios/firebase_app_check/Sources/firebase_app_check/Constants.swift create mode 100644 mih_ui/android/build/macos/SourcePackages/firebase_app_check-0.4.5/ios/firebase_app_check/Sources/firebase_app_check/FirebaseAppCheckMessages.g.swift create mode 100644 mih_ui/android/build/macos/SourcePackages/firebase_app_check-0.4.5/ios/firebase_app_check/Sources/firebase_app_check/FirebaseAppCheckPlugin.swift create mode 100644 mih_ui/android/build/macos/SourcePackages/firebase_app_check-0.4.5/lib/firebase_app_check.dart create mode 100644 mih_ui/android/build/macos/SourcePackages/firebase_app_check-0.4.5/lib/src/firebase_app_check.dart create mode 100644 mih_ui/android/build/macos/SourcePackages/firebase_app_check-0.4.5/macos/firebase_app_check.podspec create mode 100644 mih_ui/android/build/macos/SourcePackages/firebase_app_check-0.4.5/macos/firebase_app_check/Package.swift create mode 100644 mih_ui/android/build/macos/SourcePackages/firebase_app_check-0.4.5/macos/firebase_app_check/Sources/firebase_app_check/Constants.swift create mode 100644 mih_ui/android/build/macos/SourcePackages/firebase_app_check-0.4.5/macos/firebase_app_check/Sources/firebase_app_check/FirebaseAppCheckMessages.g.swift create mode 100644 mih_ui/android/build/macos/SourcePackages/firebase_app_check-0.4.5/macos/firebase_app_check/Sources/firebase_app_check/FirebaseAppCheckPlugin.swift create mode 100644 mih_ui/android/build/macos/SourcePackages/firebase_app_check-0.4.5/pubspec.yaml create mode 100755 mih_ui/android/build/macos/SourcePackages/firebase_app_check-0.4.5/test/firebase_app_check_test.dart create mode 100644 mih_ui/android/build/macos/SourcePackages/firebase_app_check-0.4.5/test/mock.dart create mode 100644 mih_ui/android/build/macos/SourcePackages/firebase_app_check-0.4.5/windows/CMakeLists.txt create mode 100644 mih_ui/android/build/macos/SourcePackages/firebase_app_check-0.4.5/windows/firebase_app_check_plugin.cpp create mode 100644 mih_ui/android/build/macos/SourcePackages/firebase_app_check-0.4.5/windows/firebase_app_check_plugin.h create mode 100644 mih_ui/android/build/macos/SourcePackages/firebase_app_check-0.4.5/windows/firebase_app_check_plugin_c_api.cpp create mode 100644 mih_ui/android/build/macos/SourcePackages/firebase_app_check-0.4.5/windows/include/firebase_app_check/firebase_app_check_plugin_c_api.h create mode 100644 mih_ui/android/build/macos/SourcePackages/firebase_app_check-0.4.5/windows/messages.g.cpp create mode 100644 mih_ui/android/build/macos/SourcePackages/firebase_app_check-0.4.5/windows/messages.g.h create mode 100644 mih_ui/android/build/macos/SourcePackages/firebase_app_check-0.4.5/windows/plugin_version.h.in create mode 100644 mih_ui/android/build/macos/SourcePackages/firebase_auth-6.5.4/CHANGELOG.md create mode 100644 mih_ui/android/build/macos/SourcePackages/firebase_auth-6.5.4/LICENSE create mode 100755 mih_ui/android/build/macos/SourcePackages/firebase_auth-6.5.4/README.md create mode 100755 mih_ui/android/build/macos/SourcePackages/firebase_auth-6.5.4/android/build.gradle create mode 100755 mih_ui/android/build/macos/SourcePackages/firebase_auth-6.5.4/android/gradle.properties create mode 100644 mih_ui/android/build/macos/SourcePackages/firebase_auth-6.5.4/android/gradle/wrapper/gradle-wrapper.properties create mode 100755 mih_ui/android/build/macos/SourcePackages/firebase_auth-6.5.4/android/settings.gradle create mode 100755 mih_ui/android/build/macos/SourcePackages/firebase_auth-6.5.4/android/src/main/AndroidManifest.xml create mode 100644 mih_ui/android/build/macos/SourcePackages/firebase_auth-6.5.4/android/src/main/java/io/flutter/plugins/firebase/auth/AuthStateChannelStreamHandler.java create mode 100644 mih_ui/android/build/macos/SourcePackages/firebase_auth-6.5.4/android/src/main/java/io/flutter/plugins/firebase/auth/Constants.java create mode 100755 mih_ui/android/build/macos/SourcePackages/firebase_auth-6.5.4/android/src/main/java/io/flutter/plugins/firebase/auth/FlutterFirebaseAuthPlugin.java create mode 100644 mih_ui/android/build/macos/SourcePackages/firebase_auth-6.5.4/android/src/main/java/io/flutter/plugins/firebase/auth/FlutterFirebaseAuthPluginException.java create mode 100644 mih_ui/android/build/macos/SourcePackages/firebase_auth-6.5.4/android/src/main/java/io/flutter/plugins/firebase/auth/FlutterFirebaseAuthRegistrar.java create mode 100644 mih_ui/android/build/macos/SourcePackages/firebase_auth-6.5.4/android/src/main/java/io/flutter/plugins/firebase/auth/FlutterFirebaseAuthUser.java create mode 100644 mih_ui/android/build/macos/SourcePackages/firebase_auth-6.5.4/android/src/main/java/io/flutter/plugins/firebase/auth/FlutterFirebaseMultiFactor.java create mode 100644 mih_ui/android/build/macos/SourcePackages/firebase_auth-6.5.4/android/src/main/java/io/flutter/plugins/firebase/auth/FlutterFirebaseTotpMultiFactor.java create mode 100644 mih_ui/android/build/macos/SourcePackages/firebase_auth-6.5.4/android/src/main/java/io/flutter/plugins/firebase/auth/FlutterFirebaseTotpSecret.java create mode 100644 mih_ui/android/build/macos/SourcePackages/firebase_auth-6.5.4/android/src/main/java/io/flutter/plugins/firebase/auth/GeneratedAndroidFirebaseAuth.java create mode 100644 mih_ui/android/build/macos/SourcePackages/firebase_auth-6.5.4/android/src/main/java/io/flutter/plugins/firebase/auth/IdTokenChannelStreamHandler.java create mode 100644 mih_ui/android/build/macos/SourcePackages/firebase_auth-6.5.4/android/src/main/java/io/flutter/plugins/firebase/auth/PhoneNumberVerificationStreamHandler.java create mode 100644 mih_ui/android/build/macos/SourcePackages/firebase_auth-6.5.4/android/src/main/java/io/flutter/plugins/firebase/auth/PigeonParser.java create mode 100644 mih_ui/android/build/macos/SourcePackages/firebase_auth-6.5.4/android/user-agent.gradle create mode 100644 mih_ui/android/build/macos/SourcePackages/firebase_auth-6.5.4/example/README.md create mode 100644 mih_ui/android/build/macos/SourcePackages/firebase_auth-6.5.4/example/analysis_options.yaml create mode 100644 mih_ui/android/build/macos/SourcePackages/firebase_auth-6.5.4/example/android/app/build.gradle create mode 100644 mih_ui/android/build/macos/SourcePackages/firebase_auth-6.5.4/example/android/app/google-services.json create mode 100644 mih_ui/android/build/macos/SourcePackages/firebase_auth-6.5.4/example/android/app/src/debug/AndroidManifest.xml create mode 100644 mih_ui/android/build/macos/SourcePackages/firebase_auth-6.5.4/example/android/app/src/main/AndroidManifest.xml create mode 100644 mih_ui/android/build/macos/SourcePackages/firebase_auth-6.5.4/example/android/app/src/main/kotlin/io/flutter/plugins/firebase/auth/example/MainActivity.kt create mode 100644 mih_ui/android/build/macos/SourcePackages/firebase_auth-6.5.4/example/android/app/src/main/res/drawable-v21/launch_background.xml create mode 100644 mih_ui/android/build/macos/SourcePackages/firebase_auth-6.5.4/example/android/app/src/main/res/drawable/launch_background.xml create mode 100644 mih_ui/android/build/macos/SourcePackages/firebase_auth-6.5.4/example/android/app/src/main/res/mipmap-hdpi/ic_launcher.png create mode 100644 mih_ui/android/build/macos/SourcePackages/firebase_auth-6.5.4/example/android/app/src/main/res/mipmap-mdpi/ic_launcher.png create mode 100644 mih_ui/android/build/macos/SourcePackages/firebase_auth-6.5.4/example/android/app/src/main/res/mipmap-xhdpi/ic_launcher.png create mode 100644 mih_ui/android/build/macos/SourcePackages/firebase_auth-6.5.4/example/android/app/src/main/res/mipmap-xxhdpi/ic_launcher.png create mode 100644 mih_ui/android/build/macos/SourcePackages/firebase_auth-6.5.4/example/android/app/src/main/res/mipmap-xxxhdpi/ic_launcher.png create mode 100644 mih_ui/android/build/macos/SourcePackages/firebase_auth-6.5.4/example/android/app/src/main/res/values-night/styles.xml create mode 100644 mih_ui/android/build/macos/SourcePackages/firebase_auth-6.5.4/example/android/app/src/main/res/values/styles.xml create mode 100644 mih_ui/android/build/macos/SourcePackages/firebase_auth-6.5.4/example/android/app/src/profile/AndroidManifest.xml create mode 100644 mih_ui/android/build/macos/SourcePackages/firebase_auth-6.5.4/example/android/build.gradle create mode 100644 mih_ui/android/build/macos/SourcePackages/firebase_auth-6.5.4/example/android/gradle.properties create mode 100644 mih_ui/android/build/macos/SourcePackages/firebase_auth-6.5.4/example/android/gradle/wrapper/gradle-wrapper.properties create mode 100644 mih_ui/android/build/macos/SourcePackages/firebase_auth-6.5.4/example/android/settings.gradle create mode 100644 mih_ui/android/build/macos/SourcePackages/firebase_auth-6.5.4/example/ios/Flutter/AppFrameworkInfo.plist create mode 100644 mih_ui/android/build/macos/SourcePackages/firebase_auth-6.5.4/example/ios/Flutter/Debug.xcconfig create mode 100644 mih_ui/android/build/macos/SourcePackages/firebase_auth-6.5.4/example/ios/Flutter/Release.xcconfig create mode 100644 mih_ui/android/build/macos/SourcePackages/firebase_auth-6.5.4/example/ios/Podfile create mode 100644 mih_ui/android/build/macos/SourcePackages/firebase_auth-6.5.4/example/ios/Runner.xcodeproj/project.pbxproj create mode 100644 mih_ui/android/build/macos/SourcePackages/firebase_auth-6.5.4/example/ios/Runner.xcodeproj/project.xcworkspace/contents.xcworkspacedata create mode 100644 mih_ui/android/build/macos/SourcePackages/firebase_auth-6.5.4/example/ios/Runner.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist create mode 100644 mih_ui/android/build/macos/SourcePackages/firebase_auth-6.5.4/example/ios/Runner.xcodeproj/project.xcworkspace/xcshareddata/WorkspaceSettings.xcsettings create mode 100644 mih_ui/android/build/macos/SourcePackages/firebase_auth-6.5.4/example/ios/Runner.xcodeproj/xcshareddata/xcschemes/Runner.xcscheme create mode 100644 mih_ui/android/build/macos/SourcePackages/firebase_auth-6.5.4/example/ios/Runner.xcworkspace/contents.xcworkspacedata create mode 100644 mih_ui/android/build/macos/SourcePackages/firebase_auth-6.5.4/example/ios/Runner.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist create mode 100644 mih_ui/android/build/macos/SourcePackages/firebase_auth-6.5.4/example/ios/Runner.xcworkspace/xcshareddata/WorkspaceSettings.xcsettings create mode 100644 mih_ui/android/build/macos/SourcePackages/firebase_auth-6.5.4/example/ios/Runner/AppDelegate.h create mode 100644 mih_ui/android/build/macos/SourcePackages/firebase_auth-6.5.4/example/ios/Runner/AppDelegate.m create mode 100644 mih_ui/android/build/macos/SourcePackages/firebase_auth-6.5.4/example/ios/Runner/AppDelegate.swift create mode 100644 mih_ui/android/build/macos/SourcePackages/firebase_auth-6.5.4/example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Contents.json create mode 100644 mih_ui/android/build/macos/SourcePackages/firebase_auth-6.5.4/example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-1024x1024@1x.png create mode 100644 mih_ui/android/build/macos/SourcePackages/firebase_auth-6.5.4/example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@1x.png create mode 100644 mih_ui/android/build/macos/SourcePackages/firebase_auth-6.5.4/example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@2x.png create mode 100644 mih_ui/android/build/macos/SourcePackages/firebase_auth-6.5.4/example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@3x.png create mode 100644 mih_ui/android/build/macos/SourcePackages/firebase_auth-6.5.4/example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@1x.png create mode 100644 mih_ui/android/build/macos/SourcePackages/firebase_auth-6.5.4/example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@2x.png create mode 100644 mih_ui/android/build/macos/SourcePackages/firebase_auth-6.5.4/example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@3x.png create mode 100644 mih_ui/android/build/macos/SourcePackages/firebase_auth-6.5.4/example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@1x.png create mode 100644 mih_ui/android/build/macos/SourcePackages/firebase_auth-6.5.4/example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@2x.png create mode 100644 mih_ui/android/build/macos/SourcePackages/firebase_auth-6.5.4/example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@3x.png create mode 100644 mih_ui/android/build/macos/SourcePackages/firebase_auth-6.5.4/example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-60x60@2x.png create mode 100644 mih_ui/android/build/macos/SourcePackages/firebase_auth-6.5.4/example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-60x60@3x.png create mode 100644 mih_ui/android/build/macos/SourcePackages/firebase_auth-6.5.4/example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-76x76@1x.png create mode 100644 mih_ui/android/build/macos/SourcePackages/firebase_auth-6.5.4/example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-76x76@2x.png create mode 100644 mih_ui/android/build/macos/SourcePackages/firebase_auth-6.5.4/example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-83.5x83.5@2x.png create mode 100644 mih_ui/android/build/macos/SourcePackages/firebase_auth-6.5.4/example/ios/Runner/Assets.xcassets/LaunchImage.imageset/Contents.json create mode 100644 mih_ui/android/build/macos/SourcePackages/firebase_auth-6.5.4/example/ios/Runner/Assets.xcassets/LaunchImage.imageset/LaunchImage.png create mode 100644 mih_ui/android/build/macos/SourcePackages/firebase_auth-6.5.4/example/ios/Runner/Assets.xcassets/LaunchImage.imageset/LaunchImage@2x.png create mode 100644 mih_ui/android/build/macos/SourcePackages/firebase_auth-6.5.4/example/ios/Runner/Assets.xcassets/LaunchImage.imageset/LaunchImage@3x.png create mode 100644 mih_ui/android/build/macos/SourcePackages/firebase_auth-6.5.4/example/ios/Runner/Assets.xcassets/LaunchImage.imageset/README.md create mode 100644 mih_ui/android/build/macos/SourcePackages/firebase_auth-6.5.4/example/ios/Runner/Base.lproj/LaunchScreen.storyboard create mode 100644 mih_ui/android/build/macos/SourcePackages/firebase_auth-6.5.4/example/ios/Runner/Base.lproj/Main.storyboard create mode 100644 mih_ui/android/build/macos/SourcePackages/firebase_auth-6.5.4/example/ios/Runner/GoogleService-Info.plist create mode 100644 mih_ui/android/build/macos/SourcePackages/firebase_auth-6.5.4/example/ios/Runner/Info.plist create mode 100644 mih_ui/android/build/macos/SourcePackages/firebase_auth-6.5.4/example/ios/Runner/Runner-Bridging-Header.h create mode 100644 mih_ui/android/build/macos/SourcePackages/firebase_auth-6.5.4/example/ios/Runner/Runner.entitlements create mode 100644 mih_ui/android/build/macos/SourcePackages/firebase_auth-6.5.4/example/ios/Runner/main.m create mode 100644 mih_ui/android/build/macos/SourcePackages/firebase_auth-6.5.4/example/ios/firebase_app_id_file.json create mode 100644 mih_ui/android/build/macos/SourcePackages/firebase_auth-6.5.4/example/lib/auth.dart create mode 100644 mih_ui/android/build/macos/SourcePackages/firebase_auth-6.5.4/example/lib/firebase_options.dart create mode 100755 mih_ui/android/build/macos/SourcePackages/firebase_auth-6.5.4/example/lib/main.dart create mode 100644 mih_ui/android/build/macos/SourcePackages/firebase_auth-6.5.4/example/lib/profile.dart create mode 100644 mih_ui/android/build/macos/SourcePackages/firebase_auth-6.5.4/example/macos/Flutter/Flutter-Debug.xcconfig create mode 100644 mih_ui/android/build/macos/SourcePackages/firebase_auth-6.5.4/example/macos/Flutter/Flutter-Release.xcconfig create mode 100644 mih_ui/android/build/macos/SourcePackages/firebase_auth-6.5.4/example/macos/Podfile create mode 100644 mih_ui/android/build/macos/SourcePackages/firebase_auth-6.5.4/example/macos/Runner.xcodeproj/project.pbxproj create mode 100644 mih_ui/android/build/macos/SourcePackages/firebase_auth-6.5.4/example/macos/Runner.xcodeproj/project.xcworkspace/contents.xcworkspacedata create mode 100644 mih_ui/android/build/macos/SourcePackages/firebase_auth-6.5.4/example/macos/Runner.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist create mode 100644 mih_ui/android/build/macos/SourcePackages/firebase_auth-6.5.4/example/macos/Runner.xcodeproj/xcshareddata/xcschemes/Runner.xcscheme create mode 100644 mih_ui/android/build/macos/SourcePackages/firebase_auth-6.5.4/example/macos/Runner.xcworkspace/contents.xcworkspacedata create mode 100644 mih_ui/android/build/macos/SourcePackages/firebase_auth-6.5.4/example/macos/Runner.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist create mode 100644 mih_ui/android/build/macos/SourcePackages/firebase_auth-6.5.4/example/macos/Runner.xcworkspace/xcshareddata/WorkspaceSettings.xcsettings create mode 100644 mih_ui/android/build/macos/SourcePackages/firebase_auth-6.5.4/example/macos/Runner/AppDelegate.swift create mode 100644 mih_ui/android/build/macos/SourcePackages/firebase_auth-6.5.4/example/macos/Runner/Assets.xcassets/AppIcon.appiconset/Contents.json create mode 100644 mih_ui/android/build/macos/SourcePackages/firebase_auth-6.5.4/example/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_1024.png create mode 100644 mih_ui/android/build/macos/SourcePackages/firebase_auth-6.5.4/example/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_128.png create mode 100644 mih_ui/android/build/macos/SourcePackages/firebase_auth-6.5.4/example/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_16.png create mode 100644 mih_ui/android/build/macos/SourcePackages/firebase_auth-6.5.4/example/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_256.png create mode 100644 mih_ui/android/build/macos/SourcePackages/firebase_auth-6.5.4/example/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_32.png create mode 100644 mih_ui/android/build/macos/SourcePackages/firebase_auth-6.5.4/example/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_512.png create mode 100644 mih_ui/android/build/macos/SourcePackages/firebase_auth-6.5.4/example/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_64.png create mode 100644 mih_ui/android/build/macos/SourcePackages/firebase_auth-6.5.4/example/macos/Runner/Base.lproj/MainMenu.xib create mode 100644 mih_ui/android/build/macos/SourcePackages/firebase_auth-6.5.4/example/macos/Runner/Configs/AppInfo.xcconfig create mode 100644 mih_ui/android/build/macos/SourcePackages/firebase_auth-6.5.4/example/macos/Runner/Configs/Debug.xcconfig create mode 100644 mih_ui/android/build/macos/SourcePackages/firebase_auth-6.5.4/example/macos/Runner/Configs/Release.xcconfig create mode 100644 mih_ui/android/build/macos/SourcePackages/firebase_auth-6.5.4/example/macos/Runner/Configs/Warnings.xcconfig create mode 100644 mih_ui/android/build/macos/SourcePackages/firebase_auth-6.5.4/example/macos/Runner/DebugProfile.entitlements create mode 100644 mih_ui/android/build/macos/SourcePackages/firebase_auth-6.5.4/example/macos/Runner/GoogleService-Info.plist create mode 100644 mih_ui/android/build/macos/SourcePackages/firebase_auth-6.5.4/example/macos/Runner/Info.plist create mode 100644 mih_ui/android/build/macos/SourcePackages/firebase_auth-6.5.4/example/macos/Runner/MainFlutterWindow.swift create mode 100644 mih_ui/android/build/macos/SourcePackages/firebase_auth-6.5.4/example/macos/Runner/Release.entitlements create mode 100644 mih_ui/android/build/macos/SourcePackages/firebase_auth-6.5.4/example/macos/firebase_app_id_file.json create mode 100644 mih_ui/android/build/macos/SourcePackages/firebase_auth-6.5.4/example/pubspec.yaml create mode 100644 mih_ui/android/build/macos/SourcePackages/firebase_auth-6.5.4/example/web/favicon.png create mode 100644 mih_ui/android/build/macos/SourcePackages/firebase_auth-6.5.4/example/web/icons/Icon-192.png create mode 100644 mih_ui/android/build/macos/SourcePackages/firebase_auth-6.5.4/example/web/icons/Icon-512.png create mode 100644 mih_ui/android/build/macos/SourcePackages/firebase_auth-6.5.4/example/web/icons/Icon-maskable-192.png create mode 100644 mih_ui/android/build/macos/SourcePackages/firebase_auth-6.5.4/example/web/icons/Icon-maskable-512.png create mode 100644 mih_ui/android/build/macos/SourcePackages/firebase_auth-6.5.4/example/web/index.html create mode 100644 mih_ui/android/build/macos/SourcePackages/firebase_auth-6.5.4/example/web/manifest.json create mode 100644 mih_ui/android/build/macos/SourcePackages/firebase_auth-6.5.4/example/windows/CMakeLists.txt create mode 100644 mih_ui/android/build/macos/SourcePackages/firebase_auth-6.5.4/example/windows/flutter/CMakeLists.txt create mode 100644 mih_ui/android/build/macos/SourcePackages/firebase_auth-6.5.4/example/windows/runner/CMakeLists.txt create mode 100644 mih_ui/android/build/macos/SourcePackages/firebase_auth-6.5.4/example/windows/runner/Runner.rc create mode 100644 mih_ui/android/build/macos/SourcePackages/firebase_auth-6.5.4/example/windows/runner/flutter_window.cpp create mode 100644 mih_ui/android/build/macos/SourcePackages/firebase_auth-6.5.4/example/windows/runner/flutter_window.h create mode 100644 mih_ui/android/build/macos/SourcePackages/firebase_auth-6.5.4/example/windows/runner/main.cpp create mode 100644 mih_ui/android/build/macos/SourcePackages/firebase_auth-6.5.4/example/windows/runner/resource.h create mode 100644 mih_ui/android/build/macos/SourcePackages/firebase_auth-6.5.4/example/windows/runner/resources/app_icon.ico create mode 100644 mih_ui/android/build/macos/SourcePackages/firebase_auth-6.5.4/example/windows/runner/runner.exe.manifest create mode 100644 mih_ui/android/build/macos/SourcePackages/firebase_auth-6.5.4/example/windows/runner/utils.cpp create mode 100644 mih_ui/android/build/macos/SourcePackages/firebase_auth-6.5.4/example/windows/runner/utils.h create mode 100644 mih_ui/android/build/macos/SourcePackages/firebase_auth-6.5.4/example/windows/runner/win32_window.cpp create mode 100644 mih_ui/android/build/macos/SourcePackages/firebase_auth-6.5.4/example/windows/runner/win32_window.h create mode 100755 mih_ui/android/build/macos/SourcePackages/firebase_auth-6.5.4/ios/firebase_auth.podspec create mode 100644 mih_ui/android/build/macos/SourcePackages/firebase_auth-6.5.4/ios/firebase_auth/Package.swift create mode 100644 mih_ui/android/build/macos/SourcePackages/firebase_auth-6.5.4/ios/firebase_auth/Sources/firebase_auth/FLTAuthStateChannelStreamHandler.m create mode 100644 mih_ui/android/build/macos/SourcePackages/firebase_auth-6.5.4/ios/firebase_auth/Sources/firebase_auth/FLTFirebaseAuthPlugin.m create mode 100644 mih_ui/android/build/macos/SourcePackages/firebase_auth-6.5.4/ios/firebase_auth/Sources/firebase_auth/FLTIdTokenChannelStreamHandler.m create mode 100644 mih_ui/android/build/macos/SourcePackages/firebase_auth-6.5.4/ios/firebase_auth/Sources/firebase_auth/FLTPhoneNumberVerificationStreamHandler.m create mode 100644 mih_ui/android/build/macos/SourcePackages/firebase_auth-6.5.4/ios/firebase_auth/Sources/firebase_auth/PigeonParser.m create mode 100644 mih_ui/android/build/macos/SourcePackages/firebase_auth-6.5.4/ios/firebase_auth/Sources/firebase_auth/firebase_auth_messages.g.m create mode 100644 mih_ui/android/build/macos/SourcePackages/firebase_auth-6.5.4/ios/firebase_auth/Sources/firebase_auth/include/Private/FLTAuthStateChannelStreamHandler.h create mode 100644 mih_ui/android/build/macos/SourcePackages/firebase_auth-6.5.4/ios/firebase_auth/Sources/firebase_auth/include/Private/FLTIdTokenChannelStreamHandler.h create mode 100644 mih_ui/android/build/macos/SourcePackages/firebase_auth-6.5.4/ios/firebase_auth/Sources/firebase_auth/include/Private/FLTPhoneNumberVerificationStreamHandler.h create mode 100644 mih_ui/android/build/macos/SourcePackages/firebase_auth-6.5.4/ios/firebase_auth/Sources/firebase_auth/include/Private/PigeonParser.h create mode 100644 mih_ui/android/build/macos/SourcePackages/firebase_auth-6.5.4/ios/firebase_auth/Sources/firebase_auth/include/Public/CustomPigeonHeader.h create mode 100644 mih_ui/android/build/macos/SourcePackages/firebase_auth-6.5.4/ios/firebase_auth/Sources/firebase_auth/include/Public/FLTFirebaseAuthPlugin.h create mode 100644 mih_ui/android/build/macos/SourcePackages/firebase_auth-6.5.4/ios/firebase_auth/Sources/firebase_auth/include/Public/firebase_auth_messages.g.h create mode 100755 mih_ui/android/build/macos/SourcePackages/firebase_auth-6.5.4/lib/firebase_auth.dart create mode 100644 mih_ui/android/build/macos/SourcePackages/firebase_auth-6.5.4/lib/src/confirmation_result.dart create mode 100644 mih_ui/android/build/macos/SourcePackages/firebase_auth-6.5.4/lib/src/firebase_auth.dart create mode 100644 mih_ui/android/build/macos/SourcePackages/firebase_auth-6.5.4/lib/src/multi_factor.dart create mode 100644 mih_ui/android/build/macos/SourcePackages/firebase_auth-6.5.4/lib/src/recaptcha_verifier.dart create mode 100644 mih_ui/android/build/macos/SourcePackages/firebase_auth-6.5.4/lib/src/user.dart create mode 100644 mih_ui/android/build/macos/SourcePackages/firebase_auth-6.5.4/lib/src/user_credential.dart create mode 100755 mih_ui/android/build/macos/SourcePackages/firebase_auth-6.5.4/macos/firebase_auth.podspec create mode 100644 mih_ui/android/build/macos/SourcePackages/firebase_auth-6.5.4/macos/firebase_auth/Package.swift create mode 100644 mih_ui/android/build/macos/SourcePackages/firebase_auth-6.5.4/macos/firebase_auth/Sources/firebase_auth/FLTAuthStateChannelStreamHandler.m create mode 100644 mih_ui/android/build/macos/SourcePackages/firebase_auth-6.5.4/macos/firebase_auth/Sources/firebase_auth/FLTFirebaseAuthPlugin.m create mode 100644 mih_ui/android/build/macos/SourcePackages/firebase_auth-6.5.4/macos/firebase_auth/Sources/firebase_auth/FLTIdTokenChannelStreamHandler.m create mode 100644 mih_ui/android/build/macos/SourcePackages/firebase_auth-6.5.4/macos/firebase_auth/Sources/firebase_auth/FLTPhoneNumberVerificationStreamHandler.m create mode 100644 mih_ui/android/build/macos/SourcePackages/firebase_auth-6.5.4/macos/firebase_auth/Sources/firebase_auth/PigeonParser.m create mode 100644 mih_ui/android/build/macos/SourcePackages/firebase_auth-6.5.4/macos/firebase_auth/Sources/firebase_auth/firebase_auth_messages.g.m create mode 100644 mih_ui/android/build/macos/SourcePackages/firebase_auth-6.5.4/macos/firebase_auth/Sources/firebase_auth/include/Private/FLTAuthStateChannelStreamHandler.h create mode 100644 mih_ui/android/build/macos/SourcePackages/firebase_auth-6.5.4/macos/firebase_auth/Sources/firebase_auth/include/Private/FLTIdTokenChannelStreamHandler.h create mode 100644 mih_ui/android/build/macos/SourcePackages/firebase_auth-6.5.4/macos/firebase_auth/Sources/firebase_auth/include/Private/FLTPhoneNumberVerificationStreamHandler.h create mode 100644 mih_ui/android/build/macos/SourcePackages/firebase_auth-6.5.4/macos/firebase_auth/Sources/firebase_auth/include/Private/PigeonParser.h create mode 100644 mih_ui/android/build/macos/SourcePackages/firebase_auth-6.5.4/macos/firebase_auth/Sources/firebase_auth/include/Public/CustomPigeonHeader.h create mode 100644 mih_ui/android/build/macos/SourcePackages/firebase_auth-6.5.4/macos/firebase_auth/Sources/firebase_auth/include/Public/FLTFirebaseAuthPlugin.h create mode 100644 mih_ui/android/build/macos/SourcePackages/firebase_auth-6.5.4/macos/firebase_auth/Sources/firebase_auth/include/Public/firebase_auth_messages.g.h create mode 100755 mih_ui/android/build/macos/SourcePackages/firebase_auth-6.5.4/pubspec.yaml create mode 100644 mih_ui/android/build/macos/SourcePackages/firebase_auth-6.5.4/test/firebase_auth_test.dart create mode 100644 mih_ui/android/build/macos/SourcePackages/firebase_auth-6.5.4/test/mock.dart create mode 100644 mih_ui/android/build/macos/SourcePackages/firebase_auth-6.5.4/test/user_test.dart create mode 100644 mih_ui/android/build/macos/SourcePackages/firebase_auth-6.5.4/windows/CMakeLists.txt create mode 100644 mih_ui/android/build/macos/SourcePackages/firebase_auth-6.5.4/windows/firebase_auth_plugin.cpp create mode 100644 mih_ui/android/build/macos/SourcePackages/firebase_auth-6.5.4/windows/firebase_auth_plugin.h create mode 100644 mih_ui/android/build/macos/SourcePackages/firebase_auth-6.5.4/windows/firebase_auth_plugin_c_api.cpp create mode 100644 mih_ui/android/build/macos/SourcePackages/firebase_auth-6.5.4/windows/include/firebase_auth/firebase_auth_plugin_c_api.h create mode 100644 mih_ui/android/build/macos/SourcePackages/firebase_auth-6.5.4/windows/messages.g.cpp create mode 100644 mih_ui/android/build/macos/SourcePackages/firebase_auth-6.5.4/windows/messages.g.h create mode 100644 mih_ui/android/build/macos/SourcePackages/firebase_auth-6.5.4/windows/plugin_version.h.in create mode 100644 mih_ui/android/build/macos/SourcePackages/firebase_auth-6.5.4/windows/test/firebase_auth_plugin_test.cpp create mode 100644 mih_ui/android_build_logs.txt create mode 100644 mih_ui/ios/Runner.xcodeproj/project.xcworkspace/xcshareddata/swiftpm/Package.resolved diff --git a/mih_ui/android/app/build.gradle.kts b/mih_ui/android/app/build.gradle.kts index 8250e847..0c703761 100644 --- a/mih_ui/android/app/build.gradle.kts +++ b/mih_ui/android/app/build.gradle.kts @@ -6,7 +6,7 @@ plugins { // START: FlutterFire Configuration id("com.google.gms.google-services") // END: FlutterFire Configuration - id("kotlin-android") + //id("kotlin-android") // The Flutter Gradle Plugin must be applied after the Android and Kotlin Gradle plugins. id("dev.flutter.flutter-gradle-plugin") } @@ -20,17 +20,17 @@ if (keystorePropertiesFile.exists()) { android { namespace = "za.co.mzansiinnovationhub.mih" compileSdk = 36 - ndkVersion = "27.0.12077973" + ndkVersion = "28.2.13676358" // ndkVersion = flutter.ndkVersion compileOptions { - sourceCompatibility = JavaVersion.VERSION_11 - targetCompatibility = JavaVersion.VERSION_11 + sourceCompatibility = JavaVersion.VERSION_17 + targetCompatibility = JavaVersion.VERSION_17 } - kotlinOptions { - jvmTarget = JavaVersion.VERSION_11.toString() - } + //kotlinOptions { + // jvmTarget = JavaVersion.VERSION_17.toString() + //} defaultConfig { // TODO: Specify your own unique Application ID (https://developer.android.com/studio/build/application-id.html). @@ -67,6 +67,12 @@ android { } } +kotlin { + compilerOptions { + jvmTarget = org.jetbrains.kotlin.gradle.dsl.JvmTarget.JVM_17 + } +} + flutter { source = "../.." } diff --git a/mih_ui/android/build/ios/SourcePackages/firebase_app_check-0.4.5/CHANGELOG.md b/mih_ui/android/build/ios/SourcePackages/firebase_app_check-0.4.5/CHANGELOG.md new file mode 100644 index 00000000..ee988ff3 --- /dev/null +++ b/mih_ui/android/build/ios/SourcePackages/firebase_app_check-0.4.5/CHANGELOG.md @@ -0,0 +1,576 @@ +## 0.4.5 + + - **FEAT**(appcheck): appcheck reCAPTCHA mobile support (gradually rolling out) ([#18261](https://github.com/firebase/flutterfire/issues/18261)). ([036a860a](https://github.com/firebase/flutterfire/commit/036a860a0e66d46b5c57eb3df3a0f9e5846ef00b)) + +## 0.4.4+2 + + - Update a dependency to the latest release. + +## 0.4.4+1 + + - Update a dependency to the latest release. + +## 0.4.4 + + - **REFACTOR**: move all packages to workspace ([#18182](https://github.com/firebase/flutterfire/issues/18182)). ([6cdfcb10](https://github.com/firebase/flutterfire/commit/6cdfcb103da7be46ccb190d7e107d8c537aa1ff8)) + - **FIX**: update core, auth and app-check logic so internal resources on method channels are properly disposed ([#18268](https://github.com/firebase/flutterfire/issues/18268)). ([a0de4ed8](https://github.com/firebase/flutterfire/commit/a0de4ed86b0dff89bb9e557f2a54f38cd2546016)) + - **FEAT**(core): Add Auth and AppCheck as App's registered service. ([#18237](https://github.com/firebase/flutterfire/issues/18237)). ([7ce191cb](https://github.com/firebase/flutterfire/commit/7ce191cbd598b299cd0ec64b45d1366914367a5d)) + +## 0.4.3 + + - **FEAT**(app_check,windows): add support for AppCheck for Windows ([#18140](https://github.com/firebase/flutterfire/issues/18140)). ([81f30325](https://github.com/firebase/flutterfire/commit/81f30325fc926fe94b630e49f56b795c781a4cbe)) + - **FEAT**: use local firebase_core instead of remote SPM dependency ([#18141](https://github.com/firebase/flutterfire/issues/18141)). ([995caf40](https://github.com/firebase/flutterfire/commit/995caf400df80c0fde7151c651ccc6c0f756e381)) + +## 0.4.2 + + - **FEAT**(messaging,web): add support for debug tokens on Web ([#18057](https://github.com/firebase/flutterfire/issues/18057)). ([b853386e](https://github.com/firebase/flutterfire/commit/b853386e987d686eab4b8fd9b8dad14eda97479c)) + - **FEAT**(ios): migrate iOS to UIScene lifecycle ([#18054](https://github.com/firebase/flutterfire/issues/18054)). ([3ffa4110](https://github.com/firebase/flutterfire/commit/3ffa411098132fd5182a84be4e7a226106bc7451)) + +## 0.4.1+5 + + - Update a dependency to the latest release. + +## 0.4.1+4 + + - Update a dependency to the latest release. + +## 0.4.1+3 + + - Update a dependency to the latest release. + +## 0.4.1+2 + + - Update a dependency to the latest release. + +## 0.4.1+1 + + - **FIX**(app_check): Deprecate androidProvider and appleProvider parameters in activate method ([#17742](https://github.com/firebase/flutterfire/issues/17742)). ([4e7f800e](https://github.com/firebase/flutterfire/commit/4e7f800e94a895c6553bd3c1595b4f06ac69bb81)) + - **FIX**(app_check): Expose AppleAppAttestProvider without importing platform interface ([#17740](https://github.com/firebase/flutterfire/issues/17740)). ([6c2355a0](https://github.com/firebase/flutterfire/commit/6c2355a05d6bba763768ce3bc09c3cc0528fa900)) + +## 0.4.1 + + - **FEAT**(app-check): Debug token support for the activate method ([#17723](https://github.com/firebase/flutterfire/issues/17723)). ([3c638264](https://github.com/firebase/flutterfire/commit/3c638264565d902ddbe4dff5bb027aef9e1c2140)) + +## 0.4.0+1 + + - **FIX**(app_check,iOS): correctly parse `forceRefresh` argument using `boolValue` ([#17627](https://github.com/firebase/flutterfire/issues/17627)). ([8c0802d0](https://github.com/firebase/flutterfire/commit/8c0802d098c970740a34e83952f56dbe9eb279fd)) + +## 0.4.0 + +> Note: This release has breaking changes. + + - **BREAKING** **FEAT**: bump iOS SDK to version 12.0.0 ([#17549](https://github.com/firebase/flutterfire/issues/17549)). ([b2619e68](https://github.com/firebase/flutterfire/commit/b2619e685fec897513483df1d7be347b64f95606)) + - **BREAKING** **FEAT**(app-check): remove deprecated functions ([#17561](https://github.com/firebase/flutterfire/issues/17561)). ([3e4302c4](https://github.com/firebase/flutterfire/commit/3e4302c4281d1d39c140ff116643d700cd3c5ace)) + - **BREAKING** **FEAT**: bump Android SDK to version 34.0.0 ([#17554](https://github.com/firebase/flutterfire/issues/17554)). ([a5bdc051](https://github.com/firebase/flutterfire/commit/a5bdc051d40ee44e39cf0b8d2a7801bc6f618b67)) + +## 0.3.2+10 + + - Update a dependency to the latest release. + +## 0.3.2+9 + + - Update a dependency to the latest release. + +## 0.3.2+8 + + - Update a dependency to the latest release. + +## 0.3.2+7 + + - Update a dependency to the latest release. + +## 0.3.2+6 + + - Update a dependency to the latest release. + +## 0.3.2+5 + + - Update a dependency to the latest release. + +## 0.3.2+4 + + - Update a dependency to the latest release. + +## 0.3.2+3 + + - Update a dependency to the latest release. + +## 0.3.2+2 + + - Update a dependency to the latest release. + +## 0.3.2+1 + + - Update a dependency to the latest release. + +## 0.3.2 + + + - **FEAT**(app-check): Swift Package Manager support ([#16810](https://github.com/firebase/flutterfire/issues/16810)). ([f2e3f396](https://github.com/firebase/flutterfire/commit/f2e3f3965e83a6bf8c52c1cd9f80509a08907a84)) + +## 0.3.1+7 + + - Update a dependency to the latest release. + +## 0.3.1+6 + + - Update a dependency to the latest release. + +## 0.3.1+5 + + - Update a dependency to the latest release. + +## 0.3.1+4 + + - Update a dependency to the latest release. + +## 0.3.1+3 + + - **FIX**(all,apple): use modular headers to import ([#13400](https://github.com/firebase/flutterfire/issues/13400)). ([d7d2d4b9](https://github.com/firebase/flutterfire/commit/d7d2d4b93e7c00226027fffde46699f3d5388a41)) + +## 0.3.1+2 + + - Update a dependency to the latest release. + +## 0.3.1+1 + + - Update a dependency to the latest release. + +## 0.3.1 + + - **FEAT**(firestore,web): expose `webExperimentalForceLongPolling`, `webExperimentalAutoDetectLongPolling` and `timeoutSeconds` on web ([#13201](https://github.com/firebase/flutterfire/issues/13201)). ([6ec2a103](https://github.com/firebase/flutterfire/commit/6ec2a103a3a325a73550bdfff4c0d524ae7e4068)) + +## 0.3.0+5 + + - **DOCS**: remove reference to flutter.io and firebase.flutter.dev ([#13152](https://github.com/firebase/flutterfire/issues/13152)). ([5f0874b9](https://github.com/firebase/flutterfire/commit/5f0874b91e28a203dd62d37d391e5760c91f5729)) + +## 0.3.0+4 + + - Update a dependency to the latest release. + +## 0.3.0+3 + + - Update a dependency to the latest release. + +## 0.3.0+2 + + - Update a dependency to the latest release. + +## 0.3.0+1 + + - **FIX**(app-check,web): fixed broken `onTokenChanged` and ensured it is properly cleaned up. Streams are also cleaned up on "hot restart" ([#12933](https://github.com/firebase/flutterfire/issues/12933)). ([093b5fef](https://github.com/firebase/flutterfire/commit/093b5fef8c3b8314835dc954ce02daacd1e077f4)) + - **FIX**(firebase_app_check,ios): Replace angles with quotes in import statement ([#12929](https://github.com/firebase/flutterfire/issues/12929)). ([f2fc902b](https://github.com/firebase/flutterfire/commit/f2fc902b9e954baf9d72bd3863a85bde402d2133)) + - **FIX**(app-check,ios): update app check to stable release ([#12924](https://github.com/firebase/flutterfire/issues/12924)). ([ced11684](https://github.com/firebase/flutterfire/commit/ced1168482c3b8e8b4746abde13649d212a503fd)) + +## 0.3.0 + +> Note: This release has breaking changes. + + - **BREAKING** **REFACTOR**: android plugins require `minSdk 21`, auth requires `minSdk 23` ahead of android BOM `>=33.0.0` ([#12873](https://github.com/firebase/flutterfire/issues/12873)). ([52accfc6](https://github.com/firebase/flutterfire/commit/52accfc6c39d6360d9c0f36efe369ede990b7362)) + - **BREAKING** **REFACTOR**: bump all iOS deployment targets to iOS 13 ahead of Firebase iOS SDK `v11` breaking change ([#12872](https://github.com/firebase/flutterfire/issues/12872)). ([de0cea2c](https://github.com/firebase/flutterfire/commit/de0cea2c3c36694a76361be784255986fac84a43)) + +## 0.2.2+7 + + - Update a dependency to the latest release. + +## 0.2.2+6 + + - Update a dependency to the latest release. + +## 0.2.2+5 + + - Update a dependency to the latest release. + +## 0.2.2+4 + + - Update a dependency to the latest release. + +## 0.2.2+3 + + - Update a dependency to the latest release. + +## 0.2.2+2 + + - Update a dependency to the latest release. + +## 0.2.2+1 + + - **FIX**(app-check,android): fix unnecessary deprecation warning ([#12578](https://github.com/firebase/flutterfire/issues/12578)). ([805ca028](https://github.com/firebase/flutterfire/commit/805ca028d20c582e93bcebbeca3105deab365edc)) + +## 0.2.2 + + - **FEAT**(android): Bump `compileSdk` version of Android plugins to latest stable (34) ([#12566](https://github.com/firebase/flutterfire/issues/12566)). ([e891fab2](https://github.com/firebase/flutterfire/commit/e891fab291e9beebc223000b133a6097e066a7fc)) + +## 0.2.1+19 + + - **REFACTOR**(app_check,web): small refactor around initialisation of FirebaseAppCheckWeb ([#12474](https://github.com/firebase/flutterfire/issues/12474)). ([83aab7f8](https://github.com/firebase/flutterfire/commit/83aab7f8f6a6dde6e71765826c0e1f9aabc110a0)) + +## 0.2.1+18 + + - Update a dependency to the latest release. + +## 0.2.1+17 + + - Update a dependency to the latest release. + +## 0.2.1+16 + + - Update a dependency to the latest release. + +## 0.2.1+15 + + - Update a dependency to the latest release. + +## 0.2.1+14 + + - Update a dependency to the latest release. + +## 0.2.1+13 + + - Update a dependency to the latest release. + +## 0.2.1+12 + + - Update a dependency to the latest release. + +## 0.2.1+11 + + - Update a dependency to the latest release. + +## 0.2.1+10 + + - Update a dependency to the latest release. + +## 0.2.1+9 + + - Update a dependency to the latest release. + +## 0.2.1+8 + + - Update a dependency to the latest release. + +## 0.2.1+7 + + - Update a dependency to the latest release. + +## 0.2.1+6 + + - Update a dependency to the latest release. + +## 0.2.1+5 + + - Update a dependency to the latest release. + +## 0.2.1+4 + + - Update a dependency to the latest release. + +## 0.2.1+3 + + - Update a dependency to the latest release. + +## 0.2.1+2 + + - Update a dependency to the latest release. + +## 0.2.1+1 + + - Update a dependency to the latest release. + +## 0.2.1 + + - **REFACTOR**(app-check,android): update linting warnings ([#11666](https://github.com/firebase/flutterfire/issues/11666)). ([fa9c8181](https://github.com/firebase/flutterfire/commit/fa9c8181156697a96b2615906b24613f28346175)) + - **FIX**(firebase_app_check): Allow non-default app for Android debug provider ([#11680](https://github.com/firebase/flutterfire/issues/11680)). ([dd20c0c7](https://github.com/firebase/flutterfire/commit/dd20c0c7413dd9c9cd4c54426afc2572f9438607)) + - **FEAT**: Full support of AGP 8 ([#11699](https://github.com/firebase/flutterfire/issues/11699)). ([bdb5b270](https://github.com/firebase/flutterfire/commit/bdb5b27084d225809883bdaa6aa5954650551927)) + - **FEAT**(app_check): Use Android dependencies from Firebase BOM ([#11671](https://github.com/firebase/flutterfire/issues/11671)). ([378fcbdc](https://github.com/firebase/flutterfire/commit/378fcbdc4909e448d47cc204147a2ecd978b4fb7)) + - **DOCS**: Updated documentation link in firebase_app_check README.md ([#11712](https://github.com/firebase/flutterfire/issues/11712)). ([dd3e56c6](https://github.com/firebase/flutterfire/commit/dd3e56c67a2ddad0a11043f00e9d80544d36355a)) + +## 0.2.0+1 + + - Update a dependency to the latest release. + +## 0.2.0 + +> Note: This release has breaking changes. + + - **BREAKING** **FEAT**(app-check,web): support for `ReCaptchaEnterpriseProvider`. User facing API updated. ([#11573](https://github.com/firebase/flutterfire/issues/11573)). ([09825edd](https://github.com/firebase/flutterfire/commit/09825edd0e1ecd609e2046fdefda439ce4099087)) + +## 0.1.5+2 + + - Update a dependency to the latest release. + +## 0.1.5+1 + + - Update a dependency to the latest release. + +## 0.1.5 + + - **FEAT**(app-check): support for `getLimitedUseToken()` API ([#11091](https://github.com/firebase/flutterfire/issues/11091)). ([9db9326f](https://github.com/firebase/flutterfire/commit/9db9326fe503c31299c9685449150e809543974e)) + +## 0.1.4+3 + + - Update a dependency to the latest release. + +## 0.1.4+2 + + - Update a dependency to the latest release. + +## 0.1.4+1 + + - Update a dependency to the latest release. + +## 0.1.4 + + - **FEAT**: update dependency constraints to `sdk: '>=2.18.0 <4.0.0'` `flutter: '>=3.3.0'` ([#10946](https://github.com/firebase/flutterfire/issues/10946)). ([2772d10f](https://github.com/firebase/flutterfire/commit/2772d10fe510dcc28ec2d37a26b266c935699fa6)) + - **FEAT**: update libraries to be compatible with Flutter 3.10.0 ([#10944](https://github.com/firebase/flutterfire/issues/10944)). ([e1f5a5ea](https://github.com/firebase/flutterfire/commit/e1f5a5ea798c54f19d1d2f7b8f2250f8819f44b7)) + +## 0.1.3 + + - **FIX**: add support for AGP 8.0 ([#10901](https://github.com/firebase/flutterfire/issues/10901)). ([a3b96735](https://github.com/firebase/flutterfire/commit/a3b967354294c295a9be8d699a6adb7f4b1dba7f)) + - **FEAT**: upgrade to dart 3 compatible dependencies ([#10890](https://github.com/firebase/flutterfire/issues/10890)). ([4bd7e59b](https://github.com/firebase/flutterfire/commit/4bd7e59b1f2b09a2230c49830159342dd4592041)) + +## 0.1.2+3 + + - **FIX**(app-check): use correct `getAppCheckToken()` method. Print out debug token for iOS. ([#10819](https://github.com/firebase/flutterfire/issues/10819)). ([66909a9c](https://github.com/firebase/flutterfire/commit/66909a9c5b10e85f93565cbc308fdbee4ec6f607)) + +## 0.1.2+2 + + - Update a dependency to the latest release. + +## 0.1.2+1 + + - **FIX**(app-check): fix 'Semantic Issue (Xcode): `new` is unavailable' on XCode 14.3 ([#10734](https://github.com/firebase/flutterfire/issues/10734)). ([cc6d1c28](https://github.com/firebase/flutterfire/commit/cc6d1c28193d5cdaaa564729340c380b5f632982)) + +## 0.1.2 + + - **FEAT**: bump dart sdk constraint to 2.18 ([#10618](https://github.com/firebase/flutterfire/issues/10618)). ([f80948a2](https://github.com/firebase/flutterfire/commit/f80948a28b62eead358bdb900d5a0dfb97cebb33)) + +## 0.1.1+14 + + - Update a dependency to the latest release. + +## 0.1.1+13 + + - Update a dependency to the latest release. + +## 0.1.1+12 + + - Update a dependency to the latest release. + +## 0.1.1+11 + + - Update a dependency to the latest release. + +## 0.1.1+10 + + - Update a dependency to the latest release. + +## 0.1.1+9 + + - Update a dependency to the latest release. + +## 0.1.1+8 + + - Update a dependency to the latest release. + +## 0.1.1+7 + + - Update a dependency to the latest release. + +## 0.1.1+6 + + - Update a dependency to the latest release. + +## 0.1.1+5 + + - Update a dependency to the latest release. + +## 0.1.1+4 + + - Update a dependency to the latest release. + +## 0.1.1+3 + + - Update a dependency to the latest release. + +## 0.1.1+2 + + - **REFACTOR**: add `verify` to `QueryPlatform` and change internal `verifyToken` API to `verify` ([#9711](https://github.com/firebase/flutterfire/issues/9711)). ([c99a842f](https://github.com/firebase/flutterfire/commit/c99a842f3e3f5f10246e73f51530cc58c42b49a3)) + +## 0.1.1+1 + + - Update a dependency to the latest release. + +## 0.1.1 + +- Update a dependency to the latest release. + +## 0.1.0 + +> Note: This release has breaking changes. + + - **BREAKING** **FEAT**: Firebase iOS SDK version: `10.0.0` ([#9708](https://github.com/firebase/flutterfire/issues/9708)). ([9627c56a](https://github.com/firebase/flutterfire/commit/9627c56a37d657d0250b6f6b87d0fec1c31d4ba3)) + +## 0.0.9+1 + + - Update a dependency to the latest release. + +## 0.0.9 + + - **FEAT**: provide `androidDebugProvider` boolean for android debug provider & update app check example app ([#9412](https://github.com/firebase/flutterfire/issues/9412)). ([f1f26748](https://github.com/firebase/flutterfire/commit/f1f26748615c7c9d406e1d3d605e2987e1134ee7)) + +## 0.0.8 + + - **FEAT**: provide `androidDebugProvider` boolean for android debug provider & update app check example app ([#9412](https://github.com/firebase/flutterfire/issues/9412)). ([f1f26748](https://github.com/firebase/flutterfire/commit/f1f26748615c7c9d406e1d3d605e2987e1134ee7)) + +## 0.0.7+2 + + - Update a dependency to the latest release. + +## 0.0.7+1 + + - Update a dependency to the latest release. + +## 0.0.7 + + - **FEAT**: update the example app with webRecaptcha in activate button ([#9373](https://github.com/firebase/flutterfire/issues/9373)). ([1ff76c1b](https://github.com/firebase/flutterfire/commit/1ff76c1b87b623ff21c921d6a6cc2c586cf43ac3)) + - **REFACTOR**: update deprecated `Tasks.call()` to `TaskCompletionSource` API ([#9404](https://github.com/firebase/flutterfire/pull/9404)). ([837d68ea](https://github.com/firebase/flutterfire/commit/5aa9f665e70297fecb88bd0fda5445753470660f)) + +## 0.0.6+20 + + - Update a dependency to the latest release. + +## 0.0.6+19 + + - Update a dependency to the latest release. + +## 0.0.6+18 + + - Update a dependency to the latest release. + +## 0.0.6+17 + + - Update a dependency to the latest release. + +## 0.0.6+16 + + - **FIX**: bump `firebase_core_platform_interface` version to fix previous release. ([bea70ea5](https://github.com/firebase/flutterfire/commit/bea70ea5cbbb62cbfd2a7a74ae3a07cb12b3ee5a)) + +## 0.0.6+15 + + - **DOCS**: separate the first sentence of a doc comment into its own paragraph for `getToken()` (#8968). ([4d487ef7](https://github.com/firebase/flutterfire/commit/4d487ef7abdb9a8333735ced9c40438fef9912a3)) + +## 0.0.6+14 + + - **REFACTOR**: use `firebase.google.com` link for `homepage` in `pubspec.yaml` (#8727). ([41a963b3](https://github.com/firebase/flutterfire/commit/41a963b376ae4ec23e1394bc074f8feee6ae16b2)) + - **REFACTOR**: use "firebase" instead of "FirebaseExtended" as organisation in all links for this repository (#8791). ([d90b8357](https://github.com/firebase/flutterfire/commit/d90b8357db01d65e753021358668f0b129713e6b)) + - **DOCS**: point to "firebase.google" domain for hyperlinks in the usage section of `README.md` files (for the missing packages) (#8818). ([5bda8c92](https://github.com/firebase/flutterfire/commit/5bda8c92be1651a941d1285d36e885ee0b967b11)) + +## 0.0.6+13 + + - **DOCS**: use camel case style for "FlutterFire" in `README.md` (#8747). ([e2a022d7](https://github.com/firebase/flutterfire/commit/e2a022d7427817002e4114eb7434aa6e53384891)) + +## 0.0.6+12 + + - Update a dependency to the latest release. + +## 0.0.6+11 + + - Update a dependency to the latest release. + +## 0.0.6+10 + + - Update a dependency to the latest release. + +## 0.0.6+9 + + - Update a dependency to the latest release. + +## 0.0.6+8 + + - Update a dependency to the latest release. + +## 0.0.6+7 + + - **FIX**: update all Dart SDK version constraints to Dart >= 2.16.0 (#8184). ([df4a5bab](https://github.com/firebase/flutterfire/commit/df4a5bab3c029399b4f257a5dd658d302efe3908)) + +## 0.0.6+6 + + - Update a dependency to the latest release. + +## 0.0.6+5 + + - **FIX**: workaround iOS build issue when targeting platforms < iOS 11. ([c78e0b79](https://github.com/firebase/flutterfire/commit/c78e0b79bde479e78c558d3df92988c130280e81)) + +## 0.0.6+4 + + - **FIX**: bump Android `compileSdkVersion` to 31 (#7726). ([a9562bac](https://github.com/firebase/flutterfire/commit/a9562bac60ba927fb3664a47a7f7eaceb277dca6)) + +## 0.0.6+3 + + - **REFACTOR**: fix all `unnecessary_import` analyzer issues introduced with Flutter 2.8. ([7f0e82c9](https://github.com/firebase/flutterfire/commit/7f0e82c978a3f5a707dd95c7e9136a3e106ff75e)) + +## 0.0.6+2 + + - Update a dependency to the latest release. + +## 0.0.6+1 + + - Update a dependency to the latest release. + +## 0.0.6 + + - **FEAT**: add token apis and documentation (#7419). + +## 0.0.5 + +- **NEW**: Added support for multi-app via the `instanceFor()` method. +- **NEW**: Added support for getting the current App Check token via the `getToken()` method. +- **NEW**: Added support for enabling automatic token refreshing via the `setTokenAutoRefreshEnabled()` method. +- **NEW**: Added support for subscribing to token change events (as a `Stream`) via `onTokenChange`. + +## 0.0.4 + + - **REFACTOR**: migrate remaining examples & e2e tests to null-safety (#7393). + - **FEAT**: automatically inject Firebase JS SDKs (#7359). + +## 0.0.3 + + - **FEAT**: support initializing default `FirebaseApp` instances from Dart (#6549). + +## 0.0.2+4 + + - Update a dependency to the latest release. + +## 0.0.2+3 + + - Update a dependency to the latest release. + +## 0.0.2+2 + + - Update a dependency to the latest release. + +## 0.0.2+1 + + - **DOCS**: using for version `0.0.1` the same markdown headline level as the other versions have in the changelog (#6845). + +## 0.0.2 + + - **STYLE**: enable additional lint rules (#6832). + - **FEAT**: lower iOS & macOS deployment targets for relevant plugins (#6757). + +## 0.0.1+3 + + - Update a dependency to the latest release. + +## 0.0.1+2 + + - Update a dependency to the latest release. + +## 0.0.1+1 + + - Update a dependency to the latest release. + +## 0.0.1 + + - Initial release. diff --git a/mih_ui/android/build/ios/SourcePackages/firebase_app_check-0.4.5/LICENSE b/mih_ui/android/build/ios/SourcePackages/firebase_app_check-0.4.5/LICENSE new file mode 100644 index 00000000..88629004 --- /dev/null +++ b/mih_ui/android/build/ios/SourcePackages/firebase_app_check-0.4.5/LICENSE @@ -0,0 +1,27 @@ +// Copyright 2021 The Chromium Authors. All rights reserved. +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are +// met: +// +// * Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// * Redistributions in binary form must reproduce the above +// copyright notice, this list of conditions and the following disclaimer +// in the documentation and/or other materials provided with the +// distribution. +// * Neither the name of Google Inc. nor the names of its +// contributors may be used to endorse or promote products derived from +// this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. diff --git a/mih_ui/android/build/ios/SourcePackages/firebase_app_check-0.4.5/README.md b/mih_ui/android/build/ios/SourcePackages/firebase_app_check-0.4.5/README.md new file mode 100644 index 00000000..1d0c9574 --- /dev/null +++ b/mih_ui/android/build/ios/SourcePackages/firebase_app_check-0.4.5/README.md @@ -0,0 +1,24 @@ +# Firebase App Check for Flutter +[![pub package](https://img.shields.io/pub/v/firebase_app_check.svg)](https://pub.dev/packages/firebase_app_check) + +A Flutter plugin to use the [Firebase App Check API](https://firebase.google.com/docs/app-check/). + +To learn more about Firebase App Check, please visit the [Firebase website](https://firebase.google.com/docs/app-check) + +## Getting Started + +To get started with Firebase App Check for Flutter, please [see the documentation](https://firebase.google.com/docs/app-check/flutter/default-providers). + +## Usage + +To use this plugin, please visit the [App Check Usage documentation](https://firebase.google.com/docs/app-check/flutter/default-providers#initialize) + +## Issues and feedback + +Please file FlutterFire specific issues, bugs, or feature requests in our [issue tracker](https://github.com/firebase/flutterfire/issues/new). + +Plugin issues that are not specific to FlutterFire can be filed in the [Flutter issue tracker](https://github.com/flutter/flutter/issues/new). + +To contribute a change to this plugin, +please review our [contribution guide](https://github.com/firebase/flutterfire/blob/main/CONTRIBUTING.md) +and open a [pull request](https://github.com/firebase/flutterfire/pulls). diff --git a/mih_ui/android/build/ios/SourcePackages/firebase_app_check-0.4.5/android/build.gradle b/mih_ui/android/build/ios/SourcePackages/firebase_app_check-0.4.5/android/build.gradle new file mode 100644 index 00000000..cc7c342a --- /dev/null +++ b/mih_ui/android/build/ios/SourcePackages/firebase_app_check-0.4.5/android/build.gradle @@ -0,0 +1,94 @@ +group 'io.flutter.plugins.firebase.appcheck' +version '1.0-SNAPSHOT' + +apply plugin: 'com.android.library' +apply from: file("local-config.gradle") + +buildscript { + ext.kotlin_version = "2.0.0" + repositories { + google() + mavenCentral() + } +} + +rootProject.allprojects { + repositories { + google() + mavenCentral() + } +} + +// AGP 9+ has built-in Kotlin support unless Flutter opts out via android.builtInKotlin=false. +def agpMajor = com.android.Version.ANDROID_GRADLE_PLUGIN_VERSION.tokenize('.')[0] as int +def builtInKotlin = providers.gradleProperty("android.builtInKotlin") + .map { it.toBoolean() } + .orElse(agpMajor >= 9) + .get() +if (agpMajor < 9 || !builtInKotlin) { + apply plugin: 'kotlin-android' +} + +def firebaseCoreProject = findProject(':firebase_core') +if (firebaseCoreProject == null) { + throw new GradleException('Could not find the firebase_core FlutterFire plugin, have you added it as a dependency in your pubspec?') +} else if (!firebaseCoreProject.properties['FirebaseSDKVersion']) { + throw new GradleException('A newer version of the firebase_core FlutterFire plugin is required, please update your firebase_core pubspec dependency.') +} + +def getRootProjectExtOrCoreProperty(name, firebaseCoreProject) { + if (!rootProject.ext.has('FlutterFire')) return firebaseCoreProject.properties[name] + if (!rootProject.ext.get('FlutterFire')[name]) return firebaseCoreProject.properties[name] + return rootProject.ext.get('FlutterFire').get(name) +} + +android { + // Conditional for compatibility with AGP <4.2. + if (project.android.hasProperty("namespace")) { + namespace 'io.flutter.plugins.firebase.appcheck' + } + + compileSdkVersion project.ext.compileSdk + + defaultConfig { + minSdkVersion project.ext.minSdk + testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner" + } + + compileOptions { + sourceCompatibility project.ext.javaVersion + targetCompatibility project.ext.javaVersion + } + + sourceSets { + main.java.srcDirs += "src/main/kotlin" + test.java.srcDirs += "src/test/kotlin" + } + + buildFeatures { + buildConfig true + } + + lintOptions { + disable 'InvalidPackage' + } + + dependencies { + api firebaseCoreProject + implementation platform("com.google.firebase:firebase-bom:${getRootProjectExtOrCoreProperty("FirebaseSDKVersion", firebaseCoreProject)}") + implementation 'com.google.firebase:firebase-appcheck-debug' + implementation 'com.google.firebase:firebase-appcheck-playintegrity' + implementation 'com.google.firebase:firebase-appcheck-recaptcha' + implementation 'androidx.annotation:annotation:1.7.0' + } +} + +plugins.withId("org.jetbrains.kotlin.android") { + kotlin { + compilerOptions { + jvmTarget = org.jetbrains.kotlin.gradle.dsl.JvmTarget.fromTarget(project.ext.javaVersion.toString()) + } + } +} + +apply from: file("./user-agent.gradle") diff --git a/mih_ui/android/build/ios/SourcePackages/firebase_app_check-0.4.5/android/gradle.properties b/mih_ui/android/build/ios/SourcePackages/firebase_app_check-0.4.5/android/gradle.properties new file mode 100644 index 00000000..d9cf55df --- /dev/null +++ b/mih_ui/android/build/ios/SourcePackages/firebase_app_check-0.4.5/android/gradle.properties @@ -0,0 +1,2 @@ +org.gradle.jvmargs=-Xmx1536M +android.useAndroidX=true diff --git a/mih_ui/android/build/ios/SourcePackages/firebase_app_check-0.4.5/android/gradle/wrapper/gradle-wrapper.properties b/mih_ui/android/build/ios/SourcePackages/firebase_app_check-0.4.5/android/gradle/wrapper/gradle-wrapper.properties new file mode 100644 index 00000000..e411586a --- /dev/null +++ b/mih_ui/android/build/ios/SourcePackages/firebase_app_check-0.4.5/android/gradle/wrapper/gradle-wrapper.properties @@ -0,0 +1,5 @@ +distributionBase=GRADLE_USER_HOME +distributionPath=wrapper/dists +distributionUrl=https\://services.gradle.org/distributions/gradle-8.4-bin.zip +zipStoreBase=GRADLE_USER_HOME +zipStorePath=wrapper/dists diff --git a/mih_ui/android/build/ios/SourcePackages/firebase_app_check-0.4.5/android/local-config.gradle b/mih_ui/android/build/ios/SourcePackages/firebase_app_check-0.4.5/android/local-config.gradle new file mode 100644 index 00000000..802b7e1d --- /dev/null +++ b/mih_ui/android/build/ios/SourcePackages/firebase_app_check-0.4.5/android/local-config.gradle @@ -0,0 +1,7 @@ +ext { + compileSdk=34 + minSdk=23 + targetSdk=34 + javaVersion = JavaVersion.toVersion(17) + androidGradlePluginVersion = '8.3.0' +} \ No newline at end of file diff --git a/mih_ui/android/build/ios/SourcePackages/firebase_app_check-0.4.5/android/settings.gradle b/mih_ui/android/build/ios/SourcePackages/firebase_app_check-0.4.5/android/settings.gradle new file mode 100644 index 00000000..11ac1690 --- /dev/null +++ b/mih_ui/android/build/ios/SourcePackages/firebase_app_check-0.4.5/android/settings.gradle @@ -0,0 +1,10 @@ +rootProject.name = 'firebase_app_check' + +apply from: file("local-config.gradle") + +pluginManagement { + plugins { + id "com.android.application" version project.ext.androidGradlePluginVersion + id "com.android.library" version project.ext.androidGradlePluginVersion + } +} diff --git a/mih_ui/android/build/ios/SourcePackages/firebase_app_check-0.4.5/android/src/main/AndroidManifest.xml b/mih_ui/android/build/ios/SourcePackages/firebase_app_check-0.4.5/android/src/main/AndroidManifest.xml new file mode 100644 index 00000000..18867831 --- /dev/null +++ b/mih_ui/android/build/ios/SourcePackages/firebase_app_check-0.4.5/android/src/main/AndroidManifest.xml @@ -0,0 +1,9 @@ + + + + + + + diff --git a/mih_ui/android/build/ios/SourcePackages/firebase_app_check-0.4.5/android/src/main/kotlin/io/flutter/plugins/firebase/appcheck/FirebaseAppCheckPlugin.kt b/mih_ui/android/build/ios/SourcePackages/firebase_app_check-0.4.5/android/src/main/kotlin/io/flutter/plugins/firebase/appcheck/FirebaseAppCheckPlugin.kt new file mode 100644 index 00000000..99aab95e --- /dev/null +++ b/mih_ui/android/build/ios/SourcePackages/firebase_app_check-0.4.5/android/src/main/kotlin/io/flutter/plugins/firebase/appcheck/FirebaseAppCheckPlugin.kt @@ -0,0 +1,161 @@ +// Copyright 2025 The Chromium Authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. +package io.flutter.plugins.firebase.appcheck + +import android.os.Handler +import android.os.Looper +import com.google.android.gms.tasks.Task +import com.google.android.gms.tasks.TaskCompletionSource +import com.google.firebase.FirebaseApp +import com.google.firebase.appcheck.FirebaseAppCheck +import com.google.firebase.appcheck.debug.DebugAppCheckProviderFactory +import com.google.firebase.appcheck.playintegrity.PlayIntegrityAppCheckProviderFactory +import com.google.firebase.appcheck.recaptcha.RecaptchaAppCheckProviderFactory +import io.flutter.embedding.engine.plugins.FlutterPlugin +import io.flutter.embedding.engine.plugins.FlutterPlugin.FlutterPluginBinding +import io.flutter.plugin.common.BinaryMessenger +import io.flutter.plugin.common.EventChannel +import io.flutter.plugins.firebase.core.FlutterFirebasePlugin +import io.flutter.plugins.firebase.core.FlutterFirebasePluginRegistry + +class FirebaseAppCheckPlugin : FlutterFirebasePlugin, FlutterPlugin, FirebaseAppCheckHostApi { + + private val streamHandlers: MutableMap = HashMap() + private val eventChannels: MutableMap = HashMap() + private val mainThreadHandler = Handler(Looper.getMainLooper()) + private var messenger: BinaryMessenger? = null + + companion object { + const val METHOD_CHANNEL = "plugins.flutter.io/firebase_app_check" + const val EVENT_CHANNEL_PREFIX = "plugins.flutter.io/firebase_app_check/token/" + } + + override fun onAttachedToEngine(binding: FlutterPluginBinding) { + messenger = binding.binaryMessenger + FirebaseAppCheckHostApi.setUp(binding.binaryMessenger, this) + FlutterFirebasePluginRegistry.registerPlugin(METHOD_CHANNEL, this) + } + + override fun onDetachedFromEngine(binding: FlutterPluginBinding) { + FirebaseAppCheckHostApi.setUp(binding.binaryMessenger, null) + messenger = null + removeEventListeners() + } + + private fun getAppCheck(appName: String): FirebaseAppCheck { + val app = FirebaseApp.getInstance(appName) + return FirebaseAppCheck.getInstance(app) + } + + override fun activate( + appName: String, + androidProvider: String?, + appleProvider: String?, + debugToken: String?, + callback: (Result) -> Unit + ) { + try { + val firebaseAppCheck = getAppCheck(appName) + when (androidProvider) { + "debug" -> { + FlutterFirebaseAppRegistrar.debugToken = debugToken + firebaseAppCheck.installAppCheckProviderFactory( + DebugAppCheckProviderFactory.getInstance()) + } + "recaptcha" -> { + firebaseAppCheck.installAppCheckProviderFactory( + RecaptchaAppCheckProviderFactory.getInstance()) + } + else -> { + firebaseAppCheck.installAppCheckProviderFactory( + PlayIntegrityAppCheckProviderFactory.getInstance()) + } + } + callback(Result.success(Unit)) + } catch (e: Exception) { + callback(Result.failure(FlutterError("unknown", e.message, null))) + } + } + + override fun getToken( + appName: String, + forceRefresh: Boolean, + callback: (Result) -> Unit + ) { + val firebaseAppCheck = getAppCheck(appName) + firebaseAppCheck.getAppCheckToken(forceRefresh).addOnCompleteListener { task -> + if (task.isSuccessful) { + callback(Result.success(task.result?.token)) + } else { + callback(Result.failure(FlutterError("firebase_app_check", task.exception?.message, null))) + } + } + } + + override fun setTokenAutoRefreshEnabled( + appName: String, + isTokenAutoRefreshEnabled: Boolean, + callback: (Result) -> Unit + ) { + try { + val firebaseAppCheck = getAppCheck(appName) + firebaseAppCheck.setTokenAutoRefreshEnabled(isTokenAutoRefreshEnabled) + callback(Result.success(Unit)) + } catch (e: Exception) { + callback(Result.failure(FlutterError("unknown", e.message, null))) + } + } + + override fun registerTokenListener(appName: String, callback: (Result) -> Unit) { + try { + val firebaseAppCheck = getAppCheck(appName) + val name = EVENT_CHANNEL_PREFIX + appName + + val handler = TokenChannelStreamHandler(firebaseAppCheck) + val channel = EventChannel(messenger, name) + channel.setStreamHandler(handler) + eventChannels[name] = channel + streamHandlers[name] = handler + + callback(Result.success(name)) + } catch (e: Exception) { + callback(Result.failure(FlutterError("unknown", e.message, null))) + } + } + + override fun getLimitedUseAppCheckToken(appName: String, callback: (Result) -> Unit) { + val firebaseAppCheck = getAppCheck(appName) + firebaseAppCheck.limitedUseAppCheckToken.addOnCompleteListener { task -> + if (task.isSuccessful) { + callback(Result.success(task.result?.token ?: "")) + } else { + callback(Result.failure(FlutterError("firebase_app_check", task.exception?.message, null))) + } + } + } + + override fun getPluginConstantsForFirebaseApp(firebaseApp: FirebaseApp): Task> { + val taskCompletionSource = TaskCompletionSource>() + taskCompletionSource.setResult(HashMap()) + return taskCompletionSource.task + } + + override fun didReinitializeFirebaseCore(): Task { + val taskCompletionSource = TaskCompletionSource() + removeEventListeners() + taskCompletionSource.setResult(null) + return taskCompletionSource.task + } + + private fun removeEventListeners() { + for ((name, channel) in eventChannels) { + channel.setStreamHandler(null) + } + for ((name, handler) in streamHandlers) { + handler.onCancel(null) + } + eventChannels.clear() + streamHandlers.clear() + } +} diff --git a/mih_ui/android/build/ios/SourcePackages/firebase_app_check-0.4.5/android/src/main/kotlin/io/flutter/plugins/firebase/appcheck/FlutterFirebaseAppRegistrar.kt b/mih_ui/android/build/ios/SourcePackages/firebase_app_check-0.4.5/android/src/main/kotlin/io/flutter/plugins/firebase/appcheck/FlutterFirebaseAppRegistrar.kt new file mode 100644 index 00000000..1f1087b1 --- /dev/null +++ b/mih_ui/android/build/ios/SourcePackages/firebase_app_check-0.4.5/android/src/main/kotlin/io/flutter/plugins/firebase/appcheck/FlutterFirebaseAppRegistrar.kt @@ -0,0 +1,37 @@ +// Copyright 2025 The Chromium Authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. +package io.flutter.plugins.firebase.appcheck + +import androidx.annotation.Keep +import com.google.firebase.appcheck.debug.InternalDebugSecretProvider +import com.google.firebase.components.Component +import com.google.firebase.components.ComponentRegistrar +import com.google.firebase.platforminfo.LibraryVersionComponent + +@Keep +class FlutterFirebaseAppRegistrar : ComponentRegistrar, InternalDebugSecretProvider { + + companion object { + private const val DEBUG_SECRET_NAME = "fire-app-check-debug-secret" + + @JvmStatic var debugToken: String? = null + } + + override fun getComponents(): List> { + val library = + LibraryVersionComponent.create(BuildConfig.LIBRARY_NAME, BuildConfig.LIBRARY_VERSION) + + val debugSecretProvider = + Component.builder(InternalDebugSecretProvider::class.java) + .name(DEBUG_SECRET_NAME) + .factory { this } + .build() + + return listOf(library, debugSecretProvider) + } + + override fun getDebugSecret(): String? { + return debugToken + } +} diff --git a/mih_ui/android/build/ios/SourcePackages/firebase_app_check-0.4.5/android/src/main/kotlin/io/flutter/plugins/firebase/appcheck/GeneratedAndroidFirebaseAppCheck.g.kt b/mih_ui/android/build/ios/SourcePackages/firebase_app_check-0.4.5/android/src/main/kotlin/io/flutter/plugins/firebase/appcheck/GeneratedAndroidFirebaseAppCheck.g.kt new file mode 100644 index 00000000..4cd7a39b --- /dev/null +++ b/mih_ui/android/build/ios/SourcePackages/firebase_app_check-0.4.5/android/src/main/kotlin/io/flutter/plugins/firebase/appcheck/GeneratedAndroidFirebaseAppCheck.g.kt @@ -0,0 +1,223 @@ +// Copyright 2025, the Chromium project authors. Please see the AUTHORS file +// for details. All rights reserved. Use of this source code is governed by a +// BSD-style license that can be found in the LICENSE file. +// Autogenerated from Pigeon (v26.3.4), do not edit directly. +// See also: https://pub.dev/packages/pigeon +@file:Suppress("UNCHECKED_CAST", "ArrayInDataClass") + +package io.flutter.plugins.firebase.appcheck + +import android.util.Log +import io.flutter.plugin.common.BasicMessageChannel +import io.flutter.plugin.common.BinaryMessenger +import io.flutter.plugin.common.MessageCodec +import io.flutter.plugin.common.StandardMessageCodec +import java.io.ByteArrayOutputStream +import java.nio.ByteBuffer + +private object GeneratedAndroidFirebaseAppCheckPigeonUtils { + + fun wrapResult(result: Any?): List { + return listOf(result) + } + + fun wrapError(exception: Throwable): List { + return if (exception is FlutterError) { + listOf(exception.code, exception.message, exception.details) + } else { + listOf( + exception.javaClass.simpleName, + exception.toString(), + "Cause: " + exception.cause + ", Stacktrace: " + Log.getStackTraceString(exception)) + } + } +} + +/** + * Error class for passing custom error details to Flutter via a thrown PlatformException. + * + * @property code The error code. + * @property message The error message. + * @property details The error details. Must be a datatype supported by the api codec. + */ +class FlutterError( + val code: String, + override val message: String? = null, + val details: Any? = null +) : RuntimeException() + +private open class GeneratedAndroidFirebaseAppCheckPigeonCodec : StandardMessageCodec() { + override fun readValueOfType(type: Byte, buffer: ByteBuffer): Any? { + return super.readValueOfType(type, buffer) + } + + override fun writeValue(stream: ByteArrayOutputStream, value: Any?) { + super.writeValue(stream, value) + } +} + +/** Generated interface from Pigeon that represents a handler of messages from Flutter. */ +interface FirebaseAppCheckHostApi { + fun activate( + appName: String, + androidProvider: String?, + appleProvider: String?, + debugToken: String?, + callback: (Result) -> Unit + ) + + fun getToken(appName: String, forceRefresh: Boolean, callback: (Result) -> Unit) + + fun setTokenAutoRefreshEnabled( + appName: String, + isTokenAutoRefreshEnabled: Boolean, + callback: (Result) -> Unit + ) + + fun registerTokenListener(appName: String, callback: (Result) -> Unit) + + fun getLimitedUseAppCheckToken(appName: String, callback: (Result) -> Unit) + + companion object { + /** The codec used by FirebaseAppCheckHostApi. */ + val codec: MessageCodec by lazy { GeneratedAndroidFirebaseAppCheckPigeonCodec() } + /** + * Sets up an instance of `FirebaseAppCheckHostApi` to handle messages through the + * `binaryMessenger`. + */ + @JvmOverloads + fun setUp( + binaryMessenger: BinaryMessenger, + api: FirebaseAppCheckHostApi?, + messageChannelSuffix: String = "" + ) { + val separatedMessageChannelSuffix = + if (messageChannelSuffix.isNotEmpty()) ".$messageChannelSuffix" else "" + run { + val channel = + BasicMessageChannel( + binaryMessenger, + "dev.flutter.pigeon.firebase_app_check_platform_interface.FirebaseAppCheckHostApi.activate$separatedMessageChannelSuffix", + codec) + if (api != null) { + channel.setMessageHandler { message, reply -> + val args = message as List + val appNameArg = args[0] as String + val androidProviderArg = args[1] as String? + val appleProviderArg = args[2] as String? + val debugTokenArg = args[3] as String? + api.activate(appNameArg, androidProviderArg, appleProviderArg, debugTokenArg) { + result: Result -> + val error = result.exceptionOrNull() + if (error != null) { + reply.reply(GeneratedAndroidFirebaseAppCheckPigeonUtils.wrapError(error)) + } else { + reply.reply(GeneratedAndroidFirebaseAppCheckPigeonUtils.wrapResult(null)) + } + } + } + } else { + channel.setMessageHandler(null) + } + } + run { + val channel = + BasicMessageChannel( + binaryMessenger, + "dev.flutter.pigeon.firebase_app_check_platform_interface.FirebaseAppCheckHostApi.getToken$separatedMessageChannelSuffix", + codec) + if (api != null) { + channel.setMessageHandler { message, reply -> + val args = message as List + val appNameArg = args[0] as String + val forceRefreshArg = args[1] as Boolean + api.getToken(appNameArg, forceRefreshArg) { result: Result -> + val error = result.exceptionOrNull() + if (error != null) { + reply.reply(GeneratedAndroidFirebaseAppCheckPigeonUtils.wrapError(error)) + } else { + val data = result.getOrNull() + reply.reply(GeneratedAndroidFirebaseAppCheckPigeonUtils.wrapResult(data)) + } + } + } + } else { + channel.setMessageHandler(null) + } + } + run { + val channel = + BasicMessageChannel( + binaryMessenger, + "dev.flutter.pigeon.firebase_app_check_platform_interface.FirebaseAppCheckHostApi.setTokenAutoRefreshEnabled$separatedMessageChannelSuffix", + codec) + if (api != null) { + channel.setMessageHandler { message, reply -> + val args = message as List + val appNameArg = args[0] as String + val isTokenAutoRefreshEnabledArg = args[1] as Boolean + api.setTokenAutoRefreshEnabled(appNameArg, isTokenAutoRefreshEnabledArg) { + result: Result -> + val error = result.exceptionOrNull() + if (error != null) { + reply.reply(GeneratedAndroidFirebaseAppCheckPigeonUtils.wrapError(error)) + } else { + reply.reply(GeneratedAndroidFirebaseAppCheckPigeonUtils.wrapResult(null)) + } + } + } + } else { + channel.setMessageHandler(null) + } + } + run { + val channel = + BasicMessageChannel( + binaryMessenger, + "dev.flutter.pigeon.firebase_app_check_platform_interface.FirebaseAppCheckHostApi.registerTokenListener$separatedMessageChannelSuffix", + codec) + if (api != null) { + channel.setMessageHandler { message, reply -> + val args = message as List + val appNameArg = args[0] as String + api.registerTokenListener(appNameArg) { result: Result -> + val error = result.exceptionOrNull() + if (error != null) { + reply.reply(GeneratedAndroidFirebaseAppCheckPigeonUtils.wrapError(error)) + } else { + val data = result.getOrNull() + reply.reply(GeneratedAndroidFirebaseAppCheckPigeonUtils.wrapResult(data)) + } + } + } + } else { + channel.setMessageHandler(null) + } + } + run { + val channel = + BasicMessageChannel( + binaryMessenger, + "dev.flutter.pigeon.firebase_app_check_platform_interface.FirebaseAppCheckHostApi.getLimitedUseAppCheckToken$separatedMessageChannelSuffix", + codec) + if (api != null) { + channel.setMessageHandler { message, reply -> + val args = message as List + val appNameArg = args[0] as String + api.getLimitedUseAppCheckToken(appNameArg) { result: Result -> + val error = result.exceptionOrNull() + if (error != null) { + reply.reply(GeneratedAndroidFirebaseAppCheckPigeonUtils.wrapError(error)) + } else { + val data = result.getOrNull() + reply.reply(GeneratedAndroidFirebaseAppCheckPigeonUtils.wrapResult(data)) + } + } + } + } else { + channel.setMessageHandler(null) + } + } + } + } +} diff --git a/mih_ui/android/build/ios/SourcePackages/firebase_app_check-0.4.5/android/src/main/kotlin/io/flutter/plugins/firebase/appcheck/TokenChannelStreamHandler.kt b/mih_ui/android/build/ios/SourcePackages/firebase_app_check-0.4.5/android/src/main/kotlin/io/flutter/plugins/firebase/appcheck/TokenChannelStreamHandler.kt new file mode 100644 index 00000000..81d1b83e --- /dev/null +++ b/mih_ui/android/build/ios/SourcePackages/firebase_app_check-0.4.5/android/src/main/kotlin/io/flutter/plugins/firebase/appcheck/TokenChannelStreamHandler.kt @@ -0,0 +1,30 @@ +// Copyright 2025 The Chromium Authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. +package io.flutter.plugins.firebase.appcheck + +import com.google.firebase.appcheck.FirebaseAppCheck +import io.flutter.plugin.common.EventChannel + +class TokenChannelStreamHandler(private val firebaseAppCheck: FirebaseAppCheck) : + EventChannel.StreamHandler { + + private var listener: FirebaseAppCheck.AppCheckListener? = null + + override fun onListen(arguments: Any?, events: EventChannel.EventSink) { + listener = + FirebaseAppCheck.AppCheckListener { result -> + val event = HashMap() + event["token"] = result.token + events.success(event) + } + firebaseAppCheck.addAppCheckListener(listener!!) + } + + override fun onCancel(arguments: Any?) { + listener?.let { + firebaseAppCheck.removeAppCheckListener(it) + listener = null + } + } +} diff --git a/mih_ui/android/build/ios/SourcePackages/firebase_app_check-0.4.5/android/user-agent.gradle b/mih_ui/android/build/ios/SourcePackages/firebase_app_check-0.4.5/android/user-agent.gradle new file mode 100644 index 00000000..7b9c028a --- /dev/null +++ b/mih_ui/android/build/ios/SourcePackages/firebase_app_check-0.4.5/android/user-agent.gradle @@ -0,0 +1,22 @@ +import java.util.regex.Matcher +import java.util.regex.Pattern + +String libraryVersionName = "UNKNOWN" +String libraryName = "flutter-fire-app-check" +File pubspec = new File(project.projectDir.parentFile, 'pubspec.yaml') + +if (pubspec.exists()) { + String yaml = pubspec.text + // Using \s*['|"]?([^\n|'|"]*)['|"]? to extract version number. + Matcher versionMatcher = Pattern.compile("^version:\\s*['|\"]?([^\\n|'|\"]*)['|\"]?\$", Pattern.MULTILINE).matcher(yaml) + if (versionMatcher.find()) libraryVersionName = versionMatcher.group(1).replaceAll("\\+", "-") +} + +android { + defaultConfig { + // BuildConfig.VERSION_NAME + buildConfigField 'String', 'LIBRARY_VERSION', "\"${libraryVersionName}\"" + // BuildConfig.LIBRARY_NAME + buildConfigField 'String', 'LIBRARY_NAME', "\"${libraryName}\"" + } +} diff --git a/mih_ui/android/build/ios/SourcePackages/firebase_app_check-0.4.5/example/README.md b/mih_ui/android/build/ios/SourcePackages/firebase_app_check-0.4.5/example/README.md new file mode 100644 index 00000000..595e1145 --- /dev/null +++ b/mih_ui/android/build/ios/SourcePackages/firebase_app_check-0.4.5/example/README.md @@ -0,0 +1,8 @@ +# firebase_app_check_example + +Demonstrates how to use the firebase_app_check plugin. + +## Getting Started + +For help getting started with Flutter, view our online +[documentation](https://flutter.dev/). diff --git a/mih_ui/android/build/ios/SourcePackages/firebase_app_check-0.4.5/example/analysis_options.yaml b/mih_ui/android/build/ios/SourcePackages/firebase_app_check-0.4.5/example/analysis_options.yaml new file mode 100644 index 00000000..b6cd704f --- /dev/null +++ b/mih_ui/android/build/ios/SourcePackages/firebase_app_check-0.4.5/example/analysis_options.yaml @@ -0,0 +1,10 @@ +# Copyright 2021 The Chromium Authors. All rights reserved. +# Use of this source code is governed by a BSD-style license that can be +# in the LICENSE file. + +include: ../../../../analysis_options.yaml +linter: + rules: + avoid_print: false + depend_on_referenced_packages: false + library_private_types_in_public_api: false diff --git a/mih_ui/android/build/ios/SourcePackages/firebase_app_check-0.4.5/example/android/app/build.gradle b/mih_ui/android/build/ios/SourcePackages/firebase_app_check-0.4.5/example/android/app/build.gradle new file mode 100644 index 00000000..92298e72 --- /dev/null +++ b/mih_ui/android/build/ios/SourcePackages/firebase_app_check-0.4.5/example/android/app/build.gradle @@ -0,0 +1,65 @@ +plugins { + id "com.android.application" + // START: FlutterFire Configuration + id 'com.google.gms.google-services' + // END: FlutterFire Configuration + id "kotlin-android" + // The Flutter Gradle Plugin must be applied after the Android and Kotlin Gradle plugins. + id "dev.flutter.flutter-gradle-plugin" +} +apply from: file("../../../android/local-config.gradle") + +def localProperties = new Properties() +def localPropertiesFile = rootProject.file("local.properties") +if (localPropertiesFile.exists()) { + localPropertiesFile.withReader("UTF-8") { reader -> + localProperties.load(reader) + } +} + +def flutterVersionCode = localProperties.getProperty("flutter.versionCode") +if (flutterVersionCode == null) { + flutterVersionCode = "1" +} + +def flutterVersionName = localProperties.getProperty("flutter.versionName") +if (flutterVersionName == null) { + flutterVersionName = "1.0" +} + +android { + namespace = "io.flutter.plugins.firebase.appcheck.example" + compileSdk = flutter.compileSdkVersion + ndkVersion = flutter.ndkVersion + + compileOptions { + sourceCompatibility = project.ext.javaVersion + targetCompatibility = project.ext.javaVersion + } + + kotlinOptions { + jvmTarget = "17" + } + + defaultConfig { + applicationId = "io.flutter.plugins.firebase.appcheck.example" + // You can update the following values to match your application needs. + // For more information, see: https://docs.flutter.dev/deployment/android#reviewing-the-gradle-build-configuration. + minSdkVersion = flutter.minSdkVersion + targetSdk = flutter.targetSdkVersion + versionCode = flutterVersionCode.toInteger() + versionName = flutterVersionName + } + + buildTypes { + release { + // TODO: Add your own signing config for the release build. + // Signing with the debug keys for now, so `flutter run --release` works. + signingConfig = signingConfigs.debug + } + } +} + +flutter { + source = "../.." +} diff --git a/mih_ui/android/build/ios/SourcePackages/firebase_app_check-0.4.5/example/android/app/google-services.json b/mih_ui/android/build/ios/SourcePackages/firebase_app_check-0.4.5/example/android/app/google-services.json new file mode 100644 index 00000000..6b7e0408 --- /dev/null +++ b/mih_ui/android/build/ios/SourcePackages/firebase_app_check-0.4.5/example/android/app/google-services.json @@ -0,0 +1,615 @@ +{ + "project_info": { + "project_number": "406099696497", + "firebase_url": "https://flutterfire-e2e-tests-default-rtdb.europe-west1.firebasedatabase.app", + "project_id": "flutterfire-e2e-tests", + "storage_bucket": "flutterfire-e2e-tests.appspot.com" + }, + "client": [ + { + "client_info": { + "mobilesdk_app_id": "1:406099696497:android:d86a91cc7b338b233574d0", + "android_client_info": { + "package_name": "io.flutter.plugins.firebase.analytics.example" + } + }, + "oauth_client": [ + { + "client_id": "406099696497-a12gakvts4epfk5pkio7dphc1anjiggc.apps.googleusercontent.com", + "client_type": 3 + } + ], + "api_key": [ + { + "current_key": "AIzaSyCdRjCVZlhrq72RuEklEyyxYlBRCYhI2Sw" + } + ], + "services": { + "appinvite_service": { + "other_platform_oauth_client": [ + { + "client_id": "406099696497-a12gakvts4epfk5pkio7dphc1anjiggc.apps.googleusercontent.com", + "client_type": 3 + }, + { + "client_id": "406099696497-0mofiof3ofcgmpmirb6q0fllvb372sme.apps.googleusercontent.com", + "client_type": 2, + "ios_info": { + "bundle_id": "io.flutter.plugins.firebase.example" + } + } + ] + } + } + }, + { + "client_info": { + "mobilesdk_app_id": "1:406099696497:android:a241c4b471513a203574d0", + "android_client_info": { + "package_name": "io.flutter.plugins.firebase.appcheck.example" + } + }, + "oauth_client": [ + { + "client_id": "406099696497-7bvmqp0fffe24vm2arng0dtdeh2tvkgl.apps.googleusercontent.com", + "client_type": 1, + "android_info": { + "package_name": "io.flutter.plugins.firebase.appcheck.example", + "certificate_hash": "909ca1482ef022bbae45a2db6b6d05d807a4c4aa" + } + }, + { + "client_id": "406099696497-a12gakvts4epfk5pkio7dphc1anjiggc.apps.googleusercontent.com", + "client_type": 3 + } + ], + "api_key": [ + { + "current_key": "AIzaSyCdRjCVZlhrq72RuEklEyyxYlBRCYhI2Sw" + } + ], + "services": { + "appinvite_service": { + "other_platform_oauth_client": [ + { + "client_id": "406099696497-a12gakvts4epfk5pkio7dphc1anjiggc.apps.googleusercontent.com", + "client_type": 3 + }, + { + "client_id": "406099696497-0mofiof3ofcgmpmirb6q0fllvb372sme.apps.googleusercontent.com", + "client_type": 2, + "ios_info": { + "bundle_id": "io.flutter.plugins.firebase.example" + } + } + ] + } + } + }, + { + "client_info": { + "mobilesdk_app_id": "1:406099696497:android:21d5142deea38dda3574d0", + "android_client_info": { + "package_name": "io.flutter.plugins.firebase.auth.example" + } + }, + "oauth_client": [ + { + "client_id": "406099696497-emmujnd7g2ammh5uu9ni6v04p4ateqac.apps.googleusercontent.com", + "client_type": 1, + "android_info": { + "package_name": "io.flutter.plugins.firebase.auth.example", + "certificate_hash": "5ad0d6d5cbe577ca185b8df246656bebc3957128" + } + }, + { + "client_id": "406099696497-in8bfp0nali85oul1o98huoar6eo1vv1.apps.googleusercontent.com", + "client_type": 1, + "android_info": { + "package_name": "io.flutter.plugins.firebase.auth.example", + "certificate_hash": "909ca1482ef022bbae45a2db6b6d05d807a4c4aa" + } + }, + { + "client_id": "406099696497-a12gakvts4epfk5pkio7dphc1anjiggc.apps.googleusercontent.com", + "client_type": 3 + } + ], + "api_key": [ + { + "current_key": "AIzaSyCdRjCVZlhrq72RuEklEyyxYlBRCYhI2Sw" + } + ], + "services": { + "appinvite_service": { + "other_platform_oauth_client": [ + { + "client_id": "406099696497-a12gakvts4epfk5pkio7dphc1anjiggc.apps.googleusercontent.com", + "client_type": 3 + }, + { + "client_id": "406099696497-0mofiof3ofcgmpmirb6q0fllvb372sme.apps.googleusercontent.com", + "client_type": 2, + "ios_info": { + "bundle_id": "io.flutter.plugins.firebase.example" + } + } + ] + } + } + }, + { + "client_info": { + "mobilesdk_app_id": "1:406099696497:android:3ef965ff044efc0b3574d0", + "android_client_info": { + "package_name": "io.flutter.plugins.firebase.database.example" + } + }, + "oauth_client": [ + { + "client_id": "406099696497-a12gakvts4epfk5pkio7dphc1anjiggc.apps.googleusercontent.com", + "client_type": 3 + } + ], + "api_key": [ + { + "current_key": "AIzaSyCdRjCVZlhrq72RuEklEyyxYlBRCYhI2Sw" + } + ], + "services": { + "appinvite_service": { + "other_platform_oauth_client": [ + { + "client_id": "406099696497-a12gakvts4epfk5pkio7dphc1anjiggc.apps.googleusercontent.com", + "client_type": 3 + }, + { + "client_id": "406099696497-0mofiof3ofcgmpmirb6q0fllvb372sme.apps.googleusercontent.com", + "client_type": 2, + "ios_info": { + "bundle_id": "io.flutter.plugins.firebase.example" + } + } + ] + } + } + }, + { + "client_info": { + "mobilesdk_app_id": "1:406099696497:android:40da41183cb3d3ff3574d0", + "android_client_info": { + "package_name": "io.flutter.plugins.firebase.dynamiclinksexample" + } + }, + "oauth_client": [ + { + "client_id": "406099696497-a12gakvts4epfk5pkio7dphc1anjiggc.apps.googleusercontent.com", + "client_type": 3 + } + ], + "api_key": [ + { + "current_key": "AIzaSyCdRjCVZlhrq72RuEklEyyxYlBRCYhI2Sw" + } + ], + "services": { + "appinvite_service": { + "other_platform_oauth_client": [ + { + "client_id": "406099696497-a12gakvts4epfk5pkio7dphc1anjiggc.apps.googleusercontent.com", + "client_type": 3 + }, + { + "client_id": "406099696497-0mofiof3ofcgmpmirb6q0fllvb372sme.apps.googleusercontent.com", + "client_type": 2, + "ios_info": { + "bundle_id": "io.flutter.plugins.firebase.example" + } + } + ] + } + } + }, + { + "client_info": { + "mobilesdk_app_id": "1:406099696497:android:175ea7a64b2faf5e3574d0", + "android_client_info": { + "package_name": "io.flutter.plugins.firebase.firestore.example" + } + }, + "oauth_client": [ + { + "client_id": "406099696497-a12gakvts4epfk5pkio7dphc1anjiggc.apps.googleusercontent.com", + "client_type": 3 + } + ], + "api_key": [ + { + "current_key": "AIzaSyCdRjCVZlhrq72RuEklEyyxYlBRCYhI2Sw" + } + ], + "services": { + "appinvite_service": { + "other_platform_oauth_client": [ + { + "client_id": "406099696497-a12gakvts4epfk5pkio7dphc1anjiggc.apps.googleusercontent.com", + "client_type": 3 + }, + { + "client_id": "406099696497-0mofiof3ofcgmpmirb6q0fllvb372sme.apps.googleusercontent.com", + "client_type": 2, + "ios_info": { + "bundle_id": "io.flutter.plugins.firebase.example" + } + } + ] + } + } + }, + { + "client_info": { + "mobilesdk_app_id": "1:406099696497:android:7ca3394493cc601a3574d0", + "android_client_info": { + "package_name": "io.flutter.plugins.firebase.functions.example" + } + }, + "oauth_client": [ + { + "client_id": "406099696497-17qn06u8a0dc717u8ul7s49ampk13lul.apps.googleusercontent.com", + "client_type": 1, + "android_info": { + "package_name": "io.flutter.plugins.firebase.functions.example", + "certificate_hash": "a4256c0612686b336af6d138a5479b7dc1ee1af6" + } + }, + { + "client_id": "406099696497-tvtvuiqogct1gs1s6lh114jeps7hpjm5.apps.googleusercontent.com", + "client_type": 1, + "android_info": { + "package_name": "io.flutter.plugins.firebase.functions.example", + "certificate_hash": "909ca1482ef022bbae45a2db6b6d05d807a4c4aa" + } + }, + { + "client_id": "406099696497-a12gakvts4epfk5pkio7dphc1anjiggc.apps.googleusercontent.com", + "client_type": 3 + } + ], + "api_key": [ + { + "current_key": "AIzaSyCdRjCVZlhrq72RuEklEyyxYlBRCYhI2Sw" + } + ], + "services": { + "appinvite_service": { + "other_platform_oauth_client": [ + { + "client_id": "406099696497-a12gakvts4epfk5pkio7dphc1anjiggc.apps.googleusercontent.com", + "client_type": 3 + }, + { + "client_id": "406099696497-0mofiof3ofcgmpmirb6q0fllvb372sme.apps.googleusercontent.com", + "client_type": 2, + "ios_info": { + "bundle_id": "io.flutter.plugins.firebase.example" + } + } + ] + } + } + }, + { + "client_info": { + "mobilesdk_app_id": "1:406099696497:android:6d1c1fbf4688f39c3574d0", + "android_client_info": { + "package_name": "io.flutter.plugins.firebase.installations.example" + } + }, + "oauth_client": [ + { + "client_id": "406099696497-a12gakvts4epfk5pkio7dphc1anjiggc.apps.googleusercontent.com", + "client_type": 3 + } + ], + "api_key": [ + { + "current_key": "AIzaSyCdRjCVZlhrq72RuEklEyyxYlBRCYhI2Sw" + } + ], + "services": { + "appinvite_service": { + "other_platform_oauth_client": [ + { + "client_id": "406099696497-a12gakvts4epfk5pkio7dphc1anjiggc.apps.googleusercontent.com", + "client_type": 3 + }, + { + "client_id": "406099696497-0mofiof3ofcgmpmirb6q0fllvb372sme.apps.googleusercontent.com", + "client_type": 2, + "ios_info": { + "bundle_id": "io.flutter.plugins.firebase.example" + } + } + ] + } + } + }, + { + "client_info": { + "mobilesdk_app_id": "1:406099696497:android:74ebb073d7727cd43574d0", + "android_client_info": { + "package_name": "io.flutter.plugins.firebase.messaging.example" + } + }, + "oauth_client": [ + { + "client_id": "406099696497-a12gakvts4epfk5pkio7dphc1anjiggc.apps.googleusercontent.com", + "client_type": 3 + } + ], + "api_key": [ + { + "current_key": "AIzaSyCdRjCVZlhrq72RuEklEyyxYlBRCYhI2Sw" + } + ], + "services": { + "appinvite_service": { + "other_platform_oauth_client": [ + { + "client_id": "406099696497-a12gakvts4epfk5pkio7dphc1anjiggc.apps.googleusercontent.com", + "client_type": 3 + }, + { + "client_id": "406099696497-0mofiof3ofcgmpmirb6q0fllvb372sme.apps.googleusercontent.com", + "client_type": 2, + "ios_info": { + "bundle_id": "io.flutter.plugins.firebase.example" + } + } + ] + } + } + }, + { + "client_info": { + "mobilesdk_app_id": "1:406099696497:android:f54b85cfa36a39f73574d0", + "android_client_info": { + "package_name": "io.flutter.plugins.firebase.remoteconfig.example" + } + }, + "oauth_client": [ + { + "client_id": "406099696497-a12gakvts4epfk5pkio7dphc1anjiggc.apps.googleusercontent.com", + "client_type": 3 + } + ], + "api_key": [ + { + "current_key": "AIzaSyCdRjCVZlhrq72RuEklEyyxYlBRCYhI2Sw" + } + ], + "services": { + "appinvite_service": { + "other_platform_oauth_client": [ + { + "client_id": "406099696497-a12gakvts4epfk5pkio7dphc1anjiggc.apps.googleusercontent.com", + "client_type": 3 + }, + { + "client_id": "406099696497-0mofiof3ofcgmpmirb6q0fllvb372sme.apps.googleusercontent.com", + "client_type": 2, + "ios_info": { + "bundle_id": "io.flutter.plugins.firebase.example" + } + } + ] + } + } + }, + { + "client_info": { + "mobilesdk_app_id": "1:406099696497:android:0d4ed619c031c0ac3574d0", + "android_client_info": { + "package_name": "io.flutter.plugins.firebase.tests" + } + }, + "oauth_client": [ + { + "client_id": "406099696497-ib9hj9281l3343cm3nfvvdotaojrthdc.apps.googleusercontent.com", + "client_type": 1, + "android_info": { + "package_name": "io.flutter.plugins.firebase.tests", + "certificate_hash": "5ad0d6d5cbe577ca185b8df246656bebc3957128" + } + }, + { + "client_id": "406099696497-lc54d5l8sp90k39r0bb39ovsgo1s9bek.apps.googleusercontent.com", + "client_type": 1, + "android_info": { + "package_name": "io.flutter.plugins.firebase.tests", + "certificate_hash": "909ca1482ef022bbae45a2db6b6d05d807a4c4aa" + } + }, + { + "client_id": "406099696497-a12gakvts4epfk5pkio7dphc1anjiggc.apps.googleusercontent.com", + "client_type": 3 + } + ], + "api_key": [ + { + "current_key": "AIzaSyCdRjCVZlhrq72RuEklEyyxYlBRCYhI2Sw" + } + ], + "services": { + "appinvite_service": { + "other_platform_oauth_client": [ + { + "client_id": "406099696497-a12gakvts4epfk5pkio7dphc1anjiggc.apps.googleusercontent.com", + "client_type": 3 + }, + { + "client_id": "406099696497-0mofiof3ofcgmpmirb6q0fllvb372sme.apps.googleusercontent.com", + "client_type": 2, + "ios_info": { + "bundle_id": "io.flutter.plugins.firebase.example" + } + } + ] + } + } + }, + { + "client_info": { + "mobilesdk_app_id": "1:406099696497:android:899c6485cfce26c13574d0", + "android_client_info": { + "package_name": "io.flutter.plugins.firebase_ui_example" + } + }, + "oauth_client": [ + { + "client_id": "406099696497-ltgvphphcckosvqhituel5km2k3aecg8.apps.googleusercontent.com", + "client_type": 1, + "android_info": { + "package_name": "io.flutter.plugins.firebase_ui_example", + "certificate_hash": "a4256c0612686b336af6d138a5479b7dc1ee1af6" + } + }, + { + "client_id": "406099696497-a12gakvts4epfk5pkio7dphc1anjiggc.apps.googleusercontent.com", + "client_type": 3 + } + ], + "api_key": [ + { + "current_key": "AIzaSyCdRjCVZlhrq72RuEklEyyxYlBRCYhI2Sw" + } + ], + "services": { + "appinvite_service": { + "other_platform_oauth_client": [ + { + "client_id": "406099696497-a12gakvts4epfk5pkio7dphc1anjiggc.apps.googleusercontent.com", + "client_type": 3 + }, + { + "client_id": "406099696497-0mofiof3ofcgmpmirb6q0fllvb372sme.apps.googleusercontent.com", + "client_type": 2, + "ios_info": { + "bundle_id": "io.flutter.plugins.firebase.example" + } + } + ] + } + } + }, + { + "client_info": { + "mobilesdk_app_id": "1:406099696497:android:bc0b12b0605df8633574d0", + "android_client_info": { + "package_name": "io.flutter.plugins.firebasecoreexample" + } + }, + "oauth_client": [ + { + "client_id": "406099696497-a12gakvts4epfk5pkio7dphc1anjiggc.apps.googleusercontent.com", + "client_type": 3 + } + ], + "api_key": [ + { + "current_key": "AIzaSyCdRjCVZlhrq72RuEklEyyxYlBRCYhI2Sw" + } + ], + "services": { + "appinvite_service": { + "other_platform_oauth_client": [ + { + "client_id": "406099696497-a12gakvts4epfk5pkio7dphc1anjiggc.apps.googleusercontent.com", + "client_type": 3 + }, + { + "client_id": "406099696497-0mofiof3ofcgmpmirb6q0fllvb372sme.apps.googleusercontent.com", + "client_type": 2, + "ios_info": { + "bundle_id": "io.flutter.plugins.firebase.example" + } + } + ] + } + } + }, + { + "client_info": { + "mobilesdk_app_id": "1:406099696497:android:0f3f7bfe78b8b7103574d0", + "android_client_info": { + "package_name": "io.flutter.plugins.firebasecrashlyticsexample" + } + }, + "oauth_client": [ + { + "client_id": "406099696497-a12gakvts4epfk5pkio7dphc1anjiggc.apps.googleusercontent.com", + "client_type": 3 + } + ], + "api_key": [ + { + "current_key": "AIzaSyCdRjCVZlhrq72RuEklEyyxYlBRCYhI2Sw" + } + ], + "services": { + "appinvite_service": { + "other_platform_oauth_client": [ + { + "client_id": "406099696497-a12gakvts4epfk5pkio7dphc1anjiggc.apps.googleusercontent.com", + "client_type": 3 + }, + { + "client_id": "406099696497-0mofiof3ofcgmpmirb6q0fllvb372sme.apps.googleusercontent.com", + "client_type": 2, + "ios_info": { + "bundle_id": "io.flutter.plugins.firebase.example" + } + } + ] + } + } + }, + { + "client_info": { + "mobilesdk_app_id": "1:406099696497:android:2751af6868a69f073574d0", + "android_client_info": { + "package_name": "io.flutter.plugins.firebasestorageexample" + } + }, + "oauth_client": [ + { + "client_id": "406099696497-a12gakvts4epfk5pkio7dphc1anjiggc.apps.googleusercontent.com", + "client_type": 3 + } + ], + "api_key": [ + { + "current_key": "AIzaSyCdRjCVZlhrq72RuEklEyyxYlBRCYhI2Sw" + } + ], + "services": { + "appinvite_service": { + "other_platform_oauth_client": [ + { + "client_id": "406099696497-a12gakvts4epfk5pkio7dphc1anjiggc.apps.googleusercontent.com", + "client_type": 3 + }, + { + "client_id": "406099696497-0mofiof3ofcgmpmirb6q0fllvb372sme.apps.googleusercontent.com", + "client_type": 2, + "ios_info": { + "bundle_id": "io.flutter.plugins.firebase.example" + } + } + ] + } + } + } + ], + "configuration_version": "1" +} \ No newline at end of file diff --git a/mih_ui/android/build/ios/SourcePackages/firebase_app_check-0.4.5/example/android/app/src/debug/AndroidManifest.xml b/mih_ui/android/build/ios/SourcePackages/firebase_app_check-0.4.5/example/android/app/src/debug/AndroidManifest.xml new file mode 100644 index 00000000..399f6981 --- /dev/null +++ b/mih_ui/android/build/ios/SourcePackages/firebase_app_check-0.4.5/example/android/app/src/debug/AndroidManifest.xml @@ -0,0 +1,7 @@ + + + + diff --git a/mih_ui/android/build/ios/SourcePackages/firebase_app_check-0.4.5/example/android/app/src/main/AndroidManifest.xml b/mih_ui/android/build/ios/SourcePackages/firebase_app_check-0.4.5/example/android/app/src/main/AndroidManifest.xml new file mode 100644 index 00000000..74a78b93 --- /dev/null +++ b/mih_ui/android/build/ios/SourcePackages/firebase_app_check-0.4.5/example/android/app/src/main/AndroidManifest.xml @@ -0,0 +1,45 @@ + + + + + + + + + + + + + + + + + + + + + diff --git a/mih_ui/android/build/ios/SourcePackages/firebase_app_check-0.4.5/example/android/app/src/main/kotlin/io/flutter/plugins/firebase/appcheck/example/MainActivity.kt b/mih_ui/android/build/ios/SourcePackages/firebase_app_check-0.4.5/example/android/app/src/main/kotlin/io/flutter/plugins/firebase/appcheck/example/MainActivity.kt new file mode 100644 index 00000000..fd3526f1 --- /dev/null +++ b/mih_ui/android/build/ios/SourcePackages/firebase_app_check-0.4.5/example/android/app/src/main/kotlin/io/flutter/plugins/firebase/appcheck/example/MainActivity.kt @@ -0,0 +1,5 @@ +package io.flutter.plugins.firebase.appcheck.example + +import io.flutter.embedding.android.FlutterActivity + +class MainActivity : FlutterActivity() diff --git a/mih_ui/android/build/ios/SourcePackages/firebase_app_check-0.4.5/example/android/app/src/main/res/drawable-v21/launch_background.xml b/mih_ui/android/build/ios/SourcePackages/firebase_app_check-0.4.5/example/android/app/src/main/res/drawable-v21/launch_background.xml new file mode 100644 index 00000000..f74085f3 --- /dev/null +++ b/mih_ui/android/build/ios/SourcePackages/firebase_app_check-0.4.5/example/android/app/src/main/res/drawable-v21/launch_background.xml @@ -0,0 +1,12 @@ + + + + + + + + diff --git a/mih_ui/android/build/ios/SourcePackages/firebase_app_check-0.4.5/example/android/app/src/main/res/drawable/launch_background.xml b/mih_ui/android/build/ios/SourcePackages/firebase_app_check-0.4.5/example/android/app/src/main/res/drawable/launch_background.xml new file mode 100644 index 00000000..304732f8 --- /dev/null +++ b/mih_ui/android/build/ios/SourcePackages/firebase_app_check-0.4.5/example/android/app/src/main/res/drawable/launch_background.xml @@ -0,0 +1,12 @@ + + + + + + + + diff --git a/mih_ui/android/build/ios/SourcePackages/firebase_app_check-0.4.5/example/android/app/src/main/res/mipmap-hdpi/ic_launcher.png b/mih_ui/android/build/ios/SourcePackages/firebase_app_check-0.4.5/example/android/app/src/main/res/mipmap-hdpi/ic_launcher.png new file mode 100644 index 0000000000000000000000000000000000000000..db77bb4b7b0906d62b1847e87f15cdcacf6a4f29 GIT binary patch literal 544 zcmeAS@N?(olHy`uVBq!ia0vp^9w5xY3?!3`olAj~WQl7;NpOBzNqJ&XDuZK6ep0G} zXKrG8YEWuoN@d~6R2!h8bpbvhu0Wd6uZuB!w&u2PAxD2eNXD>P5D~Wn-+_Wa#27Xc zC?Zj|6r#X(-D3u$NCt}(Ms06KgJ4FxJVv{GM)!I~&n8Bnc94O7-Hd)cjDZswgC;Qs zO=b+9!WcT8F?0rF7!Uys2bs@gozCP?z~o%U|N3vA*22NaGQG zlg@K`O_XuxvZ&Ks^m&R!`&1=spLvfx7oGDKDwpwW`#iqdw@AL`7MR}m`rwr|mZgU`8P7SBkL78fFf!WnuYWm$5Z0 zNXhDbCv&49sM544K|?c)WrFfiZvCi9h0O)B3Pgg&ebxsLQ05GG~ AQ2+n{ literal 0 HcmV?d00001 diff --git a/mih_ui/android/build/ios/SourcePackages/firebase_app_check-0.4.5/example/android/app/src/main/res/mipmap-mdpi/ic_launcher.png b/mih_ui/android/build/ios/SourcePackages/firebase_app_check-0.4.5/example/android/app/src/main/res/mipmap-mdpi/ic_launcher.png new file mode 100644 index 0000000000000000000000000000000000000000..17987b79bb8a35cc66c3c1fd44f5a5526c1b78be GIT binary patch literal 442 zcmeAS@N?(olHy`uVBq!ia0vp^1|ZDA3?vioaBc-sk|nMYCBgY=CFO}lsSJ)O`AMk? zp1FzXsX?iUDV2pMQ*D5Xx&nMcT!A!W`0S9QKQy;}1Cl^CgaH=;G9cpY;r$Q>i*pfB zP2drbID<_#qf;rPZx^FqH)F_D#*k@@q03KywUtLX8Ua?`H+NMzkczFPK3lFz@i_kW%1NOn0|D2I9n9wzH8m|-tHjsw|9>@K=iMBhxvkv6m8Y-l zytQ?X=U+MF$@3 zt`~i=@j|6y)RWMK--}M|=T`o&^Ni>IoWKHEbBXz7?A@mgWoL>!*SXo`SZH-*HSdS+ yn*9;$7;m`l>wYBC5bq;=U}IMqLzqbYCidGC!)_gkIk_C@Uy!y&wkt5C($~2D>~)O*cj@FGjOCM)M>_ixfudOh)?xMu#Fs z#}Y=@YDTwOM)x{K_j*Q;dPdJ?Mz0n|pLRx{4n|)f>SXlmV)XB04CrSJn#dS5nK2lM zrZ9#~WelCp7&e13Y$jvaEXHskn$2V!!DN-nWS__6T*l;H&Fopn?A6HZ-6WRLFP=R` zqG+CE#d4|IbyAI+rJJ`&x9*T`+a=p|0O(+s{UBcyZdkhj=yS1>AirP+0R;mf2uMgM zC}@~JfByORAh4SyRgi&!(cja>F(l*O+nd+@4m$|6K6KDn_&uvCpV23&>G9HJp{xgg zoq1^2_p9@|WEo z*X_Uko@K)qYYv~>43eQGMdbiGbo>E~Q& zrYBH{QP^@Sti!`2)uG{irBBq@y*$B zi#&(U-*=fp74j)RyIw49+0MRPMRU)+a2r*PJ$L5roHt2$UjExCTZSbq%V!HeS7J$N zdG@vOZB4v_lF7Plrx+hxo7(fCV&}fHq)$ literal 0 HcmV?d00001 diff --git a/mih_ui/android/build/ios/SourcePackages/firebase_app_check-0.4.5/example/android/app/src/main/res/mipmap-xxhdpi/ic_launcher.png b/mih_ui/android/build/ios/SourcePackages/firebase_app_check-0.4.5/example/android/app/src/main/res/mipmap-xxhdpi/ic_launcher.png new file mode 100644 index 0000000000000000000000000000000000000000..d5f1c8d34e7a88e3f88bea192c3a370d44689c3c GIT binary patch literal 1031 zcmeAS@N?(olHy`uVBq!ia0vp^6F``Q8Ax83A=Cw=BuiW)N`mv#O3D+9QW+dm@{>{( zJaZG%Q-e|yQz{EjrrIztFa`(sgt!6~Yi|1%a`XoT0ojZ}lNrNjb9xjc(B0U1_% zz5^97Xt*%oq$rQy4?0GKNfJ44uvxI)gC`h-NZ|&0-7(qS@?b!5r36oQ}zyZrNO3 zMO=Or+<~>+A&uN&E!^Sl+>xE!QC-|oJv`ApDhqC^EWD|@=#J`=d#Xzxs4ah}w&Jnc z$|q_opQ^2TrnVZ0o~wh<3t%W&flvYGe#$xqda2bR_R zvPYgMcHgjZ5nSA^lJr%;<&0do;O^tDDh~=pIxA#coaCY>&N%M2^tq^U%3DB@ynvKo}b?yu-bFc-u0JHzced$sg7S3zqI(2 z#Km{dPr7I=pQ5>FuK#)QwK?Y`E`B?nP+}U)I#c1+FM*1kNvWG|a(TpksZQ3B@sD~b zpQ2)*V*TdwjFOtHvV|;OsiDqHi=6%)o4b!)x$)%9pGTsE z-JL={-Ffv+T87W(Xpooq<`r*VzWQcgBN$$`u}f>-ZQI1BB8ykN*=e4rIsJx9>z}*o zo~|9I;xof literal 0 HcmV?d00001 diff --git a/mih_ui/android/build/ios/SourcePackages/firebase_app_check-0.4.5/example/android/app/src/main/res/mipmap-xxxhdpi/ic_launcher.png b/mih_ui/android/build/ios/SourcePackages/firebase_app_check-0.4.5/example/android/app/src/main/res/mipmap-xxxhdpi/ic_launcher.png new file mode 100644 index 0000000000000000000000000000000000000000..4d6372eebdb28e45604e46eeda8dd24651419bc0 GIT binary patch literal 1443 zcmb`G{WsKk6vsdJTdFg%tJav9_E4vzrOaqkWF|A724Nly!y+?N9`YV6wZ}5(X(D_N(?!*n3`|_r0Hc?=PQw&*vnU?QTFY zB_MsH|!j$PP;I}?dppoE_gA(4uc!jV&0!l7_;&p2^pxNo>PEcNJv za5_RT$o2Mf!<+r?&EbHH6nMoTsDOa;mN(wv8RNsHpG)`^ymG-S5By8=l9iVXzN_eG%Xg2@Xeq76tTZ*dGh~Lo9vl;Zfs+W#BydUw zCkZ$o1LqWQO$FC9aKlLl*7x9^0q%0}$OMlp@Kk_jHXOjofdePND+j!A{q!8~Jn+s3 z?~~w@4?egS02}8NuulUA=L~QQfm;MzCGd)XhiftT;+zFO&JVyp2mBww?;QByS_1w! zrQlx%{^cMj0|Bo1FjwY@Q8?Hx0cIPF*@-ZRFpPc#bBw{5@tD(5%sClzIfl8WU~V#u zm5Q;_F!wa$BSpqhN>W@2De?TKWR*!ujY;Yylk_X5#~V!L*Gw~;$%4Q8~Mad z@`-kG?yb$a9cHIApZDVZ^U6Xkp<*4rU82O7%}0jjHlK{id@?-wpN*fCHXyXh(bLt* zPc}H-x0e4E&nQ>y%B-(EL=9}RyC%MyX=upHuFhAk&MLbsF0LP-q`XnH78@fT+pKPW zu72MW`|?8ht^tz$iC}ZwLp4tB;Q49K!QCF3@!iB1qOI=?w z7In!}F~ij(18UYUjnbmC!qKhPo%24?8U1x{7o(+?^Zu0Hx81|FuS?bJ0jgBhEMzf< zCgUq7r2OCB(`XkKcN-TL>u5y#dD6D!)5W?`O5)V^>jb)P)GBdy%t$uUMpf$SNV31$ zb||OojAbvMP?T@$h_ZiFLFVHDmbyMhJF|-_)HX3%m=CDI+ID$0^C>kzxprBW)hw(v zr!Gmda);ICoQyhV_oP5+C%?jcG8v+D@9f?Dk*!BxY}dazmrT@64UrP3hlslANK)bq z$67n83eh}OeW&SV@HG95P|bjfqJ7gw$e+`Hxo!4cx`jdK1bJ>YDSpGKLPZ^1cv$ek zIB?0S<#tX?SJCLWdMd{-ME?$hc7A$zBOdIJ)4!KcAwb=VMov)nK;9z>x~rfT1>dS+ zZ6#`2v@`jgbqq)P22H)Tx2CpmM^o1$B+xT6`(v%5xJ(?j#>Q$+rx_R|7TzDZe{J6q zG1*EcU%tE?!kO%^M;3aM6JN*LAKUVb^xz8-Pxo#jR5(-KBeLJvA@-gxNHx0M-ZJLl z;#JwQoh~9V?`UVo#}{6ka@II>++D@%KqGpMdlQ}?9E*wFcf5(#XQnP$Dk5~%iX^>f z%$y;?M0BLp{O3a(-4A?ewryHrrD%cx#Q^%KY1H zNre$ve+vceSLZcNY4U(RBX&)oZn*Py()h)XkE?PL$!bNb{N5FVI2Y%LKEm%yvpyTP z(1P?z~7YxD~Rf<(a@_y` literal 0 HcmV?d00001 diff --git a/mih_ui/android/build/ios/SourcePackages/firebase_app_check-0.4.5/example/android/app/src/main/res/values-night/styles.xml b/mih_ui/android/build/ios/SourcePackages/firebase_app_check-0.4.5/example/android/app/src/main/res/values-night/styles.xml new file mode 100644 index 00000000..06952be7 --- /dev/null +++ b/mih_ui/android/build/ios/SourcePackages/firebase_app_check-0.4.5/example/android/app/src/main/res/values-night/styles.xml @@ -0,0 +1,18 @@ + + + + + + + diff --git a/mih_ui/android/build/ios/SourcePackages/firebase_app_check-0.4.5/example/android/app/src/main/res/values/styles.xml b/mih_ui/android/build/ios/SourcePackages/firebase_app_check-0.4.5/example/android/app/src/main/res/values/styles.xml new file mode 100644 index 00000000..cb1ef880 --- /dev/null +++ b/mih_ui/android/build/ios/SourcePackages/firebase_app_check-0.4.5/example/android/app/src/main/res/values/styles.xml @@ -0,0 +1,18 @@ + + + + + + + diff --git a/mih_ui/android/build/ios/SourcePackages/firebase_app_check-0.4.5/example/android/app/src/profile/AndroidManifest.xml b/mih_ui/android/build/ios/SourcePackages/firebase_app_check-0.4.5/example/android/app/src/profile/AndroidManifest.xml new file mode 100644 index 00000000..399f6981 --- /dev/null +++ b/mih_ui/android/build/ios/SourcePackages/firebase_app_check-0.4.5/example/android/app/src/profile/AndroidManifest.xml @@ -0,0 +1,7 @@ + + + + diff --git a/mih_ui/android/build/ios/SourcePackages/firebase_app_check-0.4.5/example/android/build.gradle b/mih_ui/android/build/ios/SourcePackages/firebase_app_check-0.4.5/example/android/build.gradle new file mode 100644 index 00000000..d2ffbffa --- /dev/null +++ b/mih_ui/android/build/ios/SourcePackages/firebase_app_check-0.4.5/example/android/build.gradle @@ -0,0 +1,18 @@ +allprojects { + repositories { + google() + mavenCentral() + } +} + +rootProject.buildDir = "../build" +subprojects { + project.buildDir = "${rootProject.buildDir}/${project.name}" +} +subprojects { + project.evaluationDependsOn(":app") +} + +tasks.register("clean", Delete) { + delete rootProject.buildDir +} diff --git a/mih_ui/android/build/ios/SourcePackages/firebase_app_check-0.4.5/example/android/gradle.properties b/mih_ui/android/build/ios/SourcePackages/firebase_app_check-0.4.5/example/android/gradle.properties new file mode 100644 index 00000000..3c0f502f --- /dev/null +++ b/mih_ui/android/build/ios/SourcePackages/firebase_app_check-0.4.5/example/android/gradle.properties @@ -0,0 +1,4 @@ +org.gradle.jvmargs=-Xmx4G -XX:+HeapDumpOnOutOfMemoryError +android.useAndroidX=true +android.enableJetifier=true +androidGradlePluginVersion=8.3.0 \ No newline at end of file diff --git a/mih_ui/android/build/ios/SourcePackages/firebase_app_check-0.4.5/example/android/gradle/wrapper/gradle-wrapper.properties b/mih_ui/android/build/ios/SourcePackages/firebase_app_check-0.4.5/example/android/gradle/wrapper/gradle-wrapper.properties new file mode 100644 index 00000000..e411586a --- /dev/null +++ b/mih_ui/android/build/ios/SourcePackages/firebase_app_check-0.4.5/example/android/gradle/wrapper/gradle-wrapper.properties @@ -0,0 +1,5 @@ +distributionBase=GRADLE_USER_HOME +distributionPath=wrapper/dists +distributionUrl=https\://services.gradle.org/distributions/gradle-8.4-bin.zip +zipStoreBase=GRADLE_USER_HOME +zipStorePath=wrapper/dists diff --git a/mih_ui/android/build/ios/SourcePackages/firebase_app_check-0.4.5/example/android/settings.gradle b/mih_ui/android/build/ios/SourcePackages/firebase_app_check-0.4.5/example/android/settings.gradle new file mode 100644 index 00000000..4fb566e9 --- /dev/null +++ b/mih_ui/android/build/ios/SourcePackages/firebase_app_check-0.4.5/example/android/settings.gradle @@ -0,0 +1,28 @@ +pluginManagement { + def flutterSdkPath = { + def properties = new Properties() + file("local.properties").withInputStream { properties.load(it) } + def flutterSdkPath = properties.getProperty("flutter.sdk") + assert flutterSdkPath != null, "flutter.sdk not set in local.properties" + return flutterSdkPath + }() + + includeBuild("$flutterSdkPath/packages/flutter_tools/gradle") + + repositories { + google() + mavenCentral() + gradlePluginPortal() + } +} + +plugins { + id "dev.flutter.flutter-plugin-loader" version "1.0.0" + id "com.android.application" version "${androidGradlePluginVersion}" apply false + // START: FlutterFire Configuration + id "com.google.gms.google-services" version "4.3.15" apply false + // END: FlutterFire Configuration + id "org.jetbrains.kotlin.android" version "2.1.0" apply false +} + +include ":app" diff --git a/mih_ui/android/build/ios/SourcePackages/firebase_app_check-0.4.5/example/ios/Flutter/AppFrameworkInfo.plist b/mih_ui/android/build/ios/SourcePackages/firebase_app_check-0.4.5/example/ios/Flutter/AppFrameworkInfo.plist new file mode 100644 index 00000000..391a902b --- /dev/null +++ b/mih_ui/android/build/ios/SourcePackages/firebase_app_check-0.4.5/example/ios/Flutter/AppFrameworkInfo.plist @@ -0,0 +1,24 @@ + + + + + CFBundleDevelopmentRegion + en + CFBundleExecutable + App + CFBundleIdentifier + io.flutter.flutter.app + CFBundleInfoDictionaryVersion + 6.0 + CFBundleName + App + CFBundlePackageType + FMWK + CFBundleShortVersionString + 1.0 + CFBundleSignature + ???? + CFBundleVersion + 1.0 + + diff --git a/mih_ui/android/build/ios/SourcePackages/firebase_app_check-0.4.5/example/ios/Flutter/Debug.xcconfig b/mih_ui/android/build/ios/SourcePackages/firebase_app_check-0.4.5/example/ios/Flutter/Debug.xcconfig new file mode 100644 index 00000000..ec97fc6f --- /dev/null +++ b/mih_ui/android/build/ios/SourcePackages/firebase_app_check-0.4.5/example/ios/Flutter/Debug.xcconfig @@ -0,0 +1,2 @@ +#include? "Pods/Target Support Files/Pods-Runner/Pods-Runner.debug.xcconfig" +#include "Generated.xcconfig" diff --git a/mih_ui/android/build/ios/SourcePackages/firebase_app_check-0.4.5/example/ios/Flutter/Release.xcconfig b/mih_ui/android/build/ios/SourcePackages/firebase_app_check-0.4.5/example/ios/Flutter/Release.xcconfig new file mode 100644 index 00000000..c4855bfe --- /dev/null +++ b/mih_ui/android/build/ios/SourcePackages/firebase_app_check-0.4.5/example/ios/Flutter/Release.xcconfig @@ -0,0 +1,2 @@ +#include? "Pods/Target Support Files/Pods-Runner/Pods-Runner.release.xcconfig" +#include "Generated.xcconfig" diff --git a/mih_ui/android/build/ios/SourcePackages/firebase_app_check-0.4.5/example/ios/Podfile b/mih_ui/android/build/ios/SourcePackages/firebase_app_check-0.4.5/example/ios/Podfile new file mode 100644 index 00000000..620e46eb --- /dev/null +++ b/mih_ui/android/build/ios/SourcePackages/firebase_app_check-0.4.5/example/ios/Podfile @@ -0,0 +1,43 @@ +# Uncomment this line to define a global platform for your project +# platform :ios, '13.0' + +# CocoaPods analytics sends network stats synchronously affecting flutter build latency. +ENV['COCOAPODS_DISABLE_STATS'] = 'true' + +project 'Runner', { + 'Debug' => :debug, + 'Profile' => :release, + 'Release' => :release, +} + +def flutter_root + generated_xcode_build_settings_path = File.expand_path(File.join('..', 'Flutter', 'Generated.xcconfig'), __FILE__) + unless File.exist?(generated_xcode_build_settings_path) + raise "#{generated_xcode_build_settings_path} must exist. If you're running pod install manually, make sure flutter pub get is executed first" + end + + File.foreach(generated_xcode_build_settings_path) do |line| + matches = line.match(/FLUTTER_ROOT\=(.*)/) + return matches[1].strip if matches + end + raise "FLUTTER_ROOT not found in #{generated_xcode_build_settings_path}. Try deleting Generated.xcconfig, then run flutter pub get" +end + +require File.expand_path(File.join('packages', 'flutter_tools', 'bin', 'podhelper'), flutter_root) + +flutter_ios_podfile_setup + +target 'Runner' do + use_frameworks! + + flutter_install_all_ios_pods File.dirname(File.realpath(__FILE__)) + target 'RunnerTests' do + inherit! :search_paths + end +end + +post_install do |installer| + installer.pods_project.targets.each do |target| + flutter_additional_ios_build_settings(target) + end +end diff --git a/mih_ui/android/build/ios/SourcePackages/firebase_app_check-0.4.5/example/ios/Runner.xcodeproj/project.pbxproj b/mih_ui/android/build/ios/SourcePackages/firebase_app_check-0.4.5/example/ios/Runner.xcodeproj/project.pbxproj new file mode 100644 index 00000000..1ef35c77 --- /dev/null +++ b/mih_ui/android/build/ios/SourcePackages/firebase_app_check-0.4.5/example/ios/Runner.xcodeproj/project.pbxproj @@ -0,0 +1,553 @@ +// !$*UTF8*$! +{ + archiveVersion = 1; + classes = { + }; + objectVersion = 54; + objects = { + +/* Begin PBXBuildFile section */ + 1498D2341E8E89220040F4C2 /* GeneratedPluginRegistrant.m in Sources */ = {isa = PBXBuildFile; fileRef = 1498D2331E8E89220040F4C2 /* GeneratedPluginRegistrant.m */; }; + 3B3967161E833CAA004F5970 /* AppFrameworkInfo.plist in Resources */ = {isa = PBXBuildFile; fileRef = 3B3967151E833CAA004F5970 /* AppFrameworkInfo.plist */; }; + 4627F94B299406540090DA25 /* GoogleService-Info.plist in Resources */ = {isa = PBXBuildFile; fileRef = BBE2A093D0D5DFBA7CE858E4 /* GoogleService-Info.plist */; }; + 78A318202AECB46A00862997 /* FlutterGeneratedPluginSwiftPackage in Frameworks */ = {isa = PBXBuildFile; productRef = 78A3181F2AECB46A00862997 /* FlutterGeneratedPluginSwiftPackage */; }; + 978B8F6F1D3862AE00F588F7 /* AppDelegate.m in Sources */ = {isa = PBXBuildFile; fileRef = 7AFFD8EE1D35381100E5BB4D /* AppDelegate.m */; }; + 97C146F31CF9000F007C117D /* main.m in Sources */ = {isa = PBXBuildFile; fileRef = 97C146F21CF9000F007C117D /* main.m */; }; + 97C146FC1CF9000F007C117D /* Main.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 97C146FA1CF9000F007C117D /* Main.storyboard */; }; + 97C146FE1CF9000F007C117D /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 97C146FD1CF9000F007C117D /* Assets.xcassets */; }; + 97C147011CF9000F007C117D /* LaunchScreen.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 97C146FF1CF9000F007C117D /* LaunchScreen.storyboard */; }; +/* End PBXBuildFile section */ + +/* Begin PBXCopyFilesBuildPhase section */ + 9705A1C41CF9048500538489 /* Embed Frameworks */ = { + isa = PBXCopyFilesBuildPhase; + buildActionMask = 2147483647; + dstPath = ""; + dstSubfolderSpec = 10; + files = ( + ); + name = "Embed Frameworks"; + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXCopyFilesBuildPhase section */ + +/* Begin PBXFileReference section */ + 1498D2321E8E86230040F4C2 /* GeneratedPluginRegistrant.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = GeneratedPluginRegistrant.h; sourceTree = ""; }; + 1498D2331E8E89220040F4C2 /* GeneratedPluginRegistrant.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = GeneratedPluginRegistrant.m; sourceTree = ""; }; + 3B3967151E833CAA004F5970 /* AppFrameworkInfo.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; name = AppFrameworkInfo.plist; path = Flutter/AppFrameworkInfo.plist; sourceTree = ""; }; + 4632D5BC275CD47A0059DC83 /* Runner.entitlements */ = {isa = PBXFileReference; lastKnownFileType = text.plist.entitlements; path = Runner.entitlements; sourceTree = ""; }; + 46A64A032996811C003FC4F3 /* RunnerRelease.entitlements */ = {isa = PBXFileReference; lastKnownFileType = text.plist.entitlements; path = RunnerRelease.entitlements; sourceTree = ""; }; + 78E0A7A72DC9AD7400C4905E /* FlutterGeneratedPluginSwiftPackage */ = {isa = PBXFileReference; lastKnownFileType = wrapper; name = FlutterGeneratedPluginSwiftPackage; path = Flutter/ephemeral/Packages/FlutterGeneratedPluginSwiftPackage; sourceTree = ""; }; + 7AFA3C8E1D35360C0083082E /* Release.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; name = Release.xcconfig; path = Flutter/Release.xcconfig; sourceTree = ""; }; + 7AFFD8ED1D35381100E5BB4D /* AppDelegate.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = AppDelegate.h; sourceTree = ""; }; + 7AFFD8EE1D35381100E5BB4D /* AppDelegate.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = AppDelegate.m; sourceTree = ""; }; + 9740EEB21CF90195004384FC /* Debug.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; name = Debug.xcconfig; path = Flutter/Debug.xcconfig; sourceTree = ""; }; + 9740EEB31CF90195004384FC /* Generated.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; name = Generated.xcconfig; path = Flutter/Generated.xcconfig; sourceTree = ""; }; + 97C146EE1CF9000F007C117D /* Runner.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = Runner.app; sourceTree = BUILT_PRODUCTS_DIR; }; + 97C146F21CF9000F007C117D /* main.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = main.m; sourceTree = ""; }; + 97C146FB1CF9000F007C117D /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/Main.storyboard; sourceTree = ""; }; + 97C146FD1CF9000F007C117D /* Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Assets.xcassets; sourceTree = ""; }; + 97C147001CF9000F007C117D /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/LaunchScreen.storyboard; sourceTree = ""; }; + 97C147021CF9000F007C117D /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; + BBE2A093D0D5DFBA7CE858E4 /* GoogleService-Info.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; name = "GoogleService-Info.plist"; path = "Runner/GoogleService-Info.plist"; sourceTree = ""; }; +/* End PBXFileReference section */ + +/* Begin PBXFrameworksBuildPhase section */ + 97C146EB1CF9000F007C117D /* Frameworks */ = { + isa = PBXFrameworksBuildPhase; + buildActionMask = 2147483647; + files = ( + 78A318202AECB46A00862997 /* FlutterGeneratedPluginSwiftPackage in Frameworks */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXFrameworksBuildPhase section */ + +/* Begin PBXGroup section */ + 9740EEB11CF90186004384FC /* Flutter */ = { + isa = PBXGroup; + children = ( + 78E0A7A72DC9AD7400C4905E /* FlutterGeneratedPluginSwiftPackage */, + 3B3967151E833CAA004F5970 /* AppFrameworkInfo.plist */, + 9740EEB21CF90195004384FC /* Debug.xcconfig */, + 7AFA3C8E1D35360C0083082E /* Release.xcconfig */, + 9740EEB31CF90195004384FC /* Generated.xcconfig */, + ); + name = Flutter; + sourceTree = ""; + }; + 97C146E51CF9000F007C117D = { + isa = PBXGroup; + children = ( + 9740EEB11CF90186004384FC /* Flutter */, + 97C146F01CF9000F007C117D /* Runner */, + 97C146EF1CF9000F007C117D /* Products */, + F919868105D7CB93D33CAD83 /* Pods */, + BBE2A093D0D5DFBA7CE858E4 /* GoogleService-Info.plist */, + ); + sourceTree = ""; + }; + 97C146EF1CF9000F007C117D /* Products */ = { + isa = PBXGroup; + children = ( + 97C146EE1CF9000F007C117D /* Runner.app */, + ); + name = Products; + sourceTree = ""; + }; + 97C146F01CF9000F007C117D /* Runner */ = { + isa = PBXGroup; + children = ( + 46A64A032996811C003FC4F3 /* RunnerRelease.entitlements */, + 4632D5BC275CD47A0059DC83 /* Runner.entitlements */, + 7AFFD8ED1D35381100E5BB4D /* AppDelegate.h */, + 7AFFD8EE1D35381100E5BB4D /* AppDelegate.m */, + 97C146FA1CF9000F007C117D /* Main.storyboard */, + 97C146FD1CF9000F007C117D /* Assets.xcassets */, + 97C146FF1CF9000F007C117D /* LaunchScreen.storyboard */, + 97C147021CF9000F007C117D /* Info.plist */, + 97C146F11CF9000F007C117D /* Supporting Files */, + 1498D2321E8E86230040F4C2 /* GeneratedPluginRegistrant.h */, + 1498D2331E8E89220040F4C2 /* GeneratedPluginRegistrant.m */, + ); + path = Runner; + sourceTree = ""; + }; + 97C146F11CF9000F007C117D /* Supporting Files */ = { + isa = PBXGroup; + children = ( + 97C146F21CF9000F007C117D /* main.m */, + ); + name = "Supporting Files"; + sourceTree = ""; + }; + F919868105D7CB93D33CAD83 /* Pods */ = { + isa = PBXGroup; + children = ( + ); + path = Pods; + sourceTree = ""; + }; +/* End PBXGroup section */ + +/* Begin PBXNativeTarget section */ + 97C146ED1CF9000F007C117D /* Runner */ = { + isa = PBXNativeTarget; + buildConfigurationList = 97C147051CF9000F007C117D /* Build configuration list for PBXNativeTarget "Runner" */; + buildPhases = ( + 9740EEB61CF901F6004384FC /* Run Script */, + 97C146EA1CF9000F007C117D /* Sources */, + 97C146EB1CF9000F007C117D /* Frameworks */, + 97C146EC1CF9000F007C117D /* Resources */, + 9705A1C41CF9048500538489 /* Embed Frameworks */, + 3B06AD1E1E4923F5004D2608 /* Thin Binary */, + 46A64A04299681F5003FC4F3 /* ShellScript */, + ); + buildRules = ( + ); + dependencies = ( + ); + name = Runner; + packageProductDependencies = ( + 78A3181F2AECB46A00862997 /* FlutterGeneratedPluginSwiftPackage */, + ); + productName = Runner; + productReference = 97C146EE1CF9000F007C117D /* Runner.app */; + productType = "com.apple.product-type.application"; + }; +/* End PBXNativeTarget section */ + +/* Begin PBXProject section */ + 97C146E61CF9000F007C117D /* Project object */ = { + isa = PBXProject; + attributes = { + LastUpgradeCheck = 1510; + ORGANIZATIONNAME = ""; + TargetAttributes = { + 97C146ED1CF9000F007C117D = { + CreatedOnToolsVersion = 7.3.1; + }; + }; + }; + buildConfigurationList = 97C146E91CF9000F007C117D /* Build configuration list for PBXProject "Runner" */; + compatibilityVersion = "Xcode 9.3"; + developmentRegion = en; + hasScannedForEncodings = 0; + knownRegions = ( + en, + Base, + ); + mainGroup = 97C146E51CF9000F007C117D; + packageReferences = ( + 781AD8BC2B33823900A9FFBB /* XCLocalSwiftPackageReference "FlutterGeneratedPluginSwiftPackage" */, + ); + productRefGroup = 97C146EF1CF9000F007C117D /* Products */; + projectDirPath = ""; + projectRoot = ""; + targets = ( + 97C146ED1CF9000F007C117D /* Runner */, + ); + }; +/* End PBXProject section */ + +/* Begin PBXResourcesBuildPhase section */ + 97C146EC1CF9000F007C117D /* Resources */ = { + isa = PBXResourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + 4627F94B299406540090DA25 /* GoogleService-Info.plist in Resources */, + 97C147011CF9000F007C117D /* LaunchScreen.storyboard in Resources */, + 3B3967161E833CAA004F5970 /* AppFrameworkInfo.plist in Resources */, + 97C146FE1CF9000F007C117D /* Assets.xcassets in Resources */, + 97C146FC1CF9000F007C117D /* Main.storyboard in Resources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXResourcesBuildPhase section */ + +/* Begin PBXShellScriptBuildPhase section */ + 3B06AD1E1E4923F5004D2608 /* Thin Binary */ = { + isa = PBXShellScriptBuildPhase; + alwaysOutOfDate = 1; + buildActionMask = 2147483647; + files = ( + ); + inputPaths = ( + "${TARGET_BUILD_DIR}/${INFOPLIST_PATH}", + ); + name = "Thin Binary"; + outputPaths = ( + ); + runOnlyForDeploymentPostprocessing = 0; + shellPath = /bin/sh; + shellScript = "/bin/sh \"$FLUTTER_ROOT/packages/flutter_tools/bin/xcode_backend.sh\" embed_and_thin"; + }; + 46A64A04299681F5003FC4F3 /* ShellScript */ = { + isa = PBXShellScriptBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + inputFileListPaths = ( + ); + inputPaths = ( + ); + outputFileListPaths = ( + ); + outputPaths = ( + ); + runOnlyForDeploymentPostprocessing = 0; + shellPath = /bin/sh; + shellScript = "# Type a script or drag a script file from your workspace to insert its path.\necho \"YYYYYYYY: ${CONFIGURATION}\"\n"; + }; + 9740EEB61CF901F6004384FC /* Run Script */ = { + isa = PBXShellScriptBuildPhase; + alwaysOutOfDate = 1; + buildActionMask = 2147483647; + files = ( + ); + inputPaths = ( + ); + name = "Run Script"; + outputPaths = ( + ); + runOnlyForDeploymentPostprocessing = 0; + shellPath = /bin/sh; + shellScript = "/bin/sh \"$FLUTTER_ROOT/packages/flutter_tools/bin/xcode_backend.sh\" build\n"; + }; +/* End PBXShellScriptBuildPhase section */ + +/* Begin PBXSourcesBuildPhase section */ + 97C146EA1CF9000F007C117D /* Sources */ = { + isa = PBXSourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + 978B8F6F1D3862AE00F588F7 /* AppDelegate.m in Sources */, + 97C146F31CF9000F007C117D /* main.m in Sources */, + 1498D2341E8E89220040F4C2 /* GeneratedPluginRegistrant.m in Sources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXSourcesBuildPhase section */ + +/* Begin PBXVariantGroup section */ + 97C146FA1CF9000F007C117D /* Main.storyboard */ = { + isa = PBXVariantGroup; + children = ( + 97C146FB1CF9000F007C117D /* Base */, + ); + name = Main.storyboard; + sourceTree = ""; + }; + 97C146FF1CF9000F007C117D /* LaunchScreen.storyboard */ = { + isa = PBXVariantGroup; + children = ( + 97C147001CF9000F007C117D /* Base */, + ); + name = LaunchScreen.storyboard; + sourceTree = ""; + }; +/* End PBXVariantGroup section */ + +/* Begin XCBuildConfiguration section */ + 249021D3217E4FDB00AE95B9 /* Profile */ = { + isa = XCBuildConfiguration; + buildSettings = { + ALWAYS_SEARCH_USER_PATHS = NO; + CLANG_ANALYZER_NONNULL = YES; + CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x"; + CLANG_CXX_LIBRARY = "libc++"; + CLANG_ENABLE_MODULES = YES; + CLANG_ENABLE_OBJC_ARC = YES; + CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES; + CLANG_WARN_BOOL_CONVERSION = YES; + CLANG_WARN_COMMA = YES; + CLANG_WARN_CONSTANT_CONVERSION = YES; + CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES; + CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; + CLANG_WARN_EMPTY_BODY = YES; + CLANG_WARN_ENUM_CONVERSION = YES; + CLANG_WARN_INFINITE_RECURSION = YES; + CLANG_WARN_INT_CONVERSION = YES; + CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES; + CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES; + CLANG_WARN_OBJC_LITERAL_CONVERSION = YES; + CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; + CLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = YES; + CLANG_WARN_RANGE_LOOP_ANALYSIS = YES; + CLANG_WARN_STRICT_PROTOTYPES = YES; + CLANG_WARN_SUSPICIOUS_MOVE = YES; + CLANG_WARN_UNREACHABLE_CODE = YES; + CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; + "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer"; + COPY_PHASE_STRIP = NO; + DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; + ENABLE_NS_ASSERTIONS = NO; + ENABLE_STRICT_OBJC_MSGSEND = YES; + GCC_C_LANGUAGE_STANDARD = gnu99; + GCC_NO_COMMON_BLOCKS = YES; + GCC_WARN_64_TO_32_BIT_CONVERSION = YES; + GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; + GCC_WARN_UNDECLARED_SELECTOR = YES; + GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; + GCC_WARN_UNUSED_FUNCTION = YES; + GCC_WARN_UNUSED_VARIABLE = YES; + IPHONEOS_DEPLOYMENT_TARGET = 15.0; + MTL_ENABLE_DEBUG_INFO = NO; + SDKROOT = iphoneos; + SUPPORTED_PLATFORMS = iphoneos; + TARGETED_DEVICE_FAMILY = "1,2"; + VALIDATE_PRODUCT = YES; + }; + name = Profile; + }; + 249021D4217E4FDB00AE95B9 /* Profile */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = 7AFA3C8E1D35360C0083082E /* Release.xcconfig */; + buildSettings = { + ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = YES; + ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; + CODE_SIGN_ENTITLEMENTS = Runner/Runner.entitlements; + CURRENT_PROJECT_VERSION = "$(FLUTTER_BUILD_NUMBER)"; + DEVELOPMENT_TEAM = YYX2P3XVJ7; + ENABLE_BITCODE = NO; + INFOPLIST_FILE = Runner/Info.plist; + LD_RUNPATH_SEARCH_PATHS = ( + "$(inherited)", + "@executable_path/Frameworks", + ); + PRODUCT_BUNDLE_IDENTIFIER = io.flutter.plugins.firebase.appcheck.example; + PRODUCT_NAME = "$(TARGET_NAME)"; + VERSIONING_SYSTEM = "apple-generic"; + }; + name = Profile; + }; + 97C147031CF9000F007C117D /* Debug */ = { + isa = XCBuildConfiguration; + buildSettings = { + ALWAYS_SEARCH_USER_PATHS = NO; + CLANG_ANALYZER_NONNULL = YES; + CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x"; + CLANG_CXX_LIBRARY = "libc++"; + CLANG_ENABLE_MODULES = YES; + CLANG_ENABLE_OBJC_ARC = YES; + CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES; + CLANG_WARN_BOOL_CONVERSION = YES; + CLANG_WARN_COMMA = YES; + CLANG_WARN_CONSTANT_CONVERSION = YES; + CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES; + CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; + CLANG_WARN_EMPTY_BODY = YES; + CLANG_WARN_ENUM_CONVERSION = YES; + CLANG_WARN_INFINITE_RECURSION = YES; + CLANG_WARN_INT_CONVERSION = YES; + CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES; + CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES; + CLANG_WARN_OBJC_LITERAL_CONVERSION = YES; + CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; + CLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = YES; + CLANG_WARN_RANGE_LOOP_ANALYSIS = YES; + CLANG_WARN_STRICT_PROTOTYPES = YES; + CLANG_WARN_SUSPICIOUS_MOVE = YES; + CLANG_WARN_UNREACHABLE_CODE = YES; + CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; + "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer"; + COPY_PHASE_STRIP = NO; + DEBUG_INFORMATION_FORMAT = dwarf; + ENABLE_STRICT_OBJC_MSGSEND = YES; + ENABLE_TESTABILITY = YES; + GCC_C_LANGUAGE_STANDARD = gnu99; + GCC_DYNAMIC_NO_PIC = NO; + GCC_NO_COMMON_BLOCKS = YES; + GCC_OPTIMIZATION_LEVEL = 0; + GCC_PREPROCESSOR_DEFINITIONS = ( + "DEBUG=1", + "$(inherited)", + ); + GCC_WARN_64_TO_32_BIT_CONVERSION = YES; + GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; + GCC_WARN_UNDECLARED_SELECTOR = YES; + GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; + GCC_WARN_UNUSED_FUNCTION = YES; + GCC_WARN_UNUSED_VARIABLE = YES; + IPHONEOS_DEPLOYMENT_TARGET = 15.0; + MTL_ENABLE_DEBUG_INFO = YES; + ONLY_ACTIVE_ARCH = YES; + SDKROOT = iphoneos; + TARGETED_DEVICE_FAMILY = "1,2"; + }; + name = Debug; + }; + 97C147041CF9000F007C117D /* Release */ = { + isa = XCBuildConfiguration; + buildSettings = { + ALWAYS_SEARCH_USER_PATHS = NO; + CLANG_ANALYZER_NONNULL = YES; + CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x"; + CLANG_CXX_LIBRARY = "libc++"; + CLANG_ENABLE_MODULES = YES; + CLANG_ENABLE_OBJC_ARC = YES; + CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES; + CLANG_WARN_BOOL_CONVERSION = YES; + CLANG_WARN_COMMA = YES; + CLANG_WARN_CONSTANT_CONVERSION = YES; + CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES; + CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; + CLANG_WARN_EMPTY_BODY = YES; + CLANG_WARN_ENUM_CONVERSION = YES; + CLANG_WARN_INFINITE_RECURSION = YES; + CLANG_WARN_INT_CONVERSION = YES; + CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES; + CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES; + CLANG_WARN_OBJC_LITERAL_CONVERSION = YES; + CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; + CLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = YES; + CLANG_WARN_RANGE_LOOP_ANALYSIS = YES; + CLANG_WARN_STRICT_PROTOTYPES = YES; + CLANG_WARN_SUSPICIOUS_MOVE = YES; + CLANG_WARN_UNREACHABLE_CODE = YES; + CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; + "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer"; + COPY_PHASE_STRIP = NO; + DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; + ENABLE_NS_ASSERTIONS = NO; + ENABLE_STRICT_OBJC_MSGSEND = YES; + GCC_C_LANGUAGE_STANDARD = gnu99; + GCC_NO_COMMON_BLOCKS = YES; + GCC_WARN_64_TO_32_BIT_CONVERSION = YES; + GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; + GCC_WARN_UNDECLARED_SELECTOR = YES; + GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; + GCC_WARN_UNUSED_FUNCTION = YES; + GCC_WARN_UNUSED_VARIABLE = YES; + IPHONEOS_DEPLOYMENT_TARGET = 15.0; + MTL_ENABLE_DEBUG_INFO = NO; + SDKROOT = iphoneos; + SUPPORTED_PLATFORMS = iphoneos; + TARGETED_DEVICE_FAMILY = "1,2"; + VALIDATE_PRODUCT = YES; + }; + name = Release; + }; + 97C147061CF9000F007C117D /* Debug */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = 9740EEB21CF90195004384FC /* Debug.xcconfig */; + buildSettings = { + ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = YES; + ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; + CODE_SIGN_ENTITLEMENTS = Runner/Runner.entitlements; + CURRENT_PROJECT_VERSION = "$(FLUTTER_BUILD_NUMBER)"; + DEVELOPMENT_TEAM = YYX2P3XVJ7; + ENABLE_BITCODE = NO; + INFOPLIST_FILE = Runner/Info.plist; + LD_RUNPATH_SEARCH_PATHS = ( + "$(inherited)", + "@executable_path/Frameworks", + ); + PRODUCT_BUNDLE_IDENTIFIER = io.flutter.plugins.firebase.appcheck.example; + PRODUCT_NAME = "$(TARGET_NAME)"; + VERSIONING_SYSTEM = "apple-generic"; + }; + name = Debug; + }; + 97C147071CF9000F007C117D /* Release */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = 7AFA3C8E1D35360C0083082E /* Release.xcconfig */; + buildSettings = { + ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = YES; + ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; + CODE_SIGN_ENTITLEMENTS = Runner/RunnerRelease.entitlements; + CURRENT_PROJECT_VERSION = "$(FLUTTER_BUILD_NUMBER)"; + DEVELOPMENT_TEAM = YYX2P3XVJ7; + ENABLE_BITCODE = NO; + INFOPLIST_FILE = Runner/Info.plist; + LD_RUNPATH_SEARCH_PATHS = ( + "$(inherited)", + "@executable_path/Frameworks", + ); + PRODUCT_BUNDLE_IDENTIFIER = io.flutter.plugins.firebase.appcheck.example; + PRODUCT_NAME = "$(TARGET_NAME)"; + VERSIONING_SYSTEM = "apple-generic"; + }; + name = Release; + }; +/* End XCBuildConfiguration section */ + +/* Begin XCConfigurationList section */ + 97C146E91CF9000F007C117D /* Build configuration list for PBXProject "Runner" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + 97C147031CF9000F007C117D /* Debug */, + 97C147041CF9000F007C117D /* Release */, + 249021D3217E4FDB00AE95B9 /* Profile */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; + 97C147051CF9000F007C117D /* Build configuration list for PBXNativeTarget "Runner" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + 97C147061CF9000F007C117D /* Debug */, + 97C147071CF9000F007C117D /* Release */, + 249021D4217E4FDB00AE95B9 /* Profile */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; +/* End XCConfigurationList section */ + +/* Begin XCLocalSwiftPackageReference section */ + 781AD8BC2B33823900A9FFBB /* XCLocalSwiftPackageReference "FlutterGeneratedPluginSwiftPackage" */ = { + isa = XCLocalSwiftPackageReference; + relativePath = Flutter/ephemeral/Packages/FlutterGeneratedPluginSwiftPackage; + }; +/* End XCLocalSwiftPackageReference section */ + +/* Begin XCSwiftPackageProductDependency section */ + 78A3181F2AECB46A00862997 /* FlutterGeneratedPluginSwiftPackage */ = { + isa = XCSwiftPackageProductDependency; + productName = FlutterGeneratedPluginSwiftPackage; + }; +/* End XCSwiftPackageProductDependency section */ + }; + rootObject = 97C146E61CF9000F007C117D /* Project object */; +} diff --git a/mih_ui/android/build/ios/SourcePackages/firebase_app_check-0.4.5/example/ios/Runner.xcodeproj/project.xcworkspace/contents.xcworkspacedata b/mih_ui/android/build/ios/SourcePackages/firebase_app_check-0.4.5/example/ios/Runner.xcodeproj/project.xcworkspace/contents.xcworkspacedata new file mode 100644 index 00000000..919434a6 --- /dev/null +++ b/mih_ui/android/build/ios/SourcePackages/firebase_app_check-0.4.5/example/ios/Runner.xcodeproj/project.xcworkspace/contents.xcworkspacedata @@ -0,0 +1,7 @@ + + + + + diff --git a/mih_ui/android/build/ios/SourcePackages/firebase_app_check-0.4.5/example/ios/Runner.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist b/mih_ui/android/build/ios/SourcePackages/firebase_app_check-0.4.5/example/ios/Runner.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist new file mode 100644 index 00000000..18d98100 --- /dev/null +++ b/mih_ui/android/build/ios/SourcePackages/firebase_app_check-0.4.5/example/ios/Runner.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist @@ -0,0 +1,8 @@ + + + + + IDEDidComputeMac32BitWarning + + + diff --git a/mih_ui/android/build/ios/SourcePackages/firebase_app_check-0.4.5/example/ios/Runner.xcodeproj/project.xcworkspace/xcshareddata/WorkspaceSettings.xcsettings b/mih_ui/android/build/ios/SourcePackages/firebase_app_check-0.4.5/example/ios/Runner.xcodeproj/project.xcworkspace/xcshareddata/WorkspaceSettings.xcsettings new file mode 100644 index 00000000..f9b0d7c5 --- /dev/null +++ b/mih_ui/android/build/ios/SourcePackages/firebase_app_check-0.4.5/example/ios/Runner.xcodeproj/project.xcworkspace/xcshareddata/WorkspaceSettings.xcsettings @@ -0,0 +1,8 @@ + + + + + PreviewsEnabled + + + diff --git a/mih_ui/android/build/ios/SourcePackages/firebase_app_check-0.4.5/example/ios/Runner.xcodeproj/xcshareddata/xcschemes/Runner.xcscheme b/mih_ui/android/build/ios/SourcePackages/firebase_app_check-0.4.5/example/ios/Runner.xcodeproj/xcshareddata/xcschemes/Runner.xcscheme new file mode 100644 index 00000000..8a6c683e --- /dev/null +++ b/mih_ui/android/build/ios/SourcePackages/firebase_app_check-0.4.5/example/ios/Runner.xcodeproj/xcshareddata/xcschemes/Runner.xcscheme @@ -0,0 +1,114 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/mih_ui/android/build/ios/SourcePackages/firebase_app_check-0.4.5/example/ios/Runner.xcworkspace/contents.xcworkspacedata b/mih_ui/android/build/ios/SourcePackages/firebase_app_check-0.4.5/example/ios/Runner.xcworkspace/contents.xcworkspacedata new file mode 100644 index 00000000..21a3cc14 --- /dev/null +++ b/mih_ui/android/build/ios/SourcePackages/firebase_app_check-0.4.5/example/ios/Runner.xcworkspace/contents.xcworkspacedata @@ -0,0 +1,10 @@ + + + + + + + diff --git a/mih_ui/android/build/ios/SourcePackages/firebase_app_check-0.4.5/example/ios/Runner.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist b/mih_ui/android/build/ios/SourcePackages/firebase_app_check-0.4.5/example/ios/Runner.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist new file mode 100644 index 00000000..18d98100 --- /dev/null +++ b/mih_ui/android/build/ios/SourcePackages/firebase_app_check-0.4.5/example/ios/Runner.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist @@ -0,0 +1,8 @@ + + + + + IDEDidComputeMac32BitWarning + + + diff --git a/mih_ui/android/build/ios/SourcePackages/firebase_app_check-0.4.5/example/ios/Runner.xcworkspace/xcshareddata/WorkspaceSettings.xcsettings b/mih_ui/android/build/ios/SourcePackages/firebase_app_check-0.4.5/example/ios/Runner.xcworkspace/xcshareddata/WorkspaceSettings.xcsettings new file mode 100644 index 00000000..f9b0d7c5 --- /dev/null +++ b/mih_ui/android/build/ios/SourcePackages/firebase_app_check-0.4.5/example/ios/Runner.xcworkspace/xcshareddata/WorkspaceSettings.xcsettings @@ -0,0 +1,8 @@ + + + + + PreviewsEnabled + + + diff --git a/mih_ui/android/build/ios/SourcePackages/firebase_app_check-0.4.5/example/ios/Runner/AppDelegate.h b/mih_ui/android/build/ios/SourcePackages/firebase_app_check-0.4.5/example/ios/Runner/AppDelegate.h new file mode 100644 index 00000000..01e6e1d4 --- /dev/null +++ b/mih_ui/android/build/ios/SourcePackages/firebase_app_check-0.4.5/example/ios/Runner/AppDelegate.h @@ -0,0 +1,6 @@ +#import +#import + +@interface AppDelegate : FlutterAppDelegate + +@end diff --git a/mih_ui/android/build/ios/SourcePackages/firebase_app_check-0.4.5/example/ios/Runner/AppDelegate.m b/mih_ui/android/build/ios/SourcePackages/firebase_app_check-0.4.5/example/ios/Runner/AppDelegate.m new file mode 100644 index 00000000..7171162c --- /dev/null +++ b/mih_ui/android/build/ios/SourcePackages/firebase_app_check-0.4.5/example/ios/Runner/AppDelegate.m @@ -0,0 +1,16 @@ +#import "AppDelegate.h" +#import "GeneratedPluginRegistrant.h" +@import Firebase; + +@implementation AppDelegate + +- (BOOL)application:(UIApplication *)application + didFinishLaunchingWithOptions:(NSDictionary *)launchOptions { + return [super application:application didFinishLaunchingWithOptions:launchOptions]; +} + +- (void)didInitializeImplicitFlutterEngine:(NSObject *)engineBridge { + [GeneratedPluginRegistrant registerWithRegistry:engineBridge.pluginRegistry]; +} + +@end diff --git a/mih_ui/android/build/ios/SourcePackages/firebase_app_check-0.4.5/example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Contents.json b/mih_ui/android/build/ios/SourcePackages/firebase_app_check-0.4.5/example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Contents.json new file mode 100644 index 00000000..d36b1fab --- /dev/null +++ b/mih_ui/android/build/ios/SourcePackages/firebase_app_check-0.4.5/example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Contents.json @@ -0,0 +1,122 @@ +{ + "images" : [ + { + "size" : "20x20", + "idiom" : "iphone", + "filename" : "Icon-App-20x20@2x.png", + "scale" : "2x" + }, + { + "size" : "20x20", + "idiom" : "iphone", + "filename" : "Icon-App-20x20@3x.png", + "scale" : "3x" + }, + { + "size" : "29x29", + "idiom" : "iphone", + "filename" : "Icon-App-29x29@1x.png", + "scale" : "1x" + }, + { + "size" : "29x29", + "idiom" : "iphone", + "filename" : "Icon-App-29x29@2x.png", + "scale" : "2x" + }, + { + "size" : "29x29", + "idiom" : "iphone", + "filename" : "Icon-App-29x29@3x.png", + "scale" : "3x" + }, + { + "size" : "40x40", + "idiom" : "iphone", + "filename" : "Icon-App-40x40@2x.png", + "scale" : "2x" + }, + { + "size" : "40x40", + "idiom" : "iphone", + "filename" : "Icon-App-40x40@3x.png", + "scale" : "3x" + }, + { + "size" : "60x60", + "idiom" : "iphone", + "filename" : "Icon-App-60x60@2x.png", + "scale" : "2x" + }, + { + "size" : "60x60", + "idiom" : "iphone", + "filename" : "Icon-App-60x60@3x.png", + "scale" : "3x" + }, + { + "size" : "20x20", + "idiom" : "ipad", + "filename" : "Icon-App-20x20@1x.png", + "scale" : "1x" + }, + { + "size" : "20x20", + "idiom" : "ipad", + "filename" : "Icon-App-20x20@2x.png", + "scale" : "2x" + }, + { + "size" : "29x29", + "idiom" : "ipad", + "filename" : "Icon-App-29x29@1x.png", + "scale" : "1x" + }, + { + "size" : "29x29", + "idiom" : "ipad", + "filename" : "Icon-App-29x29@2x.png", + "scale" : "2x" + }, + { + "size" : "40x40", + "idiom" : "ipad", + "filename" : "Icon-App-40x40@1x.png", + "scale" : "1x" + }, + { + "size" : "40x40", + "idiom" : "ipad", + "filename" : "Icon-App-40x40@2x.png", + "scale" : "2x" + }, + { + "size" : "76x76", + "idiom" : "ipad", + "filename" : "Icon-App-76x76@1x.png", + "scale" : "1x" + }, + { + "size" : "76x76", + "idiom" : "ipad", + "filename" : "Icon-App-76x76@2x.png", + "scale" : "2x" + }, + { + "size" : "83.5x83.5", + "idiom" : "ipad", + "filename" : "Icon-App-83.5x83.5@2x.png", + "scale" : "2x" + }, + { + "size" : "1024x1024", + "idiom" : "ios-marketing", + "filename" : "Icon-App-1024x1024@1x.png", + "scale" : "1x" + } + ], + "info" : { + "version" : 1, + "author" : "xcode" + } +} diff --git a/mih_ui/android/build/ios/SourcePackages/firebase_app_check-0.4.5/example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-1024x1024@1x.png b/mih_ui/android/build/ios/SourcePackages/firebase_app_check-0.4.5/example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-1024x1024@1x.png new file mode 100644 index 0000000000000000000000000000000000000000..dc9ada4725e9b0ddb1deab583e5b5102493aa332 GIT binary patch literal 10932 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 literal 0 HcmV?d00001 diff --git a/mih_ui/android/build/ios/SourcePackages/firebase_app_check-0.4.5/example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@3x.png b/mih_ui/android/build/ios/SourcePackages/firebase_app_check-0.4.5/example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@3x.png new file mode 100644 index 0000000000000000000000000000000000000000..f091b6b0bca859a3f474b03065bef75ba58a9e4c GIT binary patch literal 1588 zcmV-42Fv-0P)C1SqPt}wig>|5Crh^=oyX$BK<}M8eLU3e2hGT;=G|!_SP)7zNI6fqUMB=)y zRAZ>eDe#*r`yDAVgB_R*LB*MAc)8(b{g{9McCXW!lq7r(btRoB9!8B-#AI6JMb~YFBEvdsV)`mEQO^&#eRKx@b&x- z5lZm*!WfD8oCLzfHGz#u7sT0^VLMI1MqGxF^v+`4YYnVYgk*=kU?HsSz{v({E3lb9 z>+xILjBN)t6`=g~IBOelGQ(O990@BfXf(DRI5I$qN$0Gkz-FSc$3a+2fX$AedL4u{ z4V+5Ong(9LiGcIKW?_352sR;LtDPmPJXI{YtT=O8=76o9;*n%_m|xo!i>7$IrZ-{l z-x3`7M}qzHsPV@$v#>H-TpjDh2UE$9g6sysUREDy_R(a)>=eHw-WAyfIN z*qb!_hW>G)Tu8nSw9yn#3wFMiLcfc4pY0ek1}8(NqkBR@t4{~oC>ryc-h_ByH(Cg5 z>ao-}771+xE3um9lWAY1FeQFxowa1(!J(;Jg*wrg!=6FdRX+t_<%z&d&?|Bn){>zm zZQj(aA_HeBY&OC^jj*)N`8fa^ePOU72VpInJoI1?`ty#lvlNzs(&MZX+R%2xS~5Kh zX*|AU4QE#~SgPzOXe9>tRj>hjU@c1k5Y_mW*Jp3fI;)1&g3j|zDgC+}2Q_v%YfDax z!?umcN^n}KYQ|a$Lr+51Nf9dkkYFSjZZjkma$0KOj+;aQ&721~t7QUKx61J3(P4P1 zstI~7-wOACnWP4=8oGOwz%vNDqD8w&Q`qcNGGrbbf&0s9L0De{4{mRS?o0MU+nR_! zrvshUau0G^DeMhM_v{5BuLjb#Hh@r23lDAk8oF(C+P0rsBpv85EP>4CVMx#04MOfG z;P%vktHcXwTj~+IE(~px)3*MY77e}p#|c>TD?sMatC0Tu4iKKJ0(X8jxQY*gYtxsC z(zYC$g|@+I+kY;dg_dE>scBf&bP1Nc@Hz<3R)V`=AGkc;8CXqdi=B4l2k|g;2%#m& z*jfX^%b!A8#bI!j9-0Fi0bOXl(-c^AB9|nQaE`*)Hw+o&jS9@7&Gov#HbD~#d{twV zXd^Tr^mWLfFh$@Dr$e;PBEz4(-2q1FF0}c;~B5sA}+Q>TOoP+t>wf)V9Iy=5ruQa;z)y zI9C9*oUga6=hxw6QasLPnee@3^Rr*M{CdaL5=R41nLs(AHk_=Y+A9$2&H(B7!_pURs&8aNw7?`&Z&xY_Ye z)~D5Bog^td-^QbUtkTirdyK^mTHAOuptDflut!#^lnKqU md>ggs(5nOWAqO?umG&QVYK#ibz}*4>0000U6E9hRK9^#O7(mu>ETqrXGsduA8$)?`v2seloOCza43C{NQ$$gAOH**MCn0Q?+L7dl7qnbRdqZ8LSVp1ItDxhxD?t@5_yHg6A8yI zC*%Wgg22K|8E#!~cTNYR~@Y9KepMPrrB8cABapAFa=`H+UGhkXUZV1GnwR1*lPyZ;*K(i~2gp|@bzp8}og7e*#% zEnr|^CWdVV!-4*Y_7rFvlww2Ze+>j*!Z!pQ?2l->4q#nqRu9`ELo6RMS5=br47g_X zRw}P9a7RRYQ%2Vsd0Me{_(EggTnuN6j=-?uFS6j^u69elMypu?t>op*wBx<=Wx8?( ztpe^(fwM6jJX7M-l*k3kEpWOl_Vk3@(_w4oc}4YF4|Rt=2V^XU?#Yz`8(e?aZ@#li0n*=g^qOcVpd-Wbok=@b#Yw zqn8u9a)z>l(1kEaPYZ6hwubN6i<8QHgsu0oE) ziJ(p;Wxm>sf!K+cw>R-(^Y2_bahB+&KI9y^);#0qt}t-$C|Bo71lHi{_+lg#f%RFy z0um=e3$K3i6K{U_4K!EX?F&rExl^W|G8Z8;`5z-k}OGNZ0#WVb$WCpQu-_YsiqKP?BB# vzVHS-CTUF4Ozn5G+mq_~Qqto~ahA+K`|lyv3(-e}00000NkvXXu0mjfd`9t{ literal 0 HcmV?d00001 diff --git a/mih_ui/android/build/ios/SourcePackages/firebase_app_check-0.4.5/example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@2x.png b/mih_ui/android/build/ios/SourcePackages/firebase_app_check-0.4.5/example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@2x.png new file mode 100644 index 0000000000000000000000000000000000000000..d0ef06e7edb86cdfe0d15b4b0d98334a86163658 GIT binary patch literal 1716 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 literal 0 HcmV?d00001 diff --git a/mih_ui/android/build/ios/SourcePackages/firebase_app_check-0.4.5/example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@2x.png b/mih_ui/android/build/ios/SourcePackages/firebase_app_check-0.4.5/example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@2x.png new file mode 100644 index 0000000000000000000000000000000000000000..c8f9ed8f5cee1c98386d13b17e89f719e83555b2 GIT binary patch literal 1895 zcmV-t2blPYP)FQtfgmafE#=YDCq`qUBt#QpG%*H6QHY765~R=q zZ6iudfM}q!Pz#~9JgOi8QJ|DSu?1-*(kSi1K4#~5?#|rh?sS)(-JQqX*}ciXJ56_H zdw=^s_srbAdqxlvGyrgGet#6T7_|j;95sL%MtM;q86vOxKM$f#puR)Bjv9Zvz9-di zXOTSsZkM83)E9PYBXC<$6(|>lNLVBb&&6y{NByFCp%6+^ALR@NCTse_wqvNmSWI-m z!$%KlHFH2omF!>#%1l3LTZg(s7eof$7*xB)ZQ0h?ejh?Ta9fDv59+u#MokW+1t8Zb zgHv%K(u9G^Lv`lh#f3<6!JVTL3(dCpxHbnbA;kKqQyd1~^Xe0VIaYBSWm6nsr;dFj z4;G-RyL?cYgsN1{L4ZFFNa;8)Rv0fM0C(~Tkit94 zz#~A)59?QjD&pAPSEQ)p8gP|DS{ng)j=2ux)_EzzJ773GmQ_Cic%3JJhC0t2cx>|v zJcVusIB!%F90{+}8hG3QU4KNeKmK%T>mN57NnCZ^56=0?&3@!j>a>B43pi{!u z7JyDj7`6d)qVp^R=%j>UIY6f+3`+qzIc!Y_=+uN^3BYV|o+$vGo-j-Wm<10%A=(Yk^beI{t%ld@yhKjq0iNjqN4XMGgQtbKubPM$JWBz}YA65k%dm*awtC^+f;a-x4+ddbH^7iDWGg&N0n#MW{kA|=8iMUiFYvMoDY@sPC#t$55gn6ykUTPAr`a@!(;np824>2xJthS z*ZdmT`g5-`BuJs`0LVhz+D9NNa3<=6m;cQLaF?tCv8)zcRSh66*Z|vXhG@$I%U~2l z?`Q zykI#*+rQ=z6Jm=Bui-SfpDYLA=|vzGE(dYm=OC8XM&MDo7ux4UF1~0J1+i%aCUpRe zt3L_uNyQ*cE(38Uy03H%I*)*Bh=Lb^Xj3?I^Hnbeq72(EOK^Y93CNp*uAA{5Lc=ky zx=~RKa4{iTm{_>_vSCm?$Ej=i6@=m%@VvAITnigVg{&@!7CDgs908761meDK5azA} z4?=NOH|PdvabgJ&fW2{Mo$Q0CcD8Qc84%{JPYt5EiG{MdLIAeX%T=D7NIP4%Hw}p9 zg)==!2Lbp#j{u_}hMiao9=!VSyx0gHbeCS`;q&vzeq|fs`y&^X-lso(Ls@-706qmA z7u*T5PMo_w3{se1t2`zWeO^hOvTsohG_;>J0wVqVe+n)AbQCx)yh9;w+J6?NF5Lmo zecS@ieAKL8%bVd@+-KT{yI|S}O>pYckUFs;ry9Ow$CD@ztz5K-*D$^{i(_1llhSh^ zEkL$}tsQt5>QA^;QgjgIfBDmcOgi5YDyu?t6vSnbp=1+@6D& z5MJ}B8q;bRlVoxasyhcUF1+)o`&3r0colr}QJ3hcSdLu;9;td>kf@Tcn<@9sIx&=m z;AD;SCh95=&p;$r{Xz3iWCO^MX83AGJ(yH&eTXgv|0=34#-&WAmw{)U7OU9!Wz^!7 zZ%jZFi@JR;>Mhi7S>V7wQ176|FdW2m?&`qa(ScO^CFPR80HucLHOTy%5s*HR0^8)i h0WYBP*#0Ks^FNSabJA*5${_#%002ovPDHLkV1oKhTl@e3 literal 0 HcmV?d00001 diff --git a/mih_ui/android/build/ios/SourcePackages/firebase_app_check-0.4.5/example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@3x.png b/mih_ui/android/build/ios/SourcePackages/firebase_app_check-0.4.5/example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@3x.png new file mode 100644 index 0000000000000000000000000000000000000000..a6d6b8609df07bf62e5100a53a01510388bd2b22 GIT binary patch literal 2665 zcmV-v3YPVWP)oFh3q0MFesq&64WThn3$;G69TfjsAv=f2G9}p zgSx99+!YV6qME!>9MD13x)k(+XE7W?_O4LoLb5ND8 zaV{9+P@>42xDfRiYBMSgD$0!vssptcb;&?u9u(LLBKmkZ>RMD=kvD3h`sk6!QYtBa ztlZI#nu$8lJ^q2Z79UTgZe>BU73(Aospiq+?SdMt8lDZ;*?@tyWVZVS_Q7S&*tJaiRlJ z+aSMOmbg3@h5}v;A*c8SbqM3icg-`Cnwl;7Ts%A1RkNIp+Txl-Ckkvg4oxrqGA5ewEgYqwtECD<_3Egu)xGllKt&J8g&+=ac@Jq4-?w6M3b*>w5 z69N3O%=I^6&UL5gZ!}trC7bUj*12xLdkNs~Bz4QdJJ*UDZox2UGR}SNg@lmOvhCc~ z*f_UeXv(=#I#*7>VZx2ObEN~UoGUTl=-@)E;YtCRZ>SVp$p9yG5hEFZ!`wI!spd)n zSk+vK0Vin7FL{7f&6OB%f;SH22dtbcF<|9fi2Fp%q4kxL!b1#l^)8dUwJ zwEf{(wJj@8iYDVnKB`eSU+;ml-t2`@%_)0jDM`+a46xhDbBj2+&Ih>1A>6aky#(-SYyE{R3f#y57wfLs z6w1p~$bp;6!9DX$M+J~S@D6vJAaElETnsX4h9a5tvPhC3L@qB~bOzkL@^z0k_hS{T4PF*TDrgdXp+dzsE? z>V|VR035Pl9n5&-RePFdS{7KAr2vPOqR9=M$vXA1Yy5>w;EsF`;OK{2pkn-kpp9Pw z)r;5JfJKKaT$4qCb{TaXHjb$QA{y0EYy*+b1XI;6Ah- zw13P)xT`>~eFoJC!>{2XL(a_#upp3gaR1#5+L(Jmzp4TBnx{~WHedpJ1ch8JFk~Sw z>F+gN+i+VD?gMXwcIhn8rz`>e>J^TI3E-MW>f}6R-pL}>WMOa0k#jN+`RyUVUC;#D zg|~oS^$6%wpF{^Qr+}X>0PKcr3Fc&>Z>uv@C);pwDs@2bZWhYP!rvGx?_|q{d`t<*XEb#=aOb=N+L@CVBGqImZf&+a zCQEa3$~@#kC);pasdG=f6tuIi0PO-y&tvX%>Mv=oY3U$nD zJ#gMegnQ46pq+3r=;zmgcG+zRc9D~c>z+jo9&D+`E6$LmyFqlmCYw;-Zooma{sR@~ z)_^|YL1&&@|GXo*pivH7k!msl+$Sew3%XJnxajt0K%3M6Bd&YFNy9}tWG^aovK2eX z1aL1%7;KRDrA@eG-Wr6w+;*H_VD~qLiVI`{_;>o)k`{8xa3EJT1O_>#iy_?va0eR? zDV=N%;Zjb%Z2s$@O>w@iqt!I}tLjGk!=p`D23I}N4Be@$(|iSA zf3Ih7b<{zqpDB4WF_5X1(peKe+rASze%u8eKLn#KKXt;UZ+Adf$_TO+vTqshLLJ5c z52HucO=lrNVae5XWOLm!V@n-ObU11!b+DN<$RuU+YsrBq*lYT;?AwJpmNKniF0Q1< zJCo>Q$=v$@&y=sj6{r!Y&y&`0$-I}S!H_~pI&2H8Z1C|BX4VgZ^-! zje3-;x0PBD!M`v*J_)rL^+$<1VJhH*2Fi~aA7s&@_rUHYJ9zD=M%4AFQ`}k8OC$9s XsPq=LnkwKG00000NkvXXu0mjfhAk5^ literal 0 HcmV?d00001 diff --git a/mih_ui/android/build/ios/SourcePackages/firebase_app_check-0.4.5/example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-60x60@2x.png b/mih_ui/android/build/ios/SourcePackages/firebase_app_check-0.4.5/example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-60x60@2x.png new file mode 100644 index 0000000000000000000000000000000000000000..a6d6b8609df07bf62e5100a53a01510388bd2b22 GIT binary patch literal 2665 zcmV-v3YPVWP)oFh3q0MFesq&64WThn3$;G69TfjsAv=f2G9}p zgSx99+!YV6qME!>9MD13x)k(+XE7W?_O4LoLb5ND8 zaV{9+P@>42xDfRiYBMSgD$0!vssptcb;&?u9u(LLBKmkZ>RMD=kvD3h`sk6!QYtBa ztlZI#nu$8lJ^q2Z79UTgZe>BU73(Aospiq+?SdMt8lDZ;*?@tyWVZVS_Q7S&*tJaiRlJ z+aSMOmbg3@h5}v;A*c8SbqM3icg-`Cnwl;7Ts%A1RkNIp+Txl-Ckkvg4oxrqGA5ewEgYqwtECD<_3Egu)xGllKt&J8g&+=ac@Jq4-?w6M3b*>w5 z69N3O%=I^6&UL5gZ!}trC7bUj*12xLdkNs~Bz4QdJJ*UDZox2UGR}SNg@lmOvhCc~ z*f_UeXv(=#I#*7>VZx2ObEN~UoGUTl=-@)E;YtCRZ>SVp$p9yG5hEFZ!`wI!spd)n zSk+vK0Vin7FL{7f&6OB%f;SH22dtbcF<|9fi2Fp%q4kxL!b1#l^)8dUwJ zwEf{(wJj@8iYDVnKB`eSU+;ml-t2`@%_)0jDM`+a46xhDbBj2+&Ih>1A>6aky#(-SYyE{R3f#y57wfLs z6w1p~$bp;6!9DX$M+J~S@D6vJAaElETnsX4h9a5tvPhC3L@qB~bOzkL@^z0k_hS{T4PF*TDrgdXp+dzsE? z>V|VR035Pl9n5&-RePFdS{7KAr2vPOqR9=M$vXA1Yy5>w;EsF`;OK{2pkn-kpp9Pw z)r;5JfJKKaT$4qCb{TaXHjb$QA{y0EYy*+b1XI;6Ah- zw13P)xT`>~eFoJC!>{2XL(a_#upp3gaR1#5+L(Jmzp4TBnx{~WHedpJ1ch8JFk~Sw z>F+gN+i+VD?gMXwcIhn8rz`>e>J^TI3E-MW>f}6R-pL}>WMOa0k#jN+`RyUVUC;#D zg|~oS^$6%wpF{^Qr+}X>0PKcr3Fc&>Z>uv@C);pwDs@2bZWhYP!rvGx?_|q{d`t<*XEb#=aOb=N+L@CVBGqImZf&+a zCQEa3$~@#kC);pasdG=f6tuIi0PO-y&tvX%>Mv=oY3U$nD zJ#gMegnQ46pq+3r=;zmgcG+zRc9D~c>z+jo9&D+`E6$LmyFqlmCYw;-Zooma{sR@~ z)_^|YL1&&@|GXo*pivH7k!msl+$Sew3%XJnxajt0K%3M6Bd&YFNy9}tWG^aovK2eX z1aL1%7;KRDrA@eG-Wr6w+;*H_VD~qLiVI`{_;>o)k`{8xa3EJT1O_>#iy_?va0eR? zDV=N%;Zjb%Z2s$@O>w@iqt!I}tLjGk!=p`D23I}N4Be@$(|iSA zf3Ih7b<{zqpDB4WF_5X1(peKe+rASze%u8eKLn#KKXt;UZ+Adf$_TO+vTqshLLJ5c z52HucO=lrNVae5XWOLm!V@n-ObU11!b+DN<$RuU+YsrBq*lYT;?AwJpmNKniF0Q1< zJCo>Q$=v$@&y=sj6{r!Y&y&`0$-I}S!H_~pI&2H8Z1C|BX4VgZ^-! zje3-;x0PBD!M`v*J_)rL^+$<1VJhH*2Fi~aA7s&@_rUHYJ9zD=M%4AFQ`}k8OC$9s XsPq=LnkwKG00000NkvXXu0mjfhAk5^ literal 0 HcmV?d00001 diff --git a/mih_ui/android/build/ios/SourcePackages/firebase_app_check-0.4.5/example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-60x60@3x.png b/mih_ui/android/build/ios/SourcePackages/firebase_app_check-0.4.5/example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-60x60@3x.png new file mode 100644 index 0000000000000000000000000000000000000000..75b2d164a5a98e212cca15ea7bf2ab5de5108680 GIT binary patch literal 3831 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 literal 0 HcmV?d00001 diff --git a/mih_ui/android/build/ios/SourcePackages/firebase_app_check-0.4.5/example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-76x76@1x.png b/mih_ui/android/build/ios/SourcePackages/firebase_app_check-0.4.5/example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-76x76@1x.png new file mode 100644 index 0000000000000000000000000000000000000000..c4df70d39da7941ef3f6dcb7f06a192d8dcb308d GIT binary patch literal 1888 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 iW8Zci7-kcv6Uzs@r-FtIZ-&5|)J Q1PU{Fy85}Sb4q9e0B4a5jsO4v literal 0 HcmV?d00001 diff --git a/mih_ui/android/build/ios/SourcePackages/firebase_app_check-0.4.5/example/ios/Runner/Assets.xcassets/LaunchImage.imageset/LaunchImage@2x.png b/mih_ui/android/build/ios/SourcePackages/firebase_app_check-0.4.5/example/ios/Runner/Assets.xcassets/LaunchImage.imageset/LaunchImage@2x.png new file mode 100644 index 0000000000000000000000000000000000000000..9da19eacad3b03bb08bbddbbf4ac48dd78b3d838 GIT binary patch literal 68 zcmeAS@N?(olHy`uVBq!ia0vp^j3CUx0wlM}@Gt=>Zci7-kcv6Uzs@r-FtIZ-&5|)J Q1PU{Fy85}Sb4q9e0B4a5jsO4v literal 0 HcmV?d00001 diff --git a/mih_ui/android/build/ios/SourcePackages/firebase_app_check-0.4.5/example/ios/Runner/Assets.xcassets/LaunchImage.imageset/LaunchImage@3x.png b/mih_ui/android/build/ios/SourcePackages/firebase_app_check-0.4.5/example/ios/Runner/Assets.xcassets/LaunchImage.imageset/LaunchImage@3x.png new file mode 100644 index 0000000000000000000000000000000000000000..9da19eacad3b03bb08bbddbbf4ac48dd78b3d838 GIT binary patch literal 68 zcmeAS@N?(olHy`uVBq!ia0vp^j3CUx0wlM}@Gt=>Zci7-kcv6Uzs@r-FtIZ-&5|)J Q1PU{Fy85}Sb4q9e0B4a5jsO4v literal 0 HcmV?d00001 diff --git a/mih_ui/android/build/ios/SourcePackages/firebase_app_check-0.4.5/example/ios/Runner/Assets.xcassets/LaunchImage.imageset/README.md b/mih_ui/android/build/ios/SourcePackages/firebase_app_check-0.4.5/example/ios/Runner/Assets.xcassets/LaunchImage.imageset/README.md new file mode 100644 index 00000000..89c2725b --- /dev/null +++ b/mih_ui/android/build/ios/SourcePackages/firebase_app_check-0.4.5/example/ios/Runner/Assets.xcassets/LaunchImage.imageset/README.md @@ -0,0 +1,5 @@ +# Launch Screen Assets + +You can customize the launch screen with your own desired assets by replacing the image files in this directory. + +You can also do it by opening your Flutter project's Xcode project with `open ios/Runner.xcworkspace`, selecting `Runner/Assets.xcassets` in the Project Navigator and dropping in the desired images. \ No newline at end of file diff --git a/mih_ui/android/build/ios/SourcePackages/firebase_app_check-0.4.5/example/ios/Runner/Base.lproj/LaunchScreen.storyboard b/mih_ui/android/build/ios/SourcePackages/firebase_app_check-0.4.5/example/ios/Runner/Base.lproj/LaunchScreen.storyboard new file mode 100644 index 00000000..f2e259c7 --- /dev/null +++ b/mih_ui/android/build/ios/SourcePackages/firebase_app_check-0.4.5/example/ios/Runner/Base.lproj/LaunchScreen.storyboard @@ -0,0 +1,37 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/mih_ui/android/build/ios/SourcePackages/firebase_app_check-0.4.5/example/ios/Runner/Base.lproj/Main.storyboard b/mih_ui/android/build/ios/SourcePackages/firebase_app_check-0.4.5/example/ios/Runner/Base.lproj/Main.storyboard new file mode 100644 index 00000000..f3c28516 --- /dev/null +++ b/mih_ui/android/build/ios/SourcePackages/firebase_app_check-0.4.5/example/ios/Runner/Base.lproj/Main.storyboard @@ -0,0 +1,26 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/mih_ui/android/build/ios/SourcePackages/firebase_app_check-0.4.5/example/ios/Runner/GoogleService-Info.plist b/mih_ui/android/build/ios/SourcePackages/firebase_app_check-0.4.5/example/ios/Runner/GoogleService-Info.plist new file mode 100644 index 00000000..7e2f0dcb --- /dev/null +++ b/mih_ui/android/build/ios/SourcePackages/firebase_app_check-0.4.5/example/ios/Runner/GoogleService-Info.plist @@ -0,0 +1,38 @@ + + + + + CLIENT_ID + 406099696497-17cfsesi620nhia0sck4map450gngkoh.apps.googleusercontent.com + REVERSED_CLIENT_ID + com.googleusercontent.apps.406099696497-17cfsesi620nhia0sck4map450gngkoh + ANDROID_CLIENT_ID + 406099696497-17qn06u8a0dc717u8ul7s49ampk13lul.apps.googleusercontent.com + API_KEY + AIzaSyDooSUGSf63Ghq02_iIhtnmwMDs4HlWS6c + GCM_SENDER_ID + 406099696497 + PLIST_VERSION + 1 + BUNDLE_ID + io.flutter.plugins.firebase.appcheck.example + PROJECT_ID + flutterfire-e2e-tests + STORAGE_BUCKET + flutterfire-e2e-tests.appspot.com + IS_ADS_ENABLED + + IS_ANALYTICS_ENABLED + + IS_APPINVITE_ENABLED + + IS_GCM_ENABLED + + IS_SIGNIN_ENABLED + + GOOGLE_APP_ID + 1:406099696497:ios:bd8702ba3865bb333574d0 + DATABASE_URL + https://flutterfire-e2e-tests-default-rtdb.europe-west1.firebasedatabase.app + + \ No newline at end of file diff --git a/mih_ui/android/build/ios/SourcePackages/firebase_app_check-0.4.5/example/ios/Runner/Info.plist b/mih_ui/android/build/ios/SourcePackages/firebase_app_check-0.4.5/example/ios/Runner/Info.plist new file mode 100644 index 00000000..3a8a7a2f --- /dev/null +++ b/mih_ui/android/build/ios/SourcePackages/firebase_app_check-0.4.5/example/ios/Runner/Info.plist @@ -0,0 +1,70 @@ + + + + + CADisableMinimumFrameDurationOnPhone + + CFBundleDevelopmentRegion + $(DEVELOPMENT_LANGUAGE) + CFBundleExecutable + $(EXECUTABLE_NAME) + CFBundleIdentifier + $(PRODUCT_BUNDLE_IDENTIFIER) + CFBundleInfoDictionaryVersion + 6.0 + CFBundleName + example + CFBundlePackageType + APPL + CFBundleShortVersionString + $(FLUTTER_BUILD_NAME) + CFBundleSignature + ???? + CFBundleVersion + $(FLUTTER_BUILD_NUMBER) + LSRequiresIPhoneOS + + UILaunchStoryboardName + LaunchScreen + UIMainStoryboardFile + Main + UISupportedInterfaceOrientations + + UIInterfaceOrientationPortrait + UIInterfaceOrientationLandscapeLeft + UIInterfaceOrientationLandscapeRight + + UISupportedInterfaceOrientations~ipad + + UIInterfaceOrientationPortrait + UIInterfaceOrientationPortraitUpsideDown + UIInterfaceOrientationLandscapeLeft + UIInterfaceOrientationLandscapeRight + + UIViewControllerBasedStatusBarAppearance + + UIApplicationSupportsIndirectInputEvents + + UIApplicationSceneManifest + + UIApplicationSupportsMultipleScenes + + UISceneConfigurations + + UIWindowSceneSessionRoleApplication + + + UISceneClassName + UIWindowScene + UISceneDelegateClassName + FlutterSceneDelegate + UISceneConfigurationName + flutter + UISceneStoryboardFile + Main + + + + + + diff --git a/mih_ui/android/build/ios/SourcePackages/firebase_app_check-0.4.5/example/ios/Runner/Runner.entitlements b/mih_ui/android/build/ios/SourcePackages/firebase_app_check-0.4.5/example/ios/Runner/Runner.entitlements new file mode 100644 index 00000000..70084b41 --- /dev/null +++ b/mih_ui/android/build/ios/SourcePackages/firebase_app_check-0.4.5/example/ios/Runner/Runner.entitlements @@ -0,0 +1,8 @@ + + + + + com.apple.developer.devicecheck.appattest-environment + development + + diff --git a/mih_ui/android/build/ios/SourcePackages/firebase_app_check-0.4.5/example/ios/Runner/RunnerRelease.entitlements b/mih_ui/android/build/ios/SourcePackages/firebase_app_check-0.4.5/example/ios/Runner/RunnerRelease.entitlements new file mode 100644 index 00000000..70084b41 --- /dev/null +++ b/mih_ui/android/build/ios/SourcePackages/firebase_app_check-0.4.5/example/ios/Runner/RunnerRelease.entitlements @@ -0,0 +1,8 @@ + + + + + com.apple.developer.devicecheck.appattest-environment + development + + diff --git a/mih_ui/android/build/ios/SourcePackages/firebase_app_check-0.4.5/example/ios/Runner/main.m b/mih_ui/android/build/ios/SourcePackages/firebase_app_check-0.4.5/example/ios/Runner/main.m new file mode 100644 index 00000000..dff6597e --- /dev/null +++ b/mih_ui/android/build/ios/SourcePackages/firebase_app_check-0.4.5/example/ios/Runner/main.m @@ -0,0 +1,9 @@ +#import +#import +#import "AppDelegate.h" + +int main(int argc, char* argv[]) { + @autoreleasepool { + return UIApplicationMain(argc, argv, nil, NSStringFromClass([AppDelegate class])); + } +} diff --git a/mih_ui/android/build/ios/SourcePackages/firebase_app_check-0.4.5/example/ios/firebase_app_id_file.json b/mih_ui/android/build/ios/SourcePackages/firebase_app_check-0.4.5/example/ios/firebase_app_id_file.json new file mode 100644 index 00000000..ab0e60a0 --- /dev/null +++ b/mih_ui/android/build/ios/SourcePackages/firebase_app_check-0.4.5/example/ios/firebase_app_id_file.json @@ -0,0 +1,7 @@ +{ + "file_generated_by": "FlutterFire CLI", + "purpose": "FirebaseAppID & ProjectID for this Firebase app in this directory", + "GOOGLE_APP_ID": "1:406099696497:ios:bd8702ba3865bb333574d0", + "FIREBASE_PROJECT_ID": "flutterfire-e2e-tests", + "GCM_SENDER_ID": "406099696497" +} \ No newline at end of file diff --git a/mih_ui/android/build/ios/SourcePackages/firebase_app_check-0.4.5/example/lib/firebase_options.dart b/mih_ui/android/build/ios/SourcePackages/firebase_app_check-0.4.5/example/lib/firebase_options.dart new file mode 100644 index 00000000..8bbd98af --- /dev/null +++ b/mih_ui/android/build/ios/SourcePackages/firebase_app_check-0.4.5/example/lib/firebase_options.dart @@ -0,0 +1,98 @@ +// Copyright 2022, the Chromium project authors. Please see the AUTHORS file +// for details. All rights reserved. Use of this source code is governed by a +// BSD-style license that can be found in the LICENSE file. + +// File generated by FlutterFire CLI. +// ignore_for_file: type=lint +import 'package:firebase_core/firebase_core.dart' show FirebaseOptions; +import 'package:flutter/foundation.dart' + show defaultTargetPlatform, kIsWeb, TargetPlatform; + +/// Default [FirebaseOptions] for use with your Firebase apps. +/// +/// Example: +/// ```dart +/// import 'firebase_options.dart'; +/// // ... +/// await Firebase.initializeApp( +/// options: DefaultFirebaseOptions.currentPlatform, +/// ); +/// ``` +class DefaultFirebaseOptions { + static FirebaseOptions get currentPlatform { + if (kIsWeb) { + return web; + } + switch (defaultTargetPlatform) { + case TargetPlatform.android: + return android; + case TargetPlatform.iOS: + return ios; + case TargetPlatform.macOS: + return macos; + case TargetPlatform.windows: + return web; + case TargetPlatform.linux: + throw UnsupportedError( + 'DefaultFirebaseOptions have not been configured for linux - ' + 'you can reconfigure this by running the FlutterFire CLI again.', + ); + default: + throw UnsupportedError( + 'DefaultFirebaseOptions are not supported for this platform.', + ); + } + } + + static const FirebaseOptions web = FirebaseOptions( + apiKey: 'AIzaSyB7wZb2tO1-Fs6GbDADUSTs2Qs3w08Hovw', + appId: '1:406099696497:web:87e25e51afe982cd3574d0', + messagingSenderId: '406099696497', + projectId: 'flutterfire-e2e-tests', + authDomain: 'flutterfire-e2e-tests.firebaseapp.com', + databaseURL: + 'https://flutterfire-e2e-tests-default-rtdb.europe-west1.firebasedatabase.app', + storageBucket: 'flutterfire-e2e-tests.appspot.com', + measurementId: 'G-JN95N1JV2E', + ); + + static const FirebaseOptions android = FirebaseOptions( + apiKey: 'AIzaSyCdRjCVZlhrq72RuEklEyyxYlBRCYhI2Sw', + appId: '1:406099696497:android:a241c4b471513a203574d0', + messagingSenderId: '406099696497', + projectId: 'flutterfire-e2e-tests', + databaseURL: + 'https://flutterfire-e2e-tests-default-rtdb.europe-west1.firebasedatabase.app', + storageBucket: 'flutterfire-e2e-tests.appspot.com', + ); + + static const FirebaseOptions ios = FirebaseOptions( + apiKey: 'AIzaSyDooSUGSf63Ghq02_iIhtnmwMDs4HlWS6c', + appId: '1:406099696497:ios:bd8702ba3865bb333574d0', + messagingSenderId: '406099696497', + projectId: 'flutterfire-e2e-tests', + databaseURL: + 'https://flutterfire-e2e-tests-default-rtdb.europe-west1.firebasedatabase.app', + storageBucket: 'flutterfire-e2e-tests.appspot.com', + androidClientId: + '406099696497-17qn06u8a0dc717u8ul7s49ampk13lul.apps.googleusercontent.com', + iosClientId: + '406099696497-17cfsesi620nhia0sck4map450gngkoh.apps.googleusercontent.com', + iosBundleId: 'io.flutter.plugins.firebase.appcheck.example', + ); + + static const FirebaseOptions macos = FirebaseOptions( + apiKey: 'AIzaSyDooSUGSf63Ghq02_iIhtnmwMDs4HlWS6c', + appId: '1:406099696497:ios:bd8702ba3865bb333574d0', + messagingSenderId: '406099696497', + projectId: 'flutterfire-e2e-tests', + databaseURL: + 'https://flutterfire-e2e-tests-default-rtdb.europe-west1.firebasedatabase.app', + storageBucket: 'flutterfire-e2e-tests.appspot.com', + androidClientId: + '406099696497-17qn06u8a0dc717u8ul7s49ampk13lul.apps.googleusercontent.com', + iosClientId: + '406099696497-17cfsesi620nhia0sck4map450gngkoh.apps.googleusercontent.com', + iosBundleId: 'io.flutter.plugins.firebase.appcheck.example', + ); +} diff --git a/mih_ui/android/build/ios/SourcePackages/firebase_app_check-0.4.5/example/lib/main.dart b/mih_ui/android/build/ios/SourcePackages/firebase_app_check-0.4.5/example/lib/main.dart new file mode 100644 index 00000000..8f26c643 --- /dev/null +++ b/mih_ui/android/build/ios/SourcePackages/firebase_app_check-0.4.5/example/lib/main.dart @@ -0,0 +1,249 @@ +// Copyright 2022, the Chromium project authors. Please see the AUTHORS file +// for details. All rights reserved. Use of this source code is governed by a +// BSD-style license that can be found in the LICENSE file. + +// ignore_for_file: do_not_use_environment + +import 'package:cloud_firestore/cloud_firestore.dart'; +import 'package:firebase_app_check/firebase_app_check.dart'; +import 'package:firebase_core/firebase_core.dart'; +import 'package:flutter/foundation.dart'; +import 'package:flutter/material.dart'; + +import 'firebase_options.dart'; + +const kWebRecaptchaSiteKey = '6Lemcn0dAAAAABLkf6aiiHvpGD6x-zF3nOSDU2M8'; + +// Windows: create a debug token in the Firebase Console +// (App Check > Apps > Manage debug tokens), then paste it here +// or set the APP_CHECK_DEBUG_TOKEN environment variable. +const kWindowsDebugToken = String.fromEnvironment( + 'APP_CHECK_DEBUG_TOKEN', + // ignore: avoid_redundant_argument_values + defaultValue: '', +); + +Future main() async { + WidgetsFlutterBinding.ensureInitialized(); + await Firebase.initializeApp( + options: DefaultFirebaseOptions.currentPlatform, + ); + + // Activate app check after initialization, but before + // usage of any Firebase services. + await FirebaseAppCheck.instance.activate( + providerWeb: kDebugMode + ? WebDebugProvider() + : ReCaptchaV3Provider(kWebRecaptchaSiteKey), + providerAndroid: const AndroidDebugProvider(), + providerApple: const AppleDebugProvider(), + // On Windows, only the debug provider is available. + // You must supply a debug token — the desktop C++ SDK does not + // auto-generate one. Create one in the Firebase Console under + // App Check > Apps > Manage debug tokens, then either: + // - pass it via --dart-define=APP_CHECK_DEBUG_TOKEN= + // - or set the APP_CHECK_DEBUG_TOKEN environment variable + providerWindows: WindowsDebugProvider( + debugToken: kWindowsDebugToken.isNotEmpty ? kWindowsDebugToken : null, + ), + ); + + runApp(MyApp()); +} + +class MyApp extends StatelessWidget { + final String title = 'Firebase App Check'; + + @override + Widget build(BuildContext context) { + return MaterialApp( + title: 'Firebase App Check', + home: FirebaseAppCheckExample(title: title), + ); + } +} + +class FirebaseAppCheckExample extends StatefulWidget { + FirebaseAppCheckExample({ + Key? key, + required this.title, + }) : super(key: key); + + final String title; + + @override + _FirebaseAppCheck createState() => _FirebaseAppCheck(); +} + +class _FirebaseAppCheck extends State { + final appCheck = FirebaseAppCheck.instance; + String _message = ''; + String _eventToken = 'not yet'; + + @override + void initState() { + appCheck.onTokenChange.listen(setEventToken); + super.initState(); + } + + void setMessage(String message) { + setState(() { + _message = message; + }); + } + + void setEventToken(String? token) { + setState(() { + _eventToken = token ?? 'not yet'; + }); + } + + Future _activate({ + AndroidAppCheckProvider? android, + AppleAppCheckProvider? apple, + WindowsAppCheckProvider? windows, + }) async { + try { + await appCheck.activate( + providerAndroid: android ?? const AndroidPlayIntegrityProvider(), + providerApple: apple ?? const AppleDeviceCheckProvider(), + providerWeb: ReCaptchaV3Provider(kWebRecaptchaSiteKey), + providerWindows: windows ?? const WindowsDebugProvider(), + ); + final providerName = windows?.runtimeType.toString() ?? + apple?.runtimeType.toString() ?? + android?.runtimeType.toString() ?? + 'default'; + setMessage('Activated with $providerName'); + } catch (e) { + setMessage('activate error: $e'); + } + } + + @override + Widget build(BuildContext context) { + return Scaffold( + appBar: AppBar( + title: Text(widget.title), + ), + body: SingleChildScrollView( + padding: const EdgeInsets.all(16), + child: Column( + crossAxisAlignment: CrossAxisAlignment.stretch, + children: [ + const Text( + 'Providers', + style: TextStyle(fontSize: 18, fontWeight: FontWeight.bold), + ), + const SizedBox(height: 8), + ElevatedButton( + onPressed: () => _activate( + android: const AndroidDebugProvider(), + apple: const AppleDebugProvider(), + windows: WindowsDebugProvider( + debugToken: + kWindowsDebugToken.isNotEmpty ? kWindowsDebugToken : null, + ), + ), + child: const Text('activate(Debug)'), + ), + ElevatedButton( + onPressed: () => _activate( + android: const AndroidPlayIntegrityProvider(), + apple: const AppleDeviceCheckProvider(), + ), + child: const Text('activate(PlayIntegrity / DeviceCheck)'), + ), + if (!kIsWeb) + ElevatedButton( + onPressed: () => _activate( + apple: const AppleAppAttestProvider(), + ), + child: const Text('activate(AppAttest)'), + ), + if (!kIsWeb) + ElevatedButton( + onPressed: () => _activate( + apple: const AppleAppAttestWithDeviceCheckFallbackProvider(), + ), + child: const Text( + 'activate(AppAttest + DeviceCheck fallback)', + ), + ), + const SizedBox(height: 16), + const Text( + 'Actions', + style: TextStyle(fontSize: 18, fontWeight: FontWeight.bold), + ), + const SizedBox(height: 8), + ElevatedButton( + onPressed: () async { + try { + final token = await appCheck.getToken(true); + setMessage('Token: ${token?.substring(0, 20)}...'); + } catch (e) { + setMessage('getToken error: $e'); + } + }, + child: const Text('getToken(forceRefresh: true)'), + ), + ElevatedButton( + onPressed: () async { + try { + final token = await appCheck.getLimitedUseToken(); + setMessage( + 'Limited use token: ${token.substring(0, 20)}...', + ); + } catch (e) { + setMessage('getLimitedUseToken error: $e'); + } + }, + child: const Text('getLimitedUseToken()'), + ), + ElevatedButton( + onPressed: () async { + await appCheck.setTokenAutoRefreshEnabled(true); + setMessage('Token auto-refresh enabled'); + }, + child: const Text('setTokenAutoRefreshEnabled(true)'), + ), + ElevatedButton( + onPressed: () async { + try { + final result = await FirebaseFirestore.instance + .collection('flutter-tests') + .limit(1) + .get(); + setMessage( + result.docs.isNotEmpty + ? 'Firestore: Document found' + : 'Firestore: No documents', + ); + } catch (e) { + setMessage('Firestore error: $e'); + } + }, + child: const Text('Test Firestore with App Check'), + ), + const SizedBox(height: 20), + Text( + _message, + style: const TextStyle( + color: Color.fromRGBO(47, 79, 79, 1), + fontSize: 16, + ), + ), + const SizedBox(height: 20), + Text( + 'Token from onTokenChange: $_eventToken', + style: const TextStyle( + color: Color.fromRGBO(128, 0, 128, 1), + fontSize: 14, + ), + ), + ], + ), + ), + ); + } +} diff --git a/mih_ui/android/build/ios/SourcePackages/firebase_app_check-0.4.5/example/macos/Flutter/Flutter-Debug.xcconfig b/mih_ui/android/build/ios/SourcePackages/firebase_app_check-0.4.5/example/macos/Flutter/Flutter-Debug.xcconfig new file mode 100644 index 00000000..4b81f9b2 --- /dev/null +++ b/mih_ui/android/build/ios/SourcePackages/firebase_app_check-0.4.5/example/macos/Flutter/Flutter-Debug.xcconfig @@ -0,0 +1,2 @@ +#include? "Pods/Target Support Files/Pods-Runner/Pods-Runner.debug.xcconfig" +#include "ephemeral/Flutter-Generated.xcconfig" diff --git a/mih_ui/android/build/ios/SourcePackages/firebase_app_check-0.4.5/example/macos/Flutter/Flutter-Release.xcconfig b/mih_ui/android/build/ios/SourcePackages/firebase_app_check-0.4.5/example/macos/Flutter/Flutter-Release.xcconfig new file mode 100644 index 00000000..5caa9d15 --- /dev/null +++ b/mih_ui/android/build/ios/SourcePackages/firebase_app_check-0.4.5/example/macos/Flutter/Flutter-Release.xcconfig @@ -0,0 +1,2 @@ +#include? "Pods/Target Support Files/Pods-Runner/Pods-Runner.release.xcconfig" +#include "ephemeral/Flutter-Generated.xcconfig" diff --git a/mih_ui/android/build/ios/SourcePackages/firebase_app_check-0.4.5/example/macos/Podfile b/mih_ui/android/build/ios/SourcePackages/firebase_app_check-0.4.5/example/macos/Podfile new file mode 100644 index 00000000..ff5ddb3b --- /dev/null +++ b/mih_ui/android/build/ios/SourcePackages/firebase_app_check-0.4.5/example/macos/Podfile @@ -0,0 +1,42 @@ +platform :osx, '10.15' + +# CocoaPods analytics sends network stats synchronously affecting flutter build latency. +ENV['COCOAPODS_DISABLE_STATS'] = 'true' + +project 'Runner', { + 'Debug' => :debug, + 'Profile' => :release, + 'Release' => :release, +} + +def flutter_root + generated_xcode_build_settings_path = File.expand_path(File.join('..', 'Flutter', 'ephemeral', 'Flutter-Generated.xcconfig'), __FILE__) + unless File.exist?(generated_xcode_build_settings_path) + raise "#{generated_xcode_build_settings_path} must exist. If you're running pod install manually, make sure \"flutter pub get\" is executed first" + end + + File.foreach(generated_xcode_build_settings_path) do |line| + matches = line.match(/FLUTTER_ROOT\=(.*)/) + return matches[1].strip if matches + end + raise "FLUTTER_ROOT not found in #{generated_xcode_build_settings_path}. Try deleting Flutter-Generated.xcconfig, then run \"flutter pub get\"" +end + +require File.expand_path(File.join('packages', 'flutter_tools', 'bin', 'podhelper'), flutter_root) + +flutter_macos_podfile_setup + +target 'Runner' do + use_frameworks! + + flutter_install_all_macos_pods File.dirname(File.realpath(__FILE__)) + target 'RunnerTests' do + inherit! :search_paths + end +end + +post_install do |installer| + installer.pods_project.targets.each do |target| + flutter_additional_macos_build_settings(target) + end +end diff --git a/mih_ui/android/build/ios/SourcePackages/firebase_app_check-0.4.5/example/macos/Runner.xcodeproj/project.pbxproj b/mih_ui/android/build/ios/SourcePackages/firebase_app_check-0.4.5/example/macos/Runner.xcodeproj/project.pbxproj new file mode 100644 index 00000000..c0dc3860 --- /dev/null +++ b/mih_ui/android/build/ios/SourcePackages/firebase_app_check-0.4.5/example/macos/Runner.xcodeproj/project.pbxproj @@ -0,0 +1,613 @@ +// !$*UTF8*$! +{ + archiveVersion = 1; + classes = { + }; + objectVersion = 54; + objects = { + +/* Begin PBXAggregateTarget section */ + 33CC111A2044C6BA0003C045 /* Flutter Assemble */ = { + isa = PBXAggregateTarget; + buildConfigurationList = 33CC111B2044C6BA0003C045 /* Build configuration list for PBXAggregateTarget "Flutter Assemble" */; + buildPhases = ( + 33CC111E2044C6BF0003C045 /* ShellScript */, + ); + dependencies = ( + ); + name = "Flutter Assemble"; + productName = FLX; + }; +/* End PBXAggregateTarget section */ + +/* Begin PBXBuildFile section */ + 25624AEC275E1E7900B1E491 /* GoogleService-Info.plist in Resources */ = {isa = PBXBuildFile; fileRef = 25624AEB275E1E7900B1E491 /* GoogleService-Info.plist */; }; + 335BBD1B22A9A15E00E9071D /* GeneratedPluginRegistrant.swift in Sources */ = {isa = PBXBuildFile; fileRef = 335BBD1A22A9A15E00E9071D /* GeneratedPluginRegistrant.swift */; }; + 33CC10F12044A3C60003C045 /* AppDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 33CC10F02044A3C60003C045 /* AppDelegate.swift */; }; + 33CC10F32044A3C60003C045 /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 33CC10F22044A3C60003C045 /* Assets.xcassets */; }; + 33CC10F62044A3C60003C045 /* MainMenu.xib in Resources */ = {isa = PBXBuildFile; fileRef = 33CC10F42044A3C60003C045 /* MainMenu.xib */; }; + 33CC11132044BFA00003C045 /* MainFlutterWindow.swift in Sources */ = {isa = PBXBuildFile; fileRef = 33CC11122044BFA00003C045 /* MainFlutterWindow.swift */; }; + 78A318202AECB46A00862997 /* FlutterGeneratedPluginSwiftPackage in Frameworks */ = {isa = PBXBuildFile; productRef = 78A3181F2AECB46A00862997 /* FlutterGeneratedPluginSwiftPackage */; }; +/* End PBXBuildFile section */ + +/* Begin PBXContainerItemProxy section */ + 33CC111F2044C79F0003C045 /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = 33CC10E52044A3C60003C045 /* Project object */; + proxyType = 1; + remoteGlobalIDString = 33CC111A2044C6BA0003C045; + remoteInfo = FLX; + }; +/* End PBXContainerItemProxy section */ + +/* Begin PBXCopyFilesBuildPhase section */ + 33CC110E2044A8840003C045 /* Bundle Framework */ = { + isa = PBXCopyFilesBuildPhase; + buildActionMask = 2147483647; + dstPath = ""; + dstSubfolderSpec = 10; + files = ( + ); + name = "Bundle Framework"; + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXCopyFilesBuildPhase section */ + +/* Begin PBXFileReference section */ + 0DC934EE60634F0D37DD0EC3 /* GoogleService-Info.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; name = "GoogleService-Info.plist"; path = "Runner/GoogleService-Info.plist"; sourceTree = ""; }; + 25624AEB275E1E7900B1E491 /* GoogleService-Info.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; path = "GoogleService-Info.plist"; sourceTree = ""; }; + 333000ED22D3DE5D00554162 /* Warnings.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = Warnings.xcconfig; sourceTree = ""; }; + 335BBD1A22A9A15E00E9071D /* GeneratedPluginRegistrant.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = GeneratedPluginRegistrant.swift; sourceTree = ""; }; + 33CC10ED2044A3C60003C045 /* firebase_app_check_example.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = firebase_app_check_example.app; sourceTree = BUILT_PRODUCTS_DIR; }; + 33CC10F02044A3C60003C045 /* AppDelegate.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AppDelegate.swift; sourceTree = ""; }; + 33CC10F22044A3C60003C045 /* Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; name = Assets.xcassets; path = Runner/Assets.xcassets; sourceTree = ""; }; + 33CC10F52044A3C60003C045 /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.xib; name = Base; path = Base.lproj/MainMenu.xib; sourceTree = ""; }; + 33CC10F72044A3C60003C045 /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; name = Info.plist; path = Runner/Info.plist; sourceTree = ""; }; + 33CC11122044BFA00003C045 /* MainFlutterWindow.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = MainFlutterWindow.swift; sourceTree = ""; }; + 33CEB47222A05771004F2AC0 /* Flutter-Debug.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = "Flutter-Debug.xcconfig"; sourceTree = ""; }; + 33CEB47422A05771004F2AC0 /* Flutter-Release.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = "Flutter-Release.xcconfig"; sourceTree = ""; }; + 33CEB47722A0578A004F2AC0 /* Flutter-Generated.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; name = "Flutter-Generated.xcconfig"; path = "ephemeral/Flutter-Generated.xcconfig"; sourceTree = ""; }; + 33E51913231747F40026EE4D /* DebugProfile.entitlements */ = {isa = PBXFileReference; lastKnownFileType = text.plist.entitlements; path = DebugProfile.entitlements; sourceTree = ""; }; + 33E51914231749380026EE4D /* Release.entitlements */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.entitlements; path = Release.entitlements; sourceTree = ""; }; + 33E5194F232828860026EE4D /* AppInfo.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = AppInfo.xcconfig; sourceTree = ""; }; + 7AFA3C8E1D35360C0083082E /* Release.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = Release.xcconfig; sourceTree = ""; }; + 9740EEB21CF90195004384FC /* Debug.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; path = Debug.xcconfig; sourceTree = ""; }; +/* End PBXFileReference section */ + +/* Begin PBXFrameworksBuildPhase section */ + 33CC10EA2044A3C60003C045 /* Frameworks */ = { + isa = PBXFrameworksBuildPhase; + buildActionMask = 2147483647; + files = ( + 78A318202AECB46A00862997 /* FlutterGeneratedPluginSwiftPackage in Frameworks */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXFrameworksBuildPhase section */ + +/* Begin PBXGroup section */ + 33BA886A226E78AF003329D5 /* Configs */ = { + isa = PBXGroup; + children = ( + 33E5194F232828860026EE4D /* AppInfo.xcconfig */, + 9740EEB21CF90195004384FC /* Debug.xcconfig */, + 7AFA3C8E1D35360C0083082E /* Release.xcconfig */, + 333000ED22D3DE5D00554162 /* Warnings.xcconfig */, + ); + path = Configs; + sourceTree = ""; + }; + 33CC10E42044A3C60003C045 = { + isa = PBXGroup; + children = ( + 33FAB671232836740065AC1E /* Runner */, + 33CEB47122A05771004F2AC0 /* Flutter */, + 33CC10EE2044A3C60003C045 /* Products */, + 74CB5F55BD11E25520F6FF45 /* Pods */, + 0DC934EE60634F0D37DD0EC3 /* GoogleService-Info.plist */, + ); + sourceTree = ""; + }; + 33CC10EE2044A3C60003C045 /* Products */ = { + isa = PBXGroup; + children = ( + 33CC10ED2044A3C60003C045 /* firebase_app_check_example.app */, + ); + name = Products; + sourceTree = ""; + }; + 33CC11242044D66E0003C045 /* Resources */ = { + isa = PBXGroup; + children = ( + 33CC10F22044A3C60003C045 /* Assets.xcassets */, + 33CC10F42044A3C60003C045 /* MainMenu.xib */, + 33CC10F72044A3C60003C045 /* Info.plist */, + ); + name = Resources; + path = ..; + sourceTree = ""; + }; + 33CEB47122A05771004F2AC0 /* Flutter */ = { + isa = PBXGroup; + children = ( + 335BBD1A22A9A15E00E9071D /* GeneratedPluginRegistrant.swift */, + 33CEB47222A05771004F2AC0 /* Flutter-Debug.xcconfig */, + 33CEB47422A05771004F2AC0 /* Flutter-Release.xcconfig */, + 33CEB47722A0578A004F2AC0 /* Flutter-Generated.xcconfig */, + ); + path = Flutter; + sourceTree = ""; + }; + 33FAB671232836740065AC1E /* Runner */ = { + isa = PBXGroup; + children = ( + 25624AEB275E1E7900B1E491 /* GoogleService-Info.plist */, + 33CC10F02044A3C60003C045 /* AppDelegate.swift */, + 33CC11122044BFA00003C045 /* MainFlutterWindow.swift */, + 33E51913231747F40026EE4D /* DebugProfile.entitlements */, + 33E51914231749380026EE4D /* Release.entitlements */, + 33CC11242044D66E0003C045 /* Resources */, + 33BA886A226E78AF003329D5 /* Configs */, + ); + path = Runner; + sourceTree = ""; + }; + 74CB5F55BD11E25520F6FF45 /* Pods */ = { + isa = PBXGroup; + children = ( + ); + path = Pods; + sourceTree = ""; + }; +/* End PBXGroup section */ + +/* Begin PBXNativeTarget section */ + 33CC10EC2044A3C60003C045 /* Runner */ = { + isa = PBXNativeTarget; + buildConfigurationList = 33CC10FB2044A3C60003C045 /* Build configuration list for PBXNativeTarget "Runner" */; + buildPhases = ( + 33CC10E92044A3C60003C045 /* Sources */, + 33CC10EA2044A3C60003C045 /* Frameworks */, + 33CC10EB2044A3C60003C045 /* Resources */, + 33CC110E2044A8840003C045 /* Bundle Framework */, + 3399D490228B24CF009A79C7 /* ShellScript */, + ); + buildRules = ( + ); + dependencies = ( + 33CC11202044C79F0003C045 /* PBXTargetDependency */, + ); + name = Runner; + packageProductDependencies = ( + 78A3181F2AECB46A00862997 /* FlutterGeneratedPluginSwiftPackage */, + ); + productName = Runner; + productReference = 33CC10ED2044A3C60003C045 /* firebase_app_check_example.app */; + productType = "com.apple.product-type.application"; + }; +/* End PBXNativeTarget section */ + +/* Begin PBXProject section */ + 33CC10E52044A3C60003C045 /* Project object */ = { + isa = PBXProject; + attributes = { + LastSwiftUpdateCheck = 0920; + LastUpgradeCheck = 1510; + ORGANIZATIONNAME = ""; + TargetAttributes = { + 33CC10EC2044A3C60003C045 = { + CreatedOnToolsVersion = 9.2; + LastSwiftMigration = 1100; + ProvisioningStyle = Automatic; + SystemCapabilities = { + com.apple.Sandbox = { + enabled = 1; + }; + }; + }; + 33CC111A2044C6BA0003C045 = { + CreatedOnToolsVersion = 9.2; + ProvisioningStyle = Manual; + }; + }; + }; + buildConfigurationList = 33CC10E82044A3C60003C045 /* Build configuration list for PBXProject "Runner" */; + compatibilityVersion = "Xcode 9.3"; + developmentRegion = en; + hasScannedForEncodings = 0; + knownRegions = ( + en, + Base, + ); + mainGroup = 33CC10E42044A3C60003C045; + packageReferences = ( + 781AD8BC2B33823900A9FFBB /* XCLocalSwiftPackageReference "FlutterGeneratedPluginSwiftPackage" */, + ); + productRefGroup = 33CC10EE2044A3C60003C045 /* Products */; + projectDirPath = ""; + projectRoot = ""; + targets = ( + 33CC10EC2044A3C60003C045 /* Runner */, + 33CC111A2044C6BA0003C045 /* Flutter Assemble */, + ); + }; +/* End PBXProject section */ + +/* Begin PBXResourcesBuildPhase section */ + 33CC10EB2044A3C60003C045 /* Resources */ = { + isa = PBXResourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + 33CC10F32044A3C60003C045 /* Assets.xcassets in Resources */, + 33CC10F62044A3C60003C045 /* MainMenu.xib in Resources */, + 25624AEC275E1E7900B1E491 /* GoogleService-Info.plist in Resources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXResourcesBuildPhase section */ + +/* Begin PBXShellScriptBuildPhase section */ + 3399D490228B24CF009A79C7 /* ShellScript */ = { + isa = PBXShellScriptBuildPhase; + alwaysOutOfDate = 1; + buildActionMask = 2147483647; + files = ( + ); + inputFileListPaths = ( + ); + inputPaths = ( + ); + outputFileListPaths = ( + ); + outputPaths = ( + ); + runOnlyForDeploymentPostprocessing = 0; + shellPath = /bin/sh; + shellScript = "echo \"$PRODUCT_NAME.app\" > \"$PROJECT_DIR\"/Flutter/ephemeral/.app_filename && \"$FLUTTER_ROOT\"/packages/flutter_tools/bin/macos_assemble.sh embed\n"; + }; + 33CC111E2044C6BF0003C045 /* ShellScript */ = { + isa = PBXShellScriptBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + inputFileListPaths = ( + Flutter/ephemeral/FlutterInputs.xcfilelist, + ); + inputPaths = ( + Flutter/ephemeral/tripwire, + ); + outputFileListPaths = ( + Flutter/ephemeral/FlutterOutputs.xcfilelist, + ); + outputPaths = ( + ); + runOnlyForDeploymentPostprocessing = 0; + shellPath = /bin/sh; + shellScript = "\"$FLUTTER_ROOT\"/packages/flutter_tools/bin/macos_assemble.sh && touch Flutter/ephemeral/tripwire"; + }; +/* End PBXShellScriptBuildPhase section */ + +/* Begin PBXSourcesBuildPhase section */ + 33CC10E92044A3C60003C045 /* Sources */ = { + isa = PBXSourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + 33CC11132044BFA00003C045 /* MainFlutterWindow.swift in Sources */, + 33CC10F12044A3C60003C045 /* AppDelegate.swift in Sources */, + 335BBD1B22A9A15E00E9071D /* GeneratedPluginRegistrant.swift in Sources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXSourcesBuildPhase section */ + +/* Begin PBXTargetDependency section */ + 33CC11202044C79F0003C045 /* PBXTargetDependency */ = { + isa = PBXTargetDependency; + target = 33CC111A2044C6BA0003C045 /* Flutter Assemble */; + targetProxy = 33CC111F2044C79F0003C045 /* PBXContainerItemProxy */; + }; +/* End PBXTargetDependency section */ + +/* Begin PBXVariantGroup section */ + 33CC10F42044A3C60003C045 /* MainMenu.xib */ = { + isa = PBXVariantGroup; + children = ( + 33CC10F52044A3C60003C045 /* Base */, + ); + name = MainMenu.xib; + path = Runner; + sourceTree = ""; + }; +/* End PBXVariantGroup section */ + +/* Begin XCBuildConfiguration section */ + 338D0CE9231458BD00FA5F75 /* Profile */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = 7AFA3C8E1D35360C0083082E /* Release.xcconfig */; + buildSettings = { + ALWAYS_SEARCH_USER_PATHS = NO; + CLANG_ANALYZER_NONNULL = YES; + CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE; + CLANG_CXX_LANGUAGE_STANDARD = "gnu++14"; + CLANG_CXX_LIBRARY = "libc++"; + CLANG_ENABLE_MODULES = YES; + CLANG_ENABLE_OBJC_ARC = YES; + CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES; + CLANG_WARN_BOOL_CONVERSION = YES; + CLANG_WARN_CONSTANT_CONVERSION = YES; + CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES; + CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; + CLANG_WARN_DOCUMENTATION_COMMENTS = YES; + CLANG_WARN_EMPTY_BODY = YES; + CLANG_WARN_ENUM_CONVERSION = YES; + CLANG_WARN_INFINITE_RECURSION = YES; + CLANG_WARN_INT_CONVERSION = YES; + CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES; + CLANG_WARN_OBJC_LITERAL_CONVERSION = YES; + CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; + CLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = YES; + CLANG_WARN_RANGE_LOOP_ANALYSIS = YES; + CLANG_WARN_SUSPICIOUS_MOVE = YES; + CODE_SIGN_IDENTITY = "-"; + COPY_PHASE_STRIP = NO; + DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; + ENABLE_NS_ASSERTIONS = NO; + ENABLE_STRICT_OBJC_MSGSEND = YES; + GCC_C_LANGUAGE_STANDARD = gnu11; + GCC_NO_COMMON_BLOCKS = YES; + GCC_WARN_64_TO_32_BIT_CONVERSION = YES; + GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; + GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; + GCC_WARN_UNUSED_FUNCTION = YES; + GCC_WARN_UNUSED_VARIABLE = YES; + MACOSX_DEPLOYMENT_TARGET = 10.15; + MTL_ENABLE_DEBUG_INFO = NO; + SDKROOT = macosx; + SWIFT_COMPILATION_MODE = wholemodule; + SWIFT_OPTIMIZATION_LEVEL = "-O"; + }; + name = Profile; + }; + 338D0CEA231458BD00FA5F75 /* Profile */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = 33E5194F232828860026EE4D /* AppInfo.xcconfig */; + buildSettings = { + ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; + CLANG_ENABLE_MODULES = YES; + CODE_SIGN_ENTITLEMENTS = Runner/DebugProfile.entitlements; + CODE_SIGN_IDENTITY = "-"; + CODE_SIGN_STYLE = Automatic; + COMBINE_HIDPI_IMAGES = YES; + INFOPLIST_FILE = Runner/Info.plist; + LD_RUNPATH_SEARCH_PATHS = ( + "$(inherited)", + "@executable_path/../Frameworks", + ); + MACOSX_DEPLOYMENT_TARGET = 10.15; + PRODUCT_BUNDLE_IDENTIFIER = io.flutter.plugins.firebase.appcheck.example; + PROVISIONING_PROFILE_SPECIFIER = ""; + SWIFT_VERSION = 5.0; + }; + name = Profile; + }; + 338D0CEB231458BD00FA5F75 /* Profile */ = { + isa = XCBuildConfiguration; + buildSettings = { + CODE_SIGN_STYLE = Manual; + PRODUCT_NAME = "$(TARGET_NAME)"; + }; + name = Profile; + }; + 33CC10F92044A3C60003C045 /* Debug */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = 9740EEB21CF90195004384FC /* Debug.xcconfig */; + buildSettings = { + ALWAYS_SEARCH_USER_PATHS = NO; + CLANG_ANALYZER_NONNULL = YES; + CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE; + CLANG_CXX_LANGUAGE_STANDARD = "gnu++14"; + CLANG_CXX_LIBRARY = "libc++"; + CLANG_ENABLE_MODULES = YES; + CLANG_ENABLE_OBJC_ARC = YES; + CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES; + CLANG_WARN_BOOL_CONVERSION = YES; + CLANG_WARN_CONSTANT_CONVERSION = YES; + CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES; + CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; + CLANG_WARN_DOCUMENTATION_COMMENTS = YES; + CLANG_WARN_EMPTY_BODY = YES; + CLANG_WARN_ENUM_CONVERSION = YES; + CLANG_WARN_INFINITE_RECURSION = YES; + CLANG_WARN_INT_CONVERSION = YES; + CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES; + CLANG_WARN_OBJC_LITERAL_CONVERSION = YES; + CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; + CLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = YES; + CLANG_WARN_RANGE_LOOP_ANALYSIS = YES; + CLANG_WARN_SUSPICIOUS_MOVE = YES; + CODE_SIGN_IDENTITY = "-"; + COPY_PHASE_STRIP = NO; + DEBUG_INFORMATION_FORMAT = dwarf; + ENABLE_STRICT_OBJC_MSGSEND = YES; + ENABLE_TESTABILITY = YES; + GCC_C_LANGUAGE_STANDARD = gnu11; + GCC_DYNAMIC_NO_PIC = NO; + GCC_NO_COMMON_BLOCKS = YES; + GCC_OPTIMIZATION_LEVEL = 0; + GCC_PREPROCESSOR_DEFINITIONS = ( + "DEBUG=1", + "$(inherited)", + ); + GCC_WARN_64_TO_32_BIT_CONVERSION = YES; + GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; + GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; + GCC_WARN_UNUSED_FUNCTION = YES; + GCC_WARN_UNUSED_VARIABLE = YES; + MACOSX_DEPLOYMENT_TARGET = 10.15; + MTL_ENABLE_DEBUG_INFO = YES; + ONLY_ACTIVE_ARCH = YES; + SDKROOT = macosx; + SWIFT_ACTIVE_COMPILATION_CONDITIONS = DEBUG; + SWIFT_OPTIMIZATION_LEVEL = "-Onone"; + }; + name = Debug; + }; + 33CC10FA2044A3C60003C045 /* Release */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = 7AFA3C8E1D35360C0083082E /* Release.xcconfig */; + buildSettings = { + ALWAYS_SEARCH_USER_PATHS = NO; + CLANG_ANALYZER_NONNULL = YES; + CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE; + CLANG_CXX_LANGUAGE_STANDARD = "gnu++14"; + CLANG_CXX_LIBRARY = "libc++"; + CLANG_ENABLE_MODULES = YES; + CLANG_ENABLE_OBJC_ARC = YES; + CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES; + CLANG_WARN_BOOL_CONVERSION = YES; + CLANG_WARN_CONSTANT_CONVERSION = YES; + CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES; + CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; + CLANG_WARN_DOCUMENTATION_COMMENTS = YES; + CLANG_WARN_EMPTY_BODY = YES; + CLANG_WARN_ENUM_CONVERSION = YES; + CLANG_WARN_INFINITE_RECURSION = YES; + CLANG_WARN_INT_CONVERSION = YES; + CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES; + CLANG_WARN_OBJC_LITERAL_CONVERSION = YES; + CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; + CLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = YES; + CLANG_WARN_RANGE_LOOP_ANALYSIS = YES; + CLANG_WARN_SUSPICIOUS_MOVE = YES; + CODE_SIGN_IDENTITY = "-"; + COPY_PHASE_STRIP = NO; + DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; + ENABLE_NS_ASSERTIONS = NO; + ENABLE_STRICT_OBJC_MSGSEND = YES; + GCC_C_LANGUAGE_STANDARD = gnu11; + GCC_NO_COMMON_BLOCKS = YES; + GCC_WARN_64_TO_32_BIT_CONVERSION = YES; + GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; + GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; + GCC_WARN_UNUSED_FUNCTION = YES; + GCC_WARN_UNUSED_VARIABLE = YES; + MACOSX_DEPLOYMENT_TARGET = 10.15; + MTL_ENABLE_DEBUG_INFO = NO; + SDKROOT = macosx; + SWIFT_COMPILATION_MODE = wholemodule; + SWIFT_OPTIMIZATION_LEVEL = "-O"; + }; + name = Release; + }; + 33CC10FC2044A3C60003C045 /* Debug */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = 33E5194F232828860026EE4D /* AppInfo.xcconfig */; + buildSettings = { + ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; + CLANG_ENABLE_MODULES = YES; + CODE_SIGN_ENTITLEMENTS = Runner/DebugProfile.entitlements; + CODE_SIGN_IDENTITY = "-"; + CODE_SIGN_STYLE = Automatic; + COMBINE_HIDPI_IMAGES = YES; + INFOPLIST_FILE = Runner/Info.plist; + LD_RUNPATH_SEARCH_PATHS = ( + "$(inherited)", + "@executable_path/../Frameworks", + ); + MACOSX_DEPLOYMENT_TARGET = 10.15; + PRODUCT_BUNDLE_IDENTIFIER = io.flutter.plugins.firebase.appcheck.example; + PROVISIONING_PROFILE_SPECIFIER = ""; + SWIFT_OPTIMIZATION_LEVEL = "-Onone"; + SWIFT_VERSION = 5.0; + }; + name = Debug; + }; + 33CC10FD2044A3C60003C045 /* Release */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = 33E5194F232828860026EE4D /* AppInfo.xcconfig */; + buildSettings = { + ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; + CLANG_ENABLE_MODULES = YES; + CODE_SIGN_ENTITLEMENTS = Runner/Release.entitlements; + CODE_SIGN_IDENTITY = "-"; + CODE_SIGN_STYLE = Automatic; + COMBINE_HIDPI_IMAGES = YES; + INFOPLIST_FILE = Runner/Info.plist; + LD_RUNPATH_SEARCH_PATHS = ( + "$(inherited)", + "@executable_path/../Frameworks", + ); + MACOSX_DEPLOYMENT_TARGET = 10.15; + PRODUCT_BUNDLE_IDENTIFIER = io.flutter.plugins.firebase.appcheck.example; + PROVISIONING_PROFILE_SPECIFIER = ""; + SWIFT_VERSION = 5.0; + }; + name = Release; + }; + 33CC111C2044C6BA0003C045 /* Debug */ = { + isa = XCBuildConfiguration; + buildSettings = { + CODE_SIGN_STYLE = Manual; + PRODUCT_NAME = "$(TARGET_NAME)"; + }; + name = Debug; + }; + 33CC111D2044C6BA0003C045 /* Release */ = { + isa = XCBuildConfiguration; + buildSettings = { + CODE_SIGN_STYLE = Automatic; + PRODUCT_NAME = "$(TARGET_NAME)"; + }; + name = Release; + }; +/* End XCBuildConfiguration section */ + +/* Begin XCConfigurationList section */ + 33CC10E82044A3C60003C045 /* Build configuration list for PBXProject "Runner" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + 33CC10F92044A3C60003C045 /* Debug */, + 33CC10FA2044A3C60003C045 /* Release */, + 338D0CE9231458BD00FA5F75 /* Profile */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; + 33CC10FB2044A3C60003C045 /* Build configuration list for PBXNativeTarget "Runner" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + 33CC10FC2044A3C60003C045 /* Debug */, + 33CC10FD2044A3C60003C045 /* Release */, + 338D0CEA231458BD00FA5F75 /* Profile */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; + 33CC111B2044C6BA0003C045 /* Build configuration list for PBXAggregateTarget "Flutter Assemble" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + 33CC111C2044C6BA0003C045 /* Debug */, + 33CC111D2044C6BA0003C045 /* Release */, + 338D0CEB231458BD00FA5F75 /* Profile */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; +/* End XCConfigurationList section */ + +/* Begin XCLocalSwiftPackageReference section */ + 781AD8BC2B33823900A9FFBB /* XCLocalSwiftPackageReference "FlutterGeneratedPluginSwiftPackage" */ = { + isa = XCLocalSwiftPackageReference; + relativePath = Flutter/ephemeral/Packages/FlutterGeneratedPluginSwiftPackage; + }; +/* End XCLocalSwiftPackageReference section */ + +/* Begin XCSwiftPackageProductDependency section */ + 78A3181F2AECB46A00862997 /* FlutterGeneratedPluginSwiftPackage */ = { + isa = XCSwiftPackageProductDependency; + productName = FlutterGeneratedPluginSwiftPackage; + }; +/* End XCSwiftPackageProductDependency section */ + }; + rootObject = 33CC10E52044A3C60003C045 /* Project object */; +} diff --git a/mih_ui/android/build/ios/SourcePackages/firebase_app_check-0.4.5/example/macos/Runner.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist b/mih_ui/android/build/ios/SourcePackages/firebase_app_check-0.4.5/example/macos/Runner.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist new file mode 100644 index 00000000..18d98100 --- /dev/null +++ b/mih_ui/android/build/ios/SourcePackages/firebase_app_check-0.4.5/example/macos/Runner.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist @@ -0,0 +1,8 @@ + + + + + IDEDidComputeMac32BitWarning + + + diff --git a/mih_ui/android/build/ios/SourcePackages/firebase_app_check-0.4.5/example/macos/Runner.xcodeproj/xcshareddata/xcschemes/Runner.xcscheme b/mih_ui/android/build/ios/SourcePackages/firebase_app_check-0.4.5/example/macos/Runner.xcodeproj/xcshareddata/xcschemes/Runner.xcscheme new file mode 100644 index 00000000..92a5c6f9 --- /dev/null +++ b/mih_ui/android/build/ios/SourcePackages/firebase_app_check-0.4.5/example/macos/Runner.xcodeproj/xcshareddata/xcschemes/Runner.xcscheme @@ -0,0 +1,105 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/mih_ui/android/build/ios/SourcePackages/firebase_app_check-0.4.5/example/macos/Runner.xcworkspace/contents.xcworkspacedata b/mih_ui/android/build/ios/SourcePackages/firebase_app_check-0.4.5/example/macos/Runner.xcworkspace/contents.xcworkspacedata new file mode 100644 index 00000000..21a3cc14 --- /dev/null +++ b/mih_ui/android/build/ios/SourcePackages/firebase_app_check-0.4.5/example/macos/Runner.xcworkspace/contents.xcworkspacedata @@ -0,0 +1,10 @@ + + + + + + + diff --git a/mih_ui/android/build/ios/SourcePackages/firebase_app_check-0.4.5/example/macos/Runner.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist b/mih_ui/android/build/ios/SourcePackages/firebase_app_check-0.4.5/example/macos/Runner.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist new file mode 100644 index 00000000..18d98100 --- /dev/null +++ b/mih_ui/android/build/ios/SourcePackages/firebase_app_check-0.4.5/example/macos/Runner.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist @@ -0,0 +1,8 @@ + + + + + IDEDidComputeMac32BitWarning + + + diff --git a/mih_ui/android/build/ios/SourcePackages/firebase_app_check-0.4.5/example/macos/Runner/AppDelegate.swift b/mih_ui/android/build/ios/SourcePackages/firebase_app_check-0.4.5/example/macos/Runner/AppDelegate.swift new file mode 100644 index 00000000..b3c17614 --- /dev/null +++ b/mih_ui/android/build/ios/SourcePackages/firebase_app_check-0.4.5/example/macos/Runner/AppDelegate.swift @@ -0,0 +1,13 @@ +import Cocoa +import FlutterMacOS + +@main +class AppDelegate: FlutterAppDelegate { + override func applicationShouldTerminateAfterLastWindowClosed(_ sender: NSApplication) -> Bool { + return true + } + + override func applicationSupportsSecureRestorableState(_ app: NSApplication) -> Bool { + return true + } +} diff --git a/mih_ui/android/build/ios/SourcePackages/firebase_app_check-0.4.5/example/macos/Runner/Assets.xcassets/AppIcon.appiconset/Contents.json b/mih_ui/android/build/ios/SourcePackages/firebase_app_check-0.4.5/example/macos/Runner/Assets.xcassets/AppIcon.appiconset/Contents.json new file mode 100644 index 00000000..a2ec33f1 --- /dev/null +++ b/mih_ui/android/build/ios/SourcePackages/firebase_app_check-0.4.5/example/macos/Runner/Assets.xcassets/AppIcon.appiconset/Contents.json @@ -0,0 +1,68 @@ +{ + "images" : [ + { + "size" : "16x16", + "idiom" : "mac", + "filename" : "app_icon_16.png", + "scale" : "1x" + }, + { + "size" : "16x16", + "idiom" : "mac", + "filename" : "app_icon_32.png", + "scale" : "2x" + }, + { + "size" : "32x32", + "idiom" : "mac", + "filename" : "app_icon_32.png", + "scale" : "1x" + }, + { + "size" : "32x32", + "idiom" : "mac", + "filename" : "app_icon_64.png", + "scale" : "2x" + }, + { + "size" : "128x128", + "idiom" : "mac", + "filename" : "app_icon_128.png", + "scale" : "1x" + }, + { + "size" : "128x128", + "idiom" : "mac", + "filename" : "app_icon_256.png", + "scale" : "2x" + }, + { + "size" : "256x256", + "idiom" : "mac", + "filename" : "app_icon_256.png", + "scale" : "1x" + }, + { + "size" : "256x256", + "idiom" : "mac", + "filename" : "app_icon_512.png", + "scale" : "2x" + }, + { + "size" : "512x512", + "idiom" : "mac", + "filename" : "app_icon_512.png", + "scale" : "1x" + }, + { + "size" : "512x512", + "idiom" : "mac", + "filename" : "app_icon_1024.png", + "scale" : "2x" + } + ], + "info" : { + "version" : 1, + "author" : "xcode" + } +} diff --git a/mih_ui/android/build/ios/SourcePackages/firebase_app_check-0.4.5/example/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_1024.png b/mih_ui/android/build/ios/SourcePackages/firebase_app_check-0.4.5/example/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_1024.png new file mode 100644 index 0000000000000000000000000000000000000000..3c4935a7ca84f0976aca34b7f2895d65fb94d1ea GIT binary patch literal 46993 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 literal 0 HcmV?d00001 diff --git a/mih_ui/android/build/ios/SourcePackages/firebase_app_check-0.4.5/example/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_128.png b/mih_ui/android/build/ios/SourcePackages/firebase_app_check-0.4.5/example/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_128.png new file mode 100644 index 0000000000000000000000000000000000000000..ed4cc16421680a50164ba74381b4b35ceaa0ccfc GIT binary patch literal 3276 zcmZ`*X*|?x8~)E?#xi3t91%vcMKbnsIy2_j%QE2ziLq8HEtbf{7%?Q-9a%z_Y^9`> zEHh*&vUG%uWkg7pKTS-`$veH@-Vg8ZdG7oAJ@<88AMX3Z{d}TU-4*=KI1-hF6u>DKF2moPt09c{` zfN3rO$X+gJI&oA$AbgKoTL8PiPI1eFOhHBDvW+$&oPl1s$+O5y3$30Jx9nC_?fg%8Om)@;^P;Ee~8ibejUNlSR{FL7-+ zCzU}3UT98m{kYI^@`mgCOJ))+D#erb#$UWt&((j-5*t1id2Zak{`aS^W*K5^gM02# zUAhZn-JAUK>i+SNuFbWWd*7n1^!}>7qZ1CqCl*T+WoAy&z9pm~0AUt1cCV24f z3M@&G~UKrjVHa zjcE@a`2;M>eV&ocly&W3h{`Kt`1Fpp?_h~9!Uj5>0eXw@$opV(@!pixIux}s5pvEqF5$OEMG0;c zAfMxC(-;nx_`}8!F?OqK19MeaswOomKeifCG-!9PiHSU$yamJhcjXiq)-}9`M<&Au|H!nKY(0`^x16f205i2i;E%(4!?0lLq0sH_%)Wzij)B{HZxYWRl3DLaN5`)L zx=x=|^RA?d*TRCwF%`zN6wn_1C4n;lZG(9kT;2Uhl&2jQYtC1TbwQlP^BZHY!MoHm zjQ9)uu_K)ObgvvPb}!SIXFCtN!-%sBQe{6NU=&AtZJS%}eE$i}FIll!r>~b$6gt)V z7x>OFE}YetHPc-tWeu!P@qIWb@Z$bd!*!*udxwO6&gJ)q24$RSU^2Mb%-_`dR2`nW z)}7_4=iR`Tp$TPfd+uieo)8B}Q9#?Szmy!`gcROB@NIehK|?!3`r^1>av?}e<$Qo` zo{Qn#X4ktRy<-+f#c@vILAm;*sfS}r(3rl+{op?Hx|~DU#qsDcQDTvP*!c>h*nXU6 zR=Un;i9D!LcnC(AQ$lTUv^pgv4Z`T@vRP3{&xb^drmjvOruIBJ%3rQAFLl7d9_S64 zN-Uv?R`EzkbYIo)af7_M=X$2p`!u?nr?XqQ_*F-@@(V zFbNeVEzbr;i2fefJ@Gir3-s`syC93he_krL1eb;r(}0yUkuEK34aYvC@(yGi`*oq? zw5g_abg=`5Fdh1Z+clSv*N*Jifmh&3Ghm0A=^s4be*z5N!i^FzLiShgkrkwsHfMjf z*7&-G@W>p6En#dk<^s@G?$7gi_l)y7k`ZY=?ThvvVKL~kM{ehG7-q6=#%Q8F&VsB* zeW^I zUq+tV(~D&Ii_=gn-2QbF3;Fx#%ajjgO05lfF8#kIllzHc=P}a3$S_XsuZI0?0__%O zjiL!@(C0$Nr+r$>bHk(_oc!BUz;)>Xm!s*C!32m1W<*z$^&xRwa+AaAG= z9t4X~7UJht1-z88yEKjJ68HSze5|nKKF9(Chw`{OoG{eG0mo`^93gaJmAP_i_jF8a z({|&fX70PXVE(#wb11j&g4f{_n>)wUYIY#vo>Rit(J=`A-NYYowTnl(N6&9XKIV(G z1aD!>hY!RCd^Sy#GL^0IgYF~)b-lczn+X}+eaa)%FFw41P#f8n2fm9=-4j7}ULi@Z zm=H8~9;)ShkOUAitb!1fvv%;2Q+o)<;_YA1O=??ie>JmIiTy6g+1B-1#A(NAr$JNL znVhfBc8=aoz&yqgrN|{VlpAniZVM?>0%bwB6>}S1n_OURps$}g1t%)YmCA6+5)W#B z=G^KX>C7x|X|$~;K;cc2x8RGO2{{zmjPFrfkr6AVEeW2$J9*~H-4~G&}~b+Pb}JJdODU|$n1<7GPa_>l>;{NmA^y_eXTiv z)T61teOA9Q$_5GEA_ox`1gjz>3lT2b?YY_0UJayin z64qq|Nb7^UhikaEz3M8BKhNDhLIf};)NMeS8(8?3U$ThSMIh0HG;;CW$lAp0db@s0 zu&jbmCCLGE*NktXVfP3NB;MQ>p?;*$-|htv>R`#4>OG<$_n)YvUN7bwzbWEsxAGF~ zn0Vfs?Dn4}Vd|Cf5T-#a52Knf0f*#2D4Lq>-Su4g`$q={+5L$Ta|N8yfZ}rgQm;&b z0A4?$Hg5UkzI)29=>XSzdH4wH8B@_KE{mSc>e3{yGbeiBY_+?^t_a#2^*x_AmN&J$ zf9@<5N15~ty+uwrz0g5k$sL9*mKQazK2h19UW~#H_X83ap-GAGf#8Q5b8n@B8N2HvTiZu&Mg+xhthyG3#0uIny33r?t&kzBuyI$igd`%RIcO8{s$$R3+Z zt{ENUO)pqm_&<(vPf*$q1FvC}W&G)HQOJd%x4PbxogX2a4eW-%KqA5+x#x`g)fN&@ zLjG8|!rCj3y0%N)NkbJVJgDu5tOdMWS|y|Tsb)Z04-oAVZ%Mb311P}}SG#!q_ffMV z@*L#25zW6Ho?-x~8pKw4u9X)qFI7TRC)LlEL6oQ9#!*0k{=p?Vf_^?4YR(M z`uD+8&I-M*`sz5af#gd$8rr|oRMVgeI~soPKB{Q{FwV-FW)>BlS?inI8girWs=mo5b18{#~CJz!miCgQYU>KtCPt()StN;x)c2P3bMVB$o(QUh z$cRQlo_?#k`7A{Tw z!~_YKSd(%1dBM+KE!5I2)ZZsGz|`+*fB*n}yxtKVyx14Ba#1H&(%P{RubhEf9thF1v;3|2E37{m+a>GbI`Jdw*pGcA%L+*Q#&*YQOJ$_%U#(BDn``;rKxi&&)LfRxIZ*98z8UWRslDo@Xu)QVh}rB>bKwe@Bjzwg%m$hd zG)gFMgHZlPxGcm3paLLb44yHI|Ag0wdp!_yD5R<|B29Ui~27`?vfy#ktk_KyHWMDA42{J=Uq-o}i z*%kZ@45mQ-Rw?0?K+z{&5KFc}xc5Q%1PFAbL_xCmpj?JNAm>L6SjrCMpiK}5LG0ZE zO>_%)r1c48n{Iv*t(u1=&kH zeO=ifbFy+6aSK)V_5t;NKhE#$Iz=+Oii|KDJ}W>g}0%`Svgra*tnS6TRU4iTH*e=dj~I` zym|EM*}I1?pT2#3`oZ(|3I-Y$DkeHMN=8~%YSR?;>=X?(Emci*ZIz9+t<|S1>hE8$ zVa1LmTh{DZv}x6@Wz!a}+qZDz%AHHMuHCzM^XlEpr!QPzf9QzkS_0!&1MPx*ICxe}RFdTH+c}l9E`G zYL#4+3Zxi}3=A!G4S>ir#L(2r)WFKnP}jiR%D`ZOPH`@ZhTQy=%(P0}8ZH)|z6jL7 N;OXk;vd$@?2>?>Ex^Vyi literal 0 HcmV?d00001 diff --git a/mih_ui/android/build/ios/SourcePackages/firebase_app_check-0.4.5/example/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_256.png b/mih_ui/android/build/ios/SourcePackages/firebase_app_check-0.4.5/example/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_256.png new file mode 100644 index 0000000000000000000000000000000000000000..bcbf36df2f2aaaa0a63c7dabc94e600184229d0d GIT binary patch literal 5933 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 f$KZHO*s&vt|9^w-6P?|#0pRK8NSwWJ?9znhg z3{`3j3=J&|48MRv4KElNN(~qoUL`OvSj}Ky5HFasE6@fg!ItFh?!xdN1Q+aGJ{c&& zS>O>_%)r1c48n{Iv*t(u1=&kHeO=ifbFy+6aSK)V_AxLppYn8Z42d|rc6w}vOsL55 z`t&mC&y2@JTEyg!eDiFX^k#CC!jq%>erB=yHqUP0XcDOTw6ko}L zX;EmMrq(fKk*eygEuA616;0)>@A{TK|55PV@70 z$OfzS*(VJxQev3J?yY?O=ul(v`fp}?u9z`JK3ugibK>)DyCwImZOF4d{xK%%Ks1*} zv$oa)9anR%lXIBUqYnhLmT>VOzHfNP?ZwJNZ!5$s9M08RynIvaXw>@G^T9@r9^KH1 zVy??F&uuk)bH9Y4pQY!hP58i_H6 znl-NcuCpLV6ZWU;4C zu@9exF&OZi`Bovq_m%T+WhU2kvkz@^_LpycBvqm3bMpLw8X-Or5sL>0AKE1$(k_L=_Zc=CUq#=x1-QZf)G7nHu@fmsQ1eN_N3+nTEz`4HI4Z6uVlE zJH+X&det8JU?tO?upcM4Z=cV!JV;yF>FfL5Q$M|W_2Z!P`S=}Wzp|_1^#d%e?_H`> zV@%vA$+bFVqhw9`U;TfP|5|PD{||OiYdor8P*i??|NJcb%kzT_73*7WE?Ua5hAnR2 z=7WE=PhTlJ#ZeRznjTUb;`E(wkMZrj4e|Hilz-mK>9cZHQY**5TUPw~u}k;u73KI}xAx!0m-)GVia|x^d3p~s_9gh83jA&Ra<8rM%`>U3x69t&NzbwWY}7Ar?)FK#IZ0z|d0H0EkRO w3{9;}4Xg|ebq&m|3=9_N6z8I7$jwj5OsmAL;bP(Gi$Dzwp00i_>zopr02+f8CIA2c literal 0 HcmV?d00001 diff --git a/mih_ui/android/build/ios/SourcePackages/firebase_app_check-0.4.5/example/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_512.png b/mih_ui/android/build/ios/SourcePackages/firebase_app_check-0.4.5/example/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_512.png new file mode 100644 index 0000000000000000000000000000000000000000..e71a726136a47ed24125c7efc79d68a4a01961b4 GIT binary patch literal 14800 zcmZ{Lc|26@`~R6Crm_qwyCLMMh!)vm)F@HWt|+6V6lE=CaHfcnn4;2x(VilEl9-V} zsce-cGK|WaF}4{T=lt&J`Fy_L-|vs#>v^7+XU=`!*L|PszSj43o%o$Dj`9mM7C;ar z@3hrnHw59q|KcHn4EQr~{_70*BYk4yj*SqM&s>NcnFoIBdT-sm1A@YrK@dF#f+SPu z{Sb8441xx|AjtYQ1gQq5z1g(^49Fba=I8)nl7BMGpQeB(^8>dY41u79Dw6+j(A_jO z@K83?X~$;S-ud$gYZfZg5|bdvlI`TMaqs!>e}3%9HXev<6;dZZT8Yx`&;pKnN*iCJ z&x_ycWo9{*O}Gc$JHU`%s*$C%@v73hd+Mf%%9ph_Y1juXamcTAHd9tkwoua7yBu?V zgROzw>LbxAw3^;bZU~ZGnnHW?=7r9ZAK#wxT;0O<*z~_>^uV+VCU9B@)|r z*z^v>$!oH7%WZYrwf)zjGU|(8I%9PoktcsH8`z^%$48u z(O_}1U25s@Q*9{-3O!+t?w*QHo;~P99;6-KTGO{Cb#ADDYWF!eATsx{xh-!YMBiuE z%bJc7j^^B$Sa|27XRxg(XTaxWoFI}VFfV>0py8mMM;b^vH}49j;kwCA+Lw=q8lptk z?Pe`{wHI39A&xYkltf5*y%;-DF>5v`-lm0vydYtmqo0sClh5ueHCLJ+6$0y67Z zO-_LCT|JXi3tN7fB-!0_Kn#I+=tyUj87uR5*0>|SZ zy3x2;aql87`{aPZ@UbBwY0;Z-a*lYL90YApOAMKur7YgOiqA~Cne6%b&{V-t>Am2c z{eyEuKl!GsA*jF2H_gvX?bP~v46%3ax$r~B$HnZQ;UiCmRl`ROK8v>;Zs~upH9}qu1ZA3kn-AY2k2@CaH=Qh7K6`nU z3ib(Bk%H*^_omL6N4_G5NpY20UXGi}a$!}#lf<&J4~nhRwRM5cCB3Zvv#6+N1$g@W zj9?qmQ`zz-G9HTpoNl~bCOaEQqlTVYi7G0WmB5E34;f{SGcLvFpOb`+Zm)C(wjqLA z2;+nmB6~QDXbxZGWKLt38I%X$Q!;h zup9S~byxKv=$x|^YEV;l0l67jH~E8BU45ft_7xomac-48oq4PZpSNJbw<7DTM4mmz z!$)z#04cy%b8w@cOvjmb36o;gwYIOLwy+{I#3dJj#W4QdOWwJQ2#20AL49`hSFUa7 zFNAN3OD==G3_kbr1d96>l`_cI`<=thKNh5>hgg7FV>5TfC6d#u)9BNXi@p1K*;2Is zz+x;l4GbSt#*%>1iq}jGIebXYJY5;PGG0y(^{>SSuZY89aL`sDghOM&&pyP6ABJ#w zYwK~4^1eUQD)4!GL>`zrWeHV z-W!6JZbW*Ngo;Edhp_cOysYr!uhKS}vIg_UC}x z=jXxQfV@4B3`5 z!u#byBVXV5GtrSx_8bnT@iKv=Uc6n)Zpa`<9N>+!J~Loxptl5$Z`!u<3a)-+P)say z#=jc7^mJzPMI2;yMhCmN7YN78E7-^S(t8E}FklC;z|4PL{bO|JieM#p1mBjwyZMEm zkX^A1RXPGeS2YqtPMX~~t^$~oeFfWAU#jVLi%Z@l2hle^3|e(q?(uS=BVauF?VF{j z(owKLJuze;_@5p1OtRyrT`EFXf)NfMYb-)E8RVVdr<@}M>4R&~P=;B`c1L%o|8YfB z-a(LB-i8jc5!&B5cowyI2~M^YID&@Xt(D9v{|DB z959W z*vEA77fh3*w*UJ`4Y(bxsoEy6hm7_Wc5gT0^cvso%Ow>9<&@9Q>mxb6-^pv)5yc>n zQ~^!qY(lPQ1EDGkr%_*y*D8T^YbCa52^MVqYpTLhgJ;N5PfCQ{SXk|plD#Sm+g4c- zFeL2Dih35W4{_qb75U`4Rb#S0FEo%F85dOhXSX0huPOxdAid{&p6P;+9}I)XU7^=3RZu9M(g0dLyz_7$8K{`AddBLOfU&B_QNHtmsnNXq`hy~% zvJ{vtz~Yt9X|o}5vXX)9ZCHaRq8iAb zUDj8%(MpzJN39LferYKvIc!)z^5T-eW@j3h9a6d%WZ!%@2^@4+6%Z9W1GHZbOj|sb z0cU$}*~G$fYvDC|XulSC_;m}?KC2jg5pxES$Bt!hA|@EX*2+O!UEb5sn_^d>z;>;r~ zmO3BivdXboPY*}amsO&`xk|e)S*u=`o67MC(1WTB;OwG+ua4UV7T5Wvy%?U{Pa5cO zMoLG>#@chO{Oc72XPyX8f3jC7P`$j4$)0wc(b50COaDP3_Cm}aPAglUa7kRXAqmo5 z0KDD7G>Gmnpons40WJNYn+pxko92GXy@PvSErKE-Ou3)3UiRr7!L4+0%+5}sD{bf)uj^ounQ-Yn2%%JoZ%FjUv%yjS?Ks4u_88Jh%tNliYW~817IV@fqd1T zi(?;Fv-s3rQEn=9G*E-QzSl%YS|^fe*yn}Aqh!&P<5%#oB?*{wZMa5$PYa*A{VA8! zbOfS1W!W}cTo%g~iP$>WhE_x7#O4?h$jq=>{M77>bTAK_ z6uU0tl6HARboGi}=4krr6WP`9`aAt&P5ON1v(+H{T?jZuJ}B{L-=z3VX)}mZwzrqH zpf?T!k&$?{&{0_p>b`kdJbSb(p~tFcuG4zh6}hfl@ues6CfJu<-P+!>FlYMlD_3!E z9$6VE==tlxNYe(s;@8@+4c4jQ$R2g8t0QwE>Et|)5)@kJj6^yaqFYY?0LEM2C!+7+ z+FN|UxR1GCy1KA`{T_%24U+Vserchr5h`;U7TZPr@43x#MMN{@vV?KSII}R@5k`7cVK}E;c)$f~_{ZLDOoL|-01p~oafxi4F zG$?Wha&a*rTnz-nTI-bAJ*SLb!5(L!#iRdvLEyo>7D_=H78-qZrm=6{hkUR{tR{H! z`ZTOV$Oi6^qX5=_{f}V9h}WJAO%h9)kEUF#*-JyYDbOGZ>Nfs%7L}4p zopIul&&Bbn!C9o83ypC6W4F$X=_|pex$V4!Whm#48Wfm3*oAW0Gc&#&b+oq<8>aZR z2BLpouQQwyf$aHpQUK3pMRj(mS^^t#s$IC3{j*m9&l7sQt@RU{o_}N-xI_lh`rND^ zX~-8$o(;p^wf3_5-WZ^qgW`e8T@37{`J)e2KJdSSCUpX6KZu0Ga&U*+u3*PDAs1uK zpl)40+fROA@Vo#vK?^@Pq%w8DO9HdfmH+~vNinZ$5GRz?sD|k246NepqZd`>81P^P z#x#3kUS-}x4k%&~iEUrsb&-X#_;;?y9oCP4crMkC`=q58#NxQ| z*NXNA;GR4X=GiGXwab5=&M3j04fQw%2UxM`S(aE)_PlgJttBX96$$lY@Q%0xV^IbcHqzw^Uk&E=vFB;EQ@kzVIeM8lDIW_Q_ zrfy)l6s2QBApF;J2xTD_@wuNMlwDfsdfMyzRq)<>qG{M)Yt}9F1{1HaI_X7=F=7>& zYB54VaKlxu0lIgS;Ac&25Aw(tcf@K~(cvPi8(OChzhlYp6}#<_MVhU95sD&)n0FtL zmxm4w$~s(S9jmHOgyovpG!x4uLfJsMsJn^QMraKAa1Ix?{zkV!a7{f%-!u2{NqZ&) zo+^XB`eFQ4 zk-(;_>T#pTKyvW${yL|XXbcv?CE2Tp<3(PjeXhu^Jrp6^Mj}lg_)jamK{g;C+q^Da ztb!gV!q5)B7G1%lVanA2b>Xs?%hzCgJ{Hc!ldr9dnz7k^xG#4pDpr|0ZmxxiUVl}j zbD_rg3yAFQ>nnc)0>71D==715jRj4XsRb2#_lJoSOwky&c4957V-|m)@>b^Nak1!8 z@DsIOS8>Oe^T>tgB)WX3Y^I^65Uae+2M;$RxX_C)Aoo0dltvoRRIVQkpnegWj;D#G z+TwFIRUN%bZW3(K{8yN8!(1i0O!X3YN?Zo08L5D~)_tWQA8&|CvuQb8Od?p_x=GMF z-B@v9iNLYS1lUsbb`!%f5+1ev8RFPk7xyx5*G;ybRw(PW*yEZ$unu2`wpH)7b@ZXEz4Jr{?KZKYl!+3^)Q z)~^g?KlPGtT!{yQU&(Z&^rVjPu>ueeZN86AnhRwc)m|;5NvM&W3xD%n`+Hjg5$e8M zKh1Ju82L~&^ z-IQ5bYhsjqJfr38iwi~8<{oeREh|3l)*Enj4&Q$+mM$15YqwXeufK9P^(O=pj=F-1 zD+&REgwY~!W#ZPccSEi(*jiKJ5)Q|zX;hP}S2T9j_);epH9JQs{n>RG}{Nak)vIbfa zFQm?H;D+tzrBN2)6{?Mo%fzN6;6d_h0Qyn61)+XT63=!T*WQyRUoB_x0_)Ir`$FtS zak07C(mOaWN5m%bk?F9X&@mEVKN%{R6obt(9qw&p>w&p;R*l2th9$D^*`pC}NmB+v z>bk;OJ(C8p$G;jNvRsBbt=a!!tKnjJ`9*yQFgjEN1HcC<&>u9aStT3>Oq=MOQV!#WOZ6{cv$YVmlJdovPRV}<=IZUPeBVh5DC z91-?kimq3JUr;UMQ@0?h52gupvG=~(5AVdP(2(%*sL8!#K1-L$9B7MrWGdt(h&whR@vz~0oEHF8u3U1Q zdGdaIytJj4x@eF*E+^zgi{nPCA8tkjN}UoR8WhDzM3-zLqx0z?2tTdDKyENM={fp8VC@3Dt`AiK$;K#H$K2{08mrHG%jgEOLX3MCsG>afZm_0mLPS4jmYUJp~Dm! z5AUe_vEaOAT3zWdwl#cLvqwd1^lwW?gt7(92wEsOE6c#<0}{szFV4(uO70?3>=((! zQr}1{J?Wx2ZmjxYL_8OB*m&mimfojzYn~PiJ2g8R&ZRx-i^yF#sdhEWXAUIZ@J?T$ zs3PgT2<&Ki>Bob_n(@S>kUIvE+nY~ti9~6j;O9VAG#{oZ!DZCW)}i6iA!Tgsyz+hC z1VVyvbQ_nwgdZSEP=U4d#U`2*`e~d4y8uM4Bcmm%!jidaee#4WqN!ZnlBmbYpuaO! z!rU3`Kl2 z0O7PD&fQ|_b)Ub!g9^s;C2e>1i*2&?1$6yEn?~Y zI)-WIN8N(5s9;grW+J@K@I%g#?G&hzmlgV=L}ZA{f>3YCMx^P{u@c5Z;U1qmdk#)L zvX6z1!sL>+@vxO8qVn#k3YxYi?8ggV){?Rn@j$+Fd4-QkuH1@)j#3-=f82GZ!nl~{ zzZ(?kO`ANttVeHSo%xmH!NmNZECh*{s!-8S>ALoe5xOPs>|P5BbUmP@rlV8`d(c=7 zypcpLaI*FM^;GM%@q`GAb8kO`$oE|R48yn)?p(c1t>5;Wwn5r6ck&uw4}TnT80jI`IS~J%q8CpaVgIze<8IykSpVBg8~E! zW_tGqB;GO47r_er05y+Kwrcn{VLxL*1;HMv@*sd}MB6DH4zaP~u4Y;>@Nw7?F8S?c zfVIY(^ntnGgWlD|idzGz$Y+Oh(Ra=&VIf4!K2W*a)(%5%78s}8qxOknAGtDAq+HMO zM+Nu;0OgQRn36 zA@~a8`uVQ~v9?d!BxnsVaB-z-djypO44BjQAmg7&eVoaew|~)wH$SgefJ2$7_RiY+ z_7ACGoFM6Lhvho+eUG@pU&0X(Uy(*j;9pr?ET?FHTXadlfXC|MReZoU5>AG`mTM<% zc~*I@E*u0|hwVTdFA~4^b2VT7_~}~tCueNY{de3og=ASFQ`)0dhC2~Ne<}}Rc?ptA zi}+bQE%N9o*hpSUMH)9xt%Zlz&^p&5=cW}{m#f85iVX64^{!(vhClT<I)+c)RuiyrZqIw4v`z%YK&;_Fh4_+0B?qAGxMfAM`LzG_bjD>ib4;KGT4_1I>sxvL&&qp40ajgQOqIE^9=Az4w#ymo)bW-Vg{T!n=l&|nR_ zw+wcH|FxUH63)~{M;goHepmD{Fe?W9sO|eJP9L$G<{e_7FxxuXQ+)(Z^@;X8I1=%k zTK$gbHA1^4W<`q~ubQ0M_C^CA5#Z&*nGc(T?4Y_2jLu&FJDQYpCSiRny->$+nC9Jl z?avTW`ZXYT51%SrEq!}dXNM&!pM6nmL^lce=%S7{_TS)ckN8;{p*LT~LMgmlE~dpL zEBQy-jDj%cSK6N3)|CCR0LQ$N6iDM~+-1Oz|LAdkip(VZcO`gqCuJ+(Mm{m6@P%_; zBtF|MMVMP;E`5NJ{&@4j^JE5j&}(Jq{lCGL(P^#uqvbD`2)FVyfNgy|pvT!XY;02Z zZWbgGsvi6#!*$Zxwd{Xk6_M{+^yV_K@%_SAW(x)Lg|*AuG-%g2#GQYk8F?W&8|2dU z;00ppzrQnnYXnT`(S%_qF2#QNz&@Y$zcq+O8p>Gto2&4z8(^#cY?DuQwBQP4Fe?qUK_-yh4xT{8O@gb`uh` z>Q%jrgPAnANn4_)->n;w{Mei#J)F+`12&+-MLKSRzF6bL3;4O~oy~v7 zL0K-=m?>>(^qDCgvFRLBI@`04EGdTxe5}xBg#7#Wb!aUED;?5BLDEvZ@tai4*Rh8& z4V)cOr}DJ0&(FjWH%50Y+&=WtB42^eEVsmaHG)Il#j265oK&Bot(+-IIn`6InmuE# z;)qXs+X{fSb8^rYb#46X5?KCzH9X0>ppBQi(aKS--;4yA%0N|D<#8RZlOS(8n26=u zv~y;KC>`ypW=aqj`&x9 z0Zm>NKp}hPJu1+QDo(_U(Gt0SZ`IJWnp%QK`pye>Bm!w{sG>;VU^2 z4lZhV1}tCE8(?zu#j99|l3-qRBcz3bG+DlyxPGB$^6B^ssc_qYQ6lG0q~EAI?1$?( zahfn%etVvuKwB7R=>JDQluP97nLDM6*5;b0Ox#b{4nIgZA*+?IvyDN{K9WGnlA=Ju z+)6hjr}{;GxQQIDr3*lf32lRp{nHP8uiz^Fa|K+dUc@wD4Kf5RPxVkUZFCdtZH{+=c$AC)G2T-Qn@BPbr zZigIhKhKrVYy`!Mlc#HVr=CURVrhUjExhI~gZ%a=WM9BwvnN?=z!_ZQ$(sP?X;2Jy zyI$}H^^SvH2tf6+Uk$pJww@ngzPp856-l9g6WtW+%Yf>N^A}->#1W2n=WJ%sZ0<){Z&#% z^Kzl$>Km)sIxKLFjtc;}bZeoaZSpL4>`jCmAeRM-NP9sQ&-mi@p0j7Iq>1n&z@8?M z%dM7K^SgE5z)@i5w#rLE4+8%|^J`a6wYr`3BlvdD>7xW?Dd>`0HC0o{w7r_ot~h*G z2gI7Y!AUZ6YN+z$=GNzns@Tu7BxgAb3MBha30-ZG7a%rckU5}y{df`lj@^+34kr5> z988PPbWYdHye~=?>uZ4N&MN@4RBLk_?9W*b$}jqt0j%>yO9QOV(*!#cX~=wRdVL&S zhPQ{${0CGU-rfdS&b@u|IK{hV2Z=(*B2d0?&jwWfT=?Gk`4T9TfMQ)CfNgpLQa#>Q z%6A$w#QNc&qOtrHAbqY>J782@!X{9Y@N(HMSr;PP^;0DlJNxfC`oMB%Ocg zC*hnEsF|p*=CVe^dT)>BTL0yff)uo!U<+_2o3p)CE8quU1JI(=6)9$KxVdJYD*S*~ zzNeSkzFIQyqK}578+qq6X8rrRdgX z4k&R=AGex~a)MoB0pK&|yA<(*J#P&tR?ImBVD)ZTA4VH5L5DxXe<-*s`Aox%H1{-^Qa`kG_DGXD%QX-;l1#&#IVQP6>kir ztO@~ZvJDPnTvKt>fc*(j$W^)JhWk{4kWwbpFIXzuPt2V%M4H19-i5Gn*6(D`4_c1+ zYoI1@yT^~9JF~t>2eVM6p=GP3b*;daJpQOhAMNO|LKnwE2B5n8y9mf;q=)-L_FfD0 z<}YIRBO{k)6AHAn8iG>pYT+3bJ7jvP9}LSMR1nZW$5HR%PD1rFz z{4XE^Vmi-QX#?|Farz=CYS_8!%$E#G%4j2+;Avz|9QBj|YIExYk?y-1(j}0h{$$MnC_*F0U2*ExSi1ZCb_S9aV zTgyGP0Cl=m`emxM4Qih1E{`J{4oJo8K}WnH`@js^pR7Z-vTBK5F5JIFCDN}7pU^_nV>NTz@2$|Kcc5o+L&^Db_AQ);F?)X5BF*QJRCdLI-a%gW z++DZM)x=6*fNrSaUA&hf&CUqC$F*y^CJC-MAm9gd*5#^mh;-dR1?a&<3-hp3@}XN! z&8dcwo6=MQua%0KFvYbi>O{j)RrbDQo3S*y!oEJ~2=}^-v%zn~@hnmKGOvX6JLr;>DNC3)={8OM9n5Zs*(DlS*|%JTniJX2Uav7sOFT0vdIiUOC5pEtY?EF)@Fh9pCfD%N zXskZ8b^ldI{HHj{-l?iWo@IW6Nr`hAS>f8S*8FGc*gmcK^f2JS+>I&r#Gcewy=-JM zv0*w<5qBa6UQB@`esOG*4*t@7c9AkrTpM`v=eY?cO#z17H9B%Xy4m!}LhW}*iZ27w1?HrevgB1SZ1q2X$mm@FK@Qt7o z!s~Lio^IRdwzyvQ80{5iYeTV@mAo=2o5>KepRH0d{*Szlg~n%w2)S5v2|K8}pj;c{ zoDRLvYJO1@?x-=mq+LVhD{l-1-Dw4`7M?3@+ z`fu7?1#9W++6Y46N=H0+bD|CJH~q*CdEBm8D##VS7`cXy4~+x=ZC17rJeBh zI~qW^&FU`+e!{AKO3(>z5Ghh14bUT$=4B>@DVm(cj* zSLA*j!?z!=SLuVvAPh_EFKx}JE8T8;Gx)LH^H136=#Jn3Bo*@?=S`5M{WJPY&~ODs z+^V57DhJ2kD^Z|&;H}eoN~sxS8~cN5u1eW{t&y{!ouH`%p4(yDZaqw$%dlm4A0f0| z8H}XZFDs?3QuqI^PEy}T;r!5+QpfKEt&V|D)Z*xoJ?XXZ+k!sU2X!rcTF4tg8vWPM zr-JE>iu9DZK`#R5gQO{nyGDALY!l@M&eZsc*j*H~l4lD)8S?R*nrdxn?ELUR4kxK? zH(t9IM~^mfPs9WxR>J{agadQg@N6%=tUQ8Bn++TC|Hbqn*q;WydeNIS@gt|3j!P`w zxCKoeKQ*WBlF%l4-apIhERKl(hXS1vVk$U?Wifi)&lL6vF@bmFXmQEe{=$iG)Zt*l z0df@_)B-P_^K2P7h=>OIQ6f0Q-E@|M?$Z5n^oN>2_sBCpN>q(LnqUoef{tm^5^L$# z{<SL zKmH78cHX`4cBKIY8u1x*lwrgP^fJ%E&&AmHrRY7^hH*=2OA9K?!+|~Aeia=nAA`5~ z#zI=h#I>@FXaGk(n)0uqelNY;A5I9obE~OjsuW!%^NxK*52CfBPWYuw--v<1v|B>h z8R=#$TS-Pt3?d@P+xqmYpL4oB8- z>w99}%xqy9W!A^ODfLq8iA@z}10u?o#nG#MXumSaybi(S{`wIM z&nE3n2gWWMu93EvtofWzvG2{v;$ysuw^8q?3n}y=pB1vUr5gi++PjiyBH3jzKBRny zSO~O++1ZLdy7v7VzS&$yY;^Z7*j_#BI`PK`dAzJa9G1{9ahPqPi1C}ti+L)WHii*= z+RZ^+at-tlatc4|akPa&9H;%gn9aS`X_kfb>n>#NTyUVM6m4NCIfLm(28>qaYv7}t zn`M;XcONtXoa3#u3{L-ytd_&g z2mO$8CnE?460w#eSm|smlnNwFHM;A&IxSKLzVkV7nNVqZ*A`)eI{Nbg6WxsarAFuc=FFf1z|%#eTvBgUhY}N zsCT>`_YO>14i^vFX0KXbARLItzT{TeD%N~=ovGtZ6j{>PxkuYlHNTe0!u>rgw#?td z{)n=QrGvgCDE6BUem$Rh(1y!$@(Bn!k3E0|>PQ(8O==zN`?yBhAqlWyq+c%+h?p^- zE&OtLind}^_=>pbhxOgOIC0q9{cLK6p6*eg_|S+p9$W~_u4wzx@N?$QmFg2S)m~^R znni$X{U*!lHgdS@fI;|Owl=9Gwi?dr0m#>yL<8<}bLW_Kpl| zSGesADX&n?qmHC`2GyIev^hi~ka}ISZ^Y4w-yUzyPxaJB0mm%ww^>if3<;P^U+L5=s+cifT-ct*;!dOOk#SOZNv@a^J|DrS3YtSn8EEAlabX1NV3RfHwZn_41Xa z4;$taa6JJR()-FQ<#0G~WlML<l5I+IPnqDpW(PP>hRcQ+S2zU?tbG^(y z1K_?1R){jF;OKGw0WYjnm>aPxnmr5?bP?^B-|Fv`TT4ecH3O`Z3`X_r;vgFn>t1tE zGE6W2PODPKUj+@a%3lB;lS?srE5lp(tZ;uvzrPb){f~n7v_^z! z=16!Vdm!Q0q#?jy0qY%#0d^J8D9o)A;Rj!~j%u>KPs-tB08{4s1ry9VS>gW~5o^L; z7vyjmfXDGRVFa@-mis2!a$GI@9kE*pe3y_C3-$iVGUTQzZE+%>vT0=r|2%xMDBC@>WlkGU4CjoWs@D(rZ zS1NB#e69fvI^O#5r$Hj;bhHPEE4)4q5*t5Gyjzyc{)o459VkEhJ$%hJUC&67k z7gdo`Q*Jm3R&?ueqBezPTa}OI9wqcc;FRTcfVXob^z|dNIB0hMkHV26$zA%YgR$sM zTKM61S}#wJ#u+0UDE3N+U*~Tz1nnV;W<8Akz&6M7-6mIF(Pq`wJ1A%loYL( zIS;&2((xbyL7zoyaY2Sa%BBYBxo6Aa*53`~e@|RA`MP+?iI4KZ+y4EU&I zS_|(#*&j2hxpELa3r0O7ok&5!ijRiRu9i-_3cdnydZU9Mp6Y);skv%!$~`i-J7e-g zj@EoHf+gtcrKf;tY5`4iLnWSHa)9brUM$XmEzG3T0BXTG_+0}p7uGLs^(uYh0j$;~ zT1&~S%_Y5VImvf1EkD7vP-@F%hRlBe{a@T!SW(4WEQd1!O47*Crf@u-TS==48iR5x z!*`Ul4AJI^vIVaN3u5UifXBX{fJ@z>4Q2#1?jpcdLocwymBgKrZ+^Cb@QuIxl58B* zD{t-W3;M;{MGHm_@&n(6A-AsD;JO#>J3o4ru{hy;k;8?=rkp0tadEEcHNECoTI(W31`El-CI0eWQ zWD4&2ehvACkLCjG`82T`L^cNNC4Oo2IH(T4e;C75IwkJ&`|ArqSKD}TX_-E*eeiU& ziUuAC)A?d>-;@9Jcmsdca>@q1`6vzo^3etEH%1Gco&gvC{;Y-qyJ$Re`#A!5Kd((5 z6sSiKnA20uPX0**Mu&6tNgTunUR1sodoNmDst1&wz8v7AG3=^huypTi`S7+GrO$D6 z)0Ja-y5r?QQ+&jVQBjitIZ`z2Ia}iXWf#=#>nU+ zL29$)Q>f#o<#4deo!Kuo@WX{G(`eLaf%(_Nc}E`q=BXHMS(Os{!g%(|&tTDIczE_# z5y%wjCp9S?&*8bS3imJi_9_COC)-_;6D9~8Om@?U2PGQpM^7LKG7Q~(AoSRgP#tZfVDF_zr;_U*!F9qsbVQ@un9O2>T4M5tr0B~~v_@a=w^8h510a#=L z;8+9zhV}57uajb+9DbZm1G`_NqOuKN`bQ2fw9A*v*Kdb_E-SA`?2 z)OFIY-%uD`JZUZg?D4lHtNegKgWr!1m%hOpu5`R+bZ2K#&)*R-7ElKYo0$0xYxIL8 zLg%u|4oZixz}ILB-@aS4=XOe)z!VL6@?dX{LW^YCPjKtyw44)xT=H;h(fmFr>R?p%r5*}W z7_bo0drVDRq9V9QL4_!dazughK6t}tVVvBq={T0+3(1zmb>f+|;{D%J?^xnZcqio5 z%H?@L+L-CIdO=x6QrALL9&PwvjrZi5NS)1e<*%V8ntw~S2PF}zH}B5f_DHyB=I3m@ z_;^TpN|sesCU}qxQ`~jIwF>#8wGvxg9kdMT$}us8BM&W>OzZ|ry2BB)+UY*_yH+&L zl_=Jy9BNzIZs}D~Yv_H%HPjVGNV=xT3xpIW!Np1F^G#9Y8X zl)c_V1(DhYu-v%H3-m&n%M_}}c{E5Wu+6*>R24gW_A7$(U=9D|H$r;;;@o zJ)c_CmVf9l*;4SyJ}E{+4)}^C>SIJ*_bul7OJ{v&0oO>jG(5xzYP0$I%*YH|Mwu#r zubNW5VZ9^X#Phw<;?=^G?Kg&C)^x1FVsKGZ*n+{C1znj~YHSP?6PS(k5e9qGvS4X* z=1kA_27(iV65a(i+Sicmd@Vzf^2@*Wed-`aYQ~em=-h%Pu`gHfz)&@$hpr<&mNO={ zl^kI0HP0wTbbh{d(>5a#;zT2_=ppef?;D4;2^}&kZjB^yl%LBJ;|> zkLc)JEg*5rpQ;_)w?PnKynWtv!@ z>}+am{@(g$KKM+e$ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/mih_ui/android/build/ios/SourcePackages/firebase_app_check-0.4.5/example/macos/Runner/Configs/AppInfo.xcconfig b/mih_ui/android/build/ios/SourcePackages/firebase_app_check-0.4.5/example/macos/Runner/Configs/AppInfo.xcconfig new file mode 100644 index 00000000..800dd3d2 --- /dev/null +++ b/mih_ui/android/build/ios/SourcePackages/firebase_app_check-0.4.5/example/macos/Runner/Configs/AppInfo.xcconfig @@ -0,0 +1,14 @@ +// Application-level settings for the Runner target. +// +// This may be replaced with something auto-generated from metadata (e.g., pubspec.yaml) in the +// future. If not, the values below would default to using the project name when this becomes a +// 'flutter create' template. + +// The application's name. By default this is also the title of the Flutter window. +PRODUCT_NAME = firebase_app_check_example + +// The application's bundle identifier +PRODUCT_BUNDLE_IDENTIFIER = io.flutter.plugins.firebase.appcheck.example + +// The copyright displayed in application information +PRODUCT_COPYRIGHT = Copyright © 2021 io.flutter.plugins.firebase.appcheck.example. All rights reserved. diff --git a/mih_ui/android/build/ios/SourcePackages/firebase_app_check-0.4.5/example/macos/Runner/Configs/Debug.xcconfig b/mih_ui/android/build/ios/SourcePackages/firebase_app_check-0.4.5/example/macos/Runner/Configs/Debug.xcconfig new file mode 100644 index 00000000..36b0fd94 --- /dev/null +++ b/mih_ui/android/build/ios/SourcePackages/firebase_app_check-0.4.5/example/macos/Runner/Configs/Debug.xcconfig @@ -0,0 +1,2 @@ +#include "../../Flutter/Flutter-Debug.xcconfig" +#include "Warnings.xcconfig" diff --git a/mih_ui/android/build/ios/SourcePackages/firebase_app_check-0.4.5/example/macos/Runner/Configs/Release.xcconfig b/mih_ui/android/build/ios/SourcePackages/firebase_app_check-0.4.5/example/macos/Runner/Configs/Release.xcconfig new file mode 100644 index 00000000..dff4f495 --- /dev/null +++ b/mih_ui/android/build/ios/SourcePackages/firebase_app_check-0.4.5/example/macos/Runner/Configs/Release.xcconfig @@ -0,0 +1,2 @@ +#include "../../Flutter/Flutter-Release.xcconfig" +#include "Warnings.xcconfig" diff --git a/mih_ui/android/build/ios/SourcePackages/firebase_app_check-0.4.5/example/macos/Runner/Configs/Warnings.xcconfig b/mih_ui/android/build/ios/SourcePackages/firebase_app_check-0.4.5/example/macos/Runner/Configs/Warnings.xcconfig new file mode 100644 index 00000000..42bcbf47 --- /dev/null +++ b/mih_ui/android/build/ios/SourcePackages/firebase_app_check-0.4.5/example/macos/Runner/Configs/Warnings.xcconfig @@ -0,0 +1,13 @@ +WARNING_CFLAGS = -Wall -Wconditional-uninitialized -Wnullable-to-nonnull-conversion -Wmissing-method-return-type -Woverlength-strings +GCC_WARN_UNDECLARED_SELECTOR = YES +CLANG_UNDEFINED_BEHAVIOR_SANITIZER_NULLABILITY = YES +CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE +CLANG_WARN__DUPLICATE_METHOD_MATCH = YES +CLANG_WARN_PRAGMA_PACK = YES +CLANG_WARN_STRICT_PROTOTYPES = YES +CLANG_WARN_COMMA = YES +GCC_WARN_STRICT_SELECTOR_MATCH = YES +CLANG_WARN_OBJC_REPEATED_USE_OF_WEAK = YES +CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES +GCC_WARN_SHADOW = YES +CLANG_WARN_UNREACHABLE_CODE = YES diff --git a/mih_ui/android/build/ios/SourcePackages/firebase_app_check-0.4.5/example/macos/Runner/DebugProfile.entitlements b/mih_ui/android/build/ios/SourcePackages/firebase_app_check-0.4.5/example/macos/Runner/DebugProfile.entitlements new file mode 100644 index 00000000..dddb8a30 --- /dev/null +++ b/mih_ui/android/build/ios/SourcePackages/firebase_app_check-0.4.5/example/macos/Runner/DebugProfile.entitlements @@ -0,0 +1,12 @@ + + + + + com.apple.security.app-sandbox + + com.apple.security.cs.allow-jit + + com.apple.security.network.server + + + diff --git a/mih_ui/android/build/ios/SourcePackages/firebase_app_check-0.4.5/example/macos/Runner/GoogleService-Info.plist b/mih_ui/android/build/ios/SourcePackages/firebase_app_check-0.4.5/example/macos/Runner/GoogleService-Info.plist new file mode 100644 index 00000000..7e2f0dcb --- /dev/null +++ b/mih_ui/android/build/ios/SourcePackages/firebase_app_check-0.4.5/example/macos/Runner/GoogleService-Info.plist @@ -0,0 +1,38 @@ + + + + + CLIENT_ID + 406099696497-17cfsesi620nhia0sck4map450gngkoh.apps.googleusercontent.com + REVERSED_CLIENT_ID + com.googleusercontent.apps.406099696497-17cfsesi620nhia0sck4map450gngkoh + ANDROID_CLIENT_ID + 406099696497-17qn06u8a0dc717u8ul7s49ampk13lul.apps.googleusercontent.com + API_KEY + AIzaSyDooSUGSf63Ghq02_iIhtnmwMDs4HlWS6c + GCM_SENDER_ID + 406099696497 + PLIST_VERSION + 1 + BUNDLE_ID + io.flutter.plugins.firebase.appcheck.example + PROJECT_ID + flutterfire-e2e-tests + STORAGE_BUCKET + flutterfire-e2e-tests.appspot.com + IS_ADS_ENABLED + + IS_ANALYTICS_ENABLED + + IS_APPINVITE_ENABLED + + IS_GCM_ENABLED + + IS_SIGNIN_ENABLED + + GOOGLE_APP_ID + 1:406099696497:ios:bd8702ba3865bb333574d0 + DATABASE_URL + https://flutterfire-e2e-tests-default-rtdb.europe-west1.firebasedatabase.app + + \ No newline at end of file diff --git a/mih_ui/android/build/ios/SourcePackages/firebase_app_check-0.4.5/example/macos/Runner/Info.plist b/mih_ui/android/build/ios/SourcePackages/firebase_app_check-0.4.5/example/macos/Runner/Info.plist new file mode 100644 index 00000000..4789daa6 --- /dev/null +++ b/mih_ui/android/build/ios/SourcePackages/firebase_app_check-0.4.5/example/macos/Runner/Info.plist @@ -0,0 +1,32 @@ + + + + + CFBundleDevelopmentRegion + $(DEVELOPMENT_LANGUAGE) + CFBundleExecutable + $(EXECUTABLE_NAME) + CFBundleIconFile + + CFBundleIdentifier + $(PRODUCT_BUNDLE_IDENTIFIER) + CFBundleInfoDictionaryVersion + 6.0 + CFBundleName + $(PRODUCT_NAME) + CFBundlePackageType + APPL + CFBundleShortVersionString + $(FLUTTER_BUILD_NAME) + CFBundleVersion + $(FLUTTER_BUILD_NUMBER) + LSMinimumSystemVersion + $(MACOSX_DEPLOYMENT_TARGET) + NSHumanReadableCopyright + $(PRODUCT_COPYRIGHT) + NSMainNibFile + MainMenu + NSPrincipalClass + NSApplication + + diff --git a/mih_ui/android/build/ios/SourcePackages/firebase_app_check-0.4.5/example/macos/Runner/MainFlutterWindow.swift b/mih_ui/android/build/ios/SourcePackages/firebase_app_check-0.4.5/example/macos/Runner/MainFlutterWindow.swift new file mode 100644 index 00000000..2722837e --- /dev/null +++ b/mih_ui/android/build/ios/SourcePackages/firebase_app_check-0.4.5/example/macos/Runner/MainFlutterWindow.swift @@ -0,0 +1,15 @@ +import Cocoa +import FlutterMacOS + +class MainFlutterWindow: NSWindow { + override func awakeFromNib() { + let flutterViewController = FlutterViewController.init() + let windowFrame = self.frame + self.contentViewController = flutterViewController + self.setFrame(windowFrame, display: true) + + RegisterGeneratedPlugins(registry: flutterViewController) + + super.awakeFromNib() + } +} diff --git a/mih_ui/android/build/ios/SourcePackages/firebase_app_check-0.4.5/example/macos/Runner/Release.entitlements b/mih_ui/android/build/ios/SourcePackages/firebase_app_check-0.4.5/example/macos/Runner/Release.entitlements new file mode 100644 index 00000000..0c67376e --- /dev/null +++ b/mih_ui/android/build/ios/SourcePackages/firebase_app_check-0.4.5/example/macos/Runner/Release.entitlements @@ -0,0 +1,5 @@ + + + + + diff --git a/mih_ui/android/build/ios/SourcePackages/firebase_app_check-0.4.5/example/macos/firebase_app_id_file.json b/mih_ui/android/build/ios/SourcePackages/firebase_app_check-0.4.5/example/macos/firebase_app_id_file.json new file mode 100644 index 00000000..ab0e60a0 --- /dev/null +++ b/mih_ui/android/build/ios/SourcePackages/firebase_app_check-0.4.5/example/macos/firebase_app_id_file.json @@ -0,0 +1,7 @@ +{ + "file_generated_by": "FlutterFire CLI", + "purpose": "FirebaseAppID & ProjectID for this Firebase app in this directory", + "GOOGLE_APP_ID": "1:406099696497:ios:bd8702ba3865bb333574d0", + "FIREBASE_PROJECT_ID": "flutterfire-e2e-tests", + "GCM_SENDER_ID": "406099696497" +} \ No newline at end of file diff --git a/mih_ui/android/build/ios/SourcePackages/firebase_app_check-0.4.5/example/pubspec.yaml b/mih_ui/android/build/ios/SourcePackages/firebase_app_check-0.4.5/example/pubspec.yaml new file mode 100644 index 00000000..c652ec30 --- /dev/null +++ b/mih_ui/android/build/ios/SourcePackages/firebase_app_check-0.4.5/example/pubspec.yaml @@ -0,0 +1,21 @@ +name: firebase_app_check_example +description: Firebase App Check example application. + +publish_to: 'none' + +version: 1.0.0+1 +resolution: workspace + +environment: + sdk: '^3.6.0' + flutter: '>=3.27.0' + +dependencies: + cloud_firestore: ^6.6.0 + firebase_app_check: ^0.4.5 + firebase_core: ^4.11.0 + flutter: + sdk: flutter + +flutter: + uses-material-design: true diff --git a/mih_ui/android/build/ios/SourcePackages/firebase_app_check-0.4.5/example/web/favicon.png b/mih_ui/android/build/ios/SourcePackages/firebase_app_check-0.4.5/example/web/favicon.png new file mode 100644 index 0000000000000000000000000000000000000000..8aaa46ac1ae21512746f852a42ba87e4165dfdd1 GIT binary patch literal 917 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`jKx9jP7LeL$-D$|I14-?iy0X7 zltGxWVyS%@P(fs7NJL45ua8x7ey(0(N`6wRUPW#JP&EUCO@$SZnVVXYs8ErclUHn2 zVXFjIVFhG^g!Ppaz)DK8ZIvQ?0~DO|i&7O#^-S~(l1AfjnEK zjFOT9D}DX)@^Za$W4-*MbbUihOG|wNBYh(yU7!lx;>x^|#0uTKVr7USFmqf|i<65o z3raHc^AtelCMM;Vme?vOfh>Xph&xL%(-1c06+^uR^q@XSM&D4+Kp$>4P^%3{)XKjo zGZknv$b36P8?Z_gF{nK@`XI}Z90TzwSQO}0J1!f2c(B=V`5aP@1P1a|PZ!4!3&Gl8 zTYqUsf!gYFyJnXpu0!n&N*SYAX-%d(5gVjrHJWqXQshj@!Zm{!01WsQrH~9=kTxW#6SvuapgMqt>$=j#%eyGrQzr zP{L-3gsMA^$I1&gsBAEL+vxi1*Igl=8#8`5?A-T5=z-sk46WA1IUT)AIZHx1rdUrf zVJrJn<74DDw`j)Ki#gt}mIT-Q`XRa2-jQXQoI%w`nb|XblvzK${ZzlV)m-XcwC(od z71_OEC5Bt9GEXosOXaPTYOia#R4ID2TiU~`zVMl08TV_C%DnU4^+HE>9(CE4D6?Fz oujB08i7adh9xk7*FX66dWH6F5TM;?E2b5PlUHx3vIVCg!0Dx9vYXATM literal 0 HcmV?d00001 diff --git a/mih_ui/android/build/ios/SourcePackages/firebase_app_check-0.4.5/example/web/icons/Icon-192.png b/mih_ui/android/build/ios/SourcePackages/firebase_app_check-0.4.5/example/web/icons/Icon-192.png new file mode 100644 index 0000000000000000000000000000000000000000..b749bfef07473333cf1dd31e9eed89862a5d52aa GIT binary patch literal 5292 zcmZ`-2T+sGz6~)*FVZ`aW+(v>MIm&M-g^@e2u-B-DoB?qO+b1Tq<5uCCv>ESfRum& zp%X;f!~1{tzL__3=gjVJ=j=J>+nMj%ncXj1Q(b|Ckbw{Y0FWpt%4y%$uD=Z*c-x~o zE;IoE;xa#7Ll5nj-e4CuXB&G*IM~D21rCP$*xLXAK8rIMCSHuSu%bL&S3)8YI~vyp@KBu9Ph7R_pvKQ@xv>NQ`dZp(u{Z8K3yOB zn7-AR+d2JkW)KiGx0hosml;+eCXp6+w%@STjFY*CJ?udJ64&{BCbuebcuH;}(($@@ znNlgBA@ZXB)mcl9nbX#F!f_5Z=W>0kh|UVWnf!At4V*LQP%*gPdCXd6P@J4Td;!Ur z<2ZLmwr(NG`u#gDEMP19UcSzRTL@HsK+PnIXbVBT@oHm53DZr?~V(0{rsalAfwgo zEh=GviaqkF;}F_5-yA!1u3!gxaR&Mj)hLuj5Q-N-@Lra{%<4ONja8pycD90&>yMB` zchhd>0CsH`^|&TstH-8+R`CfoWqmTTF_0?zDOY`E`b)cVi!$4xA@oO;SyOjJyP^_j zx^@Gdf+w|FW@DMdOi8=4+LJl$#@R&&=UM`)G!y%6ZzQLoSL%*KE8IO0~&5XYR9 z&N)?goEiWA(YoRfT{06&D6Yuu@Qt&XVbuW@COb;>SP9~aRc+z`m`80pB2o%`#{xD@ zI3RAlukL5L>px6b?QW1Ac_0>ew%NM!XB2(H+1Y3AJC?C?O`GGs`331Nd4ZvG~bMo{lh~GeL zSL|tT*fF-HXxXYtfu5z+T5Mx9OdP7J4g%@oeC2FaWO1D{=NvL|DNZ}GO?O3`+H*SI z=grGv=7dL{+oY0eJFGO!Qe(e2F?CHW(i!!XkGo2tUvsQ)I9ev`H&=;`N%Z{L zO?vV%rDv$y(@1Yj@xfr7Kzr<~0{^T8wM80xf7IGQF_S-2c0)0D6b0~yD7BsCy+(zL z#N~%&e4iAwi4F$&dI7x6cE|B{f@lY5epaDh=2-(4N05VO~A zQT3hanGy_&p+7Fb^I#ewGsjyCEUmSCaP6JDB*=_()FgQ(-pZ28-{qx~2foO4%pM9e z*_63RT8XjgiaWY|*xydf;8MKLd{HnfZ2kM%iq}fstImB-K6A79B~YoPVa@tYN@T_$ zea+9)<%?=Fl!kd(Y!G(-o}ko28hg2!MR-o5BEa_72uj7Mrc&{lRh3u2%Y=Xk9^-qa zBPWaD=2qcuJ&@Tf6ue&)4_V*45=zWk@Z}Q?f5)*z)-+E|-yC4fs5CE6L_PH3=zI8p z*Z3!it{1e5_^(sF*v=0{`U9C741&lub89gdhKp|Y8CeC{_{wYK-LSbp{h)b~9^j!s z7e?Y{Z3pZv0J)(VL=g>l;<}xk=T*O5YR|hg0eg4u98f2IrA-MY+StQIuK-(*J6TRR z|IM(%uI~?`wsfyO6Tgmsy1b3a)j6M&-jgUjVg+mP*oTKdHg?5E`!r`7AE_#?Fc)&a z08KCq>Gc=ne{PCbRvs6gVW|tKdcE1#7C4e`M|j$C5EYZ~Y=jUtc zj`+?p4ba3uy7><7wIokM79jPza``{Lx0)zGWg;FW1^NKY+GpEi=rHJ+fVRGfXO zPHV52k?jxei_!YYAw1HIz}y8ZMwdZqU%ESwMn7~t zdI5%B;U7RF=jzRz^NuY9nM)&<%M>x>0(e$GpU9th%rHiZsIT>_qp%V~ILlyt^V`=d z!1+DX@ah?RnB$X!0xpTA0}lN@9V-ePx>wQ?-xrJr^qDlw?#O(RsXeAvM%}rg0NT#t z!CsT;-vB=B87ShG`GwO;OEbeL;a}LIu=&@9cb~Rsx(ZPNQ!NT7H{@j0e(DiLea>QD zPmpe90gEKHEZ8oQ@6%E7k-Ptn#z)b9NbD@_GTxEhbS+}Bb74WUaRy{w;E|MgDAvHw zL)ycgM7mB?XVh^OzbC?LKFMotw3r@i&VdUV%^Efdib)3@soX%vWCbnOyt@Y4swW925@bt45y0HY3YI~BnnzZYrinFy;L?2D3BAL`UQ zEj))+f>H7~g8*VuWQ83EtGcx`hun$QvuurSMg3l4IP8Fe`#C|N6mbYJ=n;+}EQm;< z!!N=5j1aAr_uEnnzrEV%_E|JpTb#1p1*}5!Ce!R@d$EtMR~%9# zd;h8=QGT)KMW2IKu_fA_>p_und#-;Q)p%%l0XZOXQicfX8M~7?8}@U^ihu;mizj)t zgV7wk%n-UOb z#!P5q?Ex+*Kx@*p`o$q8FWL*E^$&1*!gpv?Za$YO~{BHeGY*5%4HXUKa_A~~^d z=E*gf6&+LFF^`j4$T~dR)%{I)T?>@Ma?D!gi9I^HqvjPc3-v~=qpX1Mne@*rzT&Xw zQ9DXsSV@PqpEJO-g4A&L{F&;K6W60D!_vs?Vx!?w27XbEuJJP&);)^+VF1nHqHBWu z^>kI$M9yfOY8~|hZ9WB!q-9u&mKhEcRjlf2nm_@s;0D#c|@ED7NZE% zzR;>P5B{o4fzlfsn3CkBK&`OSb-YNrqx@N#4CK!>bQ(V(D#9|l!e9(%sz~PYk@8zt zPN9oK78&-IL_F zhsk1$6p;GqFbtB^ZHHP+cjMvA0(LqlskbdYE_rda>gvQLTiqOQ1~*7lg%z*&p`Ry& zRcG^DbbPj_jOKHTr8uk^15Boj6>hA2S-QY(W-6!FIq8h$<>MI>PYYRenQDBamO#Fv zAH5&ImqKBDn0v5kb|8i0wFhUBJTpT!rB-`zK)^SNnRmLraZcPYK7b{I@+}wXVdW-{Ps17qdRA3JatEd?rPV z4@}(DAMf5EqXCr4-B+~H1P#;t@O}B)tIJ(W6$LrK&0plTmnPpb1TKn3?f?Kk``?D+ zQ!MFqOX7JbsXfQrz`-M@hq7xlfNz;_B{^wbpG8des56x(Q)H)5eLeDwCrVR}hzr~= zM{yXR6IM?kXxauLza#@#u?Y|o;904HCqF<8yT~~c-xyRc0-vxofnxG^(x%>bj5r}N zyFT+xnn-?B`ohA>{+ZZQem=*Xpqz{=j8i2TAC#x-m;;mo{{sLB_z(UoAqD=A#*juZ zCv=J~i*O8;F}A^Wf#+zx;~3B{57xtoxC&j^ie^?**T`WT2OPRtC`xj~+3Kprn=rVM zVJ|h5ux%S{dO}!mq93}P+h36mZ5aZg1-?vhL$ke1d52qIiXSE(llCr5i=QUS?LIjc zV$4q=-)aaR4wsrQv}^shL5u%6;`uiSEs<1nG^?$kl$^6DL z43CjY`M*p}ew}}3rXc7Xck@k41jx}c;NgEIhKZ*jsBRZUP-x2cm;F1<5$jefl|ppO zmZd%%?gMJ^g9=RZ^#8Mf5aWNVhjAS^|DQO+q$)oeob_&ZLFL(zur$)); zU19yRm)z<4&4-M}7!9+^Wl}Uk?`S$#V2%pQ*SIH5KI-mn%i;Z7-)m$mN9CnI$G7?# zo`zVrUwoSL&_dJ92YhX5TKqaRkfPgC4=Q&=K+;_aDs&OU0&{WFH}kKX6uNQC6%oUH z2DZa1s3%Vtk|bglbxep-w)PbFG!J17`<$g8lVhqD2w;Z0zGsh-r zxZ13G$G<48leNqR!DCVt9)@}(zMI5w6Wo=N zpP1*3DI;~h2WDWgcKn*f!+ORD)f$DZFwgKBafEZmeXQMAsq9sxP9A)7zOYnkHT9JU zRA`umgmP9d6=PHmFIgx=0$(sjb>+0CHG)K@cPG{IxaJ&Ueo8)0RWgV9+gO7+Bl1(F z7!BslJ2MP*PWJ;x)QXbR$6jEr5q3 z(3}F@YO_P1NyTdEXRLU6fp?9V2-S=E+YaeLL{Y)W%6`k7$(EW8EZSA*(+;e5@jgD^I zaJQ2|oCM1n!A&-8`;#RDcZyk*+RPkn_r8?Ak@agHiSp*qFNX)&i21HE?yuZ;-C<3C zwJGd1lx5UzViP7sZJ&|LqH*mryb}y|%AOw+v)yc`qM)03qyyrqhX?ub`Cjwx2PrR! z)_z>5*!*$x1=Qa-0uE7jy0z`>|Ni#X+uV|%_81F7)b+nf%iz=`fF4g5UfHS_?PHbr zB;0$bK@=di?f`dS(j{l3-tSCfp~zUuva+=EWxJcRfp(<$@vd(GigM&~vaYZ0c#BTs z3ijkxMl=vw5AS&DcXQ%eeKt!uKvh2l3W?&3=dBHU=Gz?O!40S&&~ei2vg**c$o;i89~6DVns zG>9a*`k5)NI9|?W!@9>rzJ;9EJ=YlJTx1r1BA?H`LWijk(rTax9(OAu;q4_wTj-yj z1%W4GW&K4T=uEGb+E!>W0SD_C0RR91 literal 0 HcmV?d00001 diff --git a/mih_ui/android/build/ios/SourcePackages/firebase_app_check-0.4.5/example/web/icons/Icon-512.png b/mih_ui/android/build/ios/SourcePackages/firebase_app_check-0.4.5/example/web/icons/Icon-512.png new file mode 100644 index 0000000000000000000000000000000000000000..88cfd48dff1169879ba46840804b412fe02fefd6 GIT binary patch literal 8252 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 literal 0 HcmV?d00001 diff --git a/mih_ui/android/build/ios/SourcePackages/firebase_app_check-0.4.5/example/web/icons/Icon-maskable-192.png b/mih_ui/android/build/ios/SourcePackages/firebase_app_check-0.4.5/example/web/icons/Icon-maskable-192.png new file mode 100644 index 0000000000000000000000000000000000000000..eb9b4d76e525556d5d89141648c724331630325d GIT binary patch literal 5594 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 X>c!)3PgKfL&lX^$Z>Cpu&6)6jvi^Z! literal 0 HcmV?d00001 diff --git a/mih_ui/android/build/ios/SourcePackages/firebase_app_check-0.4.5/example/web/icons/Icon-maskable-512.png b/mih_ui/android/build/ios/SourcePackages/firebase_app_check-0.4.5/example/web/icons/Icon-maskable-512.png new file mode 100644 index 0000000000000000000000000000000000000000..d69c56691fbdb0b7efa65097c7cc1edac12a6d3e GIT binary patch literal 20998 zcmeFZ_gj-)&^4Nb2tlbLMU<{!p(#yjqEe+=0IA_oih%ScH9@5#MNp&}Y#;;(h=A0@ zh7{>lT2MkSQ344eAvrhici!td|HJuyvJm#Y_w1Q9Yu3!26dNlO-oxUDK_C#XnW^Co z5C{VN6#{~B0)K2j7}*1Xq(Nqemv23A-6&=ZpEijkVnSwVGqLv40?n0=p;k3-U5e5+ z+z3>aS`u9DS=!wg8ROu?X4TFoW6CFLL&{GzoVT)ldhLekLM|+j3tIxRd|*5=c{=s&*vfPdBr(Fyj(v@%eQj1Soy7m4^@VRl1~@-PV7y+c!xz$8436WBn$t{=}mEdK#k`aystimGgI{(IBx$!pAwFoE9Y`^t^;> zKAD)C(Dl^s%`?q5$P|fZf8Xymrtu^Pv(7D`rn>Z-w$Ahs!z9!94WNVxrJuXfHAaxg zC6s@|Z1$7R$(!#t%Jb{{s6(Y?NoQXDYq)!}X@jKPhe`{9KQ@sAU8y-5`xt?S9$jKH zoi}6m5PcG*^{kjvt+kwPpyQzVg4o)a>;LK`aaN2x4@itBD3Aq?yWTM20VRn1rrd+2 zKO=P0rMjEGq_UqpMa`~7B|p?xAN1SCoCp}QxAv8O`jLJ5CVh@umR%c%i^)6!o+~`F zaalSTQcl5iwOLC&H)efzd{8(88mo`GI(56T<(&p7>Qd^;R1hn1Y~jN~tApaL8>##U zd65bo8)79CplWxr#z4!6HvLz&N7_5AN#x;kLG?zQ(#p|lj<8VUlKY=Aw!ATqeL-VG z42gA!^cMNPj>(`ZMEbCrnkg*QTsn*u(nQPWI9pA{MQ=IsPTzd7q5E#7+z>Ch=fx$~ z;J|?(5jTo5UWGvsJa(Sx0?S#56+8SD!I^tftyeh_{5_31l6&Hywtn`bbqYDqGZXI( zCG7hBgvksX2ak8+)hB4jnxlO@A32C_RM&g&qDSb~3kM&)@A_j1*oTO@nicGUyv+%^ z=vB)4(q!ykzT==Z)3*3{atJ5}2PV*?Uw+HhN&+RvKvZL3p9E?gHjv{6zM!A|z|UHK z-r6jeLxbGn0D@q5aBzlco|nG2tr}N@m;CJX(4#Cn&p&sLKwzLFx1A5izu?X_X4x8r@K*d~7>t1~ zDW1Mv5O&WOxbzFC`DQ6yNJ(^u9vJdj$fl2dq`!Yba_0^vQHXV)vqv1gssZYzBct!j zHr9>ydtM8wIs}HI4=E}qAkv|BPWzh3^_yLH(|kdb?x56^BlDC)diWyPd*|f!`^12_U>TD^^94OCN0lVv~Sgvs94ecpE^}VY$w`qr_>Ue zTfH~;C<3H<0dS5Rkf_f@1x$Gms}gK#&k()IC0zb^QbR!YLoll)c$Agfi6MKI0dP_L z=Uou&u~~^2onea2%XZ@>`0x^L8CK6=I{ge;|HXMj)-@o~h&O{CuuwBX8pVqjJ*o}5 z#8&oF_p=uSo~8vn?R0!AMWvcbZmsrj{ZswRt(aEdbi~;HeVqIe)-6*1L%5u$Gbs}| zjFh?KL&U(rC2izSGtwP5FnsR@6$-1toz?RvLD^k~h9NfZgzHE7m!!7s6(;)RKo2z} zB$Ci@h({l?arO+vF;s35h=|WpefaOtKVx>l399}EsX@Oe3>>4MPy%h&^3N_`UTAHJ zI$u(|TYC~E4)|JwkWW3F!Tib=NzjHs5ii2uj0^m|Qlh-2VnB#+X~RZ|`SA*}}&8j9IDv?F;(Y^1=Z0?wWz;ikB zewU>MAXDi~O7a~?jx1x=&8GcR-fTp>{2Q`7#BE#N6D@FCp`?ht-<1|y(NArxE_WIu zP+GuG=Qq>SHWtS2M>34xwEw^uvo4|9)4s|Ac=ud?nHQ>ax@LvBqusFcjH0}{T3ZPQ zLO1l<@B_d-(IS682}5KA&qT1+{3jxKolW+1zL4inqBS-D>BohA!K5++41tM@ z@xe<-qz27}LnV#5lk&iC40M||JRmZ*A##K3+!j93eouU8@q-`W0r%7N`V$cR&JV;iX(@cS{#*5Q>~4BEDA)EikLSP@>Oo&Bt1Z~&0d5)COI%3$cLB_M?dK# z{yv2OqW!al-#AEs&QFd;WL5zCcp)JmCKJEdNsJlL9K@MnPegK23?G|O%v`@N{rIRa zi^7a}WBCD77@VQ-z_v{ZdRsWYrYgC$<^gRQwMCi6);%R~uIi31OMS}=gUTE(GKmCI z$zM>mytL{uNN+a&S38^ez(UT=iSw=l2f+a4)DyCA1Cs_N-r?Q@$3KTYosY!;pzQ0k zzh1G|kWCJjc(oZVBji@kN%)UBw(s{KaYGy=i{g3{)Z+&H8t2`^IuLLKWT6lL<-C(! zSF9K4xd-|VO;4}$s?Z7J_dYqD#Mt)WCDnsR{Kpjq275uUq6`v0y*!PHyS(}Zmv)_{>Vose9-$h8P0|y;YG)Bo}$(3Z%+Gs0RBmFiW!^5tBmDK-g zfe5%B*27ib+7|A*Fx5e)2%kIxh7xWoc3pZcXS2zik!63lAG1;sC1ja>BqH7D zODdi5lKW$$AFvxgC-l-)!c+9@YMC7a`w?G(P#MeEQ5xID#<}W$3bSmJ`8V*x2^3qz zVe<^^_8GHqYGF$nIQm0Xq2kAgYtm#UC1A(=&85w;rmg#v906 zT;RyMgbMpYOmS&S9c38^40oUp?!}#_84`aEVw;T;r%gTZkWeU;;FwM@0y0adt{-OK z(vGnPSlR=Nv2OUN!2=xazlnHPM9EWxXg2EKf0kI{iQb#FoP>xCB<)QY>OAM$Dcdbm zU6dU|%Mo(~avBYSjRc13@|s>axhrPl@Sr81{RSZUdz4(=|82XEbV*JAX6Lfbgqgz584lYgi0 z2-E{0XCVON$wHfvaLs;=dqhQJ&6aLn$D#0i(FkAVrXG9LGm3pSTf&f~RQb6|1_;W> z?n-;&hrq*~L=(;u#jS`*Yvh@3hU-33y_Kv1nxqrsf>pHVF&|OKkoC)4DWK%I!yq?P z=vXo8*_1iEWo8xCa{HJ4tzxOmqS0&$q+>LroMKI*V-rxhOc%3Y!)Y|N6p4PLE>Yek>Y(^KRECg8<|%g*nQib_Yc#A5q8Io z6Ig&V>k|~>B6KE%h4reAo*DfOH)_01tE0nWOxX0*YTJgyw7moaI^7gW*WBAeiLbD?FV9GSB zPv3`SX*^GRBM;zledO`!EbdBO_J@fEy)B{-XUTVQv}Qf~PSDpK9+@I`7G7|>Dgbbu z_7sX9%spVo$%qwRwgzq7!_N;#Td08m5HV#?^dF-EV1o)Q=Oa+rs2xH#g;ykLbwtCh znUnA^dW!XjspJ;otq$yV@I^s9Up(5k7rqhQd@OLMyyxVLj_+$#Vc*}Usevp^I(^vH zmDgHc0VMme|K&X?9&lkN{yq_(If)O`oUPW8X}1R5pSVBpfJe0t{sPA(F#`eONTh_) zxeLqHMfJX#?P(@6w4CqRE@Eiza; z;^5)Kk=^5)KDvd9Q<`=sJU8rjjxPmtWMTmzcH={o$U)j=QBuHarp?=}c??!`3d=H$nrJMyr3L-& zA#m?t(NqLM?I3mGgWA_C+0}BWy3-Gj7bR+d+U?n*mN$%5P`ugrB{PeV>jDUn;eVc- zzeMB1mI4?fVJatrNyq|+zn=!AiN~<}eoM#4uSx^K?Iw>P2*r=k`$<3kT00BE_1c(02MRz4(Hq`L^M&xt!pV2 zn+#U3@j~PUR>xIy+P>51iPayk-mqIK_5rlQMSe5&tDkKJk_$i(X&;K(11YGpEc-K= zq4Ln%^j>Zi_+Ae9eYEq_<`D+ddb8_aY!N;)(&EHFAk@Ekg&41ABmOXfWTo)Z&KotA zh*jgDGFYQ^y=m)<_LCWB+v48DTJw*5dwMm_YP0*_{@HANValf?kV-Ic3xsC}#x2h8 z`q5}d8IRmqWk%gR)s~M}(Qas5+`np^jW^oEd-pzERRPMXj$kS17g?H#4^trtKtq;C?;c ztd|%|WP2w2Nzg@)^V}!Gv++QF2!@FP9~DFVISRW6S?eP{H;;8EH;{>X_}NGj^0cg@ z!2@A>-CTcoN02^r6@c~^QUa={0xwK0v4i-tQ9wQq^=q*-{;zJ{Qe%7Qd!&X2>rV@4 z&wznCz*63_vw4>ZF8~%QCM?=vfzW0r_4O^>UA@otm_!N%mH)!ERy&b!n3*E*@?9d^ zu}s^By@FAhG(%?xgJMuMzuJw2&@$-oK>n z=UF}rt%vuaP9fzIFCYN-1&b#r^Cl6RDFIWsEsM|ROf`E?O(cy{BPO2Ie~kT+^kI^i zp>Kbc@C?}3vy-$ZFVX#-cx)Xj&G^ibX{pWggtr(%^?HeQL@Z( zM-430g<{>vT*)jK4aY9(a{lSy{8vxLbP~n1MXwM527ne#SHCC^F_2@o`>c>>KCq9c(4c$VSyMl*y3Nq1s+!DF| z^?d9PipQN(mw^j~{wJ^VOXDCaL$UtwwTpyv8IAwGOg<|NSghkAR1GSNLZ1JwdGJYm zP}t<=5=sNNUEjc=g(y)1n5)ynX(_$1-uGuDR*6Y^Wgg(LT)Jp><5X|}bt z_qMa&QP?l_n+iVS>v%s2Li_;AIeC=Ca^v1jX4*gvB$?H?2%ndnqOaK5-J%7a} zIF{qYa&NfVY}(fmS0OmXA70{znljBOiv5Yod!vFU{D~*3B3Ka{P8?^ zfhlF6o7aNT$qi8(w<}OPw5fqA7HUje*r*Oa(YV%*l0|9FP9KW@U&{VSW{&b0?@y)M zs%4k1Ax;TGYuZ9l;vP5@?3oQsp3)rjBeBvQQ>^B;z5pc=(yHhHtq6|0m(h4envn_j787fizY@V`o(!SSyE7vlMT zbo=Z1c=atz*G!kwzGB;*uPL$Ei|EbZLh8o+1BUMOpnU(uX&OG1MV@|!&HOOeU#t^x zr9=w2ow!SsTuJWT7%Wmt14U_M*3XiWBWHxqCVZI0_g0`}*^&yEG9RK9fHK8e+S^m? zfCNn$JTswUVbiC#>|=wS{t>-MI1aYPLtzO5y|LJ9nm>L6*wpr_m!)A2Fb1RceX&*|5|MwrvOk4+!0p99B9AgP*9D{Yt|x=X}O% zgIG$MrTB=n-!q%ROT|SzH#A$Xm;|ym)0>1KR}Yl0hr-KO&qMrV+0Ej3d@?FcgZ+B3 ztEk16g#2)@x=(ko8k7^Tq$*5pfZHC@O@}`SmzT1(V@x&NkZNM2F#Q-Go7-uf_zKC( zB(lHZ=3@dHaCOf6C!6i8rDL%~XM@rVTJbZL09?ht@r^Z_6x}}atLjvH^4Vk#Ibf(^LiBJFqorm?A=lE zzFmwvp4bT@Nv2V>YQT92X;t9<2s|Ru5#w?wCvlhcHLcsq0TaFLKy(?nzezJ>CECqj zggrI~Hd4LudM(m{L@ezfnpELsRFVFw>fx;CqZtie`$BXRn#Ns%AdoE$-Pf~{9A8rV zf7FbgpKmVzmvn-z(g+&+-ID=v`;6=)itq8oM*+Uz**SMm_{%eP_c0{<%1JGiZS19o z@Gj7$Se~0lsu}w!%;L%~mIAO;AY-2i`9A*ZfFs=X!LTd6nWOZ7BZH2M{l2*I>Xu)0 z`<=;ObglnXcVk!T>e$H?El}ra0WmPZ$YAN0#$?|1v26^(quQre8;k20*dpd4N{i=b zuN=y}_ew9SlE~R{2+Rh^7%PA1H5X(p8%0TpJ=cqa$65XL)$#ign-y!qij3;2>j}I; ziO@O|aYfn&up5F`YtjGw68rD3{OSGNYmBnl?zdwY$=RFsegTZ=kkzRQ`r7ZjQP!H( zp4>)&zf<*N!tI00xzm-ME_a{_I!TbDCr;8E;kCH4LlL-tqLxDuBn-+xgPk37S&S2^ z2QZumkIimwz!c@!r0)j3*(jPIs*V!iLTRl0Cpt_UVNUgGZzdvs0(-yUghJfKr7;=h zD~y?OJ-bWJg;VdZ^r@vlDoeGV&8^--!t1AsIMZ5S440HCVr%uk- z2wV>!W1WCvFB~p$P$$_}|H5>uBeAe>`N1FI8AxM|pq%oNs;ED8x+tb44E) zTj{^fbh@eLi%5AqT?;d>Es5D*Fi{Bpk)q$^iF!!U`r2hHAO_?#!aYmf>G+jHsES4W zgpTKY59d?hsb~F0WE&dUp6lPt;Pm zcbTUqRryw^%{ViNW%Z(o8}dd00H(H-MmQmOiTq{}_rnwOr*Ybo7*}3W-qBT!#s0Ie z-s<1rvvJx_W;ViUD`04%1pra*Yw0BcGe)fDKUK8aF#BwBwMPU;9`!6E(~!043?SZx z13K%z@$$#2%2ovVlgFIPp7Q6(vO)ud)=*%ZSucL2Dh~K4B|%q4KnSpj#n@(0B})!9 z8p*hY@5)NDn^&Pmo;|!>erSYg`LkO?0FB@PLqRvc>4IsUM5O&>rRv|IBRxi(RX(gJ ztQ2;??L~&Mv;aVr5Q@(?y^DGo%pO^~zijld41aA0KKsy_6FeHIn?fNHP-z>$OoWer zjZ5hFQTy*-f7KENRiCE$ZOp4|+Wah|2=n@|W=o}bFM}Y@0e62+_|#fND5cwa3;P{^pEzlJbF1Yq^}>=wy8^^^$I2M_MH(4Dw{F6hm+vrWV5!q;oX z;tTNhz5`-V={ew|bD$?qcF^WPR{L(E%~XG8eJx(DoGzt2G{l8r!QPJ>kpHeOvCv#w zr=SSwMDaUX^*~v%6K%O~i)<^6`{go>a3IdfZ8hFmz&;Y@P%ZygShQZ2DSHd`m5AR= zx$wWU06;GYwXOf(%MFyj{8rPFXD};JCe85Bdp4$YJ2$TzZ7Gr#+SwCvBI1o$QP0(c zy`P51FEBV2HTisM3bHqpmECT@H!Y2-bv2*SoSPoO?wLe{M#zDTy@ujAZ!Izzky~3k zRA1RQIIoC*Mej1PH!sUgtkR0VCNMX(_!b65mo66iM*KQ7xT8t2eev$v#&YdUXKwGm z7okYAqYF&bveHeu6M5p9xheRCTiU8PFeb1_Rht0VVSbm%|1cOVobc8mvqcw!RjrMRM#~=7xibH&Fa5Imc|lZ{eC|R__)OrFg4@X_ ze+kk*_sDNG5^ELmHnZ7Ue?)#6!O)#Nv*Dl2mr#2)w{#i-;}0*_h4A%HidnmclH#;Q zmQbq+P4DS%3}PpPm7K_K3d2s#k~x+PlTul7+kIKol0@`YN1NG=+&PYTS->AdzPv!> zQvzT=)9se*Jr1Yq+C{wbK82gAX`NkbXFZ)4==j4t51{|-v!!$H8@WKA={d>CWRW+g z*`L>9rRucS`vbXu0rzA1#AQ(W?6)}1+oJSF=80Kf_2r~Qm-EJ6bbB3k`80rCv(0d` zvCf3;L2ovYG_TES%6vSuoKfIHC6w;V31!oqHM8-I8AFzcd^+_86!EcCOX|Ta9k1!s z_Vh(EGIIsI3fb&dF$9V8v(sTBC%!#<&KIGF;R+;MyC0~}$gC}}= zR`DbUVc&Bx`lYykFZ4{R{xRaUQkWCGCQlEc;!mf=+nOk$RUg*7 z;kP7CVLEc$CA7@6VFpsp3_t~m)W0aPxjsA3e5U%SfY{tp5BV5jH-5n?YX7*+U+Zs%LGR>U- z!x4Y_|4{gx?ZPJobISy991O znrmrC3otC;#4^&Rg_iK}XH(XX+eUHN0@Oe06hJk}F?`$)KmH^eWz@@N%wEc)%>?Ft z#9QAroDeyfztQ5Qe{m*#R#T%-h*&XvSEn@N$hYRTCMXS|EPwzF3IIysD2waj`vQD{ zv_#^Pgr?s~I*NE=acf@dWVRNWTr(GN0wrL)Z2=`Dr>}&ZDNX|+^Anl{Di%v1Id$_p zK5_H5`RDjJx`BW7hc85|> zHMMsWJ4KTMRHGu+vy*kBEMjz*^K8VtU=bXJYdhdZ-?jTXa$&n)C?QQIZ7ln$qbGlr zS*TYE+ppOrI@AoPP=VI-OXm}FzgXRL)OPvR$a_=SsC<3Jb+>5makX|U!}3lx4tX&L z^C<{9TggZNoeX!P1jX_K5HkEVnQ#s2&c#umzV6s2U-Q;({l+j^?hi7JnQ7&&*oOy9 z(|0asVTWUCiCnjcOnB2pN0DpuTglKq;&SFOQ3pUdye*eT<2()7WKbXp1qq9=bhMWlF-7BHT|i3TEIT77AcjD(v=I207wi-=vyiw5mxgPdTVUC z&h^FEUrXwWs9en2C{ywZp;nvS(Mb$8sBEh-*_d-OEm%~p1b2EpcwUdf<~zmJmaSTO zSX&&GGCEz-M^)G$fBvLC2q@wM$;n4jp+mt0MJFLuJ%c`tSp8$xuP|G81GEd2ci$|M z4XmH{5$j?rqDWoL4vs!}W&!?!rtj=6WKJcE>)?NVske(p;|#>vL|M_$as=mi-n-()a*OU3Okmk0wC<9y7t^D(er-&jEEak2!NnDiOQ99Wx8{S8}=Ng!e0tzj*#T)+%7;aM$ z&H}|o|J1p{IK0Q7JggAwipvHvko6>Epmh4RFRUr}$*2K4dz85o7|3#Bec9SQ4Y*;> zXWjT~f+d)dp_J`sV*!w>B%)#GI_;USp7?0810&3S=WntGZ)+tzhZ+!|=XlQ&@G@~3 z-dw@I1>9n1{+!x^Hz|xC+P#Ab`E@=vY?3%Bc!Po~e&&&)Qp85!I|U<-fCXy*wMa&t zgDk!l;gk;$taOCV$&60z+}_$ykz=Ea*)wJQ3-M|p*EK(cvtIre0Pta~(95J7zoxBN zS(yE^3?>88AL0Wfuou$BM{lR1hkrRibz=+I9ccwd`ZC*{NNqL)3pCcw^ygMmrG^Yp zn5f}Xf>%gncC=Yq96;rnfp4FQL#{!Y*->e82rHgY4Zwy{`JH}b9*qr^VA{%~Z}jtp z_t$PlS6}5{NtTqXHN?uI8ut8rOaD#F1C^ls73S=b_yI#iZDOGz3#^L@YheGd>L;<( z)U=iYj;`{>VDNzIxcjbTk-X3keXR8Xbc`A$o5# zKGSk-7YcoBYuAFFSCjGi;7b<;n-*`USs)IX z=0q6WZ=L!)PkYtZE-6)azhXV|+?IVGTOmMCHjhkBjfy@k1>?yFO3u!)@cl{fFAXnRYsWk)kpT?X{_$J=|?g@Q}+kFw|%n!;Zo}|HE@j=SFMvT8v`6Y zNO;tXN^036nOB2%=KzxB?n~NQ1K8IO*UE{;Xy;N^ZNI#P+hRZOaHATz9(=)w=QwV# z`z3+P>9b?l-@$@P3<;w@O1BdKh+H;jo#_%rr!ute{|YX4g5}n?O7Mq^01S5;+lABE+7`&_?mR_z7k|Ja#8h{!~j)| zbBX;*fsbUak_!kXU%HfJ2J+G7;inu#uRjMb|8a){=^))y236LDZ$$q3LRlat1D)%7K0!q5hT5V1j3qHc7MG9 z_)Q=yQ>rs>3%l=vu$#VVd$&IgO}Za#?aN!xY>-<3PhzS&q!N<=1Q7VJBfHjug^4|) z*fW^;%3}P7X#W3d;tUs3;`O&>;NKZBMR8au6>7?QriJ@gBaorz-+`pUWOP73DJL=M z(33uT6Gz@Sv40F6bN|H=lpcO z^AJl}&=TIjdevuDQ!w0K*6oZ2JBOhb31q!XDArFyKpz!I$p4|;c}@^bX{>AXdt7Bm zaLTk?c%h@%xq02reu~;t@$bv`b3i(P=g}~ywgSFpM;}b$zAD+=I!7`V~}ARB(Wx0C(EAq@?GuxOL9X+ffbkn3+Op0*80TqmpAq~EXmv%cq36celXmRz z%0(!oMp&2?`W)ALA&#|fu)MFp{V~~zIIixOxY^YtO5^FSox8v$#d0*{qk0Z)pNTt0QVZ^$`4vImEB>;Lo2!7K05TpY-sl#sWBz_W-aDIV`Ksabi zvpa#93Svo!70W*Ydh)Qzm{0?CU`y;T^ITg-J9nfWeZ-sbw)G@W?$Eomf%Bg2frfh5 zRm1{|E0+(4zXy){$}uC3%Y-mSA2-^I>Tw|gQx|7TDli_hB>``)Q^aZ`LJC2V3U$SABP}T)%}9g2pF9dT}aC~!rFFgkl1J$ z`^z{Arn3On-m%}r}TGF8KQe*OjSJ=T|caa_E;v89A{t@$yT^(G9=N9F?^kT*#s3qhJq!IH5|AhnqFd z0B&^gm3w;YbMNUKU>naBAO@fbz zqw=n!@--}o5;k6DvTW9pw)IJVz;X}ncbPVrmH>4x);8cx;q3UyiML1PWp%bxSiS|^ zC5!kc4qw%NSOGQ*Kcd#&$30=lDvs#*4W4q0u8E02U)7d=!W7+NouEyuF1dyH$D@G& zaFaxo9Ex|ZXA5y{eZT*i*dP~INSMAi@mvEX@q5i<&o&#sM}Df?Og8n8Ku4vOux=T% zeuw~z1hR}ZNwTn8KsQHKLwe2>p^K`YWUJEdVEl|mO21Bov!D0D$qPoOv=vJJ`)|%_ z>l%`eexY7t{BlVKP!`a^U@nM?#9OC*t76My_E_<16vCz1x_#82qj2PkWiMWgF8bM9 z(1t4VdHcJ;B~;Q%x01k_gQ0>u2*OjuEWNOGX#4}+N?Gb5;+NQMqp}Puqw2HnkYuKA zzKFWGHc&K>gwVgI1Sc9OT1s6fq=>$gZU!!xsilA$fF`kLdGoX*^t}ao@+^WBpk>`8 z4v_~gK|c2rCq#DZ+H)$3v~Hoi=)=1D==e3P zpKrRQ+>O^cyTuWJ%2}__0Z9SM_z9rptd*;-9uC1tDw4+A!=+K%8~M&+Zk#13hY$Y$ zo-8$*8dD5@}XDi19RjK6T^J~DIXbF5w&l?JLHMrf0 zLv0{7*G!==o|B%$V!a=EtVHdMwXLtmO~vl}P6;S(R2Q>*kTJK~!}gloxj)m|_LYK{ zl(f1cB=EON&wVFwK?MGn^nWuh@f95SHatPs(jcwSY#Dnl1@_gkOJ5=f`%s$ZHljRH0 z+c%lrb=Gi&N&1>^L_}#m>=U=(oT^vTA&3!xXNyqi$pdW1BDJ#^{h|2tZc{t^vag3& zAD7*8C`chNF|27itjBUo^CCDyEpJLX3&u+(L;YeeMwnXEoyN(ytoEabcl$lSgx~Ltatn}b$@j_yyMrBb03)shJE*$;Mw=;mZd&8e>IzE+4WIoH zCSZE7WthNUL$|Y#m!Hn?x7V1CK}V`KwW2D$-7&ODy5Cj;!_tTOOo1Mm%(RUt)#$@3 zhurA)t<7qik%%1Et+N1?R#hdBB#LdQ7{%-C zn$(`5e0eFh(#c*hvF>WT*07fk$N_631?W>kfjySN8^XC9diiOd#s?4tybICF;wBjp zIPzilX3{j%4u7blhq)tnaOBZ_`h_JqHXuI7SuIlNTgBk9{HIS&3|SEPfrvcE<@}E` zKk$y*nzsqZ{J{uWW9;#n=de&&h>m#A#q)#zRonr(?mDOYU&h&aQWD;?Z(22wY?t$U3qo`?{+amA$^TkxL+Ex2dh`q7iR&TPd0Ymwzo#b? zP$#t=elB5?k$#uE$K>C$YZbYUX_JgnXA`oF_Ifz4H7LEOW~{Gww&3s=wH4+j8*TU| zSX%LtJWqhr-xGNSe{;(16kxnak6RnZ{0qZ^kJI5X*It_YuynSpi(^-}Lolr{)#z_~ zw!(J-8%7Ybo^c3(mED`Xz8xecP35a6M8HarxRn%+NJBE;dw>>Y2T&;jzRd4FSDO3T zt*y+zXCtZQ0bP0yf6HRpD|WmzP;DR^-g^}{z~0x~z4j8m zucTe%k&S9Nt-?Jb^gYW1w6!Y3AUZ0Jcq;pJ)Exz%7k+mUOm6%ApjjSmflfKwBo6`B zhNb@$NHTJ>guaj9S{@DX)!6)b-Shav=DNKWy(V00k(D!v?PAR0f0vDNq*#mYmUp6> z76KxbFDw5U{{qx{BRj(>?|C`82ICKbfLxoldov-M?4Xl+3;I4GzLHyPOzYw7{WQST zPNYcx5onA%MAO9??41Po*1zW(Y%Zzn06-lUp{s<3!_9vv9HBjT02On0Hf$}NP;wF) zP<`2p3}A^~1YbvOh{ePMx$!JGUPX-tbBzp3mDZMY;}h;sQ->!p97GA)9a|tF(Gh{1$xk7 zUw?ELkT({Xw!KIr);kTRb1b|UL`r2_`a+&UFVCdJ)1T#fdh;71EQl9790Br0m_`$x z9|ZANuchFci8GNZ{XbP=+uXSJRe(;V5laQz$u18#?X*9}x7cIEbnr%<=1cX3EIu7$ zhHW6pe5M(&qEtsqRa>?)*{O;OJT+YUhG5{km|YI7I@JL_3Hwao9aXneiSA~a* z|Lp@c-oMNyeAEuUz{F?kuou3x#C*gU?lon!RC1s37gW^0Frc`lqQWH&(J4NoZg3m8 z;Lin#8Q+cFPD7MCzj}#|ws7b@?D9Q4dVjS4dpco=4yX5SSH=A@U@yqPdp@?g?qeia zH=Tt_9)G=6C2QIPsi-QipnK(mc0xXIN;j$WLf@n8eYvMk;*H-Q4tK%(3$CN}NGgO8n}fD~+>?<3UzvsrMf*J~%i;VKQHbF%TPalFi=#sgj)(P#SM^0Q=Tr>4kJVw8X3iWsP|e8tj}NjlMdWp z@2+M4HQu~3!=bZpjh;;DIDk&X}=c8~kn)FWWH z2KL1w^rA5&1@@^X%MjZ7;u(kH=YhH2pJPFQe=hn>tZd5RC5cfGYis8s9PKaxi*}-s6*W zRA^PwR=y^5Z){!(4D9-KC;0~;b*ploznFOaU`bJ_7U?qAi#mTo!&rIECRL$_y@yI27x2?W+zqDBD5~KCVYKFZLK+>ABC(Kj zeAll)KMgIlAG`r^rS{loBrGLtzhHY8$)<_S<(Dpkr(Ym@@vnQ&rS@FC*>2@XCH}M+an74WcRDcoQ+a3@A z9tYhl5$z7bMdTvD2r&jztBuo37?*k~wcU9GK2-)MTFS-lux-mIRYUuGUCI~V$?s#< z?1qAWb(?ZLm(N>%S%y10COdaq_Tm5c^%ooIxpR=`3e4C|@O5wY+eLik&XVi5oT7oe zmxH)Jd*5eo@!7t`x8!K=-+zJ-Sz)B_V$)s1pW~CDU$=q^&ABvf6S|?TOMB-RIm@CoFg>mjIQE)?+A1_3s6zmFU_oW&BqyMz1mY*IcP_2knjq5 zqw~JK(cVsmzc7*EvTT2rvpeqhg)W=%TOZ^>f`rD4|7Z5fq*2D^lpCttIg#ictgqZ$P@ru6P#f$x#KfnfTZj~LG6U_d-kE~`;kU_X)`H5so@?C zWmb!7x|xk@0L~0JFall*@ltyiL^)@3m4MqC7(7H0sH!WidId1#f#6R{Q&A!XzO1IAcIx;$k66dumt6lpUw@nL2MvqJ5^kbOVZ<^2jt5-njy|2@`07}0w z;M%I1$FCoLy`8xp8Tk)bFr;7aJeQ9KK6p=O$U0-&JYYy8woV*>b+FB?xLX`=pirYM z5K$BA(u)+jR{?O2r$c_Qvl?M{=Ar{yQ!UVsVn4k@0!b?_lA;dVz9uaQUgBH8Oz(Sb zrEs;&Ey>_ex8&!N{PmQjp+-Hlh|OA&wvDai#GpU=^-B70V0*LF=^bi+Nhe_o|azZ%~ZZ1$}LTmWt4aoB1 zPgccm$EwYU+jrdBaQFxQfn5gd(gM`Y*Ro1n&Zi?j=(>T3kmf94vdhf?AuS8>$Va#P zGL5F+VHpxdsCUa}+RqavXCobI-@B;WJbMphpK2%6t=XvKWWE|ruvREgM+|V=i6;;O zx$g=7^`$XWn0fu!gF=Xe9cMB8Z_SelD>&o&{1XFS`|nInK3BXlaeD*rc;R-#osyIS zWv&>~^TLIyBB6oDX+#>3<_0+2C4u2zK^wmHXXDD9_)kmLYJ!0SzM|%G9{pi)`X$uf zW}|%%#LgyK7m(4{V&?x_0KEDq56tk|0YNY~B(Sr|>WVz-pO3A##}$JCT}5P7DY+@W z#gJv>pA5>$|E3WO2tV7G^SuymB?tY`ooKcN3!vaQMnBNk-WATF{-$#}FyzgtJ8M^; zUK6KWSG)}6**+rZ&?o@PK3??uN{Q)#+bDP9i1W&j)oaU5d0bIWJ_9T5ac!qc?x66Q z$KUSZ`nYY94qfN_dpTFr8OW~A?}LD;Yty-BA)-be5Z3S#t2Io%q+cAbnGj1t$|qFR z9o?8B7OA^KjCYL=-!p}w(dkC^G6Nd%_I=1))PC0w5}ZZGJxfK)jP4Fwa@b-SYBw?% zdz9B-<`*B2dOn(N;mcTm%Do)rIvfXRNFX&1h`?>Rzuj~Wx)$p13nrDlS8-jwq@e@n zNIj_|8or==8~1h*Ih?w*8K7rYkGlwlTWAwLKc5}~dfz3y`kM&^Q|@C%1VAp_$wnw6zG~W4O+^ z>i?NY?oXf^Puc~+fDM$VgRNBpOZj{2cMP~gCqWAX4 z7>%$ux8@a&_B(pt``KSt;r+sR-$N;jdpY>|pyvPiN)9ohd*>mVST3wMo)){`B(&eX z1?zZJ-4u9NZ|~j1rdZYq4R$?swf}<6(#ex%7r{kh%U@kT)&kWuAszS%oJts=*OcL9 zaZwK<5DZw%1IFHXgFplP6JiL^dk8+SgM$D?8X+gE4172hXh!WeqIO>}$I9?Nry$*S zQ#f)RuH{P7RwA3v9f<-w>{PSzom;>(i&^l{E0(&Xp4A-*q-@{W1oE3K;1zb{&n28dSC2$N+6auXe0}e4b z)KLJ?5c*>@9K#I^)W;uU_Z`enquTUxr>mNq z1{0_puF-M7j${rs!dxxo3EelGodF1TvjV;Zpo;s{5f1pyCuRp=HDZ?s#IA4f?h|-p zGd|Mq^4hDa@Bh!c4ZE?O&x&XZ_ptZGYK4$9F4~{%R!}G1leCBx`dtNUS|K zL-7J5s4W@%mhXg1!}a4PD%!t&Qn%f_oquRajn3@C*)`o&K9o7V6DwzVMEhjVdDJ1fjhr#@=lp#@4EBqi=CCQ>73>R(>QKPNM&_Jpe5G`n4wegeC`FYEPJ{|vwS>$-`fuRSp3927qOv|NC3T3G-0 zA{K`|+tQy1yqE$ShWt8ny&5~)%ITb@^+x$w0)f&om;P8B)@}=Wzy59BwUfZ1vqw87 za2lB8J(&*l#(V}Id8SyQ0C(2amzkz3EqG&Ed0Jq1)$|&>4_|NIe=5|n=3?siFV0fI z{As5DLW^gs|B-b4C;Hd(SM-S~GQhzb>HgF2|2Usww0nL^;x@1eaB)=+Clj+$fF@H( z-fqP??~QMT$KI-#m;QC*&6vkp&8699G3)Bq0*kFZXINw=b9OVaed(3(3kS|IZ)CM? zJdnW&%t8MveBuK21uiYj)_a{Fnw0OErMzMN?d$QoPwkhOwcP&p+t>P)4tHlYw-pPN z^oJ=uc$Sl>pv@fZH~ZqxSvdhF@F1s=oZawpr^-#l{IIOGG=T%QXjtwPhIg-F@k@uIlr?J->Ia zpEUQ*=4g|XYn4Gez&aHr*;t$u3oODPmc2Ku)2Og|xjc%w;q!Zz+zY)*3{7V8bK4;& zYV82FZ+8?v)`J|G1w4I0fWdKg|2b#iaazCv;|?(W-q}$o&Y}Q5d@BRk^jL7#{kbCK zSgkyu;=DV+or2)AxCBgq-nj5=@n^`%T#V+xBGEkW4lCqrE)LMv#f;AvD__cQ@Eg3`~x| zW+h9mofSXCq5|M)9|ez(#X?-sxB%Go8};sJ?2abp(Y!lyi>k)|{M*Z$c{e1-K4ky` MPgg&ebxsLQ025IeI{*Lx literal 0 HcmV?d00001 diff --git a/mih_ui/android/build/ios/SourcePackages/firebase_app_check-0.4.5/example/web/index.html b/mih_ui/android/build/ios/SourcePackages/firebase_app_check-0.4.5/example/web/index.html new file mode 100644 index 00000000..e619aadd --- /dev/null +++ b/mih_ui/android/build/ios/SourcePackages/firebase_app_check-0.4.5/example/web/index.html @@ -0,0 +1,41 @@ + + + + + + + + + + + + + + + + + + + + flutterfire_app_check + + + + + + + diff --git a/mih_ui/android/build/ios/SourcePackages/firebase_app_check-0.4.5/example/web/manifest.json b/mih_ui/android/build/ios/SourcePackages/firebase_app_check-0.4.5/example/web/manifest.json new file mode 100644 index 00000000..a5a5ebda --- /dev/null +++ b/mih_ui/android/build/ios/SourcePackages/firebase_app_check-0.4.5/example/web/manifest.json @@ -0,0 +1,35 @@ +{ + "name": "flutterfire_app_check", + "short_name": "flutterfire_app_check", + "start_url": ".", + "display": "standalone", + "background_color": "#0175C2", + "theme_color": "#0175C2", + "description": "A new Flutter project.", + "orientation": "portrait-primary", + "prefer_related_applications": false, + "icons": [ + { + "src": "icons/Icon-192.png", + "sizes": "192x192", + "type": "image/png" + }, + { + "src": "icons/Icon-512.png", + "sizes": "512x512", + "type": "image/png" + }, + { + "src": "icons/Icon-maskable-192.png", + "sizes": "192x192", + "type": "image/png", + "purpose": "maskable" + }, + { + "src": "icons/Icon-maskable-512.png", + "sizes": "512x512", + "type": "image/png", + "purpose": "maskable" + } + ] +} diff --git a/mih_ui/android/build/ios/SourcePackages/firebase_app_check-0.4.5/example/windows/CMakeLists.txt b/mih_ui/android/build/ios/SourcePackages/firebase_app_check-0.4.5/example/windows/CMakeLists.txt new file mode 100644 index 00000000..ffc5f0c5 --- /dev/null +++ b/mih_ui/android/build/ios/SourcePackages/firebase_app_check-0.4.5/example/windows/CMakeLists.txt @@ -0,0 +1,108 @@ +# Project-level configuration. +cmake_minimum_required(VERSION 3.14) +project(firebase_app_check_example LANGUAGES CXX) + +# The name of the executable created for the application. Change this to change +# the on-disk name of your application. +set(BINARY_NAME "firebase_app_check_example") + +# Explicitly opt in to modern CMake behaviors to avoid warnings with recent +# versions of CMake. +cmake_policy(VERSION 3.14...3.25) + +# Define build configuration option. +get_property(IS_MULTICONFIG GLOBAL PROPERTY GENERATOR_IS_MULTI_CONFIG) +if(IS_MULTICONFIG) + set(CMAKE_CONFIGURATION_TYPES "Debug;Profile;Release" + CACHE STRING "" FORCE) +else() + if(NOT CMAKE_BUILD_TYPE AND NOT CMAKE_CONFIGURATION_TYPES) + set(CMAKE_BUILD_TYPE "Debug" CACHE + STRING "Flutter build mode" FORCE) + set_property(CACHE CMAKE_BUILD_TYPE PROPERTY STRINGS + "Debug" "Profile" "Release") + endif() +endif() +# Define settings for the Profile build mode. +set(CMAKE_EXE_LINKER_FLAGS_PROFILE "${CMAKE_EXE_LINKER_FLAGS_RELEASE}") +set(CMAKE_SHARED_LINKER_FLAGS_PROFILE "${CMAKE_SHARED_LINKER_FLAGS_RELEASE}") +set(CMAKE_C_FLAGS_PROFILE "${CMAKE_C_FLAGS_RELEASE}") +set(CMAKE_CXX_FLAGS_PROFILE "${CMAKE_CXX_FLAGS_RELEASE}") + +# Use Unicode for all projects. +add_definitions(-DUNICODE -D_UNICODE) + +# Compilation settings that should be applied to most targets. +# +# Be cautious about adding new options here, as plugins use this function by +# default. In most cases, you should add new options to specific targets instead +# of modifying this function. +function(APPLY_STANDARD_SETTINGS TARGET) + target_compile_features(${TARGET} PUBLIC cxx_std_17) + target_compile_options(${TARGET} PRIVATE /W4 /WX /wd"4100") + target_compile_options(${TARGET} PRIVATE /EHsc) + target_compile_definitions(${TARGET} PRIVATE "_HAS_EXCEPTIONS=0") + target_compile_definitions(${TARGET} PRIVATE "$<$:_DEBUG>") +endfunction() + +# Flutter library and tool build rules. +set(FLUTTER_MANAGED_DIR "${CMAKE_CURRENT_SOURCE_DIR}/flutter") +add_subdirectory(${FLUTTER_MANAGED_DIR}) + +# Application build; see runner/CMakeLists.txt. +add_subdirectory("runner") + + +# Generated plugin build rules, which manage building the plugins and adding +# them to the application. +include(flutter/generated_plugins.cmake) + + +# === Installation === +# Support files are copied into place next to the executable, so that it can +# run in place. This is done instead of making a separate bundle (as on Linux) +# so that building and running from within Visual Studio will work. +set(BUILD_BUNDLE_DIR "$") +# Make the "install" step default, as it's required to run. +set(CMAKE_VS_INCLUDE_INSTALL_TO_DEFAULT_BUILD 1) +if(CMAKE_INSTALL_PREFIX_INITIALIZED_TO_DEFAULT) + set(CMAKE_INSTALL_PREFIX "${BUILD_BUNDLE_DIR}" CACHE PATH "..." FORCE) +endif() + +set(INSTALL_BUNDLE_DATA_DIR "${CMAKE_INSTALL_PREFIX}/data") +set(INSTALL_BUNDLE_LIB_DIR "${CMAKE_INSTALL_PREFIX}") + +install(TARGETS ${BINARY_NAME} RUNTIME DESTINATION "${CMAKE_INSTALL_PREFIX}" + COMPONENT Runtime) + +install(FILES "${FLUTTER_ICU_DATA_FILE}" DESTINATION "${INSTALL_BUNDLE_DATA_DIR}" + COMPONENT Runtime) + +install(FILES "${FLUTTER_LIBRARY}" DESTINATION "${INSTALL_BUNDLE_LIB_DIR}" + COMPONENT Runtime) + +if(PLUGIN_BUNDLED_LIBRARIES) + install(FILES "${PLUGIN_BUNDLED_LIBRARIES}" + DESTINATION "${INSTALL_BUNDLE_LIB_DIR}" + COMPONENT Runtime) +endif() + +# Copy the native assets provided by the build.dart from all packages. +set(NATIVE_ASSETS_DIR "${PROJECT_BUILD_DIR}native_assets/windows/") +install(DIRECTORY "${NATIVE_ASSETS_DIR}" + DESTINATION "${INSTALL_BUNDLE_LIB_DIR}" + COMPONENT Runtime) + +# Fully re-copy the assets directory on each build to avoid having stale files +# from a previous install. +set(FLUTTER_ASSET_DIR_NAME "flutter_assets") +install(CODE " + file(REMOVE_RECURSE \"${INSTALL_BUNDLE_DATA_DIR}/${FLUTTER_ASSET_DIR_NAME}\") + " COMPONENT Runtime) +install(DIRECTORY "${PROJECT_BUILD_DIR}/${FLUTTER_ASSET_DIR_NAME}" + DESTINATION "${INSTALL_BUNDLE_DATA_DIR}" COMPONENT Runtime) + +# Install the AOT library on non-Debug builds only. +install(FILES "${AOT_LIBRARY}" DESTINATION "${INSTALL_BUNDLE_DATA_DIR}" + CONFIGURATIONS Profile;Release + COMPONENT Runtime) diff --git a/mih_ui/android/build/ios/SourcePackages/firebase_app_check-0.4.5/example/windows/flutter/CMakeLists.txt b/mih_ui/android/build/ios/SourcePackages/firebase_app_check-0.4.5/example/windows/flutter/CMakeLists.txt new file mode 100644 index 00000000..903f4899 --- /dev/null +++ b/mih_ui/android/build/ios/SourcePackages/firebase_app_check-0.4.5/example/windows/flutter/CMakeLists.txt @@ -0,0 +1,109 @@ +# This file controls Flutter-level build steps. It should not be edited. +cmake_minimum_required(VERSION 3.14) + +set(EPHEMERAL_DIR "${CMAKE_CURRENT_SOURCE_DIR}/ephemeral") + +# Configuration provided via flutter tool. +include(${EPHEMERAL_DIR}/generated_config.cmake) + +# TODO: Move the rest of this into files in ephemeral. See +# https://github.com/flutter/flutter/issues/57146. +set(WRAPPER_ROOT "${EPHEMERAL_DIR}/cpp_client_wrapper") + +# Set fallback configurations for older versions of the flutter tool. +if (NOT DEFINED FLUTTER_TARGET_PLATFORM) + set(FLUTTER_TARGET_PLATFORM "windows-x64") +endif() + +# === Flutter Library === +set(FLUTTER_LIBRARY "${EPHEMERAL_DIR}/flutter_windows.dll") + +# Published to parent scope for install step. +set(FLUTTER_LIBRARY ${FLUTTER_LIBRARY} PARENT_SCOPE) +set(FLUTTER_ICU_DATA_FILE "${EPHEMERAL_DIR}/icudtl.dat" PARENT_SCOPE) +set(PROJECT_BUILD_DIR "${PROJECT_DIR}/build/" PARENT_SCOPE) +set(AOT_LIBRARY "${PROJECT_DIR}/build/windows/app.so" PARENT_SCOPE) + +list(APPEND FLUTTER_LIBRARY_HEADERS + "flutter_export.h" + "flutter_windows.h" + "flutter_messenger.h" + "flutter_plugin_registrar.h" + "flutter_texture_registrar.h" +) +list(TRANSFORM FLUTTER_LIBRARY_HEADERS PREPEND "${EPHEMERAL_DIR}/") +add_library(flutter INTERFACE) +target_include_directories(flutter INTERFACE + "${EPHEMERAL_DIR}" +) +target_link_libraries(flutter INTERFACE "${FLUTTER_LIBRARY}.lib") +add_dependencies(flutter flutter_assemble) + +# === Wrapper === +list(APPEND CPP_WRAPPER_SOURCES_CORE + "core_implementations.cc" + "standard_codec.cc" +) +list(TRANSFORM CPP_WRAPPER_SOURCES_CORE PREPEND "${WRAPPER_ROOT}/") +list(APPEND CPP_WRAPPER_SOURCES_PLUGIN + "plugin_registrar.cc" +) +list(TRANSFORM CPP_WRAPPER_SOURCES_PLUGIN PREPEND "${WRAPPER_ROOT}/") +list(APPEND CPP_WRAPPER_SOURCES_APP + "flutter_engine.cc" + "flutter_view_controller.cc" +) +list(TRANSFORM CPP_WRAPPER_SOURCES_APP PREPEND "${WRAPPER_ROOT}/") + +# Wrapper sources needed for a plugin. +add_library(flutter_wrapper_plugin STATIC + ${CPP_WRAPPER_SOURCES_CORE} + ${CPP_WRAPPER_SOURCES_PLUGIN} +) +apply_standard_settings(flutter_wrapper_plugin) +set_target_properties(flutter_wrapper_plugin PROPERTIES + POSITION_INDEPENDENT_CODE ON) +set_target_properties(flutter_wrapper_plugin PROPERTIES + CXX_VISIBILITY_PRESET hidden) +target_link_libraries(flutter_wrapper_plugin PUBLIC flutter) +target_include_directories(flutter_wrapper_plugin PUBLIC + "${WRAPPER_ROOT}/include" +) +add_dependencies(flutter_wrapper_plugin flutter_assemble) + +# Wrapper sources needed for the runner. +add_library(flutter_wrapper_app STATIC + ${CPP_WRAPPER_SOURCES_CORE} + ${CPP_WRAPPER_SOURCES_APP} +) +apply_standard_settings(flutter_wrapper_app) +target_link_libraries(flutter_wrapper_app PUBLIC flutter) +target_include_directories(flutter_wrapper_app PUBLIC + "${WRAPPER_ROOT}/include" +) +add_dependencies(flutter_wrapper_app flutter_assemble) + +# === Flutter tool backend === +# _phony_ is a non-existent file to force this command to run every time, +# since currently there's no way to get a full input/output list from the +# flutter tool. +set(PHONY_OUTPUT "${CMAKE_CURRENT_BINARY_DIR}/_phony_") +set_source_files_properties("${PHONY_OUTPUT}" PROPERTIES SYMBOLIC TRUE) +add_custom_command( + OUTPUT ${FLUTTER_LIBRARY} ${FLUTTER_LIBRARY_HEADERS} + ${CPP_WRAPPER_SOURCES_CORE} ${CPP_WRAPPER_SOURCES_PLUGIN} + ${CPP_WRAPPER_SOURCES_APP} + ${PHONY_OUTPUT} + COMMAND ${CMAKE_COMMAND} -E env + ${FLUTTER_TOOL_ENVIRONMENT} + "${FLUTTER_ROOT}/packages/flutter_tools/bin/tool_backend.bat" + ${FLUTTER_TARGET_PLATFORM} $ + VERBATIM +) +add_custom_target(flutter_assemble DEPENDS + "${FLUTTER_LIBRARY}" + ${FLUTTER_LIBRARY_HEADERS} + ${CPP_WRAPPER_SOURCES_CORE} + ${CPP_WRAPPER_SOURCES_PLUGIN} + ${CPP_WRAPPER_SOURCES_APP} +) diff --git a/mih_ui/android/build/ios/SourcePackages/firebase_app_check-0.4.5/example/windows/runner/CMakeLists.txt b/mih_ui/android/build/ios/SourcePackages/firebase_app_check-0.4.5/example/windows/runner/CMakeLists.txt new file mode 100644 index 00000000..394917c0 --- /dev/null +++ b/mih_ui/android/build/ios/SourcePackages/firebase_app_check-0.4.5/example/windows/runner/CMakeLists.txt @@ -0,0 +1,40 @@ +cmake_minimum_required(VERSION 3.14) +project(runner LANGUAGES CXX) + +# Define the application target. To change its name, change BINARY_NAME in the +# top-level CMakeLists.txt, not the value here, or `flutter run` will no longer +# work. +# +# Any new source files that you add to the application should be added here. +add_executable(${BINARY_NAME} WIN32 + "flutter_window.cpp" + "main.cpp" + "utils.cpp" + "win32_window.cpp" + "${FLUTTER_MANAGED_DIR}/generated_plugin_registrant.cc" + "Runner.rc" + "runner.exe.manifest" +) + +# Apply the standard set of build settings. This can be removed for applications +# that need different build settings. +apply_standard_settings(${BINARY_NAME}) + +# Add preprocessor definitions for the build version. +target_compile_definitions(${BINARY_NAME} PRIVATE "FLUTTER_VERSION=\"${FLUTTER_VERSION}\"") +target_compile_definitions(${BINARY_NAME} PRIVATE "FLUTTER_VERSION_MAJOR=${FLUTTER_VERSION_MAJOR}") +target_compile_definitions(${BINARY_NAME} PRIVATE "FLUTTER_VERSION_MINOR=${FLUTTER_VERSION_MINOR}") +target_compile_definitions(${BINARY_NAME} PRIVATE "FLUTTER_VERSION_PATCH=${FLUTTER_VERSION_PATCH}") +target_compile_definitions(${BINARY_NAME} PRIVATE "FLUTTER_VERSION_BUILD=${FLUTTER_VERSION_BUILD}") + +# Disable Windows macros that collide with C++ standard library functions. +target_compile_definitions(${BINARY_NAME} PRIVATE "NOMINMAX") + +# Add dependency libraries and include directories. Add any application-specific +# dependencies here. +target_link_libraries(${BINARY_NAME} PRIVATE flutter flutter_wrapper_app) +target_link_libraries(${BINARY_NAME} PRIVATE "dwmapi.lib") +target_include_directories(${BINARY_NAME} PRIVATE "${CMAKE_SOURCE_DIR}") + +# Run the Flutter tool portions of the build. This must not be removed. +add_dependencies(${BINARY_NAME} flutter_assemble) diff --git a/mih_ui/android/build/ios/SourcePackages/firebase_app_check-0.4.5/example/windows/runner/Runner.rc b/mih_ui/android/build/ios/SourcePackages/firebase_app_check-0.4.5/example/windows/runner/Runner.rc new file mode 100644 index 00000000..26d198ff --- /dev/null +++ b/mih_ui/android/build/ios/SourcePackages/firebase_app_check-0.4.5/example/windows/runner/Runner.rc @@ -0,0 +1,121 @@ +// Microsoft Visual C++ generated resource script. +// +#pragma code_page(65001) +#include "resource.h" + +#define APSTUDIO_READONLY_SYMBOLS +///////////////////////////////////////////////////////////////////////////// +// +// Generated from the TEXTINCLUDE 2 resource. +// +#include "winres.h" + +///////////////////////////////////////////////////////////////////////////// +#undef APSTUDIO_READONLY_SYMBOLS + +///////////////////////////////////////////////////////////////////////////// +// English (United States) resources + +#if !defined(AFX_RESOURCE_DLL) || defined(AFX_TARG_ENU) +LANGUAGE LANG_ENGLISH, SUBLANG_ENGLISH_US + +#ifdef APSTUDIO_INVOKED +///////////////////////////////////////////////////////////////////////////// +// +// TEXTINCLUDE +// + +1 TEXTINCLUDE +BEGIN + "resource.h\0" +END + +2 TEXTINCLUDE +BEGIN + "#include ""winres.h""\r\n" + "\0" +END + +3 TEXTINCLUDE +BEGIN + "\r\n" + "\0" +END + +#endif // APSTUDIO_INVOKED + + +///////////////////////////////////////////////////////////////////////////// +// +// Icon +// + +// Icon with lowest ID value placed first to ensure application icon +// remains consistent on all systems. +IDI_APP_ICON ICON "resources\\app_icon.ico" + + +///////////////////////////////////////////////////////////////////////////// +// +// Version +// + +#if defined(FLUTTER_VERSION_MAJOR) && defined(FLUTTER_VERSION_MINOR) && defined(FLUTTER_VERSION_PATCH) && defined(FLUTTER_VERSION_BUILD) +#define VERSION_AS_NUMBER FLUTTER_VERSION_MAJOR,FLUTTER_VERSION_MINOR,FLUTTER_VERSION_PATCH,FLUTTER_VERSION_BUILD +#else +#define VERSION_AS_NUMBER 1,0,0,0 +#endif + +#if defined(FLUTTER_VERSION) +#define VERSION_AS_STRING FLUTTER_VERSION +#else +#define VERSION_AS_STRING "1.0.0" +#endif + +VS_VERSION_INFO VERSIONINFO + FILEVERSION VERSION_AS_NUMBER + PRODUCTVERSION VERSION_AS_NUMBER + FILEFLAGSMASK VS_FFI_FILEFLAGSMASK +#ifdef _DEBUG + FILEFLAGS VS_FF_DEBUG +#else + FILEFLAGS 0x0L +#endif + FILEOS VOS__WINDOWS32 + FILETYPE VFT_APP + FILESUBTYPE 0x0L +BEGIN + BLOCK "StringFileInfo" + BEGIN + BLOCK "040904e4" + BEGIN + VALUE "CompanyName", "io.flutter.plugins.firebase.appcheck" "\0" + VALUE "FileDescription", "firebase_app_check_example" "\0" + VALUE "FileVersion", VERSION_AS_STRING "\0" + VALUE "InternalName", "firebase_app_check_example" "\0" + VALUE "LegalCopyright", "Copyright (C) 2026 io.flutter.plugins.firebase.appcheck. All rights reserved." "\0" + VALUE "OriginalFilename", "firebase_app_check_example.exe" "\0" + VALUE "ProductName", "firebase_app_check_example" "\0" + VALUE "ProductVersion", VERSION_AS_STRING "\0" + END + END + BLOCK "VarFileInfo" + BEGIN + VALUE "Translation", 0x409, 1252 + END +END + +#endif // English (United States) resources +///////////////////////////////////////////////////////////////////////////// + + + +#ifndef APSTUDIO_INVOKED +///////////////////////////////////////////////////////////////////////////// +// +// Generated from the TEXTINCLUDE 3 resource. +// + + +///////////////////////////////////////////////////////////////////////////// +#endif // not APSTUDIO_INVOKED diff --git a/mih_ui/android/build/ios/SourcePackages/firebase_app_check-0.4.5/example/windows/runner/flutter_window.cpp b/mih_ui/android/build/ios/SourcePackages/firebase_app_check-0.4.5/example/windows/runner/flutter_window.cpp new file mode 100644 index 00000000..d1bd86f4 --- /dev/null +++ b/mih_ui/android/build/ios/SourcePackages/firebase_app_check-0.4.5/example/windows/runner/flutter_window.cpp @@ -0,0 +1,73 @@ +// Copyright 2025, the Chromium project authors. Please see the AUTHORS file +// for details. All rights reserved. Use of this source code is governed by a +// BSD-style license that can be found in the LICENSE file. + +#include "flutter_window.h" + +#include + +#include "flutter/generated_plugin_registrant.h" + +FlutterWindow::FlutterWindow(const flutter::DartProject& project) + : project_(project) {} + +FlutterWindow::~FlutterWindow() {} + +bool FlutterWindow::OnCreate() { + if (!Win32Window::OnCreate()) { + return false; + } + + RECT frame = GetClientArea(); + + // The size here must match the window dimensions to avoid unnecessary surface + // creation / destruction in the startup path. + flutter_controller_ = std::make_unique( + frame.right - frame.left, frame.bottom - frame.top, project_); + // Ensure that basic setup of the controller was successful. + if (!flutter_controller_->engine() || !flutter_controller_->view()) { + return false; + } + RegisterPlugins(flutter_controller_->engine()); + SetChildContent(flutter_controller_->view()->GetNativeWindow()); + + flutter_controller_->engine()->SetNextFrameCallback([&]() { this->Show(); }); + + // Flutter can complete the first frame before the "show window" callback is + // registered. The following call ensures a frame is pending to ensure the + // window is shown. It is a no-op if the first frame hasn't completed yet. + flutter_controller_->ForceRedraw(); + + return true; +} + +void FlutterWindow::OnDestroy() { + if (flutter_controller_) { + flutter_controller_ = nullptr; + } + + Win32Window::OnDestroy(); +} + +LRESULT +FlutterWindow::MessageHandler(HWND hwnd, UINT const message, + WPARAM const wparam, + LPARAM const lparam) noexcept { + // Give Flutter, including plugins, an opportunity to handle window messages. + if (flutter_controller_) { + std::optional result = + flutter_controller_->HandleTopLevelWindowProc(hwnd, message, wparam, + lparam); + if (result) { + return *result; + } + } + + switch (message) { + case WM_FONTCHANGE: + flutter_controller_->engine()->ReloadSystemFonts(); + break; + } + + return Win32Window::MessageHandler(hwnd, message, wparam, lparam); +} diff --git a/mih_ui/android/build/ios/SourcePackages/firebase_app_check-0.4.5/example/windows/runner/flutter_window.h b/mih_ui/android/build/ios/SourcePackages/firebase_app_check-0.4.5/example/windows/runner/flutter_window.h new file mode 100644 index 00000000..243c8352 --- /dev/null +++ b/mih_ui/android/build/ios/SourcePackages/firebase_app_check-0.4.5/example/windows/runner/flutter_window.h @@ -0,0 +1,37 @@ +// Copyright 2025, the Chromium project authors. Please see the AUTHORS file +// for details. All rights reserved. Use of this source code is governed by a +// BSD-style license that can be found in the LICENSE file. + +#ifndef RUNNER_FLUTTER_WINDOW_H_ +#define RUNNER_FLUTTER_WINDOW_H_ + +#include +#include + +#include + +#include "win32_window.h" + +// A window that does nothing but host a Flutter view. +class FlutterWindow : public Win32Window { + public: + // Creates a new FlutterWindow hosting a Flutter view running |project|. + explicit FlutterWindow(const flutter::DartProject& project); + virtual ~FlutterWindow(); + + protected: + // Win32Window: + bool OnCreate() override; + void OnDestroy() override; + LRESULT MessageHandler(HWND window, UINT const message, WPARAM const wparam, + LPARAM const lparam) noexcept override; + + private: + // The project to run. + flutter::DartProject project_; + + // The Flutter instance hosted by this window. + std::unique_ptr flutter_controller_; +}; + +#endif // RUNNER_FLUTTER_WINDOW_H_ diff --git a/mih_ui/android/build/ios/SourcePackages/firebase_app_check-0.4.5/example/windows/runner/main.cpp b/mih_ui/android/build/ios/SourcePackages/firebase_app_check-0.4.5/example/windows/runner/main.cpp new file mode 100644 index 00000000..129ed2c3 --- /dev/null +++ b/mih_ui/android/build/ios/SourcePackages/firebase_app_check-0.4.5/example/windows/runner/main.cpp @@ -0,0 +1,46 @@ +// Copyright 2025, the Chromium project authors. Please see the AUTHORS file +// for details. All rights reserved. Use of this source code is governed by a +// BSD-style license that can be found in the LICENSE file. + +#include +#include +#include + +#include "flutter_window.h" +#include "utils.h" + +int APIENTRY wWinMain(_In_ HINSTANCE instance, _In_opt_ HINSTANCE prev, + _In_ wchar_t* command_line, _In_ int show_command) { + // Attach to console when present (e.g., 'flutter run') or create a + // new console when running with a debugger. + if (!::AttachConsole(ATTACH_PARENT_PROCESS) && ::IsDebuggerPresent()) { + CreateAndAttachConsole(); + } + + // Initialize COM, so that it is available for use in the library and/or + // plugins. + ::CoInitializeEx(nullptr, COINIT_APARTMENTTHREADED); + + flutter::DartProject project(L"data"); + + std::vector command_line_arguments = GetCommandLineArguments(); + + project.set_dart_entrypoint_arguments(std::move(command_line_arguments)); + + FlutterWindow window(project); + Win32Window::Point origin(10, 10); + Win32Window::Size size(1280, 720); + if (!window.Create(L"firebase_app_check_example", origin, size)) { + return EXIT_FAILURE; + } + window.SetQuitOnClose(true); + + ::MSG msg; + while (::GetMessage(&msg, nullptr, 0, 0)) { + ::TranslateMessage(&msg); + ::DispatchMessage(&msg); + } + + ::CoUninitialize(); + return EXIT_SUCCESS; +} diff --git a/mih_ui/android/build/ios/SourcePackages/firebase_app_check-0.4.5/example/windows/runner/resource.h b/mih_ui/android/build/ios/SourcePackages/firebase_app_check-0.4.5/example/windows/runner/resource.h new file mode 100644 index 00000000..91d70fa3 --- /dev/null +++ b/mih_ui/android/build/ios/SourcePackages/firebase_app_check-0.4.5/example/windows/runner/resource.h @@ -0,0 +1,20 @@ +// Copyright 2025, the Chromium project authors. Please see the AUTHORS file +// for details. All rights reserved. Use of this source code is governed by a +// BSD-style license that can be found in the LICENSE file. + +//{{NO_DEPENDENCIES}} +// Microsoft Visual C++ generated include file. +// Used by Runner.rc +// +#define IDI_APP_ICON 101 + +// Next default values for new objects +// +#ifdef APSTUDIO_INVOKED +#ifndef APSTUDIO_READONLY_SYMBOLS +#define _APS_NEXT_RESOURCE_VALUE 102 +#define _APS_NEXT_COMMAND_VALUE 40001 +#define _APS_NEXT_CONTROL_VALUE 1001 +#define _APS_NEXT_SYMED_VALUE 101 +#endif +#endif diff --git a/mih_ui/android/build/ios/SourcePackages/firebase_app_check-0.4.5/example/windows/runner/resources/app_icon.ico b/mih_ui/android/build/ios/SourcePackages/firebase_app_check-0.4.5/example/windows/runner/resources/app_icon.ico new file mode 100644 index 0000000000000000000000000000000000000000..c04e20caf6370ebb9253ad831cc31de4a9c965f6 GIT binary patch literal 33772 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 literal 0 HcmV?d00001 diff --git a/mih_ui/android/build/ios/SourcePackages/firebase_app_check-0.4.5/example/windows/runner/runner.exe.manifest b/mih_ui/android/build/ios/SourcePackages/firebase_app_check-0.4.5/example/windows/runner/runner.exe.manifest new file mode 100644 index 00000000..153653e8 --- /dev/null +++ b/mih_ui/android/build/ios/SourcePackages/firebase_app_check-0.4.5/example/windows/runner/runner.exe.manifest @@ -0,0 +1,14 @@ + + + + + PerMonitorV2 + + + + + + + + + diff --git a/mih_ui/android/build/ios/SourcePackages/firebase_app_check-0.4.5/example/windows/runner/utils.cpp b/mih_ui/android/build/ios/SourcePackages/firebase_app_check-0.4.5/example/windows/runner/utils.cpp new file mode 100644 index 00000000..3b134475 --- /dev/null +++ b/mih_ui/android/build/ios/SourcePackages/firebase_app_check-0.4.5/example/windows/runner/utils.cpp @@ -0,0 +1,69 @@ +// Copyright 2025, the Chromium project authors. Please see the AUTHORS file +// for details. All rights reserved. Use of this source code is governed by a +// BSD-style license that can be found in the LICENSE file. + +#include "utils.h" + +#include +#include +#include +#include + +#include + +void CreateAndAttachConsole() { + if (::AllocConsole()) { + FILE* unused; + if (freopen_s(&unused, "CONOUT$", "w", stdout)) { + _dup2(_fileno(stdout), 1); + } + if (freopen_s(&unused, "CONOUT$", "w", stderr)) { + _dup2(_fileno(stdout), 2); + } + std::ios::sync_with_stdio(); + FlutterDesktopResyncOutputStreams(); + } +} + +std::vector GetCommandLineArguments() { + // Convert the UTF-16 command line arguments to UTF-8 for the Engine to use. + int argc; + wchar_t** argv = ::CommandLineToArgvW(::GetCommandLineW(), &argc); + if (argv == nullptr) { + return std::vector(); + } + + std::vector command_line_arguments; + + // Skip the first argument as it's the binary name. + for (int i = 1; i < argc; i++) { + command_line_arguments.push_back(Utf8FromUtf16(argv[i])); + } + + ::LocalFree(argv); + + return command_line_arguments; +} + +std::string Utf8FromUtf16(const wchar_t* utf16_string) { + if (utf16_string == nullptr) { + return std::string(); + } + unsigned int target_length = + ::WideCharToMultiByte(CP_UTF8, WC_ERR_INVALID_CHARS, utf16_string, -1, + nullptr, 0, nullptr, nullptr) - + 1; // remove the trailing null character + int input_length = (int)wcslen(utf16_string); + std::string utf8_string; + if (target_length == 0 || target_length > utf8_string.max_size()) { + return utf8_string; + } + utf8_string.resize(target_length); + int converted_length = ::WideCharToMultiByte( + CP_UTF8, WC_ERR_INVALID_CHARS, utf16_string, input_length, + utf8_string.data(), target_length, nullptr, nullptr); + if (converted_length == 0) { + return std::string(); + } + return utf8_string; +} diff --git a/mih_ui/android/build/ios/SourcePackages/firebase_app_check-0.4.5/example/windows/runner/utils.h b/mih_ui/android/build/ios/SourcePackages/firebase_app_check-0.4.5/example/windows/runner/utils.h new file mode 100644 index 00000000..8ec0c44d --- /dev/null +++ b/mih_ui/android/build/ios/SourcePackages/firebase_app_check-0.4.5/example/windows/runner/utils.h @@ -0,0 +1,23 @@ +// Copyright 2025, the Chromium project authors. Please see the AUTHORS file +// for details. All rights reserved. Use of this source code is governed by a +// BSD-style license that can be found in the LICENSE file. + +#ifndef RUNNER_UTILS_H_ +#define RUNNER_UTILS_H_ + +#include +#include + +// Creates a console for the process, and redirects stdout and stderr to +// it for both the runner and the Flutter library. +void CreateAndAttachConsole(); + +// Takes a null-terminated wchar_t* encoded in UTF-16 and returns a std::string +// encoded in UTF-8. Returns an empty std::string on failure. +std::string Utf8FromUtf16(const wchar_t* utf16_string); + +// Gets the command line arguments passed in as a std::vector, +// encoded in UTF-8. Returns an empty std::vector on failure. +std::vector GetCommandLineArguments(); + +#endif // RUNNER_UTILS_H_ diff --git a/mih_ui/android/build/ios/SourcePackages/firebase_app_check-0.4.5/example/windows/runner/win32_window.cpp b/mih_ui/android/build/ios/SourcePackages/firebase_app_check-0.4.5/example/windows/runner/win32_window.cpp new file mode 100644 index 00000000..82754b04 --- /dev/null +++ b/mih_ui/android/build/ios/SourcePackages/firebase_app_check-0.4.5/example/windows/runner/win32_window.cpp @@ -0,0 +1,284 @@ +// Copyright 2025, the Chromium project authors. Please see the AUTHORS file +// for details. All rights reserved. Use of this source code is governed by a +// BSD-style license that can be found in the LICENSE file. + +#include "win32_window.h" + +#include +#include + +#include "resource.h" + +namespace { + +/// Window attribute that enables dark mode window decorations. +/// +/// Redefined in case the developer's machine has a Windows SDK older than +/// version 10.0.22000.0. +/// See: +/// https://docs.microsoft.com/windows/win32/api/dwmapi/ne-dwmapi-dwmwindowattribute +#ifndef DWMWA_USE_IMMERSIVE_DARK_MODE +#define DWMWA_USE_IMMERSIVE_DARK_MODE 20 +#endif + +constexpr const wchar_t kWindowClassName[] = L"FLUTTER_RUNNER_WIN32_WINDOW"; + +/// Registry key for app theme preference. +/// +/// A value of 0 indicates apps should use dark mode. A non-zero or missing +/// value indicates apps should use light mode. +constexpr const wchar_t kGetPreferredBrightnessRegKey[] = + L"Software\\Microsoft\\Windows\\CurrentVersion\\Themes\\Personalize"; +constexpr const wchar_t kGetPreferredBrightnessRegValue[] = + L"AppsUseLightTheme"; + +// The number of Win32Window objects that currently exist. +static int g_active_window_count = 0; + +using EnableNonClientDpiScaling = BOOL __stdcall(HWND hwnd); + +// Scale helper to convert logical scaler values to physical using passed in +// scale factor +int Scale(int source, double scale_factor) { + return static_cast(source * scale_factor); +} + +// Dynamically loads the |EnableNonClientDpiScaling| from the User32 module. +// This API is only needed for PerMonitor V1 awareness mode. +void EnableFullDpiSupportIfAvailable(HWND hwnd) { + HMODULE user32_module = LoadLibraryA("User32.dll"); + if (!user32_module) { + return; + } + auto enable_non_client_dpi_scaling = + reinterpret_cast( + GetProcAddress(user32_module, "EnableNonClientDpiScaling")); + if (enable_non_client_dpi_scaling != nullptr) { + enable_non_client_dpi_scaling(hwnd); + } + FreeLibrary(user32_module); +} + +} // namespace + +// Manages the Win32Window's window class registration. +class WindowClassRegistrar { + public: + ~WindowClassRegistrar() = default; + + // Returns the singleton registrar instance. + static WindowClassRegistrar* GetInstance() { + if (!instance_) { + instance_ = new WindowClassRegistrar(); + } + return instance_; + } + + // Returns the name of the window class, registering the class if it hasn't + // previously been registered. + const wchar_t* GetWindowClass(); + + // Unregisters the window class. Should only be called if there are no + // instances of the window. + void UnregisterWindowClass(); + + private: + WindowClassRegistrar() = default; + + static WindowClassRegistrar* instance_; + + bool class_registered_ = false; +}; + +WindowClassRegistrar* WindowClassRegistrar::instance_ = nullptr; + +const wchar_t* WindowClassRegistrar::GetWindowClass() { + if (!class_registered_) { + WNDCLASS window_class{}; + window_class.hCursor = LoadCursor(nullptr, IDC_ARROW); + window_class.lpszClassName = kWindowClassName; + window_class.style = CS_HREDRAW | CS_VREDRAW; + window_class.cbClsExtra = 0; + window_class.cbWndExtra = 0; + window_class.hInstance = GetModuleHandle(nullptr); + window_class.hIcon = + LoadIcon(window_class.hInstance, MAKEINTRESOURCE(IDI_APP_ICON)); + window_class.hbrBackground = 0; + window_class.lpszMenuName = nullptr; + window_class.lpfnWndProc = Win32Window::WndProc; + RegisterClass(&window_class); + class_registered_ = true; + } + return kWindowClassName; +} + +void WindowClassRegistrar::UnregisterWindowClass() { + UnregisterClass(kWindowClassName, nullptr); + class_registered_ = false; +} + +Win32Window::Win32Window() { ++g_active_window_count; } + +Win32Window::~Win32Window() { + --g_active_window_count; + Destroy(); +} + +bool Win32Window::Create(const std::wstring& title, const Point& origin, + const Size& size) { + Destroy(); + + const wchar_t* window_class = + WindowClassRegistrar::GetInstance()->GetWindowClass(); + + const POINT target_point = {static_cast(origin.x), + static_cast(origin.y)}; + HMONITOR monitor = MonitorFromPoint(target_point, MONITOR_DEFAULTTONEAREST); + UINT dpi = FlutterDesktopGetDpiForMonitor(monitor); + double scale_factor = dpi / 96.0; + + HWND window = CreateWindow( + window_class, title.c_str(), WS_OVERLAPPEDWINDOW, + Scale(origin.x, scale_factor), Scale(origin.y, scale_factor), + Scale(size.width, scale_factor), Scale(size.height, scale_factor), + nullptr, nullptr, GetModuleHandle(nullptr), this); + + if (!window) { + return false; + } + + UpdateTheme(window); + + return OnCreate(); +} + +bool Win32Window::Show() { return ShowWindow(window_handle_, SW_SHOWNORMAL); } + +// static +LRESULT CALLBACK Win32Window::WndProc(HWND const window, UINT const message, + WPARAM const wparam, + LPARAM const lparam) noexcept { + if (message == WM_NCCREATE) { + auto window_struct = reinterpret_cast(lparam); + SetWindowLongPtr(window, GWLP_USERDATA, + reinterpret_cast(window_struct->lpCreateParams)); + + auto that = static_cast(window_struct->lpCreateParams); + EnableFullDpiSupportIfAvailable(window); + that->window_handle_ = window; + } else if (Win32Window* that = GetThisFromHandle(window)) { + return that->MessageHandler(window, message, wparam, lparam); + } + + return DefWindowProc(window, message, wparam, lparam); +} + +LRESULT +Win32Window::MessageHandler(HWND hwnd, UINT const message, WPARAM const wparam, + LPARAM const lparam) noexcept { + switch (message) { + case WM_DESTROY: + window_handle_ = nullptr; + Destroy(); + if (quit_on_close_) { + PostQuitMessage(0); + } + return 0; + + case WM_DPICHANGED: { + auto newRectSize = reinterpret_cast(lparam); + LONG newWidth = newRectSize->right - newRectSize->left; + LONG newHeight = newRectSize->bottom - newRectSize->top; + + SetWindowPos(hwnd, nullptr, newRectSize->left, newRectSize->top, newWidth, + newHeight, SWP_NOZORDER | SWP_NOACTIVATE); + + return 0; + } + case WM_SIZE: { + RECT rect = GetClientArea(); + if (child_content_ != nullptr) { + // Size and position the child window. + MoveWindow(child_content_, rect.left, rect.top, rect.right - rect.left, + rect.bottom - rect.top, TRUE); + } + return 0; + } + + case WM_ACTIVATE: + if (child_content_ != nullptr) { + SetFocus(child_content_); + } + return 0; + + case WM_DWMCOLORIZATIONCOLORCHANGED: + UpdateTheme(hwnd); + return 0; + } + + return DefWindowProc(window_handle_, message, wparam, lparam); +} + +void Win32Window::Destroy() { + OnDestroy(); + + if (window_handle_) { + DestroyWindow(window_handle_); + window_handle_ = nullptr; + } + if (g_active_window_count == 0) { + WindowClassRegistrar::GetInstance()->UnregisterWindowClass(); + } +} + +Win32Window* Win32Window::GetThisFromHandle(HWND const window) noexcept { + return reinterpret_cast( + GetWindowLongPtr(window, GWLP_USERDATA)); +} + +void Win32Window::SetChildContent(HWND content) { + child_content_ = content; + SetParent(content, window_handle_); + RECT frame = GetClientArea(); + + MoveWindow(content, frame.left, frame.top, frame.right - frame.left, + frame.bottom - frame.top, true); + + SetFocus(child_content_); +} + +RECT Win32Window::GetClientArea() { + RECT frame; + GetClientRect(window_handle_, &frame); + return frame; +} + +HWND Win32Window::GetHandle() { return window_handle_; } + +void Win32Window::SetQuitOnClose(bool quit_on_close) { + quit_on_close_ = quit_on_close; +} + +bool Win32Window::OnCreate() { + // No-op; provided for subclasses. + return true; +} + +void Win32Window::OnDestroy() { + // No-op; provided for subclasses. +} + +void Win32Window::UpdateTheme(HWND const window) { + DWORD light_mode; + DWORD light_mode_size = sizeof(light_mode); + LSTATUS result = + RegGetValue(HKEY_CURRENT_USER, kGetPreferredBrightnessRegKey, + kGetPreferredBrightnessRegValue, RRF_RT_REG_DWORD, nullptr, + &light_mode, &light_mode_size); + + if (result == ERROR_SUCCESS) { + BOOL enable_dark_mode = light_mode == 0; + DwmSetWindowAttribute(window, DWMWA_USE_IMMERSIVE_DARK_MODE, + &enable_dark_mode, sizeof(enable_dark_mode)); + } +} diff --git a/mih_ui/android/build/ios/SourcePackages/firebase_app_check-0.4.5/example/windows/runner/win32_window.h b/mih_ui/android/build/ios/SourcePackages/firebase_app_check-0.4.5/example/windows/runner/win32_window.h new file mode 100644 index 00000000..dd242548 --- /dev/null +++ b/mih_ui/android/build/ios/SourcePackages/firebase_app_check-0.4.5/example/windows/runner/win32_window.h @@ -0,0 +1,104 @@ +// Copyright 2025, the Chromium project authors. Please see the AUTHORS file +// for details. All rights reserved. Use of this source code is governed by a +// BSD-style license that can be found in the LICENSE file. + +#ifndef RUNNER_WIN32_WINDOW_H_ +#define RUNNER_WIN32_WINDOW_H_ + +#include + +#include +#include +#include + +// A class abstraction for a high DPI-aware Win32 Window. Intended to be +// inherited from by classes that wish to specialize with custom +// rendering and input handling +class Win32Window { + public: + struct Point { + unsigned int x; + unsigned int y; + Point(unsigned int x, unsigned int y) : x(x), y(y) {} + }; + + struct Size { + unsigned int width; + unsigned int height; + Size(unsigned int width, unsigned int height) + : width(width), height(height) {} + }; + + Win32Window(); + virtual ~Win32Window(); + + // Creates a win32 window with |title| that is positioned and sized using + // |origin| and |size|. New windows are created on the default monitor. Window + // sizes are specified to the OS in physical pixels, hence to ensure a + // consistent size this function will scale the inputted width and height as + // as appropriate for the default monitor. The window is invisible until + // |Show| is called. Returns true if the window was created successfully. + bool Create(const std::wstring& title, const Point& origin, const Size& size); + + // Show the current window. Returns true if the window was successfully shown. + bool Show(); + + // Release OS resources associated with window. + void Destroy(); + + // Inserts |content| into the window tree. + void SetChildContent(HWND content); + + // Returns the backing Window handle to enable clients to set icon and other + // window properties. Returns nullptr if the window has been destroyed. + HWND GetHandle(); + + // If true, closing this window will quit the application. + void SetQuitOnClose(bool quit_on_close); + + // Return a RECT representing the bounds of the current client area. + RECT GetClientArea(); + + protected: + // Processes and route salient window messages for mouse handling, + // size change and DPI. Delegates handling of these to member overloads that + // inheriting classes can handle. + virtual LRESULT MessageHandler(HWND window, UINT const message, + WPARAM const wparam, + LPARAM const lparam) noexcept; + + // Called when CreateAndShow is called, allowing subclass window-related + // setup. Subclasses should return false if setup fails. + virtual bool OnCreate(); + + // Called when Destroy is called. + virtual void OnDestroy(); + + private: + friend class WindowClassRegistrar; + + // OS callback called by message pump. Handles the WM_NCCREATE message which + // is passed when the non-client area is being created and enables automatic + // non-client DPI scaling so that the non-client area automatically + // responds to changes in DPI. All other messages are handled by + // MessageHandler. + static LRESULT CALLBACK WndProc(HWND const window, UINT const message, + WPARAM const wparam, + LPARAM const lparam) noexcept; + + // Retrieves a class instance pointer for |window| + static Win32Window* GetThisFromHandle(HWND const window) noexcept; + + // Update the window frame's theme to match the system theme. + static void UpdateTheme(HWND const window); + + bool quit_on_close_ = false; + + // window handle for top level window. + HWND window_handle_ = nullptr; + + // window handle for hosted content. + HWND child_content_ = nullptr; +}; + +#endif // RUNNER_WIN32_WINDOW_H_ diff --git a/mih_ui/android/build/ios/SourcePackages/firebase_app_check-0.4.5/ios/firebase_app_check.podspec b/mih_ui/android/build/ios/SourcePackages/firebase_app_check-0.4.5/ios/firebase_app_check.podspec new file mode 100644 index 00000000..b4d81500 --- /dev/null +++ b/mih_ui/android/build/ios/SourcePackages/firebase_app_check-0.4.5/ios/firebase_app_check.podspec @@ -0,0 +1,46 @@ +require 'yaml' +pubspec = YAML.load_file(File.join('..', 'pubspec.yaml')) +library_version = pubspec['version'].gsub('+', '-') + +if defined?($FirebaseSDKVersion) + Pod::UI.puts "#{pubspec['name']}: Using user specified Firebase SDK version '#{$FirebaseSDKVersion}'" + firebase_sdk_version = $FirebaseSDKVersion +else + firebase_core_script = File.join(File.expand_path('..', File.expand_path('..', File.dirname(__FILE__))), 'firebase_core/ios/firebase_sdk_version.rb') + if File.exist?(firebase_core_script) + require firebase_core_script + firebase_sdk_version = firebase_sdk_version! + Pod::UI.puts "#{pubspec['name']}: Using Firebase SDK version '#{firebase_sdk_version}' defined in 'firebase_core'" + end +end + +Pod::Spec.new do |s| + s.name = pubspec['name'] + s.version = library_version + s.summary = pubspec['description'] + s.description = pubspec['description'] + s.homepage = pubspec['homepage'] + + s.license = { :file => '../LICENSE' } + s.authors = 'The Chromium Authors' + s.source = { :path => '.' } + s.source_files = 'firebase_app_check/Sources/firebase_app_check/**/*.swift' + s.ios.deployment_target = '15.0' + + # Flutter dependencies + s.dependency 'Flutter' + + # Firebase dependencies + s.dependency 'firebase_core' + s.dependency 'Firebase/CoreOnly', "~> #{firebase_sdk_version}" + s.dependency 'FirebaseAppCheck', "~> #{firebase_sdk_version}" + + s.static_framework = true + s.pod_target_xcconfig = { + 'GCC_PREPROCESSOR_DEFINITIONS' => "LIBRARY_VERSION=\\\"#{library_version}\\\" LIBRARY_NAME=\\\"flutter-fire-appcheck\\\"", + 'DEFINES_MODULE' => 'YES', + # Flutter.framework does not contain a i386 slice. + 'EXCLUDED_ARCHS[sdk=iphonesimulator*]' => 'i386' + } +end + diff --git a/mih_ui/android/build/ios/SourcePackages/firebase_app_check-0.4.5/ios/firebase_app_check/Package.swift b/mih_ui/android/build/ios/SourcePackages/firebase_app_check-0.4.5/ios/firebase_app_check/Package.swift new file mode 100644 index 00000000..ffee709b --- /dev/null +++ b/mih_ui/android/build/ios/SourcePackages/firebase_app_check-0.4.5/ios/firebase_app_check/Package.swift @@ -0,0 +1,41 @@ +// swift-tools-version: 5.9 +// The swift-tools-version declares the minimum version of Swift required to build this package. + +// Copyright 2024, the Chromium project authors. Please see the AUTHORS file +// for details. All rights reserved. Use of this source code is governed by a +// BSD-style license that can be found in the LICENSE file. + +import PackageDescription + +let firebaseSdkVersion: Version = "12.15.0" + +let package = Package( + name: "firebase_app_check", + platforms: [ + .iOS("15.0") + ], + products: [ + .library(name: "firebase-app-check", targets: ["firebase_app_check"]) + ], + dependencies: [ + .package(url: "https://github.com/firebase/firebase-ios-sdk", exact: firebaseSdkVersion), + .package( + url: "https://github.com/GoogleCloudPlatform/recaptcha-enterprise-mobile-sdk.git", + from: "18.0.0" + ), + .package(name: "firebase_core", path: "../firebase_core-4.11.0"), + ], + targets: [ + .target( + name: "firebase_app_check", + dependencies: [ + .product(name: "FirebaseAppCheck", package: "firebase-ios-sdk"), + .product(name: "RecaptchaEnterprise", package: "recaptcha-enterprise-mobile-sdk"), + .product(name: "firebase-core", package: "firebase_core"), + ], + resources: [ + .process("Resources") + ] + ) + ] +) diff --git a/mih_ui/android/build/ios/SourcePackages/firebase_app_check-0.4.5/ios/firebase_app_check/Sources/firebase_app_check/Constants.swift b/mih_ui/android/build/ios/SourcePackages/firebase_app_check-0.4.5/ios/firebase_app_check/Sources/firebase_app_check/Constants.swift new file mode 100644 index 00000000..28a2ec57 --- /dev/null +++ b/mih_ui/android/build/ios/SourcePackages/firebase_app_check-0.4.5/ios/firebase_app_check/Sources/firebase_app_check/Constants.swift @@ -0,0 +1,6 @@ +// Copyright 2025 The Chromium Authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +/// Auto-generated file. Do not edit. +public let versionNumber = "0.4.5" diff --git a/mih_ui/android/build/ios/SourcePackages/firebase_app_check-0.4.5/ios/firebase_app_check/Sources/firebase_app_check/FirebaseAppCheckMessages.g.swift b/mih_ui/android/build/ios/SourcePackages/firebase_app_check-0.4.5/ios/firebase_app_check/Sources/firebase_app_check/FirebaseAppCheckMessages.g.swift new file mode 100644 index 00000000..d8f3a100 --- /dev/null +++ b/mih_ui/android/build/ios/SourcePackages/firebase_app_check-0.4.5/ios/firebase_app_check/Sources/firebase_app_check/FirebaseAppCheckMessages.g.swift @@ -0,0 +1,236 @@ +// Copyright 2025, the Chromium project authors. Please see the AUTHORS file +// for details. All rights reserved. Use of this source code is governed by a +// BSD-style license that can be found in the LICENSE file. +// Autogenerated from Pigeon (v26.3.4), do not edit directly. +// See also: https://pub.dev/packages/pigeon + +import Foundation + +#if os(iOS) + import Flutter +#elseif os(macOS) + import FlutterMacOS +#else + #error("Unsupported platform.") +#endif + +/// Error class for passing custom error details to Dart side. +final class PigeonError: Error { + let code: String + let message: String? + let details: Sendable? + + init(code: String, message: String?, details: Sendable?) { + self.code = code + self.message = message + self.details = details + } + + var localizedDescription: String { + "PigeonError(code: \(code), message: \(message ?? ""), details: \(details ?? "")" + } +} + +private func wrapResult(_ result: Any?) -> [Any?] { + [result] +} + +private func wrapError(_ error: Any) -> [Any?] { + if let pigeonError = error as? PigeonError { + return [ + pigeonError.code, + pigeonError.message, + pigeonError.details, + ] + } + if let flutterError = error as? FlutterError { + return [ + flutterError.code, + flutterError.message, + flutterError.details, + ] + } + return [ + "\(error)", + "\(Swift.type(of: error))", + "Stacktrace: \(Thread.callStackSymbols)", + ] +} + +private func isNullish(_ value: Any?) -> Bool { + value is NSNull || value == nil +} + +private func nilOrValue(_ value: Any?) -> T? { + if value is NSNull { return nil } + return value as! T? +} + +private class FirebaseAppCheckMessagesPigeonCodecReader: FlutterStandardReader {} + +private class FirebaseAppCheckMessagesPigeonCodecWriter: FlutterStandardWriter {} + +private class FirebaseAppCheckMessagesPigeonCodecReaderWriter: FlutterStandardReaderWriter { + override func reader(with data: Data) -> FlutterStandardReader { + FirebaseAppCheckMessagesPigeonCodecReader(data: data) + } + + override func writer(with data: NSMutableData) -> FlutterStandardWriter { + FirebaseAppCheckMessagesPigeonCodecWriter(data: data) + } +} + +class FirebaseAppCheckMessagesPigeonCodec: FlutterStandardMessageCodec, @unchecked Sendable { + static let shared = FirebaseAppCheckMessagesPigeonCodec( + readerWriter: FirebaseAppCheckMessagesPigeonCodecReaderWriter() + ) +} + +/// Generated protocol from Pigeon that represents a handler of messages from Flutter. +protocol FirebaseAppCheckHostApi { + func activate( + appName: String, androidProvider: String?, appleProvider: String?, + debugToken: String?, + completion: @escaping (Result) -> Void) + func getToken( + appName: String, forceRefresh: Bool, + completion: @escaping (Result) -> Void) + func setTokenAutoRefreshEnabled( + appName: String, isTokenAutoRefreshEnabled: Bool, + completion: @escaping (Result) -> Void) + func registerTokenListener(appName: String, completion: @escaping (Result) -> Void) + func getLimitedUseAppCheckToken( + appName: String, + completion: @escaping (Result) -> Void) +} + +/// Generated setup class from Pigeon to handle messages through the `binaryMessenger`. +class FirebaseAppCheckHostApiSetup { + static var codec: FlutterStandardMessageCodec { + FirebaseAppCheckMessagesPigeonCodec.shared + } + + /// Sets up an instance of `FirebaseAppCheckHostApi` to handle messages through the + /// `binaryMessenger`. + static func setUp( + binaryMessenger: FlutterBinaryMessenger, api: FirebaseAppCheckHostApi?, + messageChannelSuffix: String = "" + ) { + let channelSuffix = messageChannelSuffix.count > 0 ? ".\(messageChannelSuffix)" : "" + let activateChannel = FlutterBasicMessageChannel( + name: + "dev.flutter.pigeon.firebase_app_check_platform_interface.FirebaseAppCheckHostApi.activate\(channelSuffix)", + binaryMessenger: binaryMessenger, codec: codec + ) + if let api { + activateChannel.setMessageHandler { message, reply in + let args = message as! [Any?] + let appNameArg = args[0] as! String + let androidProviderArg: String? = nilOrValue(args[1]) + let appleProviderArg: String? = nilOrValue(args[2]) + let debugTokenArg: String? = nilOrValue(args[3]) + api.activate( + appName: appNameArg, androidProvider: androidProviderArg, appleProvider: appleProviderArg, + debugToken: debugTokenArg + ) { result in + switch result { + case .success: + reply(wrapResult(nil)) + case .failure(let error): + reply(wrapError(error)) + } + } + } + } else { + activateChannel.setMessageHandler(nil) + } + let getTokenChannel = FlutterBasicMessageChannel( + name: + "dev.flutter.pigeon.firebase_app_check_platform_interface.FirebaseAppCheckHostApi.getToken\(channelSuffix)", + binaryMessenger: binaryMessenger, codec: codec + ) + if let api { + getTokenChannel.setMessageHandler { message, reply in + let args = message as! [Any?] + let appNameArg = args[0] as! String + let forceRefreshArg = args[1] as! Bool + api.getToken(appName: appNameArg, forceRefresh: forceRefreshArg) { result in + switch result { + case .success(let res): + reply(wrapResult(res)) + case .failure(let error): + reply(wrapError(error)) + } + } + } + } else { + getTokenChannel.setMessageHandler(nil) + } + let setTokenAutoRefreshEnabledChannel = FlutterBasicMessageChannel( + name: + "dev.flutter.pigeon.firebase_app_check_platform_interface.FirebaseAppCheckHostApi.setTokenAutoRefreshEnabled\(channelSuffix)", + binaryMessenger: binaryMessenger, codec: codec + ) + if let api { + setTokenAutoRefreshEnabledChannel.setMessageHandler { message, reply in + let args = message as! [Any?] + let appNameArg = args[0] as! String + let isTokenAutoRefreshEnabledArg = args[1] as! Bool + api.setTokenAutoRefreshEnabled( + appName: appNameArg, isTokenAutoRefreshEnabled: isTokenAutoRefreshEnabledArg + ) { result in + switch result { + case .success: + reply(wrapResult(nil)) + case .failure(let error): + reply(wrapError(error)) + } + } + } + } else { + setTokenAutoRefreshEnabledChannel.setMessageHandler(nil) + } + let registerTokenListenerChannel = FlutterBasicMessageChannel( + name: + "dev.flutter.pigeon.firebase_app_check_platform_interface.FirebaseAppCheckHostApi.registerTokenListener\(channelSuffix)", + binaryMessenger: binaryMessenger, codec: codec + ) + if let api { + registerTokenListenerChannel.setMessageHandler { message, reply in + let args = message as! [Any?] + let appNameArg = args[0] as! String + api.registerTokenListener(appName: appNameArg) { result in + switch result { + case .success(let res): + reply(wrapResult(res)) + case .failure(let error): + reply(wrapError(error)) + } + } + } + } else { + registerTokenListenerChannel.setMessageHandler(nil) + } + let getLimitedUseAppCheckTokenChannel = FlutterBasicMessageChannel( + name: + "dev.flutter.pigeon.firebase_app_check_platform_interface.FirebaseAppCheckHostApi.getLimitedUseAppCheckToken\(channelSuffix)", + binaryMessenger: binaryMessenger, codec: codec + ) + if let api { + getLimitedUseAppCheckTokenChannel.setMessageHandler { message, reply in + let args = message as! [Any?] + let appNameArg = args[0] as! String + api.getLimitedUseAppCheckToken(appName: appNameArg) { result in + switch result { + case .success(let res): + reply(wrapResult(res)) + case .failure(let error): + reply(wrapError(error)) + } + } + } + } else { + getLimitedUseAppCheckTokenChannel.setMessageHandler(nil) + } + } +} diff --git a/mih_ui/android/build/ios/SourcePackages/firebase_app_check-0.4.5/ios/firebase_app_check/Sources/firebase_app_check/FirebaseAppCheckPlugin.swift b/mih_ui/android/build/ios/SourcePackages/firebase_app_check-0.4.5/ios/firebase_app_check/Sources/firebase_app_check/FirebaseAppCheckPlugin.swift new file mode 100644 index 00000000..2d63a765 --- /dev/null +++ b/mih_ui/android/build/ios/SourcePackages/firebase_app_check-0.4.5/ios/firebase_app_check/Sources/firebase_app_check/FirebaseAppCheckPlugin.swift @@ -0,0 +1,369 @@ +// Copyright 2025 The Chromium Authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +import FirebaseAppCheck +import FirebaseCore + +#if canImport(FlutterMacOS) + import FlutterMacOS +#else + import Flutter +#endif + +#if canImport(firebase_core) + import firebase_core +#else + import firebase_core_shared +#endif + +let kFirebaseAppCheckChannelName = "plugins.flutter.io/firebase_app_check" +let kFirebaseAppCheckTokenChannelPrefix = "plugins.flutter.io/firebase_app_check/token/" + +// swift-format-ignore: AvoidRetroactiveConformances +extension FlutterError: @retroactive Error {} + +public class FirebaseAppCheckPlugin: NSObject, FlutterPlugin, + FLTFirebasePluginProtocol, FirebaseAppCheckHostApi +{ + private var eventChannels: [String: FlutterEventChannel] = [:] + private var streamHandlers: [String: AppCheckTokenStreamHandler] = [:] + private var providerFactory: FlutterAppCheckProviderFactory? + + static let shared: FirebaseAppCheckPlugin = { + let instance = FirebaseAppCheckPlugin() + instance.providerFactory = FlutterAppCheckProviderFactory() + AppCheck.setAppCheckProviderFactory(instance.providerFactory) + FLTFirebasePluginRegistry.sharedInstance().register(instance) + return instance + }() + + public static func register(with registrar: FlutterPluginRegistrar) { + let binaryMessenger: FlutterBinaryMessenger + + #if os(macOS) + binaryMessenger = registrar.messenger + #elseif os(iOS) + binaryMessenger = registrar.messenger() + #endif + + let instance = shared + instance.binaryMessenger = binaryMessenger + FirebaseAppCheckHostApiSetup.setUp(binaryMessenger: binaryMessenger, api: instance) + + if FirebaseApp.responds(to: NSSelectorFromString("registerLibrary:withVersion:")) { + FirebaseApp.perform( + NSSelectorFromString("registerLibrary:withVersion:"), + with: instance.firebaseLibraryName(), + with: instance.firebaseLibraryVersion() + ) + } + } + + private var binaryMessenger: FlutterBinaryMessenger? + + func activate( + appName: String, androidProvider: String?, appleProvider: String?, + debugToken: String?, + completion: @escaping (Result) -> Void + ) { + guard let app = FLTFirebasePlugin.firebaseAppNamed(appName) else { + completion( + .failure( + FlutterError( + code: "unknown", message: "Firebase app not found: \(appName)", details: nil + ) + ) + ) + return + } + let provider = appleProvider ?? "deviceCheck" + + providerFactory?.configure( + app: app, + providerName: provider, + debugToken: debugToken + ) + + completion(.success(())) + } + + func getToken( + appName: String, forceRefresh: Bool, + completion: @escaping (Result) -> Void + ) { + guard let app = FLTFirebasePlugin.firebaseAppNamed(appName), + let appCheck = AppCheck.appCheck(app: app) + else { + completion( + .failure( + FlutterError( + code: "unknown", message: "App Check not available for app: \(appName)", details: nil + ) + ) + ) + return + } + + appCheck.token(forcingRefresh: forceRefresh) { token, error in + if let error { + completion(.failure(self.createFlutterError(error))) + } else { + completion(.success(token?.token)) + } + } + } + + func setTokenAutoRefreshEnabled( + appName: String, isTokenAutoRefreshEnabled: Bool, + completion: @escaping (Result) -> Void + ) { + guard let app = FLTFirebasePlugin.firebaseAppNamed(appName), + let appCheck = AppCheck.appCheck(app: app) + else { + completion( + .failure( + FlutterError( + code: "unknown", message: "App Check not available for app: \(appName)", details: nil + ) + ) + ) + return + } + appCheck.isTokenAutoRefreshEnabled = isTokenAutoRefreshEnabled + completion(.success(())) + } + + func registerTokenListener( + appName: String, + completion: @escaping (Result) -> Void + ) { + let name = kFirebaseAppCheckTokenChannelPrefix + appName + + guard let messenger = binaryMessenger else { + completion( + .failure( + FlutterError( + code: "no-messenger", + message: "Binary messenger not available", + details: nil + ) + ) + ) + return + } + + let channel = FlutterEventChannel(name: name, binaryMessenger: messenger) + let handler = AppCheckTokenStreamHandler() + channel.setStreamHandler(handler) + + eventChannels[name] = channel + streamHandlers[name] = handler + + completion(.success(name)) + } + + func getLimitedUseAppCheckToken( + appName: String, + completion: @escaping (Result) -> Void + ) { + guard let app = FLTFirebasePlugin.firebaseAppNamed(appName), + let appCheck = AppCheck.appCheck(app: app) + else { + completion( + .failure( + FlutterError( + code: "unknown", message: "App Check not available for app: \(appName)", details: nil + ) + ) + ) + return + } + + appCheck.limitedUseToken { token, error in + if let error { + completion(.failure(self.createFlutterError(error))) + } else { + completion(.success(token?.token ?? "")) + } + } + } + + // MARK: - FLTFirebasePluginProtocol + + public func didReinitializeFirebaseCore(_ completion: @escaping () -> Void) { + for (_, channel) in eventChannels { + channel.setStreamHandler(nil) + } + for (_, handler) in streamHandlers { + _ = handler.onCancel(withArguments: nil) + } + eventChannels.removeAll() + streamHandlers.removeAll() + completion() + } + + public func pluginConstants(for firebaseApp: FirebaseApp) -> [AnyHashable: Any] { + [:] + } + + public func firebaseLibraryName() -> String { + "flutter-fire-appcheck" + } + + public func firebaseLibraryVersion() -> String { + versionNumber + } + + public func flutterChannelName() -> String { + kFirebaseAppCheckChannelName + } + + private func createFlutterError(_ error: Error) -> FlutterError { + let nsError = error as NSError + var code = "unknown" + switch nsError.code { + case 0: // FIRAppCheckErrorCodeServerUnreachable + code = "server-unreachable" + case 1: // FIRAppCheckErrorCodeInvalidConfiguration + code = "invalid-configuration" + case 2: // FIRAppCheckErrorCodeKeychain + code = "code-keychain" + case 3: // FIRAppCheckErrorCodeUnsupported + code = "code-unsupported" + default: + code = "unknown" + } + return FlutterError( + code: code, + message: nsError.localizedDescription, + details: nil + ) + } +} + +// MARK: - Token Stream Handler + +class AppCheckTokenStreamHandler: NSObject, FlutterStreamHandler { + private var observer: NSObjectProtocol? + + func onListen( + withArguments arguments: Any?, + eventSink events: @escaping FlutterEventSink + ) -> FlutterError? { + observer = NotificationCenter.default.addObserver( + forName: NSNotification.Name("FIRAppCheckAppCheckTokenDidChangeNotification"), + object: nil, + queue: nil + ) { notification in + if let token = notification.userInfo?["FIRAppCheckTokenNotificationKey"] as? String { + events(["token": token]) + } + } + return nil + } + + func onCancel(withArguments arguments: Any?) -> FlutterError? { + if let observer { + NotificationCenter.default.removeObserver(observer) + self.observer = nil + } + return nil + } +} + +// MARK: - App Check Provider Factory + +class FlutterAppCheckProviderFactory: NSObject, AppCheckProviderFactory { + private var providers: [String: AppCheckProviderWrapper] = [:] + + func createProvider(with app: FirebaseApp) -> (any AppCheckProvider)? { + if providers[app.name] == nil { + let wrapper = AppCheckProviderWrapper() + // Default to deviceCheck. activate() will reconfigure with the correct provider. + wrapper.configure( + app: app, + providerName: "deviceCheck", + debugToken: nil + ) + providers[app.name] = wrapper + } + return providers[app.name] + } + + func configure( + app: FirebaseApp, + providerName: String, + debugToken: String? + ) { + if providers[app.name] == nil { + providers[app.name] = AppCheckProviderWrapper() + } + providers[app.name]?.configure( + app: app, + providerName: providerName, + debugToken: debugToken + ) + } +} + +class AppCheckProviderWrapper: NSObject, AppCheckProvider { + private var delegateProvider: (any AppCheckProvider)? + + func configure( + app: FirebaseApp, + providerName: String, + debugToken: String? + ) { + switch providerName { + case "debug": + if let debugToken { + setenv("FIRAAppCheckDebugToken", debugToken, 1) + } + delegateProvider = AppCheckDebugProvider(app: app) + if debugToken == nil, let debugProvider = delegateProvider as? AppCheckDebugProvider { + print("Firebase App Check Debug Token: \(debugProvider.localDebugToken())") + } + case "appAttest": + if #available(iOS 14.0, macOS 14.0, macCatalyst 14.0, tvOS 15.0, watchOS 9.0, *) { + delegateProvider = AppAttestProvider(app: app) + } else { + delegateProvider = AppCheckDebugProvider(app: app) + } + case "appAttestWithDeviceCheckFallback": + if #available(iOS 14.0, macOS 14.0, *) { + delegateProvider = AppAttestProvider(app: app) + } else { + delegateProvider = DeviceCheckProvider(app: app) + } + case "recaptcha": + #if os(iOS) + delegateProvider = RecaptchaProvider(app: app) + if delegateProvider == nil { + print( + "Firebase App Check: failed to initialize RecaptchaProvider. Ensure site key is in GoogleService-Info.plist." + ) + } + #else + print("Firebase App Check: reCAPTCHA is only supported on iOS.") + #endif + default: + // deviceCheck + delegateProvider = DeviceCheckProvider(app: app) + } + } + + func getToken(completion handler: @escaping (AppCheckToken?, Error?) -> Void) { + guard let delegateProvider else { + handler( + nil, + NSError( + domain: "firebase_app_check", code: -1, + userInfo: [NSLocalizedDescriptionKey: "Provider not configured"] + ) + ) + return + } + delegateProvider.getToken(completion: handler) + } +} diff --git a/mih_ui/android/build/ios/SourcePackages/firebase_app_check-0.4.5/lib/firebase_app_check.dart b/mih_ui/android/build/ios/SourcePackages/firebase_app_check-0.4.5/lib/firebase_app_check.dart new file mode 100644 index 00000000..5e6a8cc9 --- /dev/null +++ b/mih_ui/android/build/ios/SourcePackages/firebase_app_check-0.4.5/lib/firebase_app_check.dart @@ -0,0 +1,34 @@ +// ignore_for_file: require_trailing_commas +// Copyright 2019 The Chromium Authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +import 'package:firebase_app_check_platform_interface/firebase_app_check_platform_interface.dart'; +import 'package:firebase_core/firebase_core.dart'; +import 'package:firebase_core_platform_interface/firebase_core_platform_interface.dart'; + +export 'package:firebase_app_check_platform_interface/firebase_app_check_platform_interface.dart' + show + AndroidProvider, + AndroidAppCheckProvider, + AndroidDebugProvider, + AndroidPlayIntegrityProvider, + AndroidReCaptchaProvider, + AppleProvider, + AppleAppCheckProvider, + AppleDebugProvider, + AppleDeviceCheckProvider, + AppleAppAttestProvider, + AppleAppAttestWithDeviceCheckFallbackProvider, + AppleReCaptchaProvider, + ReCaptchaEnterpriseProvider, + ReCaptchaV3Provider, + WebDebugProvider, + WebProvider, + WebReCaptchaProvider, + WindowsAppCheckProvider, + WindowsDebugProvider; +export 'package:firebase_core_platform_interface/firebase_core_platform_interface.dart' + show FirebaseException; + +part 'src/firebase_app_check.dart'; diff --git a/mih_ui/android/build/ios/SourcePackages/firebase_app_check-0.4.5/lib/src/firebase_app_check.dart b/mih_ui/android/build/ios/SourcePackages/firebase_app_check-0.4.5/lib/src/firebase_app_check.dart new file mode 100644 index 00000000..8deabfc9 --- /dev/null +++ b/mih_ui/android/build/ios/SourcePackages/firebase_app_check-0.4.5/lib/src/firebase_app_check.dart @@ -0,0 +1,156 @@ +// ignore_for_file: require_trailing_commas +// Copyright 2021 The Chromium Authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +part of '../firebase_app_check.dart'; + +class FirebaseAppCheck extends FirebasePluginPlatform + implements FirebaseService { + static Map _firebaseAppCheckInstances = {}; + + FirebaseAppCheck._({required this.app}) + : super(app.name, 'plugins.flutter.io/firebase_app_check'); + + /// The [FirebaseApp] for this current [FirebaseAppCheck] instance. + FirebaseApp app; + + // Cached and lazily loaded instance of [FirebaseAppCheckPlatform] to avoid + // creating a [MethodChannelFirebaseAppCheck] when not needed or creating an + // instance with the default app before a user specifies an app. + FirebaseAppCheckPlatform? _delegatePackingProperty; + + /// Returns the underlying delegate implementation. + /// + /// If called and no [_delegatePackingProperty] exists, it will first be + /// created and assigned before returning the delegate. + FirebaseAppCheckPlatform get _delegate { + _delegatePackingProperty ??= FirebaseAppCheckPlatform.instanceFor( + app: app, + ); + + return _delegatePackingProperty!; + } + + /// Returns an instance using the default [FirebaseApp]. + static FirebaseAppCheck get instance { + FirebaseApp defaultAppInstance = Firebase.app(); + + return FirebaseAppCheck.instanceFor(app: defaultAppInstance); + } + + /// Returns an instance using a specified [FirebaseApp]. + static FirebaseAppCheck instanceFor({required FirebaseApp app}) { + return _firebaseAppCheckInstances.putIfAbsent(app.name, () { + final instance = FirebaseAppCheck._(app: app); + app.registerService( + instance, + dispose: (appCheck) => appCheck._dispose(), + ); + return instance; + }); + } + + Future _dispose() async { + _firebaseAppCheckInstances.remove(app.name); + final delegate = _delegatePackingProperty; + _delegatePackingProperty = null; + await delegate?.dispose(); + } + + /// Activates the Firebase App Check service. + /// + /// ## Platform Configuration + /// + /// **Web**: Provide the reCAPTCHA v3 Site Key using `webProvider`, which can be + /// found in the Firebase Console. + /// + /// **Android**: The default provider is "play integrity". Use `providerAndroid` + /// to configure alternative providers such as "safety net", debug providers, or + /// custom implementations via `AndroidAppCheckProvider`. + /// + /// **iOS/macOS**: The default provider is "device check". Use `providerApple` + /// to configure alternative providers such as "app attest", debug providers, or + /// "app attest with fallback to device check" via `AppleAppCheckProvider`. + /// Note: App Attest is only available on iOS 14.0+ and macOS 14.0+. + /// + /// **Windows**: Only the debug provider is supported. You **must** supply a + /// debug token — the desktop C++ SDK does not auto-generate one. Either pass + /// it via `providerWindows: WindowsDebugProvider(debugToken: 'your-token')` + /// or set the `APP_CHECK_DEBUG_TOKEN` environment variable. The token must + /// first be registered in the Firebase Console under + /// *App Check → Apps → Manage debug tokens*. + /// + /// ## Migration Notice + /// + /// The `androidProvider` and `appleProvider` parameters will be deprecated + /// in a future release. Use `providerAndroid` and `providerApple` instead, + /// which support the new provider classes including `AndroidDebugProvider` + /// and `AppleDebugProvider` for passing debug tokens directly. + /// + /// For more information, see [the Firebase Documentation](https://firebase.google.com/docs/app-check) + Future activate({ + @Deprecated( + 'Use providerWeb instead. ' + 'This parameter will be removed in a future major release.', + ) + WebProvider? webProvider, + WebProvider? providerWeb, + @Deprecated( + 'Use providerAndroid instead. ' + 'This parameter will be removed in a future major release.', + ) + AndroidProvider androidProvider = AndroidProvider.playIntegrity, + @Deprecated( + 'Use providerApple instead. ' + 'This parameter will be removed in a future major release.', + ) + AppleProvider appleProvider = AppleProvider.deviceCheck, + AndroidAppCheckProvider providerAndroid = + const AndroidPlayIntegrityProvider(), + AppleAppCheckProvider providerApple = const AppleDeviceCheckProvider(), + WindowsAppCheckProvider providerWindows = const WindowsDebugProvider(), + }) { + return _delegate.activate( + webProvider: providerWeb ?? webProvider, + // ignore: deprecated_member_use + androidProvider: androidProvider, + // ignore: deprecated_member_use + appleProvider: appleProvider, + providerAndroid: providerAndroid, + providerApple: providerApple, + providerWindows: providerWindows, + ); + } + + /// Get the current App Check token. + /// + /// Attaches to the most recent in-flight request if one is present. Returns + /// null if no token is present and no token requests are in-flight. + /// + /// If `forceRefresh` is true, will always try to fetch a fresh token. If + /// false, will use a cached token if found in storage. + Future getToken([bool? forceRefresh]) async { + return _delegate.getToken(forceRefresh ?? false); + } + + /// If true, the SDK automatically refreshes App Check tokens as needed. + Future setTokenAutoRefreshEnabled(bool isTokenAutoRefreshEnabled) { + return _delegate.setTokenAutoRefreshEnabled(isTokenAutoRefreshEnabled); + } + + /// Requests a limited-use Firebase App Check token. This method should be used only + /// if you need to authorize requests to a non-Firebase backend. + // + // Returns limited-use tokens that are intended for use with your non-Firebase backend + // endpoints that are protected with Replay Protection. This method does not affect + // the token generation behavior of the `getToken()` method. + Future getLimitedUseToken() { + return _delegate.getLimitedUseToken(); + } + + /// Registers a listener to changes in the token state. + Stream get onTokenChange { + return _delegate.onTokenChange; + } +} diff --git a/mih_ui/android/build/ios/SourcePackages/firebase_app_check-0.4.5/macos/firebase_app_check.podspec b/mih_ui/android/build/ios/SourcePackages/firebase_app_check-0.4.5/macos/firebase_app_check.podspec new file mode 100644 index 00000000..497fbc64 --- /dev/null +++ b/mih_ui/android/build/ios/SourcePackages/firebase_app_check-0.4.5/macos/firebase_app_check.podspec @@ -0,0 +1,63 @@ +require 'yaml' + +pubspec = YAML.load_file(File.join('..', 'pubspec.yaml')) +library_version = pubspec['version'].gsub('+', '-') + +if defined?($FirebaseSDKVersion) + Pod::UI.puts "#{pubspec['name']}: Using user specified Firebase SDK version '#{$FirebaseSDKVersion}'" + firebase_sdk_version = $FirebaseSDKVersion +else + firebase_core_script = File.join(File.expand_path('..', File.expand_path('..', File.dirname(__FILE__))), 'firebase_core/ios/firebase_sdk_version.rb') + if File.exist?(firebase_core_script) + require firebase_core_script + firebase_sdk_version = firebase_sdk_version! + Pod::UI.puts "#{pubspec['name']}: Using Firebase SDK version '#{firebase_sdk_version}' defined in 'firebase_core'" + end +end + +begin + required_macos_version = "10.15" + current_target_definition = Pod::Config.instance.podfile.send(:current_target_definition) + user_osx_target = current_target_definition.to_hash["platform"]["osx"] + if (Gem::Version.new(user_osx_target) < Gem::Version.new(required_macos_version)) + error_message = "The FlutterFire plugin #{pubspec['name']} for macOS requires a macOS deployment target of #{required_macos_version} or later." + Pod::UI.warn error_message, [ + "Update the `platform :osx, '#{user_osx_target}'` line in your macOS/Podfile to version `#{required_macos_version}` and ensure you commit this file.", + "Open your `macos/Runner.xcodeproj` Xcode project and under the 'Runner' target General tab set your Deployment Target to #{required_macos_version} or later." + ] + raise Pod::Informative, error_message + end +rescue Pod::Informative + raise +rescue + # Do nothing for all other errors and let `pod install` deal with any issues. +end + +Pod::Spec.new do |s| + s.name = pubspec['name'] + s.version = library_version + s.summary = pubspec['description'] + s.description = pubspec['description'] + s.homepage = pubspec['homepage'] + s.license = { :file => '../LICENSE' } + s.authors = 'The Chromium Authors' + s.source = { :path => '.' } + + s.source_files = 'firebase_app_check/Sources/firebase_app_check/**/*.swift' + + s.platform = :osx, '10.13' + + # Flutter dependencies + s.dependency 'FlutterMacOS' + + # Firebase dependencies + s.dependency 'firebase_core' + s.dependency 'Firebase/CoreOnly', "~> #{firebase_sdk_version}" + s.dependency 'Firebase/AppCheck', "~> #{firebase_sdk_version}" + + s.static_framework = true + s.pod_target_xcconfig = { + 'GCC_PREPROCESSOR_DEFINITIONS' => "LIBRARY_VERSION=\\\"#{library_version}\\\" LIBRARY_NAME=\\\"flutter-fire-appcheck\\\"", + 'DEFINES_MODULE' => 'YES' + } +end diff --git a/mih_ui/android/build/ios/SourcePackages/firebase_app_check-0.4.5/macos/firebase_app_check/Package.swift b/mih_ui/android/build/ios/SourcePackages/firebase_app_check-0.4.5/macos/firebase_app_check/Package.swift new file mode 100644 index 00000000..2edc73e6 --- /dev/null +++ b/mih_ui/android/build/ios/SourcePackages/firebase_app_check-0.4.5/macos/firebase_app_check/Package.swift @@ -0,0 +1,36 @@ +// swift-tools-version: 5.9 +// The swift-tools-version declares the minimum version of Swift required to build this package. + +// Copyright 2024, the Chromium project authors. Please see the AUTHORS file +// for details. All rights reserved. Use of this source code is governed by a +// BSD-style license that can be found in the LICENSE file. + +import PackageDescription + +let firebaseSdkVersion: Version = "12.15.0" + +let package = Package( + name: "firebase_app_check", + platforms: [ + .macOS("10.15") + ], + products: [ + .library(name: "firebase-app-check", targets: ["firebase_app_check"]) + ], + dependencies: [ + .package(url: "https://github.com/firebase/firebase-ios-sdk", exact: firebaseSdkVersion), + .package(name: "firebase_core", path: "../firebase_core"), + ], + targets: [ + .target( + name: "firebase_app_check", + dependencies: [ + .product(name: "FirebaseAppCheck", package: "firebase-ios-sdk"), + .product(name: "firebase-core", package: "firebase_core"), + ], + resources: [ + .process("Resources") + ] + ) + ] +) diff --git a/mih_ui/android/build/ios/SourcePackages/firebase_app_check-0.4.5/macos/firebase_app_check/Sources/firebase_app_check/Constants.swift b/mih_ui/android/build/ios/SourcePackages/firebase_app_check-0.4.5/macos/firebase_app_check/Sources/firebase_app_check/Constants.swift new file mode 100644 index 00000000..28a2ec57 --- /dev/null +++ b/mih_ui/android/build/ios/SourcePackages/firebase_app_check-0.4.5/macos/firebase_app_check/Sources/firebase_app_check/Constants.swift @@ -0,0 +1,6 @@ +// Copyright 2025 The Chromium Authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +/// Auto-generated file. Do not edit. +public let versionNumber = "0.4.5" diff --git a/mih_ui/android/build/ios/SourcePackages/firebase_app_check-0.4.5/macos/firebase_app_check/Sources/firebase_app_check/FirebaseAppCheckMessages.g.swift b/mih_ui/android/build/ios/SourcePackages/firebase_app_check-0.4.5/macos/firebase_app_check/Sources/firebase_app_check/FirebaseAppCheckMessages.g.swift new file mode 100644 index 00000000..d8f3a100 --- /dev/null +++ b/mih_ui/android/build/ios/SourcePackages/firebase_app_check-0.4.5/macos/firebase_app_check/Sources/firebase_app_check/FirebaseAppCheckMessages.g.swift @@ -0,0 +1,236 @@ +// Copyright 2025, the Chromium project authors. Please see the AUTHORS file +// for details. All rights reserved. Use of this source code is governed by a +// BSD-style license that can be found in the LICENSE file. +// Autogenerated from Pigeon (v26.3.4), do not edit directly. +// See also: https://pub.dev/packages/pigeon + +import Foundation + +#if os(iOS) + import Flutter +#elseif os(macOS) + import FlutterMacOS +#else + #error("Unsupported platform.") +#endif + +/// Error class for passing custom error details to Dart side. +final class PigeonError: Error { + let code: String + let message: String? + let details: Sendable? + + init(code: String, message: String?, details: Sendable?) { + self.code = code + self.message = message + self.details = details + } + + var localizedDescription: String { + "PigeonError(code: \(code), message: \(message ?? ""), details: \(details ?? "")" + } +} + +private func wrapResult(_ result: Any?) -> [Any?] { + [result] +} + +private func wrapError(_ error: Any) -> [Any?] { + if let pigeonError = error as? PigeonError { + return [ + pigeonError.code, + pigeonError.message, + pigeonError.details, + ] + } + if let flutterError = error as? FlutterError { + return [ + flutterError.code, + flutterError.message, + flutterError.details, + ] + } + return [ + "\(error)", + "\(Swift.type(of: error))", + "Stacktrace: \(Thread.callStackSymbols)", + ] +} + +private func isNullish(_ value: Any?) -> Bool { + value is NSNull || value == nil +} + +private func nilOrValue(_ value: Any?) -> T? { + if value is NSNull { return nil } + return value as! T? +} + +private class FirebaseAppCheckMessagesPigeonCodecReader: FlutterStandardReader {} + +private class FirebaseAppCheckMessagesPigeonCodecWriter: FlutterStandardWriter {} + +private class FirebaseAppCheckMessagesPigeonCodecReaderWriter: FlutterStandardReaderWriter { + override func reader(with data: Data) -> FlutterStandardReader { + FirebaseAppCheckMessagesPigeonCodecReader(data: data) + } + + override func writer(with data: NSMutableData) -> FlutterStandardWriter { + FirebaseAppCheckMessagesPigeonCodecWriter(data: data) + } +} + +class FirebaseAppCheckMessagesPigeonCodec: FlutterStandardMessageCodec, @unchecked Sendable { + static let shared = FirebaseAppCheckMessagesPigeonCodec( + readerWriter: FirebaseAppCheckMessagesPigeonCodecReaderWriter() + ) +} + +/// Generated protocol from Pigeon that represents a handler of messages from Flutter. +protocol FirebaseAppCheckHostApi { + func activate( + appName: String, androidProvider: String?, appleProvider: String?, + debugToken: String?, + completion: @escaping (Result) -> Void) + func getToken( + appName: String, forceRefresh: Bool, + completion: @escaping (Result) -> Void) + func setTokenAutoRefreshEnabled( + appName: String, isTokenAutoRefreshEnabled: Bool, + completion: @escaping (Result) -> Void) + func registerTokenListener(appName: String, completion: @escaping (Result) -> Void) + func getLimitedUseAppCheckToken( + appName: String, + completion: @escaping (Result) -> Void) +} + +/// Generated setup class from Pigeon to handle messages through the `binaryMessenger`. +class FirebaseAppCheckHostApiSetup { + static var codec: FlutterStandardMessageCodec { + FirebaseAppCheckMessagesPigeonCodec.shared + } + + /// Sets up an instance of `FirebaseAppCheckHostApi` to handle messages through the + /// `binaryMessenger`. + static func setUp( + binaryMessenger: FlutterBinaryMessenger, api: FirebaseAppCheckHostApi?, + messageChannelSuffix: String = "" + ) { + let channelSuffix = messageChannelSuffix.count > 0 ? ".\(messageChannelSuffix)" : "" + let activateChannel = FlutterBasicMessageChannel( + name: + "dev.flutter.pigeon.firebase_app_check_platform_interface.FirebaseAppCheckHostApi.activate\(channelSuffix)", + binaryMessenger: binaryMessenger, codec: codec + ) + if let api { + activateChannel.setMessageHandler { message, reply in + let args = message as! [Any?] + let appNameArg = args[0] as! String + let androidProviderArg: String? = nilOrValue(args[1]) + let appleProviderArg: String? = nilOrValue(args[2]) + let debugTokenArg: String? = nilOrValue(args[3]) + api.activate( + appName: appNameArg, androidProvider: androidProviderArg, appleProvider: appleProviderArg, + debugToken: debugTokenArg + ) { result in + switch result { + case .success: + reply(wrapResult(nil)) + case .failure(let error): + reply(wrapError(error)) + } + } + } + } else { + activateChannel.setMessageHandler(nil) + } + let getTokenChannel = FlutterBasicMessageChannel( + name: + "dev.flutter.pigeon.firebase_app_check_platform_interface.FirebaseAppCheckHostApi.getToken\(channelSuffix)", + binaryMessenger: binaryMessenger, codec: codec + ) + if let api { + getTokenChannel.setMessageHandler { message, reply in + let args = message as! [Any?] + let appNameArg = args[0] as! String + let forceRefreshArg = args[1] as! Bool + api.getToken(appName: appNameArg, forceRefresh: forceRefreshArg) { result in + switch result { + case .success(let res): + reply(wrapResult(res)) + case .failure(let error): + reply(wrapError(error)) + } + } + } + } else { + getTokenChannel.setMessageHandler(nil) + } + let setTokenAutoRefreshEnabledChannel = FlutterBasicMessageChannel( + name: + "dev.flutter.pigeon.firebase_app_check_platform_interface.FirebaseAppCheckHostApi.setTokenAutoRefreshEnabled\(channelSuffix)", + binaryMessenger: binaryMessenger, codec: codec + ) + if let api { + setTokenAutoRefreshEnabledChannel.setMessageHandler { message, reply in + let args = message as! [Any?] + let appNameArg = args[0] as! String + let isTokenAutoRefreshEnabledArg = args[1] as! Bool + api.setTokenAutoRefreshEnabled( + appName: appNameArg, isTokenAutoRefreshEnabled: isTokenAutoRefreshEnabledArg + ) { result in + switch result { + case .success: + reply(wrapResult(nil)) + case .failure(let error): + reply(wrapError(error)) + } + } + } + } else { + setTokenAutoRefreshEnabledChannel.setMessageHandler(nil) + } + let registerTokenListenerChannel = FlutterBasicMessageChannel( + name: + "dev.flutter.pigeon.firebase_app_check_platform_interface.FirebaseAppCheckHostApi.registerTokenListener\(channelSuffix)", + binaryMessenger: binaryMessenger, codec: codec + ) + if let api { + registerTokenListenerChannel.setMessageHandler { message, reply in + let args = message as! [Any?] + let appNameArg = args[0] as! String + api.registerTokenListener(appName: appNameArg) { result in + switch result { + case .success(let res): + reply(wrapResult(res)) + case .failure(let error): + reply(wrapError(error)) + } + } + } + } else { + registerTokenListenerChannel.setMessageHandler(nil) + } + let getLimitedUseAppCheckTokenChannel = FlutterBasicMessageChannel( + name: + "dev.flutter.pigeon.firebase_app_check_platform_interface.FirebaseAppCheckHostApi.getLimitedUseAppCheckToken\(channelSuffix)", + binaryMessenger: binaryMessenger, codec: codec + ) + if let api { + getLimitedUseAppCheckTokenChannel.setMessageHandler { message, reply in + let args = message as! [Any?] + let appNameArg = args[0] as! String + api.getLimitedUseAppCheckToken(appName: appNameArg) { result in + switch result { + case .success(let res): + reply(wrapResult(res)) + case .failure(let error): + reply(wrapError(error)) + } + } + } + } else { + getLimitedUseAppCheckTokenChannel.setMessageHandler(nil) + } + } +} diff --git a/mih_ui/android/build/ios/SourcePackages/firebase_app_check-0.4.5/macos/firebase_app_check/Sources/firebase_app_check/FirebaseAppCheckPlugin.swift b/mih_ui/android/build/ios/SourcePackages/firebase_app_check-0.4.5/macos/firebase_app_check/Sources/firebase_app_check/FirebaseAppCheckPlugin.swift new file mode 100644 index 00000000..2d63a765 --- /dev/null +++ b/mih_ui/android/build/ios/SourcePackages/firebase_app_check-0.4.5/macos/firebase_app_check/Sources/firebase_app_check/FirebaseAppCheckPlugin.swift @@ -0,0 +1,369 @@ +// Copyright 2025 The Chromium Authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +import FirebaseAppCheck +import FirebaseCore + +#if canImport(FlutterMacOS) + import FlutterMacOS +#else + import Flutter +#endif + +#if canImport(firebase_core) + import firebase_core +#else + import firebase_core_shared +#endif + +let kFirebaseAppCheckChannelName = "plugins.flutter.io/firebase_app_check" +let kFirebaseAppCheckTokenChannelPrefix = "plugins.flutter.io/firebase_app_check/token/" + +// swift-format-ignore: AvoidRetroactiveConformances +extension FlutterError: @retroactive Error {} + +public class FirebaseAppCheckPlugin: NSObject, FlutterPlugin, + FLTFirebasePluginProtocol, FirebaseAppCheckHostApi +{ + private var eventChannels: [String: FlutterEventChannel] = [:] + private var streamHandlers: [String: AppCheckTokenStreamHandler] = [:] + private var providerFactory: FlutterAppCheckProviderFactory? + + static let shared: FirebaseAppCheckPlugin = { + let instance = FirebaseAppCheckPlugin() + instance.providerFactory = FlutterAppCheckProviderFactory() + AppCheck.setAppCheckProviderFactory(instance.providerFactory) + FLTFirebasePluginRegistry.sharedInstance().register(instance) + return instance + }() + + public static func register(with registrar: FlutterPluginRegistrar) { + let binaryMessenger: FlutterBinaryMessenger + + #if os(macOS) + binaryMessenger = registrar.messenger + #elseif os(iOS) + binaryMessenger = registrar.messenger() + #endif + + let instance = shared + instance.binaryMessenger = binaryMessenger + FirebaseAppCheckHostApiSetup.setUp(binaryMessenger: binaryMessenger, api: instance) + + if FirebaseApp.responds(to: NSSelectorFromString("registerLibrary:withVersion:")) { + FirebaseApp.perform( + NSSelectorFromString("registerLibrary:withVersion:"), + with: instance.firebaseLibraryName(), + with: instance.firebaseLibraryVersion() + ) + } + } + + private var binaryMessenger: FlutterBinaryMessenger? + + func activate( + appName: String, androidProvider: String?, appleProvider: String?, + debugToken: String?, + completion: @escaping (Result) -> Void + ) { + guard let app = FLTFirebasePlugin.firebaseAppNamed(appName) else { + completion( + .failure( + FlutterError( + code: "unknown", message: "Firebase app not found: \(appName)", details: nil + ) + ) + ) + return + } + let provider = appleProvider ?? "deviceCheck" + + providerFactory?.configure( + app: app, + providerName: provider, + debugToken: debugToken + ) + + completion(.success(())) + } + + func getToken( + appName: String, forceRefresh: Bool, + completion: @escaping (Result) -> Void + ) { + guard let app = FLTFirebasePlugin.firebaseAppNamed(appName), + let appCheck = AppCheck.appCheck(app: app) + else { + completion( + .failure( + FlutterError( + code: "unknown", message: "App Check not available for app: \(appName)", details: nil + ) + ) + ) + return + } + + appCheck.token(forcingRefresh: forceRefresh) { token, error in + if let error { + completion(.failure(self.createFlutterError(error))) + } else { + completion(.success(token?.token)) + } + } + } + + func setTokenAutoRefreshEnabled( + appName: String, isTokenAutoRefreshEnabled: Bool, + completion: @escaping (Result) -> Void + ) { + guard let app = FLTFirebasePlugin.firebaseAppNamed(appName), + let appCheck = AppCheck.appCheck(app: app) + else { + completion( + .failure( + FlutterError( + code: "unknown", message: "App Check not available for app: \(appName)", details: nil + ) + ) + ) + return + } + appCheck.isTokenAutoRefreshEnabled = isTokenAutoRefreshEnabled + completion(.success(())) + } + + func registerTokenListener( + appName: String, + completion: @escaping (Result) -> Void + ) { + let name = kFirebaseAppCheckTokenChannelPrefix + appName + + guard let messenger = binaryMessenger else { + completion( + .failure( + FlutterError( + code: "no-messenger", + message: "Binary messenger not available", + details: nil + ) + ) + ) + return + } + + let channel = FlutterEventChannel(name: name, binaryMessenger: messenger) + let handler = AppCheckTokenStreamHandler() + channel.setStreamHandler(handler) + + eventChannels[name] = channel + streamHandlers[name] = handler + + completion(.success(name)) + } + + func getLimitedUseAppCheckToken( + appName: String, + completion: @escaping (Result) -> Void + ) { + guard let app = FLTFirebasePlugin.firebaseAppNamed(appName), + let appCheck = AppCheck.appCheck(app: app) + else { + completion( + .failure( + FlutterError( + code: "unknown", message: "App Check not available for app: \(appName)", details: nil + ) + ) + ) + return + } + + appCheck.limitedUseToken { token, error in + if let error { + completion(.failure(self.createFlutterError(error))) + } else { + completion(.success(token?.token ?? "")) + } + } + } + + // MARK: - FLTFirebasePluginProtocol + + public func didReinitializeFirebaseCore(_ completion: @escaping () -> Void) { + for (_, channel) in eventChannels { + channel.setStreamHandler(nil) + } + for (_, handler) in streamHandlers { + _ = handler.onCancel(withArguments: nil) + } + eventChannels.removeAll() + streamHandlers.removeAll() + completion() + } + + public func pluginConstants(for firebaseApp: FirebaseApp) -> [AnyHashable: Any] { + [:] + } + + public func firebaseLibraryName() -> String { + "flutter-fire-appcheck" + } + + public func firebaseLibraryVersion() -> String { + versionNumber + } + + public func flutterChannelName() -> String { + kFirebaseAppCheckChannelName + } + + private func createFlutterError(_ error: Error) -> FlutterError { + let nsError = error as NSError + var code = "unknown" + switch nsError.code { + case 0: // FIRAppCheckErrorCodeServerUnreachable + code = "server-unreachable" + case 1: // FIRAppCheckErrorCodeInvalidConfiguration + code = "invalid-configuration" + case 2: // FIRAppCheckErrorCodeKeychain + code = "code-keychain" + case 3: // FIRAppCheckErrorCodeUnsupported + code = "code-unsupported" + default: + code = "unknown" + } + return FlutterError( + code: code, + message: nsError.localizedDescription, + details: nil + ) + } +} + +// MARK: - Token Stream Handler + +class AppCheckTokenStreamHandler: NSObject, FlutterStreamHandler { + private var observer: NSObjectProtocol? + + func onListen( + withArguments arguments: Any?, + eventSink events: @escaping FlutterEventSink + ) -> FlutterError? { + observer = NotificationCenter.default.addObserver( + forName: NSNotification.Name("FIRAppCheckAppCheckTokenDidChangeNotification"), + object: nil, + queue: nil + ) { notification in + if let token = notification.userInfo?["FIRAppCheckTokenNotificationKey"] as? String { + events(["token": token]) + } + } + return nil + } + + func onCancel(withArguments arguments: Any?) -> FlutterError? { + if let observer { + NotificationCenter.default.removeObserver(observer) + self.observer = nil + } + return nil + } +} + +// MARK: - App Check Provider Factory + +class FlutterAppCheckProviderFactory: NSObject, AppCheckProviderFactory { + private var providers: [String: AppCheckProviderWrapper] = [:] + + func createProvider(with app: FirebaseApp) -> (any AppCheckProvider)? { + if providers[app.name] == nil { + let wrapper = AppCheckProviderWrapper() + // Default to deviceCheck. activate() will reconfigure with the correct provider. + wrapper.configure( + app: app, + providerName: "deviceCheck", + debugToken: nil + ) + providers[app.name] = wrapper + } + return providers[app.name] + } + + func configure( + app: FirebaseApp, + providerName: String, + debugToken: String? + ) { + if providers[app.name] == nil { + providers[app.name] = AppCheckProviderWrapper() + } + providers[app.name]?.configure( + app: app, + providerName: providerName, + debugToken: debugToken + ) + } +} + +class AppCheckProviderWrapper: NSObject, AppCheckProvider { + private var delegateProvider: (any AppCheckProvider)? + + func configure( + app: FirebaseApp, + providerName: String, + debugToken: String? + ) { + switch providerName { + case "debug": + if let debugToken { + setenv("FIRAAppCheckDebugToken", debugToken, 1) + } + delegateProvider = AppCheckDebugProvider(app: app) + if debugToken == nil, let debugProvider = delegateProvider as? AppCheckDebugProvider { + print("Firebase App Check Debug Token: \(debugProvider.localDebugToken())") + } + case "appAttest": + if #available(iOS 14.0, macOS 14.0, macCatalyst 14.0, tvOS 15.0, watchOS 9.0, *) { + delegateProvider = AppAttestProvider(app: app) + } else { + delegateProvider = AppCheckDebugProvider(app: app) + } + case "appAttestWithDeviceCheckFallback": + if #available(iOS 14.0, macOS 14.0, *) { + delegateProvider = AppAttestProvider(app: app) + } else { + delegateProvider = DeviceCheckProvider(app: app) + } + case "recaptcha": + #if os(iOS) + delegateProvider = RecaptchaProvider(app: app) + if delegateProvider == nil { + print( + "Firebase App Check: failed to initialize RecaptchaProvider. Ensure site key is in GoogleService-Info.plist." + ) + } + #else + print("Firebase App Check: reCAPTCHA is only supported on iOS.") + #endif + default: + // deviceCheck + delegateProvider = DeviceCheckProvider(app: app) + } + } + + func getToken(completion handler: @escaping (AppCheckToken?, Error?) -> Void) { + guard let delegateProvider else { + handler( + nil, + NSError( + domain: "firebase_app_check", code: -1, + userInfo: [NSLocalizedDescriptionKey: "Provider not configured"] + ) + ) + return + } + delegateProvider.getToken(completion: handler) + } +} diff --git a/mih_ui/android/build/ios/SourcePackages/firebase_app_check-0.4.5/pubspec.yaml b/mih_ui/android/build/ios/SourcePackages/firebase_app_check-0.4.5/pubspec.yaml new file mode 100644 index 00000000..605a2914 --- /dev/null +++ b/mih_ui/android/build/ios/SourcePackages/firebase_app_check-0.4.5/pubspec.yaml @@ -0,0 +1,48 @@ +name: firebase_app_check +description: App Check works alongside other Firebase services to help protect your backend resources from abuse, such as billing fraud or phishing. +homepage: https://firebase.google.com/docs/app-check +repository: https://github.com/firebase/flutterfire/tree/main/packages/firebase_app_check/firebase_app_check +version: 0.4.5 +resolution: workspace +topics: + - firebase + - app-check + - security + - protection + +false_secrets: + - example/** + +environment: + sdk: '^3.6.0' + flutter: '>=3.27.0' + +dependencies: + firebase_app_check_platform_interface: ^0.4.1 + firebase_app_check_web: ^0.2.5 + firebase_core: ^4.11.0 + firebase_core_platform_interface: ^7.1.0 + flutter: + sdk: flutter + +dev_dependencies: + async: ^2.5.0 + flutter_test: + sdk: flutter + mockito: ^5.0.0 + plugin_platform_interface: ^2.1.3 + +flutter: + plugin: + platforms: + android: + package: io.flutter.plugins.firebase.appcheck + pluginClass: FirebaseAppCheckPlugin + ios: + pluginClass: FirebaseAppCheckPlugin + macos: + pluginClass: FirebaseAppCheckPlugin + web: + default_package: firebase_app_check_web + windows: + pluginClass: FirebaseAppCheckPluginCApi diff --git a/mih_ui/android/build/ios/SourcePackages/firebase_app_check-0.4.5/test/firebase_app_check_test.dart b/mih_ui/android/build/ios/SourcePackages/firebase_app_check-0.4.5/test/firebase_app_check_test.dart new file mode 100755 index 00000000..f939040d --- /dev/null +++ b/mih_ui/android/build/ios/SourcePackages/firebase_app_check-0.4.5/test/firebase_app_check_test.dart @@ -0,0 +1,79 @@ +// Copyright 2021 The Chromium Authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +import 'package:firebase_app_check/firebase_app_check.dart'; +import 'package:firebase_core/firebase_core.dart'; +import 'package:flutter_test/flutter_test.dart'; + +import './mock.dart'; + +void main() { + setupFirebaseAppCheckMocks(); + late FirebaseApp secondaryApp; + + group('$FirebaseAppCheck', () { + setUpAll(() async { + await Firebase.initializeApp(); + secondaryApp = await Firebase.initializeApp( + name: 'secondaryApp', + options: const FirebaseOptions( + appId: '1:1234567890:ios:42424242424242', + apiKey: '123', + projectId: '123', + messagingSenderId: '1234567890', + ), + ); + }); + + group('instance', () { + test('successful call', () async { + final appCheck = FirebaseAppCheck.instance; + + expect(appCheck, isA()); + expect(appCheck.app.name, defaultFirebaseAppName); + }); + }); + + group('instanceFor', () { + test('successful call', () async { + final appCheck = FirebaseAppCheck.instanceFor(app: secondaryApp); + + expect(appCheck, isA()); + expect(appCheck.app.name, 'secondaryApp'); + }); + + test('creates a fresh instance after app delete and reinitialize', + () async { + const appName = 'delete-reinit-app-check'; + const options = FirebaseOptions( + appId: '1:1234567890:ios:42424242424242', + apiKey: '123', + projectId: '123', + messagingSenderId: '1234567890', + ); + final app = await Firebase.initializeApp( + name: appName, + options: options, + ); + final appCheck1 = FirebaseAppCheck.instanceFor(app: app); + + expect(app.getService(), same(appCheck1)); + + await app.delete(); + + final app2 = await Firebase.initializeApp( + name: appName, + options: options, + ); + addTearDown(app2.delete); + + final appCheck2 = FirebaseAppCheck.instanceFor(app: app2); + + expect(appCheck2, isNot(same(appCheck1))); + expect(appCheck2.app, app2); + expect(app2.getService(), same(appCheck2)); + }); + }); + }); +} diff --git a/mih_ui/android/build/ios/SourcePackages/firebase_app_check-0.4.5/test/mock.dart b/mih_ui/android/build/ios/SourcePackages/firebase_app_check-0.4.5/test/mock.dart new file mode 100644 index 00000000..0a6701d3 --- /dev/null +++ b/mih_ui/android/build/ios/SourcePackages/firebase_app_check-0.4.5/test/mock.dart @@ -0,0 +1,35 @@ +// Copyright 2021 The Chromium Authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +import 'package:firebase_core_platform_interface/test.dart'; +import 'package:flutter/services.dart'; +import 'package:flutter_test/flutter_test.dart'; + +typedef Callback = void Function(MethodCall call); + +final List methodCallLog = []; + +void setupFirebaseAppCheckMocks([Callback? customHandlers]) { + TestWidgetsFlutterBinding.ensureInitialized(); + + setupFirebaseCoreMocks(); + TestFirebaseAppHostApi.setUp(MockFirebaseAppHostApi()); +} + +class MockFirebaseAppHostApi implements TestFirebaseAppHostApi { + @override + Future delete(String appName) async {} + + @override + Future setAutomaticDataCollectionEnabled( + String appName, + bool enabled, + ) async {} + + @override + Future setAutomaticResourceManagementEnabled( + String appName, + bool enabled, + ) async {} +} diff --git a/mih_ui/android/build/ios/SourcePackages/firebase_app_check-0.4.5/windows/CMakeLists.txt b/mih_ui/android/build/ios/SourcePackages/firebase_app_check-0.4.5/windows/CMakeLists.txt new file mode 100644 index 00000000..7c40c200 --- /dev/null +++ b/mih_ui/android/build/ios/SourcePackages/firebase_app_check-0.4.5/windows/CMakeLists.txt @@ -0,0 +1,81 @@ +# The Flutter tooling requires that developers have a version of Visual Studio +# installed that includes CMake 3.14 or later. You should not increase this +# version, as doing so will cause the plugin to fail to compile for some +# customers of the plugin. +cmake_minimum_required(VERSION 3.14) + +# Project-level configuration. +set(PROJECT_NAME "firebase_app_check") +project(${PROJECT_NAME} LANGUAGES CXX) + +# This value is used when generating builds using this plugin, so it must +# not be changed +set(PLUGIN_NAME "firebase_app_check_plugin") + +# Any new source files that you add to the plugin should be added here. +list(APPEND PLUGIN_SOURCES + "firebase_app_check_plugin.cpp" + "firebase_app_check_plugin.h" + "messages.g.cpp" + "messages.g.h" +) + +# Read version from pubspec.yaml +file(STRINGS "../pubspec.yaml" pubspec_content) +foreach(line ${pubspec_content}) + string(FIND ${line} "version: " has_version) + + if("${has_version}" STREQUAL "0") + string(FIND ${line} ": " version_start_pos) + math(EXPR version_start_pos "${version_start_pos} + 2") + string(LENGTH ${line} version_end_pos) + math(EXPR len "${version_end_pos} - ${version_start_pos}") + string(SUBSTRING ${line} ${version_start_pos} ${len} PLUGIN_VERSION) + break() + endif() +endforeach(line) + +configure_file(plugin_version.h.in ${CMAKE_BINARY_DIR}/generated/firebase_app_check/plugin_version.h) +include_directories(${CMAKE_BINARY_DIR}/generated/) + +# Define the plugin library target. Its name must not be changed (see comment +# on PLUGIN_NAME above). +add_library(${PLUGIN_NAME} STATIC + "include/firebase_app_check/firebase_app_check_plugin_c_api.h" + "firebase_app_check_plugin_c_api.cpp" + ${PLUGIN_SOURCES} + ${CMAKE_BINARY_DIR}/generated/firebase_app_check/plugin_version.h +) + +# Apply a standard set of build settings that are configured in the +# application-level CMakeLists.txt. This can be removed for plugins that want +# full control over build settings. +apply_standard_settings(${PLUGIN_NAME}) + +# Symbols are hidden by default to reduce the chance of accidental conflicts +# between plugins. This should not be removed; any symbols that should be +# exported should be explicitly exported with the FLUTTER_PLUGIN_EXPORT macro. +set_target_properties(${PLUGIN_NAME} PROPERTIES + CXX_VISIBILITY_PRESET hidden) +target_compile_definitions(${PLUGIN_NAME} PUBLIC FLUTTER_PLUGIN_IMPL) + +# Enable firebase-cpp-sdk's platform logging api. +target_compile_definitions(${PLUGIN_NAME} PRIVATE -DINTERNAL_EXPERIMENTAL=1) + +# Source include directories and library dependencies. Add any plugin-specific +# dependencies here. +set(MSVC_RUNTIME_MODE MD) +set(firebase_libs firebase_core_plugin firebase_app_check) +target_link_libraries(${PLUGIN_NAME} PRIVATE "${firebase_libs}") + +target_include_directories(${PLUGIN_NAME} INTERFACE + "${CMAKE_CURRENT_SOURCE_DIR}/include") +target_link_libraries(${PLUGIN_NAME} PUBLIC flutter flutter_wrapper_plugin) + +# List of absolute paths to libraries that should be bundled with the plugin. +# This list could contain prebuilt libraries, or libraries created by an +# external build triggered from this build file. +set(firebase_app_check_bundled_libraries + "" + PARENT_SCOPE +) diff --git a/mih_ui/android/build/ios/SourcePackages/firebase_app_check-0.4.5/windows/firebase_app_check_plugin.cpp b/mih_ui/android/build/ios/SourcePackages/firebase_app_check-0.4.5/windows/firebase_app_check_plugin.cpp new file mode 100644 index 00000000..d9a0a72d --- /dev/null +++ b/mih_ui/android/build/ios/SourcePackages/firebase_app_check-0.4.5/windows/firebase_app_check_plugin.cpp @@ -0,0 +1,249 @@ +// Copyright 2025, the Chromium project authors. Please see the AUTHORS file +// for details. All rights reserved. Use of this source code is governed by a +// BSD-style license that can be found in the LICENSE file. + +#include "firebase_app_check_plugin.h" + +#include +#include +#include +#include +#include + +#include +#include +#include + +#include "firebase/app.h" +#include "firebase/app_check.h" +#include "firebase/app_check/debug_provider.h" +#include "firebase/future.h" +#include "firebase_app_check/plugin_version.h" +#include "firebase_core/firebase_core_plugin_c_api.h" +#include "messages.g.h" + +using ::firebase::App; +using ::firebase::Future; +using ::firebase::app_check::AppCheck; +using ::firebase::app_check::AppCheckListener; +using ::firebase::app_check::AppCheckToken; +using ::firebase::app_check::DebugAppCheckProviderFactory; + +namespace firebase_app_check_windows { + +static const std::string kLibraryName = "flutter-fire-app-check"; +static const std::string kEventChannelNamePrefix = + "plugins.flutter.io/firebase_app_check/token/"; + +flutter::BinaryMessenger* FirebaseAppCheckPlugin::binaryMessenger = nullptr; +std::map>> + FirebaseAppCheckPlugin::event_channels_; +std::map + FirebaseAppCheckPlugin::listeners_map_; + +// AppCheckListener implementation that forwards token changes to an EventSink. +class FlutterAppCheckListener : public AppCheckListener { + public: + void SetEventSink( + std::unique_ptr> event_sink) { + event_sink_ = std::move(event_sink); + } + + void OnAppCheckTokenChanged(const AppCheckToken& token) override { + if (event_sink_) { + flutter::EncodableMap event; + event[flutter::EncodableValue("token")] = + flutter::EncodableValue(token.token); + event_sink_->Success(flutter::EncodableValue(event)); + } + } + + private: + std::unique_ptr> event_sink_; +}; + +// StreamHandler for token change events. +class TokenStreamHandler + : public flutter::StreamHandler { + public: + TokenStreamHandler(AppCheck* app_check, const std::string& app_name) + : app_check_(app_check), app_name_(app_name) {} + + std::unique_ptr> + OnListenInternal( + const flutter::EncodableValue* arguments, + std::unique_ptr>&& events) + override { + listener_ = std::make_unique(); + listener_->SetEventSink(std::move(events)); + app_check_->AddAppCheckListener(listener_.get()); + FirebaseAppCheckPlugin::listeners_map_[app_name_] = listener_.get(); + return nullptr; + } + + std::unique_ptr> + OnCancelInternal(const flutter::EncodableValue* arguments) override { + if (listener_) { + app_check_->RemoveAppCheckListener(listener_.get()); + FirebaseAppCheckPlugin::listeners_map_.erase(app_name_); + listener_.reset(); + } + return nullptr; + } + + private: + AppCheck* app_check_; + std::string app_name_; + std::unique_ptr listener_; +}; + +static AppCheck* GetAppCheckFromPigeon(const std::string& app_name) { + App* app = App::GetInstance(app_name.c_str()); + return AppCheck::GetInstance(app); +} + +static FlutterError ParseError(const firebase::FutureBase& completed_future) { + std::string error_code = "unknown"; + int error = completed_future.error(); + switch (error) { + case firebase::app_check::kAppCheckErrorServerUnreachable: + error_code = "server-unreachable"; + break; + case firebase::app_check::kAppCheckErrorInvalidConfiguration: + error_code = "invalid-configuration"; + break; + case firebase::app_check::kAppCheckErrorSystemKeychain: + error_code = "system-keychain"; + break; + case firebase::app_check::kAppCheckErrorUnsupportedProvider: + error_code = "unsupported-provider"; + break; + default: + error_code = "unknown"; + break; + } + + std::string error_message = completed_future.error_message() + ? completed_future.error_message() + : "An unknown error occurred"; + + return FlutterError(error_code, error_message); +} + +// static +void FirebaseAppCheckPlugin::RegisterWithRegistrar( + flutter::PluginRegistrarWindows* registrar) { + auto plugin = std::make_unique(); + + FirebaseAppCheckHostApi::SetUp(registrar->messenger(), plugin.get()); + + registrar->AddPlugin(std::move(plugin)); + + binaryMessenger = registrar->messenger(); + + // Register for platform logging + App::RegisterLibrary(kLibraryName.c_str(), getPluginVersion().c_str(), + nullptr); +} + +FirebaseAppCheckPlugin::FirebaseAppCheckPlugin() {} + +FirebaseAppCheckPlugin::~FirebaseAppCheckPlugin() { + for (auto& [app_name, listener] : listeners_map_) { + App* app = App::GetInstance(app_name.c_str()); + if (app) { + AppCheck* app_check = AppCheck::GetInstance(app); + if (app_check) { + app_check->RemoveAppCheckListener(listener); + } + } + } + listeners_map_.clear(); + event_channels_.clear(); +} + +void FirebaseAppCheckPlugin::Activate( + const std::string& app_name, const std::string* android_provider, + const std::string* apple_provider, const std::string* debug_token, + std::function reply)> result) { + // On Windows/desktop, only the Debug provider is available. + DebugAppCheckProviderFactory* factory = + DebugAppCheckProviderFactory::GetInstance(); + + if (debug_token != nullptr && !debug_token->empty()) { + factory->SetDebugToken(*debug_token); + } + + AppCheck::SetAppCheckProviderFactory(factory); + + result(std::nullopt); +} + +void FirebaseAppCheckPlugin::GetToken( + const std::string& app_name, bool force_refresh, + std::function> reply)> result) { + AppCheck* app_check = GetAppCheckFromPigeon(app_name); + + Future future = app_check->GetAppCheckToken(force_refresh); + future.OnCompletion([result](const Future& completed_future) { + if (completed_future.error() != 0) { + result(ParseError(completed_future)); + } else { + const AppCheckToken* token = completed_future.result(); + if (token) { + result(std::optional(token->token)); + } else { + result(std::optional(std::nullopt)); + } + } + }); +} + +void FirebaseAppCheckPlugin::SetTokenAutoRefreshEnabled( + const std::string& app_name, bool is_token_auto_refresh_enabled, + std::function reply)> result) { + AppCheck* app_check = GetAppCheckFromPigeon(app_name); + app_check->SetTokenAutoRefreshEnabled(is_token_auto_refresh_enabled); + result(std::nullopt); +} + +void FirebaseAppCheckPlugin::RegisterTokenListener( + const std::string& app_name, + std::function reply)> result) { + AppCheck* app_check = GetAppCheckFromPigeon(app_name); + + const std::string name = kEventChannelNamePrefix + app_name; + + auto event_channel = + std::make_unique>( + binaryMessenger, name, &flutter::StandardMethodCodec::GetInstance()); + event_channel->SetStreamHandler( + std::make_unique(app_check, app_name)); + + event_channels_[app_name] = std::move(event_channel); + + result(name); +} + +void FirebaseAppCheckPlugin::GetLimitedUseAppCheckToken( + const std::string& app_name, + std::function reply)> result) { + AppCheck* app_check = GetAppCheckFromPigeon(app_name); + + Future future = app_check->GetLimitedUseAppCheckToken(); + future.OnCompletion([result](const Future& completed_future) { + if (completed_future.error() != 0) { + result(ParseError(completed_future)); + } else { + const AppCheckToken* token = completed_future.result(); + if (token) { + result(token->token); + } else { + result(FlutterError("unknown", "Failed to get limited use token")); + } + } + }); +} + +} // namespace firebase_app_check_windows diff --git a/mih_ui/android/build/ios/SourcePackages/firebase_app_check-0.4.5/windows/firebase_app_check_plugin.h b/mih_ui/android/build/ios/SourcePackages/firebase_app_check-0.4.5/windows/firebase_app_check_plugin.h new file mode 100644 index 00000000..baabf2bd --- /dev/null +++ b/mih_ui/android/build/ios/SourcePackages/firebase_app_check-0.4.5/windows/firebase_app_check_plugin.h @@ -0,0 +1,72 @@ +/* + * Copyright 2025, the Chromium project authors. Please see the AUTHORS file + * for details. All rights reserved. Use of this source code is governed by a + * BSD-style license that can be found in the LICENSE file. + */ + +#ifndef FLUTTER_PLUGIN_FIREBASE_APP_CHECK_PLUGIN_H_ +#define FLUTTER_PLUGIN_FIREBASE_APP_CHECK_PLUGIN_H_ + +#include +#include +#include + +#include +#include +#include + +#include "firebase/app.h" +#include "firebase/app_check.h" +#include "firebase/future.h" +#include "messages.g.h" + +namespace firebase_app_check_windows { + +class TokenStreamHandler; + +class FirebaseAppCheckPlugin : public flutter::Plugin, + public FirebaseAppCheckHostApi { + friend class TokenStreamHandler; + + public: + static void RegisterWithRegistrar(flutter::PluginRegistrarWindows* registrar); + + FirebaseAppCheckPlugin(); + + virtual ~FirebaseAppCheckPlugin(); + + // Disallow copy and assign. + FirebaseAppCheckPlugin(const FirebaseAppCheckPlugin&) = delete; + FirebaseAppCheckPlugin& operator=(const FirebaseAppCheckPlugin&) = delete; + + // FirebaseAppCheckHostApi methods. + void Activate( + const std::string& app_name, const std::string* android_provider, + const std::string* apple_provider, const std::string* debug_token, + std::function reply)> result) override; + void GetToken(const std::string& app_name, bool force_refresh, + std::function> reply)> + result) override; + void SetTokenAutoRefreshEnabled( + const std::string& app_name, bool is_token_auto_refresh_enabled, + std::function reply)> result) override; + void RegisterTokenListener( + const std::string& app_name, + std::function reply)> result) override; + void GetLimitedUseAppCheckToken( + const std::string& app_name, + std::function reply)> result) override; + + private: + static flutter::BinaryMessenger* binaryMessenger; + static std::map< + std::string, + std::unique_ptr>> + event_channels_; + static std::map + listeners_map_; +}; + +} // namespace firebase_app_check_windows + +#endif // FLUTTER_PLUGIN_FIREBASE_APP_CHECK_PLUGIN_H_ diff --git a/mih_ui/android/build/ios/SourcePackages/firebase_app_check-0.4.5/windows/firebase_app_check_plugin_c_api.cpp b/mih_ui/android/build/ios/SourcePackages/firebase_app_check-0.4.5/windows/firebase_app_check_plugin_c_api.cpp new file mode 100644 index 00000000..f0ace78f --- /dev/null +++ b/mih_ui/android/build/ios/SourcePackages/firebase_app_check-0.4.5/windows/firebase_app_check_plugin_c_api.cpp @@ -0,0 +1,16 @@ +// Copyright 2025, the Chromium project authors. Please see the AUTHORS file +// for details. All rights reserved. Use of this source code is governed by a +// BSD-style license that can be found in the LICENSE file. + +#include "include/firebase_app_check/firebase_app_check_plugin_c_api.h" + +#include + +#include "firebase_app_check_plugin.h" + +void FirebaseAppCheckPluginCApiRegisterWithRegistrar( + FlutterDesktopPluginRegistrarRef registrar) { + firebase_app_check_windows::FirebaseAppCheckPlugin::RegisterWithRegistrar( + flutter::PluginRegistrarManager::GetInstance() + ->GetRegistrar(registrar)); +} diff --git a/mih_ui/android/build/ios/SourcePackages/firebase_app_check-0.4.5/windows/include/firebase_app_check/firebase_app_check_plugin_c_api.h b/mih_ui/android/build/ios/SourcePackages/firebase_app_check-0.4.5/windows/include/firebase_app_check/firebase_app_check_plugin_c_api.h new file mode 100644 index 00000000..ab2d9e94 --- /dev/null +++ b/mih_ui/android/build/ios/SourcePackages/firebase_app_check-0.4.5/windows/include/firebase_app_check/firebase_app_check_plugin_c_api.h @@ -0,0 +1,29 @@ +/* + * Copyright 2025, the Chromium project authors. Please see the AUTHORS file + * for details. All rights reserved. Use of this source code is governed by a + * BSD-style license that can be found in the LICENSE file. + */ + +#ifndef FLUTTER_PLUGIN_FIREBASE_APP_CHECK_PLUGIN_C_API_H_ +#define FLUTTER_PLUGIN_FIREBASE_APP_CHECK_PLUGIN_C_API_H_ + +#include + +#ifdef FLUTTER_PLUGIN_IMPL +#define FLUTTER_PLUGIN_EXPORT __declspec(dllexport) +#else +#define FLUTTER_PLUGIN_EXPORT __declspec(dllimport) +#endif + +#if defined(__cplusplus) +extern "C" { +#endif + +FLUTTER_PLUGIN_EXPORT void FirebaseAppCheckPluginCApiRegisterWithRegistrar( + FlutterDesktopPluginRegistrarRef registrar); + +#if defined(__cplusplus) +} // extern "C" +#endif + +#endif // FLUTTER_PLUGIN_FIREBASE_APP_CHECK_PLUGIN_C_API_H_ diff --git a/mih_ui/android/build/ios/SourcePackages/firebase_app_check-0.4.5/windows/messages.g.cpp b/mih_ui/android/build/ios/SourcePackages/firebase_app_check-0.4.5/windows/messages.g.cpp new file mode 100644 index 00000000..0da3e3c1 --- /dev/null +++ b/mih_ui/android/build/ios/SourcePackages/firebase_app_check-0.4.5/windows/messages.g.cpp @@ -0,0 +1,517 @@ +// Copyright 2025, the Chromium project authors. Please see the AUTHORS file +// for details. All rights reserved. Use of this source code is governed by a +// BSD-style license that can be found in the LICENSE file. +// Autogenerated from Pigeon (v26.3.4), do not edit directly. +// See also: https://pub.dev/packages/pigeon + +#undef _HAS_EXCEPTIONS + +#include "messages.g.h" + +#include +#include +#include +#include + +#include +#include +#include +#include +#include + +namespace firebase_app_check_windows { +using ::flutter::BasicMessageChannel; +using ::flutter::CustomEncodableValue; +using ::flutter::EncodableList; +using ::flutter::EncodableMap; +using ::flutter::EncodableValue; + +FlutterError CreateConnectionError(const std::string channel_name) { + return FlutterError( + "channel-error", + "Unable to establish connection on channel: '" + channel_name + "'.", + EncodableValue("")); +} + +namespace { +template +bool PigeonInternalDeepEquals(const T& a, const T& b); + +bool PigeonInternalDeepEquals(const double& a, const double& b); + +template +bool PigeonInternalDeepEquals(const std::vector& a, const std::vector& b); + +template +bool PigeonInternalDeepEquals(const std::map& a, const std::map& b); + +template +bool PigeonInternalDeepEquals(const std::optional& a, + const std::optional& b); + +template +bool PigeonInternalDeepEquals(const std::unique_ptr& a, + const std::unique_ptr& b); + +bool PigeonInternalDeepEquals(const ::flutter::EncodableValue& a, + const ::flutter::EncodableValue& b); + +template +bool PigeonInternalDeepEquals(const T& a, const T& b) { + return a == b; +} + +template +bool PigeonInternalDeepEquals(const std::vector& a, + const std::vector& b) { + if (a.size() != b.size()) { + return false; + } + for (size_t i = 0; i < a.size(); ++i) { + if (!PigeonInternalDeepEquals(a[i], b[i])) { + return false; + } + } + return true; +} + +template +bool PigeonInternalDeepEquals(const std::map& a, + const std::map& b) { + if (a.size() != b.size()) { + return false; + } + for (const auto& kv : a) { + bool found = false; + for (const auto& b_kv : b) { + if (PigeonInternalDeepEquals(kv.first, b_kv.first)) { + if (PigeonInternalDeepEquals(kv.second, b_kv.second)) { + found = true; + break; + } else { + return false; + } + } + } + if (!found) { + return false; + } + } + return true; +} + +bool PigeonInternalDeepEquals(const double& a, const double& b) { + // Normalize -0.0 to 0.0 and handle NaN equality. + return (a == b) || (std::isnan(a) && std::isnan(b)); +} + +template +bool PigeonInternalDeepEquals(const std::optional& a, + const std::optional& b) { + if (!a && !b) { + return true; + } + if (!a || !b) { + return false; + } + return PigeonInternalDeepEquals(*a, *b); +} + +template +bool PigeonInternalDeepEquals(const std::unique_ptr& a, + const std::unique_ptr& b) { + if (a.get() == b.get()) { + return true; + } + if (!a || !b) { + return false; + } + return PigeonInternalDeepEquals(*a, *b); +} + +bool PigeonInternalDeepEquals(const ::flutter::EncodableValue& a, + const ::flutter::EncodableValue& b) { + if (a.index() != b.index()) { + return false; + } + if (const double* da = std::get_if(&a)) { + return PigeonInternalDeepEquals(*da, std::get(b)); + } else if (const ::flutter::EncodableList* la = + std::get_if<::flutter::EncodableList>(&a)) { + return PigeonInternalDeepEquals(*la, std::get<::flutter::EncodableList>(b)); + } else if (const ::flutter::EncodableMap* ma = + std::get_if<::flutter::EncodableMap>(&a)) { + return PigeonInternalDeepEquals(*ma, std::get<::flutter::EncodableMap>(b)); + } + return a == b; +} + +template +size_t PigeonInternalDeepHash(const T& v); + +size_t PigeonInternalDeepHash(const double& v); + +template +size_t PigeonInternalDeepHash(const std::vector& v); + +template +size_t PigeonInternalDeepHash(const std::map& v); + +template +size_t PigeonInternalDeepHash(const std::optional& v); + +template +size_t PigeonInternalDeepHash(const std::unique_ptr& v); + +size_t PigeonInternalDeepHash(const ::flutter::EncodableValue& v); + +template +size_t PigeonInternalDeepHash(const T& v) { + return std::hash()(v); +} + +template +size_t PigeonInternalDeepHash(const std::vector& v) { + size_t result = 1; + for (const auto& item : v) { + result = result * 31 + PigeonInternalDeepHash(item); + } + return result; +} + +template +size_t PigeonInternalDeepHash(const std::map& v) { + size_t result = 0; + for (const auto& kv : v) { + result += ((PigeonInternalDeepHash(kv.first) * 31) ^ + PigeonInternalDeepHash(kv.second)); + } + return result; +} + +size_t PigeonInternalDeepHash(const double& v) { + if (std::isnan(v)) { + // Normalize NaN to a consistent hash. + return std::hash()(std::numeric_limits::quiet_NaN()); + } + if (v == 0.0) { + // Normalize -0.0 to 0.0 so they have the same hash code. + return std::hash()(0.0); + } + return std::hash()(v); +} + +template +size_t PigeonInternalDeepHash(const std::optional& v) { + return v ? PigeonInternalDeepHash(*v) : 0; +} + +template +size_t PigeonInternalDeepHash(const std::unique_ptr& v) { + return v ? PigeonInternalDeepHash(*v) : 0; +} + +size_t PigeonInternalDeepHash(const ::flutter::EncodableValue& v) { + size_t result = v.index(); + if (const double* dv = std::get_if(&v)) { + result = result * 31 + PigeonInternalDeepHash(*dv); + } else if (const ::flutter::EncodableList* lv = + std::get_if<::flutter::EncodableList>(&v)) { + result = result * 31 + PigeonInternalDeepHash(*lv); + } else if (const ::flutter::EncodableMap* mv = + std::get_if<::flutter::EncodableMap>(&v)) { + result = result * 31 + PigeonInternalDeepHash(*mv); + } else { + std::visit( + [&result](const auto& val) { + using T = std::decay_t; + if constexpr (!std::is_same_v && + !std::is_same_v && + !std::is_same_v && + !std::is_same_v && + !std::is_same_v) { + result = result * 31 + PigeonInternalDeepHash(val); + } + }, + v); + } + return result; +} + +} // namespace + +PigeonInternalCodecSerializer::PigeonInternalCodecSerializer() {} + +EncodableValue PigeonInternalCodecSerializer::ReadValueOfType( + uint8_t type, ::flutter::ByteStreamReader* stream) const { + return ::flutter::StandardCodecSerializer::ReadValueOfType(type, stream); +} + +void PigeonInternalCodecSerializer::WriteValue( + const EncodableValue& value, ::flutter::ByteStreamWriter* stream) const { + ::flutter::StandardCodecSerializer::WriteValue(value, stream); +} + +/// The codec used by FirebaseAppCheckHostApi. +const ::flutter::StandardMessageCodec& FirebaseAppCheckHostApi::GetCodec() { + return ::flutter::StandardMessageCodec::GetInstance( + &PigeonInternalCodecSerializer::GetInstance()); +} + +// Sets up an instance of `FirebaseAppCheckHostApi` to handle messages through +// the `binary_messenger`. +void FirebaseAppCheckHostApi::SetUp( + ::flutter::BinaryMessenger* binary_messenger, + FirebaseAppCheckHostApi* api) { + FirebaseAppCheckHostApi::SetUp(binary_messenger, api, ""); +} + +void FirebaseAppCheckHostApi::SetUp( + ::flutter::BinaryMessenger* binary_messenger, FirebaseAppCheckHostApi* api, + const std::string& message_channel_suffix) { + const std::string prepended_suffix = + message_channel_suffix.length() > 0 + ? std::string(".") + message_channel_suffix + : ""; + { + BasicMessageChannel<> channel( + binary_messenger, + "dev.flutter.pigeon.firebase_app_check_platform_interface." + "FirebaseAppCheckHostApi.activate" + + prepended_suffix, + &GetCodec()); + if (api != nullptr) { + channel.SetMessageHandler( + [api](const EncodableValue& message, + const ::flutter::MessageReply& reply) { + try { + const auto& args = std::get(message); + const auto& encodable_app_name_arg = args.at(0); + if (encodable_app_name_arg.IsNull()) { + reply(WrapError("app_name_arg unexpectedly null.")); + return; + } + const auto& app_name_arg = + std::get(encodable_app_name_arg); + const auto& encodable_android_provider_arg = args.at(1); + const auto* android_provider_arg = + std::get_if(&encodable_android_provider_arg); + const auto& encodable_apple_provider_arg = args.at(2); + const auto* apple_provider_arg = + std::get_if(&encodable_apple_provider_arg); + const auto& encodable_debug_token_arg = args.at(3); + const auto* debug_token_arg = + std::get_if(&encodable_debug_token_arg); + api->Activate(app_name_arg, android_provider_arg, + apple_provider_arg, debug_token_arg, + [reply](std::optional&& output) { + if (output.has_value()) { + reply(WrapError(output.value())); + return; + } + EncodableList wrapped; + wrapped.push_back(EncodableValue()); + reply(EncodableValue(std::move(wrapped))); + }); + } catch (const std::exception& exception) { + reply(WrapError(exception.what())); + } + }); + } else { + channel.SetMessageHandler(nullptr); + } + } + { + BasicMessageChannel<> channel( + binary_messenger, + "dev.flutter.pigeon.firebase_app_check_platform_interface." + "FirebaseAppCheckHostApi.getToken" + + prepended_suffix, + &GetCodec()); + if (api != nullptr) { + channel.SetMessageHandler( + [api](const EncodableValue& message, + const ::flutter::MessageReply& reply) { + try { + const auto& args = std::get(message); + const auto& encodable_app_name_arg = args.at(0); + if (encodable_app_name_arg.IsNull()) { + reply(WrapError("app_name_arg unexpectedly null.")); + return; + } + const auto& app_name_arg = + std::get(encodable_app_name_arg); + const auto& encodable_force_refresh_arg = args.at(1); + if (encodable_force_refresh_arg.IsNull()) { + reply(WrapError("force_refresh_arg unexpectedly null.")); + return; + } + const auto& force_refresh_arg = + std::get(encodable_force_refresh_arg); + api->GetToken( + app_name_arg, force_refresh_arg, + [reply](ErrorOr>&& output) { + if (output.has_error()) { + reply(WrapError(output.error())); + return; + } + EncodableList wrapped; + auto output_optional = std::move(output).TakeValue(); + if (output_optional) { + wrapped.push_back( + EncodableValue(std::move(output_optional).value())); + } else { + wrapped.push_back(EncodableValue()); + } + reply(EncodableValue(std::move(wrapped))); + }); + } catch (const std::exception& exception) { + reply(WrapError(exception.what())); + } + }); + } else { + channel.SetMessageHandler(nullptr); + } + } + { + BasicMessageChannel<> channel( + binary_messenger, + "dev.flutter.pigeon.firebase_app_check_platform_interface." + "FirebaseAppCheckHostApi.setTokenAutoRefreshEnabled" + + prepended_suffix, + &GetCodec()); + if (api != nullptr) { + channel.SetMessageHandler( + [api](const EncodableValue& message, + const ::flutter::MessageReply& reply) { + try { + const auto& args = std::get(message); + const auto& encodable_app_name_arg = args.at(0); + if (encodable_app_name_arg.IsNull()) { + reply(WrapError("app_name_arg unexpectedly null.")); + return; + } + const auto& app_name_arg = + std::get(encodable_app_name_arg); + const auto& encodable_is_token_auto_refresh_enabled_arg = + args.at(1); + if (encodable_is_token_auto_refresh_enabled_arg.IsNull()) { + reply(WrapError( + "is_token_auto_refresh_enabled_arg unexpectedly null.")); + return; + } + const auto& is_token_auto_refresh_enabled_arg = + std::get(encodable_is_token_auto_refresh_enabled_arg); + api->SetTokenAutoRefreshEnabled( + app_name_arg, is_token_auto_refresh_enabled_arg, + [reply](std::optional&& output) { + if (output.has_value()) { + reply(WrapError(output.value())); + return; + } + EncodableList wrapped; + wrapped.push_back(EncodableValue()); + reply(EncodableValue(std::move(wrapped))); + }); + } catch (const std::exception& exception) { + reply(WrapError(exception.what())); + } + }); + } else { + channel.SetMessageHandler(nullptr); + } + } + { + BasicMessageChannel<> channel( + binary_messenger, + "dev.flutter.pigeon.firebase_app_check_platform_interface." + "FirebaseAppCheckHostApi.registerTokenListener" + + prepended_suffix, + &GetCodec()); + if (api != nullptr) { + channel.SetMessageHandler( + [api](const EncodableValue& message, + const ::flutter::MessageReply& reply) { + try { + const auto& args = std::get(message); + const auto& encodable_app_name_arg = args.at(0); + if (encodable_app_name_arg.IsNull()) { + reply(WrapError("app_name_arg unexpectedly null.")); + return; + } + const auto& app_name_arg = + std::get(encodable_app_name_arg); + api->RegisterTokenListener( + app_name_arg, [reply](ErrorOr&& output) { + if (output.has_error()) { + reply(WrapError(output.error())); + return; + } + EncodableList wrapped; + wrapped.push_back( + EncodableValue(std::move(output).TakeValue())); + reply(EncodableValue(std::move(wrapped))); + }); + } catch (const std::exception& exception) { + reply(WrapError(exception.what())); + } + }); + } else { + channel.SetMessageHandler(nullptr); + } + } + { + BasicMessageChannel<> channel( + binary_messenger, + "dev.flutter.pigeon.firebase_app_check_platform_interface." + "FirebaseAppCheckHostApi.getLimitedUseAppCheckToken" + + prepended_suffix, + &GetCodec()); + if (api != nullptr) { + channel.SetMessageHandler( + [api](const EncodableValue& message, + const ::flutter::MessageReply& reply) { + try { + const auto& args = std::get(message); + const auto& encodable_app_name_arg = args.at(0); + if (encodable_app_name_arg.IsNull()) { + reply(WrapError("app_name_arg unexpectedly null.")); + return; + } + const auto& app_name_arg = + std::get(encodable_app_name_arg); + api->GetLimitedUseAppCheckToken( + app_name_arg, [reply](ErrorOr&& output) { + if (output.has_error()) { + reply(WrapError(output.error())); + return; + } + EncodableList wrapped; + wrapped.push_back( + EncodableValue(std::move(output).TakeValue())); + reply(EncodableValue(std::move(wrapped))); + }); + } catch (const std::exception& exception) { + reply(WrapError(exception.what())); + } + }); + } else { + channel.SetMessageHandler(nullptr); + } + } +} + +EncodableValue FirebaseAppCheckHostApi::WrapError( + std::string_view error_message) { + return EncodableValue( + EncodableList{EncodableValue(std::string(error_message)), + EncodableValue("Error"), EncodableValue()}); +} + +EncodableValue FirebaseAppCheckHostApi::WrapError(const FlutterError& error) { + return EncodableValue(EncodableList{EncodableValue(error.code()), + EncodableValue(error.message()), + error.details()}); +} + +} // namespace firebase_app_check_windows diff --git a/mih_ui/android/build/ios/SourcePackages/firebase_app_check-0.4.5/windows/messages.g.h b/mih_ui/android/build/ios/SourcePackages/firebase_app_check-0.4.5/windows/messages.g.h new file mode 100644 index 00000000..50ae4829 --- /dev/null +++ b/mih_ui/android/build/ios/SourcePackages/firebase_app_check-0.4.5/windows/messages.g.h @@ -0,0 +1,119 @@ +// Copyright 2025, the Chromium project authors. Please see the AUTHORS file +// for details. All rights reserved. Use of this source code is governed by a +// BSD-style license that can be found in the LICENSE file. +// Autogenerated from Pigeon (v26.3.4), do not edit directly. +// See also: https://pub.dev/packages/pigeon + +#ifndef PIGEON_MESSAGES_G_H_ +#define PIGEON_MESSAGES_G_H_ +#include +#include +#include +#include + +#include +#include +#include + +namespace firebase_app_check_windows { + +// Generated class from Pigeon. + +class FlutterError { + public: + explicit FlutterError(const std::string& code) : code_(code) {} + explicit FlutterError(const std::string& code, const std::string& message) + : code_(code), message_(message) {} + explicit FlutterError(const std::string& code, const std::string& message, + const ::flutter::EncodableValue& details) + : code_(code), message_(message), details_(details) {} + + const std::string& code() const { return code_; } + const std::string& message() const { return message_; } + const ::flutter::EncodableValue& details() const { return details_; } + + private: + std::string code_; + std::string message_; + ::flutter::EncodableValue details_; +}; + +template +class ErrorOr { + public: + ErrorOr(const T& rhs) : v_(rhs) {} + ErrorOr(const T&& rhs) : v_(std::move(rhs)) {} + ErrorOr(const FlutterError& rhs) : v_(rhs) {} + ErrorOr(const FlutterError&& rhs) : v_(std::move(rhs)) {} + + bool has_error() const { return std::holds_alternative(v_); } + const T& value() const { return std::get(v_); }; + const FlutterError& error() const { return std::get(v_); }; + + private: + friend class FirebaseAppCheckHostApi; + ErrorOr() = default; + T TakeValue() && { return std::get(std::move(v_)); } + + std::variant v_; +}; + +class PigeonInternalCodecSerializer + : public ::flutter::StandardCodecSerializer { + public: + PigeonInternalCodecSerializer(); + inline static PigeonInternalCodecSerializer& GetInstance() { + static PigeonInternalCodecSerializer sInstance; + return sInstance; + } + + void WriteValue(const ::flutter::EncodableValue& value, + ::flutter::ByteStreamWriter* stream) const override; + + protected: + ::flutter::EncodableValue ReadValueOfType( + uint8_t type, ::flutter::ByteStreamReader* stream) const override; +}; + +// Generated interface from Pigeon that represents a handler of messages from +// Flutter. +class FirebaseAppCheckHostApi { + public: + FirebaseAppCheckHostApi(const FirebaseAppCheckHostApi&) = delete; + FirebaseAppCheckHostApi& operator=(const FirebaseAppCheckHostApi&) = delete; + virtual ~FirebaseAppCheckHostApi() {} + virtual void Activate( + const std::string& app_name, const std::string* android_provider, + const std::string* apple_provider, const std::string* debug_token, + std::function reply)> result) = 0; + virtual void GetToken( + const std::string& app_name, bool force_refresh, + std::function> reply)> + result) = 0; + virtual void SetTokenAutoRefreshEnabled( + const std::string& app_name, bool is_token_auto_refresh_enabled, + std::function reply)> result) = 0; + virtual void RegisterTokenListener( + const std::string& app_name, + std::function reply)> result) = 0; + virtual void GetLimitedUseAppCheckToken( + const std::string& app_name, + std::function reply)> result) = 0; + + // The codec used by FirebaseAppCheckHostApi. + static const ::flutter::StandardMessageCodec& GetCodec(); + // Sets up an instance of `FirebaseAppCheckHostApi` to handle messages through + // the `binary_messenger`. + static void SetUp(::flutter::BinaryMessenger* binary_messenger, + FirebaseAppCheckHostApi* api); + static void SetUp(::flutter::BinaryMessenger* binary_messenger, + FirebaseAppCheckHostApi* api, + const std::string& message_channel_suffix); + static ::flutter::EncodableValue WrapError(std::string_view error_message); + static ::flutter::EncodableValue WrapError(const FlutterError& error); + + protected: + FirebaseAppCheckHostApi() = default; +}; +} // namespace firebase_app_check_windows +#endif // PIGEON_MESSAGES_G_H_ diff --git a/mih_ui/android/build/ios/SourcePackages/firebase_app_check-0.4.5/windows/plugin_version.h.in b/mih_ui/android/build/ios/SourcePackages/firebase_app_check-0.4.5/windows/plugin_version.h.in new file mode 100644 index 00000000..0a52f845 --- /dev/null +++ b/mih_ui/android/build/ios/SourcePackages/firebase_app_check-0.4.5/windows/plugin_version.h.in @@ -0,0 +1,13 @@ +// Copyright 2025, the Chromium project authors. Please see the AUTHORS file +// for details. All rights reserved. Use of this source code is governed by a +// BSD-style license that can be found in the LICENSE file. + +#ifndef PLUGIN_VERSION_CONFIG_H +#define PLUGIN_VERSION_CONFIG_H + +namespace firebase_app_check_windows { + +std::string getPluginVersion() { return "@PLUGIN_VERSION@"; } +} // namespace firebase_app_check_windows + +#endif // PLUGIN_VERSION_CONFIG_H diff --git a/mih_ui/android/build/ios/SourcePackages/firebase_auth-6.5.4/CHANGELOG.md b/mih_ui/android/build/ios/SourcePackages/firebase_auth-6.5.4/CHANGELOG.md new file mode 100644 index 00000000..b712b5e1 --- /dev/null +++ b/mih_ui/android/build/ios/SourcePackages/firebase_auth-6.5.4/CHANGELOG.md @@ -0,0 +1,1613 @@ +## 6.5.4 + + - **FIX**: resolve FlutterSceneLifeCycleDelegate conformance guard ([#18385](https://github.com/firebase/flutterfire/issues/18385)). ([48d67196](https://github.com/firebase/flutterfire/commit/48d67196a10affe09724529df5f67cf40b62bccf)) + +## 6.5.3 + + - Update a dependency to the latest release. + +## 6.5.2 + + - **FIX**(auth,android): update token retrieval in PigeonParser to handle Number type correctly ([#18328](https://github.com/firebase/flutterfire/issues/18328)). ([3b77147b](https://github.com/firebase/flutterfire/commit/3b77147bc00bb19af5f4821436a1a4cdd8ff6791)) + - **DOCS**(auth): clarify behavior of password reset email with email enumeration protection enabled ([#18296](https://github.com/firebase/flutterfire/issues/18296)). ([0bcce87a](https://github.com/firebase/flutterfire/commit/0bcce87a17830797dae6ff3c1a8ba4ce210c2c0d)) + +## 6.5.1 + + - Update a dependency to the latest release. + +## 6.5.0 + + - **REFACTOR**: move all packages to workspace ([#18182](https://github.com/firebase/flutterfire/issues/18182)). ([6cdfcb10](https://github.com/firebase/flutterfire/commit/6cdfcb103da7be46ccb190d7e107d8c537aa1ff8)) + - **FIX**: update core, auth and app-check logic so internal resources on method channels are properly disposed ([#18268](https://github.com/firebase/flutterfire/issues/18268)). ([a0de4ed8](https://github.com/firebase/flutterfire/commit/a0de4ed86b0dff89bb9e557f2a54f38cd2546016)) + - **FIX**(auth,apple): remove incorrect paths in Package.swift files search paths ([#18239](https://github.com/firebase/flutterfire/issues/18239)). ([7c2fa5b8](https://github.com/firebase/flutterfire/commit/7c2fa5b83201f2f68e031476dc37ad41809215f2)) + - **FIX**(auth,iOS): update import path for autogenerated messages ([#18227](https://github.com/firebase/flutterfire/issues/18227)). ([4351179d](https://github.com/firebase/flutterfire/commit/4351179d357eeab6b23ec66f45d558c02d3fde69)) + - **FEAT**(core): Add Auth and AppCheck as App's registered service. ([#18237](https://github.com/firebase/flutterfire/issues/18237)). ([7ce191cb](https://github.com/firebase/flutterfire/commit/7ce191cbd598b299cd0ec64b45d1366914367a5d)) + - **FEAT**: upgrade pigeon to version 26.3.4 ([#18205](https://github.com/firebase/flutterfire/issues/18205)). ([cb6b4aef](https://github.com/firebase/flutterfire/commit/cb6b4aeffc568755ea3eebe32b998f00237bf5ad)) + - **FEAT**(auth,android): add revokeAccessToken support for Android ([#18206](https://github.com/firebase/flutterfire/issues/18206)) ([#18207](https://github.com/firebase/flutterfire/issues/18207)). ([7e0a2227](https://github.com/firebase/flutterfire/commit/7e0a222700178a57d064c27b4ef62cefdda1e253)) + +## 6.4.0 + + - **FIX**(auth,ios): serialize Sign in with Apple to prevent crash on overlapping requests ([#18172](https://github.com/firebase/flutterfire/issues/18172)). ([752cbcaa](https://github.com/firebase/flutterfire/commit/752cbcaa57f887a8fea3bda728bb8482290fa049)) + - **FEAT**: use local firebase_core instead of remote SPM dependency ([#18141](https://github.com/firebase/flutterfire/issues/18141)). ([995caf40](https://github.com/firebase/flutterfire/commit/995caf400df80c0fde7151c651ccc6c0f756e381)) + +## 6.3.0 + + - **FIX**(auth): fix inconsistence in casing in the native iOS SDK and Web SDK ([#18086](https://github.com/firebase/flutterfire/issues/18086)). ([60b5cd5c](https://github.com/firebase/flutterfire/commit/60b5cd5c7888fa932124958125e87bd39e1c323c)) + - **FIX**(auth,ios): fix crash that could happen when reloading currentUser informations ([#18065](https://github.com/firebase/flutterfire/issues/18065)). ([6e6f6546](https://github.com/firebase/flutterfire/commit/6e6f65468c07045e1c21b1d7970234b2dfc16b3d)) + - **FIX**(auth,windows): add pluginregistry to properly restore state on Windows ([#18049](https://github.com/firebase/flutterfire/issues/18049)). ([8d715a77](https://github.com/firebase/flutterfire/commit/8d715a777a4827bff59f820d9978007bd7568a7d)) + - **FEAT**(ios): migrate iOS to UIScene lifecycle ([#18054](https://github.com/firebase/flutterfire/issues/18054)). ([3ffa4110](https://github.com/firebase/flutterfire/commit/3ffa411098132fd5182a84be4e7a226106bc7451)) + - **DOCS**(auth): add documentation about errors code when Email Enumeration Protection is activated ([#18084](https://github.com/firebase/flutterfire/issues/18084)). ([476ba53f](https://github.com/firebase/flutterfire/commit/476ba53f016f20009fd571ad6ab359631f97094b)) + +## 6.2.0 + + - **FEAT**(remote-config,windows): add support for windows ([#18006](https://github.com/firebase/flutterfire/issues/18006)). ([a6ec167f](https://github.com/firebase/flutterfire/commit/a6ec167f4ece9c9b455a916366781f482cc380b3)) + +## 6.1.4 + + - Update a dependency to the latest release. + +## 6.1.3 + + - Update a dependency to the latest release. + +## 6.1.2 + + - Update a dependency to the latest release. + +## 6.1.1 + + - Update a dependency to the latest release. + +## 6.1.0 + + - **FEAT**(auth): TOTP macOS support ([#17513](https://github.com/firebase/flutterfire/issues/17513)). ([41890d62](https://github.com/firebase/flutterfire/commit/41890d62a49258df097c19fd3b90e0b5de181526)) + +## 6.0.2 + + - Update a dependency to the latest release. + +## 6.0.1 + + - **FIX**(auth,apple): Move FirebaseAuth imports to implementation files ([#17607](https://github.com/firebase/flutterfire/issues/17607)). ([0c3ccd37](https://github.com/firebase/flutterfire/commit/0c3ccd3722038a47e656b0a703a0395a78befc5b)) + +## 6.0.0 + +> Note: This release has breaking changes. + + - **FEAT**(auth): validatePassword method/PasswordPolicy Support ([#17439](https://github.com/firebase/flutterfire/issues/17439)). ([9a032b34](https://github.com/firebase/flutterfire/commit/9a032b344d6a22c1e3a181ae27e511939f2d8972)) + - **BREAKING** **FEAT**: bump iOS SDK to version 12.0.0 ([#17549](https://github.com/firebase/flutterfire/issues/17549)). ([b2619e68](https://github.com/firebase/flutterfire/commit/b2619e685fec897513483df1d7be347b64f95606)) + - **BREAKING** **FEAT**(auth): remove deprecated functions ([#17562](https://github.com/firebase/flutterfire/issues/17562)). ([d50aad95](https://github.com/firebase/flutterfire/commit/d50aad954443904d64d4ebd4442ebc63ed702986)) + - **BREAKING** **FEAT**: bump Android SDK to version 34.0.0 ([#17554](https://github.com/firebase/flutterfire/issues/17554)). ([a5bdc051](https://github.com/firebase/flutterfire/commit/a5bdc051d40ee44e39cf0b8d2a7801bc6f618b67)) + +## Removed Methods + +- `ActionCodeSettings.dynamicLinkDomain` - Firebase Dynamic Links is deprecated and will be shut down +- `MicrosoftAuthProvider.credential()` - Use `signInWithProvider(MicrosoftAuthProvider)` instead +- `FirebaseAuth.instanceFor()` persistence parameter - Use `setPersistence()` instead +- `FirebaseAuth.fetchSignInMethodsForEmail()` - Removed for security best practices +- `User.updateEmail()` - Use `verifyBeforeUpdateEmail()` instead + +## Migration Guide + +### ActionCodeSettings +```dart +// Before +ActionCodeSettings( + url: 'https://example.com', + dynamicLinkDomain: 'example.page.link', +) + +// After +ActionCodeSettings( + url: 'https://example.com', + linkDomain: 'your-custom-domain.com', // Use custom Firebase Hosting domain +) +``` + +### Microsoft Authentication +```dart +// Before +final credential = MicrosoftAuthProvider.credential(accessToken); +await FirebaseAuth.instance.signInWithCredential(credential); + +// After +final provider = MicrosoftAuthProvider(); +await FirebaseAuth.instance.signInWithProvider(provider); +``` + +### FirebaseAuth Instance +```dart +// Before +FirebaseAuth.instanceFor(app: app, persistence: Persistence.local); + +// After +final auth = FirebaseAuth.instanceFor(app: app); +auth.setPersistence(Persistence.local); +``` + +### Email Updates +```dart +// Before +await user.updateEmail('new@email.com'); + +// After +await user.verifyBeforeUpdateEmail('new@email.com'); +``` + +### Email Sign-in Methods +The `fetchSignInMethodsForEmail()` method has been removed for security reasons. Consider implementing alternative authentication flows that don't require email enumeration. + +## 5.7.0 + + - **FEAT**(auth,macos): add support for `publish` and `addApplicationDelegate` on macOS FlutterPluginRegistrar ([#17518](https://github.com/firebase/flutterfire/issues/17518)). ([376bb6ea](https://github.com/firebase/flutterfire/commit/376bb6ea8878df3f25cc1416fe26ace2203fd793)) + +## 5.6.2 + + - Update a dependency to the latest release. + +## 5.6.1 + + - Update a dependency to the latest release. + +## 5.6.0 + + - **FEAT**(auth): add support for initializeRecaptchaConfig ([#17365](https://github.com/firebase/flutterfire/issues/17365)). ([73f9028e](https://github.com/firebase/flutterfire/commit/73f9028e114874fddc8a4f76f22b247504a95a02)) + +## 5.5.4 + + - **FIX**(auth,apple): prevent EXC_BAD_ACCESS crash in Apple Sign-In completion handler ([#17273](https://github.com/firebase/flutterfire/issues/17273)). ([cc7d28ae](https://github.com/firebase/flutterfire/commit/cc7d28ae09036464f7ece6a2637bae6a3c7a292d)) + - **DOCS**(firebase_auth): Removed duplicates; fixed typos; removed "unnecessary use of a null check" ([#16815](https://github.com/firebase/flutterfire/issues/16815)). ([0eb17e13](https://github.com/firebase/flutterfire/commit/0eb17e13587ebfe5c8d64cbba9c0a2ccd0b7ce90)) + +## 5.5.3 + + - **FIX**(auth,iOS): include missing email and credential in account-exists-with-different-credential error ([#17180](https://github.com/firebase/flutterfire/issues/17180)). ([2a0bdc64](https://github.com/firebase/flutterfire/commit/2a0bdc64086e99f8a98bd18b472b36bcfe05a9a4)) + +## 5.5.2 + + - Update a dependency to the latest release. + +## 5.5.1 + + - Update a dependency to the latest release. + +## 5.5.0 + + - **FEAT**(auth): support for `linkDomain` in `ActionCodeSettings` ([#17099](https://github.com/firebase/flutterfire/issues/17099)). ([090cdb20](https://github.com/firebase/flutterfire/commit/090cdb2078dc66e58aa4b1a3ef9a48101467b6ac)) + +## 5.4.2 + + - Update a dependency to the latest release. + +## 5.4.1 + + - Update a dependency to the latest release. + +## 5.4.0 + + + - **FIX**: Remove dart:io imports for analytics, auth and app check ([#16827](https://github.com/firebase/flutterfire/issues/16827)). ([8c7f57c4](https://github.com/firebase/flutterfire/commit/8c7f57c4a181b8cae3b0d2ba564682ad7d68f484)) + - **FIX**(firebase_auth): Fix `std::variant` compiler errors with VS 2022 17.12 ([#16840](https://github.com/firebase/flutterfire/issues/16840)). ([b88b71f4](https://github.com/firebase/flutterfire/commit/b88b71f45c856eb0ff2d2caefb8b6aa367e91418)) + - **FEAT**(auth): Swift Package Manager support ([#16773](https://github.com/firebase/flutterfire/issues/16773)). ([69abbe19](https://github.com/firebase/flutterfire/commit/69abbe19bb37e6eb450b0b5123a74c2d68a761c7)) + +## 5.3.4 + + - **FIX**(auth,android): `signInWithProvider()` for non-default instances ([#13522](https://github.com/firebase/flutterfire/issues/13522)). ([fe016a44](https://github.com/firebase/flutterfire/commit/fe016a4487993c8aa444e15c9881fe355b5f6624)) + +## 5.3.3 + + - Update a dependency to the latest release. + +## 5.3.2 + + - **FIX**(auth,apple): set nullability on pigeon parser method ([#13571](https://github.com/firebase/flutterfire/issues/13571)). ([7e8a1b2e](https://github.com/firebase/flutterfire/commit/7e8a1b2e5be454b168d942056c4abb7f8e92a9a8)) + +## 5.3.1 + + - **FIX**(all,apple): use modular headers to import ([#13400](https://github.com/firebase/flutterfire/issues/13400)). ([d7d2d4b9](https://github.com/firebase/flutterfire/commit/d7d2d4b93e7c00226027fffde46699f3d5388a41)) + +## 5.3.0 + + - **FEAT**(fdc): Initial Release of Data Connect ([#13313](https://github.com/firebase/flutterfire/issues/13313)). ([603a6726](https://github.com/firebase/flutterfire/commit/603a67261a2f7cbdd6ef594bfaef480aeb820683)) + +## 5.2.1 + + - Update a dependency to the latest release. + +## 5.2.0 + + - **FEAT**: bump iOS SDK to version 11.0.0 ([#13158](https://github.com/firebase/flutterfire/issues/13158)). ([c0e0c997](https://github.com/firebase/flutterfire/commit/c0e0c99703ea394d1bb873ac225c5fe3539b002d)) + - **DOCS**: remove reference to flutter.io and firebase.flutter.dev ([#13152](https://github.com/firebase/flutterfire/issues/13152)). ([5f0874b9](https://github.com/firebase/flutterfire/commit/5f0874b91e28a203dd62d37d391e5760c91f5729)) + +## 5.1.4 + + - **FIX**(firebase_auth): added supporting rawNonce for OAuth credential on Windows platform ([#13086](https://github.com/firebase/flutterfire/issues/13086)). ([12e87de9](https://github.com/firebase/flutterfire/commit/12e87de93ddc39d41a6a634d7d03766b3e36996a)) + +## 5.1.3 + + - **DOCS**(auth): add information about error codes for email/password functions ([#13100](https://github.com/firebase/flutterfire/issues/13100)). ([aeafc356](https://github.com/firebase/flutterfire/commit/aeafc356953a0531003f765e766ffcff2387401d)) + +## 5.1.2 + + - **DOCS**(auth): add information about error codes for `verifyBeforeUpdateEmail` ([#13036](https://github.com/firebase/flutterfire/issues/13036)). ([8ef7421d](https://github.com/firebase/flutterfire/commit/8ef7421d6a524938087769537ac70ec249096ed4)) + +## 5.1.1 + + - **FIX**(auth,apple): bug with cached `AuthCredential`, hash key was producing different value ([#12957](https://github.com/firebase/flutterfire/issues/12957)). ([ef0077e3](https://github.com/firebase/flutterfire/commit/ef0077e37744360264eb60d6eea4359a5cc13227)) + - **FIX**(auth,windows): fix a crash that could happen when using `sendEmailVerification` or `sendPasswordResetEmail` ([#12946](https://github.com/firebase/flutterfire/issues/12946)). ([a1008290](https://github.com/firebase/flutterfire/commit/a100829087dbf83ea59e73c3811d87b67e2a4012)) + - **DOCS**: Update documentation for auth/user-not-found exception to reflect email enumeration protection ([#12964](https://github.com/firebase/flutterfire/issues/12964)). ([125f8209](https://github.com/firebase/flutterfire/commit/125f820971331ec75e7fe59cff3b296c42c7d8f3)) + +## 5.1.0 + + - **FIX**(auth,ios): fix the parsing of an error that could specifically happen when using MicrosoftProvider ([#12920](https://github.com/firebase/flutterfire/issues/12920)). ([3b415e64](https://github.com/firebase/flutterfire/commit/3b415e641e6107b131a170277bbc1fa0e2908e27)) + - **FEAT**(auth,apple): create a credential with `idToken`, `rawNonce` & `appleFullPersonName` ([#12356](https://github.com/firebase/flutterfire/issues/12356)). ([17793080](https://github.com/firebase/flutterfire/commit/177930802ca13a3af1610968e54b8ce79f0781ca)) + +## 5.0.0 + +> Note: This release has breaking changes. + + - **BREAKING** **REFACTOR**: android plugins require `minSdk 21`, auth requires `minSdk 23` ahead of android BOM `>=33.0.0` ([#12873](https://github.com/firebase/flutterfire/issues/12873)). ([52accfc6](https://github.com/firebase/flutterfire/commit/52accfc6c39d6360d9c0f36efe369ede990b7362)) + - **BREAKING** **REFACTOR**: bump all iOS deployment targets to iOS 13 ahead of Firebase iOS SDK `v11` breaking change ([#12872](https://github.com/firebase/flutterfire/issues/12872)). ([de0cea2c](https://github.com/firebase/flutterfire/commit/de0cea2c3c36694a76361be784255986fac84a43)) + - **BREAKING** **REFACTOR**(auth): remove deprecated API ahead of breaking change release ([#12859](https://github.com/firebase/flutterfire/issues/12859)). ([995fa7e1](https://github.com/firebase/flutterfire/commit/995fa7e19540fe52ba75a66865823c8ca86b6657)) + +## 4.20.0 + + - **FIX**(auth,android): remove unnecessary error type guarding ([#12816](https://github.com/firebase/flutterfire/issues/12816)). ([7d4c200a](https://github.com/firebase/flutterfire/commit/7d4c200ac6f06a50c2e7ee852aea2c9fa7bcb0ff)) + - **FEAT**(auth,windows): `verifyBeforeUpdateEmail()` API support ([#12825](https://github.com/firebase/flutterfire/issues/12825)). ([111b1ad9](https://github.com/firebase/flutterfire/commit/111b1ad91e985b0462532bc579e64342b7f46fe2)) + - **FEAT**(auth): update Pigeon version to 19 ([#12828](https://github.com/firebase/flutterfire/issues/12828)). ([5e76153f](https://github.com/firebase/flutterfire/commit/5e76153fbcd337a26e83abc2b43b651ab6c501bc)) + - **FEAT**: bump CPP SDK to version 11.10.0 ([#12749](https://github.com/firebase/flutterfire/issues/12749)). ([2e410a23](https://github.com/firebase/flutterfire/commit/2e410a232758292baa70f8e78464bd3c62ec0373)) + +## 4.19.6 + + - **FIX**(auth,android): allow nullable `accessToken` when creating `OAuthProvider` ([#12795](https://github.com/firebase/flutterfire/issues/12795)). ([490319d4](https://github.com/firebase/flutterfire/commit/490319d4c046917bdd227c19fd37185d63076b4a)) + +## 4.19.5 + + - **FIX**(auth,windows): allow `idToken` and `accessToken` to be nullable to stop windows crashing for `signInWithCredential()` ([#12688](https://github.com/firebase/flutterfire/issues/12688)). ([ca9f92d0](https://github.com/firebase/flutterfire/commit/ca9f92d05f717b46c80307987f560454b90a4d67)) + +## 4.19.4 + + - Update a dependency to the latest release. + +## 4.19.3 + + - **FIX**(auth,ios): Give more details on internal error when calling `sendSignInLinkToEmail`. ([#12671](https://github.com/firebase/flutterfire/issues/12671)). ([2b086029](https://github.com/firebase/flutterfire/commit/2b0860296bf577c99810643bb286b7219ee9291f)) + +## 4.19.2 + + - Update a dependency to the latest release. + +## 4.19.1 + + - Update a dependency to the latest release. + +## 4.19.0 + + - **FEAT**(android): Bump `compileSdk` version of Android plugins to latest stable (34) ([#12566](https://github.com/firebase/flutterfire/issues/12566)). ([e891fab2](https://github.com/firebase/flutterfire/commit/e891fab291e9beebc223000b133a6097e066a7fc)) + +## 4.18.0 + + - **FIX**(auth,android): fixing an issue that could cause `getEnrolledFactors` to return an empty list if signing out in the same app session ([#12488](https://github.com/firebase/flutterfire/issues/12488)). ([04280a31](https://github.com/firebase/flutterfire/commit/04280a31310dbbe51a8e619f031f5190d02e695d)) + - **FEAT**(firebase_auth): add custom auth domain setter to Firebase Auth ([#12218](https://github.com/firebase/flutterfire/issues/12218)). ([e1297800](https://github.com/firebase/flutterfire/commit/e12978009e0fd785f267db560972ab0bbe021fcb)) + - **FEAT**(auth,windows): add support for oAuth with credentials on Windows ([#12154](https://github.com/firebase/flutterfire/issues/12154)). ([cc708e6f](https://github.com/firebase/flutterfire/commit/cc708e6fdce6053772da0f08c9872e1dbe9899b1)) + +## 4.17.9 + + - Update a dependency to the latest release. + +## 4.17.8 + + - Update a dependency to the latest release. + +## 4.17.7 + + - Update a dependency to the latest release. + +## 4.17.6 + + - Update a dependency to the latest release. + +## 4.17.5 + + - Update a dependency to the latest release. + +## 4.17.4 + + - Update a dependency to the latest release. + +## 4.17.3 + + - Update a dependency to the latest release. + +## 4.17.2 + + - **FIX**(auth,web): fix null safety issue in typing JS Interop ([#12250](https://github.com/firebase/flutterfire/issues/12250)). ([d0d30405](https://github.com/firebase/flutterfire/commit/d0d30405a895ae221603ddd158b1cb1636312fb4)) + +## 4.17.1 + + - Update a dependency to the latest release. + +## 4.17.0 + + - **FIX**(auth): deprecate `updateEmail()` & `fetchSignInMethodsForEmail()` ([#12143](https://github.com/firebase/flutterfire/issues/12143)). ([dcfd9e80](https://github.com/firebase/flutterfire/commit/dcfd9e801c3231d17821355df5865b179cf0bf11)) + - **FEAT**(auth,apple): Game Center sign-in support ([#12228](https://github.com/firebase/flutterfire/issues/12228)). ([ac625ec7](https://github.com/firebase/flutterfire/commit/ac625ec7a2ceb8c7ef78180f3bcaa8294cf06a2e)) + - **FEAT**(auth,android): Play Games provider sign-in support ([#12201](https://github.com/firebase/flutterfire/issues/12201)). ([1fb9019d](https://github.com/firebase/flutterfire/commit/1fb9019de1fd832223aa56139d98c1194b2d5efa)) + - **FEAT**(auth,windows): add support for `creationTime` and `lastSignInTime` ([#12116](https://github.com/firebase/flutterfire/issues/12116)). ([387e9434](https://github.com/firebase/flutterfire/commit/387e94343a237d0976bdfa4f5c0e20c6922456fa)) + +## 4.16.0 + + - **FIX**(auth,windows): fix a parsing issue of the Pigeon message on Windows for sendPasswordResetEmail ([#12082](https://github.com/firebase/flutterfire/issues/12082)). ([17c4ab12](https://github.com/firebase/flutterfire/commit/17c4ab128650c8e7a4f7e3cea0c55d1fea0998fd)) + - **FEAT**: allow users to disable automatic host mapping ([#11962](https://github.com/firebase/flutterfire/issues/11962)). ([13c1ce33](https://github.com/firebase/flutterfire/commit/13c1ce333b8cd113241a1f7ac07181c1c76194bc)) + +## 4.15.3 + + - **FIX**(auth): return email address if one is returned by the auth exception ([#11978](https://github.com/firebase/flutterfire/issues/11978)). ([ceee304d](https://github.com/firebase/flutterfire/commit/ceee304dd87cd66e34a7f7fa67c9961b72c10e72)) + +## 4.15.2 + + - Update a dependency to the latest release. + +## 4.15.1 + + - Update a dependency to the latest release. + +## 4.15.0 + + - **FEAT**(auth): add support for custom domains on mobile ([#11925](https://github.com/firebase/flutterfire/issues/11925)). ([552119c7](https://github.com/firebase/flutterfire/commit/552119c78e2750a929c6226de22f9f6d8df948a4)) + +## 4.14.1 + + - **FIX**(auth,apple): need to cache `AuthCredential` on native in case Dart exception passes `AuthCredential` back to user for sign-in ([#11889](https://github.com/firebase/flutterfire/issues/11889)). ([9c09f224](https://github.com/firebase/flutterfire/commit/9c09f22416f549e3b80bc7e618b07c1c3c24ee31)) + - **FIX**(auth,web): use the device language when using `setLanguageCode` with null ([#11905](https://github.com/firebase/flutterfire/issues/11905)). ([f9322b6f](https://github.com/firebase/flutterfire/commit/f9322b6f25cd9520c5e033361e63a4db3f375a15)) + - **FIX**(auth): add proper error message when trying to access the multifactor object on an unsupported platform ([#11894](https://github.com/firebase/flutterfire/issues/11894)). ([27d1c47d](https://github.com/firebase/flutterfire/commit/27d1c47d1168198e9fa296fcff52feb1f0a345d2)) + +## 4.14.0 + + - **FEAT**(auth,windows): add Windows support for Google Sign In ([#11861](https://github.com/firebase/flutterfire/issues/11861)). ([cde57d05](https://github.com/firebase/flutterfire/commit/cde57d059e099913efc994db27141540a2a981d1)) + +## 4.13.0 + + - **FEAT**(firebase_auth): export `AuthProvider` from `firebase_auth_interface` ([#11470](https://github.com/firebase/flutterfire/issues/11470)). ([39881e7e](https://github.com/firebase/flutterfire/commit/39881e7e4671faa94b274d980aad81829e6e0bfc)) + - **FEAT**(windows): add platform logging for core, auth, firestore and storage ([#11790](https://github.com/firebase/flutterfire/issues/11790)). ([e7d428d1](https://github.com/firebase/flutterfire/commit/e7d428d14be1535a2d579d4b2d376fbb81f06742)) + +## 4.12.1 + + - Update a dependency to the latest release. + +## 4.12.0 + + - **FEAT**(storage,windows): Add windows support ([#11617](https://github.com/firebase/flutterfire/issues/11617)). ([87ea02c8](https://github.com/firebase/flutterfire/commit/87ea02c8ae03eb351636cf202961ad0df6caebd8)) + +## 4.11.1 + + - **FIX**(ios): fix clashing filenames between Auth and Firestore ([#11731](https://github.com/firebase/flutterfire/issues/11731)). ([8770cafc](https://github.com/firebase/flutterfire/commit/8770cafccccb11607b5530311e3150ac08cd172e)) + +## 4.11.0 + + - **FIX**(auth): ensure `PigeonAuthCredential` is passed back to Dart side within try/catch ([#11683](https://github.com/firebase/flutterfire/issues/11683)). ([d42c3396](https://github.com/firebase/flutterfire/commit/d42c33969b096a9825af21c624f8d93aebede8b2)) + - **FEAT**: Full support of AGP 8 ([#11699](https://github.com/firebase/flutterfire/issues/11699)). ([bdb5b270](https://github.com/firebase/flutterfire/commit/bdb5b27084d225809883bdaa6aa5954650551927)) + - **FEAT**(firestore,windows): add support to Windows ([#11516](https://github.com/firebase/flutterfire/issues/11516)). ([e51d2a2d](https://github.com/firebase/flutterfire/commit/e51d2a2d287f4162f5a67d8200f1bf57fc2afe14)) + +## 4.10.1 + + - Update a dependency to the latest release. + +## 4.10.0 + + - **FIX**(auth): deprecate `FirebaseAuth.instanceFor`'s `persistence` parameter ([#11259](https://github.com/firebase/flutterfire/issues/11259)). ([a1966e82](https://github.com/firebase/flutterfire/commit/a1966e82c15f13119cb28a262a57c67b4f2b8d3b)) + - **FIX**(auth,apple): `fetchSignInMethodsForEmail` if value is `nil`, pass empty array. ([#11596](https://github.com/firebase/flutterfire/issues/11596)). ([6d261cc9](https://github.com/firebase/flutterfire/commit/6d261cc9a147befbfd203004aff8565492567f58)) + - **FEAT**(core,windows): Change the windows plugin compiling way ([#11594](https://github.com/firebase/flutterfire/issues/11594)). ([3dab95e0](https://github.com/firebase/flutterfire/commit/3dab95e01f7f71680aff84db4e9dccfe1e77643b)) + - **FEAT**(auth,windows): add Windows support to auth plugin ([#11089](https://github.com/firebase/flutterfire/issues/11089)). ([0cedfc85](https://github.com/firebase/flutterfire/commit/0cedfc8580bedd9e21b262537e643dbace0d7114)) + - **DOCS**: firebase_auth description ([#11292](https://github.com/firebase/flutterfire/issues/11292)). ([d9e05713](https://github.com/firebase/flutterfire/commit/d9e057137dffca09ea293b5df7292d7b7b21ca99)) + - **DOCS**(auth): update the incorrect "getting started" link ([#11440](https://github.com/firebase/flutterfire/issues/11440)). ([5db956dc](https://github.com/firebase/flutterfire/commit/5db956dc935dfec5be28e0463f7e8499a20d5577)) + +## 4.9.0 + + - **FEAT**(auth): TOTP (time-based one-time password) support for multi-factor authentication ([#11420](https://github.com/firebase/flutterfire/issues/11420)). ([3cc1243c](https://github.com/firebase/flutterfire/commit/3cc1243c94368de44d3a5c4be96b905a0a37b963)) + +## 4.8.0 + + - **FEAT**(auth): `revokeTokenWithAuthorizationCode()` implementation for revoking Apple sign-in token ([#11454](https://github.com/firebase/flutterfire/issues/11454)). ([92de98c9](https://github.com/firebase/flutterfire/commit/92de98c9e62f2bf20712dbfed22dd39f6883eb58)) + +## 4.7.3 + + - **FIX**(auth): rename import header to "firebase_auth_messages.g.h". ([#11472](https://github.com/firebase/flutterfire/issues/11472)). ([693a6f3c](https://github.com/firebase/flutterfire/commit/693a6f3cba3620933b905a964126406ae6ae3374)) + - **FIX**(firebase_auth): Fix forceRefresh parameter conversion before calling native API ([#11464](https://github.com/firebase/flutterfire/issues/11464)). ([86639876](https://github.com/firebase/flutterfire/commit/86639876b8e9138af740a1c74c122fcdb5c4566d)) + - **FIX**(auth): set the tenant id on iOS `FIRAuth` instance ([#11427](https://github.com/firebase/flutterfire/issues/11427)). ([15f3cf5d](https://github.com/firebase/flutterfire/commit/15f3cf5d9b86f287fac22370ea09abf9e773ea60)) + - **FIX**(firebase_auth,android): Remove implicit default locale used in error message ([#11321](https://github.com/firebase/flutterfire/issues/11321)). ([3a20f41c](https://github.com/firebase/flutterfire/commit/3a20f41c0d8a4d61d789874d7bb16d6ef710c9d1)) + +## 4.7.2 + + - **FIX**(auth): fix MFA issue where the error wouldn't be properly caught ([#11370](https://github.com/firebase/flutterfire/issues/11370)). ([72fef03f](https://github.com/firebase/flutterfire/commit/72fef03f775702aaf9a2ce0c6b31aea2a3c200a9)) + - **FIX**(auth,android): `getIdToken()` `IllegalStateException` crash fix ([#11362](https://github.com/firebase/flutterfire/issues/11362)). ([e925b4c9](https://github.com/firebase/flutterfire/commit/e925b4c9a937d90de0bdfb59ffa005938b3862dd)) + - **FIX**(auth,apple): pass in Firebase auth instance for correct app when using Provider sign in ([#11284](https://github.com/firebase/flutterfire/issues/11284)). ([1cffae79](https://github.com/firebase/flutterfire/commit/1cffae79ded28808ba55f2f4c9c1b47817987999)) + +## 4.7.1 + + - **FIX**(auth,android): Fix crash on Android where detaching from engine ([#11296](https://github.com/firebase/flutterfire/issues/11296)). ([d0a37332](https://github.com/firebase/flutterfire/commit/d0a373323a818d5005a58e95042b7ea3652ead50)) + - **FIX**(auth,ios): fix scoping of import for message.g.h, could cause incompatibility with other packages ([#11300](https://github.com/firebase/flutterfire/issues/11300)). ([91ccc57d](https://github.com/firebase/flutterfire/commit/91ccc57d4b40b1b7a77dc0d871f9ff7d3f24ba13)) + +## 4.7.0 + + - **FEAT**(auth): move to Pigeon for Platform channels ([#10802](https://github.com/firebase/flutterfire/issues/10802)). ([43e5b20b](https://github.com/firebase/flutterfire/commit/43e5b20b14799102a6544a4763476eaba44b9cfb)) + +## 4.6.3 + + - Update a dependency to the latest release. + +## 4.6.2 + + - Update a dependency to the latest release. + +## 4.6.1 + + - Update a dependency to the latest release. + +## 4.6.0 + + - **FEAT**: update dependency constraints to `sdk: '>=2.18.0 <4.0.0'` `flutter: '>=3.3.0'` ([#10946](https://github.com/firebase/flutterfire/issues/10946)). ([2772d10f](https://github.com/firebase/flutterfire/commit/2772d10fe510dcc28ec2d37a26b266c935699fa6)) + - **FEAT**: update libraries to be compatible with Flutter 3.10.0 ([#10944](https://github.com/firebase/flutterfire/issues/10944)). ([e1f5a5ea](https://github.com/firebase/flutterfire/commit/e1f5a5ea798c54f19d1d2f7b8f2250f8819f44b7)) + +## 4.5.0 + + - **FIX**: add support for AGP 8.0 ([#10901](https://github.com/firebase/flutterfire/issues/10901)). ([a3b96735](https://github.com/firebase/flutterfire/commit/a3b967354294c295a9be8d699a6adb7f4b1dba7f)) + - **FEAT**: upgrade to dart 3 compatible dependencies ([#10890](https://github.com/firebase/flutterfire/issues/10890)). ([4bd7e59b](https://github.com/firebase/flutterfire/commit/4bd7e59b1f2b09a2230c49830159342dd4592041)) + +## 4.4.2 + + - Update a dependency to the latest release. + +## 4.4.1 + + - Update a dependency to the latest release. + +## 4.4.0 + + - **FEAT**(auth,ios): automatically save the Apple Sign In display name ([#10652](https://github.com/firebase/flutterfire/issues/10652)). ([257f1ffb](https://github.com/firebase/flutterfire/commit/257f1ffbce7abd458df91d8e4b6422d83b5b849f)) + - **FEAT**: bump dart sdk constraint to 2.18 ([#10618](https://github.com/firebase/flutterfire/issues/10618)). ([f80948a2](https://github.com/firebase/flutterfire/commit/f80948a28b62eead358bdb900d5a0dfb97cebb33)) + +## 4.3.0 + + - **FIX**(auth): fix an issue where unenroll would not throw a FirebaseException ([#10572](https://github.com/firebase/flutterfire/issues/10572)). ([8dba33e1](https://github.com/firebase/flutterfire/commit/8dba33e1a95f03d70d527885aa58ce23622e359f)) + - **FEAT**(auth): improve error handling when Email enumeration feature is on ([#10591](https://github.com/firebase/flutterfire/issues/10591)). ([ff083025](https://github.com/firebase/flutterfire/commit/ff083025b724d683cc3a9ed5f4a4987c43663589)) + +## 4.2.10 + + - **FIX**(auth,web): fix currentUser being null when using emulator or named instance ([#10565](https://github.com/firebase/flutterfire/issues/10565)). ([11e8644d](https://github.com/firebase/flutterfire/commit/11e8644df402a5abbb0d0c37714879272dec024c)) + +## 4.2.9 + + - Update a dependency to the latest release. + +## 4.2.8 + + - Update a dependency to the latest release. + +## 4.2.7 + + - Update a dependency to the latest release. + +## 4.2.6 + + - **REFACTOR**: upgrade project to remove warnings from Flutter 3.7 ([#10344](https://github.com/firebase/flutterfire/issues/10344)). ([e0087c84](https://github.com/firebase/flutterfire/commit/e0087c845c7526c11a4241a26d39d4673b0ad29d)) + +## 4.2.5 + + - **FIX**: fix a null pointer exception that could occur when removing an even listener ([#10210](https://github.com/firebase/flutterfire/issues/10210)). ([72d2e973](https://github.com/firebase/flutterfire/commit/72d2e97363d89d716963dd224a2b9578ba446624)) + +## 4.2.4 + + - Update a dependency to the latest release. + +## 4.2.3 + + - Update a dependency to the latest release. + +## 4.2.2 + + - Update a dependency to the latest release. + +## 4.2.1 + + - Update a dependency to the latest release. + +## 4.2.0 + + - **FEAT**: improve error message when user cancels a sign in with a provider ([#10060](https://github.com/firebase/flutterfire/issues/10060)). ([6631da6b](https://github.com/firebase/flutterfire/commit/6631da6b6b165a0c1e3260d744df1d60f3c7abe0)) + +## 4.1.5 + + - **FIX**: Apple Sign In on a secondary app doesnt sign in the correct Firebase Auth instance ([#10018](https://github.com/firebase/flutterfire/issues/10018)). ([f746d5da](https://github.com/firebase/flutterfire/commit/f746d5da0c784e28f08b9fcedfce18933a9e448e)) + +## 4.1.4 + + - **FIX**: tentative fix for null pointer exception in `parseUserInfoList` ([#9960](https://github.com/firebase/flutterfire/issues/9960)). ([dad17407](https://github.com/firebase/flutterfire/commit/dad1740792b893920867528039a9c54398ae7e3e)) + +## 4.1.3 + + - **FIX**: fix reauthenticateWithProvider on iOS with Sign In With Apple that would throw a linked exception ([#9919](https://github.com/firebase/flutterfire/issues/9919)). ([7318a8f3](https://github.com/firebase/flutterfire/commit/7318a8f32de07bd47026d3e07b80b4bab5df1e6a)) + +## 4.1.2 + + - Update a dependency to the latest release. + +## 4.1.1 + + - Update a dependency to the latest release. + +## 4.1.0 + + - **REFACTOR**: add `verify` to `QueryPlatform` and change internal `verifyToken` API to `verify` ([#9711](https://github.com/firebase/flutterfire/issues/9711)). ([c99a842f](https://github.com/firebase/flutterfire/commit/c99a842f3e3f5f10246e73f51530cc58c42b49a3)) + - **FIX**: properly propagate the `FirebaseAuthMultiFactorException` for all reauthenticate and link methods ([#9700](https://github.com/firebase/flutterfire/issues/9700)). ([9ad97c82](https://github.com/firebase/flutterfire/commit/9ad97c82ead0f5c6f1307625374c34e0dcde730b)) + - **FEAT**: expose reauthenticateWithRedirect and reauthenticateWithPopup ([#9696](https://github.com/firebase/flutterfire/issues/9696)). ([2a1f910f](https://github.com/firebase/flutterfire/commit/2a1f910ff6cab21a126c62fd4322a14ec263b629)) + +## 4.0.2 + + - Update a dependency to the latest release. + +## 4.0.1 + +- Update a dependency to the latest release. + +## 4.0.0 + +> Note: This release has breaking changes. + + - **BREAKING** **FEAT**: Firebase iOS SDK version: `10.0.0` ([#9708](https://github.com/firebase/flutterfire/issues/9708)). ([9627c56a](https://github.com/firebase/flutterfire/commit/9627c56a37d657d0250b6f6b87d0fec1c31d4ba3)) + +## 3.11.2 + + - **DOCS**: update `setSettings()` inline documentation ([#9655](https://github.com/firebase/flutterfire/issues/9655)). ([39ca0029](https://github.com/firebase/flutterfire/commit/39ca00299ec5c6e0f2dc9b0b5a8d71b8d59d51d4)) + +## 3.11.1 + + - **FIX**: fix an iOS crash when using Sign In With Apple due to invalid return of nil instead of NSNull ([#9644](https://github.com/firebase/flutterfire/issues/9644)). ([3f76b53f](https://github.com/firebase/flutterfire/commit/3f76b53f375f4398652abfa7c9236571ee0bd87f)) + +## 3.11.0 + + - **FEAT**: add OAuth Access Token support to sign in with providers ([#9593](https://github.com/firebase/flutterfire/issues/9593)). ([cb6661bb](https://github.com/firebase/flutterfire/commit/cb6661bbc701031d6f920ace3a6efc8e8d56aa4c)) + - **FEAT**: add `linkWithRedirect` to the web ([#9580](https://github.com/firebase/flutterfire/issues/9580)). ([d834b90f](https://github.com/firebase/flutterfire/commit/d834b90f29fc1929a195d7d546170e4ea03c6ab1)) + +## 3.10.0 + + - **FIX**: fix path of generated Pigeon files to prevent name collision ([#9569](https://github.com/firebase/flutterfire/issues/9569)). ([71bde27d](https://github.com/firebase/flutterfire/commit/71bde27d4e613096f121abb16d7ea8483c3fbcd8)) + - **FEAT**: add `reauthenticateWithProvider` ([#9570](https://github.com/firebase/flutterfire/issues/9570)). ([dad6b481](https://github.com/firebase/flutterfire/commit/dad6b4813c682e35315dda3965ea8aaf5ba030e8)) + +## 3.9.0 + + - **REFACTOR**: deprecate `signInWithAuthProvider` in favor of `signInWithProvider` ([#9542](https://github.com/firebase/flutterfire/issues/9542)). ([ca340ea1](https://github.com/firebase/flutterfire/commit/ca340ea19c8dbb340f083e48cf1b0de36f7d64c4)) + - **FEAT**: add `linkWithProvider` to support for linking auth providers ([#9535](https://github.com/firebase/flutterfire/issues/9535)). ([1ac14fb1](https://github.com/firebase/flutterfire/commit/1ac14fb147f83cf5c7874004a9dc61838dce8da8)) + +## 3.8.0 + + - **FIX**: remove default scopes on iOS for Sign in With Apple ([#9477](https://github.com/firebase/flutterfire/issues/9477)). ([3fe02b29](https://github.com/firebase/flutterfire/commit/3fe02b2937135ea6d576c7e445da5f4266ff0fdf)) + - **FEAT**: add Twitter login for Android, iOS and Web ([#9421](https://github.com/firebase/flutterfire/issues/9421)). ([0bc6e6d5](https://github.com/firebase/flutterfire/commit/0bc6e6d5333e6be0d5749a083206f3f5bb79a7ba)) + - **FEAT**: add Yahoo as provider for iOS, Android and Web ([#9443](https://github.com/firebase/flutterfire/issues/9443)). ([6c3108a7](https://github.com/firebase/flutterfire/commit/6c3108a767aca3b1a844b2b5da04b2da45bc9fbd)) + - **DOCS**: fix typo "appearance" in `platform_interface_firebase_auth.dart` ([#9472](https://github.com/firebase/flutterfire/issues/9472)). ([323b917b](https://github.com/firebase/flutterfire/commit/323b917b5eecf0e5161a61c66f6cabac5b23e1b8)) + +## 3.7.0 + + - **FEAT**: add Microsoft login for Android, iOS and Web ([#9415](https://github.com/firebase/flutterfire/issues/9415)). ([1610ce8a](https://github.com/firebase/flutterfire/commit/1610ce8ac96d6da202ef014e9a3dfeb4acfacec9)) + - **FEAT**: add Sign in with Apple directly in Firebase Auth for Android, iOS 13+ and Web ([#9408](https://github.com/firebase/flutterfire/issues/9408)). ([da36b986](https://github.com/firebase/flutterfire/commit/da36b9861b7d635382705b4893eed85fd672125c)) + +## 3.6.4 + + - **FIX**: fix an error where MultifactorInfo factorId could be null on iOS ([#9367](https://github.com/firebase/flutterfire/issues/9367)). ([88bded11](https://github.com/firebase/flutterfire/commit/88bded119607473c7546154ac8bdd149a2d3f21f)) + +## 3.6.3 + + - **FIX**: use correct UTC time from server for `currentUser?.metadata.creationTime` & `currentUser?.metadata.lastSignInTime` ([#9248](https://github.com/firebase/flutterfire/issues/9248)). ([a6204128](https://github.com/firebase/flutterfire/commit/a6204128edf1f54ac734385d0ed6214d50cebd1b)) + - **DOCS**: explicit mention that `refreshToken` is empty string on native platforms on the `User`instance ([#9183](https://github.com/firebase/flutterfire/issues/9183)). ([1aa1c163](https://github.com/firebase/flutterfire/commit/1aa1c1638edc632dedf8de0f02127e26b1a86e17)) + +## 3.6.2 + + - **DOCS**: update `getIdTokenResult` inline documentation ([#9150](https://github.com/firebase/flutterfire/issues/9150)). ([519518ce](https://github.com/firebase/flutterfire/commit/519518ce3ed36580e35713e791281b251018201c)) + +## 3.6.1 + + - Update a dependency to the latest release. + +## 3.6.0 + + - **FIX**: pass `Persistence` value to `FirebaseAuth.instanceFor(app: app, persistence: persistence)` for setting persistence on Web platform ([#9138](https://github.com/firebase/flutterfire/issues/9138)). ([ae7ebaf8](https://github.com/firebase/flutterfire/commit/ae7ebaf8e304a2676b2acfa68aadf0538468b4a0)) + - **FIX**: fix crash on Android where detaching from engine was not properly resetting the Pigeon handler ([#9218](https://github.com/firebase/flutterfire/issues/9218)). ([96d35df0](https://github.com/firebase/flutterfire/commit/96d35df09914fbe40515fdcd20b17a802f37270d)) + - **FEAT**: expose the missing MultiFactor classes through the universal package ([#9194](https://github.com/firebase/flutterfire/issues/9194)). ([d8bf8185](https://github.com/firebase/flutterfire/commit/d8bf818528c3705350cdb1b4675d600ba1d29d14)) + +## 3.5.1 + + - Update a dependency to the latest release. + +## 3.5.0 + + - **FEAT**: add all providers available to MFA ([#9159](https://github.com/firebase/flutterfire/issues/9159)). ([5a03a859](https://github.com/firebase/flutterfire/commit/5a03a859385f0b06ad9afe8e8c706c046976b8d8)) + - **FEAT**: add phone MFA ([#9044](https://github.com/firebase/flutterfire/issues/9044)). ([1b85c8b7](https://github.com/firebase/flutterfire/commit/1b85c8b7fbcc3f21767f23981cb35061772d483f)) + +## 3.4.2 + + - Update a dependency to the latest release. + +## 3.4.1 + + - **FIX**: bump `firebase_core_platform_interface` version to fix previous release. ([bea70ea5](https://github.com/firebase/flutterfire/commit/bea70ea5cbbb62cbfd2a7a74ae3a07cb12b3ee5a)) + +## 3.4.0 + + - **FIX**: Web recaptcha hover removed after use. (#8812). ([790e450e](https://github.com/firebase/flutterfire/commit/790e450e8d6acd2fc50e0232c77a152430c7b3ea)) + - **FIX**: java.util.ConcurrentModificationException (#8967). ([dc6c04ae](https://github.com/firebase/flutterfire/commit/dc6c04aeb4fc535a8ccadf9c11fb4d5dc413606d)) + - **FEAT**: update GitHub sign in implementation (#8976). ([ffd3b019](https://github.com/firebase/flutterfire/commit/ffd3b019c3158c66476671d9a9df245035cc2295)) + +## 3.3.20 + + - **REFACTOR**: use `firebase.google.com` link for `homepage` in `pubspec.yaml` (#8729). ([43df32d4](https://github.com/firebase/flutterfire/commit/43df32d457a28523f5956a2252dafd47856ac756)) + - **REFACTOR**: use "firebase" instead of "FirebaseExtended" as organisation in all links for this repository (#8791). ([d90b8357](https://github.com/firebase/flutterfire/commit/d90b8357db01d65e753021358668f0b129713e6b)) + - **FIX**: update firebase_auth example to not be dependent on an emulator (#8601). ([bdc9772e](https://github.com/firebase/flutterfire/commit/bdc9772ec8a3fb6609b66c42166d6d132ddb67d9)) + - **DOCS**: fix two typos. (#8876). ([7390d5c5](https://github.com/firebase/flutterfire/commit/7390d5c51e61aeb4d59c0d74093921fad3f35083)) + - **DOCS**: point to "firebase.google" domain for hyperlinks in the usage section of `README.md` files (#8814). ([78006e0d](https://github.com/firebase/flutterfire/commit/78006e0d5b9dce8038ce3606a43ddcbc8a4a71b9)) + +## 3.3.19 + + - **DOCS**: use camel case style for "FlutterFire" in `README.md` (#8748). ([c6ff0b21](https://github.com/firebase/flutterfire/commit/c6ff0b21352eb0f9a9a576ca7ef737d203292a58)) + +## 3.3.18 + + - Update a dependency to the latest release. + +## 3.3.17 + + - Update a dependency to the latest release. + +## 3.3.16 + + - **REFACTOR**: remove deprecated `Tasks.call()` API from Android. (#8452). ([3e92496b](https://github.com/firebase/flutterfire/commit/3e92496b2783ec149258c22d3167c5388dcb1c40)) + +## 3.3.15 + + - **FIX**: Use iterator instead of enhanced for loop on android. (#8498). ([027c75a6](https://github.com/firebase/flutterfire/commit/027c75a60b39a40e6a3edc12edc51487cc954503)) + +## 3.3.14 + + - Update a dependency to the latest release. + +## 3.3.13 + + - Update a dependency to the latest release. + +## 3.3.12 + + - Update a dependency to the latest release. + +## 3.3.11 + + - **FIX**: Update APN token once auth plugin has been initialized on `iOS`. (#8201). ([ab6239dd](https://github.com/firebase/flutterfire/commit/ab6239ddf5cb14211b76bced04ec52203919a57a)) + +## 3.3.10 + + - **FIX**: return correct error code for linkWithCredential `provider-already-linked` on Android (#8245). ([ae090719](https://github.com/firebase/flutterfire/commit/ae090719ebbb0873cf227f76004feeae9a7d0580)) + - **FIX**: Fixed bug that sets email to `nil` on `iOS` when the `User` has no provider. (#8209). ([fb646438](https://github.com/firebase/flutterfire/commit/fb646438f219b0f0f7c6a8c52e2b9daa4afc833e)) + +## 3.3.9 + + - **FIX**: update all Dart SDK version constraints to Dart >= 2.16.0 (#8184). ([df4a5bab](https://github.com/firebase/flutterfire/commit/df4a5bab3c029399b4f257a5dd658d302efe3908)) + +## 3.3.8 + + - Update a dependency to the latest release. + +## 3.3.7 + + - **DOCS**: Update documentation for `currentUser` property to make expectations clearer. (#7843). ([59bb47c2](https://github.com/firebase/flutterfire/commit/59bb47c2490fbd641a1fcc26f2f888e8f4f02671)) + +## 3.3.6 + + - Update a dependency to the latest release. + +## 3.3.5 + + - **FIX**: bump Android `compileSdkVersion` to 31 (#7726). ([a9562bac](https://github.com/firebase/flutterfire/commit/a9562bac60ba927fb3664a47a7f7eaceb277dca6)) + +## 3.3.4 + + - **REFACTOR**: fix all `unnecessary_import` analyzer issues introduced with Flutter 2.8. ([7f0e82c9](https://github.com/firebase/flutterfire/commit/7f0e82c978a3f5a707dd95c7e9136a3e106ff75e)) + +## 3.3.3 + + - Update a dependency to the latest release. + +## 3.3.2 + + - **DOCS**: Fix typos and remove unused imports (#7504). + +## 3.3.1 + + - Update a dependency to the latest release. + +## 3.3.0 + + - **REFACTOR**: migrate remaining examples & e2e tests to null-safety (#7393). + - **FEAT**: automatically inject Firebase JS SDKs (#7359). + +## 3.2.0 + + - **FEAT**: support initializing default `FirebaseApp` instances from Dart (#6549). + +## 3.1.5 + + - Update a dependency to the latest release. + +## 3.1.4 + + - **REFACTOR**: remove deprecated Flutter Android v1 Embedding usages, including in example app (#7158). + - **STYLE**: macOS & iOS; explicitly include header that defines `TARGET_OS_OSX` (#7116). + +## 3.1.3 + + - **REFACTOR**: migrate example app to null-safety (#7111). + +## 3.1.2 + + - **FIX**: allow setLanguage to accept null (#7050). + - **CHORE**: remove google-signin plugin temporarily to fix CI (#7047). + +## 3.1.1 + + - **FIX**: use Locale.ROOT while processing error code (#6946). + +## 3.1.0 + + - **FEAT**: expose linkWithPopup() & correctly parse credentials in exceptions (#6562). + +## 3.0.2 + + - **STYLE**: enable additional lint rules (#6832). + - **FIX**: precise error message is propagated (#6793). + - **FIX**: Use angle bracket import consistently when importing Firebase.h for iOS (#5891). + - **FIX**: stop idTokenChanges & userChanges firing twice on initial listen (#6560). + +## 3.0.1 + + - **FIX**: reinstate deprecated emulator apis (#6626). + +## 3.0.0 + +> Note: This release has breaking changes. + + - **FEAT**: setSettings now possible for android (#6367). + - **DOCS**: phone provider account linking update (#6465). + - **CHORE**: update v2 embedding support (#6506). + - **CHORE**: verifyPhoneNumber() example (#6476). + - **CHORE**: rm deprecated jcenter repository (#6431). + - **BREAKING** **FEAT**: useEmulator(host, port) API update (#6439). + +## 2.0.0 + +> Note: This release has breaking changes. + + - **FEAT**: setSettings now possible for android (#6367). + - **DOCS**: phone provider account linking update (#6465). + - **CHORE**: verifyPhoneNumber() example (#6476). + - **CHORE**: rm deprecated jcenter repository (#6431). + - **BREAKING** **FEAT**: useAuthEmulator(host, port) API update. + +## 1.4.1 + + - Update a dependency to the latest release. + +## 1.4.0 + + - **FEAT**: add tenantId support (#5736). + +## 1.3.0 + + - **FEAT**: add User.updateDisplayName and User.updatePhotoURL (#6213). + - **DOCS**: Add Flutter Favorite badge (#6190). + +## 1.2.0 + + - **FEAT**: upgrade Firebase JS SDK version to 8.6.1. + - **FIX**: podspec osx version checking script should use a version range instead of a single fixed version. + +## 1.1.4 + + - **FIX**: correctly cleanup Dictionary handlers (#6101). + - **DOCS**: Update the documentation of sendPasswordResetEmail (#6051). + - **CHORE**: publish packages (#6022). + - **CHORE**: publish packages. + +## 1.1.3 + + - **FIX**: Fix firebase_auth not being registered as a plugin (#5987). + - **CI**: refactor to use Firebase Auth emulator (#5939). + +## 1.1.2 + + - **FIX**: fixed an issue where Web could not connect to the Firebase Auth emulator (#5940). + - **FIX**: Import all necessary headers from the header file. (#5890). + - **FIX**: Move communication to EventChannels (#4643). + - **DOCS**: remove implicit-cast in the doc of AuthProviders (#5862). + +## 1.1.1 + + - **FIX**: ensure web is initialized before sending stream events (#5766). + - **DOCS**: Add UserInfoCard widget in auth example SignInPage (#4635). + - **CI**: fix analyzer issues in example. + - **CHORE**: update Web plugins to use Firebase JS SDK version 8.4.1 (#4464). + +## 1.1.0 + + - **FEAT**: PhoneAuthProvider.credential and PhoneAuthProvider.credentialFromToken now return a PhoneAuthCredential (#5675). + - **CHORE**: update drive dependency (#5740). + +## 1.0.3 + + - **DOCS**: userChanges clarification (#5698). + +## 1.0.2 + + - Update a dependency to the latest release. + +## 1.0.1 + + - **DOCS**: note that auth emulator is not supported for web (#5169). + +## 1.0.0 + + - Graduate package to a stable release. See pre-releases prior to this version for changelog entries. + +## 1.0.0-1.0.nullsafety.0 + + - Bump "firebase_auth" to `1.0.0-1.0.nullsafety.0`. + +## 0.21.0-1.1.nullsafety.3 + + - Update a dependency to the latest release. + +## 0.21.0-1.1.nullsafety.2 + + - **TESTS**: update mockito API usage in tests + +## 0.21.0-1.1.nullsafety.1 + + - **REFACTOR**: pubspec & dependency updates (#4932). + +## 0.21.0-1.1.nullsafety.0 + + - **FEAT**: implement support for `useEmulator` (#4263). + +## 0.21.0-1.0.nullsafety.0 + + - **FIX**: bump firebase_core_* package versions to updated NNBD versioning format (#4832). + +## 0.21.0-nullsafety.0 + + - **FEAT**: Migrated to null safety (#4633) + +## 0.20.0+1 + + - **FIX**: package compatibility. + +## 0.20.0 + +> Note: This release has breaking changes. + + - **FIX**: null pointer exception if user metadata null (#4622). + - **FEAT**: add check on podspec to assist upgrading users deployment target. + - **BUILD**: commit Podfiles with 10.12 deployment target. + - **BUILD**: remove default sdk version, version should always come from firebase_core, or be user defined. + - **BUILD**: set macOS deployment target to 10.12 (from 10.11). + - **BREAKING** **BUILD**: set osx min supported platform version to 10.12. + +## 0.19.0+1 + + - Update a dependency to the latest release. + +## 0.19.0 + +> Note: This release has breaking changes. + + - **CHORE**: harmonize dependencies and version handling. + - **BREAKING** **REFACTOR**: remove all currently deprecated APIs. + - **BREAKING** **FEAT**: forward port to firebase-ios-sdk v7.3.0. + - Due to this SDK upgrade, iOS 10 is now the minimum supported version by FlutterFire. Please update your build target version. + +## 0.18.4+1 + + - Update a dependency to the latest release. + +## 0.18.4 + + - **FEAT**: bump android `com.android.tools.build` & `'com.google.gms:google-services` versions (#4269). + - **DOCS**: Fixed two typos in method documentation (#4219). + +## 0.18.3+1 + + - **TEST**: Explicitly opt-out from null safety. + - **FIX**: stop authStateChange firing twice for initial event (#4099). + - **FIX**: updated email link signin to use latest format for ActionCodeSettings (#3425). + - **CHORE**: add missing dependency to example app. + - **CHORE**: bump gradle wrapper to 5.6.4 (#4158). + +## 0.18.3 + + - **FEAT**: migrate firebase interop files to local repository (#3973). + - **FEAT**: bump `compileSdkVersion` to 29 in preparation for upcoming Play Store requirement. + - **FEAT** [WEB] adds support for `EmailAuthProvider.credentialWithLink` + - **FEAT** [WEB] adds support for `FirebaseAuth.setSettings` + - **FEAT** [WEB] adds support for `User.tenantId` + - **FEAT** [WEB] `FirebaseAuthException` now supports `email` & `credential` properties + - **FEAT** [WEB] `ActionCodeInfo` now supports `previousEmail` field + +## 0.18.2 + + - **FEAT**: bump compileSdkVersion to 29 (#3975). + - **FEAT**: update Firebase iOS SDK version to 6.33.0 (from 6.26.0). + +## 0.18.1+2 + + - **FIX**: on iOS use sendEmailVerificationWithActionCodeSettings instead of sendEmailVerificationWithCompletion (#3686). + - **DOCS**: README updates (#3768). + +## 0.18.1+1 + + - **FIX**: Optional params for "signInWithCredential" method are converted to "nil" if "null" for iOS (#3731). + +## 0.18.1 + + - **FIX**: local dependencies in example apps (#3319). + - **FIX**: fix IdTokenResult timestamps (web, ios) (#3357). + - **FIX**: pub.dev score fixes (#3318). + - **FIX**: use unknown APNS token type (#3345). + - **FIX**: update FLTFirebaseAuthPlugin.m (#3360). + - **FIX**: use correct FIRAuth instance on listeners (#3316). + - **FEAT**: add support for linkWithPhoneNumber (#3436). + - **FEAT**: use named arguments for ActionCodeSettings (#3269). + - **FEAT**: implement signInWithPhoneNumber on web (#3205). + - **FEAT**: expose smsCode (android only) (#3308). + - **DOCS**: fixed signOut method documentation (#3342). + +## 0.18.0+1 + +* Fixed an Android issue where certain network related Firebase Auth error codes would come through as `unknown`. [(#3217)](https://github.com/firebase/flutterfire/pull/3217) +* Added missing deprecations: `FirebaseUser` class and `photoUrl` getter. +* Bump `firebase_auth_platform_interface` dependency to fix an assertion issue when creating Google sign-in credentials. +* Bump `firebase_auth_web` dependency to `^0.3.0+1`. + +## 0.18.0 + +Overall, Firebase Auth has been heavily reworked to bring it inline with the federated plugin setup along with adding new features, documentation and many more unit and end-to-end tests. The API has mainly been kept the same, however there are some breaking changes. + +### General + +- **BREAKING**: The `FirebaseUser` class has been renamed to `User`. +- **BREAKING**: The `AuthResult` class has been renamed to `UserCredential`. +- **NEW**: The `ActionCodeSettings` class is now consumable on all supporting methods. + - **NEW**: Added support for the `dynamicLinkDomain` property. +- **NEW**: Added a new `FirebaseAuthException` class (extends `FirebaseException`). + - All errors are now returned as a `FirebaseAuthException`, allowing you to access the code & message associated with the error. + - In addition, it is now possible to access the `email` and `credential` properties on exceptions if they exist. + +### `FirebaseAuth` + +- **BREAKING**: Accessing the current user via `currentUser()` is now synchronous via the `currentUser` getter. +- **BREAKING**: `isSignInWithEmailLink()` is now synchronous. +- **DEPRECATED**: `FirebaseAuth.fromApp()` is now deprecated in favor of `FirebaseAuth.instanceFor()`. +- **DEPRECATED**: `onAuthStateChanged` has been deprecated in favor of `authStateChanges()`. +- **NEW**: Added support for `idTokenChanges()` stream listener. +- **NEW**: Added support for `userChanges()` stream listener. + - The purpose of this API is to allow users to subscribe to all user events without having to manually hydrate app state in cases where a manual reload was required (e.g. `updateProfile()`). +- **NEW**: Added support for `applyActionCode()`. +- **NEW**: Added support for `checkActionCode()`. +- **NEW**: Added support for `verifyPasswordResetCode()`. +- **NEW**: Added support for accessing the current language code via the `languageCode` getter. +- **NEW**: `setLanguageCode()` now supports providing a `null` value. + - On web platforms, if `null` is provided the Firebase projects default language will be set. + - On native platforms, if `null` is provided the device language will be used. +- **NEW**: `verifyPhoneNumber()` exposes a `autoRetrievedSmsCodeForTesting` property. + - This allows developers to test automatic SMS code resolution on Android devices during development. +- **NEW** (iOS): `appVerificationDisabledForTesting` setting can now be set for iOS. + - This allows developers to skip ReCaptcha verification when testing phone authentication. +- **NEW** (iOS): `userAccessGroup` setting can now be set for iOS & MacOS. + - This allows developers to share authentication states across multiple apps or extensions on iOS & MacOS. For more information see the [Firebase iOS SDK documentation](https://firebase.google.com/docs/auth/ios/single-sign-on). + +### `User` + +- **BREAKING**: Removed the `UpdateUserInfo` class when using `updateProfile` in favor of named arguments. +- **NEW**: Added support for `getIdTokenResult()`. +- **NEW**: Added support for `verifyBeforeUpdateEmail()`. +- **FIX**: Fixed several iOS crashes when the Firebase SDK returned `nil` property values. +- **FIX**: Fixed an issue on Web & iOS where a users email address would still show after unlinking the email/password provider. + +### `UserCredential` + +- **NEW**: Added support for accessing the users `AuthCredential` via the `credential` property. + +### `AuthProvider` & `AuthCredential` + +- **DEPRECATED**: All sub-class (e.g. `GoogleAuthProvider`) `getCredential()` methods have been deprecated in favor of `credential()`. + - **DEPRECATED**: `EmailAuthProvider.getCredentialWithLink()` has been deprecated in favor of `EmailAuthProvider.credentialWithLink()`. +- **NEW**: Supporting providers can now assign scope and custom request parameters. + - The scope and parameters will be used on web platforms when triggering a redirect or popup via `signInWithPopup()` or `signInWithRedirect()`. + +## 0.17.0-dev.2 + +* Update plugin and example to use the same core. + +## 0.17.0-dev.1 + +* Depend on `firebase_core` pre-release versions. + +## 0.16.1+2 + +* Update README to make it clear which authentication options are possible. + +## 0.16.1+1 + +* Fix bug #2656 (verifyPhoneNumber always use the default FirebaseApp, not the configured one) + +## 0.16.1 + +* Update lower bound of dart dependency to 2.0.0. + +## 0.16.0 + +* Migrate to Android v2 embedding. + +## 0.15.5+3 + +* Fix for missing UserAgent.h compilation failures. + +## 0.15.5+2 + +* Update the platform interface dependency to 1.1.7 and update tests. + +## 0.15.5+1 + +* Make the pedantic dev_dependency explicit. + +## 0.15.5 + +* Add macOS support + +## 0.15.4+1 + +* Fix fallthrough bug in Android code. + +## 0.15.4 + +* Add support for `confirmPasswordReset` on Android and iOS. + +## 0.15.3+1 + +* Add integration instructions for the `web` platform. + +## 0.15.3 + +* Add support for OAuth Authentication for iOS and Android to solve generic providers authentication. + +## 0.15.2 + +* Add web support by default. +* Require Flutter SDK 1.12.13+hotfix.4 or later. + +## 0.15.1+1 + +* Remove the deprecated `author:` field from pubspec.yaml +* Migrate the plugin to the pubspec platforms manifest. +* Bump the minimum Flutter version to 1.10.0. + +## 0.15.1 + +* Migrate to use `firebase_auth_platform_interface`. + +## 0.15.0+2 + +* Update homepage since this package was moved. + +## 0.15.0+1 + +* Added missing ERROR_WRONG_PASSWORD Exception to the `reauthenticateWithCredential` docs. + +## 0.15.0 + +* Fixed `NoSuchMethodError` in `reauthenticateWithCredential`. +* Fixed `IdTokenResult` analyzer warnings. +* Reduced visibility of `IdTokenResult` constructor. + +## 0.14.0+10 + +* Formatted lists in member documentations for better readability. + +## 0.14.0+9 + +* Fix the behavior of `getIdToken` to use the `refresh` parameter instead of always refreshing. + +## 0.14.0+8 + +* Updated README instructions for contributing for consistency with other Flutterfire plugins. + +## 0.14.0+7 + +* Remove AndroidX warning. + +## 0.14.0+6 + +* Update example app with correct const constructors. + +## 0.14.0+5 + +* On iOS, `fetchSignInMethodsForEmail` now returns an empty list when the email + cannot be found, matching the Android behavior. + +## 0.14.0+4 + +* Fixed "Register a user" example code snippet in README.md. + +## 0.14.0+3 + +* Update documentation to reflect new repository location. +* Update unit tests to call `TestWidgetsFlutterBinding.ensureInitialized`. +* Remove executable bit on LICENSE file. + +## 0.14.0+2 + +* Reduce compiler warnings on iOS port by replacing `int` with `long` backing in returned timestamps. + +## 0.14.0+1 + +* Add dependency on `androidx.annotation:annotation:1.0.0`. + +## 0.14.0 + +* Added new `IdTokenResult` class. +* **Breaking Change**. `getIdToken()` method now returns `IdTokenResult` instead of a token `String`. + Use the `token` property of `IdTokenResult` to retrieve the token `String`. +* Added integration testing for `getIdToken()`. + +## 0.13.1+1 + +* Update authentication example in README. + +## 0.13.1 + +* Fixed a crash on iOS when sign-in fails. +* Additional integration testing. +* Updated documentation for `FirebaseUser.delete()` to include error codes. +* Updated Firebase project to match other Flutterfire apps. + +## 0.13.0 + +* **Breaking change**: Replace `FirebaseUserMetadata.creationTimestamp` and + `FirebaseUserMetadata.lastSignInTimestamp` with `creationTime` and `lastSignInTime`. + Previously on iOS `creationTimestamp` and `lastSignInTimestamp` returned in + seconds and on Android in milliseconds. Now, both platforms provide values as a + `DateTime`. + +## 0.12.0+1 + +* Fixes iOS sign-in exceptions when `additionalUserInfo` is `nil` or has `nil` fields. +* Additional integration testing. + +## 0.12.0 + +* Added new `AuthResult` and `AdditionalUserInfo` classes. +* **Breaking Change**. Sign-in methods now return `AuthResult` instead of `FirebaseUser`. + Retrieve the `FirebaseUser` using the `user` property of `AuthResult`. + +## 0.11.1+12 + +* Update google-services Android gradle plugin to 4.3.0 in documentation and examples. + +## 0.11.1+11 + +* On iOS, `getIdToken()` now uses the `refresh` parameter instead of always using `true`. + +## 0.11.1+10 + +* On Android, `providerData` now includes `UserInfo` for the phone authentication provider. + +## 0.11.1+9 + +* Update README to clarify importance of filling out all fields for OAuth consent screen. + +## 0.11.1+8 + +* Automatically register for iOS notifications, ensuring that phone authentication + will work even if Firebase method swizzling is disabled. + +## 0.11.1+7 + +* Automatically use version from pubspec.yaml when reporting usage to Firebase. + +## 0.11.1+6 + +* Add documentation of support email requirement to README. + +## 0.11.1+5 + +* Fix `updatePhoneNumberCredential` on Android. + +## 0.11.1+4 + +* Fix `updatePhoneNumberCredential` on iOS. + +## 0.11.1+3 + +* Add missing template type parameter to `invokeMethod` calls. +* Bump minimum Flutter version to 1.5.0. +* Replace invokeMethod with invokeMapMethod wherever necessary. +* FirebaseUser private constructor takes `Map` instead of `Map`. + +## 0.11.1+2 + +* Suppress deprecation warning for BinaryMessages. See: https://github.com/flutter/flutter/issues/33446 + +## 0.11.1+1 + +* Updated the error code documentation for `linkWithCredential`. + +## 0.11.1 + +* Support for `updatePhoneNumberCredential`. + +## 0.11.0 + +* **Breaking change**: `linkWithCredential` is now a function of `FirebaseUser`instead of + `FirebaseAuth`. +* Added test for newer `linkWithCredential` function. + +## 0.10.0+1 + +* Increase Firebase/Auth CocoaPod dependency to '~> 6.0'. + +## 0.10.0 + +* Update firebase_dynamic_links dependency. +* Update Android dependencies to latest. + +## 0.9.0 + +* **Breaking change**: `PhoneVerificationCompleted` now provides an `AuthCredential` that can + be used with `signInWithCredential` or `linkWithCredential` instead of signing in automatically. +* **Breaking change**: Remove internal counter `nextHandle` from public API. + +## 0.8.4+5 + +* Increase Firebase/Auth CocoaPod dependency to '~> 5.19'. + +## 0.8.4+4 + +* Update FirebaseAuth CocoaPod dependency to ensure availability of `FIRAuthErrorUserInfoNameKey`. + +## 0.8.4+3 + +* Updated deprecated API usage on iOS to use non-deprecated versions. +* Updated FirebaseAuth CocoaPod dependency to ensure a minimum version of 5.0. + +## 0.8.4+2 + +* Fixes an error in the documentation of createUserWithEmailAndPassword. + +## 0.8.4+1 + +* Adds credential for email authentication with link. + +## 0.8.4 + +* Adds support for email link authentication. + +## 0.8.3 + +* Make providerId 'const String' to use in 'case' statement. + +## 0.8.2+1 + +* Fixed bug where `PhoneCodeAutoRetrievalTimeout` callback was never called. + +## 0.8.2 + +* Fixed `linkWithCredential` on Android. + +## 0.8.1+5 + +* Added a driver test. + +## 0.8.1+4 + +* Update README. +* Update the example app with separate pages for registration and sign-in. + +## 0.8.1+3 + +* Reduce compiler warnings in Android plugin +* Raise errors early when accessing methods that require a Firebase User + +## 0.8.1+2 + +* Log messages about automatic configuration of the default app are now less confusing. + +## 0.8.1+1 + +* Remove categories. + +## 0.8.1 + +* Fixes Firebase auth phone sign-in for Android. + +## 0.8.0+3 + +* Log a more detailed warning at build time about the previous AndroidX + migration. + +## 0.8.0+2 + +* Update Google sign-in example in the README. + +## 0.8.0+1 + +* Update a broken dependency. + +## 0.8.0 + +* **Breaking change**. Migrate from the deprecated original Android Support + Library to AndroidX. This shouldn't result in any functional changes, but it + requires any Android apps using this plugin to [also + migrate](https://developer.android.com/jetpack/androidx/migrate) if they're + using the original support library. + +## 0.7.0 + +* Introduce third-party auth provider classes that generate `AuthCredential`s +* **Breaking Change** Signing in, linking, and reauthenticating now require an `AuthCredential` +* **Breaking Change** Unlinking now uses providerId +* **Breaking Change** Moved reauthentication to FirebaseUser + +## 0.6.7 + +* `FirebaseAuth` and `FirebaseUser` are now fully documented. +* `PlatformExceptions` now report error codes as stated in docs. +* Credentials can now be unlinked from Accounts with new methods on `FirebaseUser`. + +## 0.6.6 + +* Users can now reauthenticate in response to operations that require a recent sign-in. + +## 0.6.5 + +* Fixing async method `verifyPhoneNumber`, that would never return even in a successful call. + +## 0.6.4 + +* Added support for Github signin and linking Github accounts to existing users. + +## 0.6.3 + +* Add multi app support. + +## 0.6.2+1 + +* Bump Android dependencies to latest. + +## 0.6.2 + +* Add access to user metadata. + +## 0.6.1 + +* Adding support for linkWithTwitterCredential in FirebaseAuth. + +## 0.6.0 + +* Added support for `updatePassword` in `FirebaseUser`. +* **Breaking Change** Moved `updateEmail` and `updateProfile` to `FirebaseUser`. + This brings the `firebase_auth` package inline with other implementations and documentation. + +## 0.5.20 + +* Replaced usages of guava's: ImmutableList and ImmutableMap with platform +Collections.unmodifiableList() and Collections.unmodifiableMap(). + +## 0.5.19 + +* Update test package dependency to pick up Dart 2 support. +* Modified dependency on google_sign_in to point to a published + version instead of a relative path. + +## 0.5.18 + +* Adding support for updateEmail in FirebaseAuth. + +## 0.5.17 + +* Adding support for FirebaseUser.delete. + +## 0.5.16 + +* Adding support for setLanguageCode in FirebaseAuth. + +## 0.5.15 + +* Bump Android and Firebase dependency versions. + +## 0.5.14 + +* Fixed handling of auto phone number verification. + +## 0.5.13 + +* Add support for phone number authentication. + +## 0.5.12 + +* Fixed ArrayIndexOutOfBoundsException in handleStopListeningAuthState + +## 0.5.11 + +* Updated Gradle tooling to match Android Studio 3.1.2. + +## 0.5.10 + +* Updated iOS implementation to reflect Firebase API changes. + +## 0.5.9 + +* Added support for signing in with a Twitter account. + +## 0.5.8 + +* Added support to reload firebase user + +## 0.5.7 + +* Added support to sendEmailVerification + +## 0.5.6 + +* Added support for linkWithFacebookCredential + +## 0.5.5 + +* Updated Google Play Services dependencies to version 15.0.0. + +## 0.5.4 + +* Simplified podspec for Cocoapods 1.5.0, avoiding link issues in app archives. + +## 0.5.3 + +* Secure fetchProvidersForEmail (no providers) + +## 0.5.2 + +* Fixed Dart 2 type error in fetchProvidersForEmail. + +## 0.5.1 + +* Added support to fetchProvidersForEmail + +## 0.5.0 + +* **Breaking change**. Set SDK constraints to match the Flutter beta release. + +## 0.4.7 + +* Fixed Dart 2 type errors. + +## 0.4.6 + +* Fixed Dart 2 type errors. + +## 0.4.5 + +* Enabled use in Swift projects. + +## 0.4.4 + +* Added support for sendPasswordResetEmail + +## 0.4.3 + +* Moved to the io.flutter.plugins organization. + +## 0.4.2 + +* Added support for changing user data + +## 0.4.1 + +* Simplified and upgraded Android project template to Android SDK 27. +* Updated package description. + +## 0.4.0 + +* **Breaking change**. Upgraded to Gradle 4.1 and Android Studio Gradle plugin + 3.0.1. Older Flutter projects need to upgrade their Gradle setup as well in + order to use this version of the plugin. Instructions can be found + [here](https://github.com/flutter/flutter/wiki/Updating-Flutter-projects-to-Gradle-4.1-and-Android-Studio-Gradle-plugin-3.0.1). +* Relaxed GMS dependency to [11.4.0,12.0[ + +## 0.3.2 + +* Added FLT prefix to iOS types +* Change GMS dependency to 11.4.+ + +## 0.3.1 + +* Change GMS dependency to 11.+ + +## 0.3.0 + +* **Breaking Change**: Method FirebaseUser getToken was renamed to getIdToken. + +## 0.2.5 + +* Added support for linkWithCredential with Google credential + +## 0.2.4 + +* Added support for `signInWithCustomToken` +* Added `Stream onAuthStateChanged` event to listen when the user change + +## 0.2.3+1 + +* Aligned author name with rest of repo. + +## 0.2.3 + +* Remove dependency on Google/SignIn + +## 0.2.2 + +* Remove dependency on FirebaseUI + +## 0.2.1 + +* Added support for linkWithEmailAndPassword + +## 0.2.0 + +* **Breaking Change**: Method currentUser is async now. + +## 0.1.2 + +* Added support for signInWithFacebook + +## 0.1.1 + +* Updated to Firebase SDK to always use latest patch version for 11.0.x builds + +## 0.1.0 + +* Updated to Firebase SDK Version 11.0.1 +* **Breaking Change**: You need to add a maven section with the "https://maven.google.com" endpoint to the repository section of your `android/build.gradle`. For example: +```gradle +allprojects { + repositories { + jcenter() + maven { // NEW + url "https://maven.google.com" // NEW + } // NEW + } +} +``` + +## 0.0.4 + +* Add method getToken() to FirebaseUser + +## 0.0.3+1 + +* Updated README.md + +## 0.0.3 + +* Added support for createUserWithEmailAndPassword, signInWithEmailAndPassword, and signOut Firebase methods + +## 0.0.2+1 + +* Updated README.md + +## 0.0.2 + +* Bump buildToolsVersion to 25.0.3 + +## 0.0.1 + +* Initial Release diff --git a/mih_ui/android/build/ios/SourcePackages/firebase_auth-6.5.4/LICENSE b/mih_ui/android/build/ios/SourcePackages/firebase_auth-6.5.4/LICENSE new file mode 100644 index 00000000..000b4618 --- /dev/null +++ b/mih_ui/android/build/ios/SourcePackages/firebase_auth-6.5.4/LICENSE @@ -0,0 +1,27 @@ +// Copyright 2017 The Chromium Authors. All rights reserved. +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are +// met: +// +// * Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// * Redistributions in binary form must reproduce the above +// copyright notice, this list of conditions and the following disclaimer +// in the documentation and/or other materials provided with the +// distribution. +// * Neither the name of Google Inc. nor the names of its +// contributors may be used to endorse or promote products derived from +// this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. \ No newline at end of file diff --git a/mih_ui/android/build/ios/SourcePackages/firebase_auth-6.5.4/README.md b/mih_ui/android/build/ios/SourcePackages/firebase_auth-6.5.4/README.md new file mode 100755 index 00000000..230c522d --- /dev/null +++ b/mih_ui/android/build/ios/SourcePackages/firebase_auth-6.5.4/README.md @@ -0,0 +1,26 @@ +[](https://flutter.dev/docs/development/packages-and-plugins/favorites) + +# Firebase Auth for Flutter +[![pub package](https://img.shields.io/pub/v/firebase_auth.svg)](https://pub.dev/packages/firebase_auth) + +A Flutter plugin to use the [Firebase Authentication API](https://firebase.google.com/products/auth/). + +To learn more about Firebase Auth, please visit the [Firebase website](https://firebase.google.com/products/auth) + +## Getting Started + +To get started with Firebase Auth for Flutter, please [see the documentation](https://firebase.google.com/docs/auth/flutter/start). + +## Usage + +To use this plugin, please visit the [Authentication Usage documentation](https://firebase.google.com/docs/auth/flutter/manage-users) + +## Issues and feedback + +Please file FlutterFire specific issues, bugs, or feature requests in our [issue tracker](https://github.com/firebase/flutterfire/issues/new). + +Plugin issues that are not specific to FlutterFire can be filed in the [Flutter issue tracker](https://github.com/flutter/flutter/issues/new). + +To contribute a change to this plugin, +please review our [contribution guide](https://github.com/firebase/flutterfire/blob/main/CONTRIBUTING.md) +and open a [pull request](https://github.com/firebase/flutterfire/pulls). diff --git a/mih_ui/android/build/ios/SourcePackages/firebase_auth-6.5.4/android/build.gradle b/mih_ui/android/build/ios/SourcePackages/firebase_auth-6.5.4/android/build.gradle new file mode 100755 index 00000000..1004a0e7 --- /dev/null +++ b/mih_ui/android/build/ios/SourcePackages/firebase_auth-6.5.4/android/build.gradle @@ -0,0 +1,66 @@ +group 'io.flutter.plugins.firebase.auth' +version '1.0-SNAPSHOT' + +apply plugin: 'com.android.library' + +buildscript { + repositories { + google() + mavenCentral() + } +} + +allprojects { + repositories { + google() + mavenCentral() + } +} + +def firebaseCoreProject = findProject(':firebase_core') +if (firebaseCoreProject == null) { + throw new GradleException('Could not find the firebase_core FlutterFire plugin, have you added it as a dependency in your pubspec?') +} else if (!firebaseCoreProject.properties['FirebaseSDKVersion']) { + throw new GradleException('A newer version of the firebase_core FlutterFire plugin is required, please update your firebase_core pubspec dependency.') +} + +def getRootProjectExtOrCoreProperty(name, firebaseCoreProject) { + if (!rootProject.ext.has('FlutterFire')) return firebaseCoreProject.properties[name] + if (!rootProject.ext.get('FlutterFire')[name]) return firebaseCoreProject.properties[name] + return rootProject.ext.get('FlutterFire').get(name) +} + +android { + // Conditional for compatibility with AGP <4.2. + if (project.android.hasProperty("namespace")) { + namespace 'io.flutter.plugins.firebase.auth' + } + + compileSdkVersion 34 + + defaultConfig { + minSdkVersion 23 + testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner" + } + + compileOptions { + sourceCompatibility JavaVersion.toVersion(17) + targetCompatibility JavaVersion.toVersion(17) + } + + buildFeatures { + buildConfig true + } + + lintOptions { + disable 'InvalidPackage' + } + dependencies { + api firebaseCoreProject + implementation platform("com.google.firebase:firebase-bom:${getRootProjectExtOrCoreProperty("FirebaseSDKVersion", firebaseCoreProject)}") + implementation 'com.google.firebase:firebase-auth' + implementation 'androidx.annotation:annotation:1.7.0' + } +} + +apply from: file("./user-agent.gradle") diff --git a/mih_ui/android/build/ios/SourcePackages/firebase_auth-6.5.4/android/gradle.properties b/mih_ui/android/build/ios/SourcePackages/firebase_auth-6.5.4/android/gradle.properties new file mode 100755 index 00000000..8bd86f68 --- /dev/null +++ b/mih_ui/android/build/ios/SourcePackages/firebase_auth-6.5.4/android/gradle.properties @@ -0,0 +1 @@ +org.gradle.jvmargs=-Xmx1536M diff --git a/mih_ui/android/build/ios/SourcePackages/firebase_auth-6.5.4/android/gradle/wrapper/gradle-wrapper.properties b/mih_ui/android/build/ios/SourcePackages/firebase_auth-6.5.4/android/gradle/wrapper/gradle-wrapper.properties new file mode 100644 index 00000000..e411586a --- /dev/null +++ b/mih_ui/android/build/ios/SourcePackages/firebase_auth-6.5.4/android/gradle/wrapper/gradle-wrapper.properties @@ -0,0 +1,5 @@ +distributionBase=GRADLE_USER_HOME +distributionPath=wrapper/dists +distributionUrl=https\://services.gradle.org/distributions/gradle-8.4-bin.zip +zipStoreBase=GRADLE_USER_HOME +zipStorePath=wrapper/dists diff --git a/mih_ui/android/build/ios/SourcePackages/firebase_auth-6.5.4/android/settings.gradle b/mih_ui/android/build/ios/SourcePackages/firebase_auth-6.5.4/android/settings.gradle new file mode 100755 index 00000000..ec51773d --- /dev/null +++ b/mih_ui/android/build/ios/SourcePackages/firebase_auth-6.5.4/android/settings.gradle @@ -0,0 +1,8 @@ +rootProject.name = 'firebase_auth' + +pluginManagement { + plugins { + id "com.android.application" version "8.3.0" + id "com.android.library" version "8.3.0" + } +} diff --git a/mih_ui/android/build/ios/SourcePackages/firebase_auth-6.5.4/android/src/main/AndroidManifest.xml b/mih_ui/android/build/ios/SourcePackages/firebase_auth-6.5.4/android/src/main/AndroidManifest.xml new file mode 100755 index 00000000..087541c2 --- /dev/null +++ b/mih_ui/android/build/ios/SourcePackages/firebase_auth-6.5.4/android/src/main/AndroidManifest.xml @@ -0,0 +1,9 @@ + + + + + + + diff --git a/mih_ui/android/build/ios/SourcePackages/firebase_auth-6.5.4/android/src/main/java/io/flutter/plugins/firebase/auth/AuthStateChannelStreamHandler.java b/mih_ui/android/build/ios/SourcePackages/firebase_auth-6.5.4/android/src/main/java/io/flutter/plugins/firebase/auth/AuthStateChannelStreamHandler.java new file mode 100644 index 00000000..e4147bee --- /dev/null +++ b/mih_ui/android/build/ios/SourcePackages/firebase_auth-6.5.4/android/src/main/java/io/flutter/plugins/firebase/auth/AuthStateChannelStreamHandler.java @@ -0,0 +1,63 @@ +/* + * Copyright 2022, the Chromium project authors. Please see the AUTHORS file + * for details. All rights reserved. Use of this source code is governed by a + * BSD-style license that can be found in the LICENSE file. + */ + +package io.flutter.plugins.firebase.auth; + +import com.google.firebase.auth.FirebaseAuth; +import com.google.firebase.auth.FirebaseAuth.AuthStateListener; +import com.google.firebase.auth.FirebaseUser; +import io.flutter.plugin.common.EventChannel.EventSink; +import io.flutter.plugin.common.EventChannel.StreamHandler; +import java.util.HashMap; +import java.util.Map; +import java.util.concurrent.atomic.AtomicBoolean; + +public class AuthStateChannelStreamHandler implements StreamHandler { + + private final FirebaseAuth firebaseAuth; + private AuthStateListener authStateListener; + + public AuthStateChannelStreamHandler(FirebaseAuth firebaseAuth) { + this.firebaseAuth = firebaseAuth; + } + + @Override + public void onListen(Object arguments, EventSink events) { + Map event = new HashMap<>(); + event.put(Constants.APP_NAME, firebaseAuth.getApp().getName()); + + final AtomicBoolean initialAuthState = new AtomicBoolean(true); + + authStateListener = + auth -> { + if (initialAuthState.get()) { + initialAuthState.set(false); + return; + } + + FirebaseUser user = auth.getCurrentUser(); + + if (user == null) { + event.put(Constants.USER, null); + } else { + event.put( + Constants.USER, PigeonParser.manuallyToList(PigeonParser.parseFirebaseUser(user))); + } + + events.success(event); + }; + + firebaseAuth.addAuthStateListener(authStateListener); + } + + @Override + public void onCancel(Object arguments) { + if (authStateListener != null) { + firebaseAuth.removeAuthStateListener(authStateListener); + authStateListener = null; + } + } +} diff --git a/mih_ui/android/build/ios/SourcePackages/firebase_auth-6.5.4/android/src/main/java/io/flutter/plugins/firebase/auth/Constants.java b/mih_ui/android/build/ios/SourcePackages/firebase_auth-6.5.4/android/src/main/java/io/flutter/plugins/firebase/auth/Constants.java new file mode 100644 index 00000000..2dd8df20 --- /dev/null +++ b/mih_ui/android/build/ios/SourcePackages/firebase_auth-6.5.4/android/src/main/java/io/flutter/plugins/firebase/auth/Constants.java @@ -0,0 +1,46 @@ +/* + * Copyright 2022, the Chromium project authors. Please see the AUTHORS file + * for details. All rights reserved. Use of this source code is governed by a + * BSD-style license that can be found in the LICENSE file. + */ + +package io.flutter.plugins.firebase.auth; + +public class Constants { + + public static final String APP_NAME = "appName"; + + // Providers + public static final String SIGN_IN_METHOD_PASSWORD = "password"; + public static final String SIGN_IN_METHOD_EMAIL_LINK = "emailLink"; + public static final String SIGN_IN_METHOD_FACEBOOK = "facebook.com"; + public static final String SIGN_IN_METHOD_GOOGLE = "google.com"; + public static final String SIGN_IN_METHOD_TWITTER = "twitter.com"; + public static final String SIGN_IN_METHOD_GITHUB = "github.com"; + public static final String SIGN_IN_METHOD_PHONE = "phone"; + public static final String SIGN_IN_METHOD_OAUTH = "oauth"; + public static final String SIGN_IN_METHOD_PLAY_GAMES = "playgames.google.com"; + // User + public static final String USER = "user"; + public static final String EMAIL = "email"; + + public static final String PROVIDER_ID = "providerId"; + public static final String CREDENTIAL = "credential"; + public static final String SECRET = "secret"; + public static final String ID_TOKEN = "idToken"; + public static final String TOKEN = "token"; + public static final String ACCESS_TOKEN = "accessToken"; + public static final String RAW_NONCE = "rawNonce"; + public static final String EMAIL_LINK = "emailLink"; + public static final String VERIFICATION_ID = "verificationId"; + public static final String SMS_CODE = "smsCode"; + public static final String SIGN_IN_METHOD = "signInMethod"; + public static final String FORCE_RESENDING_TOKEN = "forceResendingToken"; + public static final String NAME = "name"; + public static final String SERVER_AUTH_CODE = "serverAuthCode"; + + // MultiFactor + public static final String MULTI_FACTOR_HINTS = "multiFactorHints"; + public static final String MULTI_FACTOR_SESSION_ID = "multiFactorSessionId"; + public static final String MULTI_FACTOR_RESOLVER_ID = "multiFactorResolverId"; +} diff --git a/mih_ui/android/build/ios/SourcePackages/firebase_auth-6.5.4/android/src/main/java/io/flutter/plugins/firebase/auth/FlutterFirebaseAuthPlugin.java b/mih_ui/android/build/ios/SourcePackages/firebase_auth-6.5.4/android/src/main/java/io/flutter/plugins/firebase/auth/FlutterFirebaseAuthPlugin.java new file mode 100755 index 00000000..a122221c --- /dev/null +++ b/mih_ui/android/build/ios/SourcePackages/firebase_auth-6.5.4/android/src/main/java/io/flutter/plugins/firebase/auth/FlutterFirebaseAuthPlugin.java @@ -0,0 +1,782 @@ +// Copyright 2017 The Chromium Authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +package io.flutter.plugins.firebase.auth; + +import static io.flutter.plugins.firebase.auth.FlutterFirebaseMultiFactor.multiFactorUserMap; +import static io.flutter.plugins.firebase.core.FlutterFirebasePluginRegistry.registerPlugin; + +import android.app.Activity; +import androidx.annotation.NonNull; +import androidx.annotation.Nullable; +import com.google.android.gms.tasks.Task; +import com.google.android.gms.tasks.TaskCompletionSource; +import com.google.firebase.FirebaseApp; +import com.google.firebase.auth.ActionCodeResult; +import com.google.firebase.auth.AuthCredential; +import com.google.firebase.auth.AuthResult; +import com.google.firebase.auth.FirebaseAuth; +import com.google.firebase.auth.FirebaseUser; +import com.google.firebase.auth.MultiFactor; +import com.google.firebase.auth.MultiFactorInfo; +import com.google.firebase.auth.MultiFactorSession; +import com.google.firebase.auth.OAuthProvider; +import com.google.firebase.auth.PhoneMultiFactorInfo; +import com.google.firebase.auth.SignInMethodQueryResult; +import io.flutter.embedding.engine.plugins.FlutterPlugin; +import io.flutter.embedding.engine.plugins.activity.ActivityAware; +import io.flutter.embedding.engine.plugins.activity.ActivityPluginBinding; +import io.flutter.plugin.common.BinaryMessenger; +import io.flutter.plugin.common.EventChannel; +import io.flutter.plugin.common.EventChannel.StreamHandler; +import io.flutter.plugin.common.MethodChannel; +import io.flutter.plugins.firebase.core.FlutterFirebaseCorePlugin; +import io.flutter.plugins.firebase.core.FlutterFirebasePlugin; +import java.util.HashMap; +import java.util.List; +import java.util.Map; +import java.util.UUID; + +/** Flutter plugin for Firebase Auth. */ +public class FlutterFirebaseAuthPlugin + implements FlutterFirebasePlugin, + FlutterPlugin, + ActivityAware, + GeneratedAndroidFirebaseAuth.FirebaseAuthHostApi { + + private static final String METHOD_CHANNEL_NAME = "plugins.flutter.io/firebase_auth"; + + // Stores the instances of native AuthCredentials by their hashCode + static final HashMap authCredentials = new HashMap<>(); + + @Nullable private BinaryMessenger messenger; + + private MethodChannel channel; + private Activity activity; + + private final Map streamHandlers = new HashMap<>(); + + private final FlutterFirebaseAuthUser firebaseAuthUser = new FlutterFirebaseAuthUser(); + private final FlutterFirebaseMultiFactor firebaseMultiFactor = new FlutterFirebaseMultiFactor(); + + private final FlutterFirebaseTotpMultiFactor firebaseTotpMultiFactor = + new FlutterFirebaseTotpMultiFactor(); + private final FlutterFirebaseTotpSecret firebaseTotpSecret = new FlutterFirebaseTotpSecret(); + + private void initInstance(BinaryMessenger messenger) { + registerPlugin(METHOD_CHANNEL_NAME, this); + channel = new MethodChannel(messenger, METHOD_CHANNEL_NAME); + GeneratedAndroidFirebaseAuth.FirebaseAuthHostApi.setUp(messenger, this); + GeneratedAndroidFirebaseAuth.FirebaseAuthUserHostApi.setUp(messenger, firebaseAuthUser); + GeneratedAndroidFirebaseAuth.MultiFactorUserHostApi.setUp(messenger, firebaseMultiFactor); + GeneratedAndroidFirebaseAuth.MultiFactoResolverHostApi.setUp(messenger, firebaseMultiFactor); + GeneratedAndroidFirebaseAuth.MultiFactorTotpHostApi.setUp(messenger, firebaseTotpMultiFactor); + GeneratedAndroidFirebaseAuth.MultiFactorTotpSecretHostApi.setUp(messenger, firebaseTotpSecret); + + this.messenger = messenger; + } + + @Override + public void onAttachedToEngine(@NonNull FlutterPluginBinding binding) { + initInstance(binding.getBinaryMessenger()); + } + + @Override + public void onDetachedFromEngine(@NonNull FlutterPluginBinding binding) { + channel.setMethodCallHandler(null); + + assert messenger != null; + GeneratedAndroidFirebaseAuth.FirebaseAuthHostApi.setUp(messenger, null); + GeneratedAndroidFirebaseAuth.FirebaseAuthUserHostApi.setUp(messenger, null); + GeneratedAndroidFirebaseAuth.MultiFactorUserHostApi.setUp(messenger, null); + GeneratedAndroidFirebaseAuth.MultiFactoResolverHostApi.setUp(messenger, null); + GeneratedAndroidFirebaseAuth.MultiFactorTotpHostApi.setUp(messenger, null); + GeneratedAndroidFirebaseAuth.MultiFactorTotpSecretHostApi.setUp(messenger, null); + + channel = null; + messenger = null; + + removeEventListeners(); + } + + @Override + public void onAttachedToActivity(ActivityPluginBinding activityPluginBinding) { + activity = activityPluginBinding.getActivity(); + firebaseAuthUser.setActivity(activity); + } + + @Override + public void onDetachedFromActivityForConfigChanges() { + activity = null; + firebaseAuthUser.setActivity(null); + } + + @Override + public void onReattachedToActivityForConfigChanges(ActivityPluginBinding activityPluginBinding) { + activity = activityPluginBinding.getActivity(); + firebaseAuthUser.setActivity(activity); + } + + @Override + public void onDetachedFromActivity() { + activity = null; + firebaseAuthUser.setActivity(null); + } + + // Only access activity with this method. + @Nullable + private Activity getActivity() { + return activity; + } + + static FirebaseAuth getAuthFromPigeon( + GeneratedAndroidFirebaseAuth.AuthPigeonFirebaseApp pigeonApp) { + FirebaseApp app = FirebaseApp.getInstance(pigeonApp.getAppName()); + FirebaseAuth auth = FirebaseAuth.getInstance(app); + if (pigeonApp.getTenantId() != null) { + auth.setTenantId(pigeonApp.getTenantId()); + } + String customDomain = FlutterFirebaseCorePlugin.customAuthDomain.get(pigeonApp.getAppName()); + if (customDomain != null) { + auth.setCustomAuthDomain(customDomain); + } + + // Auth's `getCustomAuthDomain` supersedes value from `customAuthDomain` map set by + // `initializeApp` + if (pigeonApp.getCustomAuthDomain() != null) { + auth.setCustomAuthDomain(pigeonApp.getCustomAuthDomain()); + } + + return auth; + } + + @Override + public void registerIdTokenListener( + @NonNull GeneratedAndroidFirebaseAuth.AuthPigeonFirebaseApp app, + @NonNull GeneratedAndroidFirebaseAuth.Result result) { + try { + final FirebaseAuth auth = getAuthFromPigeon(app); + final IdTokenChannelStreamHandler handler = new IdTokenChannelStreamHandler(auth); + final String name = METHOD_CHANNEL_NAME + "/id-token/" + auth.getApp().getName(); + final EventChannel channel = new EventChannel(messenger, name); + channel.setStreamHandler(handler); + streamHandlers.put(channel, handler); + result.success(name); + } catch (Exception e) { + result.error(e); + } + } + + @Override + public void registerAuthStateListener( + @NonNull GeneratedAndroidFirebaseAuth.AuthPigeonFirebaseApp app, + @NonNull GeneratedAndroidFirebaseAuth.Result result) { + try { + final FirebaseAuth auth = getAuthFromPigeon(app); + final AuthStateChannelStreamHandler handler = new AuthStateChannelStreamHandler(auth); + final String name = METHOD_CHANNEL_NAME + "/auth-state/" + auth.getApp().getName(); + final EventChannel channel = new EventChannel(messenger, name); + channel.setStreamHandler(handler); + streamHandlers.put(channel, handler); + result.success(name); + } catch (Exception e) { + result.error(e); + } + } + + @Override + public void useEmulator( + @NonNull GeneratedAndroidFirebaseAuth.AuthPigeonFirebaseApp app, + @NonNull String host, + @NonNull Long port, + @NonNull GeneratedAndroidFirebaseAuth.VoidResult result) { + try { + FirebaseAuth firebaseAuth = getAuthFromPigeon(app); + firebaseAuth.useEmulator(host, port.intValue()); + result.success(); + } catch (Exception e) { + result.error(e); + } + } + + @Override + public void applyActionCode( + @NonNull GeneratedAndroidFirebaseAuth.AuthPigeonFirebaseApp app, + @NonNull String code, + @NonNull GeneratedAndroidFirebaseAuth.VoidResult result) { + FirebaseAuth firebaseAuth = getAuthFromPigeon(app); + firebaseAuth + .applyActionCode(code) + .addOnCompleteListener( + task -> { + if (task.isSuccessful()) { + result.success(); + } else { + result.error( + FlutterFirebaseAuthPluginException.parserExceptionToFlutter( + task.getException())); + } + }); + } + + @Override + public void checkActionCode( + @NonNull GeneratedAndroidFirebaseAuth.AuthPigeonFirebaseApp app, + @NonNull String code, + @NonNull + GeneratedAndroidFirebaseAuth.Result + result) { + FirebaseAuth firebaseAuth = getAuthFromPigeon(app); + firebaseAuth + .checkActionCode(code) + .addOnCompleteListener( + task -> { + if (task.isSuccessful()) { + ActionCodeResult actionCodeInfo = task.getResult(); + result.success(PigeonParser.parseActionCodeResult(actionCodeInfo)); + } else { + result.error( + FlutterFirebaseAuthPluginException.parserExceptionToFlutter( + task.getException())); + } + }); + } + + @Override + public void confirmPasswordReset( + @NonNull GeneratedAndroidFirebaseAuth.AuthPigeonFirebaseApp app, + @NonNull String code, + @NonNull String newPassword, + @NonNull GeneratedAndroidFirebaseAuth.VoidResult result) { + FirebaseAuth firebaseAuth = getAuthFromPigeon(app); + + firebaseAuth + .confirmPasswordReset(code, newPassword) + .addOnCompleteListener( + task -> { + if (task.isSuccessful()) { + result.success(); + } else { + result.error( + FlutterFirebaseAuthPluginException.parserExceptionToFlutter( + task.getException())); + } + }); + } + + @Override + public void createUserWithEmailAndPassword( + @NonNull GeneratedAndroidFirebaseAuth.AuthPigeonFirebaseApp app, + @NonNull String email, + @NonNull String password, + @NonNull + GeneratedAndroidFirebaseAuth.Result + result) { + FirebaseAuth firebaseAuth = getAuthFromPigeon(app); + + firebaseAuth + .createUserWithEmailAndPassword(email, password) + .addOnCompleteListener( + task -> { + if (task.isSuccessful()) { + AuthResult authResult = task.getResult(); + result.success(PigeonParser.parseAuthResult(authResult)); + } else { + result.error( + FlutterFirebaseAuthPluginException.parserExceptionToFlutter( + task.getException())); + } + }); + } + + @Override + public void signInAnonymously( + @NonNull GeneratedAndroidFirebaseAuth.AuthPigeonFirebaseApp app, + @NonNull + GeneratedAndroidFirebaseAuth.Result + result) { + FirebaseAuth firebaseAuth = getAuthFromPigeon(app); + firebaseAuth + .signInAnonymously() + .addOnCompleteListener( + task -> { + if (task.isSuccessful()) { + AuthResult authResult = task.getResult(); + result.success(PigeonParser.parseAuthResult(authResult)); + } else { + result.error( + FlutterFirebaseAuthPluginException.parserExceptionToFlutter( + task.getException())); + } + }); + } + + @Override + public void signInWithCredential( + @NonNull GeneratedAndroidFirebaseAuth.AuthPigeonFirebaseApp app, + @NonNull Map input, + @NonNull + GeneratedAndroidFirebaseAuth.Result + result) { + FirebaseAuth firebaseAuth = getAuthFromPigeon(app); + AuthCredential credential = PigeonParser.getCredential(input); + + if (credential == null) { + throw FlutterFirebaseAuthPluginException.invalidCredential(); + } + firebaseAuth + .signInWithCredential(credential) + .addOnCompleteListener( + task -> { + if (task.isSuccessful()) { + AuthResult authResult = task.getResult(); + result.success(PigeonParser.parseAuthResult(authResult)); + } else { + result.error( + FlutterFirebaseAuthPluginException.parserExceptionToFlutter( + task.getException())); + } + }); + } + + @Override + public void signInWithCustomToken( + @NonNull GeneratedAndroidFirebaseAuth.AuthPigeonFirebaseApp app, + @NonNull String token, + @NonNull + GeneratedAndroidFirebaseAuth.Result + result) { + FirebaseAuth firebaseAuth = getAuthFromPigeon(app); + + firebaseAuth + .signInWithCustomToken(token) + .addOnCompleteListener( + task -> { + if (task.isSuccessful()) { + AuthResult authResult = task.getResult(); + result.success(PigeonParser.parseAuthResult(authResult)); + } else { + result.error( + FlutterFirebaseAuthPluginException.parserExceptionToFlutter( + task.getException())); + } + }); + } + + @Override + public void signInWithEmailAndPassword( + @NonNull GeneratedAndroidFirebaseAuth.AuthPigeonFirebaseApp app, + @NonNull String email, + @NonNull String password, + @NonNull + GeneratedAndroidFirebaseAuth.Result + result) { + FirebaseAuth firebaseAuth = getAuthFromPigeon(app); + firebaseAuth + .signInWithEmailAndPassword(email, password) + .addOnCompleteListener( + task -> { + if (task.isSuccessful()) { + result.success(PigeonParser.parseAuthResult(task.getResult())); + } else { + result.error( + FlutterFirebaseAuthPluginException.parserExceptionToFlutter( + task.getException())); + } + }); + } + + @Override + public void signInWithEmailLink( + @NonNull GeneratedAndroidFirebaseAuth.AuthPigeonFirebaseApp app, + @NonNull String email, + @NonNull String emailLink, + @NonNull + GeneratedAndroidFirebaseAuth.Result + result) { + FirebaseAuth firebaseAuth = getAuthFromPigeon(app); + firebaseAuth + .signInWithEmailLink(email, emailLink) + .addOnCompleteListener( + task -> { + if (task.isSuccessful()) { + AuthResult authResult = task.getResult(); + result.success(PigeonParser.parseAuthResult(authResult)); + } else { + result.error( + FlutterFirebaseAuthPluginException.parserExceptionToFlutter( + task.getException())); + } + }); + } + + @Override + public void signInWithProvider( + @NonNull GeneratedAndroidFirebaseAuth.AuthPigeonFirebaseApp app, + @NonNull GeneratedAndroidFirebaseAuth.InternalSignInProvider signInProvider, + @NonNull + GeneratedAndroidFirebaseAuth.Result + result) { + FirebaseAuth firebaseAuth = getAuthFromPigeon(app); + + OAuthProvider.Builder provider = + OAuthProvider.newBuilder(signInProvider.getProviderId(), firebaseAuth); + if (signInProvider.getScopes() != null) { + provider.setScopes(signInProvider.getScopes()); + } + if (signInProvider.getCustomParameters() != null) { + provider.addCustomParameters(signInProvider.getCustomParameters()); + } + + firebaseAuth + .startActivityForSignInWithProvider(getActivity(), provider.build()) + .addOnCompleteListener( + task -> { + if (task.isSuccessful()) { + AuthResult authResult = task.getResult(); + result.success(PigeonParser.parseAuthResult(authResult)); + } else { + result.error( + FlutterFirebaseAuthPluginException.parserExceptionToFlutter( + task.getException())); + } + }); + } + + @Override + public void signOut( + @NonNull GeneratedAndroidFirebaseAuth.AuthPigeonFirebaseApp app, + @NonNull GeneratedAndroidFirebaseAuth.VoidResult result) { + try { + FirebaseAuth firebaseAuth = getAuthFromPigeon(app); + if (firebaseAuth.getCurrentUser() != null) { + final Map appMultiFactorUser = + multiFactorUserMap.get(app.getAppName()); + if (appMultiFactorUser != null) { + appMultiFactorUser.remove(firebaseAuth.getCurrentUser().getUid()); + } + } + firebaseAuth.signOut(); + result.success(); + } catch (Exception e) { + result.error(e); + } + } + + @Override + public void fetchSignInMethodsForEmail( + @NonNull GeneratedAndroidFirebaseAuth.AuthPigeonFirebaseApp app, + @NonNull String email, + @NonNull GeneratedAndroidFirebaseAuth.Result> result) { + FirebaseAuth firebaseAuth = getAuthFromPigeon(app); + + firebaseAuth + .fetchSignInMethodsForEmail(email) + .addOnCompleteListener( + task -> { + if (task.isSuccessful()) { + SignInMethodQueryResult signInMethodQueryResult = task.getResult(); + result.success(signInMethodQueryResult.getSignInMethods()); + } else { + result.error( + FlutterFirebaseAuthPluginException.parserExceptionToFlutter( + task.getException())); + } + }); + } + + @Override + public void sendPasswordResetEmail( + @NonNull GeneratedAndroidFirebaseAuth.AuthPigeonFirebaseApp app, + @NonNull String email, + @Nullable GeneratedAndroidFirebaseAuth.InternalActionCodeSettings actionCodeSettings, + @NonNull GeneratedAndroidFirebaseAuth.VoidResult result) { + FirebaseAuth firebaseAuth = getAuthFromPigeon(app); + + if (actionCodeSettings == null) { + firebaseAuth + .sendPasswordResetEmail(email) + .addOnCompleteListener( + task -> { + if (task.isSuccessful()) { + result.success(); + } else { + result.error( + FlutterFirebaseAuthPluginException.parserExceptionToFlutter( + task.getException())); + } + }); + return; + } + + firebaseAuth + .sendPasswordResetEmail(email, PigeonParser.getActionCodeSettings(actionCodeSettings)) + .addOnCompleteListener( + task -> { + if (task.isSuccessful()) { + result.success(); + } else { + result.error( + FlutterFirebaseAuthPluginException.parserExceptionToFlutter( + task.getException())); + } + }); + } + + @Override + public void sendSignInLinkToEmail( + @NonNull GeneratedAndroidFirebaseAuth.AuthPigeonFirebaseApp app, + @NonNull String email, + @NonNull GeneratedAndroidFirebaseAuth.InternalActionCodeSettings actionCodeSettings, + @NonNull GeneratedAndroidFirebaseAuth.VoidResult result) { + FirebaseAuth firebaseAuth = getAuthFromPigeon(app); + + firebaseAuth + .sendSignInLinkToEmail(email, PigeonParser.getActionCodeSettings(actionCodeSettings)) + .addOnCompleteListener( + task -> { + if (task.isSuccessful()) { + result.success(); + } else { + result.error( + FlutterFirebaseAuthPluginException.parserExceptionToFlutter( + task.getException())); + } + }); + } + + @Override + public void setLanguageCode( + @NonNull GeneratedAndroidFirebaseAuth.AuthPigeonFirebaseApp app, + @Nullable String languageCode, + @NonNull GeneratedAndroidFirebaseAuth.Result result) { + try { + FirebaseAuth firebaseAuth = getAuthFromPigeon(app); + + if (languageCode == null) { + firebaseAuth.useAppLanguage(); + } else { + firebaseAuth.setLanguageCode(languageCode); + } + + result.success(firebaseAuth.getLanguageCode()); + } catch (Exception e) { + result.error(e); + } + } + + @Override + public void setSettings( + @NonNull GeneratedAndroidFirebaseAuth.AuthPigeonFirebaseApp app, + @NonNull GeneratedAndroidFirebaseAuth.InternalFirebaseAuthSettings settings, + @NonNull GeneratedAndroidFirebaseAuth.VoidResult result) { + try { + FirebaseAuth firebaseAuth = getAuthFromPigeon(app); + + firebaseAuth + .getFirebaseAuthSettings() + .setAppVerificationDisabledForTesting(settings.getAppVerificationDisabledForTesting()); + + if (settings.getForceRecaptchaFlow() != null) { + firebaseAuth + .getFirebaseAuthSettings() + .forceRecaptchaFlowForTesting(settings.getForceRecaptchaFlow()); + } + + if (settings.getPhoneNumber() != null && settings.getSmsCode() != null) { + firebaseAuth + .getFirebaseAuthSettings() + .setAutoRetrievedSmsCodeForPhoneNumber( + settings.getPhoneNumber(), settings.getSmsCode()); + } + + result.success(); + } catch (Exception e) { + result.error(e); + } + } + + @Override + public void verifyPasswordResetCode( + @NonNull GeneratedAndroidFirebaseAuth.AuthPigeonFirebaseApp app, + @NonNull String code, + @NonNull GeneratedAndroidFirebaseAuth.Result result) { + FirebaseAuth firebaseAuth = getAuthFromPigeon(app); + + firebaseAuth + .verifyPasswordResetCode(code) + .addOnCompleteListener( + task -> { + if (task.isSuccessful()) { + result.success(task.getResult()); + } else { + result.error( + FlutterFirebaseAuthPluginException.parserExceptionToFlutter( + task.getException())); + } + }); + } + + @Override + public void verifyPhoneNumber( + @NonNull GeneratedAndroidFirebaseAuth.AuthPigeonFirebaseApp app, + @NonNull GeneratedAndroidFirebaseAuth.InternalVerifyPhoneNumberRequest request, + @NonNull GeneratedAndroidFirebaseAuth.Result result) { + try { + String eventChannelName = METHOD_CHANNEL_NAME + "/phone/" + UUID.randomUUID().toString(); + EventChannel channel = new EventChannel(messenger, eventChannelName); + + MultiFactorSession multiFactorSession = null; + + if (request.getMultiFactorSessionId() != null) { + multiFactorSession = + FlutterFirebaseMultiFactor.multiFactorSessionMap.get(request.getMultiFactorSessionId()); + } + + final String multiFactorInfoId = request.getMultiFactorInfoId(); + PhoneMultiFactorInfo multiFactorInfo = null; + + if (multiFactorInfoId != null) { + for (String resolverId : FlutterFirebaseMultiFactor.multiFactorResolverMap.keySet()) { + for (MultiFactorInfo info : + FlutterFirebaseMultiFactor.multiFactorResolverMap.get(resolverId).getHints()) { + if (info.getUid().equals(multiFactorInfoId) && info instanceof PhoneMultiFactorInfo) { + multiFactorInfo = (PhoneMultiFactorInfo) info; + break; + } + } + } + } + + PhoneNumberVerificationStreamHandler handler = + new PhoneNumberVerificationStreamHandler( + getActivity(), + app, + request, + multiFactorSession, + multiFactorInfo, + credential -> { + int hashCode = credential.hashCode(); + authCredentials.put(hashCode, credential); + }); + + channel.setStreamHandler(handler); + streamHandlers.put(channel, handler); + + result.success(eventChannelName); + } catch (Exception e) { + result.error(e); + } + } + + @Override + public void revokeTokenWithAuthorizationCode( + @NonNull GeneratedAndroidFirebaseAuth.AuthPigeonFirebaseApp app, + @NonNull String authorizationCode, + @NonNull GeneratedAndroidFirebaseAuth.VoidResult result) { + // Should never get here as we throw Exception on Dart side. + result.success(); + } + + @Override + public void revokeAccessToken( + @NonNull GeneratedAndroidFirebaseAuth.AuthPigeonFirebaseApp app, + @NonNull String accessToken, + @NonNull GeneratedAndroidFirebaseAuth.VoidResult result) { + FirebaseAuth firebaseAuth = getAuthFromPigeon(app); + + firebaseAuth + .revokeAccessToken(accessToken) + .addOnCompleteListener( + task -> { + if (task.isSuccessful()) { + result.success(); + } else { + result.error( + FlutterFirebaseAuthPluginException.parserExceptionToFlutter( + task.getException())); + } + }); + } + + @Override + public void initializeRecaptchaConfig( + @NonNull GeneratedAndroidFirebaseAuth.AuthPigeonFirebaseApp app, + @NonNull GeneratedAndroidFirebaseAuth.VoidResult result) { + FirebaseAuth firebaseAuth = getAuthFromPigeon(app); + firebaseAuth + .initializeRecaptchaConfig() + .addOnCompleteListener( + task -> { + if (task.isSuccessful()) { + result.success(); + } else { + result.error( + FlutterFirebaseAuthPluginException.parserExceptionToFlutter( + task.getException())); + } + }); + } + + @Override + public Task> getPluginConstantsForFirebaseApp(FirebaseApp firebaseApp) { + TaskCompletionSource> taskCompletionSource = new TaskCompletionSource<>(); + + cachedThreadPool.execute( + () -> { + try { + Map constants = new HashMap<>(); + FirebaseAuth firebaseAuth = FirebaseAuth.getInstance(firebaseApp); + FirebaseUser firebaseUser = firebaseAuth.getCurrentUser(); + String languageCode = firebaseAuth.getLanguageCode(); + + GeneratedAndroidFirebaseAuth.InternalUserDetails user = + firebaseUser == null ? null : PigeonParser.parseFirebaseUser(firebaseUser); + + if (languageCode != null) { + constants.put("APP_LANGUAGE_CODE", languageCode); + } + + if (user != null) { + constants.put("APP_CURRENT_USER", PigeonParser.manuallyToList(user)); + } + + taskCompletionSource.setResult(constants); + } catch (Exception e) { + taskCompletionSource.setException(e); + } + }); + + return taskCompletionSource.getTask(); + } + + @Override + public Task didReinitializeFirebaseCore() { + TaskCompletionSource taskCompletionSource = new TaskCompletionSource<>(); + + cachedThreadPool.execute( + () -> { + try { + removeEventListeners(); + authCredentials.clear(); + taskCompletionSource.setResult(null); + } catch (Exception e) { + taskCompletionSource.setException(e); + } + }); + + return taskCompletionSource.getTask(); + } + + private void removeEventListeners() { + for (EventChannel eventChannel : streamHandlers.keySet()) { + StreamHandler streamHandler = streamHandlers.get(eventChannel); + if (streamHandler != null) { + streamHandler.onCancel(null); + } + eventChannel.setStreamHandler(null); + } + streamHandlers.clear(); + } +} diff --git a/mih_ui/android/build/ios/SourcePackages/firebase_auth-6.5.4/android/src/main/java/io/flutter/plugins/firebase/auth/FlutterFirebaseAuthPluginException.java b/mih_ui/android/build/ios/SourcePackages/firebase_auth-6.5.4/android/src/main/java/io/flutter/plugins/firebase/auth/FlutterFirebaseAuthPluginException.java new file mode 100644 index 00000000..a42bcb56 --- /dev/null +++ b/mih_ui/android/build/ios/SourcePackages/firebase_auth-6.5.4/android/src/main/java/io/flutter/plugins/firebase/auth/FlutterFirebaseAuthPluginException.java @@ -0,0 +1,157 @@ +/* + * Copyright 2022, the Chromium project authors. Please see the AUTHORS file + * for details. All rights reserved. Use of this source code is governed by a + * BSD-style license that can be found in the LICENSE file. + */ + +package io.flutter.plugins.firebase.auth; + +import androidx.annotation.Nullable; +import com.google.firebase.FirebaseApiNotAvailableException; +import com.google.firebase.FirebaseNetworkException; +import com.google.firebase.FirebaseTooManyRequestsException; +import com.google.firebase.auth.AuthCredential; +import com.google.firebase.auth.FirebaseAuthException; +import com.google.firebase.auth.FirebaseAuthMultiFactorException; +import com.google.firebase.auth.FirebaseAuthUserCollisionException; +import com.google.firebase.auth.FirebaseAuthWeakPasswordException; +import com.google.firebase.auth.MultiFactorInfo; +import com.google.firebase.auth.MultiFactorResolver; +import com.google.firebase.auth.MultiFactorSession; +import java.util.HashMap; +import java.util.List; +import java.util.Map; +import java.util.UUID; + +public class FlutterFirebaseAuthPluginException { + + static GeneratedAndroidFirebaseAuth.FlutterError parserExceptionToFlutter( + @Nullable Exception nativeException) { + if (nativeException == null) { + return new GeneratedAndroidFirebaseAuth.FlutterError("UNKNOWN", null, null); + } + String code = "UNKNOWN"; + + String message = nativeException.getMessage(); + Map additionalData = new HashMap<>(); + + if (nativeException instanceof FirebaseAuthMultiFactorException) { + final FirebaseAuthMultiFactorException multiFactorException = + (FirebaseAuthMultiFactorException) nativeException; + Map output = new HashMap<>(); + + MultiFactorResolver multiFactorResolver = multiFactorException.getResolver(); + final List hints = multiFactorResolver.getHints(); + + final MultiFactorSession session = multiFactorResolver.getSession(); + final String sessionId = UUID.randomUUID().toString(); + FlutterFirebaseMultiFactor.multiFactorSessionMap.put(sessionId, session); + + final String resolverId = UUID.randomUUID().toString(); + FlutterFirebaseMultiFactor.multiFactorResolverMap.put(resolverId, multiFactorResolver); + + final List> pigeonHints = PigeonParser.multiFactorInfoToMap(hints); + + output.put( + Constants.APP_NAME, + multiFactorException.getResolver().getFirebaseAuth().getApp().getName()); + + output.put(Constants.MULTI_FACTOR_HINTS, pigeonHints); + + output.put(Constants.MULTI_FACTOR_SESSION_ID, sessionId); + output.put(Constants.MULTI_FACTOR_RESOLVER_ID, resolverId); + + return new GeneratedAndroidFirebaseAuth.FlutterError( + multiFactorException.getErrorCode(), multiFactorException.getLocalizedMessage(), output); + } + + if (nativeException instanceof FirebaseNetworkException + || (nativeException.getCause() != null + && nativeException.getCause() instanceof FirebaseNetworkException)) { + return new GeneratedAndroidFirebaseAuth.FlutterError( + "network-request-failed", + "A network error (such as timeout, interrupted connection or unreachable host) has" + + " occurred.", + null); + } + + if (nativeException instanceof FirebaseApiNotAvailableException + || (nativeException.getCause() != null + && nativeException.getCause() instanceof FirebaseApiNotAvailableException)) { + return new GeneratedAndroidFirebaseAuth.FlutterError( + "api-not-available", "The requested API is not available.", null); + } + + if (nativeException instanceof FirebaseTooManyRequestsException + || (nativeException.getCause() != null + && nativeException.getCause() instanceof FirebaseTooManyRequestsException)) { + return new GeneratedAndroidFirebaseAuth.FlutterError( + "too-many-requests", + "We have blocked all requests from this device due to unusual activity. Try again later.", + null); + } + + // Manual message overrides to match other platforms. + if (nativeException.getMessage() != null + && nativeException + .getMessage() + .startsWith("Cannot create PhoneAuthCredential without either verificationProof")) { + return new GeneratedAndroidFirebaseAuth.FlutterError( + "invalid-verification-code", + "The verification ID used to create the phone auth credential is invalid.", + null); + } + + if (message != null + && message.contains("User has already been linked to the given provider.")) { + return FlutterFirebaseAuthPluginException.alreadyLinkedProvider(); + } + + if (nativeException instanceof FirebaseAuthException) { + code = ((FirebaseAuthException) nativeException).getErrorCode(); + } + + if (nativeException instanceof FirebaseAuthWeakPasswordException) { + message = ((FirebaseAuthWeakPasswordException) nativeException).getReason(); + } + + if (nativeException instanceof FirebaseAuthUserCollisionException) { + String email = ((FirebaseAuthUserCollisionException) nativeException).getEmail(); + + if (email != null) { + additionalData.put("email", email); + } + + AuthCredential authCredential = + ((FirebaseAuthUserCollisionException) nativeException).getUpdatedCredential(); + + if (authCredential != null) { + additionalData.put("authCredential", PigeonParser.parseAuthCredential(authCredential)); + } + } + + return new GeneratedAndroidFirebaseAuth.FlutterError(code, message, additionalData); + } + + static GeneratedAndroidFirebaseAuth.FlutterError noUser() { + return new GeneratedAndroidFirebaseAuth.FlutterError( + "NO_CURRENT_USER", "No user currently signed in.", null); + } + + static GeneratedAndroidFirebaseAuth.FlutterError invalidCredential() { + return new GeneratedAndroidFirebaseAuth.FlutterError( + "INVALID_CREDENTIAL", + "The supplied auth credential is malformed, has expired or is not currently supported.", + null); + } + + static GeneratedAndroidFirebaseAuth.FlutterError noSuchProvider() { + return new GeneratedAndroidFirebaseAuth.FlutterError( + "NO_SUCH_PROVIDER", "User was not linked to an account with the given provider.", null); + } + + static GeneratedAndroidFirebaseAuth.FlutterError alreadyLinkedProvider() { + return new GeneratedAndroidFirebaseAuth.FlutterError( + "PROVIDER_ALREADY_LINKED", "User has already been linked to the given provider.", null); + } +} diff --git a/mih_ui/android/build/ios/SourcePackages/firebase_auth-6.5.4/android/src/main/java/io/flutter/plugins/firebase/auth/FlutterFirebaseAuthRegistrar.java b/mih_ui/android/build/ios/SourcePackages/firebase_auth-6.5.4/android/src/main/java/io/flutter/plugins/firebase/auth/FlutterFirebaseAuthRegistrar.java new file mode 100644 index 00000000..1476a9bd --- /dev/null +++ b/mih_ui/android/build/ios/SourcePackages/firebase_auth-6.5.4/android/src/main/java/io/flutter/plugins/firebase/auth/FlutterFirebaseAuthRegistrar.java @@ -0,0 +1,21 @@ +// Copyright 2019 The Chromium Authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +package io.flutter.plugins.firebase.auth; + +import androidx.annotation.Keep; +import com.google.firebase.components.Component; +import com.google.firebase.components.ComponentRegistrar; +import com.google.firebase.platforminfo.LibraryVersionComponent; +import java.util.Collections; +import java.util.List; + +@Keep +public class FlutterFirebaseAuthRegistrar implements ComponentRegistrar { + @Override + public List> getComponents() { + return Collections.>singletonList( + LibraryVersionComponent.create(BuildConfig.LIBRARY_NAME, BuildConfig.LIBRARY_VERSION)); + } +} diff --git a/mih_ui/android/build/ios/SourcePackages/firebase_auth-6.5.4/android/src/main/java/io/flutter/plugins/firebase/auth/FlutterFirebaseAuthUser.java b/mih_ui/android/build/ios/SourcePackages/firebase_auth-6.5.4/android/src/main/java/io/flutter/plugins/firebase/auth/FlutterFirebaseAuthUser.java new file mode 100644 index 00000000..7039a38f --- /dev/null +++ b/mih_ui/android/build/ios/SourcePackages/firebase_auth-6.5.4/android/src/main/java/io/flutter/plugins/firebase/auth/FlutterFirebaseAuthUser.java @@ -0,0 +1,548 @@ +/* + * Copyright 2023, the Chromium project authors. Please see the AUTHORS file + * for details. All rights reserved. Use of this source code is governed by a + * BSD-style license that can be found in the LICENSE file. + */ + +package io.flutter.plugins.firebase.auth; + +import static io.flutter.plugins.firebase.core.FlutterFirebasePlugin.cachedThreadPool; + +import android.app.Activity; +import android.net.Uri; +import androidx.annotation.NonNull; +import androidx.annotation.Nullable; +import com.google.android.gms.tasks.Tasks; +import com.google.firebase.FirebaseApp; +import com.google.firebase.auth.AuthCredential; +import com.google.firebase.auth.FirebaseAuth; +import com.google.firebase.auth.FirebaseUser; +import com.google.firebase.auth.GetTokenResult; +import com.google.firebase.auth.OAuthProvider; +import com.google.firebase.auth.PhoneAuthCredential; +import com.google.firebase.auth.UserProfileChangeRequest; +import java.util.Map; + +public class FlutterFirebaseAuthUser + implements GeneratedAndroidFirebaseAuth.FirebaseAuthUserHostApi { + + private Activity activity; + + public void setActivity(Activity activity) { + this.activity = activity; + } + + public static FirebaseUser getCurrentUserFromPigeon( + @NonNull GeneratedAndroidFirebaseAuth.AuthPigeonFirebaseApp pigeonApp) { + FirebaseApp app = FirebaseApp.getInstance(pigeonApp.getAppName()); + FirebaseAuth auth = FirebaseAuth.getInstance(app); + if (pigeonApp.getTenantId() != null) { + auth.setTenantId(pigeonApp.getTenantId()); + } + + return auth.getCurrentUser(); + } + + @Override + public void delete( + @NonNull GeneratedAndroidFirebaseAuth.AuthPigeonFirebaseApp app, + @NonNull GeneratedAndroidFirebaseAuth.VoidResult result) { + FirebaseUser firebaseUser = getCurrentUserFromPigeon(app); + + if (firebaseUser == null) { + result.error(FlutterFirebaseAuthPluginException.noUser()); + return; + } + + firebaseUser + .delete() + .addOnCompleteListener( + task -> { + if (task.isSuccessful()) { + result.success(); + } else { + result.error( + FlutterFirebaseAuthPluginException.parserExceptionToFlutter( + task.getException())); + } + }); + } + + @Override + public void getIdToken( + @NonNull GeneratedAndroidFirebaseAuth.AuthPigeonFirebaseApp app, + @NonNull Boolean forceRefresh, + @NonNull + GeneratedAndroidFirebaseAuth.Result + result) { + cachedThreadPool.execute( + () -> { + FirebaseUser firebaseUser = getCurrentUserFromPigeon(app); + + if (firebaseUser == null) { + result.error(FlutterFirebaseAuthPluginException.noUser()); + return; + } + try { + GetTokenResult response = Tasks.await(firebaseUser.getIdToken(forceRefresh)); + result.success(PigeonParser.parseTokenResult(response)); + } catch (Exception exception) { + result.error(FlutterFirebaseAuthPluginException.parserExceptionToFlutter(exception)); + } + }); + } + + @Override + public void linkWithCredential( + @NonNull GeneratedAndroidFirebaseAuth.AuthPigeonFirebaseApp app, + @NonNull Map input, + @NonNull + GeneratedAndroidFirebaseAuth.Result + result) { + FirebaseUser firebaseUser = getCurrentUserFromPigeon(app); + AuthCredential credential = PigeonParser.getCredential(input); + + if (firebaseUser == null) { + result.error(FlutterFirebaseAuthPluginException.noUser()); + return; + } + + if (credential == null) { + result.error(FlutterFirebaseAuthPluginException.invalidCredential()); + return; + } + + firebaseUser + .linkWithCredential(credential) + .addOnCompleteListener( + task -> { + if (task.isSuccessful()) { + result.success(PigeonParser.parseAuthResult(task.getResult())); + } else { + result.error( + FlutterFirebaseAuthPluginException.parserExceptionToFlutter( + task.getException())); + } + }); + } + + @Override + public void linkWithProvider( + @NonNull GeneratedAndroidFirebaseAuth.AuthPigeonFirebaseApp app, + @NonNull GeneratedAndroidFirebaseAuth.InternalSignInProvider signInProvider, + @NonNull + GeneratedAndroidFirebaseAuth.Result + result) { + FirebaseUser firebaseUser = getCurrentUserFromPigeon(app); + + OAuthProvider.Builder provider = OAuthProvider.newBuilder(signInProvider.getProviderId()); + if (signInProvider.getScopes() != null) { + provider.setScopes(signInProvider.getScopes()); + } + if (signInProvider.getCustomParameters() != null) { + provider.addCustomParameters(signInProvider.getCustomParameters()); + } + + firebaseUser + .startActivityForLinkWithProvider(activity, provider.build()) + .addOnCompleteListener( + task -> { + if (task.isSuccessful()) { + result.success(PigeonParser.parseAuthResult(task.getResult())); + } else { + result.error( + FlutterFirebaseAuthPluginException.parserExceptionToFlutter( + task.getException())); + } + }); + } + + @Override + public void reauthenticateWithCredential( + @NonNull GeneratedAndroidFirebaseAuth.AuthPigeonFirebaseApp app, + @NonNull Map input, + @NonNull + GeneratedAndroidFirebaseAuth.Result + result) { + FirebaseUser firebaseUser = getCurrentUserFromPigeon(app); + AuthCredential credential = PigeonParser.getCredential(input); + + if (firebaseUser == null) { + result.error(FlutterFirebaseAuthPluginException.noUser()); + return; + } + + if (credential == null) { + result.error(FlutterFirebaseAuthPluginException.invalidCredential()); + return; + } + + firebaseUser + .reauthenticateAndRetrieveData(credential) + .addOnCompleteListener( + task -> { + if (task.isSuccessful()) { + result.success(PigeonParser.parseAuthResult(task.getResult())); + } else { + result.error( + FlutterFirebaseAuthPluginException.parserExceptionToFlutter( + task.getException())); + } + }); + } + + @Override + public void reauthenticateWithProvider( + @NonNull GeneratedAndroidFirebaseAuth.AuthPigeonFirebaseApp app, + @NonNull GeneratedAndroidFirebaseAuth.InternalSignInProvider signInProvider, + @NonNull + GeneratedAndroidFirebaseAuth.Result + result) { + FirebaseUser firebaseUser = getCurrentUserFromPigeon(app); + + OAuthProvider.Builder provider = OAuthProvider.newBuilder(signInProvider.getProviderId()); + if (signInProvider.getScopes() != null) { + provider.setScopes(signInProvider.getScopes()); + } + if (signInProvider.getCustomParameters() != null) { + provider.addCustomParameters(signInProvider.getCustomParameters()); + } + + firebaseUser + .startActivityForReauthenticateWithProvider(activity, provider.build()) + .addOnCompleteListener( + task -> { + if (task.isSuccessful()) { + result.success(PigeonParser.parseAuthResult(task.getResult())); + } else { + result.error( + FlutterFirebaseAuthPluginException.parserExceptionToFlutter( + task.getException())); + } + }); + } + + @Override + public void reload( + @NonNull GeneratedAndroidFirebaseAuth.AuthPigeonFirebaseApp app, + @NonNull + GeneratedAndroidFirebaseAuth.Result + result) { + FirebaseUser firebaseUser = getCurrentUserFromPigeon(app); + + if (firebaseUser == null) { + result.error(FlutterFirebaseAuthPluginException.noUser()); + return; + } + + firebaseUser + .reload() + .addOnCompleteListener( + task -> { + if (task.isSuccessful()) { + result.success(PigeonParser.parseFirebaseUser(firebaseUser)); + } else { + result.error( + FlutterFirebaseAuthPluginException.parserExceptionToFlutter( + task.getException())); + } + }); + } + + @Override + public void sendEmailVerification( + @NonNull GeneratedAndroidFirebaseAuth.AuthPigeonFirebaseApp app, + @Nullable GeneratedAndroidFirebaseAuth.InternalActionCodeSettings actionCodeSettings, + @NonNull GeneratedAndroidFirebaseAuth.VoidResult result) { + FirebaseUser firebaseUser = getCurrentUserFromPigeon(app); + + if (firebaseUser == null) { + result.error(FlutterFirebaseAuthPluginException.noUser()); + return; + } + + if (actionCodeSettings == null) { + firebaseUser + .sendEmailVerification() + .addOnCompleteListener( + task -> { + if (task.isSuccessful()) { + result.success(); + } else { + result.error( + FlutterFirebaseAuthPluginException.parserExceptionToFlutter( + task.getException())); + } + }); + return; + } + + firebaseUser + .sendEmailVerification(PigeonParser.getActionCodeSettings(actionCodeSettings)) + .addOnCompleteListener( + task -> { + if (task.isSuccessful()) { + result.success(); + } else { + result.error( + FlutterFirebaseAuthPluginException.parserExceptionToFlutter( + task.getException())); + } + }); + } + + @Override + public void unlink( + @NonNull GeneratedAndroidFirebaseAuth.AuthPigeonFirebaseApp app, + @NonNull String providerId, + @NonNull + GeneratedAndroidFirebaseAuth.Result + result) { + FirebaseUser firebaseUser = getCurrentUserFromPigeon(app); + + if (firebaseUser == null) { + result.error(FlutterFirebaseAuthPluginException.noUser()); + return; + } + + firebaseUser + .unlink(providerId) + .addOnCompleteListener( + task -> { + if (task.isSuccessful()) { + result.success(PigeonParser.parseAuthResult(task.getResult())); + } else { + Exception exception = task.getException(); + if (exception + .getMessage() + .contains("User was not linked to an account with the given provider.")) { + result.error(FlutterFirebaseAuthPluginException.noSuchProvider()); + } else { + result.error( + FlutterFirebaseAuthPluginException.parserExceptionToFlutter(exception)); + } + } + }); + } + + @Override + public void updateEmail( + @NonNull GeneratedAndroidFirebaseAuth.AuthPigeonFirebaseApp app, + @NonNull String newEmail, + @NonNull + GeneratedAndroidFirebaseAuth.Result + result) { + FirebaseUser firebaseUser = getCurrentUserFromPigeon(app); + + if (firebaseUser == null) { + result.error(FlutterFirebaseAuthPluginException.noUser()); + return; + } + + firebaseUser + .updateEmail(newEmail) + .addOnCompleteListener( + task -> { + if (task.isSuccessful()) { + firebaseUser + .reload() + .addOnCompleteListener( + reloadTask -> { + if (reloadTask.isSuccessful()) { + result.success(PigeonParser.parseFirebaseUser(firebaseUser)); + } else { + result.error( + FlutterFirebaseAuthPluginException.parserExceptionToFlutter( + reloadTask.getException())); + } + }); + } else { + result.error( + FlutterFirebaseAuthPluginException.parserExceptionToFlutter( + task.getException())); + } + }); + } + + @Override + public void updatePassword( + @NonNull GeneratedAndroidFirebaseAuth.AuthPigeonFirebaseApp app, + @NonNull String newPassword, + @NonNull + GeneratedAndroidFirebaseAuth.Result + result) { + FirebaseUser firebaseUser = getCurrentUserFromPigeon(app); + + if (firebaseUser == null) { + result.error(FlutterFirebaseAuthPluginException.noUser()); + return; + } + + firebaseUser + .updatePassword(newPassword) + .addOnCompleteListener( + task -> { + if (task.isSuccessful()) { + firebaseUser + .reload() + .addOnCompleteListener( + reloadTask -> { + if (reloadTask.isSuccessful()) { + result.success(PigeonParser.parseFirebaseUser(firebaseUser)); + } else { + result.error( + FlutterFirebaseAuthPluginException.parserExceptionToFlutter( + reloadTask.getException())); + } + }); + } else { + result.error( + FlutterFirebaseAuthPluginException.parserExceptionToFlutter( + task.getException())); + } + }); + } + + @Override + public void updatePhoneNumber( + @NonNull GeneratedAndroidFirebaseAuth.AuthPigeonFirebaseApp app, + @NonNull Map input, + @NonNull + GeneratedAndroidFirebaseAuth.Result + result) { + FirebaseUser firebaseUser = getCurrentUserFromPigeon(app); + + if (firebaseUser == null) { + result.error(FlutterFirebaseAuthPluginException.noUser()); + return; + } + + PhoneAuthCredential phoneAuthCredential = + (PhoneAuthCredential) PigeonParser.getCredential(input); + + if (phoneAuthCredential == null) { + result.error(FlutterFirebaseAuthPluginException.invalidCredential()); + return; + } + + firebaseUser + .updatePhoneNumber(phoneAuthCredential) + .addOnCompleteListener( + task -> { + if (task.isSuccessful()) { + firebaseUser + .reload() + .addOnCompleteListener( + reloadTask -> { + if (reloadTask.isSuccessful()) { + result.success(PigeonParser.parseFirebaseUser(firebaseUser)); + } else { + result.error( + FlutterFirebaseAuthPluginException.parserExceptionToFlutter( + reloadTask.getException())); + } + }); + } else { + result.error( + FlutterFirebaseAuthPluginException.parserExceptionToFlutter( + task.getException())); + } + }); + } + + @Override + public void updateProfile( + @NonNull GeneratedAndroidFirebaseAuth.AuthPigeonFirebaseApp app, + @NonNull GeneratedAndroidFirebaseAuth.InternalUserProfile profile, + @NonNull + GeneratedAndroidFirebaseAuth.Result + result) { + FirebaseUser firebaseUser = getCurrentUserFromPigeon(app); + + if (firebaseUser == null) { + result.error(FlutterFirebaseAuthPluginException.noUser()); + return; + } + + UserProfileChangeRequest.Builder builder = new UserProfileChangeRequest.Builder(); + + if (profile.getDisplayNameChanged()) { + builder.setDisplayName(profile.getDisplayName()); + } + + if (profile.getPhotoUrlChanged()) { + if (profile.getPhotoUrl() != null) { + builder.setPhotoUri(Uri.parse(profile.getPhotoUrl())); + } else { + builder.setPhotoUri(null); + } + } + + firebaseUser + .updateProfile(builder.build()) + .addOnCompleteListener( + task -> { + if (task.isSuccessful()) { + firebaseUser + .reload() + .addOnCompleteListener( + reloadTask -> { + if (reloadTask.isSuccessful()) { + result.success(PigeonParser.parseFirebaseUser(firebaseUser)); + } else { + result.error( + FlutterFirebaseAuthPluginException.parserExceptionToFlutter( + reloadTask.getException())); + } + }); + } else { + result.error( + FlutterFirebaseAuthPluginException.parserExceptionToFlutter( + task.getException())); + } + }); + } + + @Override + public void verifyBeforeUpdateEmail( + @NonNull GeneratedAndroidFirebaseAuth.AuthPigeonFirebaseApp app, + @NonNull String newEmail, + @Nullable GeneratedAndroidFirebaseAuth.InternalActionCodeSettings actionCodeSettings, + @NonNull GeneratedAndroidFirebaseAuth.VoidResult result) { + FirebaseUser firebaseUser = getCurrentUserFromPigeon(app); + + if (firebaseUser == null) { + result.error(FlutterFirebaseAuthPluginException.noUser()); + return; + } + + if (actionCodeSettings == null) { + firebaseUser + .verifyBeforeUpdateEmail(newEmail) + .addOnCompleteListener( + task -> { + if (task.isSuccessful()) { + result.success(); + } else { + result.error( + FlutterFirebaseAuthPluginException.parserExceptionToFlutter( + task.getException())); + } + }); + return; + } + + firebaseUser + .verifyBeforeUpdateEmail(newEmail, PigeonParser.getActionCodeSettings(actionCodeSettings)) + .addOnCompleteListener( + task -> { + if (task.isSuccessful()) { + result.success(); + } else { + result.error( + FlutterFirebaseAuthPluginException.parserExceptionToFlutter( + task.getException())); + } + }); + } +} diff --git a/mih_ui/android/build/ios/SourcePackages/firebase_auth-6.5.4/android/src/main/java/io/flutter/plugins/firebase/auth/FlutterFirebaseMultiFactor.java b/mih_ui/android/build/ios/SourcePackages/firebase_auth-6.5.4/android/src/main/java/io/flutter/plugins/firebase/auth/FlutterFirebaseMultiFactor.java new file mode 100644 index 00000000..1ba51914 --- /dev/null +++ b/mih_ui/android/build/ios/SourcePackages/firebase_auth-6.5.4/android/src/main/java/io/flutter/plugins/firebase/auth/FlutterFirebaseMultiFactor.java @@ -0,0 +1,252 @@ +/* + * Copyright 2023, the Chromium project authors. Please see the AUTHORS file + * for details. All rights reserved. Use of this source code is governed by a + * BSD-style license that can be found in the LICENSE file. + */ + +package io.flutter.plugins.firebase.auth; + +import androidx.annotation.NonNull; +import androidx.annotation.Nullable; +import com.google.firebase.auth.AuthResult; +import com.google.firebase.auth.FirebaseUser; +import com.google.firebase.auth.MultiFactor; +import com.google.firebase.auth.MultiFactorAssertion; +import com.google.firebase.auth.MultiFactorInfo; +import com.google.firebase.auth.MultiFactorResolver; +import com.google.firebase.auth.MultiFactorSession; +import com.google.firebase.auth.PhoneAuthCredential; +import com.google.firebase.auth.PhoneAuthProvider; +import com.google.firebase.auth.PhoneMultiFactorGenerator; +import com.google.firebase.internal.api.FirebaseNoSignedInUserException; +import java.util.HashMap; +import java.util.List; +import java.util.Map; +import java.util.UUID; + +public class FlutterFirebaseMultiFactor + implements GeneratedAndroidFirebaseAuth.MultiFactorUserHostApi, + GeneratedAndroidFirebaseAuth.MultiFactoResolverHostApi { + + // Map an app id to a map of user id to a MultiFactorUser object. + static final Map> multiFactorUserMap = new HashMap<>(); + + // Map an id to a MultiFactorSession object. + static final Map multiFactorSessionMap = new HashMap<>(); + + // Map an id to a MultiFactorResolver object. + static final Map multiFactorResolverMap = new HashMap<>(); + + static final Map multiFactorAssertionMap = new HashMap<>(); + + MultiFactor getAppMultiFactor(@NonNull GeneratedAndroidFirebaseAuth.AuthPigeonFirebaseApp app) + throws FirebaseNoSignedInUserException { + final FirebaseUser currentUser = FlutterFirebaseAuthUser.getCurrentUserFromPigeon(app); + if (currentUser == null) { + throw new FirebaseNoSignedInUserException("No user is signed in"); + } + if (multiFactorUserMap.get(app.getAppName()) == null) { + multiFactorUserMap.put(app.getAppName(), new HashMap<>()); + } + + final Map appMultiFactorUser = multiFactorUserMap.get(app.getAppName()); + if (appMultiFactorUser.get(currentUser.getUid()) == null) { + appMultiFactorUser.put(currentUser.getUid(), currentUser.getMultiFactor()); + } + + return appMultiFactorUser.get(currentUser.getUid()); + } + + @Override + public void enrollPhone( + @NonNull GeneratedAndroidFirebaseAuth.AuthPigeonFirebaseApp app, + @NonNull GeneratedAndroidFirebaseAuth.InternalPhoneMultiFactorAssertion assertion, + @Nullable String displayName, + @NonNull GeneratedAndroidFirebaseAuth.VoidResult result) { + final MultiFactor multiFactor; + try { + multiFactor = getAppMultiFactor(app); + } catch (FirebaseNoSignedInUserException e) { + result.error(e); + return; + } + + PhoneAuthCredential credential = + PhoneAuthProvider.getCredential( + assertion.getVerificationId(), assertion.getVerificationCode()); + + MultiFactorAssertion multiFactorAssertion = PhoneMultiFactorGenerator.getAssertion(credential); + + multiFactor + .enroll(multiFactorAssertion, displayName) + .addOnCompleteListener( + task -> { + if (task.isSuccessful()) { + result.success(); + } else { + result.error( + FlutterFirebaseAuthPluginException.parserExceptionToFlutter( + task.getException())); + } + }); + } + + @Override + public void enrollTotp( + @NonNull GeneratedAndroidFirebaseAuth.AuthPigeonFirebaseApp app, + @NonNull String assertionId, + @Nullable String displayName, + @NonNull GeneratedAndroidFirebaseAuth.VoidResult result) { + final MultiFactor multiFactor; + try { + multiFactor = getAppMultiFactor(app); + } catch (FirebaseNoSignedInUserException e) { + result.error(e); + return; + } + + final MultiFactorAssertion multiFactorAssertion = multiFactorAssertionMap.get(assertionId); + + assert multiFactorAssertion != null; + multiFactor + .enroll(multiFactorAssertion, displayName) + .addOnCompleteListener( + task -> { + if (task.isSuccessful()) { + result.success(); + } else { + result.error( + FlutterFirebaseAuthPluginException.parserExceptionToFlutter( + task.getException())); + } + }); + } + + @Override + public void getSession( + @NonNull GeneratedAndroidFirebaseAuth.AuthPigeonFirebaseApp app, + @NonNull + GeneratedAndroidFirebaseAuth.Result< + GeneratedAndroidFirebaseAuth.InternalMultiFactorSession> + result) { + final MultiFactor multiFactor; + try { + multiFactor = getAppMultiFactor(app); + } catch (FirebaseNoSignedInUserException e) { + result.error(e); + return; + } + + multiFactor + .getSession() + .addOnCompleteListener( + task -> { + if (task.isSuccessful()) { + final MultiFactorSession sessionResult = task.getResult(); + final String id = UUID.randomUUID().toString(); + multiFactorSessionMap.put(id, sessionResult); + result.success( + new GeneratedAndroidFirebaseAuth.InternalMultiFactorSession.Builder() + .setId(id) + .build()); + } else { + result.error( + FlutterFirebaseAuthPluginException.parserExceptionToFlutter( + task.getException())); + } + }); + } + + @Override + public void unenroll( + @NonNull GeneratedAndroidFirebaseAuth.AuthPigeonFirebaseApp app, + @NonNull String factorUid, + @NonNull GeneratedAndroidFirebaseAuth.VoidResult result) { + final MultiFactor multiFactor; + try { + multiFactor = getAppMultiFactor(app); + } catch (FirebaseNoSignedInUserException e) { + result.error(FlutterFirebaseAuthPluginException.parserExceptionToFlutter(e)); + return; + } + + multiFactor + .unenroll(factorUid) + .addOnCompleteListener( + task -> { + if (task.isSuccessful()) { + result.success(); + } else { + result.error( + FlutterFirebaseAuthPluginException.parserExceptionToFlutter( + task.getException())); + } + }); + } + + @Override + public void getEnrolledFactors( + @NonNull GeneratedAndroidFirebaseAuth.AuthPigeonFirebaseApp app, + @NonNull + GeneratedAndroidFirebaseAuth.Result< + List> + result) { + final MultiFactor multiFactor; + try { + multiFactor = getAppMultiFactor(app); + } catch (FirebaseNoSignedInUserException e) { + result.error(e); + return; + } + + final List factors = multiFactor.getEnrolledFactors(); + + final List resultFactors = + PigeonParser.multiFactorInfoToPigeon(factors); + + result.success(resultFactors); + } + + @Override + public void resolveSignIn( + @NonNull String resolverId, + @Nullable GeneratedAndroidFirebaseAuth.InternalPhoneMultiFactorAssertion assertion, + @Nullable String totpAssertionId, + @NonNull + GeneratedAndroidFirebaseAuth.Result + result) { + final MultiFactorResolver resolver = multiFactorResolverMap.get(resolverId); + + if (resolver == null) { + result.error( + FlutterFirebaseAuthPluginException.parserExceptionToFlutter( + new Exception("Resolver not found"))); + return; + } + + MultiFactorAssertion multiFactorAssertion; + + if (assertion != null) { + PhoneAuthCredential credential = + PhoneAuthProvider.getCredential( + assertion.getVerificationId(), assertion.getVerificationCode()); + multiFactorAssertion = PhoneMultiFactorGenerator.getAssertion(credential); + } else { + multiFactorAssertion = multiFactorAssertionMap.get(totpAssertionId); + } + + resolver + .resolveSignIn(multiFactorAssertion) + .addOnCompleteListener( + task -> { + if (task.isSuccessful()) { + final AuthResult authResult = task.getResult(); + result.success(PigeonParser.parseAuthResult(authResult)); + } else { + result.error( + FlutterFirebaseAuthPluginException.parserExceptionToFlutter( + task.getException())); + } + }); + } +} diff --git a/mih_ui/android/build/ios/SourcePackages/firebase_auth-6.5.4/android/src/main/java/io/flutter/plugins/firebase/auth/FlutterFirebaseTotpMultiFactor.java b/mih_ui/android/build/ios/SourcePackages/firebase_auth-6.5.4/android/src/main/java/io/flutter/plugins/firebase/auth/FlutterFirebaseTotpMultiFactor.java new file mode 100644 index 00000000..9761a5df --- /dev/null +++ b/mih_ui/android/build/ios/SourcePackages/firebase_auth-6.5.4/android/src/main/java/io/flutter/plugins/firebase/auth/FlutterFirebaseTotpMultiFactor.java @@ -0,0 +1,82 @@ +/* + * Copyright 2023, the Chromium project authors. Please see the AUTHORS file + * for details. All rights reserved. Use of this source code is governed by a + * BSD-style license that can be found in the LICENSE file. + */ + +package io.flutter.plugins.firebase.auth; + +import androidx.annotation.NonNull; +import com.google.firebase.auth.MultiFactorSession; +import com.google.firebase.auth.TotpMultiFactorAssertion; +import com.google.firebase.auth.TotpMultiFactorGenerator; +import com.google.firebase.auth.TotpSecret; +import java.util.HashMap; +import java.util.Map; +import java.util.UUID; + +public class FlutterFirebaseTotpMultiFactor + implements GeneratedAndroidFirebaseAuth.MultiFactorTotpHostApi { + + // Map an app id to a map of user id to a TotpSecret object. + static final Map multiFactorSecret = new HashMap<>(); + + @Override + public void generateSecret( + @NonNull String sessionId, + @NonNull + GeneratedAndroidFirebaseAuth.Result + result) { + MultiFactorSession multiFactorSession = + FlutterFirebaseMultiFactor.multiFactorSessionMap.get(sessionId); + + assert multiFactorSession != null; + TotpMultiFactorGenerator.generateSecret(multiFactorSession) + .addOnCompleteListener( + task -> { + if (task.isSuccessful()) { + TotpSecret secret = task.getResult(); + multiFactorSecret.put(secret.getSharedSecretKey(), secret); + result.success( + new GeneratedAndroidFirebaseAuth.InternalTotpSecret.Builder() + .setCodeIntervalSeconds((long) secret.getCodeIntervalSeconds()) + .setCodeLength((long) secret.getCodeLength()) + .setSecretKey(secret.getSharedSecretKey()) + .setHashingAlgorithm(secret.getHashAlgorithm()) + .setEnrollmentCompletionDeadline(secret.getEnrollmentCompletionDeadline()) + .build()); + } else { + result.error( + FlutterFirebaseAuthPluginException.parserExceptionToFlutter( + task.getException())); + } + }); + } + + @Override + public void getAssertionForEnrollment( + @NonNull String secretKey, + @NonNull String oneTimePassword, + @NonNull GeneratedAndroidFirebaseAuth.Result result) { + final TotpSecret secret = multiFactorSecret.get(secretKey); + + assert secret != null; + TotpMultiFactorAssertion assertion = + TotpMultiFactorGenerator.getAssertionForEnrollment(secret, oneTimePassword); + String assertionId = UUID.randomUUID().toString(); + FlutterFirebaseMultiFactor.multiFactorAssertionMap.put(assertionId, assertion); + result.success(assertionId); + } + + @Override + public void getAssertionForSignIn( + @NonNull String enrollmentId, + @NonNull String oneTimePassword, + @NonNull GeneratedAndroidFirebaseAuth.Result result) { + TotpMultiFactorAssertion assertion = + TotpMultiFactorGenerator.getAssertionForSignIn(enrollmentId, oneTimePassword); + String assertionId = UUID.randomUUID().toString(); + FlutterFirebaseMultiFactor.multiFactorAssertionMap.put(assertionId, assertion); + result.success(assertionId); + } +} diff --git a/mih_ui/android/build/ios/SourcePackages/firebase_auth-6.5.4/android/src/main/java/io/flutter/plugins/firebase/auth/FlutterFirebaseTotpSecret.java b/mih_ui/android/build/ios/SourcePackages/firebase_auth-6.5.4/android/src/main/java/io/flutter/plugins/firebase/auth/FlutterFirebaseTotpSecret.java new file mode 100644 index 00000000..5b32f828 --- /dev/null +++ b/mih_ui/android/build/ios/SourcePackages/firebase_auth-6.5.4/android/src/main/java/io/flutter/plugins/firebase/auth/FlutterFirebaseTotpSecret.java @@ -0,0 +1,42 @@ +/* + * Copyright 2023, the Chromium project authors. Please see the AUTHORS file + * for details. All rights reserved. Use of this source code is governed by a + * BSD-style license that can be found in the LICENSE file. + */ + +package io.flutter.plugins.firebase.auth; + +import androidx.annotation.NonNull; +import androidx.annotation.Nullable; +import com.google.firebase.auth.TotpSecret; + +public class FlutterFirebaseTotpSecret + implements GeneratedAndroidFirebaseAuth.MultiFactorTotpSecretHostApi { + + @Override + public void generateQrCodeUrl( + @NonNull String secretKey, + @Nullable String accountName, + @Nullable String issuer, + @NonNull GeneratedAndroidFirebaseAuth.Result result) { + final TotpSecret secret = FlutterFirebaseTotpMultiFactor.multiFactorSecret.get(secretKey); + + assert secret != null; + if (accountName == null || issuer == null) { + result.success(secret.generateQrCodeUrl()); + return; + } + result.success(secret.generateQrCodeUrl(accountName, issuer)); + } + + @Override + public void openInOtpApp( + @NonNull String secretKey, + @NonNull String qrCodeUrl, + @NonNull GeneratedAndroidFirebaseAuth.VoidResult result) { + final TotpSecret secret = FlutterFirebaseTotpMultiFactor.multiFactorSecret.get(secretKey); + assert secret != null; + secret.openInOtpApp(qrCodeUrl); + result.success(); + } +} diff --git a/mih_ui/android/build/ios/SourcePackages/firebase_auth-6.5.4/android/src/main/java/io/flutter/plugins/firebase/auth/GeneratedAndroidFirebaseAuth.java b/mih_ui/android/build/ios/SourcePackages/firebase_auth-6.5.4/android/src/main/java/io/flutter/plugins/firebase/auth/GeneratedAndroidFirebaseAuth.java new file mode 100644 index 00000000..5aaa168b --- /dev/null +++ b/mih_ui/android/build/ios/SourcePackages/firebase_auth-6.5.4/android/src/main/java/io/flutter/plugins/firebase/auth/GeneratedAndroidFirebaseAuth.java @@ -0,0 +1,5308 @@ +// Copyright 2023, the Chromium project authors. Please see the AUTHORS file +// for details. All rights reserved. Use of this source code is governed by a +// BSD-style license that can be found in the LICENSE file. +// Autogenerated from Pigeon (v26.3.4), do not edit directly. +// See also: https://pub.dev/packages/pigeon + +package io.flutter.plugins.firebase.auth; + +import static java.lang.annotation.ElementType.METHOD; +import static java.lang.annotation.RetentionPolicy.CLASS; + +import android.util.Log; +import androidx.annotation.NonNull; +import androidx.annotation.Nullable; +import io.flutter.plugin.common.BasicMessageChannel; +import io.flutter.plugin.common.BinaryMessenger; +import io.flutter.plugin.common.MessageCodec; +import io.flutter.plugin.common.StandardMessageCodec; +import java.io.ByteArrayOutputStream; +import java.lang.annotation.Retention; +import java.lang.annotation.Target; +import java.nio.ByteBuffer; +import java.util.ArrayList; +import java.util.Arrays; +import java.util.List; +import java.util.Map; + +/** Generated class from Pigeon. */ +@SuppressWarnings({"unused", "unchecked", "CodeBlock2Expr", "RedundantSuppression", "serial"}) +public class GeneratedAndroidFirebaseAuth { + static boolean pigeonDoubleEquals(double a, double b) { + // Normalize -0.0 to 0.0 and handle NaN equality. + return (a == 0.0 ? 0.0 : a) == (b == 0.0 ? 0.0 : b) || (Double.isNaN(a) && Double.isNaN(b)); + } + + static boolean pigeonFloatEquals(float a, float b) { + // Normalize -0.0 to 0.0 and handle NaN equality. + return (a == 0.0f ? 0.0f : a) == (b == 0.0f ? 0.0f : b) || (Float.isNaN(a) && Float.isNaN(b)); + } + + static int pigeonDoubleHashCode(double d) { + // Normalize -0.0 to 0.0 and handle NaN to ensure consistent hash codes. + if (d == 0.0) { + d = 0.0; + } + long bits = Double.doubleToLongBits(d); + return (int) (bits ^ (bits >>> 32)); + } + + static int pigeonFloatHashCode(float f) { + // Normalize -0.0 to 0.0 and handle NaN to ensure consistent hash codes. + if (f == 0.0f) { + f = 0.0f; + } + return Float.floatToIntBits(f); + } + + static boolean pigeonDeepEquals(Object a, Object b) { + if (a == b) { + return true; + } + if (a == null || b == null) { + return false; + } + if (a instanceof byte[] && b instanceof byte[]) { + return Arrays.equals((byte[]) a, (byte[]) b); + } + if (a instanceof int[] && b instanceof int[]) { + return Arrays.equals((int[]) a, (int[]) b); + } + if (a instanceof long[] && b instanceof long[]) { + return Arrays.equals((long[]) a, (long[]) b); + } + if (a instanceof double[] && b instanceof double[]) { + double[] da = (double[]) a; + double[] db = (double[]) b; + if (da.length != db.length) { + return false; + } + for (int i = 0; i < da.length; i++) { + if (!pigeonDoubleEquals(da[i], db[i])) { + return false; + } + } + return true; + } + if (a instanceof List && b instanceof List) { + List listA = (List) a; + List listB = (List) b; + if (listA.size() != listB.size()) { + return false; + } + for (int i = 0; i < listA.size(); i++) { + if (!pigeonDeepEquals(listA.get(i), listB.get(i))) { + return false; + } + } + return true; + } + if (a instanceof Map && b instanceof Map) { + Map mapA = (Map) a; + Map mapB = (Map) b; + if (mapA.size() != mapB.size()) { + return false; + } + for (Map.Entry entryA : mapA.entrySet()) { + Object keyA = entryA.getKey(); + Object valueA = entryA.getValue(); + boolean found = false; + for (Map.Entry entryB : mapB.entrySet()) { + Object keyB = entryB.getKey(); + if (pigeonDeepEquals(keyA, keyB)) { + Object valueB = entryB.getValue(); + if (pigeonDeepEquals(valueA, valueB)) { + found = true; + break; + } else { + return false; + } + } + } + if (!found) { + return false; + } + } + return true; + } + if (a instanceof Double && b instanceof Double) { + return pigeonDoubleEquals((double) a, (double) b); + } + if (a instanceof Float && b instanceof Float) { + return pigeonFloatEquals((float) a, (float) b); + } + return a.equals(b); + } + + static int pigeonDeepHashCode(Object value) { + if (value == null) { + return 0; + } + if (value instanceof byte[]) { + return Arrays.hashCode((byte[]) value); + } + if (value instanceof int[]) { + return Arrays.hashCode((int[]) value); + } + if (value instanceof long[]) { + return Arrays.hashCode((long[]) value); + } + if (value instanceof double[]) { + double[] da = (double[]) value; + int result = 1; + for (double d : da) { + result = 31 * result + pigeonDoubleHashCode(d); + } + return result; + } + if (value instanceof List) { + int result = 1; + for (Object item : (List) value) { + result = 31 * result + pigeonDeepHashCode(item); + } + return result; + } + if (value instanceof Map) { + int result = 0; + for (Map.Entry entry : ((Map) value).entrySet()) { + result += + ((pigeonDeepHashCode(entry.getKey()) * 31) ^ pigeonDeepHashCode(entry.getValue())); + } + return result; + } + if (value instanceof Object[]) { + int result = 1; + for (Object item : (Object[]) value) { + result = 31 * result + pigeonDeepHashCode(item); + } + return result; + } + if (value instanceof Double) { + return pigeonDoubleHashCode((double) value); + } + if (value instanceof Float) { + return pigeonFloatHashCode((float) value); + } + return value.hashCode(); + } + + /** Error class for passing custom error details to Flutter via a thrown PlatformException. */ + public static class FlutterError extends RuntimeException { + + /** The error code. */ + public final String code; + + /** The error details. Must be a datatype supported by the api codec. */ + public final Object details; + + public FlutterError(@NonNull String code, @Nullable String message, @Nullable Object details) { + super(message); + this.code = code; + this.details = details; + } + } + + @NonNull + protected static ArrayList wrapError(@NonNull Throwable exception) { + ArrayList errorList = new ArrayList<>(3); + if (exception instanceof FlutterError) { + FlutterError error = (FlutterError) exception; + errorList.add(error.code); + errorList.add(error.getMessage()); + errorList.add(error.details); + } else { + errorList.add(exception.toString()); + errorList.add(exception.getClass().getSimpleName()); + errorList.add( + "Cause: " + exception.getCause() + ", Stacktrace: " + Log.getStackTraceString(exception)); + } + return errorList; + } + + @Target(METHOD) + @Retention(CLASS) + @interface CanIgnoreReturnValue {} + + /** The type of operation that generated the action code from calling [checkActionCode]. */ + public enum ActionCodeInfoOperation { + /** Unknown operation. */ + UNKNOWN(0), + /** Password reset code generated via [sendPasswordResetEmail]. */ + PASSWORD_RESET(1), + /** Email verification code generated via [User.sendEmailVerification]. */ + VERIFY_EMAIL(2), + /** Email change revocation code generated via [User.updateEmail]. */ + RECOVER_EMAIL(3), + /** Email sign in code generated via [sendSignInLinkToEmail]. */ + EMAIL_SIGN_IN(4), + /** Verify and change email code generated via [User.verifyBeforeUpdateEmail]. */ + VERIFY_AND_CHANGE_EMAIL(5), + /** Action code for reverting second factor addition. */ + REVERT_SECOND_FACTOR_ADDITION(6); + + final int index; + + ActionCodeInfoOperation(final int index) { + this.index = index; + } + } + + /** Generated class from Pigeon that represents data sent in messages. */ + public static final class InternalMultiFactorSession { + private @NonNull String id; + + public @NonNull String getId() { + return id; + } + + public void setId(@NonNull String setterArg) { + if (setterArg == null) { + throw new IllegalStateException("Nonnull field \"id\" is null."); + } + this.id = setterArg; + } + + /** Constructor is non-public to enforce null safety; use Builder. */ + InternalMultiFactorSession() {} + + @Override + public boolean equals(Object o) { + if (this == o) { + return true; + } + if (o == null || getClass() != o.getClass()) { + return false; + } + InternalMultiFactorSession that = (InternalMultiFactorSession) o; + return pigeonDeepEquals(id, that.id); + } + + @Override + public int hashCode() { + Object[] fields = new Object[] {getClass(), id}; + return pigeonDeepHashCode(fields); + } + + public static final class Builder { + + private @Nullable String id; + + @CanIgnoreReturnValue + public @NonNull Builder setId(@NonNull String setterArg) { + this.id = setterArg; + return this; + } + + public @NonNull InternalMultiFactorSession build() { + InternalMultiFactorSession pigeonReturn = new InternalMultiFactorSession(); + pigeonReturn.setId(id); + return pigeonReturn; + } + } + + @NonNull + public ArrayList toList() { + ArrayList toListResult = new ArrayList<>(1); + toListResult.add(id); + return toListResult; + } + + static @NonNull InternalMultiFactorSession fromList(@NonNull ArrayList pigeonVar_list) { + InternalMultiFactorSession pigeonResult = new InternalMultiFactorSession(); + Object id = pigeonVar_list.get(0); + pigeonResult.setId((String) id); + return pigeonResult; + } + } + + /** Generated class from Pigeon that represents data sent in messages. */ + public static final class InternalPhoneMultiFactorAssertion { + private @NonNull String verificationId; + + public @NonNull String getVerificationId() { + return verificationId; + } + + public void setVerificationId(@NonNull String setterArg) { + if (setterArg == null) { + throw new IllegalStateException("Nonnull field \"verificationId\" is null."); + } + this.verificationId = setterArg; + } + + private @NonNull String verificationCode; + + public @NonNull String getVerificationCode() { + return verificationCode; + } + + public void setVerificationCode(@NonNull String setterArg) { + if (setterArg == null) { + throw new IllegalStateException("Nonnull field \"verificationCode\" is null."); + } + this.verificationCode = setterArg; + } + + /** Constructor is non-public to enforce null safety; use Builder. */ + InternalPhoneMultiFactorAssertion() {} + + @Override + public boolean equals(Object o) { + if (this == o) { + return true; + } + if (o == null || getClass() != o.getClass()) { + return false; + } + InternalPhoneMultiFactorAssertion that = (InternalPhoneMultiFactorAssertion) o; + return pigeonDeepEquals(verificationId, that.verificationId) + && pigeonDeepEquals(verificationCode, that.verificationCode); + } + + @Override + public int hashCode() { + Object[] fields = new Object[] {getClass(), verificationId, verificationCode}; + return pigeonDeepHashCode(fields); + } + + public static final class Builder { + + private @Nullable String verificationId; + + @CanIgnoreReturnValue + public @NonNull Builder setVerificationId(@NonNull String setterArg) { + this.verificationId = setterArg; + return this; + } + + private @Nullable String verificationCode; + + @CanIgnoreReturnValue + public @NonNull Builder setVerificationCode(@NonNull String setterArg) { + this.verificationCode = setterArg; + return this; + } + + public @NonNull InternalPhoneMultiFactorAssertion build() { + InternalPhoneMultiFactorAssertion pigeonReturn = new InternalPhoneMultiFactorAssertion(); + pigeonReturn.setVerificationId(verificationId); + pigeonReturn.setVerificationCode(verificationCode); + return pigeonReturn; + } + } + + @NonNull + public ArrayList toList() { + ArrayList toListResult = new ArrayList<>(2); + toListResult.add(verificationId); + toListResult.add(verificationCode); + return toListResult; + } + + static @NonNull InternalPhoneMultiFactorAssertion fromList( + @NonNull ArrayList pigeonVar_list) { + InternalPhoneMultiFactorAssertion pigeonResult = new InternalPhoneMultiFactorAssertion(); + Object verificationId = pigeonVar_list.get(0); + pigeonResult.setVerificationId((String) verificationId); + Object verificationCode = pigeonVar_list.get(1); + pigeonResult.setVerificationCode((String) verificationCode); + return pigeonResult; + } + } + + /** Generated class from Pigeon that represents data sent in messages. */ + public static final class InternalMultiFactorInfo { + private @Nullable String displayName; + + public @Nullable String getDisplayName() { + return displayName; + } + + public void setDisplayName(@Nullable String setterArg) { + this.displayName = setterArg; + } + + private @NonNull Double enrollmentTimestamp; + + public @NonNull Double getEnrollmentTimestamp() { + return enrollmentTimestamp; + } + + public void setEnrollmentTimestamp(@NonNull Double setterArg) { + if (setterArg == null) { + throw new IllegalStateException("Nonnull field \"enrollmentTimestamp\" is null."); + } + this.enrollmentTimestamp = setterArg; + } + + private @Nullable String factorId; + + public @Nullable String getFactorId() { + return factorId; + } + + public void setFactorId(@Nullable String setterArg) { + this.factorId = setterArg; + } + + private @NonNull String uid; + + public @NonNull String getUid() { + return uid; + } + + public void setUid(@NonNull String setterArg) { + if (setterArg == null) { + throw new IllegalStateException("Nonnull field \"uid\" is null."); + } + this.uid = setterArg; + } + + private @Nullable String phoneNumber; + + public @Nullable String getPhoneNumber() { + return phoneNumber; + } + + public void setPhoneNumber(@Nullable String setterArg) { + this.phoneNumber = setterArg; + } + + /** Constructor is non-public to enforce null safety; use Builder. */ + InternalMultiFactorInfo() {} + + @Override + public boolean equals(Object o) { + if (this == o) { + return true; + } + if (o == null || getClass() != o.getClass()) { + return false; + } + InternalMultiFactorInfo that = (InternalMultiFactorInfo) o; + return pigeonDeepEquals(displayName, that.displayName) + && pigeonDeepEquals(enrollmentTimestamp, that.enrollmentTimestamp) + && pigeonDeepEquals(factorId, that.factorId) + && pigeonDeepEquals(uid, that.uid) + && pigeonDeepEquals(phoneNumber, that.phoneNumber); + } + + @Override + public int hashCode() { + Object[] fields = + new Object[] {getClass(), displayName, enrollmentTimestamp, factorId, uid, phoneNumber}; + return pigeonDeepHashCode(fields); + } + + public static final class Builder { + + private @Nullable String displayName; + + @CanIgnoreReturnValue + public @NonNull Builder setDisplayName(@Nullable String setterArg) { + this.displayName = setterArg; + return this; + } + + private @Nullable Double enrollmentTimestamp; + + @CanIgnoreReturnValue + public @NonNull Builder setEnrollmentTimestamp(@NonNull Double setterArg) { + this.enrollmentTimestamp = setterArg; + return this; + } + + private @Nullable String factorId; + + @CanIgnoreReturnValue + public @NonNull Builder setFactorId(@Nullable String setterArg) { + this.factorId = setterArg; + return this; + } + + private @Nullable String uid; + + @CanIgnoreReturnValue + public @NonNull Builder setUid(@NonNull String setterArg) { + this.uid = setterArg; + return this; + } + + private @Nullable String phoneNumber; + + @CanIgnoreReturnValue + public @NonNull Builder setPhoneNumber(@Nullable String setterArg) { + this.phoneNumber = setterArg; + return this; + } + + public @NonNull InternalMultiFactorInfo build() { + InternalMultiFactorInfo pigeonReturn = new InternalMultiFactorInfo(); + pigeonReturn.setDisplayName(displayName); + pigeonReturn.setEnrollmentTimestamp(enrollmentTimestamp); + pigeonReturn.setFactorId(factorId); + pigeonReturn.setUid(uid); + pigeonReturn.setPhoneNumber(phoneNumber); + return pigeonReturn; + } + } + + @NonNull + public ArrayList toList() { + ArrayList toListResult = new ArrayList<>(5); + toListResult.add(displayName); + toListResult.add(enrollmentTimestamp); + toListResult.add(factorId); + toListResult.add(uid); + toListResult.add(phoneNumber); + return toListResult; + } + + static @NonNull InternalMultiFactorInfo fromList(@NonNull ArrayList pigeonVar_list) { + InternalMultiFactorInfo pigeonResult = new InternalMultiFactorInfo(); + Object displayName = pigeonVar_list.get(0); + pigeonResult.setDisplayName((String) displayName); + Object enrollmentTimestamp = pigeonVar_list.get(1); + pigeonResult.setEnrollmentTimestamp((Double) enrollmentTimestamp); + Object factorId = pigeonVar_list.get(2); + pigeonResult.setFactorId((String) factorId); + Object uid = pigeonVar_list.get(3); + pigeonResult.setUid((String) uid); + Object phoneNumber = pigeonVar_list.get(4); + pigeonResult.setPhoneNumber((String) phoneNumber); + return pigeonResult; + } + } + + /** Generated class from Pigeon that represents data sent in messages. */ + public static final class AuthPigeonFirebaseApp { + private @NonNull String appName; + + public @NonNull String getAppName() { + return appName; + } + + public void setAppName(@NonNull String setterArg) { + if (setterArg == null) { + throw new IllegalStateException("Nonnull field \"appName\" is null."); + } + this.appName = setterArg; + } + + private @Nullable String tenantId; + + public @Nullable String getTenantId() { + return tenantId; + } + + public void setTenantId(@Nullable String setterArg) { + this.tenantId = setterArg; + } + + private @Nullable String customAuthDomain; + + public @Nullable String getCustomAuthDomain() { + return customAuthDomain; + } + + public void setCustomAuthDomain(@Nullable String setterArg) { + this.customAuthDomain = setterArg; + } + + /** Constructor is non-public to enforce null safety; use Builder. */ + AuthPigeonFirebaseApp() {} + + @Override + public boolean equals(Object o) { + if (this == o) { + return true; + } + if (o == null || getClass() != o.getClass()) { + return false; + } + AuthPigeonFirebaseApp that = (AuthPigeonFirebaseApp) o; + return pigeonDeepEquals(appName, that.appName) + && pigeonDeepEquals(tenantId, that.tenantId) + && pigeonDeepEquals(customAuthDomain, that.customAuthDomain); + } + + @Override + public int hashCode() { + Object[] fields = new Object[] {getClass(), appName, tenantId, customAuthDomain}; + return pigeonDeepHashCode(fields); + } + + public static final class Builder { + + private @Nullable String appName; + + @CanIgnoreReturnValue + public @NonNull Builder setAppName(@NonNull String setterArg) { + this.appName = setterArg; + return this; + } + + private @Nullable String tenantId; + + @CanIgnoreReturnValue + public @NonNull Builder setTenantId(@Nullable String setterArg) { + this.tenantId = setterArg; + return this; + } + + private @Nullable String customAuthDomain; + + @CanIgnoreReturnValue + public @NonNull Builder setCustomAuthDomain(@Nullable String setterArg) { + this.customAuthDomain = setterArg; + return this; + } + + public @NonNull AuthPigeonFirebaseApp build() { + AuthPigeonFirebaseApp pigeonReturn = new AuthPigeonFirebaseApp(); + pigeonReturn.setAppName(appName); + pigeonReturn.setTenantId(tenantId); + pigeonReturn.setCustomAuthDomain(customAuthDomain); + return pigeonReturn; + } + } + + @NonNull + public ArrayList toList() { + ArrayList toListResult = new ArrayList<>(3); + toListResult.add(appName); + toListResult.add(tenantId); + toListResult.add(customAuthDomain); + return toListResult; + } + + static @NonNull AuthPigeonFirebaseApp fromList(@NonNull ArrayList pigeonVar_list) { + AuthPigeonFirebaseApp pigeonResult = new AuthPigeonFirebaseApp(); + Object appName = pigeonVar_list.get(0); + pigeonResult.setAppName((String) appName); + Object tenantId = pigeonVar_list.get(1); + pigeonResult.setTenantId((String) tenantId); + Object customAuthDomain = pigeonVar_list.get(2); + pigeonResult.setCustomAuthDomain((String) customAuthDomain); + return pigeonResult; + } + } + + /** Generated class from Pigeon that represents data sent in messages. */ + public static final class InternalActionCodeInfoData { + private @Nullable String email; + + public @Nullable String getEmail() { + return email; + } + + public void setEmail(@Nullable String setterArg) { + this.email = setterArg; + } + + private @Nullable String previousEmail; + + public @Nullable String getPreviousEmail() { + return previousEmail; + } + + public void setPreviousEmail(@Nullable String setterArg) { + this.previousEmail = setterArg; + } + + @Override + public boolean equals(Object o) { + if (this == o) { + return true; + } + if (o == null || getClass() != o.getClass()) { + return false; + } + InternalActionCodeInfoData that = (InternalActionCodeInfoData) o; + return pigeonDeepEquals(email, that.email) + && pigeonDeepEquals(previousEmail, that.previousEmail); + } + + @Override + public int hashCode() { + Object[] fields = new Object[] {getClass(), email, previousEmail}; + return pigeonDeepHashCode(fields); + } + + public static final class Builder { + + private @Nullable String email; + + @CanIgnoreReturnValue + public @NonNull Builder setEmail(@Nullable String setterArg) { + this.email = setterArg; + return this; + } + + private @Nullable String previousEmail; + + @CanIgnoreReturnValue + public @NonNull Builder setPreviousEmail(@Nullable String setterArg) { + this.previousEmail = setterArg; + return this; + } + + public @NonNull InternalActionCodeInfoData build() { + InternalActionCodeInfoData pigeonReturn = new InternalActionCodeInfoData(); + pigeonReturn.setEmail(email); + pigeonReturn.setPreviousEmail(previousEmail); + return pigeonReturn; + } + } + + @NonNull + public ArrayList toList() { + ArrayList toListResult = new ArrayList<>(2); + toListResult.add(email); + toListResult.add(previousEmail); + return toListResult; + } + + static @NonNull InternalActionCodeInfoData fromList(@NonNull ArrayList pigeonVar_list) { + InternalActionCodeInfoData pigeonResult = new InternalActionCodeInfoData(); + Object email = pigeonVar_list.get(0); + pigeonResult.setEmail((String) email); + Object previousEmail = pigeonVar_list.get(1); + pigeonResult.setPreviousEmail((String) previousEmail); + return pigeonResult; + } + } + + /** Generated class from Pigeon that represents data sent in messages. */ + public static final class InternalActionCodeInfo { + private @NonNull ActionCodeInfoOperation operation; + + public @NonNull ActionCodeInfoOperation getOperation() { + return operation; + } + + public void setOperation(@NonNull ActionCodeInfoOperation setterArg) { + if (setterArg == null) { + throw new IllegalStateException("Nonnull field \"operation\" is null."); + } + this.operation = setterArg; + } + + private @NonNull InternalActionCodeInfoData data; + + public @NonNull InternalActionCodeInfoData getData() { + return data; + } + + public void setData(@NonNull InternalActionCodeInfoData setterArg) { + if (setterArg == null) { + throw new IllegalStateException("Nonnull field \"data\" is null."); + } + this.data = setterArg; + } + + /** Constructor is non-public to enforce null safety; use Builder. */ + InternalActionCodeInfo() {} + + @Override + public boolean equals(Object o) { + if (this == o) { + return true; + } + if (o == null || getClass() != o.getClass()) { + return false; + } + InternalActionCodeInfo that = (InternalActionCodeInfo) o; + return pigeonDeepEquals(operation, that.operation) && pigeonDeepEquals(data, that.data); + } + + @Override + public int hashCode() { + Object[] fields = new Object[] {getClass(), operation, data}; + return pigeonDeepHashCode(fields); + } + + public static final class Builder { + + private @Nullable ActionCodeInfoOperation operation; + + @CanIgnoreReturnValue + public @NonNull Builder setOperation(@NonNull ActionCodeInfoOperation setterArg) { + this.operation = setterArg; + return this; + } + + private @Nullable InternalActionCodeInfoData data; + + @CanIgnoreReturnValue + public @NonNull Builder setData(@NonNull InternalActionCodeInfoData setterArg) { + this.data = setterArg; + return this; + } + + public @NonNull InternalActionCodeInfo build() { + InternalActionCodeInfo pigeonReturn = new InternalActionCodeInfo(); + pigeonReturn.setOperation(operation); + pigeonReturn.setData(data); + return pigeonReturn; + } + } + + @NonNull + public ArrayList toList() { + ArrayList toListResult = new ArrayList<>(2); + toListResult.add(operation); + toListResult.add(data); + return toListResult; + } + + static @NonNull InternalActionCodeInfo fromList(@NonNull ArrayList pigeonVar_list) { + InternalActionCodeInfo pigeonResult = new InternalActionCodeInfo(); + Object operation = pigeonVar_list.get(0); + pigeonResult.setOperation((ActionCodeInfoOperation) operation); + Object data = pigeonVar_list.get(1); + pigeonResult.setData((InternalActionCodeInfoData) data); + return pigeonResult; + } + } + + /** Generated class from Pigeon that represents data sent in messages. */ + public static final class InternalAdditionalUserInfo { + private @NonNull Boolean isNewUser; + + public @NonNull Boolean getIsNewUser() { + return isNewUser; + } + + public void setIsNewUser(@NonNull Boolean setterArg) { + if (setterArg == null) { + throw new IllegalStateException("Nonnull field \"isNewUser\" is null."); + } + this.isNewUser = setterArg; + } + + private @Nullable String providerId; + + public @Nullable String getProviderId() { + return providerId; + } + + public void setProviderId(@Nullable String setterArg) { + this.providerId = setterArg; + } + + private @Nullable String username; + + public @Nullable String getUsername() { + return username; + } + + public void setUsername(@Nullable String setterArg) { + this.username = setterArg; + } + + private @Nullable String authorizationCode; + + public @Nullable String getAuthorizationCode() { + return authorizationCode; + } + + public void setAuthorizationCode(@Nullable String setterArg) { + this.authorizationCode = setterArg; + } + + private @Nullable Map profile; + + public @Nullable Map getProfile() { + return profile; + } + + public void setProfile(@Nullable Map setterArg) { + this.profile = setterArg; + } + + /** Constructor is non-public to enforce null safety; use Builder. */ + InternalAdditionalUserInfo() {} + + @Override + public boolean equals(Object o) { + if (this == o) { + return true; + } + if (o == null || getClass() != o.getClass()) { + return false; + } + InternalAdditionalUserInfo that = (InternalAdditionalUserInfo) o; + return pigeonDeepEquals(isNewUser, that.isNewUser) + && pigeonDeepEquals(providerId, that.providerId) + && pigeonDeepEquals(username, that.username) + && pigeonDeepEquals(authorizationCode, that.authorizationCode) + && pigeonDeepEquals(profile, that.profile); + } + + @Override + public int hashCode() { + Object[] fields = + new Object[] {getClass(), isNewUser, providerId, username, authorizationCode, profile}; + return pigeonDeepHashCode(fields); + } + + public static final class Builder { + + private @Nullable Boolean isNewUser; + + @CanIgnoreReturnValue + public @NonNull Builder setIsNewUser(@NonNull Boolean setterArg) { + this.isNewUser = setterArg; + return this; + } + + private @Nullable String providerId; + + @CanIgnoreReturnValue + public @NonNull Builder setProviderId(@Nullable String setterArg) { + this.providerId = setterArg; + return this; + } + + private @Nullable String username; + + @CanIgnoreReturnValue + public @NonNull Builder setUsername(@Nullable String setterArg) { + this.username = setterArg; + return this; + } + + private @Nullable String authorizationCode; + + @CanIgnoreReturnValue + public @NonNull Builder setAuthorizationCode(@Nullable String setterArg) { + this.authorizationCode = setterArg; + return this; + } + + private @Nullable Map profile; + + @CanIgnoreReturnValue + public @NonNull Builder setProfile(@Nullable Map setterArg) { + this.profile = setterArg; + return this; + } + + public @NonNull InternalAdditionalUserInfo build() { + InternalAdditionalUserInfo pigeonReturn = new InternalAdditionalUserInfo(); + pigeonReturn.setIsNewUser(isNewUser); + pigeonReturn.setProviderId(providerId); + pigeonReturn.setUsername(username); + pigeonReturn.setAuthorizationCode(authorizationCode); + pigeonReturn.setProfile(profile); + return pigeonReturn; + } + } + + @NonNull + public ArrayList toList() { + ArrayList toListResult = new ArrayList<>(5); + toListResult.add(isNewUser); + toListResult.add(providerId); + toListResult.add(username); + toListResult.add(authorizationCode); + toListResult.add(profile); + return toListResult; + } + + static @NonNull InternalAdditionalUserInfo fromList(@NonNull ArrayList pigeonVar_list) { + InternalAdditionalUserInfo pigeonResult = new InternalAdditionalUserInfo(); + Object isNewUser = pigeonVar_list.get(0); + pigeonResult.setIsNewUser((Boolean) isNewUser); + Object providerId = pigeonVar_list.get(1); + pigeonResult.setProviderId((String) providerId); + Object username = pigeonVar_list.get(2); + pigeonResult.setUsername((String) username); + Object authorizationCode = pigeonVar_list.get(3); + pigeonResult.setAuthorizationCode((String) authorizationCode); + Object profile = pigeonVar_list.get(4); + pigeonResult.setProfile((Map) profile); + return pigeonResult; + } + } + + /** Generated class from Pigeon that represents data sent in messages. */ + public static final class InternalAuthCredential { + private @NonNull String providerId; + + public @NonNull String getProviderId() { + return providerId; + } + + public void setProviderId(@NonNull String setterArg) { + if (setterArg == null) { + throw new IllegalStateException("Nonnull field \"providerId\" is null."); + } + this.providerId = setterArg; + } + + private @NonNull String signInMethod; + + public @NonNull String getSignInMethod() { + return signInMethod; + } + + public void setSignInMethod(@NonNull String setterArg) { + if (setterArg == null) { + throw new IllegalStateException("Nonnull field \"signInMethod\" is null."); + } + this.signInMethod = setterArg; + } + + private @NonNull Long nativeId; + + public @NonNull Long getNativeId() { + return nativeId; + } + + public void setNativeId(@NonNull Long setterArg) { + if (setterArg == null) { + throw new IllegalStateException("Nonnull field \"nativeId\" is null."); + } + this.nativeId = setterArg; + } + + private @Nullable String accessToken; + + public @Nullable String getAccessToken() { + return accessToken; + } + + public void setAccessToken(@Nullable String setterArg) { + this.accessToken = setterArg; + } + + /** Constructor is non-public to enforce null safety; use Builder. */ + InternalAuthCredential() {} + + @Override + public boolean equals(Object o) { + if (this == o) { + return true; + } + if (o == null || getClass() != o.getClass()) { + return false; + } + InternalAuthCredential that = (InternalAuthCredential) o; + return pigeonDeepEquals(providerId, that.providerId) + && pigeonDeepEquals(signInMethod, that.signInMethod) + && pigeonDeepEquals(nativeId, that.nativeId) + && pigeonDeepEquals(accessToken, that.accessToken); + } + + @Override + public int hashCode() { + Object[] fields = new Object[] {getClass(), providerId, signInMethod, nativeId, accessToken}; + return pigeonDeepHashCode(fields); + } + + public static final class Builder { + + private @Nullable String providerId; + + @CanIgnoreReturnValue + public @NonNull Builder setProviderId(@NonNull String setterArg) { + this.providerId = setterArg; + return this; + } + + private @Nullable String signInMethod; + + @CanIgnoreReturnValue + public @NonNull Builder setSignInMethod(@NonNull String setterArg) { + this.signInMethod = setterArg; + return this; + } + + private @Nullable Long nativeId; + + @CanIgnoreReturnValue + public @NonNull Builder setNativeId(@NonNull Long setterArg) { + this.nativeId = setterArg; + return this; + } + + private @Nullable String accessToken; + + @CanIgnoreReturnValue + public @NonNull Builder setAccessToken(@Nullable String setterArg) { + this.accessToken = setterArg; + return this; + } + + public @NonNull InternalAuthCredential build() { + InternalAuthCredential pigeonReturn = new InternalAuthCredential(); + pigeonReturn.setProviderId(providerId); + pigeonReturn.setSignInMethod(signInMethod); + pigeonReturn.setNativeId(nativeId); + pigeonReturn.setAccessToken(accessToken); + return pigeonReturn; + } + } + + @NonNull + public ArrayList toList() { + ArrayList toListResult = new ArrayList<>(4); + toListResult.add(providerId); + toListResult.add(signInMethod); + toListResult.add(nativeId); + toListResult.add(accessToken); + return toListResult; + } + + static @NonNull InternalAuthCredential fromList(@NonNull ArrayList pigeonVar_list) { + InternalAuthCredential pigeonResult = new InternalAuthCredential(); + Object providerId = pigeonVar_list.get(0); + pigeonResult.setProviderId((String) providerId); + Object signInMethod = pigeonVar_list.get(1); + pigeonResult.setSignInMethod((String) signInMethod); + Object nativeId = pigeonVar_list.get(2); + pigeonResult.setNativeId((Long) nativeId); + Object accessToken = pigeonVar_list.get(3); + pigeonResult.setAccessToken((String) accessToken); + return pigeonResult; + } + } + + /** Generated class from Pigeon that represents data sent in messages. */ + public static final class InternalUserInfo { + private @NonNull String uid; + + public @NonNull String getUid() { + return uid; + } + + public void setUid(@NonNull String setterArg) { + if (setterArg == null) { + throw new IllegalStateException("Nonnull field \"uid\" is null."); + } + this.uid = setterArg; + } + + private @Nullable String email; + + public @Nullable String getEmail() { + return email; + } + + public void setEmail(@Nullable String setterArg) { + this.email = setterArg; + } + + private @Nullable String displayName; + + public @Nullable String getDisplayName() { + return displayName; + } + + public void setDisplayName(@Nullable String setterArg) { + this.displayName = setterArg; + } + + private @Nullable String photoUrl; + + public @Nullable String getPhotoUrl() { + return photoUrl; + } + + public void setPhotoUrl(@Nullable String setterArg) { + this.photoUrl = setterArg; + } + + private @Nullable String phoneNumber; + + public @Nullable String getPhoneNumber() { + return phoneNumber; + } + + public void setPhoneNumber(@Nullable String setterArg) { + this.phoneNumber = setterArg; + } + + private @NonNull Boolean isAnonymous; + + public @NonNull Boolean getIsAnonymous() { + return isAnonymous; + } + + public void setIsAnonymous(@NonNull Boolean setterArg) { + if (setterArg == null) { + throw new IllegalStateException("Nonnull field \"isAnonymous\" is null."); + } + this.isAnonymous = setterArg; + } + + private @NonNull Boolean isEmailVerified; + + public @NonNull Boolean getIsEmailVerified() { + return isEmailVerified; + } + + public void setIsEmailVerified(@NonNull Boolean setterArg) { + if (setterArg == null) { + throw new IllegalStateException("Nonnull field \"isEmailVerified\" is null."); + } + this.isEmailVerified = setterArg; + } + + private @Nullable String providerId; + + public @Nullable String getProviderId() { + return providerId; + } + + public void setProviderId(@Nullable String setterArg) { + this.providerId = setterArg; + } + + private @Nullable String tenantId; + + public @Nullable String getTenantId() { + return tenantId; + } + + public void setTenantId(@Nullable String setterArg) { + this.tenantId = setterArg; + } + + private @Nullable String refreshToken; + + public @Nullable String getRefreshToken() { + return refreshToken; + } + + public void setRefreshToken(@Nullable String setterArg) { + this.refreshToken = setterArg; + } + + private @Nullable Long creationTimestamp; + + public @Nullable Long getCreationTimestamp() { + return creationTimestamp; + } + + public void setCreationTimestamp(@Nullable Long setterArg) { + this.creationTimestamp = setterArg; + } + + private @Nullable Long lastSignInTimestamp; + + public @Nullable Long getLastSignInTimestamp() { + return lastSignInTimestamp; + } + + public void setLastSignInTimestamp(@Nullable Long setterArg) { + this.lastSignInTimestamp = setterArg; + } + + /** Constructor is non-public to enforce null safety; use Builder. */ + InternalUserInfo() {} + + @Override + public boolean equals(Object o) { + if (this == o) { + return true; + } + if (o == null || getClass() != o.getClass()) { + return false; + } + InternalUserInfo that = (InternalUserInfo) o; + return pigeonDeepEquals(uid, that.uid) + && pigeonDeepEquals(email, that.email) + && pigeonDeepEquals(displayName, that.displayName) + && pigeonDeepEquals(photoUrl, that.photoUrl) + && pigeonDeepEquals(phoneNumber, that.phoneNumber) + && pigeonDeepEquals(isAnonymous, that.isAnonymous) + && pigeonDeepEquals(isEmailVerified, that.isEmailVerified) + && pigeonDeepEquals(providerId, that.providerId) + && pigeonDeepEquals(tenantId, that.tenantId) + && pigeonDeepEquals(refreshToken, that.refreshToken) + && pigeonDeepEquals(creationTimestamp, that.creationTimestamp) + && pigeonDeepEquals(lastSignInTimestamp, that.lastSignInTimestamp); + } + + @Override + public int hashCode() { + Object[] fields = + new Object[] { + getClass(), + uid, + email, + displayName, + photoUrl, + phoneNumber, + isAnonymous, + isEmailVerified, + providerId, + tenantId, + refreshToken, + creationTimestamp, + lastSignInTimestamp + }; + return pigeonDeepHashCode(fields); + } + + public static final class Builder { + + private @Nullable String uid; + + @CanIgnoreReturnValue + public @NonNull Builder setUid(@NonNull String setterArg) { + this.uid = setterArg; + return this; + } + + private @Nullable String email; + + @CanIgnoreReturnValue + public @NonNull Builder setEmail(@Nullable String setterArg) { + this.email = setterArg; + return this; + } + + private @Nullable String displayName; + + @CanIgnoreReturnValue + public @NonNull Builder setDisplayName(@Nullable String setterArg) { + this.displayName = setterArg; + return this; + } + + private @Nullable String photoUrl; + + @CanIgnoreReturnValue + public @NonNull Builder setPhotoUrl(@Nullable String setterArg) { + this.photoUrl = setterArg; + return this; + } + + private @Nullable String phoneNumber; + + @CanIgnoreReturnValue + public @NonNull Builder setPhoneNumber(@Nullable String setterArg) { + this.phoneNumber = setterArg; + return this; + } + + private @Nullable Boolean isAnonymous; + + @CanIgnoreReturnValue + public @NonNull Builder setIsAnonymous(@NonNull Boolean setterArg) { + this.isAnonymous = setterArg; + return this; + } + + private @Nullable Boolean isEmailVerified; + + @CanIgnoreReturnValue + public @NonNull Builder setIsEmailVerified(@NonNull Boolean setterArg) { + this.isEmailVerified = setterArg; + return this; + } + + private @Nullable String providerId; + + @CanIgnoreReturnValue + public @NonNull Builder setProviderId(@Nullable String setterArg) { + this.providerId = setterArg; + return this; + } + + private @Nullable String tenantId; + + @CanIgnoreReturnValue + public @NonNull Builder setTenantId(@Nullable String setterArg) { + this.tenantId = setterArg; + return this; + } + + private @Nullable String refreshToken; + + @CanIgnoreReturnValue + public @NonNull Builder setRefreshToken(@Nullable String setterArg) { + this.refreshToken = setterArg; + return this; + } + + private @Nullable Long creationTimestamp; + + @CanIgnoreReturnValue + public @NonNull Builder setCreationTimestamp(@Nullable Long setterArg) { + this.creationTimestamp = setterArg; + return this; + } + + private @Nullable Long lastSignInTimestamp; + + @CanIgnoreReturnValue + public @NonNull Builder setLastSignInTimestamp(@Nullable Long setterArg) { + this.lastSignInTimestamp = setterArg; + return this; + } + + public @NonNull InternalUserInfo build() { + InternalUserInfo pigeonReturn = new InternalUserInfo(); + pigeonReturn.setUid(uid); + pigeonReturn.setEmail(email); + pigeonReturn.setDisplayName(displayName); + pigeonReturn.setPhotoUrl(photoUrl); + pigeonReturn.setPhoneNumber(phoneNumber); + pigeonReturn.setIsAnonymous(isAnonymous); + pigeonReturn.setIsEmailVerified(isEmailVerified); + pigeonReturn.setProviderId(providerId); + pigeonReturn.setTenantId(tenantId); + pigeonReturn.setRefreshToken(refreshToken); + pigeonReturn.setCreationTimestamp(creationTimestamp); + pigeonReturn.setLastSignInTimestamp(lastSignInTimestamp); + return pigeonReturn; + } + } + + @NonNull + public ArrayList toList() { + ArrayList toListResult = new ArrayList<>(12); + toListResult.add(uid); + toListResult.add(email); + toListResult.add(displayName); + toListResult.add(photoUrl); + toListResult.add(phoneNumber); + toListResult.add(isAnonymous); + toListResult.add(isEmailVerified); + toListResult.add(providerId); + toListResult.add(tenantId); + toListResult.add(refreshToken); + toListResult.add(creationTimestamp); + toListResult.add(lastSignInTimestamp); + return toListResult; + } + + static @NonNull InternalUserInfo fromList(@NonNull ArrayList pigeonVar_list) { + InternalUserInfo pigeonResult = new InternalUserInfo(); + Object uid = pigeonVar_list.get(0); + pigeonResult.setUid((String) uid); + Object email = pigeonVar_list.get(1); + pigeonResult.setEmail((String) email); + Object displayName = pigeonVar_list.get(2); + pigeonResult.setDisplayName((String) displayName); + Object photoUrl = pigeonVar_list.get(3); + pigeonResult.setPhotoUrl((String) photoUrl); + Object phoneNumber = pigeonVar_list.get(4); + pigeonResult.setPhoneNumber((String) phoneNumber); + Object isAnonymous = pigeonVar_list.get(5); + pigeonResult.setIsAnonymous((Boolean) isAnonymous); + Object isEmailVerified = pigeonVar_list.get(6); + pigeonResult.setIsEmailVerified((Boolean) isEmailVerified); + Object providerId = pigeonVar_list.get(7); + pigeonResult.setProviderId((String) providerId); + Object tenantId = pigeonVar_list.get(8); + pigeonResult.setTenantId((String) tenantId); + Object refreshToken = pigeonVar_list.get(9); + pigeonResult.setRefreshToken((String) refreshToken); + Object creationTimestamp = pigeonVar_list.get(10); + pigeonResult.setCreationTimestamp((Long) creationTimestamp); + Object lastSignInTimestamp = pigeonVar_list.get(11); + pigeonResult.setLastSignInTimestamp((Long) lastSignInTimestamp); + return pigeonResult; + } + } + + /** Generated class from Pigeon that represents data sent in messages. */ + public static final class InternalUserDetails { + private @NonNull InternalUserInfo userInfo; + + public @NonNull InternalUserInfo getUserInfo() { + return userInfo; + } + + public void setUserInfo(@NonNull InternalUserInfo setterArg) { + if (setterArg == null) { + throw new IllegalStateException("Nonnull field \"userInfo\" is null."); + } + this.userInfo = setterArg; + } + + private @NonNull List> providerData; + + public @NonNull List> getProviderData() { + return providerData; + } + + public void setProviderData(@NonNull List> setterArg) { + if (setterArg == null) { + throw new IllegalStateException("Nonnull field \"providerData\" is null."); + } + this.providerData = setterArg; + } + + /** Constructor is non-public to enforce null safety; use Builder. */ + InternalUserDetails() {} + + @Override + public boolean equals(Object o) { + if (this == o) { + return true; + } + if (o == null || getClass() != o.getClass()) { + return false; + } + InternalUserDetails that = (InternalUserDetails) o; + return pigeonDeepEquals(userInfo, that.userInfo) + && pigeonDeepEquals(providerData, that.providerData); + } + + @Override + public int hashCode() { + Object[] fields = new Object[] {getClass(), userInfo, providerData}; + return pigeonDeepHashCode(fields); + } + + public static final class Builder { + + private @Nullable InternalUserInfo userInfo; + + @CanIgnoreReturnValue + public @NonNull Builder setUserInfo(@NonNull InternalUserInfo setterArg) { + this.userInfo = setterArg; + return this; + } + + private @Nullable List> providerData; + + @CanIgnoreReturnValue + public @NonNull Builder setProviderData(@NonNull List> setterArg) { + this.providerData = setterArg; + return this; + } + + public @NonNull InternalUserDetails build() { + InternalUserDetails pigeonReturn = new InternalUserDetails(); + pigeonReturn.setUserInfo(userInfo); + pigeonReturn.setProviderData(providerData); + return pigeonReturn; + } + } + + @NonNull + public ArrayList toList() { + ArrayList toListResult = new ArrayList<>(2); + toListResult.add(userInfo); + toListResult.add(providerData); + return toListResult; + } + + static @NonNull InternalUserDetails fromList(@NonNull ArrayList pigeonVar_list) { + InternalUserDetails pigeonResult = new InternalUserDetails(); + Object userInfo = pigeonVar_list.get(0); + pigeonResult.setUserInfo((InternalUserInfo) userInfo); + Object providerData = pigeonVar_list.get(1); + pigeonResult.setProviderData((List>) providerData); + return pigeonResult; + } + } + + /** Generated class from Pigeon that represents data sent in messages. */ + public static final class InternalUserCredential { + private @Nullable InternalUserDetails user; + + public @Nullable InternalUserDetails getUser() { + return user; + } + + public void setUser(@Nullable InternalUserDetails setterArg) { + this.user = setterArg; + } + + private @Nullable InternalAdditionalUserInfo additionalUserInfo; + + public @Nullable InternalAdditionalUserInfo getAdditionalUserInfo() { + return additionalUserInfo; + } + + public void setAdditionalUserInfo(@Nullable InternalAdditionalUserInfo setterArg) { + this.additionalUserInfo = setterArg; + } + + private @Nullable InternalAuthCredential credential; + + public @Nullable InternalAuthCredential getCredential() { + return credential; + } + + public void setCredential(@Nullable InternalAuthCredential setterArg) { + this.credential = setterArg; + } + + @Override + public boolean equals(Object o) { + if (this == o) { + return true; + } + if (o == null || getClass() != o.getClass()) { + return false; + } + InternalUserCredential that = (InternalUserCredential) o; + return pigeonDeepEquals(user, that.user) + && pigeonDeepEquals(additionalUserInfo, that.additionalUserInfo) + && pigeonDeepEquals(credential, that.credential); + } + + @Override + public int hashCode() { + Object[] fields = new Object[] {getClass(), user, additionalUserInfo, credential}; + return pigeonDeepHashCode(fields); + } + + public static final class Builder { + + private @Nullable InternalUserDetails user; + + @CanIgnoreReturnValue + public @NonNull Builder setUser(@Nullable InternalUserDetails setterArg) { + this.user = setterArg; + return this; + } + + private @Nullable InternalAdditionalUserInfo additionalUserInfo; + + @CanIgnoreReturnValue + public @NonNull Builder setAdditionalUserInfo( + @Nullable InternalAdditionalUserInfo setterArg) { + this.additionalUserInfo = setterArg; + return this; + } + + private @Nullable InternalAuthCredential credential; + + @CanIgnoreReturnValue + public @NonNull Builder setCredential(@Nullable InternalAuthCredential setterArg) { + this.credential = setterArg; + return this; + } + + public @NonNull InternalUserCredential build() { + InternalUserCredential pigeonReturn = new InternalUserCredential(); + pigeonReturn.setUser(user); + pigeonReturn.setAdditionalUserInfo(additionalUserInfo); + pigeonReturn.setCredential(credential); + return pigeonReturn; + } + } + + @NonNull + public ArrayList toList() { + ArrayList toListResult = new ArrayList<>(3); + toListResult.add(user); + toListResult.add(additionalUserInfo); + toListResult.add(credential); + return toListResult; + } + + static @NonNull InternalUserCredential fromList(@NonNull ArrayList pigeonVar_list) { + InternalUserCredential pigeonResult = new InternalUserCredential(); + Object user = pigeonVar_list.get(0); + pigeonResult.setUser((InternalUserDetails) user); + Object additionalUserInfo = pigeonVar_list.get(1); + pigeonResult.setAdditionalUserInfo((InternalAdditionalUserInfo) additionalUserInfo); + Object credential = pigeonVar_list.get(2); + pigeonResult.setCredential((InternalAuthCredential) credential); + return pigeonResult; + } + } + + /** Generated class from Pigeon that represents data sent in messages. */ + public static final class InternalAuthCredentialInput { + private @NonNull String providerId; + + public @NonNull String getProviderId() { + return providerId; + } + + public void setProviderId(@NonNull String setterArg) { + if (setterArg == null) { + throw new IllegalStateException("Nonnull field \"providerId\" is null."); + } + this.providerId = setterArg; + } + + private @NonNull String signInMethod; + + public @NonNull String getSignInMethod() { + return signInMethod; + } + + public void setSignInMethod(@NonNull String setterArg) { + if (setterArg == null) { + throw new IllegalStateException("Nonnull field \"signInMethod\" is null."); + } + this.signInMethod = setterArg; + } + + private @Nullable String token; + + public @Nullable String getToken() { + return token; + } + + public void setToken(@Nullable String setterArg) { + this.token = setterArg; + } + + private @Nullable String accessToken; + + public @Nullable String getAccessToken() { + return accessToken; + } + + public void setAccessToken(@Nullable String setterArg) { + this.accessToken = setterArg; + } + + /** Constructor is non-public to enforce null safety; use Builder. */ + InternalAuthCredentialInput() {} + + @Override + public boolean equals(Object o) { + if (this == o) { + return true; + } + if (o == null || getClass() != o.getClass()) { + return false; + } + InternalAuthCredentialInput that = (InternalAuthCredentialInput) o; + return pigeonDeepEquals(providerId, that.providerId) + && pigeonDeepEquals(signInMethod, that.signInMethod) + && pigeonDeepEquals(token, that.token) + && pigeonDeepEquals(accessToken, that.accessToken); + } + + @Override + public int hashCode() { + Object[] fields = new Object[] {getClass(), providerId, signInMethod, token, accessToken}; + return pigeonDeepHashCode(fields); + } + + public static final class Builder { + + private @Nullable String providerId; + + @CanIgnoreReturnValue + public @NonNull Builder setProviderId(@NonNull String setterArg) { + this.providerId = setterArg; + return this; + } + + private @Nullable String signInMethod; + + @CanIgnoreReturnValue + public @NonNull Builder setSignInMethod(@NonNull String setterArg) { + this.signInMethod = setterArg; + return this; + } + + private @Nullable String token; + + @CanIgnoreReturnValue + public @NonNull Builder setToken(@Nullable String setterArg) { + this.token = setterArg; + return this; + } + + private @Nullable String accessToken; + + @CanIgnoreReturnValue + public @NonNull Builder setAccessToken(@Nullable String setterArg) { + this.accessToken = setterArg; + return this; + } + + public @NonNull InternalAuthCredentialInput build() { + InternalAuthCredentialInput pigeonReturn = new InternalAuthCredentialInput(); + pigeonReturn.setProviderId(providerId); + pigeonReturn.setSignInMethod(signInMethod); + pigeonReturn.setToken(token); + pigeonReturn.setAccessToken(accessToken); + return pigeonReturn; + } + } + + @NonNull + public ArrayList toList() { + ArrayList toListResult = new ArrayList<>(4); + toListResult.add(providerId); + toListResult.add(signInMethod); + toListResult.add(token); + toListResult.add(accessToken); + return toListResult; + } + + static @NonNull InternalAuthCredentialInput fromList( + @NonNull ArrayList pigeonVar_list) { + InternalAuthCredentialInput pigeonResult = new InternalAuthCredentialInput(); + Object providerId = pigeonVar_list.get(0); + pigeonResult.setProviderId((String) providerId); + Object signInMethod = pigeonVar_list.get(1); + pigeonResult.setSignInMethod((String) signInMethod); + Object token = pigeonVar_list.get(2); + pigeonResult.setToken((String) token); + Object accessToken = pigeonVar_list.get(3); + pigeonResult.setAccessToken((String) accessToken); + return pigeonResult; + } + } + + /** Generated class from Pigeon that represents data sent in messages. */ + public static final class InternalActionCodeSettings { + private @NonNull String url; + + public @NonNull String getUrl() { + return url; + } + + public void setUrl(@NonNull String setterArg) { + if (setterArg == null) { + throw new IllegalStateException("Nonnull field \"url\" is null."); + } + this.url = setterArg; + } + + private @Nullable String dynamicLinkDomain; + + public @Nullable String getDynamicLinkDomain() { + return dynamicLinkDomain; + } + + public void setDynamicLinkDomain(@Nullable String setterArg) { + this.dynamicLinkDomain = setterArg; + } + + private @NonNull Boolean handleCodeInApp; + + public @NonNull Boolean getHandleCodeInApp() { + return handleCodeInApp; + } + + public void setHandleCodeInApp(@NonNull Boolean setterArg) { + if (setterArg == null) { + throw new IllegalStateException("Nonnull field \"handleCodeInApp\" is null."); + } + this.handleCodeInApp = setterArg; + } + + private @Nullable String iOSBundleId; + + public @Nullable String getIOSBundleId() { + return iOSBundleId; + } + + public void setIOSBundleId(@Nullable String setterArg) { + this.iOSBundleId = setterArg; + } + + private @Nullable String androidPackageName; + + public @Nullable String getAndroidPackageName() { + return androidPackageName; + } + + public void setAndroidPackageName(@Nullable String setterArg) { + this.androidPackageName = setterArg; + } + + private @NonNull Boolean androidInstallApp; + + public @NonNull Boolean getAndroidInstallApp() { + return androidInstallApp; + } + + public void setAndroidInstallApp(@NonNull Boolean setterArg) { + if (setterArg == null) { + throw new IllegalStateException("Nonnull field \"androidInstallApp\" is null."); + } + this.androidInstallApp = setterArg; + } + + private @Nullable String androidMinimumVersion; + + public @Nullable String getAndroidMinimumVersion() { + return androidMinimumVersion; + } + + public void setAndroidMinimumVersion(@Nullable String setterArg) { + this.androidMinimumVersion = setterArg; + } + + private @Nullable String linkDomain; + + public @Nullable String getLinkDomain() { + return linkDomain; + } + + public void setLinkDomain(@Nullable String setterArg) { + this.linkDomain = setterArg; + } + + /** Constructor is non-public to enforce null safety; use Builder. */ + InternalActionCodeSettings() {} + + @Override + public boolean equals(Object o) { + if (this == o) { + return true; + } + if (o == null || getClass() != o.getClass()) { + return false; + } + InternalActionCodeSettings that = (InternalActionCodeSettings) o; + return pigeonDeepEquals(url, that.url) + && pigeonDeepEquals(dynamicLinkDomain, that.dynamicLinkDomain) + && pigeonDeepEquals(handleCodeInApp, that.handleCodeInApp) + && pigeonDeepEquals(iOSBundleId, that.iOSBundleId) + && pigeonDeepEquals(androidPackageName, that.androidPackageName) + && pigeonDeepEquals(androidInstallApp, that.androidInstallApp) + && pigeonDeepEquals(androidMinimumVersion, that.androidMinimumVersion) + && pigeonDeepEquals(linkDomain, that.linkDomain); + } + + @Override + public int hashCode() { + Object[] fields = + new Object[] { + getClass(), + url, + dynamicLinkDomain, + handleCodeInApp, + iOSBundleId, + androidPackageName, + androidInstallApp, + androidMinimumVersion, + linkDomain + }; + return pigeonDeepHashCode(fields); + } + + public static final class Builder { + + private @Nullable String url; + + @CanIgnoreReturnValue + public @NonNull Builder setUrl(@NonNull String setterArg) { + this.url = setterArg; + return this; + } + + private @Nullable String dynamicLinkDomain; + + @CanIgnoreReturnValue + public @NonNull Builder setDynamicLinkDomain(@Nullable String setterArg) { + this.dynamicLinkDomain = setterArg; + return this; + } + + private @Nullable Boolean handleCodeInApp; + + @CanIgnoreReturnValue + public @NonNull Builder setHandleCodeInApp(@NonNull Boolean setterArg) { + this.handleCodeInApp = setterArg; + return this; + } + + private @Nullable String iOSBundleId; + + @CanIgnoreReturnValue + public @NonNull Builder setIOSBundleId(@Nullable String setterArg) { + this.iOSBundleId = setterArg; + return this; + } + + private @Nullable String androidPackageName; + + @CanIgnoreReturnValue + public @NonNull Builder setAndroidPackageName(@Nullable String setterArg) { + this.androidPackageName = setterArg; + return this; + } + + private @Nullable Boolean androidInstallApp; + + @CanIgnoreReturnValue + public @NonNull Builder setAndroidInstallApp(@NonNull Boolean setterArg) { + this.androidInstallApp = setterArg; + return this; + } + + private @Nullable String androidMinimumVersion; + + @CanIgnoreReturnValue + public @NonNull Builder setAndroidMinimumVersion(@Nullable String setterArg) { + this.androidMinimumVersion = setterArg; + return this; + } + + private @Nullable String linkDomain; + + @CanIgnoreReturnValue + public @NonNull Builder setLinkDomain(@Nullable String setterArg) { + this.linkDomain = setterArg; + return this; + } + + public @NonNull InternalActionCodeSettings build() { + InternalActionCodeSettings pigeonReturn = new InternalActionCodeSettings(); + pigeonReturn.setUrl(url); + pigeonReturn.setDynamicLinkDomain(dynamicLinkDomain); + pigeonReturn.setHandleCodeInApp(handleCodeInApp); + pigeonReturn.setIOSBundleId(iOSBundleId); + pigeonReturn.setAndroidPackageName(androidPackageName); + pigeonReturn.setAndroidInstallApp(androidInstallApp); + pigeonReturn.setAndroidMinimumVersion(androidMinimumVersion); + pigeonReturn.setLinkDomain(linkDomain); + return pigeonReturn; + } + } + + @NonNull + public ArrayList toList() { + ArrayList toListResult = new ArrayList<>(8); + toListResult.add(url); + toListResult.add(dynamicLinkDomain); + toListResult.add(handleCodeInApp); + toListResult.add(iOSBundleId); + toListResult.add(androidPackageName); + toListResult.add(androidInstallApp); + toListResult.add(androidMinimumVersion); + toListResult.add(linkDomain); + return toListResult; + } + + static @NonNull InternalActionCodeSettings fromList(@NonNull ArrayList pigeonVar_list) { + InternalActionCodeSettings pigeonResult = new InternalActionCodeSettings(); + Object url = pigeonVar_list.get(0); + pigeonResult.setUrl((String) url); + Object dynamicLinkDomain = pigeonVar_list.get(1); + pigeonResult.setDynamicLinkDomain((String) dynamicLinkDomain); + Object handleCodeInApp = pigeonVar_list.get(2); + pigeonResult.setHandleCodeInApp((Boolean) handleCodeInApp); + Object iOSBundleId = pigeonVar_list.get(3); + pigeonResult.setIOSBundleId((String) iOSBundleId); + Object androidPackageName = pigeonVar_list.get(4); + pigeonResult.setAndroidPackageName((String) androidPackageName); + Object androidInstallApp = pigeonVar_list.get(5); + pigeonResult.setAndroidInstallApp((Boolean) androidInstallApp); + Object androidMinimumVersion = pigeonVar_list.get(6); + pigeonResult.setAndroidMinimumVersion((String) androidMinimumVersion); + Object linkDomain = pigeonVar_list.get(7); + pigeonResult.setLinkDomain((String) linkDomain); + return pigeonResult; + } + } + + /** Generated class from Pigeon that represents data sent in messages. */ + public static final class InternalFirebaseAuthSettings { + private @NonNull Boolean appVerificationDisabledForTesting; + + public @NonNull Boolean getAppVerificationDisabledForTesting() { + return appVerificationDisabledForTesting; + } + + public void setAppVerificationDisabledForTesting(@NonNull Boolean setterArg) { + if (setterArg == null) { + throw new IllegalStateException( + "Nonnull field \"appVerificationDisabledForTesting\" is null."); + } + this.appVerificationDisabledForTesting = setterArg; + } + + private @Nullable String userAccessGroup; + + public @Nullable String getUserAccessGroup() { + return userAccessGroup; + } + + public void setUserAccessGroup(@Nullable String setterArg) { + this.userAccessGroup = setterArg; + } + + private @Nullable String phoneNumber; + + public @Nullable String getPhoneNumber() { + return phoneNumber; + } + + public void setPhoneNumber(@Nullable String setterArg) { + this.phoneNumber = setterArg; + } + + private @Nullable String smsCode; + + public @Nullable String getSmsCode() { + return smsCode; + } + + public void setSmsCode(@Nullable String setterArg) { + this.smsCode = setterArg; + } + + private @Nullable Boolean forceRecaptchaFlow; + + public @Nullable Boolean getForceRecaptchaFlow() { + return forceRecaptchaFlow; + } + + public void setForceRecaptchaFlow(@Nullable Boolean setterArg) { + this.forceRecaptchaFlow = setterArg; + } + + /** Constructor is non-public to enforce null safety; use Builder. */ + InternalFirebaseAuthSettings() {} + + @Override + public boolean equals(Object o) { + if (this == o) { + return true; + } + if (o == null || getClass() != o.getClass()) { + return false; + } + InternalFirebaseAuthSettings that = (InternalFirebaseAuthSettings) o; + return pigeonDeepEquals( + appVerificationDisabledForTesting, that.appVerificationDisabledForTesting) + && pigeonDeepEquals(userAccessGroup, that.userAccessGroup) + && pigeonDeepEquals(phoneNumber, that.phoneNumber) + && pigeonDeepEquals(smsCode, that.smsCode) + && pigeonDeepEquals(forceRecaptchaFlow, that.forceRecaptchaFlow); + } + + @Override + public int hashCode() { + Object[] fields = + new Object[] { + getClass(), + appVerificationDisabledForTesting, + userAccessGroup, + phoneNumber, + smsCode, + forceRecaptchaFlow + }; + return pigeonDeepHashCode(fields); + } + + public static final class Builder { + + private @Nullable Boolean appVerificationDisabledForTesting; + + @CanIgnoreReturnValue + public @NonNull Builder setAppVerificationDisabledForTesting(@NonNull Boolean setterArg) { + this.appVerificationDisabledForTesting = setterArg; + return this; + } + + private @Nullable String userAccessGroup; + + @CanIgnoreReturnValue + public @NonNull Builder setUserAccessGroup(@Nullable String setterArg) { + this.userAccessGroup = setterArg; + return this; + } + + private @Nullable String phoneNumber; + + @CanIgnoreReturnValue + public @NonNull Builder setPhoneNumber(@Nullable String setterArg) { + this.phoneNumber = setterArg; + return this; + } + + private @Nullable String smsCode; + + @CanIgnoreReturnValue + public @NonNull Builder setSmsCode(@Nullable String setterArg) { + this.smsCode = setterArg; + return this; + } + + private @Nullable Boolean forceRecaptchaFlow; + + @CanIgnoreReturnValue + public @NonNull Builder setForceRecaptchaFlow(@Nullable Boolean setterArg) { + this.forceRecaptchaFlow = setterArg; + return this; + } + + public @NonNull InternalFirebaseAuthSettings build() { + InternalFirebaseAuthSettings pigeonReturn = new InternalFirebaseAuthSettings(); + pigeonReturn.setAppVerificationDisabledForTesting(appVerificationDisabledForTesting); + pigeonReturn.setUserAccessGroup(userAccessGroup); + pigeonReturn.setPhoneNumber(phoneNumber); + pigeonReturn.setSmsCode(smsCode); + pigeonReturn.setForceRecaptchaFlow(forceRecaptchaFlow); + return pigeonReturn; + } + } + + @NonNull + public ArrayList toList() { + ArrayList toListResult = new ArrayList<>(5); + toListResult.add(appVerificationDisabledForTesting); + toListResult.add(userAccessGroup); + toListResult.add(phoneNumber); + toListResult.add(smsCode); + toListResult.add(forceRecaptchaFlow); + return toListResult; + } + + static @NonNull InternalFirebaseAuthSettings fromList( + @NonNull ArrayList pigeonVar_list) { + InternalFirebaseAuthSettings pigeonResult = new InternalFirebaseAuthSettings(); + Object appVerificationDisabledForTesting = pigeonVar_list.get(0); + pigeonResult.setAppVerificationDisabledForTesting( + (Boolean) appVerificationDisabledForTesting); + Object userAccessGroup = pigeonVar_list.get(1); + pigeonResult.setUserAccessGroup((String) userAccessGroup); + Object phoneNumber = pigeonVar_list.get(2); + pigeonResult.setPhoneNumber((String) phoneNumber); + Object smsCode = pigeonVar_list.get(3); + pigeonResult.setSmsCode((String) smsCode); + Object forceRecaptchaFlow = pigeonVar_list.get(4); + pigeonResult.setForceRecaptchaFlow((Boolean) forceRecaptchaFlow); + return pigeonResult; + } + } + + /** Generated class from Pigeon that represents data sent in messages. */ + public static final class InternalSignInProvider { + private @NonNull String providerId; + + public @NonNull String getProviderId() { + return providerId; + } + + public void setProviderId(@NonNull String setterArg) { + if (setterArg == null) { + throw new IllegalStateException("Nonnull field \"providerId\" is null."); + } + this.providerId = setterArg; + } + + private @Nullable List scopes; + + public @Nullable List getScopes() { + return scopes; + } + + public void setScopes(@Nullable List setterArg) { + this.scopes = setterArg; + } + + private @Nullable Map customParameters; + + public @Nullable Map getCustomParameters() { + return customParameters; + } + + public void setCustomParameters(@Nullable Map setterArg) { + this.customParameters = setterArg; + } + + /** Constructor is non-public to enforce null safety; use Builder. */ + InternalSignInProvider() {} + + @Override + public boolean equals(Object o) { + if (this == o) { + return true; + } + if (o == null || getClass() != o.getClass()) { + return false; + } + InternalSignInProvider that = (InternalSignInProvider) o; + return pigeonDeepEquals(providerId, that.providerId) + && pigeonDeepEquals(scopes, that.scopes) + && pigeonDeepEquals(customParameters, that.customParameters); + } + + @Override + public int hashCode() { + Object[] fields = new Object[] {getClass(), providerId, scopes, customParameters}; + return pigeonDeepHashCode(fields); + } + + public static final class Builder { + + private @Nullable String providerId; + + @CanIgnoreReturnValue + public @NonNull Builder setProviderId(@NonNull String setterArg) { + this.providerId = setterArg; + return this; + } + + private @Nullable List scopes; + + @CanIgnoreReturnValue + public @NonNull Builder setScopes(@Nullable List setterArg) { + this.scopes = setterArg; + return this; + } + + private @Nullable Map customParameters; + + @CanIgnoreReturnValue + public @NonNull Builder setCustomParameters(@Nullable Map setterArg) { + this.customParameters = setterArg; + return this; + } + + public @NonNull InternalSignInProvider build() { + InternalSignInProvider pigeonReturn = new InternalSignInProvider(); + pigeonReturn.setProviderId(providerId); + pigeonReturn.setScopes(scopes); + pigeonReturn.setCustomParameters(customParameters); + return pigeonReturn; + } + } + + @NonNull + public ArrayList toList() { + ArrayList toListResult = new ArrayList<>(3); + toListResult.add(providerId); + toListResult.add(scopes); + toListResult.add(customParameters); + return toListResult; + } + + static @NonNull InternalSignInProvider fromList(@NonNull ArrayList pigeonVar_list) { + InternalSignInProvider pigeonResult = new InternalSignInProvider(); + Object providerId = pigeonVar_list.get(0); + pigeonResult.setProviderId((String) providerId); + Object scopes = pigeonVar_list.get(1); + pigeonResult.setScopes((List) scopes); + Object customParameters = pigeonVar_list.get(2); + pigeonResult.setCustomParameters((Map) customParameters); + return pigeonResult; + } + } + + /** Generated class from Pigeon that represents data sent in messages. */ + public static final class InternalVerifyPhoneNumberRequest { + private @Nullable String phoneNumber; + + public @Nullable String getPhoneNumber() { + return phoneNumber; + } + + public void setPhoneNumber(@Nullable String setterArg) { + this.phoneNumber = setterArg; + } + + private @NonNull Long timeout; + + public @NonNull Long getTimeout() { + return timeout; + } + + public void setTimeout(@NonNull Long setterArg) { + if (setterArg == null) { + throw new IllegalStateException("Nonnull field \"timeout\" is null."); + } + this.timeout = setterArg; + } + + private @Nullable Long forceResendingToken; + + public @Nullable Long getForceResendingToken() { + return forceResendingToken; + } + + public void setForceResendingToken(@Nullable Long setterArg) { + this.forceResendingToken = setterArg; + } + + private @Nullable String autoRetrievedSmsCodeForTesting; + + public @Nullable String getAutoRetrievedSmsCodeForTesting() { + return autoRetrievedSmsCodeForTesting; + } + + public void setAutoRetrievedSmsCodeForTesting(@Nullable String setterArg) { + this.autoRetrievedSmsCodeForTesting = setterArg; + } + + private @Nullable String multiFactorInfoId; + + public @Nullable String getMultiFactorInfoId() { + return multiFactorInfoId; + } + + public void setMultiFactorInfoId(@Nullable String setterArg) { + this.multiFactorInfoId = setterArg; + } + + private @Nullable String multiFactorSessionId; + + public @Nullable String getMultiFactorSessionId() { + return multiFactorSessionId; + } + + public void setMultiFactorSessionId(@Nullable String setterArg) { + this.multiFactorSessionId = setterArg; + } + + /** Constructor is non-public to enforce null safety; use Builder. */ + InternalVerifyPhoneNumberRequest() {} + + @Override + public boolean equals(Object o) { + if (this == o) { + return true; + } + if (o == null || getClass() != o.getClass()) { + return false; + } + InternalVerifyPhoneNumberRequest that = (InternalVerifyPhoneNumberRequest) o; + return pigeonDeepEquals(phoneNumber, that.phoneNumber) + && pigeonDeepEquals(timeout, that.timeout) + && pigeonDeepEquals(forceResendingToken, that.forceResendingToken) + && pigeonDeepEquals(autoRetrievedSmsCodeForTesting, that.autoRetrievedSmsCodeForTesting) + && pigeonDeepEquals(multiFactorInfoId, that.multiFactorInfoId) + && pigeonDeepEquals(multiFactorSessionId, that.multiFactorSessionId); + } + + @Override + public int hashCode() { + Object[] fields = + new Object[] { + getClass(), + phoneNumber, + timeout, + forceResendingToken, + autoRetrievedSmsCodeForTesting, + multiFactorInfoId, + multiFactorSessionId + }; + return pigeonDeepHashCode(fields); + } + + public static final class Builder { + + private @Nullable String phoneNumber; + + @CanIgnoreReturnValue + public @NonNull Builder setPhoneNumber(@Nullable String setterArg) { + this.phoneNumber = setterArg; + return this; + } + + private @Nullable Long timeout; + + @CanIgnoreReturnValue + public @NonNull Builder setTimeout(@NonNull Long setterArg) { + this.timeout = setterArg; + return this; + } + + private @Nullable Long forceResendingToken; + + @CanIgnoreReturnValue + public @NonNull Builder setForceResendingToken(@Nullable Long setterArg) { + this.forceResendingToken = setterArg; + return this; + } + + private @Nullable String autoRetrievedSmsCodeForTesting; + + @CanIgnoreReturnValue + public @NonNull Builder setAutoRetrievedSmsCodeForTesting(@Nullable String setterArg) { + this.autoRetrievedSmsCodeForTesting = setterArg; + return this; + } + + private @Nullable String multiFactorInfoId; + + @CanIgnoreReturnValue + public @NonNull Builder setMultiFactorInfoId(@Nullable String setterArg) { + this.multiFactorInfoId = setterArg; + return this; + } + + private @Nullable String multiFactorSessionId; + + @CanIgnoreReturnValue + public @NonNull Builder setMultiFactorSessionId(@Nullable String setterArg) { + this.multiFactorSessionId = setterArg; + return this; + } + + public @NonNull InternalVerifyPhoneNumberRequest build() { + InternalVerifyPhoneNumberRequest pigeonReturn = new InternalVerifyPhoneNumberRequest(); + pigeonReturn.setPhoneNumber(phoneNumber); + pigeonReturn.setTimeout(timeout); + pigeonReturn.setForceResendingToken(forceResendingToken); + pigeonReturn.setAutoRetrievedSmsCodeForTesting(autoRetrievedSmsCodeForTesting); + pigeonReturn.setMultiFactorInfoId(multiFactorInfoId); + pigeonReturn.setMultiFactorSessionId(multiFactorSessionId); + return pigeonReturn; + } + } + + @NonNull + public ArrayList toList() { + ArrayList toListResult = new ArrayList<>(6); + toListResult.add(phoneNumber); + toListResult.add(timeout); + toListResult.add(forceResendingToken); + toListResult.add(autoRetrievedSmsCodeForTesting); + toListResult.add(multiFactorInfoId); + toListResult.add(multiFactorSessionId); + return toListResult; + } + + static @NonNull InternalVerifyPhoneNumberRequest fromList( + @NonNull ArrayList pigeonVar_list) { + InternalVerifyPhoneNumberRequest pigeonResult = new InternalVerifyPhoneNumberRequest(); + Object phoneNumber = pigeonVar_list.get(0); + pigeonResult.setPhoneNumber((String) phoneNumber); + Object timeout = pigeonVar_list.get(1); + pigeonResult.setTimeout((Long) timeout); + Object forceResendingToken = pigeonVar_list.get(2); + pigeonResult.setForceResendingToken((Long) forceResendingToken); + Object autoRetrievedSmsCodeForTesting = pigeonVar_list.get(3); + pigeonResult.setAutoRetrievedSmsCodeForTesting((String) autoRetrievedSmsCodeForTesting); + Object multiFactorInfoId = pigeonVar_list.get(4); + pigeonResult.setMultiFactorInfoId((String) multiFactorInfoId); + Object multiFactorSessionId = pigeonVar_list.get(5); + pigeonResult.setMultiFactorSessionId((String) multiFactorSessionId); + return pigeonResult; + } + } + + /** Generated class from Pigeon that represents data sent in messages. */ + public static final class InternalIdTokenResult { + private @Nullable String token; + + public @Nullable String getToken() { + return token; + } + + public void setToken(@Nullable String setterArg) { + this.token = setterArg; + } + + private @Nullable Long expirationTimestamp; + + public @Nullable Long getExpirationTimestamp() { + return expirationTimestamp; + } + + public void setExpirationTimestamp(@Nullable Long setterArg) { + this.expirationTimestamp = setterArg; + } + + private @Nullable Long authTimestamp; + + public @Nullable Long getAuthTimestamp() { + return authTimestamp; + } + + public void setAuthTimestamp(@Nullable Long setterArg) { + this.authTimestamp = setterArg; + } + + private @Nullable Long issuedAtTimestamp; + + public @Nullable Long getIssuedAtTimestamp() { + return issuedAtTimestamp; + } + + public void setIssuedAtTimestamp(@Nullable Long setterArg) { + this.issuedAtTimestamp = setterArg; + } + + private @Nullable String signInProvider; + + public @Nullable String getSignInProvider() { + return signInProvider; + } + + public void setSignInProvider(@Nullable String setterArg) { + this.signInProvider = setterArg; + } + + private @Nullable Map claims; + + public @Nullable Map getClaims() { + return claims; + } + + public void setClaims(@Nullable Map setterArg) { + this.claims = setterArg; + } + + private @Nullable String signInSecondFactor; + + public @Nullable String getSignInSecondFactor() { + return signInSecondFactor; + } + + public void setSignInSecondFactor(@Nullable String setterArg) { + this.signInSecondFactor = setterArg; + } + + @Override + public boolean equals(Object o) { + if (this == o) { + return true; + } + if (o == null || getClass() != o.getClass()) { + return false; + } + InternalIdTokenResult that = (InternalIdTokenResult) o; + return pigeonDeepEquals(token, that.token) + && pigeonDeepEquals(expirationTimestamp, that.expirationTimestamp) + && pigeonDeepEquals(authTimestamp, that.authTimestamp) + && pigeonDeepEquals(issuedAtTimestamp, that.issuedAtTimestamp) + && pigeonDeepEquals(signInProvider, that.signInProvider) + && pigeonDeepEquals(claims, that.claims) + && pigeonDeepEquals(signInSecondFactor, that.signInSecondFactor); + } + + @Override + public int hashCode() { + Object[] fields = + new Object[] { + getClass(), + token, + expirationTimestamp, + authTimestamp, + issuedAtTimestamp, + signInProvider, + claims, + signInSecondFactor + }; + return pigeonDeepHashCode(fields); + } + + public static final class Builder { + + private @Nullable String token; + + @CanIgnoreReturnValue + public @NonNull Builder setToken(@Nullable String setterArg) { + this.token = setterArg; + return this; + } + + private @Nullable Long expirationTimestamp; + + @CanIgnoreReturnValue + public @NonNull Builder setExpirationTimestamp(@Nullable Long setterArg) { + this.expirationTimestamp = setterArg; + return this; + } + + private @Nullable Long authTimestamp; + + @CanIgnoreReturnValue + public @NonNull Builder setAuthTimestamp(@Nullable Long setterArg) { + this.authTimestamp = setterArg; + return this; + } + + private @Nullable Long issuedAtTimestamp; + + @CanIgnoreReturnValue + public @NonNull Builder setIssuedAtTimestamp(@Nullable Long setterArg) { + this.issuedAtTimestamp = setterArg; + return this; + } + + private @Nullable String signInProvider; + + @CanIgnoreReturnValue + public @NonNull Builder setSignInProvider(@Nullable String setterArg) { + this.signInProvider = setterArg; + return this; + } + + private @Nullable Map claims; + + @CanIgnoreReturnValue + public @NonNull Builder setClaims(@Nullable Map setterArg) { + this.claims = setterArg; + return this; + } + + private @Nullable String signInSecondFactor; + + @CanIgnoreReturnValue + public @NonNull Builder setSignInSecondFactor(@Nullable String setterArg) { + this.signInSecondFactor = setterArg; + return this; + } + + public @NonNull InternalIdTokenResult build() { + InternalIdTokenResult pigeonReturn = new InternalIdTokenResult(); + pigeonReturn.setToken(token); + pigeonReturn.setExpirationTimestamp(expirationTimestamp); + pigeonReturn.setAuthTimestamp(authTimestamp); + pigeonReturn.setIssuedAtTimestamp(issuedAtTimestamp); + pigeonReturn.setSignInProvider(signInProvider); + pigeonReturn.setClaims(claims); + pigeonReturn.setSignInSecondFactor(signInSecondFactor); + return pigeonReturn; + } + } + + @NonNull + public ArrayList toList() { + ArrayList toListResult = new ArrayList<>(7); + toListResult.add(token); + toListResult.add(expirationTimestamp); + toListResult.add(authTimestamp); + toListResult.add(issuedAtTimestamp); + toListResult.add(signInProvider); + toListResult.add(claims); + toListResult.add(signInSecondFactor); + return toListResult; + } + + static @NonNull InternalIdTokenResult fromList(@NonNull ArrayList pigeonVar_list) { + InternalIdTokenResult pigeonResult = new InternalIdTokenResult(); + Object token = pigeonVar_list.get(0); + pigeonResult.setToken((String) token); + Object expirationTimestamp = pigeonVar_list.get(1); + pigeonResult.setExpirationTimestamp((Long) expirationTimestamp); + Object authTimestamp = pigeonVar_list.get(2); + pigeonResult.setAuthTimestamp((Long) authTimestamp); + Object issuedAtTimestamp = pigeonVar_list.get(3); + pigeonResult.setIssuedAtTimestamp((Long) issuedAtTimestamp); + Object signInProvider = pigeonVar_list.get(4); + pigeonResult.setSignInProvider((String) signInProvider); + Object claims = pigeonVar_list.get(5); + pigeonResult.setClaims((Map) claims); + Object signInSecondFactor = pigeonVar_list.get(6); + pigeonResult.setSignInSecondFactor((String) signInSecondFactor); + return pigeonResult; + } + } + + /** Generated class from Pigeon that represents data sent in messages. */ + public static final class InternalUserProfile { + private @Nullable String displayName; + + public @Nullable String getDisplayName() { + return displayName; + } + + public void setDisplayName(@Nullable String setterArg) { + this.displayName = setterArg; + } + + private @Nullable String photoUrl; + + public @Nullable String getPhotoUrl() { + return photoUrl; + } + + public void setPhotoUrl(@Nullable String setterArg) { + this.photoUrl = setterArg; + } + + private @NonNull Boolean displayNameChanged; + + public @NonNull Boolean getDisplayNameChanged() { + return displayNameChanged; + } + + public void setDisplayNameChanged(@NonNull Boolean setterArg) { + if (setterArg == null) { + throw new IllegalStateException("Nonnull field \"displayNameChanged\" is null."); + } + this.displayNameChanged = setterArg; + } + + private @NonNull Boolean photoUrlChanged; + + public @NonNull Boolean getPhotoUrlChanged() { + return photoUrlChanged; + } + + public void setPhotoUrlChanged(@NonNull Boolean setterArg) { + if (setterArg == null) { + throw new IllegalStateException("Nonnull field \"photoUrlChanged\" is null."); + } + this.photoUrlChanged = setterArg; + } + + /** Constructor is non-public to enforce null safety; use Builder. */ + InternalUserProfile() {} + + @Override + public boolean equals(Object o) { + if (this == o) { + return true; + } + if (o == null || getClass() != o.getClass()) { + return false; + } + InternalUserProfile that = (InternalUserProfile) o; + return pigeonDeepEquals(displayName, that.displayName) + && pigeonDeepEquals(photoUrl, that.photoUrl) + && pigeonDeepEquals(displayNameChanged, that.displayNameChanged) + && pigeonDeepEquals(photoUrlChanged, that.photoUrlChanged); + } + + @Override + public int hashCode() { + Object[] fields = + new Object[] {getClass(), displayName, photoUrl, displayNameChanged, photoUrlChanged}; + return pigeonDeepHashCode(fields); + } + + public static final class Builder { + + private @Nullable String displayName; + + @CanIgnoreReturnValue + public @NonNull Builder setDisplayName(@Nullable String setterArg) { + this.displayName = setterArg; + return this; + } + + private @Nullable String photoUrl; + + @CanIgnoreReturnValue + public @NonNull Builder setPhotoUrl(@Nullable String setterArg) { + this.photoUrl = setterArg; + return this; + } + + private @Nullable Boolean displayNameChanged; + + @CanIgnoreReturnValue + public @NonNull Builder setDisplayNameChanged(@NonNull Boolean setterArg) { + this.displayNameChanged = setterArg; + return this; + } + + private @Nullable Boolean photoUrlChanged; + + @CanIgnoreReturnValue + public @NonNull Builder setPhotoUrlChanged(@NonNull Boolean setterArg) { + this.photoUrlChanged = setterArg; + return this; + } + + public @NonNull InternalUserProfile build() { + InternalUserProfile pigeonReturn = new InternalUserProfile(); + pigeonReturn.setDisplayName(displayName); + pigeonReturn.setPhotoUrl(photoUrl); + pigeonReturn.setDisplayNameChanged(displayNameChanged); + pigeonReturn.setPhotoUrlChanged(photoUrlChanged); + return pigeonReturn; + } + } + + @NonNull + public ArrayList toList() { + ArrayList toListResult = new ArrayList<>(4); + toListResult.add(displayName); + toListResult.add(photoUrl); + toListResult.add(displayNameChanged); + toListResult.add(photoUrlChanged); + return toListResult; + } + + static @NonNull InternalUserProfile fromList(@NonNull ArrayList pigeonVar_list) { + InternalUserProfile pigeonResult = new InternalUserProfile(); + Object displayName = pigeonVar_list.get(0); + pigeonResult.setDisplayName((String) displayName); + Object photoUrl = pigeonVar_list.get(1); + pigeonResult.setPhotoUrl((String) photoUrl); + Object displayNameChanged = pigeonVar_list.get(2); + pigeonResult.setDisplayNameChanged((Boolean) displayNameChanged); + Object photoUrlChanged = pigeonVar_list.get(3); + pigeonResult.setPhotoUrlChanged((Boolean) photoUrlChanged); + return pigeonResult; + } + } + + /** Generated class from Pigeon that represents data sent in messages. */ + public static final class InternalTotpSecret { + private @Nullable Long codeIntervalSeconds; + + public @Nullable Long getCodeIntervalSeconds() { + return codeIntervalSeconds; + } + + public void setCodeIntervalSeconds(@Nullable Long setterArg) { + this.codeIntervalSeconds = setterArg; + } + + private @Nullable Long codeLength; + + public @Nullable Long getCodeLength() { + return codeLength; + } + + public void setCodeLength(@Nullable Long setterArg) { + this.codeLength = setterArg; + } + + private @Nullable Long enrollmentCompletionDeadline; + + public @Nullable Long getEnrollmentCompletionDeadline() { + return enrollmentCompletionDeadline; + } + + public void setEnrollmentCompletionDeadline(@Nullable Long setterArg) { + this.enrollmentCompletionDeadline = setterArg; + } + + private @Nullable String hashingAlgorithm; + + public @Nullable String getHashingAlgorithm() { + return hashingAlgorithm; + } + + public void setHashingAlgorithm(@Nullable String setterArg) { + this.hashingAlgorithm = setterArg; + } + + private @NonNull String secretKey; + + public @NonNull String getSecretKey() { + return secretKey; + } + + public void setSecretKey(@NonNull String setterArg) { + if (setterArg == null) { + throw new IllegalStateException("Nonnull field \"secretKey\" is null."); + } + this.secretKey = setterArg; + } + + /** Constructor is non-public to enforce null safety; use Builder. */ + InternalTotpSecret() {} + + @Override + public boolean equals(Object o) { + if (this == o) { + return true; + } + if (o == null || getClass() != o.getClass()) { + return false; + } + InternalTotpSecret that = (InternalTotpSecret) o; + return pigeonDeepEquals(codeIntervalSeconds, that.codeIntervalSeconds) + && pigeonDeepEquals(codeLength, that.codeLength) + && pigeonDeepEquals(enrollmentCompletionDeadline, that.enrollmentCompletionDeadline) + && pigeonDeepEquals(hashingAlgorithm, that.hashingAlgorithm) + && pigeonDeepEquals(secretKey, that.secretKey); + } + + @Override + public int hashCode() { + Object[] fields = + new Object[] { + getClass(), + codeIntervalSeconds, + codeLength, + enrollmentCompletionDeadline, + hashingAlgorithm, + secretKey + }; + return pigeonDeepHashCode(fields); + } + + public static final class Builder { + + private @Nullable Long codeIntervalSeconds; + + @CanIgnoreReturnValue + public @NonNull Builder setCodeIntervalSeconds(@Nullable Long setterArg) { + this.codeIntervalSeconds = setterArg; + return this; + } + + private @Nullable Long codeLength; + + @CanIgnoreReturnValue + public @NonNull Builder setCodeLength(@Nullable Long setterArg) { + this.codeLength = setterArg; + return this; + } + + private @Nullable Long enrollmentCompletionDeadline; + + @CanIgnoreReturnValue + public @NonNull Builder setEnrollmentCompletionDeadline(@Nullable Long setterArg) { + this.enrollmentCompletionDeadline = setterArg; + return this; + } + + private @Nullable String hashingAlgorithm; + + @CanIgnoreReturnValue + public @NonNull Builder setHashingAlgorithm(@Nullable String setterArg) { + this.hashingAlgorithm = setterArg; + return this; + } + + private @Nullable String secretKey; + + @CanIgnoreReturnValue + public @NonNull Builder setSecretKey(@NonNull String setterArg) { + this.secretKey = setterArg; + return this; + } + + public @NonNull InternalTotpSecret build() { + InternalTotpSecret pigeonReturn = new InternalTotpSecret(); + pigeonReturn.setCodeIntervalSeconds(codeIntervalSeconds); + pigeonReturn.setCodeLength(codeLength); + pigeonReturn.setEnrollmentCompletionDeadline(enrollmentCompletionDeadline); + pigeonReturn.setHashingAlgorithm(hashingAlgorithm); + pigeonReturn.setSecretKey(secretKey); + return pigeonReturn; + } + } + + @NonNull + public ArrayList toList() { + ArrayList toListResult = new ArrayList<>(5); + toListResult.add(codeIntervalSeconds); + toListResult.add(codeLength); + toListResult.add(enrollmentCompletionDeadline); + toListResult.add(hashingAlgorithm); + toListResult.add(secretKey); + return toListResult; + } + + static @NonNull InternalTotpSecret fromList(@NonNull ArrayList pigeonVar_list) { + InternalTotpSecret pigeonResult = new InternalTotpSecret(); + Object codeIntervalSeconds = pigeonVar_list.get(0); + pigeonResult.setCodeIntervalSeconds((Long) codeIntervalSeconds); + Object codeLength = pigeonVar_list.get(1); + pigeonResult.setCodeLength((Long) codeLength); + Object enrollmentCompletionDeadline = pigeonVar_list.get(2); + pigeonResult.setEnrollmentCompletionDeadline((Long) enrollmentCompletionDeadline); + Object hashingAlgorithm = pigeonVar_list.get(3); + pigeonResult.setHashingAlgorithm((String) hashingAlgorithm); + Object secretKey = pigeonVar_list.get(4); + pigeonResult.setSecretKey((String) secretKey); + return pigeonResult; + } + } + + private static class PigeonCodec extends StandardMessageCodec { + public static final PigeonCodec INSTANCE = new PigeonCodec(); + + private PigeonCodec() {} + + @Override + protected Object readValueOfType(byte type, @NonNull ByteBuffer buffer) { + switch (type) { + case (byte) 129: + { + Object value = readValue(buffer); + return value == null + ? null + : ActionCodeInfoOperation.values()[((Long) value).intValue()]; + } + case (byte) 130: + return InternalMultiFactorSession.fromList((ArrayList) readValue(buffer)); + case (byte) 131: + return InternalPhoneMultiFactorAssertion.fromList((ArrayList) readValue(buffer)); + case (byte) 132: + return InternalMultiFactorInfo.fromList((ArrayList) readValue(buffer)); + case (byte) 133: + return AuthPigeonFirebaseApp.fromList((ArrayList) readValue(buffer)); + case (byte) 134: + return InternalActionCodeInfoData.fromList((ArrayList) readValue(buffer)); + case (byte) 135: + return InternalActionCodeInfo.fromList((ArrayList) readValue(buffer)); + case (byte) 136: + return InternalAdditionalUserInfo.fromList((ArrayList) readValue(buffer)); + case (byte) 137: + return InternalAuthCredential.fromList((ArrayList) readValue(buffer)); + case (byte) 138: + return InternalUserInfo.fromList((ArrayList) readValue(buffer)); + case (byte) 139: + return InternalUserDetails.fromList((ArrayList) readValue(buffer)); + case (byte) 140: + return InternalUserCredential.fromList((ArrayList) readValue(buffer)); + case (byte) 141: + return InternalAuthCredentialInput.fromList((ArrayList) readValue(buffer)); + case (byte) 142: + return InternalActionCodeSettings.fromList((ArrayList) readValue(buffer)); + case (byte) 143: + return InternalFirebaseAuthSettings.fromList((ArrayList) readValue(buffer)); + case (byte) 144: + return InternalSignInProvider.fromList((ArrayList) readValue(buffer)); + case (byte) 145: + return InternalVerifyPhoneNumberRequest.fromList((ArrayList) readValue(buffer)); + case (byte) 146: + return InternalIdTokenResult.fromList((ArrayList) readValue(buffer)); + case (byte) 147: + return InternalUserProfile.fromList((ArrayList) readValue(buffer)); + case (byte) 148: + return InternalTotpSecret.fromList((ArrayList) readValue(buffer)); + default: + return super.readValueOfType(type, buffer); + } + } + + @Override + protected void writeValue(@NonNull ByteArrayOutputStream stream, Object value) { + if (value instanceof ActionCodeInfoOperation) { + stream.write(129); + writeValue(stream, value == null ? null : ((ActionCodeInfoOperation) value).index); + } else if (value instanceof InternalMultiFactorSession) { + stream.write(130); + writeValue(stream, ((InternalMultiFactorSession) value).toList()); + } else if (value instanceof InternalPhoneMultiFactorAssertion) { + stream.write(131); + writeValue(stream, ((InternalPhoneMultiFactorAssertion) value).toList()); + } else if (value instanceof InternalMultiFactorInfo) { + stream.write(132); + writeValue(stream, ((InternalMultiFactorInfo) value).toList()); + } else if (value instanceof AuthPigeonFirebaseApp) { + stream.write(133); + writeValue(stream, ((AuthPigeonFirebaseApp) value).toList()); + } else if (value instanceof InternalActionCodeInfoData) { + stream.write(134); + writeValue(stream, ((InternalActionCodeInfoData) value).toList()); + } else if (value instanceof InternalActionCodeInfo) { + stream.write(135); + writeValue(stream, ((InternalActionCodeInfo) value).toList()); + } else if (value instanceof InternalAdditionalUserInfo) { + stream.write(136); + writeValue(stream, ((InternalAdditionalUserInfo) value).toList()); + } else if (value instanceof InternalAuthCredential) { + stream.write(137); + writeValue(stream, ((InternalAuthCredential) value).toList()); + } else if (value instanceof InternalUserInfo) { + stream.write(138); + writeValue(stream, ((InternalUserInfo) value).toList()); + } else if (value instanceof InternalUserDetails) { + stream.write(139); + writeValue(stream, ((InternalUserDetails) value).toList()); + } else if (value instanceof InternalUserCredential) { + stream.write(140); + writeValue(stream, ((InternalUserCredential) value).toList()); + } else if (value instanceof InternalAuthCredentialInput) { + stream.write(141); + writeValue(stream, ((InternalAuthCredentialInput) value).toList()); + } else if (value instanceof InternalActionCodeSettings) { + stream.write(142); + writeValue(stream, ((InternalActionCodeSettings) value).toList()); + } else if (value instanceof InternalFirebaseAuthSettings) { + stream.write(143); + writeValue(stream, ((InternalFirebaseAuthSettings) value).toList()); + } else if (value instanceof InternalSignInProvider) { + stream.write(144); + writeValue(stream, ((InternalSignInProvider) value).toList()); + } else if (value instanceof InternalVerifyPhoneNumberRequest) { + stream.write(145); + writeValue(stream, ((InternalVerifyPhoneNumberRequest) value).toList()); + } else if (value instanceof InternalIdTokenResult) { + stream.write(146); + writeValue(stream, ((InternalIdTokenResult) value).toList()); + } else if (value instanceof InternalUserProfile) { + stream.write(147); + writeValue(stream, ((InternalUserProfile) value).toList()); + } else if (value instanceof InternalTotpSecret) { + stream.write(148); + writeValue(stream, ((InternalTotpSecret) value).toList()); + } else { + super.writeValue(stream, value); + } + } + } + + /** Asynchronous error handling return type for non-nullable API method returns. */ + public interface Result { + /** Success case callback method for handling returns. */ + void success(@NonNull T result); + + /** Failure case callback method for handling errors. */ + void error(@NonNull Throwable error); + } + + /** Asynchronous error handling return type for nullable API method returns. */ + public interface NullableResult { + /** Success case callback method for handling returns. */ + void success(@Nullable T result); + + /** Failure case callback method for handling errors. */ + void error(@NonNull Throwable error); + } + + /** Asynchronous error handling return type for void API method returns. */ + public interface VoidResult { + /** Success case callback method for handling returns. */ + void success(); + + /** Failure case callback method for handling errors. */ + void error(@NonNull Throwable error); + } + + /** Generated interface from Pigeon that represents a handler of messages from Flutter. */ + public interface FirebaseAuthHostApi { + + void registerIdTokenListener( + @NonNull AuthPigeonFirebaseApp app, @NonNull Result result); + + void registerAuthStateListener( + @NonNull AuthPigeonFirebaseApp app, @NonNull Result result); + + void useEmulator( + @NonNull AuthPigeonFirebaseApp app, + @NonNull String host, + @NonNull Long port, + @NonNull VoidResult result); + + void applyActionCode( + @NonNull AuthPigeonFirebaseApp app, @NonNull String code, @NonNull VoidResult result); + + void checkActionCode( + @NonNull AuthPigeonFirebaseApp app, + @NonNull String code, + @NonNull Result result); + + void confirmPasswordReset( + @NonNull AuthPigeonFirebaseApp app, + @NonNull String code, + @NonNull String newPassword, + @NonNull VoidResult result); + + void createUserWithEmailAndPassword( + @NonNull AuthPigeonFirebaseApp app, + @NonNull String email, + @NonNull String password, + @NonNull Result result); + + void signInAnonymously( + @NonNull AuthPigeonFirebaseApp app, @NonNull Result result); + + void signInWithCredential( + @NonNull AuthPigeonFirebaseApp app, + @NonNull Map input, + @NonNull Result result); + + void signInWithCustomToken( + @NonNull AuthPigeonFirebaseApp app, + @NonNull String token, + @NonNull Result result); + + void signInWithEmailAndPassword( + @NonNull AuthPigeonFirebaseApp app, + @NonNull String email, + @NonNull String password, + @NonNull Result result); + + void signInWithEmailLink( + @NonNull AuthPigeonFirebaseApp app, + @NonNull String email, + @NonNull String emailLink, + @NonNull Result result); + + void signInWithProvider( + @NonNull AuthPigeonFirebaseApp app, + @NonNull InternalSignInProvider signInProvider, + @NonNull Result result); + + void signOut(@NonNull AuthPigeonFirebaseApp app, @NonNull VoidResult result); + + void fetchSignInMethodsForEmail( + @NonNull AuthPigeonFirebaseApp app, + @NonNull String email, + @NonNull Result> result); + + void sendPasswordResetEmail( + @NonNull AuthPigeonFirebaseApp app, + @NonNull String email, + @Nullable InternalActionCodeSettings actionCodeSettings, + @NonNull VoidResult result); + + void sendSignInLinkToEmail( + @NonNull AuthPigeonFirebaseApp app, + @NonNull String email, + @NonNull InternalActionCodeSettings actionCodeSettings, + @NonNull VoidResult result); + + void setLanguageCode( + @NonNull AuthPigeonFirebaseApp app, + @Nullable String languageCode, + @NonNull Result result); + + void setSettings( + @NonNull AuthPigeonFirebaseApp app, + @NonNull InternalFirebaseAuthSettings settings, + @NonNull VoidResult result); + + void verifyPasswordResetCode( + @NonNull AuthPigeonFirebaseApp app, @NonNull String code, @NonNull Result result); + + void verifyPhoneNumber( + @NonNull AuthPigeonFirebaseApp app, + @NonNull InternalVerifyPhoneNumberRequest request, + @NonNull Result result); + + void revokeTokenWithAuthorizationCode( + @NonNull AuthPigeonFirebaseApp app, + @NonNull String authorizationCode, + @NonNull VoidResult result); + + void revokeAccessToken( + @NonNull AuthPigeonFirebaseApp app, + @NonNull String accessToken, + @NonNull VoidResult result); + + void initializeRecaptchaConfig(@NonNull AuthPigeonFirebaseApp app, @NonNull VoidResult result); + + /** The codec used by FirebaseAuthHostApi. */ + static @NonNull MessageCodec getCodec() { + return PigeonCodec.INSTANCE; + } + + /** + * Sets up an instance of `FirebaseAuthHostApi` to handle messages through the + * `binaryMessenger`. + */ + static void setUp(@NonNull BinaryMessenger binaryMessenger, @Nullable FirebaseAuthHostApi api) { + setUp(binaryMessenger, "", api); + } + + static void setUp( + @NonNull BinaryMessenger binaryMessenger, + @NonNull String messageChannelSuffix, + @Nullable FirebaseAuthHostApi api) { + messageChannelSuffix = messageChannelSuffix.isEmpty() ? "" : "." + messageChannelSuffix; + { + BasicMessageChannel channel = + new BasicMessageChannel<>( + binaryMessenger, + "dev.flutter.pigeon.firebase_auth_platform_interface.FirebaseAuthHostApi.registerIdTokenListener" + + messageChannelSuffix, + getCodec()); + if (api != null) { + channel.setMessageHandler( + (message, reply) -> { + ArrayList wrapped = new ArrayList<>(); + ArrayList args = (ArrayList) message; + AuthPigeonFirebaseApp appArg = (AuthPigeonFirebaseApp) args.get(0); + Result resultCallback = + new Result() { + public void success(String result) { + wrapped.add(0, result); + reply.reply(wrapped); + } + + public void error(Throwable error) { + ArrayList wrappedError = wrapError(error); + reply.reply(wrappedError); + } + }; + + api.registerIdTokenListener(appArg, resultCallback); + }); + } else { + channel.setMessageHandler(null); + } + } + { + BasicMessageChannel channel = + new BasicMessageChannel<>( + binaryMessenger, + "dev.flutter.pigeon.firebase_auth_platform_interface.FirebaseAuthHostApi.registerAuthStateListener" + + messageChannelSuffix, + getCodec()); + if (api != null) { + channel.setMessageHandler( + (message, reply) -> { + ArrayList wrapped = new ArrayList<>(); + ArrayList args = (ArrayList) message; + AuthPigeonFirebaseApp appArg = (AuthPigeonFirebaseApp) args.get(0); + Result resultCallback = + new Result() { + public void success(String result) { + wrapped.add(0, result); + reply.reply(wrapped); + } + + public void error(Throwable error) { + ArrayList wrappedError = wrapError(error); + reply.reply(wrappedError); + } + }; + + api.registerAuthStateListener(appArg, resultCallback); + }); + } else { + channel.setMessageHandler(null); + } + } + { + BasicMessageChannel channel = + new BasicMessageChannel<>( + binaryMessenger, + "dev.flutter.pigeon.firebase_auth_platform_interface.FirebaseAuthHostApi.useEmulator" + + messageChannelSuffix, + getCodec()); + if (api != null) { + channel.setMessageHandler( + (message, reply) -> { + ArrayList wrapped = new ArrayList<>(); + ArrayList args = (ArrayList) message; + AuthPigeonFirebaseApp appArg = (AuthPigeonFirebaseApp) args.get(0); + String hostArg = (String) args.get(1); + Long portArg = (Long) args.get(2); + VoidResult resultCallback = + new VoidResult() { + public void success() { + wrapped.add(0, null); + reply.reply(wrapped); + } + + public void error(Throwable error) { + ArrayList wrappedError = wrapError(error); + reply.reply(wrappedError); + } + }; + + api.useEmulator(appArg, hostArg, portArg, resultCallback); + }); + } else { + channel.setMessageHandler(null); + } + } + { + BasicMessageChannel channel = + new BasicMessageChannel<>( + binaryMessenger, + "dev.flutter.pigeon.firebase_auth_platform_interface.FirebaseAuthHostApi.applyActionCode" + + messageChannelSuffix, + getCodec()); + if (api != null) { + channel.setMessageHandler( + (message, reply) -> { + ArrayList wrapped = new ArrayList<>(); + ArrayList args = (ArrayList) message; + AuthPigeonFirebaseApp appArg = (AuthPigeonFirebaseApp) args.get(0); + String codeArg = (String) args.get(1); + VoidResult resultCallback = + new VoidResult() { + public void success() { + wrapped.add(0, null); + reply.reply(wrapped); + } + + public void error(Throwable error) { + ArrayList wrappedError = wrapError(error); + reply.reply(wrappedError); + } + }; + + api.applyActionCode(appArg, codeArg, resultCallback); + }); + } else { + channel.setMessageHandler(null); + } + } + { + BasicMessageChannel channel = + new BasicMessageChannel<>( + binaryMessenger, + "dev.flutter.pigeon.firebase_auth_platform_interface.FirebaseAuthHostApi.checkActionCode" + + messageChannelSuffix, + getCodec()); + if (api != null) { + channel.setMessageHandler( + (message, reply) -> { + ArrayList wrapped = new ArrayList<>(); + ArrayList args = (ArrayList) message; + AuthPigeonFirebaseApp appArg = (AuthPigeonFirebaseApp) args.get(0); + String codeArg = (String) args.get(1); + Result resultCallback = + new Result() { + public void success(InternalActionCodeInfo result) { + wrapped.add(0, result); + reply.reply(wrapped); + } + + public void error(Throwable error) { + ArrayList wrappedError = wrapError(error); + reply.reply(wrappedError); + } + }; + + api.checkActionCode(appArg, codeArg, resultCallback); + }); + } else { + channel.setMessageHandler(null); + } + } + { + BasicMessageChannel channel = + new BasicMessageChannel<>( + binaryMessenger, + "dev.flutter.pigeon.firebase_auth_platform_interface.FirebaseAuthHostApi.confirmPasswordReset" + + messageChannelSuffix, + getCodec()); + if (api != null) { + channel.setMessageHandler( + (message, reply) -> { + ArrayList wrapped = new ArrayList<>(); + ArrayList args = (ArrayList) message; + AuthPigeonFirebaseApp appArg = (AuthPigeonFirebaseApp) args.get(0); + String codeArg = (String) args.get(1); + String newPasswordArg = (String) args.get(2); + VoidResult resultCallback = + new VoidResult() { + public void success() { + wrapped.add(0, null); + reply.reply(wrapped); + } + + public void error(Throwable error) { + ArrayList wrappedError = wrapError(error); + reply.reply(wrappedError); + } + }; + + api.confirmPasswordReset(appArg, codeArg, newPasswordArg, resultCallback); + }); + } else { + channel.setMessageHandler(null); + } + } + { + BasicMessageChannel channel = + new BasicMessageChannel<>( + binaryMessenger, + "dev.flutter.pigeon.firebase_auth_platform_interface.FirebaseAuthHostApi.createUserWithEmailAndPassword" + + messageChannelSuffix, + getCodec()); + if (api != null) { + channel.setMessageHandler( + (message, reply) -> { + ArrayList wrapped = new ArrayList<>(); + ArrayList args = (ArrayList) message; + AuthPigeonFirebaseApp appArg = (AuthPigeonFirebaseApp) args.get(0); + String emailArg = (String) args.get(1); + String passwordArg = (String) args.get(2); + Result resultCallback = + new Result() { + public void success(InternalUserCredential result) { + wrapped.add(0, result); + reply.reply(wrapped); + } + + public void error(Throwable error) { + ArrayList wrappedError = wrapError(error); + reply.reply(wrappedError); + } + }; + + api.createUserWithEmailAndPassword(appArg, emailArg, passwordArg, resultCallback); + }); + } else { + channel.setMessageHandler(null); + } + } + { + BasicMessageChannel channel = + new BasicMessageChannel<>( + binaryMessenger, + "dev.flutter.pigeon.firebase_auth_platform_interface.FirebaseAuthHostApi.signInAnonymously" + + messageChannelSuffix, + getCodec()); + if (api != null) { + channel.setMessageHandler( + (message, reply) -> { + ArrayList wrapped = new ArrayList<>(); + ArrayList args = (ArrayList) message; + AuthPigeonFirebaseApp appArg = (AuthPigeonFirebaseApp) args.get(0); + Result resultCallback = + new Result() { + public void success(InternalUserCredential result) { + wrapped.add(0, result); + reply.reply(wrapped); + } + + public void error(Throwable error) { + ArrayList wrappedError = wrapError(error); + reply.reply(wrappedError); + } + }; + + api.signInAnonymously(appArg, resultCallback); + }); + } else { + channel.setMessageHandler(null); + } + } + { + BasicMessageChannel channel = + new BasicMessageChannel<>( + binaryMessenger, + "dev.flutter.pigeon.firebase_auth_platform_interface.FirebaseAuthHostApi.signInWithCredential" + + messageChannelSuffix, + getCodec()); + if (api != null) { + channel.setMessageHandler( + (message, reply) -> { + ArrayList wrapped = new ArrayList<>(); + ArrayList args = (ArrayList) message; + AuthPigeonFirebaseApp appArg = (AuthPigeonFirebaseApp) args.get(0); + Map inputArg = (Map) args.get(1); + Result resultCallback = + new Result() { + public void success(InternalUserCredential result) { + wrapped.add(0, result); + reply.reply(wrapped); + } + + public void error(Throwable error) { + ArrayList wrappedError = wrapError(error); + reply.reply(wrappedError); + } + }; + + api.signInWithCredential(appArg, inputArg, resultCallback); + }); + } else { + channel.setMessageHandler(null); + } + } + { + BasicMessageChannel channel = + new BasicMessageChannel<>( + binaryMessenger, + "dev.flutter.pigeon.firebase_auth_platform_interface.FirebaseAuthHostApi.signInWithCustomToken" + + messageChannelSuffix, + getCodec()); + if (api != null) { + channel.setMessageHandler( + (message, reply) -> { + ArrayList wrapped = new ArrayList<>(); + ArrayList args = (ArrayList) message; + AuthPigeonFirebaseApp appArg = (AuthPigeonFirebaseApp) args.get(0); + String tokenArg = (String) args.get(1); + Result resultCallback = + new Result() { + public void success(InternalUserCredential result) { + wrapped.add(0, result); + reply.reply(wrapped); + } + + public void error(Throwable error) { + ArrayList wrappedError = wrapError(error); + reply.reply(wrappedError); + } + }; + + api.signInWithCustomToken(appArg, tokenArg, resultCallback); + }); + } else { + channel.setMessageHandler(null); + } + } + { + BasicMessageChannel channel = + new BasicMessageChannel<>( + binaryMessenger, + "dev.flutter.pigeon.firebase_auth_platform_interface.FirebaseAuthHostApi.signInWithEmailAndPassword" + + messageChannelSuffix, + getCodec()); + if (api != null) { + channel.setMessageHandler( + (message, reply) -> { + ArrayList wrapped = new ArrayList<>(); + ArrayList args = (ArrayList) message; + AuthPigeonFirebaseApp appArg = (AuthPigeonFirebaseApp) args.get(0); + String emailArg = (String) args.get(1); + String passwordArg = (String) args.get(2); + Result resultCallback = + new Result() { + public void success(InternalUserCredential result) { + wrapped.add(0, result); + reply.reply(wrapped); + } + + public void error(Throwable error) { + ArrayList wrappedError = wrapError(error); + reply.reply(wrappedError); + } + }; + + api.signInWithEmailAndPassword(appArg, emailArg, passwordArg, resultCallback); + }); + } else { + channel.setMessageHandler(null); + } + } + { + BasicMessageChannel channel = + new BasicMessageChannel<>( + binaryMessenger, + "dev.flutter.pigeon.firebase_auth_platform_interface.FirebaseAuthHostApi.signInWithEmailLink" + + messageChannelSuffix, + getCodec()); + if (api != null) { + channel.setMessageHandler( + (message, reply) -> { + ArrayList wrapped = new ArrayList<>(); + ArrayList args = (ArrayList) message; + AuthPigeonFirebaseApp appArg = (AuthPigeonFirebaseApp) args.get(0); + String emailArg = (String) args.get(1); + String emailLinkArg = (String) args.get(2); + Result resultCallback = + new Result() { + public void success(InternalUserCredential result) { + wrapped.add(0, result); + reply.reply(wrapped); + } + + public void error(Throwable error) { + ArrayList wrappedError = wrapError(error); + reply.reply(wrappedError); + } + }; + + api.signInWithEmailLink(appArg, emailArg, emailLinkArg, resultCallback); + }); + } else { + channel.setMessageHandler(null); + } + } + { + BasicMessageChannel channel = + new BasicMessageChannel<>( + binaryMessenger, + "dev.flutter.pigeon.firebase_auth_platform_interface.FirebaseAuthHostApi.signInWithProvider" + + messageChannelSuffix, + getCodec()); + if (api != null) { + channel.setMessageHandler( + (message, reply) -> { + ArrayList wrapped = new ArrayList<>(); + ArrayList args = (ArrayList) message; + AuthPigeonFirebaseApp appArg = (AuthPigeonFirebaseApp) args.get(0); + InternalSignInProvider signInProviderArg = (InternalSignInProvider) args.get(1); + Result resultCallback = + new Result() { + public void success(InternalUserCredential result) { + wrapped.add(0, result); + reply.reply(wrapped); + } + + public void error(Throwable error) { + ArrayList wrappedError = wrapError(error); + reply.reply(wrappedError); + } + }; + + api.signInWithProvider(appArg, signInProviderArg, resultCallback); + }); + } else { + channel.setMessageHandler(null); + } + } + { + BasicMessageChannel channel = + new BasicMessageChannel<>( + binaryMessenger, + "dev.flutter.pigeon.firebase_auth_platform_interface.FirebaseAuthHostApi.signOut" + + messageChannelSuffix, + getCodec()); + if (api != null) { + channel.setMessageHandler( + (message, reply) -> { + ArrayList wrapped = new ArrayList<>(); + ArrayList args = (ArrayList) message; + AuthPigeonFirebaseApp appArg = (AuthPigeonFirebaseApp) args.get(0); + VoidResult resultCallback = + new VoidResult() { + public void success() { + wrapped.add(0, null); + reply.reply(wrapped); + } + + public void error(Throwable error) { + ArrayList wrappedError = wrapError(error); + reply.reply(wrappedError); + } + }; + + api.signOut(appArg, resultCallback); + }); + } else { + channel.setMessageHandler(null); + } + } + { + BasicMessageChannel channel = + new BasicMessageChannel<>( + binaryMessenger, + "dev.flutter.pigeon.firebase_auth_platform_interface.FirebaseAuthHostApi.fetchSignInMethodsForEmail" + + messageChannelSuffix, + getCodec()); + if (api != null) { + channel.setMessageHandler( + (message, reply) -> { + ArrayList wrapped = new ArrayList<>(); + ArrayList args = (ArrayList) message; + AuthPigeonFirebaseApp appArg = (AuthPigeonFirebaseApp) args.get(0); + String emailArg = (String) args.get(1); + Result> resultCallback = + new Result>() { + public void success(List result) { + wrapped.add(0, result); + reply.reply(wrapped); + } + + public void error(Throwable error) { + ArrayList wrappedError = wrapError(error); + reply.reply(wrappedError); + } + }; + + api.fetchSignInMethodsForEmail(appArg, emailArg, resultCallback); + }); + } else { + channel.setMessageHandler(null); + } + } + { + BasicMessageChannel channel = + new BasicMessageChannel<>( + binaryMessenger, + "dev.flutter.pigeon.firebase_auth_platform_interface.FirebaseAuthHostApi.sendPasswordResetEmail" + + messageChannelSuffix, + getCodec()); + if (api != null) { + channel.setMessageHandler( + (message, reply) -> { + ArrayList wrapped = new ArrayList<>(); + ArrayList args = (ArrayList) message; + AuthPigeonFirebaseApp appArg = (AuthPigeonFirebaseApp) args.get(0); + String emailArg = (String) args.get(1); + InternalActionCodeSettings actionCodeSettingsArg = + (InternalActionCodeSettings) args.get(2); + VoidResult resultCallback = + new VoidResult() { + public void success() { + wrapped.add(0, null); + reply.reply(wrapped); + } + + public void error(Throwable error) { + ArrayList wrappedError = wrapError(error); + reply.reply(wrappedError); + } + }; + + api.sendPasswordResetEmail(appArg, emailArg, actionCodeSettingsArg, resultCallback); + }); + } else { + channel.setMessageHandler(null); + } + } + { + BasicMessageChannel channel = + new BasicMessageChannel<>( + binaryMessenger, + "dev.flutter.pigeon.firebase_auth_platform_interface.FirebaseAuthHostApi.sendSignInLinkToEmail" + + messageChannelSuffix, + getCodec()); + if (api != null) { + channel.setMessageHandler( + (message, reply) -> { + ArrayList wrapped = new ArrayList<>(); + ArrayList args = (ArrayList) message; + AuthPigeonFirebaseApp appArg = (AuthPigeonFirebaseApp) args.get(0); + String emailArg = (String) args.get(1); + InternalActionCodeSettings actionCodeSettingsArg = + (InternalActionCodeSettings) args.get(2); + VoidResult resultCallback = + new VoidResult() { + public void success() { + wrapped.add(0, null); + reply.reply(wrapped); + } + + public void error(Throwable error) { + ArrayList wrappedError = wrapError(error); + reply.reply(wrappedError); + } + }; + + api.sendSignInLinkToEmail(appArg, emailArg, actionCodeSettingsArg, resultCallback); + }); + } else { + channel.setMessageHandler(null); + } + } + { + BasicMessageChannel channel = + new BasicMessageChannel<>( + binaryMessenger, + "dev.flutter.pigeon.firebase_auth_platform_interface.FirebaseAuthHostApi.setLanguageCode" + + messageChannelSuffix, + getCodec()); + if (api != null) { + channel.setMessageHandler( + (message, reply) -> { + ArrayList wrapped = new ArrayList<>(); + ArrayList args = (ArrayList) message; + AuthPigeonFirebaseApp appArg = (AuthPigeonFirebaseApp) args.get(0); + String languageCodeArg = (String) args.get(1); + Result resultCallback = + new Result() { + public void success(String result) { + wrapped.add(0, result); + reply.reply(wrapped); + } + + public void error(Throwable error) { + ArrayList wrappedError = wrapError(error); + reply.reply(wrappedError); + } + }; + + api.setLanguageCode(appArg, languageCodeArg, resultCallback); + }); + } else { + channel.setMessageHandler(null); + } + } + { + BasicMessageChannel channel = + new BasicMessageChannel<>( + binaryMessenger, + "dev.flutter.pigeon.firebase_auth_platform_interface.FirebaseAuthHostApi.setSettings" + + messageChannelSuffix, + getCodec()); + if (api != null) { + channel.setMessageHandler( + (message, reply) -> { + ArrayList wrapped = new ArrayList<>(); + ArrayList args = (ArrayList) message; + AuthPigeonFirebaseApp appArg = (AuthPigeonFirebaseApp) args.get(0); + InternalFirebaseAuthSettings settingsArg = + (InternalFirebaseAuthSettings) args.get(1); + VoidResult resultCallback = + new VoidResult() { + public void success() { + wrapped.add(0, null); + reply.reply(wrapped); + } + + public void error(Throwable error) { + ArrayList wrappedError = wrapError(error); + reply.reply(wrappedError); + } + }; + + api.setSettings(appArg, settingsArg, resultCallback); + }); + } else { + channel.setMessageHandler(null); + } + } + { + BasicMessageChannel channel = + new BasicMessageChannel<>( + binaryMessenger, + "dev.flutter.pigeon.firebase_auth_platform_interface.FirebaseAuthHostApi.verifyPasswordResetCode" + + messageChannelSuffix, + getCodec()); + if (api != null) { + channel.setMessageHandler( + (message, reply) -> { + ArrayList wrapped = new ArrayList<>(); + ArrayList args = (ArrayList) message; + AuthPigeonFirebaseApp appArg = (AuthPigeonFirebaseApp) args.get(0); + String codeArg = (String) args.get(1); + Result resultCallback = + new Result() { + public void success(String result) { + wrapped.add(0, result); + reply.reply(wrapped); + } + + public void error(Throwable error) { + ArrayList wrappedError = wrapError(error); + reply.reply(wrappedError); + } + }; + + api.verifyPasswordResetCode(appArg, codeArg, resultCallback); + }); + } else { + channel.setMessageHandler(null); + } + } + { + BasicMessageChannel channel = + new BasicMessageChannel<>( + binaryMessenger, + "dev.flutter.pigeon.firebase_auth_platform_interface.FirebaseAuthHostApi.verifyPhoneNumber" + + messageChannelSuffix, + getCodec()); + if (api != null) { + channel.setMessageHandler( + (message, reply) -> { + ArrayList wrapped = new ArrayList<>(); + ArrayList args = (ArrayList) message; + AuthPigeonFirebaseApp appArg = (AuthPigeonFirebaseApp) args.get(0); + InternalVerifyPhoneNumberRequest requestArg = + (InternalVerifyPhoneNumberRequest) args.get(1); + Result resultCallback = + new Result() { + public void success(String result) { + wrapped.add(0, result); + reply.reply(wrapped); + } + + public void error(Throwable error) { + ArrayList wrappedError = wrapError(error); + reply.reply(wrappedError); + } + }; + + api.verifyPhoneNumber(appArg, requestArg, resultCallback); + }); + } else { + channel.setMessageHandler(null); + } + } + { + BasicMessageChannel channel = + new BasicMessageChannel<>( + binaryMessenger, + "dev.flutter.pigeon.firebase_auth_platform_interface.FirebaseAuthHostApi.revokeTokenWithAuthorizationCode" + + messageChannelSuffix, + getCodec()); + if (api != null) { + channel.setMessageHandler( + (message, reply) -> { + ArrayList wrapped = new ArrayList<>(); + ArrayList args = (ArrayList) message; + AuthPigeonFirebaseApp appArg = (AuthPigeonFirebaseApp) args.get(0); + String authorizationCodeArg = (String) args.get(1); + VoidResult resultCallback = + new VoidResult() { + public void success() { + wrapped.add(0, null); + reply.reply(wrapped); + } + + public void error(Throwable error) { + ArrayList wrappedError = wrapError(error); + reply.reply(wrappedError); + } + }; + + api.revokeTokenWithAuthorizationCode(appArg, authorizationCodeArg, resultCallback); + }); + } else { + channel.setMessageHandler(null); + } + } + { + BasicMessageChannel channel = + new BasicMessageChannel<>( + binaryMessenger, + "dev.flutter.pigeon.firebase_auth_platform_interface.FirebaseAuthHostApi.revokeAccessToken" + + messageChannelSuffix, + getCodec()); + if (api != null) { + channel.setMessageHandler( + (message, reply) -> { + ArrayList wrapped = new ArrayList<>(); + ArrayList args = (ArrayList) message; + AuthPigeonFirebaseApp appArg = (AuthPigeonFirebaseApp) args.get(0); + String accessTokenArg = (String) args.get(1); + VoidResult resultCallback = + new VoidResult() { + public void success() { + wrapped.add(0, null); + reply.reply(wrapped); + } + + public void error(Throwable error) { + ArrayList wrappedError = wrapError(error); + reply.reply(wrappedError); + } + }; + + api.revokeAccessToken(appArg, accessTokenArg, resultCallback); + }); + } else { + channel.setMessageHandler(null); + } + } + { + BasicMessageChannel channel = + new BasicMessageChannel<>( + binaryMessenger, + "dev.flutter.pigeon.firebase_auth_platform_interface.FirebaseAuthHostApi.initializeRecaptchaConfig" + + messageChannelSuffix, + getCodec()); + if (api != null) { + channel.setMessageHandler( + (message, reply) -> { + ArrayList wrapped = new ArrayList<>(); + ArrayList args = (ArrayList) message; + AuthPigeonFirebaseApp appArg = (AuthPigeonFirebaseApp) args.get(0); + VoidResult resultCallback = + new VoidResult() { + public void success() { + wrapped.add(0, null); + reply.reply(wrapped); + } + + public void error(Throwable error) { + ArrayList wrappedError = wrapError(error); + reply.reply(wrappedError); + } + }; + + api.initializeRecaptchaConfig(appArg, resultCallback); + }); + } else { + channel.setMessageHandler(null); + } + } + } + } + + /** Generated interface from Pigeon that represents a handler of messages from Flutter. */ + public interface FirebaseAuthUserHostApi { + + void delete(@NonNull AuthPigeonFirebaseApp app, @NonNull VoidResult result); + + void getIdToken( + @NonNull AuthPigeonFirebaseApp app, + @NonNull Boolean forceRefresh, + @NonNull Result result); + + void linkWithCredential( + @NonNull AuthPigeonFirebaseApp app, + @NonNull Map input, + @NonNull Result result); + + void linkWithProvider( + @NonNull AuthPigeonFirebaseApp app, + @NonNull InternalSignInProvider signInProvider, + @NonNull Result result); + + void reauthenticateWithCredential( + @NonNull AuthPigeonFirebaseApp app, + @NonNull Map input, + @NonNull Result result); + + void reauthenticateWithProvider( + @NonNull AuthPigeonFirebaseApp app, + @NonNull InternalSignInProvider signInProvider, + @NonNull Result result); + + void reload(@NonNull AuthPigeonFirebaseApp app, @NonNull Result result); + + void sendEmailVerification( + @NonNull AuthPigeonFirebaseApp app, + @Nullable InternalActionCodeSettings actionCodeSettings, + @NonNull VoidResult result); + + void unlink( + @NonNull AuthPigeonFirebaseApp app, + @NonNull String providerId, + @NonNull Result result); + + void updateEmail( + @NonNull AuthPigeonFirebaseApp app, + @NonNull String newEmail, + @NonNull Result result); + + void updatePassword( + @NonNull AuthPigeonFirebaseApp app, + @NonNull String newPassword, + @NonNull Result result); + + void updatePhoneNumber( + @NonNull AuthPigeonFirebaseApp app, + @NonNull Map input, + @NonNull Result result); + + void updateProfile( + @NonNull AuthPigeonFirebaseApp app, + @NonNull InternalUserProfile profile, + @NonNull Result result); + + void verifyBeforeUpdateEmail( + @NonNull AuthPigeonFirebaseApp app, + @NonNull String newEmail, + @Nullable InternalActionCodeSettings actionCodeSettings, + @NonNull VoidResult result); + + /** The codec used by FirebaseAuthUserHostApi. */ + static @NonNull MessageCodec getCodec() { + return PigeonCodec.INSTANCE; + } + + /** + * Sets up an instance of `FirebaseAuthUserHostApi` to handle messages through the + * `binaryMessenger`. + */ + static void setUp( + @NonNull BinaryMessenger binaryMessenger, @Nullable FirebaseAuthUserHostApi api) { + setUp(binaryMessenger, "", api); + } + + static void setUp( + @NonNull BinaryMessenger binaryMessenger, + @NonNull String messageChannelSuffix, + @Nullable FirebaseAuthUserHostApi api) { + messageChannelSuffix = messageChannelSuffix.isEmpty() ? "" : "." + messageChannelSuffix; + { + BasicMessageChannel channel = + new BasicMessageChannel<>( + binaryMessenger, + "dev.flutter.pigeon.firebase_auth_platform_interface.FirebaseAuthUserHostApi.delete" + + messageChannelSuffix, + getCodec()); + if (api != null) { + channel.setMessageHandler( + (message, reply) -> { + ArrayList wrapped = new ArrayList<>(); + ArrayList args = (ArrayList) message; + AuthPigeonFirebaseApp appArg = (AuthPigeonFirebaseApp) args.get(0); + VoidResult resultCallback = + new VoidResult() { + public void success() { + wrapped.add(0, null); + reply.reply(wrapped); + } + + public void error(Throwable error) { + ArrayList wrappedError = wrapError(error); + reply.reply(wrappedError); + } + }; + + api.delete(appArg, resultCallback); + }); + } else { + channel.setMessageHandler(null); + } + } + { + BasicMessageChannel channel = + new BasicMessageChannel<>( + binaryMessenger, + "dev.flutter.pigeon.firebase_auth_platform_interface.FirebaseAuthUserHostApi.getIdToken" + + messageChannelSuffix, + getCodec()); + if (api != null) { + channel.setMessageHandler( + (message, reply) -> { + ArrayList wrapped = new ArrayList<>(); + ArrayList args = (ArrayList) message; + AuthPigeonFirebaseApp appArg = (AuthPigeonFirebaseApp) args.get(0); + Boolean forceRefreshArg = (Boolean) args.get(1); + Result resultCallback = + new Result() { + public void success(InternalIdTokenResult result) { + wrapped.add(0, result); + reply.reply(wrapped); + } + + public void error(Throwable error) { + ArrayList wrappedError = wrapError(error); + reply.reply(wrappedError); + } + }; + + api.getIdToken(appArg, forceRefreshArg, resultCallback); + }); + } else { + channel.setMessageHandler(null); + } + } + { + BasicMessageChannel channel = + new BasicMessageChannel<>( + binaryMessenger, + "dev.flutter.pigeon.firebase_auth_platform_interface.FirebaseAuthUserHostApi.linkWithCredential" + + messageChannelSuffix, + getCodec()); + if (api != null) { + channel.setMessageHandler( + (message, reply) -> { + ArrayList wrapped = new ArrayList<>(); + ArrayList args = (ArrayList) message; + AuthPigeonFirebaseApp appArg = (AuthPigeonFirebaseApp) args.get(0); + Map inputArg = (Map) args.get(1); + Result resultCallback = + new Result() { + public void success(InternalUserCredential result) { + wrapped.add(0, result); + reply.reply(wrapped); + } + + public void error(Throwable error) { + ArrayList wrappedError = wrapError(error); + reply.reply(wrappedError); + } + }; + + api.linkWithCredential(appArg, inputArg, resultCallback); + }); + } else { + channel.setMessageHandler(null); + } + } + { + BasicMessageChannel channel = + new BasicMessageChannel<>( + binaryMessenger, + "dev.flutter.pigeon.firebase_auth_platform_interface.FirebaseAuthUserHostApi.linkWithProvider" + + messageChannelSuffix, + getCodec()); + if (api != null) { + channel.setMessageHandler( + (message, reply) -> { + ArrayList wrapped = new ArrayList<>(); + ArrayList args = (ArrayList) message; + AuthPigeonFirebaseApp appArg = (AuthPigeonFirebaseApp) args.get(0); + InternalSignInProvider signInProviderArg = (InternalSignInProvider) args.get(1); + Result resultCallback = + new Result() { + public void success(InternalUserCredential result) { + wrapped.add(0, result); + reply.reply(wrapped); + } + + public void error(Throwable error) { + ArrayList wrappedError = wrapError(error); + reply.reply(wrappedError); + } + }; + + api.linkWithProvider(appArg, signInProviderArg, resultCallback); + }); + } else { + channel.setMessageHandler(null); + } + } + { + BasicMessageChannel channel = + new BasicMessageChannel<>( + binaryMessenger, + "dev.flutter.pigeon.firebase_auth_platform_interface.FirebaseAuthUserHostApi.reauthenticateWithCredential" + + messageChannelSuffix, + getCodec()); + if (api != null) { + channel.setMessageHandler( + (message, reply) -> { + ArrayList wrapped = new ArrayList<>(); + ArrayList args = (ArrayList) message; + AuthPigeonFirebaseApp appArg = (AuthPigeonFirebaseApp) args.get(0); + Map inputArg = (Map) args.get(1); + Result resultCallback = + new Result() { + public void success(InternalUserCredential result) { + wrapped.add(0, result); + reply.reply(wrapped); + } + + public void error(Throwable error) { + ArrayList wrappedError = wrapError(error); + reply.reply(wrappedError); + } + }; + + api.reauthenticateWithCredential(appArg, inputArg, resultCallback); + }); + } else { + channel.setMessageHandler(null); + } + } + { + BasicMessageChannel channel = + new BasicMessageChannel<>( + binaryMessenger, + "dev.flutter.pigeon.firebase_auth_platform_interface.FirebaseAuthUserHostApi.reauthenticateWithProvider" + + messageChannelSuffix, + getCodec()); + if (api != null) { + channel.setMessageHandler( + (message, reply) -> { + ArrayList wrapped = new ArrayList<>(); + ArrayList args = (ArrayList) message; + AuthPigeonFirebaseApp appArg = (AuthPigeonFirebaseApp) args.get(0); + InternalSignInProvider signInProviderArg = (InternalSignInProvider) args.get(1); + Result resultCallback = + new Result() { + public void success(InternalUserCredential result) { + wrapped.add(0, result); + reply.reply(wrapped); + } + + public void error(Throwable error) { + ArrayList wrappedError = wrapError(error); + reply.reply(wrappedError); + } + }; + + api.reauthenticateWithProvider(appArg, signInProviderArg, resultCallback); + }); + } else { + channel.setMessageHandler(null); + } + } + { + BasicMessageChannel channel = + new BasicMessageChannel<>( + binaryMessenger, + "dev.flutter.pigeon.firebase_auth_platform_interface.FirebaseAuthUserHostApi.reload" + + messageChannelSuffix, + getCodec()); + if (api != null) { + channel.setMessageHandler( + (message, reply) -> { + ArrayList wrapped = new ArrayList<>(); + ArrayList args = (ArrayList) message; + AuthPigeonFirebaseApp appArg = (AuthPigeonFirebaseApp) args.get(0); + Result resultCallback = + new Result() { + public void success(InternalUserDetails result) { + wrapped.add(0, result); + reply.reply(wrapped); + } + + public void error(Throwable error) { + ArrayList wrappedError = wrapError(error); + reply.reply(wrappedError); + } + }; + + api.reload(appArg, resultCallback); + }); + } else { + channel.setMessageHandler(null); + } + } + { + BasicMessageChannel channel = + new BasicMessageChannel<>( + binaryMessenger, + "dev.flutter.pigeon.firebase_auth_platform_interface.FirebaseAuthUserHostApi.sendEmailVerification" + + messageChannelSuffix, + getCodec()); + if (api != null) { + channel.setMessageHandler( + (message, reply) -> { + ArrayList wrapped = new ArrayList<>(); + ArrayList args = (ArrayList) message; + AuthPigeonFirebaseApp appArg = (AuthPigeonFirebaseApp) args.get(0); + InternalActionCodeSettings actionCodeSettingsArg = + (InternalActionCodeSettings) args.get(1); + VoidResult resultCallback = + new VoidResult() { + public void success() { + wrapped.add(0, null); + reply.reply(wrapped); + } + + public void error(Throwable error) { + ArrayList wrappedError = wrapError(error); + reply.reply(wrappedError); + } + }; + + api.sendEmailVerification(appArg, actionCodeSettingsArg, resultCallback); + }); + } else { + channel.setMessageHandler(null); + } + } + { + BasicMessageChannel channel = + new BasicMessageChannel<>( + binaryMessenger, + "dev.flutter.pigeon.firebase_auth_platform_interface.FirebaseAuthUserHostApi.unlink" + + messageChannelSuffix, + getCodec()); + if (api != null) { + channel.setMessageHandler( + (message, reply) -> { + ArrayList wrapped = new ArrayList<>(); + ArrayList args = (ArrayList) message; + AuthPigeonFirebaseApp appArg = (AuthPigeonFirebaseApp) args.get(0); + String providerIdArg = (String) args.get(1); + Result resultCallback = + new Result() { + public void success(InternalUserCredential result) { + wrapped.add(0, result); + reply.reply(wrapped); + } + + public void error(Throwable error) { + ArrayList wrappedError = wrapError(error); + reply.reply(wrappedError); + } + }; + + api.unlink(appArg, providerIdArg, resultCallback); + }); + } else { + channel.setMessageHandler(null); + } + } + { + BasicMessageChannel channel = + new BasicMessageChannel<>( + binaryMessenger, + "dev.flutter.pigeon.firebase_auth_platform_interface.FirebaseAuthUserHostApi.updateEmail" + + messageChannelSuffix, + getCodec()); + if (api != null) { + channel.setMessageHandler( + (message, reply) -> { + ArrayList wrapped = new ArrayList<>(); + ArrayList args = (ArrayList) message; + AuthPigeonFirebaseApp appArg = (AuthPigeonFirebaseApp) args.get(0); + String newEmailArg = (String) args.get(1); + Result resultCallback = + new Result() { + public void success(InternalUserDetails result) { + wrapped.add(0, result); + reply.reply(wrapped); + } + + public void error(Throwable error) { + ArrayList wrappedError = wrapError(error); + reply.reply(wrappedError); + } + }; + + api.updateEmail(appArg, newEmailArg, resultCallback); + }); + } else { + channel.setMessageHandler(null); + } + } + { + BasicMessageChannel channel = + new BasicMessageChannel<>( + binaryMessenger, + "dev.flutter.pigeon.firebase_auth_platform_interface.FirebaseAuthUserHostApi.updatePassword" + + messageChannelSuffix, + getCodec()); + if (api != null) { + channel.setMessageHandler( + (message, reply) -> { + ArrayList wrapped = new ArrayList<>(); + ArrayList args = (ArrayList) message; + AuthPigeonFirebaseApp appArg = (AuthPigeonFirebaseApp) args.get(0); + String newPasswordArg = (String) args.get(1); + Result resultCallback = + new Result() { + public void success(InternalUserDetails result) { + wrapped.add(0, result); + reply.reply(wrapped); + } + + public void error(Throwable error) { + ArrayList wrappedError = wrapError(error); + reply.reply(wrappedError); + } + }; + + api.updatePassword(appArg, newPasswordArg, resultCallback); + }); + } else { + channel.setMessageHandler(null); + } + } + { + BasicMessageChannel channel = + new BasicMessageChannel<>( + binaryMessenger, + "dev.flutter.pigeon.firebase_auth_platform_interface.FirebaseAuthUserHostApi.updatePhoneNumber" + + messageChannelSuffix, + getCodec()); + if (api != null) { + channel.setMessageHandler( + (message, reply) -> { + ArrayList wrapped = new ArrayList<>(); + ArrayList args = (ArrayList) message; + AuthPigeonFirebaseApp appArg = (AuthPigeonFirebaseApp) args.get(0); + Map inputArg = (Map) args.get(1); + Result resultCallback = + new Result() { + public void success(InternalUserDetails result) { + wrapped.add(0, result); + reply.reply(wrapped); + } + + public void error(Throwable error) { + ArrayList wrappedError = wrapError(error); + reply.reply(wrappedError); + } + }; + + api.updatePhoneNumber(appArg, inputArg, resultCallback); + }); + } else { + channel.setMessageHandler(null); + } + } + { + BasicMessageChannel channel = + new BasicMessageChannel<>( + binaryMessenger, + "dev.flutter.pigeon.firebase_auth_platform_interface.FirebaseAuthUserHostApi.updateProfile" + + messageChannelSuffix, + getCodec()); + if (api != null) { + channel.setMessageHandler( + (message, reply) -> { + ArrayList wrapped = new ArrayList<>(); + ArrayList args = (ArrayList) message; + AuthPigeonFirebaseApp appArg = (AuthPigeonFirebaseApp) args.get(0); + InternalUserProfile profileArg = (InternalUserProfile) args.get(1); + Result resultCallback = + new Result() { + public void success(InternalUserDetails result) { + wrapped.add(0, result); + reply.reply(wrapped); + } + + public void error(Throwable error) { + ArrayList wrappedError = wrapError(error); + reply.reply(wrappedError); + } + }; + + api.updateProfile(appArg, profileArg, resultCallback); + }); + } else { + channel.setMessageHandler(null); + } + } + { + BasicMessageChannel channel = + new BasicMessageChannel<>( + binaryMessenger, + "dev.flutter.pigeon.firebase_auth_platform_interface.FirebaseAuthUserHostApi.verifyBeforeUpdateEmail" + + messageChannelSuffix, + getCodec()); + if (api != null) { + channel.setMessageHandler( + (message, reply) -> { + ArrayList wrapped = new ArrayList<>(); + ArrayList args = (ArrayList) message; + AuthPigeonFirebaseApp appArg = (AuthPigeonFirebaseApp) args.get(0); + String newEmailArg = (String) args.get(1); + InternalActionCodeSettings actionCodeSettingsArg = + (InternalActionCodeSettings) args.get(2); + VoidResult resultCallback = + new VoidResult() { + public void success() { + wrapped.add(0, null); + reply.reply(wrapped); + } + + public void error(Throwable error) { + ArrayList wrappedError = wrapError(error); + reply.reply(wrappedError); + } + }; + + api.verifyBeforeUpdateEmail( + appArg, newEmailArg, actionCodeSettingsArg, resultCallback); + }); + } else { + channel.setMessageHandler(null); + } + } + } + } + + /** Generated interface from Pigeon that represents a handler of messages from Flutter. */ + public interface MultiFactorUserHostApi { + + void enrollPhone( + @NonNull AuthPigeonFirebaseApp app, + @NonNull InternalPhoneMultiFactorAssertion assertion, + @Nullable String displayName, + @NonNull VoidResult result); + + void enrollTotp( + @NonNull AuthPigeonFirebaseApp app, + @NonNull String assertionId, + @Nullable String displayName, + @NonNull VoidResult result); + + void getSession( + @NonNull AuthPigeonFirebaseApp app, @NonNull Result result); + + void unenroll( + @NonNull AuthPigeonFirebaseApp app, @NonNull String factorUid, @NonNull VoidResult result); + + void getEnrolledFactors( + @NonNull AuthPigeonFirebaseApp app, @NonNull Result> result); + + /** The codec used by MultiFactorUserHostApi. */ + static @NonNull MessageCodec getCodec() { + return PigeonCodec.INSTANCE; + } + + /** + * Sets up an instance of `MultiFactorUserHostApi` to handle messages through the + * `binaryMessenger`. + */ + static void setUp( + @NonNull BinaryMessenger binaryMessenger, @Nullable MultiFactorUserHostApi api) { + setUp(binaryMessenger, "", api); + } + + static void setUp( + @NonNull BinaryMessenger binaryMessenger, + @NonNull String messageChannelSuffix, + @Nullable MultiFactorUserHostApi api) { + messageChannelSuffix = messageChannelSuffix.isEmpty() ? "" : "." + messageChannelSuffix; + { + BasicMessageChannel channel = + new BasicMessageChannel<>( + binaryMessenger, + "dev.flutter.pigeon.firebase_auth_platform_interface.MultiFactorUserHostApi.enrollPhone" + + messageChannelSuffix, + getCodec()); + if (api != null) { + channel.setMessageHandler( + (message, reply) -> { + ArrayList wrapped = new ArrayList<>(); + ArrayList args = (ArrayList) message; + AuthPigeonFirebaseApp appArg = (AuthPigeonFirebaseApp) args.get(0); + InternalPhoneMultiFactorAssertion assertionArg = + (InternalPhoneMultiFactorAssertion) args.get(1); + String displayNameArg = (String) args.get(2); + VoidResult resultCallback = + new VoidResult() { + public void success() { + wrapped.add(0, null); + reply.reply(wrapped); + } + + public void error(Throwable error) { + ArrayList wrappedError = wrapError(error); + reply.reply(wrappedError); + } + }; + + api.enrollPhone(appArg, assertionArg, displayNameArg, resultCallback); + }); + } else { + channel.setMessageHandler(null); + } + } + { + BasicMessageChannel channel = + new BasicMessageChannel<>( + binaryMessenger, + "dev.flutter.pigeon.firebase_auth_platform_interface.MultiFactorUserHostApi.enrollTotp" + + messageChannelSuffix, + getCodec()); + if (api != null) { + channel.setMessageHandler( + (message, reply) -> { + ArrayList wrapped = new ArrayList<>(); + ArrayList args = (ArrayList) message; + AuthPigeonFirebaseApp appArg = (AuthPigeonFirebaseApp) args.get(0); + String assertionIdArg = (String) args.get(1); + String displayNameArg = (String) args.get(2); + VoidResult resultCallback = + new VoidResult() { + public void success() { + wrapped.add(0, null); + reply.reply(wrapped); + } + + public void error(Throwable error) { + ArrayList wrappedError = wrapError(error); + reply.reply(wrappedError); + } + }; + + api.enrollTotp(appArg, assertionIdArg, displayNameArg, resultCallback); + }); + } else { + channel.setMessageHandler(null); + } + } + { + BasicMessageChannel channel = + new BasicMessageChannel<>( + binaryMessenger, + "dev.flutter.pigeon.firebase_auth_platform_interface.MultiFactorUserHostApi.getSession" + + messageChannelSuffix, + getCodec()); + if (api != null) { + channel.setMessageHandler( + (message, reply) -> { + ArrayList wrapped = new ArrayList<>(); + ArrayList args = (ArrayList) message; + AuthPigeonFirebaseApp appArg = (AuthPigeonFirebaseApp) args.get(0); + Result resultCallback = + new Result() { + public void success(InternalMultiFactorSession result) { + wrapped.add(0, result); + reply.reply(wrapped); + } + + public void error(Throwable error) { + ArrayList wrappedError = wrapError(error); + reply.reply(wrappedError); + } + }; + + api.getSession(appArg, resultCallback); + }); + } else { + channel.setMessageHandler(null); + } + } + { + BasicMessageChannel channel = + new BasicMessageChannel<>( + binaryMessenger, + "dev.flutter.pigeon.firebase_auth_platform_interface.MultiFactorUserHostApi.unenroll" + + messageChannelSuffix, + getCodec()); + if (api != null) { + channel.setMessageHandler( + (message, reply) -> { + ArrayList wrapped = new ArrayList<>(); + ArrayList args = (ArrayList) message; + AuthPigeonFirebaseApp appArg = (AuthPigeonFirebaseApp) args.get(0); + String factorUidArg = (String) args.get(1); + VoidResult resultCallback = + new VoidResult() { + public void success() { + wrapped.add(0, null); + reply.reply(wrapped); + } + + public void error(Throwable error) { + ArrayList wrappedError = wrapError(error); + reply.reply(wrappedError); + } + }; + + api.unenroll(appArg, factorUidArg, resultCallback); + }); + } else { + channel.setMessageHandler(null); + } + } + { + BasicMessageChannel channel = + new BasicMessageChannel<>( + binaryMessenger, + "dev.flutter.pigeon.firebase_auth_platform_interface.MultiFactorUserHostApi.getEnrolledFactors" + + messageChannelSuffix, + getCodec()); + if (api != null) { + channel.setMessageHandler( + (message, reply) -> { + ArrayList wrapped = new ArrayList<>(); + ArrayList args = (ArrayList) message; + AuthPigeonFirebaseApp appArg = (AuthPigeonFirebaseApp) args.get(0); + Result> resultCallback = + new Result>() { + public void success(List result) { + wrapped.add(0, result); + reply.reply(wrapped); + } + + public void error(Throwable error) { + ArrayList wrappedError = wrapError(error); + reply.reply(wrappedError); + } + }; + + api.getEnrolledFactors(appArg, resultCallback); + }); + } else { + channel.setMessageHandler(null); + } + } + } + } + + /** Generated interface from Pigeon that represents a handler of messages from Flutter. */ + public interface MultiFactoResolverHostApi { + + void resolveSignIn( + @NonNull String resolverId, + @Nullable InternalPhoneMultiFactorAssertion assertion, + @Nullable String totpAssertionId, + @NonNull Result result); + + /** The codec used by MultiFactoResolverHostApi. */ + static @NonNull MessageCodec getCodec() { + return PigeonCodec.INSTANCE; + } + + /** + * Sets up an instance of `MultiFactoResolverHostApi` to handle messages through the + * `binaryMessenger`. + */ + static void setUp( + @NonNull BinaryMessenger binaryMessenger, @Nullable MultiFactoResolverHostApi api) { + setUp(binaryMessenger, "", api); + } + + static void setUp( + @NonNull BinaryMessenger binaryMessenger, + @NonNull String messageChannelSuffix, + @Nullable MultiFactoResolverHostApi api) { + messageChannelSuffix = messageChannelSuffix.isEmpty() ? "" : "." + messageChannelSuffix; + { + BasicMessageChannel channel = + new BasicMessageChannel<>( + binaryMessenger, + "dev.flutter.pigeon.firebase_auth_platform_interface.MultiFactoResolverHostApi.resolveSignIn" + + messageChannelSuffix, + getCodec()); + if (api != null) { + channel.setMessageHandler( + (message, reply) -> { + ArrayList wrapped = new ArrayList<>(); + ArrayList args = (ArrayList) message; + String resolverIdArg = (String) args.get(0); + InternalPhoneMultiFactorAssertion assertionArg = + (InternalPhoneMultiFactorAssertion) args.get(1); + String totpAssertionIdArg = (String) args.get(2); + Result resultCallback = + new Result() { + public void success(InternalUserCredential result) { + wrapped.add(0, result); + reply.reply(wrapped); + } + + public void error(Throwable error) { + ArrayList wrappedError = wrapError(error); + reply.reply(wrappedError); + } + }; + + api.resolveSignIn(resolverIdArg, assertionArg, totpAssertionIdArg, resultCallback); + }); + } else { + channel.setMessageHandler(null); + } + } + } + } + + /** Generated interface from Pigeon that represents a handler of messages from Flutter. */ + public interface MultiFactorTotpHostApi { + + void generateSecret(@NonNull String sessionId, @NonNull Result result); + + void getAssertionForEnrollment( + @NonNull String secretKey, @NonNull String oneTimePassword, @NonNull Result result); + + void getAssertionForSignIn( + @NonNull String enrollmentId, + @NonNull String oneTimePassword, + @NonNull Result result); + + /** The codec used by MultiFactorTotpHostApi. */ + static @NonNull MessageCodec getCodec() { + return PigeonCodec.INSTANCE; + } + + /** + * Sets up an instance of `MultiFactorTotpHostApi` to handle messages through the + * `binaryMessenger`. + */ + static void setUp( + @NonNull BinaryMessenger binaryMessenger, @Nullable MultiFactorTotpHostApi api) { + setUp(binaryMessenger, "", api); + } + + static void setUp( + @NonNull BinaryMessenger binaryMessenger, + @NonNull String messageChannelSuffix, + @Nullable MultiFactorTotpHostApi api) { + messageChannelSuffix = messageChannelSuffix.isEmpty() ? "" : "." + messageChannelSuffix; + { + BasicMessageChannel channel = + new BasicMessageChannel<>( + binaryMessenger, + "dev.flutter.pigeon.firebase_auth_platform_interface.MultiFactorTotpHostApi.generateSecret" + + messageChannelSuffix, + getCodec()); + if (api != null) { + channel.setMessageHandler( + (message, reply) -> { + ArrayList wrapped = new ArrayList<>(); + ArrayList args = (ArrayList) message; + String sessionIdArg = (String) args.get(0); + Result resultCallback = + new Result() { + public void success(InternalTotpSecret result) { + wrapped.add(0, result); + reply.reply(wrapped); + } + + public void error(Throwable error) { + ArrayList wrappedError = wrapError(error); + reply.reply(wrappedError); + } + }; + + api.generateSecret(sessionIdArg, resultCallback); + }); + } else { + channel.setMessageHandler(null); + } + } + { + BasicMessageChannel channel = + new BasicMessageChannel<>( + binaryMessenger, + "dev.flutter.pigeon.firebase_auth_platform_interface.MultiFactorTotpHostApi.getAssertionForEnrollment" + + messageChannelSuffix, + getCodec()); + if (api != null) { + channel.setMessageHandler( + (message, reply) -> { + ArrayList wrapped = new ArrayList<>(); + ArrayList args = (ArrayList) message; + String secretKeyArg = (String) args.get(0); + String oneTimePasswordArg = (String) args.get(1); + Result resultCallback = + new Result() { + public void success(String result) { + wrapped.add(0, result); + reply.reply(wrapped); + } + + public void error(Throwable error) { + ArrayList wrappedError = wrapError(error); + reply.reply(wrappedError); + } + }; + + api.getAssertionForEnrollment(secretKeyArg, oneTimePasswordArg, resultCallback); + }); + } else { + channel.setMessageHandler(null); + } + } + { + BasicMessageChannel channel = + new BasicMessageChannel<>( + binaryMessenger, + "dev.flutter.pigeon.firebase_auth_platform_interface.MultiFactorTotpHostApi.getAssertionForSignIn" + + messageChannelSuffix, + getCodec()); + if (api != null) { + channel.setMessageHandler( + (message, reply) -> { + ArrayList wrapped = new ArrayList<>(); + ArrayList args = (ArrayList) message; + String enrollmentIdArg = (String) args.get(0); + String oneTimePasswordArg = (String) args.get(1); + Result resultCallback = + new Result() { + public void success(String result) { + wrapped.add(0, result); + reply.reply(wrapped); + } + + public void error(Throwable error) { + ArrayList wrappedError = wrapError(error); + reply.reply(wrappedError); + } + }; + + api.getAssertionForSignIn(enrollmentIdArg, oneTimePasswordArg, resultCallback); + }); + } else { + channel.setMessageHandler(null); + } + } + } + } + + /** Generated interface from Pigeon that represents a handler of messages from Flutter. */ + public interface MultiFactorTotpSecretHostApi { + + void generateQrCodeUrl( + @NonNull String secretKey, + @Nullable String accountName, + @Nullable String issuer, + @NonNull Result result); + + void openInOtpApp( + @NonNull String secretKey, @NonNull String qrCodeUrl, @NonNull VoidResult result); + + /** The codec used by MultiFactorTotpSecretHostApi. */ + static @NonNull MessageCodec getCodec() { + return PigeonCodec.INSTANCE; + } + + /** + * Sets up an instance of `MultiFactorTotpSecretHostApi` to handle messages through the + * `binaryMessenger`. + */ + static void setUp( + @NonNull BinaryMessenger binaryMessenger, @Nullable MultiFactorTotpSecretHostApi api) { + setUp(binaryMessenger, "", api); + } + + static void setUp( + @NonNull BinaryMessenger binaryMessenger, + @NonNull String messageChannelSuffix, + @Nullable MultiFactorTotpSecretHostApi api) { + messageChannelSuffix = messageChannelSuffix.isEmpty() ? "" : "." + messageChannelSuffix; + { + BasicMessageChannel channel = + new BasicMessageChannel<>( + binaryMessenger, + "dev.flutter.pigeon.firebase_auth_platform_interface.MultiFactorTotpSecretHostApi.generateQrCodeUrl" + + messageChannelSuffix, + getCodec()); + if (api != null) { + channel.setMessageHandler( + (message, reply) -> { + ArrayList wrapped = new ArrayList<>(); + ArrayList args = (ArrayList) message; + String secretKeyArg = (String) args.get(0); + String accountNameArg = (String) args.get(1); + String issuerArg = (String) args.get(2); + Result resultCallback = + new Result() { + public void success(String result) { + wrapped.add(0, result); + reply.reply(wrapped); + } + + public void error(Throwable error) { + ArrayList wrappedError = wrapError(error); + reply.reply(wrappedError); + } + }; + + api.generateQrCodeUrl(secretKeyArg, accountNameArg, issuerArg, resultCallback); + }); + } else { + channel.setMessageHandler(null); + } + } + { + BasicMessageChannel channel = + new BasicMessageChannel<>( + binaryMessenger, + "dev.flutter.pigeon.firebase_auth_platform_interface.MultiFactorTotpSecretHostApi.openInOtpApp" + + messageChannelSuffix, + getCodec()); + if (api != null) { + channel.setMessageHandler( + (message, reply) -> { + ArrayList wrapped = new ArrayList<>(); + ArrayList args = (ArrayList) message; + String secretKeyArg = (String) args.get(0); + String qrCodeUrlArg = (String) args.get(1); + VoidResult resultCallback = + new VoidResult() { + public void success() { + wrapped.add(0, null); + reply.reply(wrapped); + } + + public void error(Throwable error) { + ArrayList wrappedError = wrapError(error); + reply.reply(wrappedError); + } + }; + + api.openInOtpApp(secretKeyArg, qrCodeUrlArg, resultCallback); + }); + } else { + channel.setMessageHandler(null); + } + } + } + } + + /** + * Only used to generate the object interface that are use outside of the Pigeon interface + * + *

Generated interface from Pigeon that represents a handler of messages from Flutter. + */ + public interface GenerateInterfaces { + + void pigeonInterface(@NonNull InternalMultiFactorInfo info); + + /** The codec used by GenerateInterfaces. */ + static @NonNull MessageCodec getCodec() { + return PigeonCodec.INSTANCE; + } + + /** + * Sets up an instance of `GenerateInterfaces` to handle messages through the `binaryMessenger`. + */ + static void setUp(@NonNull BinaryMessenger binaryMessenger, @Nullable GenerateInterfaces api) { + setUp(binaryMessenger, "", api); + } + + static void setUp( + @NonNull BinaryMessenger binaryMessenger, + @NonNull String messageChannelSuffix, + @Nullable GenerateInterfaces api) { + messageChannelSuffix = messageChannelSuffix.isEmpty() ? "" : "." + messageChannelSuffix; + { + BasicMessageChannel channel = + new BasicMessageChannel<>( + binaryMessenger, + "dev.flutter.pigeon.firebase_auth_platform_interface.GenerateInterfaces.pigeonInterface" + + messageChannelSuffix, + getCodec()); + if (api != null) { + channel.setMessageHandler( + (message, reply) -> { + ArrayList wrapped = new ArrayList<>(); + ArrayList args = (ArrayList) message; + InternalMultiFactorInfo infoArg = (InternalMultiFactorInfo) args.get(0); + try { + api.pigeonInterface(infoArg); + wrapped.add(0, null); + } catch (Throwable exception) { + wrapped = wrapError(exception); + } + reply.reply(wrapped); + }); + } else { + channel.setMessageHandler(null); + } + } + } + } +} diff --git a/mih_ui/android/build/ios/SourcePackages/firebase_auth-6.5.4/android/src/main/java/io/flutter/plugins/firebase/auth/IdTokenChannelStreamHandler.java b/mih_ui/android/build/ios/SourcePackages/firebase_auth-6.5.4/android/src/main/java/io/flutter/plugins/firebase/auth/IdTokenChannelStreamHandler.java new file mode 100644 index 00000000..ae413a40 --- /dev/null +++ b/mih_ui/android/build/ios/SourcePackages/firebase_auth-6.5.4/android/src/main/java/io/flutter/plugins/firebase/auth/IdTokenChannelStreamHandler.java @@ -0,0 +1,63 @@ +/* + * Copyright 2022, the Chromium project authors. Please see the AUTHORS file + * for details. All rights reserved. Use of this source code is governed by a + * BSD-style license that can be found in the LICENSE file. + */ + +package io.flutter.plugins.firebase.auth; + +import com.google.firebase.auth.FirebaseAuth; +import com.google.firebase.auth.FirebaseAuth.IdTokenListener; +import com.google.firebase.auth.FirebaseUser; +import io.flutter.plugin.common.EventChannel.EventSink; +import io.flutter.plugin.common.EventChannel.StreamHandler; +import java.util.HashMap; +import java.util.Map; +import java.util.concurrent.atomic.AtomicBoolean; + +public class IdTokenChannelStreamHandler implements StreamHandler { + + private final FirebaseAuth firebaseAuth; + private IdTokenListener idTokenListener; + + public IdTokenChannelStreamHandler(FirebaseAuth firebaseAuth) { + this.firebaseAuth = firebaseAuth; + } + + @Override + public void onListen(Object arguments, EventSink events) { + Map event = new HashMap<>(); + event.put(Constants.APP_NAME, firebaseAuth.getApp().getName()); + + final AtomicBoolean initialAuthState = new AtomicBoolean(true); + + idTokenListener = + auth -> { + if (initialAuthState.get()) { + initialAuthState.set(false); + return; + } + + FirebaseUser user = auth.getCurrentUser(); + + if (user == null) { + event.put(Constants.USER, null); + } else { + event.put( + Constants.USER, PigeonParser.manuallyToList(PigeonParser.parseFirebaseUser(user))); + } + + events.success(event); + }; + + firebaseAuth.addIdTokenListener(idTokenListener); + } + + @Override + public void onCancel(Object arguments) { + if (idTokenListener != null) { + firebaseAuth.removeIdTokenListener(idTokenListener); + idTokenListener = null; + } + } +} diff --git a/mih_ui/android/build/ios/SourcePackages/firebase_auth-6.5.4/android/src/main/java/io/flutter/plugins/firebase/auth/PhoneNumberVerificationStreamHandler.java b/mih_ui/android/build/ios/SourcePackages/firebase_auth-6.5.4/android/src/main/java/io/flutter/plugins/firebase/auth/PhoneNumberVerificationStreamHandler.java new file mode 100644 index 00000000..a227be99 --- /dev/null +++ b/mih_ui/android/build/ios/SourcePackages/firebase_auth-6.5.4/android/src/main/java/io/flutter/plugins/firebase/auth/PhoneNumberVerificationStreamHandler.java @@ -0,0 +1,197 @@ +/* + * Copyright 2022, the Chromium project authors. Please see the AUTHORS file + * for details. All rights reserved. Use of this source code is governed by a + * BSD-style license that can be found in the LICENSE file. + */ + +package io.flutter.plugins.firebase.auth; + +import android.app.Activity; +import androidx.annotation.NonNull; +import androidx.annotation.Nullable; +import com.google.firebase.FirebaseException; +import com.google.firebase.auth.FirebaseAuth; +import com.google.firebase.auth.MultiFactorSession; +import com.google.firebase.auth.PhoneAuthCredential; +import com.google.firebase.auth.PhoneAuthOptions; +import com.google.firebase.auth.PhoneAuthProvider; +import com.google.firebase.auth.PhoneAuthProvider.ForceResendingToken; +import com.google.firebase.auth.PhoneMultiFactorInfo; +import io.flutter.plugin.common.EventChannel.EventSink; +import io.flutter.plugin.common.EventChannel.StreamHandler; +import java.util.HashMap; +import java.util.Locale; +import java.util.Map; +import java.util.concurrent.TimeUnit; +import java.util.concurrent.atomic.AtomicReference; + +public class PhoneNumberVerificationStreamHandler implements StreamHandler { + + interface OnCredentialsListener { + void onCredentialsReceived(PhoneAuthCredential credential); + } + + final AtomicReference activityRef = new AtomicReference<>(null); + final FirebaseAuth firebaseAuth; + final String phoneNumber; + final PhoneMultiFactorInfo multiFactorInfo; + final int timeout; + final OnCredentialsListener onCredentialsListener; + + final MultiFactorSession multiFactorSession; + + String autoRetrievedSmsCodeForTesting; + Integer forceResendingToken; + + private static final HashMap forceResendingTokens = new HashMap<>(); + + @Nullable private EventSink eventSink; + + public PhoneNumberVerificationStreamHandler( + Activity activity, + @NonNull GeneratedAndroidFirebaseAuth.AuthPigeonFirebaseApp app, + @NonNull GeneratedAndroidFirebaseAuth.InternalVerifyPhoneNumberRequest request, + @Nullable MultiFactorSession multiFactorSession, + @Nullable PhoneMultiFactorInfo multiFactorInfo, + OnCredentialsListener onCredentialsListener) { + this.activityRef.set(activity); + + this.multiFactorSession = multiFactorSession; + this.multiFactorInfo = multiFactorInfo; + firebaseAuth = FlutterFirebaseAuthPlugin.getAuthFromPigeon(app); + phoneNumber = request.getPhoneNumber(); + timeout = Math.toIntExact(request.getTimeout()); + + if (request.getAutoRetrievedSmsCodeForTesting() != null) { + autoRetrievedSmsCodeForTesting = request.getAutoRetrievedSmsCodeForTesting(); + } + + if (request.getForceResendingToken() != null) { + forceResendingToken = Math.toIntExact(request.getForceResendingToken()); + } + + this.onCredentialsListener = onCredentialsListener; + } + + @Override + public void onListen(Object arguments, EventSink events) { + eventSink = events; + + PhoneAuthProvider.OnVerificationStateChangedCallbacks callbacks = + new PhoneAuthProvider.OnVerificationStateChangedCallbacks() { + @Override + public void onVerificationCompleted(@NonNull PhoneAuthCredential phoneAuthCredential) { + int phoneAuthCredentialHashCode = phoneAuthCredential.hashCode(); + onCredentialsListener.onCredentialsReceived(phoneAuthCredential); + + Map event = new HashMap<>(); + event.put(Constants.TOKEN, phoneAuthCredentialHashCode); + + if (phoneAuthCredential.getSmsCode() != null) { + event.put(Constants.SMS_CODE, phoneAuthCredential.getSmsCode()); + } + + event.put(Constants.NAME, "Auth#phoneVerificationCompleted"); + + if (eventSink != null) { + eventSink.success(event); + } + } + + @Override + public void onVerificationFailed(@NonNull FirebaseException e) { + Map event = new HashMap<>(); + Map error = new HashMap<>(); + GeneratedAndroidFirebaseAuth.FlutterError flutterError = + FlutterFirebaseAuthPluginException.parserExceptionToFlutter(e); + error.put( + "code", + flutterError + .code + .replaceAll("ERROR_", "") + .toLowerCase(Locale.ROOT) + .replaceAll("_", "-")); + error.put("message", flutterError.getMessage()); + error.put("details", flutterError.details); + event.put("error", error); + + event.put(Constants.NAME, "Auth#phoneVerificationFailed"); + + if (eventSink != null) { + eventSink.success(event); + } + } + + @Override + public void onCodeSent( + @NonNull String verificationId, + @NonNull PhoneAuthProvider.ForceResendingToken token) { + int forceResendingTokenHashCode = token.hashCode(); + forceResendingTokens.put(forceResendingTokenHashCode, token); + + Map event = new HashMap<>(); + event.put(Constants.VERIFICATION_ID, verificationId); + event.put(Constants.FORCE_RESENDING_TOKEN, forceResendingTokenHashCode); + + event.put(Constants.NAME, "Auth#phoneCodeSent"); + + if (eventSink != null) { + eventSink.success(event); + } + } + + @Override + public void onCodeAutoRetrievalTimeOut(@NonNull String verificationId) { + Map event = new HashMap<>(); + event.put(Constants.VERIFICATION_ID, verificationId); + + event.put(Constants.NAME, "Auth#phoneCodeAutoRetrievalTimeout"); + + if (eventSink != null) { + eventSink.success(event); + } + } + }; + + // Allows the auto-retrieval flow to be tested. + // See https://firebase.google.com/docs/auth/android/phone-auth#integration-testing + if (autoRetrievedSmsCodeForTesting != null) { + firebaseAuth + .getFirebaseAuthSettings() + .setAutoRetrievedSmsCodeForPhoneNumber(phoneNumber, autoRetrievedSmsCodeForTesting); + } + + PhoneAuthOptions.Builder phoneAuthOptionsBuilder = new PhoneAuthOptions.Builder(firebaseAuth); + phoneAuthOptionsBuilder.setActivity(activityRef.get()); + phoneAuthOptionsBuilder.setCallbacks(callbacks); + + if (phoneNumber != null) { + phoneAuthOptionsBuilder.setPhoneNumber(phoneNumber); + } + if (multiFactorSession != null) { + phoneAuthOptionsBuilder.setMultiFactorSession(multiFactorSession); + } + if (multiFactorInfo != null) { + phoneAuthOptionsBuilder.setMultiFactorHint(multiFactorInfo); + } + phoneAuthOptionsBuilder.setTimeout((long) timeout, TimeUnit.MILLISECONDS); + + if (forceResendingToken != null) { + PhoneAuthProvider.ForceResendingToken forceResendingToken = + forceResendingTokens.get(this.forceResendingToken); + + if (forceResendingToken != null) { + phoneAuthOptionsBuilder.setForceResendingToken(forceResendingToken); + } + } + + PhoneAuthProvider.verifyPhoneNumber(phoneAuthOptionsBuilder.build()); + } + + @Override + public void onCancel(Object arguments) { + eventSink = null; + + activityRef.set(null); + } +} diff --git a/mih_ui/android/build/ios/SourcePackages/firebase_auth-6.5.4/android/src/main/java/io/flutter/plugins/firebase/auth/PigeonParser.java b/mih_ui/android/build/ios/SourcePackages/firebase_auth-6.5.4/android/src/main/java/io/flutter/plugins/firebase/auth/PigeonParser.java new file mode 100644 index 00000000..4c9e102a --- /dev/null +++ b/mih_ui/android/build/ios/SourcePackages/firebase_auth-6.5.4/android/src/main/java/io/flutter/plugins/firebase/auth/PigeonParser.java @@ -0,0 +1,382 @@ +/* + * Copyright 2023, the Chromium project authors. Please see the AUTHORS file + * for details. All rights reserved. Use of this source code is governed by a + * BSD-style license that can be found in the LICENSE file. + */ + +package io.flutter.plugins.firebase.auth; + +import android.net.Uri; +import androidx.annotation.NonNull; +import com.google.firebase.auth.ActionCodeEmailInfo; +import com.google.firebase.auth.ActionCodeInfo; +import com.google.firebase.auth.ActionCodeResult; +import com.google.firebase.auth.ActionCodeSettings; +import com.google.firebase.auth.AdditionalUserInfo; +import com.google.firebase.auth.AuthCredential; +import com.google.firebase.auth.AuthResult; +import com.google.firebase.auth.EmailAuthProvider; +import com.google.firebase.auth.FacebookAuthProvider; +import com.google.firebase.auth.FirebaseAuthProvider; +import com.google.firebase.auth.FirebaseUser; +import com.google.firebase.auth.FirebaseUserMetadata; +import com.google.firebase.auth.GetTokenResult; +import com.google.firebase.auth.GithubAuthProvider; +import com.google.firebase.auth.GoogleAuthProvider; +import com.google.firebase.auth.MultiFactorInfo; +import com.google.firebase.auth.OAuthCredential; +import com.google.firebase.auth.OAuthProvider; +import com.google.firebase.auth.PhoneAuthProvider; +import com.google.firebase.auth.PhoneMultiFactorInfo; +import com.google.firebase.auth.PlayGamesAuthProvider; +import com.google.firebase.auth.TwitterAuthProvider; +import com.google.firebase.auth.UserInfo; +import java.util.ArrayList; +import java.util.HashMap; +import java.util.List; +import java.util.Map; +import java.util.Objects; + +public class PigeonParser { + static List manuallyToList( + GeneratedAndroidFirebaseAuth.InternalUserDetails pigeonUserDetails) { + List output = new ArrayList<>(); + output.add(pigeonUserDetails.getUserInfo().toList()); + output.add(pigeonUserDetails.getProviderData()); + return output; + } + + static GeneratedAndroidFirebaseAuth.InternalUserCredential parseAuthResult( + @NonNull AuthResult authResult) { + GeneratedAndroidFirebaseAuth.InternalUserCredential.Builder builder = + new GeneratedAndroidFirebaseAuth.InternalUserCredential.Builder(); + + builder.setAdditionalUserInfo(parseAdditionalUserInfo(authResult.getAdditionalUserInfo())); + builder.setCredential(parseAuthCredential(authResult.getCredential())); + builder.setUser(parseFirebaseUser(authResult.getUser())); + + return builder.build(); + } + + private static GeneratedAndroidFirebaseAuth.InternalAdditionalUserInfo parseAdditionalUserInfo( + AdditionalUserInfo additionalUserInfo) { + if (additionalUserInfo == null) { + return null; + } + + GeneratedAndroidFirebaseAuth.InternalAdditionalUserInfo.Builder builder = + new GeneratedAndroidFirebaseAuth.InternalAdditionalUserInfo.Builder(); + + builder.setIsNewUser(additionalUserInfo.isNewUser()); + builder.setProfile(additionalUserInfo.getProfile()); + builder.setProviderId(additionalUserInfo.getProviderId()); + builder.setUsername(additionalUserInfo.getUsername()); + + return builder.build(); + } + + static GeneratedAndroidFirebaseAuth.InternalAuthCredential parseAuthCredential( + AuthCredential authCredential) { + if (authCredential == null) { + return null; + } + + int authCredentialHashCode = authCredential.hashCode(); + FlutterFirebaseAuthPlugin.authCredentials.put(authCredentialHashCode, authCredential); + + GeneratedAndroidFirebaseAuth.InternalAuthCredential.Builder builder = + new GeneratedAndroidFirebaseAuth.InternalAuthCredential.Builder(); + + builder.setProviderId(authCredential.getProvider()); + builder.setSignInMethod(authCredential.getSignInMethod()); + builder.setNativeId((long) authCredentialHashCode); + if (authCredential instanceof OAuthCredential) { + builder.setAccessToken(((OAuthCredential) authCredential).getAccessToken()); + } + + return builder.build(); + } + + static GeneratedAndroidFirebaseAuth.InternalUserDetails parseFirebaseUser( + FirebaseUser firebaseUser) { + if (firebaseUser == null) { + return null; + } + + GeneratedAndroidFirebaseAuth.InternalUserDetails.Builder builder = + new GeneratedAndroidFirebaseAuth.InternalUserDetails.Builder(); + + GeneratedAndroidFirebaseAuth.InternalUserInfo.Builder builderInfo = + new GeneratedAndroidFirebaseAuth.InternalUserInfo.Builder(); + + builderInfo.setDisplayName(firebaseUser.getDisplayName()); + builderInfo.setEmail(firebaseUser.getEmail()); + builderInfo.setIsEmailVerified(firebaseUser.isEmailVerified()); + builderInfo.setIsAnonymous(firebaseUser.isAnonymous()); + + final FirebaseUserMetadata userMetadata = firebaseUser.getMetadata(); + if (userMetadata != null) { + builderInfo.setCreationTimestamp(firebaseUser.getMetadata().getCreationTimestamp()); + builderInfo.setLastSignInTimestamp(firebaseUser.getMetadata().getLastSignInTimestamp()); + } + builderInfo.setPhoneNumber(firebaseUser.getPhoneNumber()); + builderInfo.setPhotoUrl(parsePhotoUrl(firebaseUser.getPhotoUrl())); + builderInfo.setUid(firebaseUser.getUid()); + builderInfo.setTenantId(firebaseUser.getTenantId()); + + builder.setUserInfo(builderInfo.build()); + builder.setProviderData(parseUserInfoList(firebaseUser.getProviderData())); + + return builder.build(); + } + + private static List> parseUserInfoList( + List userInfoList) { + List> output = new ArrayList<>(); + + if (userInfoList == null) { + return null; + } + + for (UserInfo userInfo : new ArrayList(userInfoList)) { + if (userInfo == null) { + continue; + } + if (!FirebaseAuthProvider.PROVIDER_ID.equals(userInfo.getProviderId())) { + output.add(parseUserInfoToMap(userInfo)); + } + } + + return output; + } + + private static Map parseUserInfoToMap(UserInfo userInfo) { + Map output = new HashMap<>(); + output.put("displayName", userInfo.getDisplayName()); + output.put("email", userInfo.getEmail()); + output.put("isEmailVerified", userInfo.isEmailVerified()); + output.put("phoneNumber", userInfo.getPhoneNumber()); + output.put("photoUrl", parsePhotoUrl(userInfo.getPhotoUrl())); + // Can be null on Emulator + output.put("uid", userInfo.getUid() == null ? "" : userInfo.getUid()); + output.put("providerId", userInfo.getProviderId()); + output.put("isAnonymous", false); + return output; + } + + private static String parsePhotoUrl(Uri photoUri) { + if (photoUri == null) { + return null; + } + + String photoUrl = photoUri.toString(); + + // Return null if the URL is an empty string + return "".equals(photoUrl) ? null : photoUrl; + } + + @SuppressWarnings("ConstantConditions") + static AuthCredential getCredential(Map credentialMap) { + // If the credential map contains a token, it means a native one has been stored + if (credentialMap.get(Constants.TOKEN) != null) { + int token = ((Number) credentialMap.get(Constants.TOKEN)).intValue(); + AuthCredential credential = FlutterFirebaseAuthPlugin.authCredentials.get(token); + + if (credential == null) { + throw FlutterFirebaseAuthPluginException.invalidCredential(); + } + + return credential; + } + + String signInMethod = + (String) Objects.requireNonNull(credentialMap.get(Constants.SIGN_IN_METHOD)); + String secret = (String) credentialMap.get(Constants.SECRET); + String idToken = (String) credentialMap.get(Constants.ID_TOKEN); + String accessToken = (String) credentialMap.get(Constants.ACCESS_TOKEN); + String rawNonce = (String) credentialMap.get(Constants.RAW_NONCE); + + switch (signInMethod) { + case Constants.SIGN_IN_METHOD_PASSWORD: + return EmailAuthProvider.getCredential( + (String) Objects.requireNonNull(credentialMap.get(Constants.EMAIL)), + Objects.requireNonNull(secret)); + case Constants.SIGN_IN_METHOD_EMAIL_LINK: + return EmailAuthProvider.getCredentialWithLink( + (String) Objects.requireNonNull(credentialMap.get(Constants.EMAIL)), + (String) Objects.requireNonNull(credentialMap.get(Constants.EMAIL_LINK))); + case Constants.SIGN_IN_METHOD_FACEBOOK: + return FacebookAuthProvider.getCredential(Objects.requireNonNull(accessToken)); + case Constants.SIGN_IN_METHOD_GOOGLE: + return GoogleAuthProvider.getCredential(idToken, accessToken); + case Constants.SIGN_IN_METHOD_TWITTER: + return TwitterAuthProvider.getCredential( + Objects.requireNonNull(accessToken), Objects.requireNonNull(secret)); + case Constants.SIGN_IN_METHOD_GITHUB: + return GithubAuthProvider.getCredential(Objects.requireNonNull(accessToken)); + case Constants.SIGN_IN_METHOD_PHONE: + { + String verificationId = + (String) Objects.requireNonNull(credentialMap.get(Constants.VERIFICATION_ID)); + String smsCode = (String) Objects.requireNonNull(credentialMap.get(Constants.SMS_CODE)); + return PhoneAuthProvider.getCredential(verificationId, smsCode); + } + case Constants.SIGN_IN_METHOD_OAUTH: + { + String providerId = + (String) Objects.requireNonNull(credentialMap.get(Constants.PROVIDER_ID)); + OAuthProvider.CredentialBuilder builder = OAuthProvider.newCredentialBuilder(providerId); + if (accessToken != null) { + builder.setAccessToken(accessToken); + } + if (rawNonce == null) { + builder.setIdToken(Objects.requireNonNull(idToken)); + } else { + builder.setIdTokenWithRawNonce(Objects.requireNonNull(idToken), rawNonce); + } + + return builder.build(); + } + case Constants.SIGN_IN_METHOD_PLAY_GAMES: + { + String serverAuthCode = + (String) Objects.requireNonNull(credentialMap.get(Constants.SERVER_AUTH_CODE)); + return PlayGamesAuthProvider.getCredential(serverAuthCode); + } + default: + return null; + } + } + + static ActionCodeSettings getActionCodeSettings( + @NonNull GeneratedAndroidFirebaseAuth.InternalActionCodeSettings pigeonActionCodeSettings) { + ActionCodeSettings.Builder builder = ActionCodeSettings.newBuilder(); + + builder.setUrl(pigeonActionCodeSettings.getUrl()); + + if (pigeonActionCodeSettings.getDynamicLinkDomain() != null) { + builder.setDynamicLinkDomain(pigeonActionCodeSettings.getDynamicLinkDomain()); + } + + if (pigeonActionCodeSettings.getLinkDomain() != null) { + builder.setLinkDomain(pigeonActionCodeSettings.getLinkDomain()); + } + + builder.setHandleCodeInApp(pigeonActionCodeSettings.getHandleCodeInApp()); + + if (pigeonActionCodeSettings.getAndroidPackageName() != null) { + builder.setAndroidPackageName( + pigeonActionCodeSettings.getAndroidPackageName(), + pigeonActionCodeSettings.getAndroidInstallApp(), + pigeonActionCodeSettings.getAndroidMinimumVersion()); + } + + if (pigeonActionCodeSettings.getIOSBundleId() != null) { + builder.setIOSBundleId(pigeonActionCodeSettings.getIOSBundleId()); + } + + return builder.build(); + } + + static List multiFactorInfoToPigeon( + List hints) { + List pigeonHints = new ArrayList<>(); + for (MultiFactorInfo info : hints) { + if (info instanceof PhoneMultiFactorInfo) { + pigeonHints.add( + new GeneratedAndroidFirebaseAuth.InternalMultiFactorInfo.Builder() + .setPhoneNumber(((PhoneMultiFactorInfo) info).getPhoneNumber()) + .setDisplayName(info.getDisplayName()) + .setEnrollmentTimestamp((double) info.getEnrollmentTimestamp()) + .setUid(info.getUid()) + .setFactorId(info.getFactorId()) + .build()); + + } else { + pigeonHints.add( + new GeneratedAndroidFirebaseAuth.InternalMultiFactorInfo.Builder() + .setDisplayName(info.getDisplayName()) + .setEnrollmentTimestamp((double) info.getEnrollmentTimestamp()) + .setUid(info.getUid()) + .setFactorId(info.getFactorId()) + .build()); + } + } + return pigeonHints; + } + + static List> multiFactorInfoToMap(List hints) { + List> pigeonHints = new ArrayList<>(); + for (GeneratedAndroidFirebaseAuth.InternalMultiFactorInfo info : + multiFactorInfoToPigeon(hints)) { + pigeonHints.add(info.toList()); + } + return pigeonHints; + } + + static GeneratedAndroidFirebaseAuth.InternalActionCodeInfo parseActionCodeResult( + @NonNull ActionCodeResult actionCodeResult) { + GeneratedAndroidFirebaseAuth.InternalActionCodeInfo.Builder builder = + new GeneratedAndroidFirebaseAuth.InternalActionCodeInfo.Builder(); + GeneratedAndroidFirebaseAuth.InternalActionCodeInfoData.Builder builderData = + new GeneratedAndroidFirebaseAuth.InternalActionCodeInfoData.Builder(); + + int operation = actionCodeResult.getOperation(); + + switch (operation) { + case ActionCodeResult.PASSWORD_RESET: + builder.setOperation(GeneratedAndroidFirebaseAuth.ActionCodeInfoOperation.PASSWORD_RESET); + break; + case ActionCodeResult.VERIFY_EMAIL: + builder.setOperation(GeneratedAndroidFirebaseAuth.ActionCodeInfoOperation.VERIFY_EMAIL); + break; + case ActionCodeResult.RECOVER_EMAIL: + builder.setOperation(GeneratedAndroidFirebaseAuth.ActionCodeInfoOperation.RECOVER_EMAIL); + break; + case ActionCodeResult.SIGN_IN_WITH_EMAIL_LINK: + builder.setOperation(GeneratedAndroidFirebaseAuth.ActionCodeInfoOperation.EMAIL_SIGN_IN); + break; + case ActionCodeResult.VERIFY_BEFORE_CHANGE_EMAIL: + builder.setOperation( + GeneratedAndroidFirebaseAuth.ActionCodeInfoOperation.VERIFY_AND_CHANGE_EMAIL); + break; + case ActionCodeResult.REVERT_SECOND_FACTOR_ADDITION: + builder.setOperation( + GeneratedAndroidFirebaseAuth.ActionCodeInfoOperation.REVERT_SECOND_FACTOR_ADDITION); + break; + } + + ActionCodeInfo actionCodeInfo = actionCodeResult.getInfo(); + + if (actionCodeInfo != null && operation == ActionCodeResult.VERIFY_EMAIL + || operation == ActionCodeResult.PASSWORD_RESET) { + builderData.setEmail(actionCodeInfo.getEmail()); + } else if (operation == ActionCodeResult.RECOVER_EMAIL + || operation == ActionCodeResult.VERIFY_BEFORE_CHANGE_EMAIL) { + ActionCodeEmailInfo actionCodeEmailInfo = + (ActionCodeEmailInfo) Objects.requireNonNull(actionCodeInfo); + builderData.setEmail(actionCodeEmailInfo.getEmail()); + builderData.setPreviousEmail(actionCodeEmailInfo.getPreviousEmail()); + } + + builder.setData(builderData.build()); + + return builder.build(); + } + + static GeneratedAndroidFirebaseAuth.InternalIdTokenResult parseTokenResult( + @NonNull GetTokenResult tokenResult) { + final GeneratedAndroidFirebaseAuth.InternalIdTokenResult.Builder builder = + new GeneratedAndroidFirebaseAuth.InternalIdTokenResult.Builder(); + + builder.setToken(tokenResult.getToken()); + builder.setSignInProvider(tokenResult.getSignInProvider()); + builder.setAuthTimestamp(tokenResult.getAuthTimestamp() * 1000); + builder.setExpirationTimestamp(tokenResult.getExpirationTimestamp() * 1000); + builder.setIssuedAtTimestamp(tokenResult.getIssuedAtTimestamp() * 1000); + builder.setClaims(tokenResult.getClaims()); + builder.setSignInSecondFactor(tokenResult.getSignInSecondFactor()); + + return builder.build(); + } +} diff --git a/mih_ui/android/build/ios/SourcePackages/firebase_auth-6.5.4/android/user-agent.gradle b/mih_ui/android/build/ios/SourcePackages/firebase_auth-6.5.4/android/user-agent.gradle new file mode 100644 index 00000000..38e5e646 --- /dev/null +++ b/mih_ui/android/build/ios/SourcePackages/firebase_auth-6.5.4/android/user-agent.gradle @@ -0,0 +1,22 @@ +import java.util.regex.Matcher +import java.util.regex.Pattern + +String libraryVersionName = "UNKNOWN" +String libraryName = "flutter-fire-auth" +File pubspec = new File(project.projectDir.parentFile, 'pubspec.yaml') + +if (pubspec.exists()) { + String yaml = pubspec.text + // Using \s*['|"]?([^\n|'|"]*)['|"]? to extract version number. + Matcher versionMatcher = Pattern.compile("^version:\\s*['|\"]?([^\\n|'|\"]*)['|\"]?\$", Pattern.MULTILINE).matcher(yaml) + if (versionMatcher.find()) libraryVersionName = versionMatcher.group(1).replaceAll("\\+", "-") +} + +android { + defaultConfig { + // BuildConfig.VERSION_NAME + buildConfigField 'String', 'LIBRARY_VERSION', "\"${libraryVersionName}\"" + // BuildConfig.LIBRARY_NAME + buildConfigField 'String', 'LIBRARY_NAME', "\"${libraryName}\"" + } +} diff --git a/mih_ui/android/build/ios/SourcePackages/firebase_auth-6.5.4/example/README.md b/mih_ui/android/build/ios/SourcePackages/firebase_auth-6.5.4/example/README.md new file mode 100644 index 00000000..8a9c4d3b --- /dev/null +++ b/mih_ui/android/build/ios/SourcePackages/firebase_auth-6.5.4/example/README.md @@ -0,0 +1,58 @@ +# Firebase Auth Example + +[![pub package](https://img.shields.io/pub/v/firebase_auth.svg)](https://pub.dev/packages/firebase_auth) + +Demonstrates how to use the `firebase_auth` plugin and enable multiple auth providers. + +## Phone Auth + +1. Enable phone authentication in the [Firebase console]((https://console.firebase.google.com/u/0/project/_/authentication/providers)). +2. Add test phone number and verification code to the Firebase console. + - For this sample the number `+1 408-555-6969` and verification code `888888` are used. +3. For iOS set the `URL Schemes` to the `REVERSE_CLIENT_ID` from the `GoogleServices-Info.plist` file. +4. Enter the phone number `+1 408-555-6969` and press the `Verify phone number` button. +5. Once the phone number is verified the app displays the test + verification code. +6. Enter the verficication code `888888` and press "Sign in with phone number" +7. Signed in user ID is now displayed in the UI. + +## Google Sign-In + +1. Enable Google authentication in the [Firebase console](https://console.firebase.google.com/u/0/project/_/authentication/providers). +2. For Android, add your app's package name and SHA-1 fingerprint to the [Settings page](https://console.firebase.google.com/project/_/settings/general) of the Firebase console. Refer to [Authenticating Your Client]('https://developers.google.com/android/guides/client-auth') for details on how to get your app's SHA-1 fingerprint. +3. For iOS set the `URL Schemes` to the `REVERSE_CLIENT_ID` from the `GoogleServices-Info.plist` file (same step for `Phone Auth` above). +4. Select `Google` under `Social Authentication` and click the `Sign In With Google` button. +5. Signed in user's details are displayed in the UI. + +### Running on Web + +Make sure you run the example app on port 5000, since `localhost:5000` is +whitelisted for Google authentication. To do so, run: + +``` +flutter run -d web-server --web-port 5000 +``` + +## GitHub Sign-In +To get your `clientId` and `clientSecret`: +1. Visit https://github.com/settings/developers. +2. Create a new OAuth application. +3. Set **Home Page URL** to `https://react-native-firebase-testing.firebaseapp.com`. +4. Set **Authorization callback URL** to `https://react-native-firebase-testing.firebaseapp.com/__/auth/handler`. +5. After you register your app, add the `clientId` and `clientSecret` to the example app config in [`lib/config.dart`](./lib/config.dart). + +## Twitter Sign-In +Twitter sign in requires you to add keys from Twitter Developer API to Firebase Console, which means you cannot use the provided configurations with the example app, instead, **please create a new Firebase project**, then enable Twitter as an Auth provider (*optionally you can enable the rest of providers supported in this example*). + +To get your `apiKey` and `apiSecretKey` for Twitter: +1. Sign up for a developer account on [Twitter Developer](https://developer.twitter.com). +2. Create a new app and copy your keys. +3. From the dashboard, go to your app settings, then go to OAuth settings and turn on OAuth 1.0a, then add 2 callback URLs: + 1. `flutterfireauth://` + 2. `https://react-native-firebase-testing.firebaseapp.com/__/auth/handler` +4. Add your keys to the example app config in [`lib/config.dart`](./lib/config.dart). + +## Getting Started + +For help getting started with Flutter, view the online +[documentation](https://flutter.dev/). diff --git a/mih_ui/android/build/ios/SourcePackages/firebase_auth-6.5.4/example/analysis_options.yaml b/mih_ui/android/build/ios/SourcePackages/firebase_auth-6.5.4/example/analysis_options.yaml new file mode 100644 index 00000000..201a5ca4 --- /dev/null +++ b/mih_ui/android/build/ios/SourcePackages/firebase_auth-6.5.4/example/analysis_options.yaml @@ -0,0 +1,7 @@ +include: ../../../../analysis_options.yaml + +linter: + rules: + avoid_print: false + depend_on_referenced_packages: false + library_private_types_in_public_api: false diff --git a/mih_ui/android/build/ios/SourcePackages/firebase_auth-6.5.4/example/android/app/build.gradle b/mih_ui/android/build/ios/SourcePackages/firebase_auth-6.5.4/example/android/app/build.gradle new file mode 100644 index 00000000..db427be9 --- /dev/null +++ b/mih_ui/android/build/ios/SourcePackages/firebase_auth-6.5.4/example/android/app/build.gradle @@ -0,0 +1,62 @@ +plugins { + id "com.android.application" + // START: FlutterFire Configuration + id 'com.google.gms.google-services' + // END: FlutterFire Configuration + id "kotlin-android" + // The Flutter Gradle Plugin must be applied after the Android and Kotlin Gradle plugins. + id "dev.flutter.flutter-gradle-plugin" +} + +def localProperties = new Properties() +def localPropertiesFile = rootProject.file("local.properties") +if (localPropertiesFile.exists()) { + localPropertiesFile.withReader("UTF-8") { reader -> + localProperties.load(reader) + } +} + +def flutterVersionCode = localProperties.getProperty("flutter.versionCode") +if (flutterVersionCode == null) { + flutterVersionCode = "1" +} + +def flutterVersionName = localProperties.getProperty("flutter.versionName") +if (flutterVersionName == null) { + flutterVersionName = "1.0" +} + +android { + namespace = "io.flutter.plugins.firebase.auth.example" + compileSdk = flutter.compileSdkVersion + ndkVersion = flutter.ndkVersion + compileOptions { + sourceCompatibility = JavaVersion.VERSION_17 + targetCompatibility = JavaVersion.VERSION_17 + } + kotlinOptions { + jvmTarget = JavaVersion.VERSION_17 + } + + defaultConfig { + applicationId = "io.flutter.plugins.firebase.auth.example" + // You can update the following values to match your application needs. + // For more information, see: https://docs.flutter.dev/deployment/android#reviewing-the-gradle-build-configuration. + minSdkVersion = flutter.minSdkVersion + targetSdk = flutter.targetSdkVersion + versionCode = flutterVersionCode.toInteger() + versionName = flutterVersionName + } + + buildTypes { + release { + // TODO: Add your own signing config for the release build. + // Signing with the debug keys for now, so `flutter run --release` works. + signingConfig = signingConfigs.debug + } + } +} + +flutter { + source = "../.." +} diff --git a/mih_ui/android/build/ios/SourcePackages/firebase_auth-6.5.4/example/android/app/google-services.json b/mih_ui/android/build/ios/SourcePackages/firebase_auth-6.5.4/example/android/app/google-services.json new file mode 100644 index 00000000..348716f0 --- /dev/null +++ b/mih_ui/android/build/ios/SourcePackages/firebase_auth-6.5.4/example/android/app/google-services.json @@ -0,0 +1,615 @@ +{ + "project_info": { + "project_number": "406099696497", + "firebase_url": "https://flutterfire-e2e-tests-default-rtdb.europe-west1.firebasedatabase.app", + "project_id": "flutterfire-e2e-tests", + "storage_bucket": "flutterfire-e2e-tests.appspot.com" + }, + "client": [ + { + "client_info": { + "mobilesdk_app_id": "1:406099696497:android:d86a91cc7b338b233574d0", + "android_client_info": { + "package_name": "io.flutter.plugins.firebase.analytics.example" + } + }, + "oauth_client": [ + { + "client_id": "406099696497-a12gakvts4epfk5pkio7dphc1anjiggc.apps.googleusercontent.com", + "client_type": 3 + } + ], + "api_key": [ + { + "current_key": "AIzaSyCdRjCVZlhrq72RuEklEyyxYlBRCYhI2Sw" + } + ], + "services": { + "appinvite_service": { + "other_platform_oauth_client": [ + { + "client_id": "406099696497-a12gakvts4epfk5pkio7dphc1anjiggc.apps.googleusercontent.com", + "client_type": 3 + }, + { + "client_id": "406099696497-0mofiof3ofcgmpmirb6q0fllvb372sme.apps.googleusercontent.com", + "client_type": 2, + "ios_info": { + "bundle_id": "io.flutter.plugins.firebase.example" + } + } + ] + } + } + }, + { + "client_info": { + "mobilesdk_app_id": "1:406099696497:android:a241c4b471513a203574d0", + "android_client_info": { + "package_name": "io.flutter.plugins.firebase.appcheck.example" + } + }, + "oauth_client": [ + { + "client_id": "406099696497-7bvmqp0fffe24vm2arng0dtdeh2tvkgl.apps.googleusercontent.com", + "client_type": 1, + "android_info": { + "package_name": "io.flutter.plugins.firebase.appcheck.example", + "certificate_hash": "909ca1482ef022bbae45a2db6b6d05d807a4c4aa" + } + }, + { + "client_id": "406099696497-a12gakvts4epfk5pkio7dphc1anjiggc.apps.googleusercontent.com", + "client_type": 3 + } + ], + "api_key": [ + { + "current_key": "AIzaSyCdRjCVZlhrq72RuEklEyyxYlBRCYhI2Sw" + } + ], + "services": { + "appinvite_service": { + "other_platform_oauth_client": [ + { + "client_id": "406099696497-a12gakvts4epfk5pkio7dphc1anjiggc.apps.googleusercontent.com", + "client_type": 3 + }, + { + "client_id": "406099696497-0mofiof3ofcgmpmirb6q0fllvb372sme.apps.googleusercontent.com", + "client_type": 2, + "ios_info": { + "bundle_id": "io.flutter.plugins.firebase.example" + } + } + ] + } + } + }, + { + "client_info": { + "mobilesdk_app_id": "1:406099696497:android:21d5142deea38dda3574d0", + "android_client_info": { + "package_name": "io.flutter.plugins.firebase.auth.example" + } + }, + "oauth_client": [ + { + "client_id": "406099696497-emmujnd7g2ammh5uu9ni6v04p4ateqac.apps.googleusercontent.com", + "client_type": 1, + "android_info": { + "package_name": "io.flutter.plugins.firebase.auth.example", + "certificate_hash": "5ad0d6d5cbe577ca185b8df246656bebc3957128" + } + }, + { + "client_id": "406099696497-in8bfp0nali85oul1o98huoar6eo1vv1.apps.googleusercontent.com", + "client_type": 1, + "android_info": { + "package_name": "io.flutter.plugins.firebase.auth.example", + "certificate_hash": "909ca1482ef022bbae45a2db6b6d05d807a4c4aa" + } + }, + { + "client_id": "406099696497-a12gakvts4epfk5pkio7dphc1anjiggc.apps.googleusercontent.com", + "client_type": 3 + } + ], + "api_key": [ + { + "current_key": "AIzaSyCdRjCVZlhrq72RuEklEyyxYlBRCYhI2Sw" + } + ], + "services": { + "appinvite_service": { + "other_platform_oauth_client": [ + { + "client_id": "406099696497-a12gakvts4epfk5pkio7dphc1anjiggc.apps.googleusercontent.com", + "client_type": 3 + }, + { + "client_id": "406099696497-0mofiof3ofcgmpmirb6q0fllvb372sme.apps.googleusercontent.com", + "client_type": 2, + "ios_info": { + "bundle_id": "io.flutter.plugins.firebase.example" + } + } + ] + } + } + }, + { + "client_info": { + "mobilesdk_app_id": "1:406099696497:android:3ef965ff044efc0b3574d0", + "android_client_info": { + "package_name": "io.flutter.plugins.firebase.dataconnect.example" + } + }, + "oauth_client": [ + { + "client_id": "406099696497-a12gakvts4epfk5pkio7dphc1anjiggc.apps.googleusercontent.com", + "client_type": 3 + } + ], + "api_key": [ + { + "current_key": "AIzaSyCdRjCVZlhrq72RuEklEyyxYlBRCYhI2Sw" + } + ], + "services": { + "appinvite_service": { + "other_platform_oauth_client": [ + { + "client_id": "406099696497-a12gakvts4epfk5pkio7dphc1anjiggc.apps.googleusercontent.com", + "client_type": 3 + }, + { + "client_id": "406099696497-0mofiof3ofcgmpmirb6q0fllvb372sme.apps.googleusercontent.com", + "client_type": 2, + "ios_info": { + "bundle_id": "io.flutter.plugins.firebase.example" + } + } + ] + } + } + }, + { + "client_info": { + "mobilesdk_app_id": "1:406099696497:android:40da41183cb3d3ff3574d0", + "android_client_info": { + "package_name": "io.flutter.plugins.firebase.dynamiclinksexample" + } + }, + "oauth_client": [ + { + "client_id": "406099696497-a12gakvts4epfk5pkio7dphc1anjiggc.apps.googleusercontent.com", + "client_type": 3 + } + ], + "api_key": [ + { + "current_key": "AIzaSyCdRjCVZlhrq72RuEklEyyxYlBRCYhI2Sw" + } + ], + "services": { + "appinvite_service": { + "other_platform_oauth_client": [ + { + "client_id": "406099696497-a12gakvts4epfk5pkio7dphc1anjiggc.apps.googleusercontent.com", + "client_type": 3 + }, + { + "client_id": "406099696497-0mofiof3ofcgmpmirb6q0fllvb372sme.apps.googleusercontent.com", + "client_type": 2, + "ios_info": { + "bundle_id": "io.flutter.plugins.firebase.example" + } + } + ] + } + } + }, + { + "client_info": { + "mobilesdk_app_id": "1:406099696497:android:175ea7a64b2faf5e3574d0", + "android_client_info": { + "package_name": "io.flutter.plugins.firebase.firestore.example" + } + }, + "oauth_client": [ + { + "client_id": "406099696497-a12gakvts4epfk5pkio7dphc1anjiggc.apps.googleusercontent.com", + "client_type": 3 + } + ], + "api_key": [ + { + "current_key": "AIzaSyCdRjCVZlhrq72RuEklEyyxYlBRCYhI2Sw" + } + ], + "services": { + "appinvite_service": { + "other_platform_oauth_client": [ + { + "client_id": "406099696497-a12gakvts4epfk5pkio7dphc1anjiggc.apps.googleusercontent.com", + "client_type": 3 + }, + { + "client_id": "406099696497-0mofiof3ofcgmpmirb6q0fllvb372sme.apps.googleusercontent.com", + "client_type": 2, + "ios_info": { + "bundle_id": "io.flutter.plugins.firebase.example" + } + } + ] + } + } + }, + { + "client_info": { + "mobilesdk_app_id": "1:406099696497:android:7ca3394493cc601a3574d0", + "android_client_info": { + "package_name": "io.flutter.plugins.firebase.functions.example" + } + }, + "oauth_client": [ + { + "client_id": "406099696497-17qn06u8a0dc717u8ul7s49ampk13lul.apps.googleusercontent.com", + "client_type": 1, + "android_info": { + "package_name": "io.flutter.plugins.firebase.functions.example", + "certificate_hash": "a4256c0612686b336af6d138a5479b7dc1ee1af6" + } + }, + { + "client_id": "406099696497-tvtvuiqogct1gs1s6lh114jeps7hpjm5.apps.googleusercontent.com", + "client_type": 1, + "android_info": { + "package_name": "io.flutter.plugins.firebase.functions.example", + "certificate_hash": "909ca1482ef022bbae45a2db6b6d05d807a4c4aa" + } + }, + { + "client_id": "406099696497-a12gakvts4epfk5pkio7dphc1anjiggc.apps.googleusercontent.com", + "client_type": 3 + } + ], + "api_key": [ + { + "current_key": "AIzaSyCdRjCVZlhrq72RuEklEyyxYlBRCYhI2Sw" + } + ], + "services": { + "appinvite_service": { + "other_platform_oauth_client": [ + { + "client_id": "406099696497-a12gakvts4epfk5pkio7dphc1anjiggc.apps.googleusercontent.com", + "client_type": 3 + }, + { + "client_id": "406099696497-0mofiof3ofcgmpmirb6q0fllvb372sme.apps.googleusercontent.com", + "client_type": 2, + "ios_info": { + "bundle_id": "io.flutter.plugins.firebase.example" + } + } + ] + } + } + }, + { + "client_info": { + "mobilesdk_app_id": "1:406099696497:android:6d1c1fbf4688f39c3574d0", + "android_client_info": { + "package_name": "io.flutter.plugins.firebase.installations.example" + } + }, + "oauth_client": [ + { + "client_id": "406099696497-a12gakvts4epfk5pkio7dphc1anjiggc.apps.googleusercontent.com", + "client_type": 3 + } + ], + "api_key": [ + { + "current_key": "AIzaSyCdRjCVZlhrq72RuEklEyyxYlBRCYhI2Sw" + } + ], + "services": { + "appinvite_service": { + "other_platform_oauth_client": [ + { + "client_id": "406099696497-a12gakvts4epfk5pkio7dphc1anjiggc.apps.googleusercontent.com", + "client_type": 3 + }, + { + "client_id": "406099696497-0mofiof3ofcgmpmirb6q0fllvb372sme.apps.googleusercontent.com", + "client_type": 2, + "ios_info": { + "bundle_id": "io.flutter.plugins.firebase.example" + } + } + ] + } + } + }, + { + "client_info": { + "mobilesdk_app_id": "1:406099696497:android:74ebb073d7727cd43574d0", + "android_client_info": { + "package_name": "io.flutter.plugins.firebase.messaging.example" + } + }, + "oauth_client": [ + { + "client_id": "406099696497-a12gakvts4epfk5pkio7dphc1anjiggc.apps.googleusercontent.com", + "client_type": 3 + } + ], + "api_key": [ + { + "current_key": "AIzaSyCdRjCVZlhrq72RuEklEyyxYlBRCYhI2Sw" + } + ], + "services": { + "appinvite_service": { + "other_platform_oauth_client": [ + { + "client_id": "406099696497-a12gakvts4epfk5pkio7dphc1anjiggc.apps.googleusercontent.com", + "client_type": 3 + }, + { + "client_id": "406099696497-0mofiof3ofcgmpmirb6q0fllvb372sme.apps.googleusercontent.com", + "client_type": 2, + "ios_info": { + "bundle_id": "io.flutter.plugins.firebase.example" + } + } + ] + } + } + }, + { + "client_info": { + "mobilesdk_app_id": "1:406099696497:android:f54b85cfa36a39f73574d0", + "android_client_info": { + "package_name": "io.flutter.plugins.firebase.remoteconfig.example" + } + }, + "oauth_client": [ + { + "client_id": "406099696497-a12gakvts4epfk5pkio7dphc1anjiggc.apps.googleusercontent.com", + "client_type": 3 + } + ], + "api_key": [ + { + "current_key": "AIzaSyCdRjCVZlhrq72RuEklEyyxYlBRCYhI2Sw" + } + ], + "services": { + "appinvite_service": { + "other_platform_oauth_client": [ + { + "client_id": "406099696497-a12gakvts4epfk5pkio7dphc1anjiggc.apps.googleusercontent.com", + "client_type": 3 + }, + { + "client_id": "406099696497-0mofiof3ofcgmpmirb6q0fllvb372sme.apps.googleusercontent.com", + "client_type": 2, + "ios_info": { + "bundle_id": "io.flutter.plugins.firebase.example" + } + } + ] + } + } + }, + { + "client_info": { + "mobilesdk_app_id": "1:406099696497:android:0d4ed619c031c0ac3574d0", + "android_client_info": { + "package_name": "io.flutter.plugins.firebase.tests" + } + }, + "oauth_client": [ + { + "client_id": "406099696497-ib9hj9281l3343cm3nfvvdotaojrthdc.apps.googleusercontent.com", + "client_type": 1, + "android_info": { + "package_name": "io.flutter.plugins.firebase.tests", + "certificate_hash": "5ad0d6d5cbe577ca185b8df246656bebc3957128" + } + }, + { + "client_id": "406099696497-lc54d5l8sp90k39r0bb39ovsgo1s9bek.apps.googleusercontent.com", + "client_type": 1, + "android_info": { + "package_name": "io.flutter.plugins.firebase.tests", + "certificate_hash": "909ca1482ef022bbae45a2db6b6d05d807a4c4aa" + } + }, + { + "client_id": "406099696497-a12gakvts4epfk5pkio7dphc1anjiggc.apps.googleusercontent.com", + "client_type": 3 + } + ], + "api_key": [ + { + "current_key": "AIzaSyCdRjCVZlhrq72RuEklEyyxYlBRCYhI2Sw" + } + ], + "services": { + "appinvite_service": { + "other_platform_oauth_client": [ + { + "client_id": "406099696497-a12gakvts4epfk5pkio7dphc1anjiggc.apps.googleusercontent.com", + "client_type": 3 + }, + { + "client_id": "406099696497-0mofiof3ofcgmpmirb6q0fllvb372sme.apps.googleusercontent.com", + "client_type": 2, + "ios_info": { + "bundle_id": "io.flutter.plugins.firebase.example" + } + } + ] + } + } + }, + { + "client_info": { + "mobilesdk_app_id": "1:406099696497:android:899c6485cfce26c13574d0", + "android_client_info": { + "package_name": "io.flutter.plugins.firebase_ui_example" + } + }, + "oauth_client": [ + { + "client_id": "406099696497-ltgvphphcckosvqhituel5km2k3aecg8.apps.googleusercontent.com", + "client_type": 1, + "android_info": { + "package_name": "io.flutter.plugins.firebase_ui_example", + "certificate_hash": "a4256c0612686b336af6d138a5479b7dc1ee1af6" + } + }, + { + "client_id": "406099696497-a12gakvts4epfk5pkio7dphc1anjiggc.apps.googleusercontent.com", + "client_type": 3 + } + ], + "api_key": [ + { + "current_key": "AIzaSyCdRjCVZlhrq72RuEklEyyxYlBRCYhI2Sw" + } + ], + "services": { + "appinvite_service": { + "other_platform_oauth_client": [ + { + "client_id": "406099696497-a12gakvts4epfk5pkio7dphc1anjiggc.apps.googleusercontent.com", + "client_type": 3 + }, + { + "client_id": "406099696497-0mofiof3ofcgmpmirb6q0fllvb372sme.apps.googleusercontent.com", + "client_type": 2, + "ios_info": { + "bundle_id": "io.flutter.plugins.firebase.example" + } + } + ] + } + } + }, + { + "client_info": { + "mobilesdk_app_id": "1:406099696497:android:bc0b12b0605df8633574d0", + "android_client_info": { + "package_name": "io.flutter.plugins.firebasecoreexample" + } + }, + "oauth_client": [ + { + "client_id": "406099696497-a12gakvts4epfk5pkio7dphc1anjiggc.apps.googleusercontent.com", + "client_type": 3 + } + ], + "api_key": [ + { + "current_key": "AIzaSyCdRjCVZlhrq72RuEklEyyxYlBRCYhI2Sw" + } + ], + "services": { + "appinvite_service": { + "other_platform_oauth_client": [ + { + "client_id": "406099696497-a12gakvts4epfk5pkio7dphc1anjiggc.apps.googleusercontent.com", + "client_type": 3 + }, + { + "client_id": "406099696497-0mofiof3ofcgmpmirb6q0fllvb372sme.apps.googleusercontent.com", + "client_type": 2, + "ios_info": { + "bundle_id": "io.flutter.plugins.firebase.example" + } + } + ] + } + } + }, + { + "client_info": { + "mobilesdk_app_id": "1:406099696497:android:0f3f7bfe78b8b7103574d0", + "android_client_info": { + "package_name": "io.flutter.plugins.firebasecrashlyticsexample" + } + }, + "oauth_client": [ + { + "client_id": "406099696497-a12gakvts4epfk5pkio7dphc1anjiggc.apps.googleusercontent.com", + "client_type": 3 + } + ], + "api_key": [ + { + "current_key": "AIzaSyCdRjCVZlhrq72RuEklEyyxYlBRCYhI2Sw" + } + ], + "services": { + "appinvite_service": { + "other_platform_oauth_client": [ + { + "client_id": "406099696497-a12gakvts4epfk5pkio7dphc1anjiggc.apps.googleusercontent.com", + "client_type": 3 + }, + { + "client_id": "406099696497-0mofiof3ofcgmpmirb6q0fllvb372sme.apps.googleusercontent.com", + "client_type": 2, + "ios_info": { + "bundle_id": "io.flutter.plugins.firebase.example" + } + } + ] + } + } + }, + { + "client_info": { + "mobilesdk_app_id": "1:406099696497:android:2751af6868a69f073574d0", + "android_client_info": { + "package_name": "io.flutter.plugins.firebasestorageexample" + } + }, + "oauth_client": [ + { + "client_id": "406099696497-a12gakvts4epfk5pkio7dphc1anjiggc.apps.googleusercontent.com", + "client_type": 3 + } + ], + "api_key": [ + { + "current_key": "AIzaSyCdRjCVZlhrq72RuEklEyyxYlBRCYhI2Sw" + } + ], + "services": { + "appinvite_service": { + "other_platform_oauth_client": [ + { + "client_id": "406099696497-a12gakvts4epfk5pkio7dphc1anjiggc.apps.googleusercontent.com", + "client_type": 3 + }, + { + "client_id": "406099696497-0mofiof3ofcgmpmirb6q0fllvb372sme.apps.googleusercontent.com", + "client_type": 2, + "ios_info": { + "bundle_id": "io.flutter.plugins.firebase.example" + } + } + ] + } + } + } + ], + "configuration_version": "1" +} \ No newline at end of file diff --git a/mih_ui/android/build/ios/SourcePackages/firebase_auth-6.5.4/example/android/app/src/debug/AndroidManifest.xml b/mih_ui/android/build/ios/SourcePackages/firebase_auth-6.5.4/example/android/app/src/debug/AndroidManifest.xml new file mode 100644 index 00000000..399f6981 --- /dev/null +++ b/mih_ui/android/build/ios/SourcePackages/firebase_auth-6.5.4/example/android/app/src/debug/AndroidManifest.xml @@ -0,0 +1,7 @@ + + + + diff --git a/mih_ui/android/build/ios/SourcePackages/firebase_auth-6.5.4/example/android/app/src/main/AndroidManifest.xml b/mih_ui/android/build/ios/SourcePackages/firebase_auth-6.5.4/example/android/app/src/main/AndroidManifest.xml new file mode 100644 index 00000000..74a78b93 --- /dev/null +++ b/mih_ui/android/build/ios/SourcePackages/firebase_auth-6.5.4/example/android/app/src/main/AndroidManifest.xml @@ -0,0 +1,45 @@ + + + + + + + + + + + + + + + + + + + + + diff --git a/mih_ui/android/build/ios/SourcePackages/firebase_auth-6.5.4/example/android/app/src/main/kotlin/io/flutter/plugins/firebase/auth/example/MainActivity.kt b/mih_ui/android/build/ios/SourcePackages/firebase_auth-6.5.4/example/android/app/src/main/kotlin/io/flutter/plugins/firebase/auth/example/MainActivity.kt new file mode 100644 index 00000000..2b88c507 --- /dev/null +++ b/mih_ui/android/build/ios/SourcePackages/firebase_auth-6.5.4/example/android/app/src/main/kotlin/io/flutter/plugins/firebase/auth/example/MainActivity.kt @@ -0,0 +1,5 @@ +package io.flutter.plugins.firebase.auth.example + +import io.flutter.embedding.android.FlutterActivity + +class MainActivity : FlutterActivity() diff --git a/mih_ui/android/build/ios/SourcePackages/firebase_auth-6.5.4/example/android/app/src/main/res/drawable-v21/launch_background.xml b/mih_ui/android/build/ios/SourcePackages/firebase_auth-6.5.4/example/android/app/src/main/res/drawable-v21/launch_background.xml new file mode 100644 index 00000000..f74085f3 --- /dev/null +++ b/mih_ui/android/build/ios/SourcePackages/firebase_auth-6.5.4/example/android/app/src/main/res/drawable-v21/launch_background.xml @@ -0,0 +1,12 @@ + + + + + + + + diff --git a/mih_ui/android/build/ios/SourcePackages/firebase_auth-6.5.4/example/android/app/src/main/res/drawable/launch_background.xml b/mih_ui/android/build/ios/SourcePackages/firebase_auth-6.5.4/example/android/app/src/main/res/drawable/launch_background.xml new file mode 100644 index 00000000..304732f8 --- /dev/null +++ b/mih_ui/android/build/ios/SourcePackages/firebase_auth-6.5.4/example/android/app/src/main/res/drawable/launch_background.xml @@ -0,0 +1,12 @@ + + + + + + + + diff --git a/mih_ui/android/build/ios/SourcePackages/firebase_auth-6.5.4/example/android/app/src/main/res/mipmap-hdpi/ic_launcher.png b/mih_ui/android/build/ios/SourcePackages/firebase_auth-6.5.4/example/android/app/src/main/res/mipmap-hdpi/ic_launcher.png new file mode 100644 index 0000000000000000000000000000000000000000..db77bb4b7b0906d62b1847e87f15cdcacf6a4f29 GIT binary patch literal 544 zcmeAS@N?(olHy`uVBq!ia0vp^9w5xY3?!3`olAj~WQl7;NpOBzNqJ&XDuZK6ep0G} zXKrG8YEWuoN@d~6R2!h8bpbvhu0Wd6uZuB!w&u2PAxD2eNXD>P5D~Wn-+_Wa#27Xc zC?Zj|6r#X(-D3u$NCt}(Ms06KgJ4FxJVv{GM)!I~&n8Bnc94O7-Hd)cjDZswgC;Qs zO=b+9!WcT8F?0rF7!Uys2bs@gozCP?z~o%U|N3vA*22NaGQG zlg@K`O_XuxvZ&Ks^m&R!`&1=spLvfx7oGDKDwpwW`#iqdw@AL`7MR}m`rwr|mZgU`8P7SBkL78fFf!WnuYWm$5Z0 zNXhDbCv&49sM544K|?c)WrFfiZvCi9h0O)B3Pgg&ebxsLQ05GG~ AQ2+n{ literal 0 HcmV?d00001 diff --git a/mih_ui/android/build/ios/SourcePackages/firebase_auth-6.5.4/example/android/app/src/main/res/mipmap-mdpi/ic_launcher.png b/mih_ui/android/build/ios/SourcePackages/firebase_auth-6.5.4/example/android/app/src/main/res/mipmap-mdpi/ic_launcher.png new file mode 100644 index 0000000000000000000000000000000000000000..17987b79bb8a35cc66c3c1fd44f5a5526c1b78be GIT binary patch literal 442 zcmeAS@N?(olHy`uVBq!ia0vp^1|ZDA3?vioaBc-sk|nMYCBgY=CFO}lsSJ)O`AMk? zp1FzXsX?iUDV2pMQ*D5Xx&nMcT!A!W`0S9QKQy;}1Cl^CgaH=;G9cpY;r$Q>i*pfB zP2drbID<_#qf;rPZx^FqH)F_D#*k@@q03KywUtLX8Ua?`H+NMzkczFPK3lFz@i_kW%1NOn0|D2I9n9wzH8m|-tHjsw|9>@K=iMBhxvkv6m8Y-l zytQ?X=U+MF$@3 zt`~i=@j|6y)RWMK--}M|=T`o&^Ni>IoWKHEbBXz7?A@mgWoL>!*SXo`SZH-*HSdS+ yn*9;$7;m`l>wYBC5bq;=U}IMqLzqbYCidGC!)_gkIk_C@Uy!y&wkt5C($~2D>~)O*cj@FGjOCM)M>_ixfudOh)?xMu#Fs z#}Y=@YDTwOM)x{K_j*Q;dPdJ?Mz0n|pLRx{4n|)f>SXlmV)XB04CrSJn#dS5nK2lM zrZ9#~WelCp7&e13Y$jvaEXHskn$2V!!DN-nWS__6T*l;H&Fopn?A6HZ-6WRLFP=R` zqG+CE#d4|IbyAI+rJJ`&x9*T`+a=p|0O(+s{UBcyZdkhj=yS1>AirP+0R;mf2uMgM zC}@~JfByORAh4SyRgi&!(cja>F(l*O+nd+@4m$|6K6KDn_&uvCpV23&>G9HJp{xgg zoq1^2_p9@|WEo z*X_Uko@K)qYYv~>43eQGMdbiGbo>E~Q& zrYBH{QP^@Sti!`2)uG{irBBq@y*$B zi#&(U-*=fp74j)RyIw49+0MRPMRU)+a2r*PJ$L5roHt2$UjExCTZSbq%V!HeS7J$N zdG@vOZB4v_lF7Plrx+hxo7(fCV&}fHq)$ literal 0 HcmV?d00001 diff --git a/mih_ui/android/build/ios/SourcePackages/firebase_auth-6.5.4/example/android/app/src/main/res/mipmap-xxhdpi/ic_launcher.png b/mih_ui/android/build/ios/SourcePackages/firebase_auth-6.5.4/example/android/app/src/main/res/mipmap-xxhdpi/ic_launcher.png new file mode 100644 index 0000000000000000000000000000000000000000..d5f1c8d34e7a88e3f88bea192c3a370d44689c3c GIT binary patch literal 1031 zcmeAS@N?(olHy`uVBq!ia0vp^6F``Q8Ax83A=Cw=BuiW)N`mv#O3D+9QW+dm@{>{( zJaZG%Q-e|yQz{EjrrIztFa`(sgt!6~Yi|1%a`XoT0ojZ}lNrNjb9xjc(B0U1_% zz5^97Xt*%oq$rQy4?0GKNfJ44uvxI)gC`h-NZ|&0-7(qS@?b!5r36oQ}zyZrNO3 zMO=Or+<~>+A&uN&E!^Sl+>xE!QC-|oJv`ApDhqC^EWD|@=#J`=d#Xzxs4ah}w&Jnc z$|q_opQ^2TrnVZ0o~wh<3t%W&flvYGe#$xqda2bR_R zvPYgMcHgjZ5nSA^lJr%;<&0do;O^tDDh~=pIxA#coaCY>&N%M2^tq^U%3DB@ynvKo}b?yu-bFc-u0JHzced$sg7S3zqI(2 z#Km{dPr7I=pQ5>FuK#)QwK?Y`E`B?nP+}U)I#c1+FM*1kNvWG|a(TpksZQ3B@sD~b zpQ2)*V*TdwjFOtHvV|;OsiDqHi=6%)o4b!)x$)%9pGTsE z-JL={-Ffv+T87W(Xpooq<`r*VzWQcgBN$$`u}f>-ZQI1BB8ykN*=e4rIsJx9>z}*o zo~|9I;xof literal 0 HcmV?d00001 diff --git a/mih_ui/android/build/ios/SourcePackages/firebase_auth-6.5.4/example/android/app/src/main/res/mipmap-xxxhdpi/ic_launcher.png b/mih_ui/android/build/ios/SourcePackages/firebase_auth-6.5.4/example/android/app/src/main/res/mipmap-xxxhdpi/ic_launcher.png new file mode 100644 index 0000000000000000000000000000000000000000..4d6372eebdb28e45604e46eeda8dd24651419bc0 GIT binary patch literal 1443 zcmb`G{WsKk6vsdJTdFg%tJav9_E4vzrOaqkWF|A724Nly!y+?N9`YV6wZ}5(X(D_N(?!*n3`|_r0Hc?=PQw&*vnU?QTFY zB_MsH|!j$PP;I}?dppoE_gA(4uc!jV&0!l7_;&p2^pxNo>PEcNJv za5_RT$o2Mf!<+r?&EbHH6nMoTsDOa;mN(wv8RNsHpG)`^ymG-S5By8=l9iVXzN_eG%Xg2@Xeq76tTZ*dGh~Lo9vl;Zfs+W#BydUw zCkZ$o1LqWQO$FC9aKlLl*7x9^0q%0}$OMlp@Kk_jHXOjofdePND+j!A{q!8~Jn+s3 z?~~w@4?egS02}8NuulUA=L~QQfm;MzCGd)XhiftT;+zFO&JVyp2mBww?;QByS_1w! zrQlx%{^cMj0|Bo1FjwY@Q8?Hx0cIPF*@-ZRFpPc#bBw{5@tD(5%sClzIfl8WU~V#u zm5Q;_F!wa$BSpqhN>W@2De?TKWR*!ujY;Yylk_X5#~V!L*Gw~;$%4Q8~Mad z@`-kG?yb$a9cHIApZDVZ^U6Xkp<*4rU82O7%}0jjHlK{id@?-wpN*fCHXyXh(bLt* zPc}H-x0e4E&nQ>y%B-(EL=9}RyC%MyX=upHuFhAk&MLbsF0LP-q`XnH78@fT+pKPW zu72MW`|?8ht^tz$iC}ZwLp4tB;Q49K!QCF3@!iB1qOI=?w z7In!}F~ij(18UYUjnbmC!qKhPo%24?8U1x{7o(+?^Zu0Hx81|FuS?bJ0jgBhEMzf< zCgUq7r2OCB(`XkKcN-TL>u5y#dD6D!)5W?`O5)V^>jb)P)GBdy%t$uUMpf$SNV31$ zb||OojAbvMP?T@$h_ZiFLFVHDmbyMhJF|-_)HX3%m=CDI+ID$0^C>kzxprBW)hw(v zr!Gmda);ICoQyhV_oP5+C%?jcG8v+D@9f?Dk*!BxY}dazmrT@64UrP3hlslANK)bq z$67n83eh}OeW&SV@HG95P|bjfqJ7gw$e+`Hxo!4cx`jdK1bJ>YDSpGKLPZ^1cv$ek zIB?0S<#tX?SJCLWdMd{-ME?$hc7A$zBOdIJ)4!KcAwb=VMov)nK;9z>x~rfT1>dS+ zZ6#`2v@`jgbqq)P22H)Tx2CpmM^o1$B+xT6`(v%5xJ(?j#>Q$+rx_R|7TzDZe{J6q zG1*EcU%tE?!kO%^M;3aM6JN*LAKUVb^xz8-Pxo#jR5(-KBeLJvA@-gxNHx0M-ZJLl z;#JwQoh~9V?`UVo#}{6ka@II>++D@%KqGpMdlQ}?9E*wFcf5(#XQnP$Dk5~%iX^>f z%$y;?M0BLp{O3a(-4A?ewryHrrD%cx#Q^%KY1H zNre$ve+vceSLZcNY4U(RBX&)oZn*Py()h)XkE?PL$!bNb{N5FVI2Y%LKEm%yvpyTP z(1P?z~7YxD~Rf<(a@_y` literal 0 HcmV?d00001 diff --git a/mih_ui/android/build/ios/SourcePackages/firebase_auth-6.5.4/example/android/app/src/main/res/values-night/styles.xml b/mih_ui/android/build/ios/SourcePackages/firebase_auth-6.5.4/example/android/app/src/main/res/values-night/styles.xml new file mode 100644 index 00000000..06952be7 --- /dev/null +++ b/mih_ui/android/build/ios/SourcePackages/firebase_auth-6.5.4/example/android/app/src/main/res/values-night/styles.xml @@ -0,0 +1,18 @@ + + + + + + + diff --git a/mih_ui/android/build/ios/SourcePackages/firebase_auth-6.5.4/example/android/app/src/main/res/values/styles.xml b/mih_ui/android/build/ios/SourcePackages/firebase_auth-6.5.4/example/android/app/src/main/res/values/styles.xml new file mode 100644 index 00000000..cb1ef880 --- /dev/null +++ b/mih_ui/android/build/ios/SourcePackages/firebase_auth-6.5.4/example/android/app/src/main/res/values/styles.xml @@ -0,0 +1,18 @@ + + + + + + + diff --git a/mih_ui/android/build/ios/SourcePackages/firebase_auth-6.5.4/example/android/app/src/profile/AndroidManifest.xml b/mih_ui/android/build/ios/SourcePackages/firebase_auth-6.5.4/example/android/app/src/profile/AndroidManifest.xml new file mode 100644 index 00000000..399f6981 --- /dev/null +++ b/mih_ui/android/build/ios/SourcePackages/firebase_auth-6.5.4/example/android/app/src/profile/AndroidManifest.xml @@ -0,0 +1,7 @@ + + + + diff --git a/mih_ui/android/build/ios/SourcePackages/firebase_auth-6.5.4/example/android/build.gradle b/mih_ui/android/build/ios/SourcePackages/firebase_auth-6.5.4/example/android/build.gradle new file mode 100644 index 00000000..d2ffbffa --- /dev/null +++ b/mih_ui/android/build/ios/SourcePackages/firebase_auth-6.5.4/example/android/build.gradle @@ -0,0 +1,18 @@ +allprojects { + repositories { + google() + mavenCentral() + } +} + +rootProject.buildDir = "../build" +subprojects { + project.buildDir = "${rootProject.buildDir}/${project.name}" +} +subprojects { + project.evaluationDependsOn(":app") +} + +tasks.register("clean", Delete) { + delete rootProject.buildDir +} diff --git a/mih_ui/android/build/ios/SourcePackages/firebase_auth-6.5.4/example/android/gradle.properties b/mih_ui/android/build/ios/SourcePackages/firebase_auth-6.5.4/example/android/gradle.properties new file mode 100644 index 00000000..3b5b324f --- /dev/null +++ b/mih_ui/android/build/ios/SourcePackages/firebase_auth-6.5.4/example/android/gradle.properties @@ -0,0 +1,3 @@ +org.gradle.jvmargs=-Xmx4G -XX:+HeapDumpOnOutOfMemoryError +android.useAndroidX=true +android.enableJetifier=true diff --git a/mih_ui/android/build/ios/SourcePackages/firebase_auth-6.5.4/example/android/gradle/wrapper/gradle-wrapper.properties b/mih_ui/android/build/ios/SourcePackages/firebase_auth-6.5.4/example/android/gradle/wrapper/gradle-wrapper.properties new file mode 100644 index 00000000..e411586a --- /dev/null +++ b/mih_ui/android/build/ios/SourcePackages/firebase_auth-6.5.4/example/android/gradle/wrapper/gradle-wrapper.properties @@ -0,0 +1,5 @@ +distributionBase=GRADLE_USER_HOME +distributionPath=wrapper/dists +distributionUrl=https\://services.gradle.org/distributions/gradle-8.4-bin.zip +zipStoreBase=GRADLE_USER_HOME +zipStorePath=wrapper/dists diff --git a/mih_ui/android/build/ios/SourcePackages/firebase_auth-6.5.4/example/android/settings.gradle b/mih_ui/android/build/ios/SourcePackages/firebase_auth-6.5.4/example/android/settings.gradle new file mode 100644 index 00000000..a4d924db --- /dev/null +++ b/mih_ui/android/build/ios/SourcePackages/firebase_auth-6.5.4/example/android/settings.gradle @@ -0,0 +1,28 @@ +pluginManagement { + def flutterSdkPath = { + def properties = new Properties() + file("local.properties").withInputStream { properties.load(it) } + def flutterSdkPath = properties.getProperty("flutter.sdk") + assert flutterSdkPath != null, "flutter.sdk not set in local.properties" + return flutterSdkPath + }() + + includeBuild("$flutterSdkPath/packages/flutter_tools/gradle") + + repositories { + google() + mavenCentral() + gradlePluginPortal() + } +} + +plugins { + id "dev.flutter.flutter-plugin-loader" version "1.0.0" + id "com.android.application" version "8.3.0" apply false + // START: FlutterFire Configuration + id "com.google.gms.google-services" version "4.3.15" apply false + // END: FlutterFire Configuration + id "org.jetbrains.kotlin.android" version "1.9.22" apply false +} + +include ":app" diff --git a/mih_ui/android/build/ios/SourcePackages/firebase_auth-6.5.4/example/ios/Flutter/AppFrameworkInfo.plist b/mih_ui/android/build/ios/SourcePackages/firebase_auth-6.5.4/example/ios/Flutter/AppFrameworkInfo.plist new file mode 100644 index 00000000..b3c50a89 --- /dev/null +++ b/mih_ui/android/build/ios/SourcePackages/firebase_auth-6.5.4/example/ios/Flutter/AppFrameworkInfo.plist @@ -0,0 +1,30 @@ + + + + + CFBundleDevelopmentRegion + $(DEVELOPMENT_LANGUAGE) + CFBundleExecutable + App + CFBundleIdentifier + io.flutter.flutter.app + CFBundleInfoDictionaryVersion + 6.0 + CFBundleName + App + CFBundlePackageType + FMWK + CFBundleShortVersionString + 1.0 + CFBundleSignature + ???? + CFBundleVersion + 1.0 + UIRequiredDeviceCapabilities + + arm64 + + MinimumOSVersion + 12.0 + + diff --git a/mih_ui/android/build/ios/SourcePackages/firebase_auth-6.5.4/example/ios/Flutter/Debug.xcconfig b/mih_ui/android/build/ios/SourcePackages/firebase_auth-6.5.4/example/ios/Flutter/Debug.xcconfig new file mode 100644 index 00000000..ec97fc6f --- /dev/null +++ b/mih_ui/android/build/ios/SourcePackages/firebase_auth-6.5.4/example/ios/Flutter/Debug.xcconfig @@ -0,0 +1,2 @@ +#include? "Pods/Target Support Files/Pods-Runner/Pods-Runner.debug.xcconfig" +#include "Generated.xcconfig" diff --git a/mih_ui/android/build/ios/SourcePackages/firebase_auth-6.5.4/example/ios/Flutter/Release.xcconfig b/mih_ui/android/build/ios/SourcePackages/firebase_auth-6.5.4/example/ios/Flutter/Release.xcconfig new file mode 100644 index 00000000..88c29144 --- /dev/null +++ b/mih_ui/android/build/ios/SourcePackages/firebase_auth-6.5.4/example/ios/Flutter/Release.xcconfig @@ -0,0 +1,3 @@ +#include? "Pods/Target Support Files/Pods-Runner/Pods-Runner.release.xcconfig" +#include "Pods/Target Support Files/Pods-Runner/Pods-Runner.release.xcconfig" +#include "Generated.xcconfig" diff --git a/mih_ui/android/build/ios/SourcePackages/firebase_auth-6.5.4/example/ios/Podfile b/mih_ui/android/build/ios/SourcePackages/firebase_auth-6.5.4/example/ios/Podfile new file mode 100644 index 00000000..3026bae9 --- /dev/null +++ b/mih_ui/android/build/ios/SourcePackages/firebase_auth-6.5.4/example/ios/Podfile @@ -0,0 +1,48 @@ +# Uncomment this line to define a global platform for your project +platform :ios, '15.0' + +# CocoaPods analytics sends network stats synchronously affecting flutter build latency. +ENV['COCOAPODS_DISABLE_STATS'] = 'true' + +project 'Runner', { + 'Debug' => :debug, + 'Profile' => :release, + 'Release' => :release, +} + +def flutter_root + generated_xcode_build_settings_path = File.expand_path(File.join('..', 'Flutter', 'Generated.xcconfig'), __FILE__) + unless File.exist?(generated_xcode_build_settings_path) + raise "#{generated_xcode_build_settings_path} must exist. If you're running pod install manually, make sure flutter pub get is executed first" + end + + File.foreach(generated_xcode_build_settings_path) do |line| + matches = line.match(/FLUTTER_ROOT\=(.*)/) + return matches[1].strip if matches + end + raise "FLUTTER_ROOT not found in #{generated_xcode_build_settings_path}. Try deleting Generated.xcconfig, then run flutter pub get" +end + +require File.expand_path(File.join('packages', 'flutter_tools', 'bin', 'podhelper'), flutter_root) + +flutter_ios_podfile_setup + +target 'Runner' do + use_frameworks! + use_modular_headers! + flutter_install_all_ios_pods File.dirname(File.realpath(__FILE__)) +end + +post_install do |installer| + installer.pods_project.targets.each do |target| + flutter_additional_ios_build_settings(target) + end + + installer.generated_projects.each do |project| + project.targets.each do |target| + target.build_configurations.each do |config| + config.build_settings['IPHONEOS_DEPLOYMENT_TARGET'] = '11.0' + end + end + end +end diff --git a/mih_ui/android/build/ios/SourcePackages/firebase_auth-6.5.4/example/ios/Runner.xcodeproj/project.pbxproj b/mih_ui/android/build/ios/SourcePackages/firebase_auth-6.5.4/example/ios/Runner.xcodeproj/project.pbxproj new file mode 100644 index 00000000..9da003ec --- /dev/null +++ b/mih_ui/android/build/ios/SourcePackages/firebase_auth-6.5.4/example/ios/Runner.xcodeproj/project.pbxproj @@ -0,0 +1,700 @@ +// !$*UTF8*$! +{ + archiveVersion = 1; + classes = { + }; + objectVersion = 54; + objects = { + +/* Begin PBXBuildFile section */ + 081BFEF7D2871CF6AC71DD05 /* GoogleService-Info.plist in Resources */ = {isa = PBXBuildFile; fileRef = 7B49E087B951778510D20936 /* GoogleService-Info.plist */; }; + 1498D2341E8E89220040F4C2 /* GeneratedPluginRegistrant.m in Sources */ = {isa = PBXBuildFile; fileRef = 1498D2331E8E89220040F4C2 /* GeneratedPluginRegistrant.m */; }; + 25A01FAE278D905100D1E790 /* GoogleService-Info.plist in Resources */ = {isa = PBXBuildFile; fileRef = 25A01FAD278D905100D1E790 /* GoogleService-Info.plist */; }; + 3B3967161E833CAA004F5970 /* AppFrameworkInfo.plist in Resources */ = {isa = PBXBuildFile; fileRef = 3B3967151E833CAA004F5970 /* AppFrameworkInfo.plist */; }; + 3DBDE9876E1D48FC8ED096A3 /* Pods_Runner.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = E010D242A20C21968D02B7C9 /* Pods_Runner.framework */; }; + 78A318202AECB46A00862997 /* FlutterGeneratedPluginSwiftPackage in Frameworks */ = {isa = PBXBuildFile; productRef = 78A3181F2AECB46A00862997 /* FlutterGeneratedPluginSwiftPackage */; }; + 978B8F6F1D3862AE00F588F7 /* AppDelegate.m in Sources */ = {isa = PBXBuildFile; fileRef = 7AFFD8EE1D35381100E5BB4D /* AppDelegate.m */; }; + 97C146F31CF9000F007C117D /* main.m in Sources */ = {isa = PBXBuildFile; fileRef = 97C146F21CF9000F007C117D /* main.m */; }; + 97C146FC1CF9000F007C117D /* Main.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 97C146FA1CF9000F007C117D /* Main.storyboard */; }; + 97C146FE1CF9000F007C117D /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 97C146FD1CF9000F007C117D /* Assets.xcassets */; }; + 97C147011CF9000F007C117D /* LaunchScreen.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 97C146FF1CF9000F007C117D /* LaunchScreen.storyboard */; }; +/* End PBXBuildFile section */ + +/* Begin PBXCopyFilesBuildPhase section */ + 9705A1C41CF9048500538489 /* Embed Frameworks */ = { + isa = PBXCopyFilesBuildPhase; + buildActionMask = 2147483647; + dstPath = ""; + dstSubfolderSpec = 10; + files = ( + ); + name = "Embed Frameworks"; + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXCopyFilesBuildPhase section */ + +/* Begin PBXFileReference section */ + 1498D2321E8E86230040F4C2 /* GeneratedPluginRegistrant.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = GeneratedPluginRegistrant.h; sourceTree = ""; }; + 1498D2331E8E89220040F4C2 /* GeneratedPluginRegistrant.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = GeneratedPluginRegistrant.m; sourceTree = ""; }; + 253804AE278DB662003BA2E2 /* Runner.entitlements */ = {isa = PBXFileReference; lastKnownFileType = text.plist.entitlements; path = Runner.entitlements; sourceTree = ""; }; + 25A01FAD278D905100D1E790 /* GoogleService-Info.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; path = "GoogleService-Info.plist"; sourceTree = ""; }; + 2FB2202774601424C6393E3D /* Pods-Runner.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.debug.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.debug.xcconfig"; sourceTree = ""; }; + 3B3967151E833CAA004F5970 /* AppFrameworkInfo.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; name = AppFrameworkInfo.plist; path = Flutter/AppFrameworkInfo.plist; sourceTree = ""; }; + 7AFA3C8E1D35360C0083082E /* Release.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; name = Release.xcconfig; path = Flutter/Release.xcconfig; sourceTree = ""; }; + 7AFFD8ED1D35381100E5BB4D /* AppDelegate.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = AppDelegate.h; sourceTree = ""; }; + 7AFFD8EE1D35381100E5BB4D /* AppDelegate.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = AppDelegate.m; sourceTree = ""; }; + 7B49E087B951778510D20936 /* GoogleService-Info.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; name = "GoogleService-Info.plist"; path = "Runner/GoogleService-Info.plist"; sourceTree = ""; }; + 9740EEB21CF90195004384FC /* Debug.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; name = Debug.xcconfig; path = Flutter/Debug.xcconfig; sourceTree = ""; }; + 9740EEB31CF90195004384FC /* Generated.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; name = Generated.xcconfig; path = Flutter/Generated.xcconfig; sourceTree = ""; }; + 97C146EE1CF9000F007C117D /* Runner.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = Runner.app; sourceTree = BUILT_PRODUCTS_DIR; }; + 97C146F21CF9000F007C117D /* main.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = main.m; sourceTree = ""; }; + 97C146FB1CF9000F007C117D /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/Main.storyboard; sourceTree = ""; }; + 97C146FD1CF9000F007C117D /* Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Assets.xcassets; sourceTree = ""; }; + 97C147001CF9000F007C117D /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/LaunchScreen.storyboard; sourceTree = ""; }; + 97C147021CF9000F007C117D /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; + E010D242A20C21968D02B7C9 /* Pods_Runner.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_Runner.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + ED172FD60C3CC14CD005C328 /* Pods-Runner.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.release.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.release.xcconfig"; sourceTree = ""; }; + FD585EE39F3F8D58CFCE5419 /* Pods-Runner.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.profile.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.profile.xcconfig"; sourceTree = ""; }; +/* End PBXFileReference section */ + +/* Begin PBXFrameworksBuildPhase section */ + 97C146EB1CF9000F007C117D /* Frameworks */ = { + isa = PBXFrameworksBuildPhase; + buildActionMask = 2147483647; + files = ( + 78A318202AECB46A00862997 /* FlutterGeneratedPluginSwiftPackage in Frameworks */, + 3DBDE9876E1D48FC8ED096A3 /* Pods_Runner.framework in Frameworks */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXFrameworksBuildPhase section */ + +/* Begin PBXGroup section */ + 9740EEB11CF90186004384FC /* Flutter */ = { + isa = PBXGroup; + children = ( + 3B3967151E833CAA004F5970 /* AppFrameworkInfo.plist */, + 9740EEB21CF90195004384FC /* Debug.xcconfig */, + 7AFA3C8E1D35360C0083082E /* Release.xcconfig */, + 9740EEB31CF90195004384FC /* Generated.xcconfig */, + ); + name = Flutter; + sourceTree = ""; + }; + 97C146E51CF9000F007C117D = { + isa = PBXGroup; + children = ( + 9740EEB11CF90186004384FC /* Flutter */, + 97C146F01CF9000F007C117D /* Runner */, + 97C146EF1CF9000F007C117D /* Products */, + 9C7F99B73919EAB4FA657D9E /* Pods */, + 7B49E087B951778510D20936 /* GoogleService-Info.plist */, + DE500BC6E74EB524103D00CE /* Frameworks */, + ); + sourceTree = ""; + }; + 97C146EF1CF9000F007C117D /* Products */ = { + isa = PBXGroup; + children = ( + 97C146EE1CF9000F007C117D /* Runner.app */, + ); + name = Products; + sourceTree = ""; + }; + 97C146F01CF9000F007C117D /* Runner */ = { + isa = PBXGroup; + children = ( + 253804AE278DB662003BA2E2 /* Runner.entitlements */, + 7AFFD8ED1D35381100E5BB4D /* AppDelegate.h */, + 7AFFD8EE1D35381100E5BB4D /* AppDelegate.m */, + 97C146FA1CF9000F007C117D /* Main.storyboard */, + 97C146FD1CF9000F007C117D /* Assets.xcassets */, + 97C146FF1CF9000F007C117D /* LaunchScreen.storyboard */, + 25A01FAD278D905100D1E790 /* GoogleService-Info.plist */, + 97C147021CF9000F007C117D /* Info.plist */, + 97C146F11CF9000F007C117D /* Supporting Files */, + 1498D2321E8E86230040F4C2 /* GeneratedPluginRegistrant.h */, + 1498D2331E8E89220040F4C2 /* GeneratedPluginRegistrant.m */, + ); + path = Runner; + sourceTree = ""; + }; + 97C146F11CF9000F007C117D /* Supporting Files */ = { + isa = PBXGroup; + children = ( + 97C146F21CF9000F007C117D /* main.m */, + ); + name = "Supporting Files"; + sourceTree = ""; + }; + 9C7F99B73919EAB4FA657D9E /* Pods */ = { + isa = PBXGroup; + children = ( + 2FB2202774601424C6393E3D /* Pods-Runner.debug.xcconfig */, + ED172FD60C3CC14CD005C328 /* Pods-Runner.release.xcconfig */, + FD585EE39F3F8D58CFCE5419 /* Pods-Runner.profile.xcconfig */, + ); + path = Pods; + sourceTree = ""; + }; + DE500BC6E74EB524103D00CE /* Frameworks */ = { + isa = PBXGroup; + children = ( + E010D242A20C21968D02B7C9 /* Pods_Runner.framework */, + ); + name = Frameworks; + sourceTree = ""; + }; +/* End PBXGroup section */ + +/* Begin PBXNativeTarget section */ + 97C146ED1CF9000F007C117D /* Runner */ = { + isa = PBXNativeTarget; + buildConfigurationList = 97C147051CF9000F007C117D /* Build configuration list for PBXNativeTarget "Runner" */; + buildPhases = ( + AC2BD8C60F3AA720CEA78FA3 /* [CP] Check Pods Manifest.lock */, + 9740EEB61CF901F6004384FC /* Run Script */, + 97C146EA1CF9000F007C117D /* Sources */, + 97C146EB1CF9000F007C117D /* Frameworks */, + 97C146EC1CF9000F007C117D /* Resources */, + 9705A1C41CF9048500538489 /* Embed Frameworks */, + 3B06AD1E1E4923F5004D2608 /* Thin Binary */, + 3E42446041C78F434168F902 /* [CP] Embed Pods Frameworks */, + 7A855ADEADAAB6F658B535DB /* [CP] Copy Pods Resources */, + ); + buildRules = ( + ); + dependencies = ( + ); + name = Runner; + packageProductDependencies = ( + 78A3181F2AECB46A00862997 /* FlutterGeneratedPluginSwiftPackage */, + ); + productName = Runner; + productReference = 97C146EE1CF9000F007C117D /* Runner.app */; + productType = "com.apple.product-type.application"; + }; +/* End PBXNativeTarget section */ + +/* Begin PBXProject section */ + 97C146E61CF9000F007C117D /* Project object */ = { + isa = PBXProject; + attributes = { + LastUpgradeCheck = 1510; + ORGANIZATIONNAME = "The Chromium Authors"; + TargetAttributes = { + 97C146ED1CF9000F007C117D = { + CreatedOnToolsVersion = 7.3.1; + ProvisioningStyle = Automatic; + }; + }; + }; + buildConfigurationList = 97C146E91CF9000F007C117D /* Build configuration list for PBXProject "Runner" */; + compatibilityVersion = "Xcode 3.2"; + developmentRegion = en; + hasScannedForEncodings = 0; + knownRegions = ( + en, + Base, + ); + mainGroup = 97C146E51CF9000F007C117D; + packageReferences = ( + 781AD8BC2B33823900A9FFBB /* XCLocalSwiftPackageReference "Flutter/ephemeral/Packages/FlutterGeneratedPluginSwiftPackage" */, + ); + productRefGroup = 97C146EF1CF9000F007C117D /* Products */; + projectDirPath = ""; + projectRoot = ""; + targets = ( + 97C146ED1CF9000F007C117D /* Runner */, + ); + }; +/* End PBXProject section */ + +/* Begin PBXResourcesBuildPhase section */ + 97C146EC1CF9000F007C117D /* Resources */ = { + isa = PBXResourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + 97C147011CF9000F007C117D /* LaunchScreen.storyboard in Resources */, + 3B3967161E833CAA004F5970 /* AppFrameworkInfo.plist in Resources */, + 25A01FAE278D905100D1E790 /* GoogleService-Info.plist in Resources */, + 97C146FE1CF9000F007C117D /* Assets.xcassets in Resources */, + 97C146FC1CF9000F007C117D /* Main.storyboard in Resources */, + 081BFEF7D2871CF6AC71DD05 /* GoogleService-Info.plist in Resources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXResourcesBuildPhase section */ + +/* Begin PBXShellScriptBuildPhase section */ + 3B06AD1E1E4923F5004D2608 /* Thin Binary */ = { + isa = PBXShellScriptBuildPhase; + alwaysOutOfDate = 1; + buildActionMask = 2147483647; + files = ( + ); + inputPaths = ( + "${TARGET_BUILD_DIR}/${INFOPLIST_PATH}", + ); + name = "Thin Binary"; + outputPaths = ( + ); + runOnlyForDeploymentPostprocessing = 0; + shellPath = /bin/sh; + shellScript = "/bin/sh \"$FLUTTER_ROOT/packages/flutter_tools/bin/xcode_backend.sh\" embed_and_thin"; + }; + 3E42446041C78F434168F902 /* [CP] Embed Pods Frameworks */ = { + isa = PBXShellScriptBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + inputPaths = ( + "${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks.sh", + "${BUILT_PRODUCTS_DIR}/AppAuth/AppAuth.framework", + "${BUILT_PRODUCTS_DIR}/FirebaseAppCheckInterop/FirebaseAppCheckInterop.framework", + "${BUILT_PRODUCTS_DIR}/FirebaseAuth/FirebaseAuth.framework", + "${BUILT_PRODUCTS_DIR}/FirebaseAuthInterop/FirebaseAuthInterop.framework", + "${BUILT_PRODUCTS_DIR}/FirebaseCore/FirebaseCore.framework", + "${BUILT_PRODUCTS_DIR}/FirebaseCoreExtension/FirebaseCoreExtension.framework", + "${BUILT_PRODUCTS_DIR}/FirebaseCoreInternal/FirebaseCoreInternal.framework", + "${BUILT_PRODUCTS_DIR}/FirebaseInstallations/FirebaseInstallations.framework", + "${BUILT_PRODUCTS_DIR}/FirebaseMessaging/FirebaseMessaging.framework", + "${BUILT_PRODUCTS_DIR}/GTMAppAuth/GTMAppAuth.framework", + "${BUILT_PRODUCTS_DIR}/GTMSessionFetcher/GTMSessionFetcher.framework", + "${BUILT_PRODUCTS_DIR}/GoogleDataTransport/GoogleDataTransport.framework", + "${BUILT_PRODUCTS_DIR}/GoogleSignIn/GoogleSignIn.framework", + "${BUILT_PRODUCTS_DIR}/GoogleUtilities/GoogleUtilities.framework", + "${BUILT_PRODUCTS_DIR}/PromisesObjC/FBLPromises.framework", + "${BUILT_PRODUCTS_DIR}/RecaptchaInterop/RecaptchaInterop.framework", + "${BUILT_PRODUCTS_DIR}/flutter_facebook_auth/flutter_facebook_auth.framework", + "${BUILT_PRODUCTS_DIR}/flutter_secure_storage/flutter_secure_storage.framework", + "${BUILT_PRODUCTS_DIR}/nanopb/nanopb.framework", + "${BUILT_PRODUCTS_DIR}/path_provider_foundation/path_provider_foundation.framework", + "${BUILT_PRODUCTS_DIR}/shared_preferences_foundation/shared_preferences_foundation.framework", + "${BUILT_PRODUCTS_DIR}/url_launcher_ios/url_launcher_ios.framework", + "${PODS_XCFRAMEWORKS_BUILD_DIR}/FBAEMKit/FBAEMKit.framework/FBAEMKit", + "${PODS_XCFRAMEWORKS_BUILD_DIR}/FBSDKCoreKit/FBSDKCoreKit.framework/FBSDKCoreKit", + "${PODS_XCFRAMEWORKS_BUILD_DIR}/FBSDKCoreKit_Basics/FBSDKCoreKit_Basics.framework/FBSDKCoreKit_Basics", + "${PODS_XCFRAMEWORKS_BUILD_DIR}/FBSDKLoginKit/FBSDKLoginKit.framework/FBSDKLoginKit", + ); + name = "[CP] Embed Pods Frameworks"; + outputPaths = ( + "${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/AppAuth.framework", + "${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/FirebaseAppCheckInterop.framework", + "${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/FirebaseAuth.framework", + "${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/FirebaseAuthInterop.framework", + "${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/FirebaseCore.framework", + "${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/FirebaseCoreExtension.framework", + "${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/FirebaseCoreInternal.framework", + "${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/FirebaseInstallations.framework", + "${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/FirebaseMessaging.framework", + "${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/GTMAppAuth.framework", + "${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/GTMSessionFetcher.framework", + "${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/GoogleDataTransport.framework", + "${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/GoogleSignIn.framework", + "${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/GoogleUtilities.framework", + "${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/FBLPromises.framework", + "${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/RecaptchaInterop.framework", + "${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/flutter_facebook_auth.framework", + "${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/flutter_secure_storage.framework", + "${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/nanopb.framework", + "${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/path_provider_foundation.framework", + "${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/shared_preferences_foundation.framework", + "${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/url_launcher_ios.framework", + "${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/FBAEMKit.framework", + "${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/FBSDKCoreKit.framework", + "${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/FBSDKCoreKit_Basics.framework", + "${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/FBSDKLoginKit.framework", + ); + runOnlyForDeploymentPostprocessing = 0; + shellPath = /bin/sh; + shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks.sh\"\n"; + showEnvVarsInLog = 0; + }; + 7A855ADEADAAB6F658B535DB /* [CP] Copy Pods Resources */ = { + isa = PBXShellScriptBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + inputPaths = ( + "${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-resources.sh", + "${PODS_CONFIGURATION_BUILD_DIR}/firebase_messaging/firebase_messaging_Privacy.bundle", + "${PODS_CONFIGURATION_BUILD_DIR}/google_sign_in_ios/google_sign_in_ios_privacy.bundle", + ); + name = "[CP] Copy Pods Resources"; + outputPaths = ( + "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/firebase_messaging_Privacy.bundle", + "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/google_sign_in_ios_privacy.bundle", + ); + runOnlyForDeploymentPostprocessing = 0; + shellPath = /bin/sh; + shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-resources.sh\"\n"; + showEnvVarsInLog = 0; + }; + 9740EEB61CF901F6004384FC /* Run Script */ = { + isa = PBXShellScriptBuildPhase; + alwaysOutOfDate = 1; + buildActionMask = 2147483647; + files = ( + ); + inputPaths = ( + ); + name = "Run Script"; + outputPaths = ( + ); + runOnlyForDeploymentPostprocessing = 0; + shellPath = /bin/sh; + shellScript = "/bin/sh \"$FLUTTER_ROOT/packages/flutter_tools/bin/xcode_backend.sh\" build"; + }; + AC2BD8C60F3AA720CEA78FA3 /* [CP] Check Pods Manifest.lock */ = { + isa = PBXShellScriptBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + inputFileListPaths = ( + ); + inputPaths = ( + "${PODS_PODFILE_DIR_PATH}/Podfile.lock", + "${PODS_ROOT}/Manifest.lock", + ); + name = "[CP] Check Pods Manifest.lock"; + outputFileListPaths = ( + ); + outputPaths = ( + "$(DERIVED_FILE_DIR)/Pods-Runner-checkManifestLockResult.txt", + ); + runOnlyForDeploymentPostprocessing = 0; + shellPath = /bin/sh; + shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; + showEnvVarsInLog = 0; + }; +/* End PBXShellScriptBuildPhase section */ + +/* Begin PBXSourcesBuildPhase section */ + 97C146EA1CF9000F007C117D /* Sources */ = { + isa = PBXSourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + 978B8F6F1D3862AE00F588F7 /* AppDelegate.m in Sources */, + 97C146F31CF9000F007C117D /* main.m in Sources */, + 1498D2341E8E89220040F4C2 /* GeneratedPluginRegistrant.m in Sources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXSourcesBuildPhase section */ + +/* Begin PBXVariantGroup section */ + 97C146FA1CF9000F007C117D /* Main.storyboard */ = { + isa = PBXVariantGroup; + children = ( + 97C146FB1CF9000F007C117D /* Base */, + ); + name = Main.storyboard; + sourceTree = ""; + }; + 97C146FF1CF9000F007C117D /* LaunchScreen.storyboard */ = { + isa = PBXVariantGroup; + children = ( + 97C147001CF9000F007C117D /* Base */, + ); + name = LaunchScreen.storyboard; + sourceTree = ""; + }; +/* End PBXVariantGroup section */ + +/* Begin XCBuildConfiguration section */ + 249021D3217E4FDB00AE95B9 /* Profile */ = { + isa = XCBuildConfiguration; + buildSettings = { + ALWAYS_SEARCH_USER_PATHS = NO; + CLANG_ANALYZER_NONNULL = YES; + CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x"; + CLANG_CXX_LIBRARY = "libc++"; + CLANG_ENABLE_MODULES = YES; + CLANG_ENABLE_OBJC_ARC = YES; + CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES; + CLANG_WARN_BOOL_CONVERSION = YES; + CLANG_WARN_COMMA = YES; + CLANG_WARN_CONSTANT_CONVERSION = YES; + CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES; + CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; + CLANG_WARN_EMPTY_BODY = YES; + CLANG_WARN_ENUM_CONVERSION = YES; + CLANG_WARN_INFINITE_RECURSION = YES; + CLANG_WARN_INT_CONVERSION = YES; + CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES; + CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES; + CLANG_WARN_OBJC_LITERAL_CONVERSION = YES; + CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; + CLANG_WARN_RANGE_LOOP_ANALYSIS = YES; + CLANG_WARN_STRICT_PROTOTYPES = YES; + CLANG_WARN_SUSPICIOUS_MOVE = YES; + CLANG_WARN_UNREACHABLE_CODE = YES; + CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; + "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer"; + COPY_PHASE_STRIP = NO; + DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; + ENABLE_NS_ASSERTIONS = NO; + ENABLE_STRICT_OBJC_MSGSEND = YES; + GCC_C_LANGUAGE_STANDARD = gnu99; + GCC_NO_COMMON_BLOCKS = YES; + GCC_WARN_64_TO_32_BIT_CONVERSION = YES; + GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; + GCC_WARN_UNDECLARED_SELECTOR = YES; + GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; + GCC_WARN_UNUSED_FUNCTION = YES; + GCC_WARN_UNUSED_VARIABLE = YES; + HEADER_SEARCH_PATHS = "\\\"${PODS_ROOT}/Headers\\\""; + IPHONEOS_DEPLOYMENT_TARGET = 15.0; + MTL_ENABLE_DEBUG_INFO = NO; + SDKROOT = iphoneos; + SUPPORTED_PLATFORMS = iphoneos; + TARGETED_DEVICE_FAMILY = "1,2"; + VALIDATE_PRODUCT = YES; + }; + name = Profile; + }; + 249021D4217E4FDB00AE95B9 /* Profile */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = 7AFA3C8E1D35360C0083082E /* Release.xcconfig */; + buildSettings = { + ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; + CODE_SIGN_ENTITLEMENTS = Runner/Runner.entitlements; + CODE_SIGN_IDENTITY = "Apple Development"; + CODE_SIGN_STYLE = Automatic; + CURRENT_PROJECT_VERSION = "$(FLUTTER_BUILD_NUMBER)"; + DEVELOPMENT_TEAM = YYX2P3XVJ7; + ENABLE_BITCODE = NO; + FRAMEWORK_SEARCH_PATHS = ( + "$(inherited)", + "$(PROJECT_DIR)/Flutter", + ); + INFOPLIST_FILE = Runner/Info.plist; + IPHONEOS_DEPLOYMENT_TARGET = 15.0; + LD_RUNPATH_SEARCH_PATHS = ( + "$(inherited)", + "@executable_path/Frameworks", + ); + LIBRARY_SEARCH_PATHS = ( + "$(inherited)", + "$(PROJECT_DIR)/Flutter", + ); + PRODUCT_BUNDLE_IDENTIFIER = io.flutter.plugins.firebase.auth.example; + PRODUCT_NAME = "$(TARGET_NAME)"; + PROVISIONING_PROFILE_SPECIFIER = ""; + VERSIONING_SYSTEM = "apple-generic"; + }; + name = Profile; + }; + 97C147031CF9000F007C117D /* Debug */ = { + isa = XCBuildConfiguration; + buildSettings = { + ALWAYS_SEARCH_USER_PATHS = NO; + CLANG_ANALYZER_NONNULL = YES; + CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x"; + CLANG_CXX_LIBRARY = "libc++"; + CLANG_ENABLE_MODULES = YES; + CLANG_ENABLE_OBJC_ARC = YES; + CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES; + CLANG_WARN_BOOL_CONVERSION = YES; + CLANG_WARN_COMMA = YES; + CLANG_WARN_CONSTANT_CONVERSION = YES; + CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES; + CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; + CLANG_WARN_EMPTY_BODY = YES; + CLANG_WARN_ENUM_CONVERSION = YES; + CLANG_WARN_INFINITE_RECURSION = YES; + CLANG_WARN_INT_CONVERSION = YES; + CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES; + CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES; + CLANG_WARN_OBJC_LITERAL_CONVERSION = YES; + CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; + CLANG_WARN_RANGE_LOOP_ANALYSIS = YES; + CLANG_WARN_STRICT_PROTOTYPES = YES; + CLANG_WARN_SUSPICIOUS_MOVE = YES; + CLANG_WARN_UNREACHABLE_CODE = YES; + CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; + "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer"; + COPY_PHASE_STRIP = NO; + DEBUG_INFORMATION_FORMAT = dwarf; + ENABLE_STRICT_OBJC_MSGSEND = YES; + ENABLE_TESTABILITY = YES; + GCC_C_LANGUAGE_STANDARD = gnu99; + GCC_DYNAMIC_NO_PIC = NO; + GCC_NO_COMMON_BLOCKS = YES; + GCC_OPTIMIZATION_LEVEL = 0; + GCC_PREPROCESSOR_DEFINITIONS = ( + "DEBUG=1", + "$(inherited)", + ); + GCC_WARN_64_TO_32_BIT_CONVERSION = YES; + GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; + GCC_WARN_UNDECLARED_SELECTOR = YES; + GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; + GCC_WARN_UNUSED_FUNCTION = YES; + GCC_WARN_UNUSED_VARIABLE = YES; + HEADER_SEARCH_PATHS = "\\\"${PODS_ROOT}/Headers\\\""; + IPHONEOS_DEPLOYMENT_TARGET = 15.0; + MTL_ENABLE_DEBUG_INFO = YES; + ONLY_ACTIVE_ARCH = YES; + SDKROOT = iphoneos; + TARGETED_DEVICE_FAMILY = "1,2"; + }; + name = Debug; + }; + 97C147041CF9000F007C117D /* Release */ = { + isa = XCBuildConfiguration; + buildSettings = { + ALWAYS_SEARCH_USER_PATHS = NO; + CLANG_ANALYZER_NONNULL = YES; + CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x"; + CLANG_CXX_LIBRARY = "libc++"; + CLANG_ENABLE_MODULES = YES; + CLANG_ENABLE_OBJC_ARC = YES; + CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES; + CLANG_WARN_BOOL_CONVERSION = YES; + CLANG_WARN_COMMA = YES; + CLANG_WARN_CONSTANT_CONVERSION = YES; + CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES; + CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; + CLANG_WARN_EMPTY_BODY = YES; + CLANG_WARN_ENUM_CONVERSION = YES; + CLANG_WARN_INFINITE_RECURSION = YES; + CLANG_WARN_INT_CONVERSION = YES; + CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES; + CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES; + CLANG_WARN_OBJC_LITERAL_CONVERSION = YES; + CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; + CLANG_WARN_RANGE_LOOP_ANALYSIS = YES; + CLANG_WARN_STRICT_PROTOTYPES = YES; + CLANG_WARN_SUSPICIOUS_MOVE = YES; + CLANG_WARN_UNREACHABLE_CODE = YES; + CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; + "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer"; + COPY_PHASE_STRIP = NO; + DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; + ENABLE_NS_ASSERTIONS = NO; + ENABLE_STRICT_OBJC_MSGSEND = YES; + GCC_C_LANGUAGE_STANDARD = gnu99; + GCC_NO_COMMON_BLOCKS = YES; + GCC_WARN_64_TO_32_BIT_CONVERSION = YES; + GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; + GCC_WARN_UNDECLARED_SELECTOR = YES; + GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; + GCC_WARN_UNUSED_FUNCTION = YES; + GCC_WARN_UNUSED_VARIABLE = YES; + HEADER_SEARCH_PATHS = "\\\"${PODS_ROOT}/Headers\\\""; + IPHONEOS_DEPLOYMENT_TARGET = 15.0; + MTL_ENABLE_DEBUG_INFO = NO; + SDKROOT = iphoneos; + SUPPORTED_PLATFORMS = iphoneos; + TARGETED_DEVICE_FAMILY = "1,2"; + VALIDATE_PRODUCT = YES; + }; + name = Release; + }; + 97C147061CF9000F007C117D /* Debug */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = 9740EEB21CF90195004384FC /* Debug.xcconfig */; + buildSettings = { + ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; + CODE_SIGN_ENTITLEMENTS = Runner/Runner.entitlements; + CODE_SIGN_IDENTITY = "Apple Development"; + CODE_SIGN_STYLE = Automatic; + CURRENT_PROJECT_VERSION = "$(FLUTTER_BUILD_NUMBER)"; + DEVELOPMENT_TEAM = YYX2P3XVJ7; + ENABLE_BITCODE = NO; + FRAMEWORK_SEARCH_PATHS = ( + "$(inherited)", + "$(PROJECT_DIR)/Flutter", + ); + INFOPLIST_FILE = Runner/Info.plist; + IPHONEOS_DEPLOYMENT_TARGET = 15.0; + LD_RUNPATH_SEARCH_PATHS = ( + "$(inherited)", + "@executable_path/Frameworks", + ); + LIBRARY_SEARCH_PATHS = ( + "$(inherited)", + "$(PROJECT_DIR)/Flutter", + ); + PRODUCT_BUNDLE_IDENTIFIER = io.flutter.plugins.firebase.auth.example; + PRODUCT_NAME = "$(TARGET_NAME)"; + PROVISIONING_PROFILE_SPECIFIER = ""; + VERSIONING_SYSTEM = "apple-generic"; + }; + name = Debug; + }; + 97C147071CF9000F007C117D /* Release */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = 7AFA3C8E1D35360C0083082E /* Release.xcconfig */; + buildSettings = { + ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; + CODE_SIGN_ENTITLEMENTS = Runner/Runner.entitlements; + CODE_SIGN_IDENTITY = "Apple Development"; + CODE_SIGN_STYLE = Automatic; + CURRENT_PROJECT_VERSION = "$(FLUTTER_BUILD_NUMBER)"; + DEVELOPMENT_TEAM = YYX2P3XVJ7; + ENABLE_BITCODE = NO; + FRAMEWORK_SEARCH_PATHS = ( + "$(inherited)", + "$(PROJECT_DIR)/Flutter", + ); + INFOPLIST_FILE = Runner/Info.plist; + IPHONEOS_DEPLOYMENT_TARGET = 15.0; + LD_RUNPATH_SEARCH_PATHS = ( + "$(inherited)", + "@executable_path/Frameworks", + ); + LIBRARY_SEARCH_PATHS = ( + "$(inherited)", + "$(PROJECT_DIR)/Flutter", + ); + PRODUCT_BUNDLE_IDENTIFIER = io.flutter.plugins.firebase.auth.example; + PRODUCT_NAME = "$(TARGET_NAME)"; + PROVISIONING_PROFILE_SPECIFIER = ""; + VERSIONING_SYSTEM = "apple-generic"; + }; + name = Release; + }; +/* End XCBuildConfiguration section */ + +/* Begin XCConfigurationList section */ + 97C146E91CF9000F007C117D /* Build configuration list for PBXProject "Runner" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + 97C147031CF9000F007C117D /* Debug */, + 97C147041CF9000F007C117D /* Release */, + 249021D3217E4FDB00AE95B9 /* Profile */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; + 97C147051CF9000F007C117D /* Build configuration list for PBXNativeTarget "Runner" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + 97C147061CF9000F007C117D /* Debug */, + 97C147071CF9000F007C117D /* Release */, + 249021D4217E4FDB00AE95B9 /* Profile */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; +/* End XCConfigurationList section */ + +/* Begin XCLocalSwiftPackageReference section */ + 781AD8BC2B33823900A9FFBB /* XCLocalSwiftPackageReference "Flutter/ephemeral/Packages/FlutterGeneratedPluginSwiftPackage" */ = { + isa = XCLocalSwiftPackageReference; + relativePath = Flutter/ephemeral/Packages/FlutterGeneratedPluginSwiftPackage; + }; +/* End XCLocalSwiftPackageReference section */ + +/* Begin XCSwiftPackageProductDependency section */ + 78A3181F2AECB46A00862997 /* FlutterGeneratedPluginSwiftPackage */ = { + isa = XCSwiftPackageProductDependency; + productName = FlutterGeneratedPluginSwiftPackage; + }; +/* End XCSwiftPackageProductDependency section */ + }; + rootObject = 97C146E61CF9000F007C117D /* Project object */; +} diff --git a/mih_ui/android/build/ios/SourcePackages/firebase_auth-6.5.4/example/ios/Runner.xcodeproj/project.xcworkspace/contents.xcworkspacedata b/mih_ui/android/build/ios/SourcePackages/firebase_auth-6.5.4/example/ios/Runner.xcodeproj/project.xcworkspace/contents.xcworkspacedata new file mode 100644 index 00000000..919434a6 --- /dev/null +++ b/mih_ui/android/build/ios/SourcePackages/firebase_auth-6.5.4/example/ios/Runner.xcodeproj/project.xcworkspace/contents.xcworkspacedata @@ -0,0 +1,7 @@ + + + + + diff --git a/mih_ui/android/build/ios/SourcePackages/firebase_auth-6.5.4/example/ios/Runner.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist b/mih_ui/android/build/ios/SourcePackages/firebase_auth-6.5.4/example/ios/Runner.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist new file mode 100644 index 00000000..18d98100 --- /dev/null +++ b/mih_ui/android/build/ios/SourcePackages/firebase_auth-6.5.4/example/ios/Runner.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist @@ -0,0 +1,8 @@ + + + + + IDEDidComputeMac32BitWarning + + + diff --git a/mih_ui/android/build/ios/SourcePackages/firebase_auth-6.5.4/example/ios/Runner.xcodeproj/project.xcworkspace/xcshareddata/WorkspaceSettings.xcsettings b/mih_ui/android/build/ios/SourcePackages/firebase_auth-6.5.4/example/ios/Runner.xcodeproj/project.xcworkspace/xcshareddata/WorkspaceSettings.xcsettings new file mode 100644 index 00000000..f9b0d7c5 --- /dev/null +++ b/mih_ui/android/build/ios/SourcePackages/firebase_auth-6.5.4/example/ios/Runner.xcodeproj/project.xcworkspace/xcshareddata/WorkspaceSettings.xcsettings @@ -0,0 +1,8 @@ + + + + + PreviewsEnabled + + + diff --git a/mih_ui/android/build/ios/SourcePackages/firebase_auth-6.5.4/example/ios/Runner.xcodeproj/xcshareddata/xcschemes/Runner.xcscheme b/mih_ui/android/build/ios/SourcePackages/firebase_auth-6.5.4/example/ios/Runner.xcodeproj/xcshareddata/xcschemes/Runner.xcscheme new file mode 100644 index 00000000..fc5ae031 --- /dev/null +++ b/mih_ui/android/build/ios/SourcePackages/firebase_auth-6.5.4/example/ios/Runner.xcodeproj/xcshareddata/xcschemes/Runner.xcscheme @@ -0,0 +1,94 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/mih_ui/android/build/ios/SourcePackages/firebase_auth-6.5.4/example/ios/Runner.xcworkspace/contents.xcworkspacedata b/mih_ui/android/build/ios/SourcePackages/firebase_auth-6.5.4/example/ios/Runner.xcworkspace/contents.xcworkspacedata new file mode 100644 index 00000000..21a3cc14 --- /dev/null +++ b/mih_ui/android/build/ios/SourcePackages/firebase_auth-6.5.4/example/ios/Runner.xcworkspace/contents.xcworkspacedata @@ -0,0 +1,10 @@ + + + + + + + diff --git a/mih_ui/android/build/ios/SourcePackages/firebase_auth-6.5.4/example/ios/Runner.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist b/mih_ui/android/build/ios/SourcePackages/firebase_auth-6.5.4/example/ios/Runner.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist new file mode 100644 index 00000000..18d98100 --- /dev/null +++ b/mih_ui/android/build/ios/SourcePackages/firebase_auth-6.5.4/example/ios/Runner.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist @@ -0,0 +1,8 @@ + + + + + IDEDidComputeMac32BitWarning + + + diff --git a/mih_ui/android/build/ios/SourcePackages/firebase_auth-6.5.4/example/ios/Runner.xcworkspace/xcshareddata/WorkspaceSettings.xcsettings b/mih_ui/android/build/ios/SourcePackages/firebase_auth-6.5.4/example/ios/Runner.xcworkspace/xcshareddata/WorkspaceSettings.xcsettings new file mode 100644 index 00000000..f9b0d7c5 --- /dev/null +++ b/mih_ui/android/build/ios/SourcePackages/firebase_auth-6.5.4/example/ios/Runner.xcworkspace/xcshareddata/WorkspaceSettings.xcsettings @@ -0,0 +1,8 @@ + + + + + PreviewsEnabled + + + diff --git a/mih_ui/android/build/ios/SourcePackages/firebase_auth-6.5.4/example/ios/Runner/AppDelegate.h b/mih_ui/android/build/ios/SourcePackages/firebase_auth-6.5.4/example/ios/Runner/AppDelegate.h new file mode 100644 index 00000000..36e21bbf --- /dev/null +++ b/mih_ui/android/build/ios/SourcePackages/firebase_auth-6.5.4/example/ios/Runner/AppDelegate.h @@ -0,0 +1,6 @@ +#import +#import + +@interface AppDelegate : FlutterAppDelegate + +@end diff --git a/mih_ui/android/build/ios/SourcePackages/firebase_auth-6.5.4/example/ios/Runner/AppDelegate.m b/mih_ui/android/build/ios/SourcePackages/firebase_auth-6.5.4/example/ios/Runner/AppDelegate.m new file mode 100644 index 00000000..70e83933 --- /dev/null +++ b/mih_ui/android/build/ios/SourcePackages/firebase_auth-6.5.4/example/ios/Runner/AppDelegate.m @@ -0,0 +1,13 @@ +#import "AppDelegate.h" +#import "GeneratedPluginRegistrant.h" + +@implementation AppDelegate + +- (BOOL)application:(UIApplication *)application + didFinishLaunchingWithOptions:(NSDictionary *)launchOptions { + [GeneratedPluginRegistrant registerWithRegistry:self]; + // Override point for customization after application launch. + return [super application:application didFinishLaunchingWithOptions:launchOptions]; +} + +@end diff --git a/mih_ui/android/build/ios/SourcePackages/firebase_auth-6.5.4/example/ios/Runner/AppDelegate.swift b/mih_ui/android/build/ios/SourcePackages/firebase_auth-6.5.4/example/ios/Runner/AppDelegate.swift new file mode 100644 index 00000000..62666446 --- /dev/null +++ b/mih_ui/android/build/ios/SourcePackages/firebase_auth-6.5.4/example/ios/Runner/AppDelegate.swift @@ -0,0 +1,13 @@ +import Flutter +import UIKit + +@main +@objc class AppDelegate: FlutterAppDelegate { + override func application( + _ application: UIApplication, + didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]? + ) -> Bool { + GeneratedPluginRegistrant.register(with: self) + return super.application(application, didFinishLaunchingWithOptions: launchOptions) + } +} diff --git a/mih_ui/android/build/ios/SourcePackages/firebase_auth-6.5.4/example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Contents.json b/mih_ui/android/build/ios/SourcePackages/firebase_auth-6.5.4/example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Contents.json new file mode 100644 index 00000000..d36b1fab --- /dev/null +++ b/mih_ui/android/build/ios/SourcePackages/firebase_auth-6.5.4/example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Contents.json @@ -0,0 +1,122 @@ +{ + "images" : [ + { + "size" : "20x20", + "idiom" : "iphone", + "filename" : "Icon-App-20x20@2x.png", + "scale" : "2x" + }, + { + "size" : "20x20", + "idiom" : "iphone", + "filename" : "Icon-App-20x20@3x.png", + "scale" : "3x" + }, + { + "size" : "29x29", + "idiom" : "iphone", + "filename" : "Icon-App-29x29@1x.png", + "scale" : "1x" + }, + { + "size" : "29x29", + "idiom" : "iphone", + "filename" : "Icon-App-29x29@2x.png", + "scale" : "2x" + }, + { + "size" : "29x29", + "idiom" : "iphone", + "filename" : "Icon-App-29x29@3x.png", + "scale" : "3x" + }, + { + "size" : "40x40", + "idiom" : "iphone", + "filename" : "Icon-App-40x40@2x.png", + "scale" : "2x" + }, + { + "size" : "40x40", + "idiom" : "iphone", + "filename" : "Icon-App-40x40@3x.png", + "scale" : "3x" + }, + { + "size" : "60x60", + "idiom" : "iphone", + "filename" : "Icon-App-60x60@2x.png", + "scale" : "2x" + }, + { + "size" : "60x60", + "idiom" : "iphone", + "filename" : "Icon-App-60x60@3x.png", + "scale" : "3x" + }, + { + "size" : "20x20", + "idiom" : "ipad", + "filename" : "Icon-App-20x20@1x.png", + "scale" : "1x" + }, + { + "size" : "20x20", + "idiom" : "ipad", + "filename" : "Icon-App-20x20@2x.png", + "scale" : "2x" + }, + { + "size" : "29x29", + "idiom" : "ipad", + "filename" : "Icon-App-29x29@1x.png", + "scale" : "1x" + }, + { + "size" : "29x29", + "idiom" : "ipad", + "filename" : "Icon-App-29x29@2x.png", + "scale" : "2x" + }, + { + "size" : "40x40", + "idiom" : "ipad", + "filename" : "Icon-App-40x40@1x.png", + "scale" : "1x" + }, + { + "size" : "40x40", + "idiom" : "ipad", + "filename" : "Icon-App-40x40@2x.png", + "scale" : "2x" + }, + { + "size" : "76x76", + "idiom" : "ipad", + "filename" : "Icon-App-76x76@1x.png", + "scale" : "1x" + }, + { + "size" : "76x76", + "idiom" : "ipad", + "filename" : "Icon-App-76x76@2x.png", + "scale" : "2x" + }, + { + "size" : "83.5x83.5", + "idiom" : "ipad", + "filename" : "Icon-App-83.5x83.5@2x.png", + "scale" : "2x" + }, + { + "size" : "1024x1024", + "idiom" : "ios-marketing", + "filename" : "Icon-App-1024x1024@1x.png", + "scale" : "1x" + } + ], + "info" : { + "version" : 1, + "author" : "xcode" + } +} diff --git a/mih_ui/android/build/ios/SourcePackages/firebase_auth-6.5.4/example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-1024x1024@1x.png b/mih_ui/android/build/ios/SourcePackages/firebase_auth-6.5.4/example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-1024x1024@1x.png new file mode 100644 index 0000000000000000000000000000000000000000..dc9ada4725e9b0ddb1deab583e5b5102493aa332 GIT binary patch literal 10932 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 literal 0 HcmV?d00001 diff --git a/mih_ui/android/build/ios/SourcePackages/firebase_auth-6.5.4/example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@3x.png b/mih_ui/android/build/ios/SourcePackages/firebase_auth-6.5.4/example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@3x.png new file mode 100644 index 0000000000000000000000000000000000000000..f091b6b0bca859a3f474b03065bef75ba58a9e4c GIT binary patch literal 1588 zcmV-42Fv-0P)C1SqPt}wig>|5Crh^=oyX$BK<}M8eLU3e2hGT;=G|!_SP)7zNI6fqUMB=)y zRAZ>eDe#*r`yDAVgB_R*LB*MAc)8(b{g{9McCXW!lq7r(btRoB9!8B-#AI6JMb~YFBEvdsV)`mEQO^&#eRKx@b&x- z5lZm*!WfD8oCLzfHGz#u7sT0^VLMI1MqGxF^v+`4YYnVYgk*=kU?HsSz{v({E3lb9 z>+xILjBN)t6`=g~IBOelGQ(O990@BfXf(DRI5I$qN$0Gkz-FSc$3a+2fX$AedL4u{ z4V+5Ong(9LiGcIKW?_352sR;LtDPmPJXI{YtT=O8=76o9;*n%_m|xo!i>7$IrZ-{l z-x3`7M}qzHsPV@$v#>H-TpjDh2UE$9g6sysUREDy_R(a)>=eHw-WAyfIN z*qb!_hW>G)Tu8nSw9yn#3wFMiLcfc4pY0ek1}8(NqkBR@t4{~oC>ryc-h_ByH(Cg5 z>ao-}771+xE3um9lWAY1FeQFxowa1(!J(;Jg*wrg!=6FdRX+t_<%z&d&?|Bn){>zm zZQj(aA_HeBY&OC^jj*)N`8fa^ePOU72VpInJoI1?`ty#lvlNzs(&MZX+R%2xS~5Kh zX*|AU4QE#~SgPzOXe9>tRj>hjU@c1k5Y_mW*Jp3fI;)1&g3j|zDgC+}2Q_v%YfDax z!?umcN^n}KYQ|a$Lr+51Nf9dkkYFSjZZjkma$0KOj+;aQ&721~t7QUKx61J3(P4P1 zstI~7-wOACnWP4=8oGOwz%vNDqD8w&Q`qcNGGrbbf&0s9L0De{4{mRS?o0MU+nR_! zrvshUau0G^DeMhM_v{5BuLjb#Hh@r23lDAk8oF(C+P0rsBpv85EP>4CVMx#04MOfG z;P%vktHcXwTj~+IE(~px)3*MY77e}p#|c>TD?sMatC0Tu4iKKJ0(X8jxQY*gYtxsC z(zYC$g|@+I+kY;dg_dE>scBf&bP1Nc@Hz<3R)V`=AGkc;8CXqdi=B4l2k|g;2%#m& z*jfX^%b!A8#bI!j9-0Fi0bOXl(-c^AB9|nQaE`*)Hw+o&jS9@7&Gov#HbD~#d{twV zXd^Tr^mWLfFh$@Dr$e;PBEz4(-2q1FF0}c;~B5sA}+Q>TOoP+t>wf)V9Iy=5ruQa;z)y zI9C9*oUga6=hxw6QasLPnee@3^Rr*M{CdaL5=R41nLs(AHk_=Y+A9$2&H(B7!_pURs&8aNw7?`&Z&xY_Ye z)~D5Bog^td-^QbUtkTirdyK^mTHAOuptDflut!#^lnKqU md>ggs(5nOWAqO?umG&QVYK#ibz}*4>0000U6E9hRK9^#O7(mu>ETqrXGsduA8$)?`v2seloOCza43C{NQ$$gAOH**MCn0Q?+L7dl7qnbRdqZ8LSVp1ItDxhxD?t@5_yHg6A8yI zC*%Wgg22K|8E#!~cTNYR~@Y9KepMPrrB8cABapAFa=`H+UGhkXUZV1GnwR1*lPyZ;*K(i~2gp|@bzp8}og7e*#% zEnr|^CWdVV!-4*Y_7rFvlww2Ze+>j*!Z!pQ?2l->4q#nqRu9`ELo6RMS5=br47g_X zRw}P9a7RRYQ%2Vsd0Me{_(EggTnuN6j=-?uFS6j^u69elMypu?t>op*wBx<=Wx8?( ztpe^(fwM6jJX7M-l*k3kEpWOl_Vk3@(_w4oc}4YF4|Rt=2V^XU?#Yz`8(e?aZ@#li0n*=g^qOcVpd-Wbok=@b#Yw zqn8u9a)z>l(1kEaPYZ6hwubN6i<8QHgsu0oE) ziJ(p;Wxm>sf!K+cw>R-(^Y2_bahB+&KI9y^);#0qt}t-$C|Bo71lHi{_+lg#f%RFy z0um=e3$K3i6K{U_4K!EX?F&rExl^W|G8Z8;`5z-k}OGNZ0#WVb$WCpQu-_YsiqKP?BB# vzVHS-CTUF4Ozn5G+mq_~Qqto~ahA+K`|lyv3(-e}00000NkvXXu0mjfd`9t{ literal 0 HcmV?d00001 diff --git a/mih_ui/android/build/ios/SourcePackages/firebase_auth-6.5.4/example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@2x.png b/mih_ui/android/build/ios/SourcePackages/firebase_auth-6.5.4/example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@2x.png new file mode 100644 index 0000000000000000000000000000000000000000..d0ef06e7edb86cdfe0d15b4b0d98334a86163658 GIT binary patch literal 1716 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 literal 0 HcmV?d00001 diff --git a/mih_ui/android/build/ios/SourcePackages/firebase_auth-6.5.4/example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@2x.png b/mih_ui/android/build/ios/SourcePackages/firebase_auth-6.5.4/example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@2x.png new file mode 100644 index 0000000000000000000000000000000000000000..c8f9ed8f5cee1c98386d13b17e89f719e83555b2 GIT binary patch literal 1895 zcmV-t2blPYP)FQtfgmafE#=YDCq`qUBt#QpG%*H6QHY765~R=q zZ6iudfM}q!Pz#~9JgOi8QJ|DSu?1-*(kSi1K4#~5?#|rh?sS)(-JQqX*}ciXJ56_H zdw=^s_srbAdqxlvGyrgGet#6T7_|j;95sL%MtM;q86vOxKM$f#puR)Bjv9Zvz9-di zXOTSsZkM83)E9PYBXC<$6(|>lNLVBb&&6y{NByFCp%6+^ALR@NCTse_wqvNmSWI-m z!$%KlHFH2omF!>#%1l3LTZg(s7eof$7*xB)ZQ0h?ejh?Ta9fDv59+u#MokW+1t8Zb zgHv%K(u9G^Lv`lh#f3<6!JVTL3(dCpxHbnbA;kKqQyd1~^Xe0VIaYBSWm6nsr;dFj z4;G-RyL?cYgsN1{L4ZFFNa;8)Rv0fM0C(~Tkit94 zz#~A)59?QjD&pAPSEQ)p8gP|DS{ng)j=2ux)_EzzJ773GmQ_Cic%3JJhC0t2cx>|v zJcVusIB!%F90{+}8hG3QU4KNeKmK%T>mN57NnCZ^56=0?&3@!j>a>B43pi{!u z7JyDj7`6d)qVp^R=%j>UIY6f+3`+qzIc!Y_=+uN^3BYV|o+$vGo-j-Wm<10%A=(Yk^beI{t%ld@yhKjq0iNjqN4XMGgQtbKubPM$JWBz}YA65k%dm*awtC^+f;a-x4+ddbH^7iDWGg&N0n#MW{kA|=8iMUiFYvMoDY@sPC#t$55gn6ykUTPAr`a@!(;np824>2xJthS z*ZdmT`g5-`BuJs`0LVhz+D9NNa3<=6m;cQLaF?tCv8)zcRSh66*Z|vXhG@$I%U~2l z?`Q zykI#*+rQ=z6Jm=Bui-SfpDYLA=|vzGE(dYm=OC8XM&MDo7ux4UF1~0J1+i%aCUpRe zt3L_uNyQ*cE(38Uy03H%I*)*Bh=Lb^Xj3?I^Hnbeq72(EOK^Y93CNp*uAA{5Lc=ky zx=~RKa4{iTm{_>_vSCm?$Ej=i6@=m%@VvAITnigVg{&@!7CDgs908761meDK5azA} z4?=NOH|PdvabgJ&fW2{Mo$Q0CcD8Qc84%{JPYt5EiG{MdLIAeX%T=D7NIP4%Hw}p9 zg)==!2Lbp#j{u_}hMiao9=!VSyx0gHbeCS`;q&vzeq|fs`y&^X-lso(Ls@-706qmA z7u*T5PMo_w3{se1t2`zWeO^hOvTsohG_;>J0wVqVe+n)AbQCx)yh9;w+J6?NF5Lmo zecS@ieAKL8%bVd@+-KT{yI|S}O>pYckUFs;ry9Ow$CD@ztz5K-*D$^{i(_1llhSh^ zEkL$}tsQt5>QA^;QgjgIfBDmcOgi5YDyu?t6vSnbp=1+@6D& z5MJ}B8q;bRlVoxasyhcUF1+)o`&3r0colr}QJ3hcSdLu;9;td>kf@Tcn<@9sIx&=m z;AD;SCh95=&p;$r{Xz3iWCO^MX83AGJ(yH&eTXgv|0=34#-&WAmw{)U7OU9!Wz^!7 zZ%jZFi@JR;>Mhi7S>V7wQ176|FdW2m?&`qa(ScO^CFPR80HucLHOTy%5s*HR0^8)i h0WYBP*#0Ks^FNSabJA*5${_#%002ovPDHLkV1oKhTl@e3 literal 0 HcmV?d00001 diff --git a/mih_ui/android/build/ios/SourcePackages/firebase_auth-6.5.4/example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@3x.png b/mih_ui/android/build/ios/SourcePackages/firebase_auth-6.5.4/example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@3x.png new file mode 100644 index 0000000000000000000000000000000000000000..a6d6b8609df07bf62e5100a53a01510388bd2b22 GIT binary patch literal 2665 zcmV-v3YPVWP)oFh3q0MFesq&64WThn3$;G69TfjsAv=f2G9}p zgSx99+!YV6qME!>9MD13x)k(+XE7W?_O4LoLb5ND8 zaV{9+P@>42xDfRiYBMSgD$0!vssptcb;&?u9u(LLBKmkZ>RMD=kvD3h`sk6!QYtBa ztlZI#nu$8lJ^q2Z79UTgZe>BU73(Aospiq+?SdMt8lDZ;*?@tyWVZVS_Q7S&*tJaiRlJ z+aSMOmbg3@h5}v;A*c8SbqM3icg-`Cnwl;7Ts%A1RkNIp+Txl-Ckkvg4oxrqGA5ewEgYqwtECD<_3Egu)xGllKt&J8g&+=ac@Jq4-?w6M3b*>w5 z69N3O%=I^6&UL5gZ!}trC7bUj*12xLdkNs~Bz4QdJJ*UDZox2UGR}SNg@lmOvhCc~ z*f_UeXv(=#I#*7>VZx2ObEN~UoGUTl=-@)E;YtCRZ>SVp$p9yG5hEFZ!`wI!spd)n zSk+vK0Vin7FL{7f&6OB%f;SH22dtbcF<|9fi2Fp%q4kxL!b1#l^)8dUwJ zwEf{(wJj@8iYDVnKB`eSU+;ml-t2`@%_)0jDM`+a46xhDbBj2+&Ih>1A>6aky#(-SYyE{R3f#y57wfLs z6w1p~$bp;6!9DX$M+J~S@D6vJAaElETnsX4h9a5tvPhC3L@qB~bOzkL@^z0k_hS{T4PF*TDrgdXp+dzsE? z>V|VR035Pl9n5&-RePFdS{7KAr2vPOqR9=M$vXA1Yy5>w;EsF`;OK{2pkn-kpp9Pw z)r;5JfJKKaT$4qCb{TaXHjb$QA{y0EYy*+b1XI;6Ah- zw13P)xT`>~eFoJC!>{2XL(a_#upp3gaR1#5+L(Jmzp4TBnx{~WHedpJ1ch8JFk~Sw z>F+gN+i+VD?gMXwcIhn8rz`>e>J^TI3E-MW>f}6R-pL}>WMOa0k#jN+`RyUVUC;#D zg|~oS^$6%wpF{^Qr+}X>0PKcr3Fc&>Z>uv@C);pwDs@2bZWhYP!rvGx?_|q{d`t<*XEb#=aOb=N+L@CVBGqImZf&+a zCQEa3$~@#kC);pasdG=f6tuIi0PO-y&tvX%>Mv=oY3U$nD zJ#gMegnQ46pq+3r=;zmgcG+zRc9D~c>z+jo9&D+`E6$LmyFqlmCYw;-Zooma{sR@~ z)_^|YL1&&@|GXo*pivH7k!msl+$Sew3%XJnxajt0K%3M6Bd&YFNy9}tWG^aovK2eX z1aL1%7;KRDrA@eG-Wr6w+;*H_VD~qLiVI`{_;>o)k`{8xa3EJT1O_>#iy_?va0eR? zDV=N%;Zjb%Z2s$@O>w@iqt!I}tLjGk!=p`D23I}N4Be@$(|iSA zf3Ih7b<{zqpDB4WF_5X1(peKe+rASze%u8eKLn#KKXt;UZ+Adf$_TO+vTqshLLJ5c z52HucO=lrNVae5XWOLm!V@n-ObU11!b+DN<$RuU+YsrBq*lYT;?AwJpmNKniF0Q1< zJCo>Q$=v$@&y=sj6{r!Y&y&`0$-I}S!H_~pI&2H8Z1C|BX4VgZ^-! zje3-;x0PBD!M`v*J_)rL^+$<1VJhH*2Fi~aA7s&@_rUHYJ9zD=M%4AFQ`}k8OC$9s XsPq=LnkwKG00000NkvXXu0mjfhAk5^ literal 0 HcmV?d00001 diff --git a/mih_ui/android/build/ios/SourcePackages/firebase_auth-6.5.4/example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-60x60@2x.png b/mih_ui/android/build/ios/SourcePackages/firebase_auth-6.5.4/example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-60x60@2x.png new file mode 100644 index 0000000000000000000000000000000000000000..a6d6b8609df07bf62e5100a53a01510388bd2b22 GIT binary patch literal 2665 zcmV-v3YPVWP)oFh3q0MFesq&64WThn3$;G69TfjsAv=f2G9}p zgSx99+!YV6qME!>9MD13x)k(+XE7W?_O4LoLb5ND8 zaV{9+P@>42xDfRiYBMSgD$0!vssptcb;&?u9u(LLBKmkZ>RMD=kvD3h`sk6!QYtBa ztlZI#nu$8lJ^q2Z79UTgZe>BU73(Aospiq+?SdMt8lDZ;*?@tyWVZVS_Q7S&*tJaiRlJ z+aSMOmbg3@h5}v;A*c8SbqM3icg-`Cnwl;7Ts%A1RkNIp+Txl-Ckkvg4oxrqGA5ewEgYqwtECD<_3Egu)xGllKt&J8g&+=ac@Jq4-?w6M3b*>w5 z69N3O%=I^6&UL5gZ!}trC7bUj*12xLdkNs~Bz4QdJJ*UDZox2UGR}SNg@lmOvhCc~ z*f_UeXv(=#I#*7>VZx2ObEN~UoGUTl=-@)E;YtCRZ>SVp$p9yG5hEFZ!`wI!spd)n zSk+vK0Vin7FL{7f&6OB%f;SH22dtbcF<|9fi2Fp%q4kxL!b1#l^)8dUwJ zwEf{(wJj@8iYDVnKB`eSU+;ml-t2`@%_)0jDM`+a46xhDbBj2+&Ih>1A>6aky#(-SYyE{R3f#y57wfLs z6w1p~$bp;6!9DX$M+J~S@D6vJAaElETnsX4h9a5tvPhC3L@qB~bOzkL@^z0k_hS{T4PF*TDrgdXp+dzsE? z>V|VR035Pl9n5&-RePFdS{7KAr2vPOqR9=M$vXA1Yy5>w;EsF`;OK{2pkn-kpp9Pw z)r;5JfJKKaT$4qCb{TaXHjb$QA{y0EYy*+b1XI;6Ah- zw13P)xT`>~eFoJC!>{2XL(a_#upp3gaR1#5+L(Jmzp4TBnx{~WHedpJ1ch8JFk~Sw z>F+gN+i+VD?gMXwcIhn8rz`>e>J^TI3E-MW>f}6R-pL}>WMOa0k#jN+`RyUVUC;#D zg|~oS^$6%wpF{^Qr+}X>0PKcr3Fc&>Z>uv@C);pwDs@2bZWhYP!rvGx?_|q{d`t<*XEb#=aOb=N+L@CVBGqImZf&+a zCQEa3$~@#kC);pasdG=f6tuIi0PO-y&tvX%>Mv=oY3U$nD zJ#gMegnQ46pq+3r=;zmgcG+zRc9D~c>z+jo9&D+`E6$LmyFqlmCYw;-Zooma{sR@~ z)_^|YL1&&@|GXo*pivH7k!msl+$Sew3%XJnxajt0K%3M6Bd&YFNy9}tWG^aovK2eX z1aL1%7;KRDrA@eG-Wr6w+;*H_VD~qLiVI`{_;>o)k`{8xa3EJT1O_>#iy_?va0eR? zDV=N%;Zjb%Z2s$@O>w@iqt!I}tLjGk!=p`D23I}N4Be@$(|iSA zf3Ih7b<{zqpDB4WF_5X1(peKe+rASze%u8eKLn#KKXt;UZ+Adf$_TO+vTqshLLJ5c z52HucO=lrNVae5XWOLm!V@n-ObU11!b+DN<$RuU+YsrBq*lYT;?AwJpmNKniF0Q1< zJCo>Q$=v$@&y=sj6{r!Y&y&`0$-I}S!H_~pI&2H8Z1C|BX4VgZ^-! zje3-;x0PBD!M`v*J_)rL^+$<1VJhH*2Fi~aA7s&@_rUHYJ9zD=M%4AFQ`}k8OC$9s XsPq=LnkwKG00000NkvXXu0mjfhAk5^ literal 0 HcmV?d00001 diff --git a/mih_ui/android/build/ios/SourcePackages/firebase_auth-6.5.4/example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-60x60@3x.png b/mih_ui/android/build/ios/SourcePackages/firebase_auth-6.5.4/example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-60x60@3x.png new file mode 100644 index 0000000000000000000000000000000000000000..75b2d164a5a98e212cca15ea7bf2ab5de5108680 GIT binary patch literal 3831 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 literal 0 HcmV?d00001 diff --git a/mih_ui/android/build/ios/SourcePackages/firebase_auth-6.5.4/example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-76x76@1x.png b/mih_ui/android/build/ios/SourcePackages/firebase_auth-6.5.4/example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-76x76@1x.png new file mode 100644 index 0000000000000000000000000000000000000000..c4df70d39da7941ef3f6dcb7f06a192d8dcb308d GIT binary patch literal 1888 zcmV-m2cP(fP)x~L`~4d)Rspd&<9kFh{hn*KP1LP0~$;u(LfAu zp%fx&qLBcRHx$G|3q(bv@+b;o0*D|jwD-Q9uQR(l*ST}s+uPgQ-MeFwZ#GS?b332? z&Tk$&_miXn3IGq)AmQ)3sisq{raD4(k*bHvpCe-TdWq^NRTEVM)i9xbgQ&ccnUVx* zEY%vS%gDcSg=!tuIK8$Th2_((_h^+7;R|G{n06&O2#6%LK`a}n?h_fL18btz<@lFG za}xS}u?#DBMB> zw^b($1Z)`9G?eP95EKi&$eOy@K%h;ryrR3la%;>|o*>CgB(s>dDcNOXg}CK9SPmD? zmr-s{0wRmxUnbDrYfRvnZ@d z6johZ2sMX{YkGSKWd}m|@V7`Degt-43=2M?+jR%8{(H$&MLLmS;-|JxnX2pnz;el1jsvqQz}pGSF<`mqEXRQ5sC4#BbwnB_4` zc5bFE-Gb#JV3tox9fp-vVEN{(tOCpRse`S+@)?%pz+zVJXSooTrNCUg`R6`hxwb{) zC@{O6MKY8tfZ5@!yy=p5Y|#+myRL=^{tc(6YgAnkg3I(Cd!r5l;|;l-MQ8B`;*SCE z{u)uP^C$lOPM z5d~UhKhRRmvv{LIa^|oavk1$QiEApSrP@~Jjbg`<*dW4TO?4qG%a%sTPUFz(QtW5( zM)lA+5)0TvH~aBaOAs|}?u2FO;yc-CZ1gNM1dAxJ?%m?YsGR`}-xk2*dxC}r5j$d* zE!#Vtbo69h>V4V`BL%_&$} z+oJAo@jQ^Tk`;%xw-4G>hhb&)B?##U+(6Fi7nno`C<|#PVA%$Y{}N-?(Gc$1%tr4Pc}}hm~yY#fTOe!@v9s-ik$dX~|ygArPhByaXn8 zpI^FUjNWMsTFKTP3X7m?UK)3m zp6rI^_zxRYrx6_QmhoWoDR`fp4R7gu6;gdO)!KexaoO2D88F9x#TM1(9Bn7g;|?|o z)~$n&Lh#hCP6_LOPD>a)NmhW})LADx2kq=X7}7wYRj-0?dXr&bHaRWCfSqvzFa=sn z-8^gSyn-RmH=BZ{AJZ~!8n5621GbUJV7Qvs%JNv&$%Q17s_X%s-41vAPfIR>;x0Wlqr5?09S>x#%Qkt>?(&XjFRY}*L6BeQ3 z<6XEBh^S7>AbwGm@XP{RkeEKj6@_o%oV?hDuUpUJ+r#JZO?!IUc;r0R?>mi)*ZpQ) z#((dn=A#i_&EQn|hd)N$#A*fjBFuiHcYvo?@y1 z5|fV=a^a~d!c-%ZbMNqkMKiSzM{Yq=7_c&1H!mXk60Uv32dV;vMg&-kQ)Q{+PFtwc zj|-uQ;b^gts??J*9VxxOro}W~Q9j4Em|zSRv)(WSO9$F$s=Ydu%Q+5DOid~lwk&we zY%W(Z@ofdwPHncEZzZgmqS|!gTj3wQq9rxQy+^eNYKr1mj&?tm@wkO*9@UtnRMG>c aR{jt9+;fr}hV%pg00001^@s67{VYS000c7NklQEG_j zup^)eW&WUIApqy$=APz8jE@awGp)!bsTjDbrJO`$x^ZR^dr;>)LW>{ zs70vpsD38v)19rI=GNk1b(0?Js9~rjsQsu*K;@SD40RB-3^gKU-MYC7G!Bw{fZsqp zih4iIi;Hr_xZ033Iu{sQxLS=}yBXgLMn40d++>aQ0#%8D1EbGZp7+ z5=mK?t31BkVYbGOxE9`i748x`YgCMwL$qMsChbSGSE1`p{nSmadR zcQ#R)(?!~dmtD0+D2!K zR9%!Xp1oOJzm(vbLvT^$IKp@+W2=-}qTzTgVtQ!#Y7Gxz}stUIm<1;oBQ^Sh2X{F4ibaOOx;5ZGSNK z0maF^@(UtV$=p6DXLgRURwF95C=|U8?osGhgOED*b z7woJ_PWXBD>V-NjQAm{~T%sjyJ{5tn2f{G%?J!KRSrrGvQ1(^`YLA5B!~eycY(e5_ z*%aa{at13SxC(=7JT7$IQF~R3sy`Nn%EMv!$-8ZEAryB*yB1k&stni)=)8-ODo41g zkJu~roIgAih94tb=YsL%iH5@^b~kU9M-=aqgXIrbtxMpFy5mekFm#edF9z7RQ6V}R zBIhbXs~pMzt0VWy1Fi$^fh+1xxLDoK09&5&MJl(q#THjPm(0=z2H2Yfm^a&E)V+a5 zbi>08u;bJsDRUKR9(INSc7XyuWv(JsD+BB*0hS)FO&l&7MdViuur@-<-EHw>kHRGY zqoT}3fDv2-m{NhBG8X}+rgOEZ;amh*DqN?jEfQdqxdj08`Sr=C-KmT)qU1 z+9Cl)a1mgXxhQiHVB}l`m;-RpmKy?0*|yl?FXvJkFxuu!fKlcmz$kN(a}i*saM3nr z0!;a~_%Xqy24IxA2rz<+08=B-Q|2PT)O4;EaxP^6qixOv7-cRh?*T?zZU`{nIM-at zTKYWr9rJ=tppQ9I#Z#mLgINVB!pO-^FOcvFw6NhV0gztuO?g ztoA*C-52Q-Z-P#xB4HAY3KQVd%dz1S4PA3vHp0aa=zAO?FCt zC_GaTyVBg2F!bBr3U@Zy2iJgIAt>1sf$JWA9kh{;L+P*HfUBX1Zy{4MgNbDfBV_ly z!y#+753arsZUt@366jIC0klaC@ckuk!qu=pAyf7&QmiBUT^L1&tOHzsK)4n|pmrVT zs2($4=?s~VejTFHbFdDOwG;_58LkIj1Fh@{glkO#F1>a==ymJS$z;gdedT1zPx4Kj ztjS`y_C}%af-RtpehdQDt3a<=W5C4$)9W@QAse;WUry$WYmr51ml9lkeunUrE`-3e zmq1SgSOPNEE-Mf+AGJ$g0M;3@w!$Ej;hMh=v=I+Lpz^n%Pg^MgwyqOkNyu2c^of)C z1~ALor3}}+RiF*K4+4{(1%1j3pif1>sv0r^mTZ?5Jd-It!tfPfiG_p$AY*Vfak%FG z4z#;wLtw&E&?}w+eKG^=#jF7HQzr8rV0mY<1YAJ_uGz~$E13p?F^fPSzXSn$8UcI$ z8er9{5w5iv0qf8%70zV71T1IBB1N}R5Kp%NO0=5wJalZt8;xYp;b{1K) zHY>2wW-`Sl{=NpR%iu3(u6l&)rc%%cSA#aV7WCowfbFR4wcc{LQZv~o1u_`}EJA3>ki`?9CKYTA!rhO)if*zRdd}Kn zEPfYbhoVE~!FI_2YbC5qAj1kq;xP6%J8+?2PAs?`V3}nyFVD#sV3+uP`pi}{$l9U^ zSz}_M9f7RgnnRhaoIJgT8us!1aB&4!*vYF07Hp&}L zCRlop0oK4DL@ISz{2_BPlezc;xj2|I z23RlDNpi9LgTG_#(w%cMaS)%N`e>~1&a3<{Xy}>?WbF>OOLuO+j&hc^YohQ$4F&ze z+hwnro1puQjnKm;vFG~o>`kCeUIlkA-2tI?WBKCFLMBY=J{hpSsQ=PDtU$=duS_hq zHpymHt^uuV1q@uc4bFb{MdG*|VoW@15Osrqt2@8ll0qO=j*uOXn{M0UJX#SUztui9FN4)K3{9!y8PC-AHHvpVTU;x|-7P+taAtyglk#rjlH2 z5Gq8ik}BPaGiM{#Woyg;*&N9R2{J0V+WGB69cEtH7F?U~Kbi6ksi*`CFXsi931q7Y zGO82?whBhN%w1iDetv%~wM*Y;E^)@Vl?VDj-f*RX>{;o_=$fU!&KAXbuadYZ46Zbg z&6jMF=49$uL^73y;;N5jaHYv)BTyfh&`qVLYn?`o6BCA_z-0niZz=qPG!vonK3MW_ zo$V96zM!+kJRs{P-5-rQVse0VBH*n6A58)4uc&gfHMa{gIhV2fGf{st>E8sKyP-$8zp~wJX^A*@DI&-;8>gANXZj zU)R+Y)PB?=)a|Kj>8NXEu^S_h^7R`~Q&7*Kn!xyvzVv&^>?^iu;S~R2e-2fJx-oUb cX)(b1KSk$MOV07*qoM6N<$f&6$jw%VRuvdN2+38CZWny1cRtlsl+0_KtW)EU14Ei(F!UtWuj4IK+3{sK@>rh zs1Z;=(DD&U6+tlyL?UnHVN^&g6QhFi2#HS+*qz;(>63G(`|jRtW|nz$Pv7qTovP!^ zP_jES{mr@O-02w%!^a?^1ZP!_KmQiz0L~jZ=W@Qt`8wzOoclQsAS<5YdH;a(4bGLE zk8s}1If(PSIgVi!XE!5kA?~z*sobvNyohr;=Q_@h2@$6Flyej3J)D-6YfheRGl`HEcPk|~huT_2-U?PfL=4BPV)f1o!%rQ!NMt_MYw-5bUSwQ9Z&zC>u zOrl~UJglJNa%f50Ok}?WB{on`Ci`p^Y!xBA?m@rcJXLxtrE0FhRF3d*ir>yzO|BD$ z3V}HpFcCh6bTzY}Nt_(W%QYd3NG)jJ4<`F<1Od) zfQblTdC&h2lCz`>y?>|9o2CdvC8qZeIZt%jN;B7Hdn2l*k4M4MFEtq`q_#5?}c$b$pf_3y{Y!cRDafZBEj-*OD|gz#PBDeu3QoueOesLzB+O zxjf2wvf6Wwz>@AiOo2mO4=TkAV+g~%_n&R;)l#!cBxjuoD$aS-`IIJv7cdX%2{WT7 zOm%5rs(wqyPE^k5SIpUZ!&Lq4<~%{*>_Hu$2|~Xa;iX*tz8~G6O3uFOS?+)tWtdi| zV2b#;zRN!m@H&jd=!$7YY6_}|=!IU@=SjvGDFtL;aCtw06U;-v^0%k0FOyESt z1Wv$={b_H&8FiRV?MrzoHWd>%v6KTRU;-v^Miiz+@q`(BoT!+<37CKhoKb)|8!+RG z6BQFU^@fRW;s8!mOf2QViKQGk0TVER6EG1`#;Nm39Do^PoT!+<37AD!%oJe86(=et zZ~|sLzU>V-qYiU6V8$0GmU7_K8|Fd0B?+9Un1BhKAz#V~Fk^`mJtlCX#{^8^M8!me z8Yg;8-~>!e<-iG;h*0B1kBKm}hItVGY6WnjVpgnTTAC$rqQ^v)4KvOtpY|sIj@WYg zyw##ZZ5AC2IKNC;^hwg9BPk0wLStlmBr;E|$5GoAo$&Ui_;S9WY62n3)i49|T%C#i017z3J=$RF|KyZWnci*@lW4 z=AKhNN6+m`Q!V3Ye68|8y@%=am>YD0nG99M)NWc20%)gwO!96j7muR}Fr&54SxKP2 zP30S~lt=a*qDlbu3+Av57=9v&vr<6g0&`!8E2fq>I|EJGKs}t|{h7+KT@)LfIV-3K zK)r_fr2?}FFyn*MYoLC>oV-J~eavL2ho4a4^r{E-8m2hi>~hA?_vIG4a*KT;2eyl1 zh_hUvUJpNCFwBvRq5BI*srSle>c6%n`#VNsyC|MGa{(P&08p=C9+WUw9Hl<1o9T4M zdD=_C0F7#o8A_bRR?sFNmU0R6tW`ElnF8p53IdHo#S9(JoZCz}fHwJ6F<&?qrpVqE zte|m%89JQD+XwaPU#%#lVs-@-OL);|MdfINd6!XwP2h(eyafTUsoRkA%&@fe?9m@jw-v(yTTiV2(*fthQH9}SqmsRPVnwwbV$1E(_lkmo&S zF-truCU914_$jpqjr(>Ha4HkM4YMT>m~NosUu&UZ>zirfHo%N6PPs9^_o$WqPA0#5 z%tG>qFCL+b*0s?sZ;Sht0nE7Kl>OVXy=gjWxxK;OJ3yGd7-pZf7JYNcZo2*1SF`u6 zHJyRRxGw9mDlOiXqVMsNe#WX`fC`vrtjSQ%KmLcl(lC>ZOQzG^%iql2w-f_K@r?OE zwCICifM#L-HJyc7Gm>Ern?+Sk3&|Khmu4(~3qa$(m6Ub^U0E5RHq49za|XklN#?kP zl;EstdW?(_4D>kwjWy2f!LM)y?F94kyU3`W!6+AyId-89v}sXJpuic^NLL7GJItl~ zsiuB98AI-(#Mnm|=A-R6&2fwJ0JVSY#Q>&3$zFh|@;#%0qeF=j5Ajq@4i0tIIW z&}sk$&fGwoJpe&u-JeGLi^r?dO`m=y(QO{@h zQqAC7$rvz&5+mo3IqE?h=a~6m>%r5Quapvzq;{y~p zJpyXOBgD9VrW7@#p6l7O?o3feml(DtSL>D^R) zZUY%T2b0-vBAFN7VB;M88!~HuOXi4KcI6aRQ&h|XQ0A?m%j2=l1f0cGP}h(oVfJ`N zz#PpmFC*ieab)zJK<4?^k=g%OjPnkANzbAbmGZHoVRk*mTfm75s_cWVa`l*f$B@xu z5E*?&@seIo#*Y~1rBm!7sF9~~u6Wrj5oICUOuz}CS)jdNIznfzCA(stJ(7$c^e5wN z?lt>eYgbA!kvAR7zYSD&*r1$b|(@;9dcZ^67R0 zXAXJKa|5Sdmj!g578Nwt6d$sXuc&MWezA0Whd`94$h{{?1IwXP4)Tx4obDK%xoFZ_Z zjjHJ_P@R_e5blG@yEjnaJb`l;s%Lb2&=8$&Ct-fV`E^4CUs)=jTk!I}2d&n!f@)bm z@ z_4Dc86+3l2*p|~;o-Sb~oXb_RuLmoifDU^&Te$*FevycC0*nE3Xws8gsWp|Rj2>SM zns)qcYj?^2sd8?N!_w~4v+f-HCF|a$TNZDoNl$I1Uq87euoNgKb6&r26TNrfkUa@o zfdiFA@p{K&mH3b8i!lcoz)V{n8Q@g(vR4ns4r6w;K z>1~ecQR0-<^J|Ndg5fvVUM9g;lbu-){#ghGw(fg>L zh)T5Ljb%lWE;V9L!;Cqk>AV1(rULYF07ZBJbGb9qbSoLAd;in9{)95YqX$J43-dY7YU*k~vrM25 zxh5_IqO0LYZW%oxQ5HOzmk4x{atE*vipUk}sh88$b2tn?!ujEHn`tQLe&vo}nMb&{ zio`xzZ&GG6&ZyN3jnaQy#iVqXE9VT(3tWY$n-)uWDQ|tc{`?fq2F`oQ{;d3aWPg4Hp-(iE{ry>MIPWL> iW8Zci7-kcv6Uzs@r-FtIZ-&5|)J Q1PU{Fy85}Sb4q9e0B4a5jsO4v literal 0 HcmV?d00001 diff --git a/mih_ui/android/build/ios/SourcePackages/firebase_auth-6.5.4/example/ios/Runner/Assets.xcassets/LaunchImage.imageset/LaunchImage@2x.png b/mih_ui/android/build/ios/SourcePackages/firebase_auth-6.5.4/example/ios/Runner/Assets.xcassets/LaunchImage.imageset/LaunchImage@2x.png new file mode 100644 index 0000000000000000000000000000000000000000..9da19eacad3b03bb08bbddbbf4ac48dd78b3d838 GIT binary patch literal 68 zcmeAS@N?(olHy`uVBq!ia0vp^j3CUx0wlM}@Gt=>Zci7-kcv6Uzs@r-FtIZ-&5|)J Q1PU{Fy85}Sb4q9e0B4a5jsO4v literal 0 HcmV?d00001 diff --git a/mih_ui/android/build/ios/SourcePackages/firebase_auth-6.5.4/example/ios/Runner/Assets.xcassets/LaunchImage.imageset/LaunchImage@3x.png b/mih_ui/android/build/ios/SourcePackages/firebase_auth-6.5.4/example/ios/Runner/Assets.xcassets/LaunchImage.imageset/LaunchImage@3x.png new file mode 100644 index 0000000000000000000000000000000000000000..9da19eacad3b03bb08bbddbbf4ac48dd78b3d838 GIT binary patch literal 68 zcmeAS@N?(olHy`uVBq!ia0vp^j3CUx0wlM}@Gt=>Zci7-kcv6Uzs@r-FtIZ-&5|)J Q1PU{Fy85}Sb4q9e0B4a5jsO4v literal 0 HcmV?d00001 diff --git a/mih_ui/android/build/ios/SourcePackages/firebase_auth-6.5.4/example/ios/Runner/Assets.xcassets/LaunchImage.imageset/README.md b/mih_ui/android/build/ios/SourcePackages/firebase_auth-6.5.4/example/ios/Runner/Assets.xcassets/LaunchImage.imageset/README.md new file mode 100644 index 00000000..89c2725b --- /dev/null +++ b/mih_ui/android/build/ios/SourcePackages/firebase_auth-6.5.4/example/ios/Runner/Assets.xcassets/LaunchImage.imageset/README.md @@ -0,0 +1,5 @@ +# Launch Screen Assets + +You can customize the launch screen with your own desired assets by replacing the image files in this directory. + +You can also do it by opening your Flutter project's Xcode project with `open ios/Runner.xcworkspace`, selecting `Runner/Assets.xcassets` in the Project Navigator and dropping in the desired images. \ No newline at end of file diff --git a/mih_ui/android/build/ios/SourcePackages/firebase_auth-6.5.4/example/ios/Runner/Base.lproj/LaunchScreen.storyboard b/mih_ui/android/build/ios/SourcePackages/firebase_auth-6.5.4/example/ios/Runner/Base.lproj/LaunchScreen.storyboard new file mode 100644 index 00000000..f2e259c7 --- /dev/null +++ b/mih_ui/android/build/ios/SourcePackages/firebase_auth-6.5.4/example/ios/Runner/Base.lproj/LaunchScreen.storyboard @@ -0,0 +1,37 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/mih_ui/android/build/ios/SourcePackages/firebase_auth-6.5.4/example/ios/Runner/Base.lproj/Main.storyboard b/mih_ui/android/build/ios/SourcePackages/firebase_auth-6.5.4/example/ios/Runner/Base.lproj/Main.storyboard new file mode 100644 index 00000000..f3c28516 --- /dev/null +++ b/mih_ui/android/build/ios/SourcePackages/firebase_auth-6.5.4/example/ios/Runner/Base.lproj/Main.storyboard @@ -0,0 +1,26 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/mih_ui/android/build/ios/SourcePackages/firebase_auth-6.5.4/example/ios/Runner/GoogleService-Info.plist b/mih_ui/android/build/ios/SourcePackages/firebase_auth-6.5.4/example/ios/Runner/GoogleService-Info.plist new file mode 100644 index 00000000..f325ead9 --- /dev/null +++ b/mih_ui/android/build/ios/SourcePackages/firebase_auth-6.5.4/example/ios/Runner/GoogleService-Info.plist @@ -0,0 +1,38 @@ + + + + + CLIENT_ID + 406099696497-134k3722m01rtrsklhf3b7k8sqa5r7in.apps.googleusercontent.com + REVERSED_CLIENT_ID + com.googleusercontent.apps.406099696497-134k3722m01rtrsklhf3b7k8sqa5r7in + ANDROID_CLIENT_ID + 406099696497-17qn06u8a0dc717u8ul7s49ampk13lul.apps.googleusercontent.com + API_KEY + AIzaSyDooSUGSf63Ghq02_iIhtnmwMDs4HlWS6c + GCM_SENDER_ID + 406099696497 + PLIST_VERSION + 1 + BUNDLE_ID + io.flutter.plugins.firebase.auth.example + PROJECT_ID + flutterfire-e2e-tests + STORAGE_BUCKET + flutterfire-e2e-tests.appspot.com + IS_ADS_ENABLED + + IS_ANALYTICS_ENABLED + + IS_APPINVITE_ENABLED + + IS_GCM_ENABLED + + IS_SIGNIN_ENABLED + + GOOGLE_APP_ID + 1:406099696497:ios:58cbc26aca8e5cf83574d0 + DATABASE_URL + https://flutterfire-e2e-tests-default-rtdb.europe-west1.firebasedatabase.app + + \ No newline at end of file diff --git a/mih_ui/android/build/ios/SourcePackages/firebase_auth-6.5.4/example/ios/Runner/Info.plist b/mih_ui/android/build/ios/SourcePackages/firebase_auth-6.5.4/example/ios/Runner/Info.plist new file mode 100644 index 00000000..e1ffa4fe --- /dev/null +++ b/mih_ui/android/build/ios/SourcePackages/firebase_auth-6.5.4/example/ios/Runner/Info.plist @@ -0,0 +1,98 @@ + + + + + CADisableMinimumFrameDurationOnPhone + + CFBundleDevelopmentRegion + $(DEVELOPMENT_LANGUAGE) + CFBundleDisplayName + Firebase Auth Example + CFBundleExecutable + $(EXECUTABLE_NAME) + CFBundleIdentifier + $(PRODUCT_BUNDLE_IDENTIFIER) + CFBundleInfoDictionaryVersion + 6.0 + CFBundleName + firebase_auth_example + CFBundlePackageType + APPL + CFBundleShortVersionString + $(FLUTTER_BUILD_NAME) + CFBundleSignature + ???? + FacebookAppID + 128693022464535 + + FacebookClientToken + 16dbbdf0cfb309034a6ad98ac2a21688 + CFBundleURLTypes + + + CFBundleTypeRole + Editor + CFBundleURLSchemes + + com.googleusercontent.apps.406099696497-134k3722m01rtrsklhf3b7k8sqa5r7in + fb128693022464535 + + + + CFBundleVersion + $(FLUTTER_BUILD_NUMBER) + LSRequiresIPhoneOS + + NSAppTransportSecurity + + NSAllowsArbitraryLoads + + + UILaunchStoryboardName + LaunchScreen + UIMainStoryboardFile + Main + UIRequiredDeviceCapabilities + + arm64 + + UISupportedInterfaceOrientations + + UIInterfaceOrientationPortrait + UIInterfaceOrientationLandscapeLeft + UIInterfaceOrientationLandscapeRight + + UISupportedInterfaceOrientations~ipad + + UIInterfaceOrientationPortrait + UIInterfaceOrientationPortraitUpsideDown + UIInterfaceOrientationLandscapeLeft + UIInterfaceOrientationLandscapeRight + + UIViewControllerBasedStatusBarAppearance + + UIApplicationSupportsIndirectInputEvents + + UIApplicationSceneManifest + + UIApplicationSupportsMultipleScenes + + UISceneConfigurations + + UIWindowSceneSessionRoleApplication + + + UISceneClassName + UIWindowScene + UISceneDelegateClassName + FlutterSceneDelegate + UISceneConfigurationName + flutter + UISceneStoryboardFile + Main + + + + + + diff --git a/mih_ui/android/build/ios/SourcePackages/firebase_auth-6.5.4/example/ios/Runner/Runner-Bridging-Header.h b/mih_ui/android/build/ios/SourcePackages/firebase_auth-6.5.4/example/ios/Runner/Runner-Bridging-Header.h new file mode 100644 index 00000000..308a2a56 --- /dev/null +++ b/mih_ui/android/build/ios/SourcePackages/firebase_auth-6.5.4/example/ios/Runner/Runner-Bridging-Header.h @@ -0,0 +1 @@ +#import "GeneratedPluginRegistrant.h" diff --git a/mih_ui/android/build/ios/SourcePackages/firebase_auth-6.5.4/example/ios/Runner/Runner.entitlements b/mih_ui/android/build/ios/SourcePackages/firebase_auth-6.5.4/example/ios/Runner/Runner.entitlements new file mode 100644 index 00000000..16c5d9e0 --- /dev/null +++ b/mih_ui/android/build/ios/SourcePackages/firebase_auth-6.5.4/example/ios/Runner/Runner.entitlements @@ -0,0 +1,14 @@ + + + + + aps-environment + development + com.apple.developer.applesignin + + Default + + com.apple.developer.game-center + + + diff --git a/mih_ui/android/build/ios/SourcePackages/firebase_auth-6.5.4/example/ios/Runner/main.m b/mih_ui/android/build/ios/SourcePackages/firebase_auth-6.5.4/example/ios/Runner/main.m new file mode 100644 index 00000000..dff6597e --- /dev/null +++ b/mih_ui/android/build/ios/SourcePackages/firebase_auth-6.5.4/example/ios/Runner/main.m @@ -0,0 +1,9 @@ +#import +#import +#import "AppDelegate.h" + +int main(int argc, char* argv[]) { + @autoreleasepool { + return UIApplicationMain(argc, argv, nil, NSStringFromClass([AppDelegate class])); + } +} diff --git a/mih_ui/android/build/ios/SourcePackages/firebase_auth-6.5.4/example/ios/firebase_app_id_file.json b/mih_ui/android/build/ios/SourcePackages/firebase_auth-6.5.4/example/ios/firebase_app_id_file.json new file mode 100644 index 00000000..eaca8edd --- /dev/null +++ b/mih_ui/android/build/ios/SourcePackages/firebase_auth-6.5.4/example/ios/firebase_app_id_file.json @@ -0,0 +1,7 @@ +{ + "file_generated_by": "FlutterFire CLI", + "purpose": "FirebaseAppID & ProjectID for this Firebase app in this directory", + "GOOGLE_APP_ID": "1:406099696497:ios:58cbc26aca8e5cf83574d0", + "FIREBASE_PROJECT_ID": "flutterfire-e2e-tests", + "GCM_SENDER_ID": "406099696497" +} \ No newline at end of file diff --git a/mih_ui/android/build/ios/SourcePackages/firebase_auth-6.5.4/example/lib/auth.dart b/mih_ui/android/build/ios/SourcePackages/firebase_auth-6.5.4/example/lib/auth.dart new file mode 100644 index 00000000..b78c948e --- /dev/null +++ b/mih_ui/android/build/ios/SourcePackages/firebase_auth-6.5.4/example/lib/auth.dart @@ -0,0 +1,748 @@ +// Copyright 2022, the Chromium project authors. Please see the AUTHORS file +// for details. All rights reserved. Use of this source code is governed by a +// BSD-style license that can be found in the LICENSE file. + +import 'dart:io'; + +import 'package:barcode_widget/barcode_widget.dart'; +import 'package:collection/collection.dart'; +import 'package:firebase_auth/firebase_auth.dart'; +import 'package:firebase_auth_example/main.dart'; +import 'package:firebase_messaging/firebase_messaging.dart'; +import 'package:flutter/foundation.dart'; +import 'package:flutter/gestures.dart'; +import 'package:flutter/material.dart'; +import 'package:flutter_facebook_auth/flutter_facebook_auth.dart'; +import 'package:flutter_signin_button/flutter_signin_button.dart'; +import 'package:google_sign_in/google_sign_in.dart'; + +typedef OAuthSignIn = void Function(); + +// If set to true, the app will request notification permissions to use +// silent verification for SMS MFA instead of Recaptcha. +const withSilentVerificationSMSMFA = true; + +/// Helper class to show a snackbar using the passed context. +class ScaffoldSnackbar { + // ignore: public_member_api_docs + ScaffoldSnackbar(this._context); + + /// The scaffold of current context. + factory ScaffoldSnackbar.of(BuildContext context) { + return ScaffoldSnackbar(context); + } + + final BuildContext _context; + + /// Helper method to show a SnackBar. + void show(String message) { + ScaffoldMessenger.of(_context) + ..hideCurrentSnackBar() + ..showSnackBar( + SnackBar( + content: Text(message), + behavior: SnackBarBehavior.floating, + ), + ); + } +} + +/// The mode of the current auth session, either [AuthMode.login] or [AuthMode.register]. +// ignore: public_member_api_docs +enum AuthMode { login, register, phone } + +extension on AuthMode { + String get label => this == AuthMode.login + ? 'Sign in' + : this == AuthMode.phone + ? 'Sign in' + : 'Register'; +} + +/// Entrypoint example for various sign-in flows with Firebase. +class AuthGate extends StatefulWidget { + // ignore: public_member_api_docs + const AuthGate({Key? key}) : super(key: key); + static String? appleAuthorizationCode; + @override + State createState() => _AuthGateState(); +} + +class _AuthGateState extends State { + TextEditingController emailController = TextEditingController(); + TextEditingController passwordController = TextEditingController(); + TextEditingController phoneController = TextEditingController(); + + GlobalKey formKey = GlobalKey(); + String error = ''; + String verificationId = ''; + + AuthMode mode = AuthMode.login; + + bool isLoading = false; + + void setIsLoading() { + setState(() { + isLoading = !isLoading; + }); + } + + late Map authButtons; + + @override + void initState() { + super.initState(); + + if (withSilentVerificationSMSMFA && !kIsWeb) { + FirebaseMessaging messaging = FirebaseMessaging.instance; + messaging.requestPermission(); + } + + if (!kIsWeb && Platform.isMacOS) { + authButtons = { + Buttons.Apple: () => _handleMultiFactorException( + _signInWithApple, + ), + }; + } else { + authButtons = { + Buttons.Apple: () => _handleMultiFactorException( + _signInWithApple, + ), + Buttons.Google: () => _handleMultiFactorException( + _signInWithGoogle, + ), + Buttons.GitHub: () => _handleMultiFactorException( + _signInWithGitHub, + ), + Buttons.Microsoft: () => _handleMultiFactorException( + _signInWithMicrosoft, + ), + Buttons.Twitter: () => _handleMultiFactorException( + _signInWithTwitter, + ), + Buttons.Yahoo: () => _handleMultiFactorException( + _signInWithYahoo, + ), + Buttons.Facebook: () => _handleMultiFactorException( + _signInWithFacebook, + ), + }; + } + } + + @override + Widget build(BuildContext context) { + return GestureDetector( + onTap: FocusScope.of(context).unfocus, + child: Scaffold( + body: Center( + child: SingleChildScrollView( + child: Center( + child: Padding( + padding: const EdgeInsets.symmetric(horizontal: 20), + child: SafeArea( + child: Form( + key: formKey, + autovalidateMode: AutovalidateMode.onUserInteraction, + child: ConstrainedBox( + constraints: const BoxConstraints(maxWidth: 400), + child: Column( + mainAxisAlignment: MainAxisAlignment.center, + children: [ + Visibility( + visible: error.isNotEmpty, + child: MaterialBanner( + backgroundColor: + Theme.of(context).colorScheme.error, + content: SelectableText(error), + actions: [ + TextButton( + onPressed: () { + setState(() { + error = ''; + }); + }, + child: const Text( + 'dismiss', + style: TextStyle(color: Colors.white), + ), + ), + ], + contentTextStyle: + const TextStyle(color: Colors.white), + padding: const EdgeInsets.all(10), + ), + ), + const SizedBox(height: 20), + if (mode != AuthMode.phone) + Column( + children: [ + TextFormField( + controller: emailController, + decoration: const InputDecoration( + hintText: 'Email', + border: OutlineInputBorder(), + ), + keyboardType: TextInputType.emailAddress, + autofillHints: const [AutofillHints.email], + validator: (value) => + value != null && value.isNotEmpty + ? null + : 'Required', + ), + const SizedBox(height: 20), + TextFormField( + controller: passwordController, + obscureText: true, + decoration: const InputDecoration( + hintText: 'Password', + border: OutlineInputBorder(), + ), + validator: (value) => + value != null && value.isNotEmpty + ? null + : 'Required', + ), + ], + ), + if (mode == AuthMode.phone) + TextFormField( + controller: phoneController, + decoration: const InputDecoration( + hintText: '+12345678910', + labelText: 'Phone number', + border: OutlineInputBorder(), + ), + validator: (value) => + value != null && value.isNotEmpty + ? null + : 'Required', + ), + const SizedBox(height: 20), + SizedBox( + width: double.infinity, + height: 50, + child: ElevatedButton( + onPressed: isLoading + ? null + : () => _handleMultiFactorException( + _emailAndPassword, + ), + child: isLoading + ? const CircularProgressIndicator.adaptive() + : Text(mode.label), + ), + ), + TextButton( + onPressed: _resetPassword, + child: const Text('Forgot password?'), + ), + ...authButtons.keys + .map( + (button) => Padding( + padding: + const EdgeInsets.symmetric(vertical: 5), + child: AnimatedSwitcher( + duration: const Duration(milliseconds: 200), + child: isLoading + ? Container( + color: Colors.grey[200], + height: 50, + width: double.infinity, + ) + : SizedBox( + width: double.infinity, + height: 50, + child: SignInButton( + button, + onPressed: authButtons[button], + ), + ), + ), + ), + ) + .toList(), + SizedBox( + width: double.infinity, + height: 50, + child: OutlinedButton( + onPressed: isLoading + ? null + : () { + if (mode != AuthMode.phone) { + setState(() { + mode = AuthMode.phone; + }); + } else { + setState(() { + mode = AuthMode.login; + }); + } + }, + child: isLoading + ? const CircularProgressIndicator.adaptive() + : Text( + mode != AuthMode.phone + ? 'Sign in with Phone Number' + : 'Sign in with Email and Password', + ), + ), + ), + const SizedBox(height: 20), + if (mode != AuthMode.phone) + RichText( + text: TextSpan( + style: Theme.of(context).textTheme.bodyLarge, + children: [ + TextSpan( + text: mode == AuthMode.login + ? "Don't have an account? " + : 'You have an account? ', + ), + TextSpan( + text: mode == AuthMode.login + ? 'Register now' + : 'Click to login', + style: const TextStyle(color: Colors.blue), + recognizer: TapGestureRecognizer() + ..onTap = () { + setState(() { + mode = mode == AuthMode.login + ? AuthMode.register + : AuthMode.login; + }); + }, + ), + ], + ), + ), + const SizedBox(height: 10), + RichText( + text: TextSpan( + style: Theme.of(context).textTheme.bodyLarge, + children: [ + const TextSpan(text: 'Or '), + TextSpan( + text: 'continue as guest', + style: const TextStyle(color: Colors.blue), + recognizer: TapGestureRecognizer() + ..onTap = _anonymousAuth, + ), + ], + ), + ), + ], + ), + ), + ), + ), + ), + ), + ), + ), + ), + ); + } + + Future _resetPassword() async { + String? email; + await showDialog( + context: context, + builder: (context) { + return AlertDialog( + actions: [ + TextButton( + onPressed: () { + Navigator.of(context).pop(); + }, + child: const Text('Send'), + ), + ], + content: Column( + crossAxisAlignment: CrossAxisAlignment.start, + mainAxisSize: MainAxisSize.min, + children: [ + const Text('Enter your email'), + const SizedBox(height: 20), + TextFormField( + onChanged: (value) { + email = value; + }, + ), + ], + ), + ); + }, + ); + + if (email != null) { + try { + await auth.sendPasswordResetEmail(email: email!); + ScaffoldSnackbar.of(context).show('Password reset email is sent'); + } catch (e) { + ScaffoldSnackbar.of(context).show('Error resetting'); + } + } + } + + Future _anonymousAuth() async { + setIsLoading(); + + try { + await auth.signInAnonymously(); + } on FirebaseAuthException catch (e) { + setState(() { + error = '${e.message}'; + }); + } catch (e) { + setState(() { + error = '$e'; + }); + } finally { + setIsLoading(); + } + } + + Future _handleMultiFactorException( + Future Function() authFunction, + ) async { + setIsLoading(); + try { + await authFunction(); + } on FirebaseAuthMultiFactorException catch (e) { + setState(() { + error = '${e.message}'; + }); + final firstTotpHint = e.resolver.hints + .firstWhereOrNull((element) => element is TotpMultiFactorInfo); + if (firstTotpHint != null) { + final code = await getSmsCodeFromUser(context); + final assertion = await TotpMultiFactorGenerator.getAssertionForSignIn( + firstTotpHint.uid, + code!, + ); + await e.resolver.resolveSignIn(assertion); + return; + } + + final firstPhoneHint = e.resolver.hints + .firstWhereOrNull((element) => element is PhoneMultiFactorInfo); + + if (firstPhoneHint is! PhoneMultiFactorInfo) { + return; + } + await auth.verifyPhoneNumber( + multiFactorSession: e.resolver.session, + multiFactorInfo: firstPhoneHint, + verificationCompleted: (_) {}, + verificationFailed: print, + codeSent: (String verificationId, int? resendToken) async { + final smsCode = await getSmsCodeFromUser(context); + + if (smsCode != null) { + // Create a PhoneAuthCredential with the code + final credential = PhoneAuthProvider.credential( + verificationId: verificationId, + smsCode: smsCode, + ); + + try { + await e.resolver.resolveSignIn( + PhoneMultiFactorGenerator.getAssertion( + credential, + ), + ); + } on FirebaseAuthException catch (e) { + print(e.message); + } + } + }, + codeAutoRetrievalTimeout: print, + ); + } on FirebaseAuthException catch (e) { + setState(() { + error = '${e.message}'; + }); + } catch (e) { + setState(() { + error = '$e'; + }); + } + setIsLoading(); + } + + Future _emailAndPassword() async { + if (formKey.currentState?.validate() ?? false) { + if (mode == AuthMode.login) { + await auth.signInWithEmailAndPassword( + email: emailController.text, + password: passwordController.text, + ); + } else if (mode == AuthMode.register) { + await auth.createUserWithEmailAndPassword( + email: emailController.text, + password: passwordController.text, + ); + } else { + await _phoneAuth(); + } + } + } + + Future _phoneAuth() async { + if (mode != AuthMode.phone) { + setState(() { + mode = AuthMode.phone; + }); + } else { + if (kIsWeb) { + final confirmationResult = + await auth.signInWithPhoneNumber(phoneController.text); + final smsCode = await getSmsCodeFromUser(context); + + if (smsCode != null) { + await confirmationResult.confirm(smsCode); + } + } else { + await auth.verifyPhoneNumber( + phoneNumber: phoneController.text, + verificationCompleted: (_) {}, + verificationFailed: (e) { + setState(() { + error = '${e.message}'; + }); + }, + codeSent: (String verificationId, int? resendToken) async { + final smsCode = await getSmsCodeFromUser(context); + + if (smsCode != null) { + // Create a PhoneAuthCredential with the code + final credential = PhoneAuthProvider.credential( + verificationId: verificationId, + smsCode: smsCode, + ); + + try { + // Sign the user in (or link) with the credential + await auth.signInWithCredential(credential); + } on FirebaseAuthException catch (e) { + setState(() { + error = e.message ?? ''; + }); + } + } + }, + codeAutoRetrievalTimeout: (e) { + setState(() { + error = e; + }); + }, + ); + } + } + } + + Future _signInWithGoogle() async { + // Trigger the authentication flow + final googleUser = await GoogleSignIn().signIn(); + + // Obtain the auth details from the request + final googleAuth = await googleUser?.authentication; + + if (googleAuth != null) { + // Create a new credential + final credential = GoogleAuthProvider.credential( + accessToken: googleAuth.accessToken, + idToken: googleAuth.idToken, + ); + + // Once signed in, return the UserCredential + await auth.signInWithCredential(credential); + } + } + + Future _signInWithFacebook() async { + // Trigger the authentication flow + // by default we request the email and the public profile + final LoginResult result = await FacebookAuth.instance.login(); + + if (result.status == LoginStatus.success) { + // Get access token + final AccessToken accessToken = result.accessToken!; + + // Login with token + await auth.signInWithCredential( + FacebookAuthProvider.credential(accessToken.tokenString), + ); + } else { + print('Facebook login did not succeed'); + print(result.status); + print(result.message); + } + } +} + +Future _signInWithTwitter() async { + TwitterAuthProvider twitterProvider = TwitterAuthProvider(); + + if (kIsWeb) { + await auth.signInWithPopup(twitterProvider); + } else { + await auth.signInWithProvider(twitterProvider); + } +} + +Future _signInWithApple() async { + final appleProvider = AppleAuthProvider(); + appleProvider.addScope('email'); + + if (kIsWeb) { + // Once signed in, return the UserCredential + await auth.signInWithPopup(appleProvider); + } else { + final userCred = await auth.signInWithProvider(appleProvider); + AuthGate.appleAuthorizationCode = + userCred.additionalUserInfo?.authorizationCode; + } +} + +Future _signInWithYahoo() async { + final yahooProvider = YahooAuthProvider(); + + if (kIsWeb) { + // Once signed in, return the UserCredential + await auth.signInWithPopup(yahooProvider); + } else { + await auth.signInWithProvider(yahooProvider); + } +} + +Future _signInWithGitHub() async { + final githubProvider = GithubAuthProvider(); + + if (kIsWeb) { + await auth.signInWithPopup(githubProvider); + } else { + await auth.signInWithProvider(githubProvider); + } +} + +Future _signInWithMicrosoft() async { + final microsoftProvider = MicrosoftAuthProvider(); + + if (kIsWeb) { + await auth.signInWithPopup(microsoftProvider); + } else { + await auth.signInWithProvider(microsoftProvider); + } +} + +Future getSmsCodeFromUser(BuildContext context) async { + String? smsCode; + + // Update the UI - wait for the user to enter the SMS code + await showDialog( + context: context, + barrierDismissible: false, + builder: (context) { + return AlertDialog( + title: const Text('SMS code:'), + actions: [ + ElevatedButton( + onPressed: () { + Navigator.of(context).pop(); + }, + child: const Text('Sign in'), + ), + OutlinedButton( + onPressed: () { + smsCode = null; + Navigator.of(context).pop(); + }, + child: const Text('Cancel'), + ), + ], + content: Container( + padding: const EdgeInsets.all(20), + child: TextField( + onChanged: (value) { + smsCode = value; + }, + textAlign: TextAlign.center, + autofocus: true, + ), + ), + ); + }, + ); + + return smsCode; +} + +Future getTotpFromUser( + BuildContext context, + TotpSecret totpSecret, +) async { + String? smsCode; + + final qrCodeUrl = await totpSecret.generateQrCodeUrl( + accountName: FirebaseAuth.instance.currentUser!.email, + issuer: 'Firebase', + ); + + // Update the UI - wait for the user to enter the SMS code + await showDialog( + context: context, + barrierDismissible: false, + builder: (context) { + return AlertDialog( + title: const Text('TOTP code:'), + content: Container( + padding: const EdgeInsets.all(20), + child: Column( + mainAxisSize: MainAxisSize.min, + children: [ + BarcodeWidget( + barcode: Barcode.qrCode(), + data: qrCodeUrl, + width: 150, + height: 150, + ), + TextField( + onChanged: (value) { + smsCode = value; + }, + textAlign: TextAlign.center, + autofocus: true, + ), + ElevatedButton( + onPressed: () { + totpSecret.openInOtpApp(qrCodeUrl); + }, + child: const Text('Open in OTP App'), + ), + ], + ), + ), + actions: [ + ElevatedButton( + onPressed: () { + Navigator.of(context).pop(); + }, + child: const Text('Sign in'), + ), + OutlinedButton( + onPressed: () { + smsCode = null; + Navigator.of(context).pop(); + }, + child: const Text('Cancel'), + ), + ], + ); + }, + ); + + return smsCode; +} diff --git a/mih_ui/android/build/ios/SourcePackages/firebase_auth-6.5.4/example/lib/firebase_options.dart b/mih_ui/android/build/ios/SourcePackages/firebase_auth-6.5.4/example/lib/firebase_options.dart new file mode 100644 index 00000000..ba1a88dc --- /dev/null +++ b/mih_ui/android/build/ios/SourcePackages/firebase_auth-6.5.4/example/lib/firebase_options.dart @@ -0,0 +1,98 @@ +// Copyright 2022, the Chromium project authors. Please see the AUTHORS file +// for details. All rights reserved. Use of this source code is governed by a +// BSD-style license that can be found in the LICENSE file. + +// File generated by FlutterFire CLI. +// ignore_for_file: lines_longer_than_80_chars, avoid_classes_with_only_static_members +import 'package:firebase_core/firebase_core.dart' show FirebaseOptions; +import 'package:flutter/foundation.dart' + show defaultTargetPlatform, kIsWeb, TargetPlatform; + +/// Default [FirebaseOptions] for use with your Firebase apps. +/// +/// Example: +/// ```dart +/// import 'firebase_options.dart'; +/// // ... +/// await Firebase.initializeApp( +/// options: DefaultFirebaseOptions.currentPlatform, +/// ); +/// ``` +class DefaultFirebaseOptions { + static FirebaseOptions get currentPlatform { + if (kIsWeb) { + return web; + } + switch (defaultTargetPlatform) { + case TargetPlatform.android: + return android; + case TargetPlatform.iOS: + return ios; + case TargetPlatform.macOS: + return macos; + case TargetPlatform.windows: + return macos; + case TargetPlatform.linux: + throw UnsupportedError( + 'DefaultFirebaseOptions have not been configured for linux - ' + 'you can reconfigure this by running the FlutterFire CLI again.', + ); + default: + throw UnsupportedError( + 'DefaultFirebaseOptions are not supported for this platform.', + ); + } + } + + static const FirebaseOptions web = FirebaseOptions( + apiKey: 'AIzaSyB7wZb2tO1-Fs6GbDADUSTs2Qs3w08Hovw', + appId: '1:406099696497:web:87e25e51afe982cd3574d0', + messagingSenderId: '406099696497', + projectId: 'flutterfire-e2e-tests', + authDomain: 'flutterfire-e2e-tests.firebaseapp.com', + databaseURL: + 'https://flutterfire-e2e-tests-default-rtdb.europe-west1.firebasedatabase.app', + storageBucket: 'flutterfire-e2e-tests.appspot.com', + measurementId: 'G-JN95N1JV2E', + ); + + static const FirebaseOptions android = FirebaseOptions( + apiKey: 'AIzaSyCdRjCVZlhrq72RuEklEyyxYlBRCYhI2Sw', + appId: '1:406099696497:android:21d5142deea38dda3574d0', + messagingSenderId: '406099696497', + projectId: 'flutterfire-e2e-tests', + databaseURL: + 'https://flutterfire-e2e-tests-default-rtdb.europe-west1.firebasedatabase.app', + storageBucket: 'flutterfire-e2e-tests.appspot.com', + ); + + static const FirebaseOptions ios = FirebaseOptions( + apiKey: 'AIzaSyDooSUGSf63Ghq02_iIhtnmwMDs4HlWS6c', + appId: '1:406099696497:ios:58cbc26aca8e5cf83574d0', + messagingSenderId: '406099696497', + projectId: 'flutterfire-e2e-tests', + databaseURL: + 'https://flutterfire-e2e-tests-default-rtdb.europe-west1.firebasedatabase.app', + storageBucket: 'flutterfire-e2e-tests.appspot.com', + androidClientId: + '406099696497-17qn06u8a0dc717u8ul7s49ampk13lul.apps.googleusercontent.com', + iosClientId: + '406099696497-134k3722m01rtrsklhf3b7k8sqa5r7in.apps.googleusercontent.com', + iosBundleId: 'io.flutter.plugins.firebase.auth.example', + ); + + static const FirebaseOptions macos = FirebaseOptions( + apiKey: 'AIzaSyDooSUGSf63Ghq02_iIhtnmwMDs4HlWS6c', + appId: '1:406099696497:ios:58cbc26aca8e5cf83574d0', + messagingSenderId: '406099696497', + projectId: 'flutterfire-e2e-tests', + databaseURL: + 'https://flutterfire-e2e-tests-default-rtdb.europe-west1.firebasedatabase.app', + storageBucket: 'flutterfire-e2e-tests.appspot.com', + androidClientId: + '406099696497-17qn06u8a0dc717u8ul7s49ampk13lul.apps.googleusercontent.com', + iosClientId: + '406099696497-134k3722m01rtrsklhf3b7k8sqa5r7in.apps.googleusercontent.com', + iosBundleId: 'io.flutter.plugins.firebase.auth.example', + ); +} diff --git a/mih_ui/android/build/ios/SourcePackages/firebase_auth-6.5.4/example/lib/main.dart b/mih_ui/android/build/ios/SourcePackages/firebase_auth-6.5.4/example/lib/main.dart new file mode 100755 index 00000000..630c282d --- /dev/null +++ b/mih_ui/android/build/ios/SourcePackages/firebase_auth-6.5.4/example/lib/main.dart @@ -0,0 +1,108 @@ +// Copyright 2022, the Chromium project authors. Please see the AUTHORS file +// for details. All rights reserved. Use of this source code is governed by a +// BSD-style license that can be found in the LICENSE file. + +import 'dart:io'; + +import 'package:firebase_auth/firebase_auth.dart'; +import 'package:firebase_core/firebase_core.dart'; +import 'package:flutter/foundation.dart'; +import 'package:flutter/material.dart'; +import 'package:google_sign_in_dartio/google_sign_in_dartio.dart'; + +import 'auth.dart'; +import 'firebase_options.dart'; +import 'profile.dart'; + +/// Requires that a Firebase local emulator is running locally. +/// See https://firebase.google.com/docs/auth/flutter/start#optional_prototype_and_test_with_firebase_local_emulator_suite +bool shouldUseFirebaseEmulator = false; + +late final FirebaseApp app; +late final FirebaseAuth auth; + +// Requires that the Firebase Auth emulator is running locally +// e.g via `melos run firebase:emulator`. +Future main() async { + WidgetsFlutterBinding.ensureInitialized(); + // We're using the manual installation on non-web platforms since Google sign in plugin doesn't yet support Dart initialization. + // See related issue: https://github.com/flutter/flutter/issues/96391 + + // We store the app and auth to make testing with a named instance easier. + app = await Firebase.initializeApp( + options: DefaultFirebaseOptions.currentPlatform, + ); + auth = FirebaseAuth.instanceFor(app: app); + + if (shouldUseFirebaseEmulator) { + await auth.useAuthEmulator('localhost', 9099); + } + + if (!kIsWeb && Platform.isWindows) { + await GoogleSignInDart.register( + clientId: + '406099696497-g5o9l0blii9970bgmfcfv14pioj90djd.apps.googleusercontent.com', + ); + } + + runApp(const AuthExampleApp()); +} + +/// The entry point of the application. +/// +/// Returns a [MaterialApp]. +class AuthExampleApp extends StatelessWidget { + const AuthExampleApp({Key? key}) : super(key: key); + + @override + Widget build(BuildContext context) { + return MaterialApp( + title: 'Firebase Example App', + theme: ThemeData(primarySwatch: Colors.amber), + home: Scaffold( + body: LayoutBuilder( + builder: (context, constraints) { + return Row( + children: [ + Visibility( + visible: constraints.maxWidth >= 1200, + child: Expanded( + child: Container( + height: double.infinity, + color: Theme.of(context).colorScheme.primary, + child: Center( + child: Column( + mainAxisAlignment: MainAxisAlignment.center, + children: [ + Text( + 'Firebase Auth Desktop', + style: Theme.of(context).textTheme.headlineMedium, + ), + ], + ), + ), + ), + ), + ), + SizedBox( + width: constraints.maxWidth >= 1200 + ? constraints.maxWidth / 2 + : constraints.maxWidth, + child: StreamBuilder( + stream: auth.authStateChanges(), + builder: (context, snapshot) { + if (snapshot.hasData) { + return const ProfilePage(); + } + return const AuthGate(); + }, + ), + ), + ], + ); + }, + ), + ), + ); + } +} diff --git a/mih_ui/android/build/ios/SourcePackages/firebase_auth-6.5.4/example/lib/profile.dart b/mih_ui/android/build/ios/SourcePackages/firebase_auth-6.5.4/example/lib/profile.dart new file mode 100644 index 00000000..3ccbf5db --- /dev/null +++ b/mih_ui/android/build/ios/SourcePackages/firebase_auth-6.5.4/example/lib/profile.dart @@ -0,0 +1,391 @@ +// Copyright 2022, the Chromium project authors. Please see the AUTHORS file +// for details. All rights reserved. Use of this source code is governed by a +// BSD-style license that can be found in the LICENSE file. + +import 'dart:developer'; + +import 'package:collection/collection.dart'; +import 'package:firebase_auth/firebase_auth.dart'; +import 'package:firebase_auth_example/main.dart'; +import 'package:flutter/material.dart'; +import 'package:google_sign_in/google_sign_in.dart'; + +import 'auth.dart'; + +/// Displayed as a profile image if the user doesn't have one. +const placeholderImage = + 'https://upload.wikimedia.org/wikipedia/commons/c/cd/Portrait_Placeholder_Square.png'; + +/// Profile page shows after sign in or registration. +class ProfilePage extends StatefulWidget { + // ignore: public_member_api_docs + const ProfilePage({Key? key}) : super(key: key); + + @override + // ignore: library_private_types_in_public_api + _ProfilePageState createState() => _ProfilePageState(); +} + +class _ProfilePageState extends State { + late User user; + late TextEditingController controller; + final phoneController = TextEditingController(); + + String? photoURL; + + bool showSaveButton = false; + bool isLoading = false; + + @override + void initState() { + user = auth.currentUser!; + controller = TextEditingController(text: user.displayName); + + controller.addListener(_onNameChanged); + + auth.userChanges().listen((event) { + if (event != null && mounted) { + setState(() { + user = event; + }); + } + }); + + log(user.toString()); + + super.initState(); + } + + @override + void dispose() { + controller.removeListener(_onNameChanged); + + super.dispose(); + } + + void setIsLoading() { + setState(() { + isLoading = !isLoading; + }); + } + + void _onNameChanged() { + setState(() { + if (controller.text == user.displayName || controller.text.isEmpty) { + showSaveButton = false; + } else { + showSaveButton = true; + } + }); + } + + /// Map User provider data into a list of Provider Ids. + List get userProviders => user.providerData.map((e) => e.providerId).toList(); + + Future updateDisplayName() async { + await user.updateDisplayName(controller.text); + + setState(() { + showSaveButton = false; + }); + + // ignore: use_build_context_synchronously + ScaffoldSnackbar.of(context).show('Name updated'); + } + + @override + Widget build(BuildContext context) { + return GestureDetector( + onTap: FocusScope.of(context).unfocus, + child: Scaffold( + body: Stack( + children: [ + Center( + child: SizedBox( + width: 400, + child: SingleChildScrollView( + child: Column( + mainAxisAlignment: MainAxisAlignment.center, + children: [ + Stack( + children: [ + CircleAvatar( + maxRadius: 60, + backgroundImage: NetworkImage( + user.photoURL ?? placeholderImage, + ), + ), + Positioned.directional( + textDirection: Directionality.of(context), + end: 0, + bottom: 0, + child: Material( + clipBehavior: Clip.antiAlias, + color: Theme.of(context).colorScheme.secondary, + borderRadius: BorderRadius.circular(40), + child: InkWell( + onTap: () async { + final photoURL = await getPhotoURLFromUser(); + + if (photoURL != null) { + await user.updatePhotoURL(photoURL); + } + }, + radius: 50, + child: const SizedBox( + width: 35, + height: 35, + child: Icon(Icons.edit), + ), + ), + ), + ), + ], + ), + const SizedBox(height: 10), + TextField( + textAlign: TextAlign.center, + controller: controller, + decoration: const InputDecoration( + border: InputBorder.none, + floatingLabelBehavior: FloatingLabelBehavior.never, + alignLabelWithHint: true, + label: Center( + child: Text( + 'Click to add a display name', + ), + ), + ), + ), + Text(user.email ?? user.phoneNumber ?? 'User'), + const SizedBox(height: 10), + Row( + mainAxisAlignment: MainAxisAlignment.center, + children: [ + if (userProviders.contains('phone')) + const Icon(Icons.phone), + if (userProviders.contains('password')) + const Icon(Icons.mail), + if (userProviders.contains('google.com')) + SizedBox( + width: 24, + child: Image.network( + 'https://upload.wikimedia.org/wikipedia/commons/0/09/IOS_Google_icon.png', + ), + ), + ], + ), + const SizedBox(height: 20), + TextButton( + onPressed: () { + user.sendEmailVerification(); + }, + child: const Text('Verify Email'), + ), + TextButton( + onPressed: () async { + final a = await user.multiFactor.getEnrolledFactors(); + print(a); + }, + child: const Text('Get enrolled factors'), + ), + TextButton( + onPressed: () async { + if (AuthGate.appleAuthorizationCode != null) { + // The `authorizationCode` is on the user credential. + // e.g. final authorizationCode = userCredential.additionalUserInfo?.authorizationCode; + await FirebaseAuth.instance + .revokeTokenWithAuthorizationCode( + AuthGate.appleAuthorizationCode!, + ); + // You may wish to delete the user at this point + AuthGate.appleAuthorizationCode = null; + } else { + print( + 'Apple `authorizationCode` is null, cannot revoke token.', + ); + } + }, + child: const Text('Revoke Apple auth token'), + ), + TextFormField( + controller: phoneController, + decoration: const InputDecoration( + icon: Icon(Icons.phone), + hintText: '+33612345678', + labelText: 'Phone number', + ), + ), + const SizedBox(height: 20), + TextButton( + onPressed: () async { + final session = await user.multiFactor.getSession(); + await auth.verifyPhoneNumber( + multiFactorSession: session, + phoneNumber: phoneController.text, + verificationCompleted: (_) {}, + verificationFailed: print, + codeSent: ( + String verificationId, + int? resendToken, + ) async { + final smsCode = await getSmsCodeFromUser(context); + + if (smsCode != null) { + // Create a PhoneAuthCredential with the code + final credential = PhoneAuthProvider.credential( + verificationId: verificationId, + smsCode: smsCode, + ); + + try { + await user.multiFactor.enroll( + PhoneMultiFactorGenerator.getAssertion( + credential, + ), + ); + } on FirebaseAuthException catch (e) { + print(e.message); + } + } + }, + codeAutoRetrievalTimeout: print, + ); + }, + child: const Text('Verify Number For MFA'), + ), + TextButton( + onPressed: () async { + final totp = + (await user.multiFactor.getEnrolledFactors()) + .firstWhereOrNull( + (element) => element.factorId == 'totp', + ); + if (totp != null) { + await user.multiFactor.unenroll( + factorUid: + (await user.multiFactor.getEnrolledFactors()) + .firstWhere( + (element) => element.factorId == 'totp', + ) + .uid, + ); + } + final session = await user.multiFactor.getSession(); + final totpSecret = + await TotpMultiFactorGenerator.generateSecret( + session, + ); + print(totpSecret); + final code = + await getTotpFromUser(context, totpSecret); + print('code: $code'); + if (code == null) { + return; + } + await user.multiFactor.enroll( + await TotpMultiFactorGenerator + .getAssertionForEnrollment( + totpSecret, + code, + ), + displayName: 'TOTP', + ); + }, + child: const Text('Enroll TOTP'), + ), + TextButton( + onPressed: () async { + try { + final enrolledFactors = + await user.multiFactor.getEnrolledFactors(); + + await user.multiFactor.unenroll( + factorUid: enrolledFactors.first.uid, + ); + // Show snackbar + ScaffoldSnackbar.of(context).show('MFA unenrolled'); + } catch (e) { + print(e); + } + }, + child: const Text('Unenroll MFA'), + ), + const Divider(), + TextButton( + onPressed: _signOut, + child: const Text('Sign out'), + ), + ], + ), + ), + ), + ), + Positioned.directional( + textDirection: Directionality.of(context), + end: 40, + top: 40, + child: AnimatedSwitcher( + duration: const Duration(milliseconds: 200), + child: !showSaveButton + ? SizedBox(key: UniqueKey()) + : TextButton( + onPressed: isLoading ? null : updateDisplayName, + child: const Text('Save changes'), + ), + ), + ), + ], + ), + ), + ); + } + + Future getPhotoURLFromUser() async { + String? photoURL; + + // Update the UI - wait for the user to enter the SMS code + await showDialog( + context: context, + barrierDismissible: false, + builder: (context) { + return AlertDialog( + title: const Text('New image Url:'), + actions: [ + ElevatedButton( + onPressed: () { + Navigator.of(context).pop(); + }, + child: const Text('Update'), + ), + OutlinedButton( + onPressed: () { + photoURL = null; + Navigator.of(context).pop(); + }, + child: const Text('Cancel'), + ), + ], + content: Container( + padding: const EdgeInsets.all(20), + child: TextField( + onChanged: (value) { + photoURL = value; + }, + textAlign: TextAlign.center, + autofocus: true, + ), + ), + ); + }, + ); + + return photoURL; + } + + /// Example code for sign out. + Future _signOut() async { + await auth.signOut(); + await GoogleSignIn().signOut(); + } +} diff --git a/mih_ui/android/build/ios/SourcePackages/firebase_auth-6.5.4/example/macos/Flutter/Flutter-Debug.xcconfig b/mih_ui/android/build/ios/SourcePackages/firebase_auth-6.5.4/example/macos/Flutter/Flutter-Debug.xcconfig new file mode 100644 index 00000000..785633d3 --- /dev/null +++ b/mih_ui/android/build/ios/SourcePackages/firebase_auth-6.5.4/example/macos/Flutter/Flutter-Debug.xcconfig @@ -0,0 +1,2 @@ +#include "Pods/Target Support Files/Pods-Runner/Pods-Runner.debug.xcconfig" +#include "ephemeral/Flutter-Generated.xcconfig" diff --git a/mih_ui/android/build/ios/SourcePackages/firebase_auth-6.5.4/example/macos/Flutter/Flutter-Release.xcconfig b/mih_ui/android/build/ios/SourcePackages/firebase_auth-6.5.4/example/macos/Flutter/Flutter-Release.xcconfig new file mode 100644 index 00000000..5fba960c --- /dev/null +++ b/mih_ui/android/build/ios/SourcePackages/firebase_auth-6.5.4/example/macos/Flutter/Flutter-Release.xcconfig @@ -0,0 +1,2 @@ +#include "Pods/Target Support Files/Pods-Runner/Pods-Runner.release.xcconfig" +#include "ephemeral/Flutter-Generated.xcconfig" diff --git a/mih_ui/android/build/ios/SourcePackages/firebase_auth-6.5.4/example/macos/Podfile b/mih_ui/android/build/ios/SourcePackages/firebase_auth-6.5.4/example/macos/Podfile new file mode 100644 index 00000000..9ec46f8c --- /dev/null +++ b/mih_ui/android/build/ios/SourcePackages/firebase_auth-6.5.4/example/macos/Podfile @@ -0,0 +1,40 @@ +platform :osx, '10.15' + +# CocoaPods analytics sends network stats synchronously affecting flutter build latency. +ENV['COCOAPODS_DISABLE_STATS'] = 'true' + +project 'Runner', { + 'Debug' => :debug, + 'Profile' => :release, + 'Release' => :release, +} + +def flutter_root + generated_xcode_build_settings_path = File.expand_path(File.join('..', 'Flutter', 'ephemeral', 'Flutter-Generated.xcconfig'), __FILE__) + unless File.exist?(generated_xcode_build_settings_path) + raise "#{generated_xcode_build_settings_path} must exist. If you're running pod install manually, make sure \"flutter pub get\" is executed first" + end + + File.foreach(generated_xcode_build_settings_path) do |line| + matches = line.match(/FLUTTER_ROOT\=(.*)/) + return matches[1].strip if matches + end + raise "FLUTTER_ROOT not found in #{generated_xcode_build_settings_path}. Try deleting Flutter-Generated.xcconfig, then run \"flutter pub get\"" +end + +require File.expand_path(File.join('packages', 'flutter_tools', 'bin', 'podhelper'), flutter_root) + +flutter_macos_podfile_setup + +target 'Runner' do + use_frameworks! + use_modular_headers! + + flutter_install_all_macos_pods File.dirname(File.realpath(__FILE__)) +end + +post_install do |installer| + installer.pods_project.targets.each do |target| + flutter_additional_macos_build_settings(target) + end +end diff --git a/mih_ui/android/build/ios/SourcePackages/firebase_auth-6.5.4/example/macos/Runner.xcodeproj/project.pbxproj b/mih_ui/android/build/ios/SourcePackages/firebase_auth-6.5.4/example/macos/Runner.xcodeproj/project.pbxproj new file mode 100644 index 00000000..4848b09b --- /dev/null +++ b/mih_ui/android/build/ios/SourcePackages/firebase_auth-6.5.4/example/macos/Runner.xcodeproj/project.pbxproj @@ -0,0 +1,718 @@ +// !$*UTF8*$! +{ + archiveVersion = 1; + classes = { + }; + objectVersion = 54; + objects = { + +/* Begin PBXAggregateTarget section */ + 33CC111A2044C6BA0003C045 /* Flutter Assemble */ = { + isa = PBXAggregateTarget; + buildConfigurationList = 33CC111B2044C6BA0003C045 /* Build configuration list for PBXAggregateTarget "Flutter Assemble" */; + buildPhases = ( + 33CC111E2044C6BF0003C045 /* ShellScript */, + ); + dependencies = ( + ); + name = "Flutter Assemble"; + productName = FLX; + }; +/* End PBXAggregateTarget section */ + +/* Begin PBXBuildFile section */ + 25A01FB0278D938300D1E790 /* GoogleService-Info.plist in Resources */ = {isa = PBXBuildFile; fileRef = 25A01FAF278D938300D1E790 /* GoogleService-Info.plist */; }; + 335BBD1B22A9A15E00E9071D /* GeneratedPluginRegistrant.swift in Sources */ = {isa = PBXBuildFile; fileRef = 335BBD1A22A9A15E00E9071D /* GeneratedPluginRegistrant.swift */; }; + 33CC10F12044A3C60003C045 /* AppDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 33CC10F02044A3C60003C045 /* AppDelegate.swift */; }; + 33CC10F32044A3C60003C045 /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 33CC10F22044A3C60003C045 /* Assets.xcassets */; }; + 33CC10F62044A3C60003C045 /* MainMenu.xib in Resources */ = {isa = PBXBuildFile; fileRef = 33CC10F42044A3C60003C045 /* MainMenu.xib */; }; + 33CC11132044BFA00003C045 /* MainFlutterWindow.swift in Sources */ = {isa = PBXBuildFile; fileRef = 33CC11122044BFA00003C045 /* MainFlutterWindow.swift */; }; + 78A318202AECB46A00862997 /* FlutterGeneratedPluginSwiftPackage in Frameworks */ = {isa = PBXBuildFile; productRef = 78A3181F2AECB46A00862997 /* FlutterGeneratedPluginSwiftPackage */; }; + B6036D992F5B77F0D48D7883 /* Pods_Runner.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 1026236A547BC5196614E954 /* Pods_Runner.framework */; }; + C0151CEAF69E3751D6A8FA78 /* GoogleService-Info.plist in Resources */ = {isa = PBXBuildFile; fileRef = 2F30ED8EF0A1349EA81AEE1A /* GoogleService-Info.plist */; }; +/* End PBXBuildFile section */ + +/* Begin PBXContainerItemProxy section */ + 33CC111F2044C79F0003C045 /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = 33CC10E52044A3C60003C045 /* Project object */; + proxyType = 1; + remoteGlobalIDString = 33CC111A2044C6BA0003C045; + remoteInfo = FLX; + }; +/* End PBXContainerItemProxy section */ + +/* Begin PBXCopyFilesBuildPhase section */ + 33CC110E2044A8840003C045 /* Bundle Framework */ = { + isa = PBXCopyFilesBuildPhase; + buildActionMask = 2147483647; + dstPath = ""; + dstSubfolderSpec = 10; + files = ( + ); + name = "Bundle Framework"; + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXCopyFilesBuildPhase section */ + +/* Begin PBXFileReference section */ + 0B4CF9B1CA3F6E07FE2F953C /* Pods-Runner.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.profile.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.profile.xcconfig"; sourceTree = ""; }; + 1026236A547BC5196614E954 /* Pods_Runner.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_Runner.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + 1E5E064344044E24673A33BD /* Pods-Runner.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.release.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.release.xcconfig"; sourceTree = ""; }; + 25A01FAF278D938300D1E790 /* GoogleService-Info.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; path = "GoogleService-Info.plist"; sourceTree = ""; }; + 2F30ED8EF0A1349EA81AEE1A /* GoogleService-Info.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; name = "GoogleService-Info.plist"; path = "Runner/GoogleService-Info.plist"; sourceTree = ""; }; + 333000ED22D3DE5D00554162 /* Warnings.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = Warnings.xcconfig; sourceTree = ""; }; + 335BBD1A22A9A15E00E9071D /* GeneratedPluginRegistrant.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = GeneratedPluginRegistrant.swift; sourceTree = ""; }; + 33CC10ED2044A3C60003C045 /* example.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = example.app; sourceTree = BUILT_PRODUCTS_DIR; }; + 33CC10F02044A3C60003C045 /* AppDelegate.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AppDelegate.swift; sourceTree = ""; }; + 33CC10F22044A3C60003C045 /* Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; name = Assets.xcassets; path = Runner/Assets.xcassets; sourceTree = ""; }; + 33CC10F52044A3C60003C045 /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.xib; name = Base; path = Base.lproj/MainMenu.xib; sourceTree = ""; }; + 33CC10F72044A3C60003C045 /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; name = Info.plist; path = Runner/Info.plist; sourceTree = ""; }; + 33CC11122044BFA00003C045 /* MainFlutterWindow.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = MainFlutterWindow.swift; sourceTree = ""; }; + 33CEB47222A05771004F2AC0 /* Flutter-Debug.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = "Flutter-Debug.xcconfig"; sourceTree = ""; }; + 33CEB47422A05771004F2AC0 /* Flutter-Release.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = "Flutter-Release.xcconfig"; sourceTree = ""; }; + 33CEB47722A0578A004F2AC0 /* Flutter-Generated.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; name = "Flutter-Generated.xcconfig"; path = "ephemeral/Flutter-Generated.xcconfig"; sourceTree = ""; }; + 33E51913231747F40026EE4D /* DebugProfile.entitlements */ = {isa = PBXFileReference; lastKnownFileType = text.plist.entitlements; path = DebugProfile.entitlements; sourceTree = ""; }; + 33E51914231749380026EE4D /* Release.entitlements */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.entitlements; path = Release.entitlements; sourceTree = ""; }; + 33E5194F232828860026EE4D /* AppInfo.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = AppInfo.xcconfig; sourceTree = ""; }; + 3D7BD4B06D0869EA1407E048 /* Pods-Runner.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.debug.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.debug.xcconfig"; sourceTree = ""; }; + 78E0A7A72DC9AD7400C4905E /* FlutterGeneratedPluginSwiftPackage */ = {isa = PBXFileReference; lastKnownFileType = wrapper; name = FlutterGeneratedPluginSwiftPackage; path = ephemeral/Packages/FlutterGeneratedPluginSwiftPackage; sourceTree = ""; }; + 7AFA3C8E1D35360C0083082E /* Release.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = Release.xcconfig; sourceTree = ""; }; + 9740EEB21CF90195004384FC /* Debug.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; path = Debug.xcconfig; sourceTree = ""; }; +/* End PBXFileReference section */ + +/* Begin PBXFrameworksBuildPhase section */ + 33CC10EA2044A3C60003C045 /* Frameworks */ = { + isa = PBXFrameworksBuildPhase; + buildActionMask = 2147483647; + files = ( + 78A318202AECB46A00862997 /* FlutterGeneratedPluginSwiftPackage in Frameworks */, + B6036D992F5B77F0D48D7883 /* Pods_Runner.framework in Frameworks */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXFrameworksBuildPhase section */ + +/* Begin PBXGroup section */ + 286E7513A68DD39907D77423 /* Pods */ = { + isa = PBXGroup; + children = ( + 3D7BD4B06D0869EA1407E048 /* Pods-Runner.debug.xcconfig */, + 1E5E064344044E24673A33BD /* Pods-Runner.release.xcconfig */, + 0B4CF9B1CA3F6E07FE2F953C /* Pods-Runner.profile.xcconfig */, + ); + path = Pods; + sourceTree = ""; + }; + 33BA886A226E78AF003329D5 /* Configs */ = { + isa = PBXGroup; + children = ( + 33E5194F232828860026EE4D /* AppInfo.xcconfig */, + 9740EEB21CF90195004384FC /* Debug.xcconfig */, + 7AFA3C8E1D35360C0083082E /* Release.xcconfig */, + 333000ED22D3DE5D00554162 /* Warnings.xcconfig */, + ); + path = Configs; + sourceTree = ""; + }; + 33CC10E42044A3C60003C045 = { + isa = PBXGroup; + children = ( + 33FAB671232836740065AC1E /* Runner */, + 33CEB47122A05771004F2AC0 /* Flutter */, + 33CC10EE2044A3C60003C045 /* Products */, + D73912EC22F37F3D000D13A0 /* Frameworks */, + 286E7513A68DD39907D77423 /* Pods */, + 2F30ED8EF0A1349EA81AEE1A /* GoogleService-Info.plist */, + ); + sourceTree = ""; + }; + 33CC10EE2044A3C60003C045 /* Products */ = { + isa = PBXGroup; + children = ( + 33CC10ED2044A3C60003C045 /* example.app */, + ); + name = Products; + sourceTree = ""; + }; + 33CC11242044D66E0003C045 /* Resources */ = { + isa = PBXGroup; + children = ( + 33CC10F22044A3C60003C045 /* Assets.xcassets */, + 33CC10F42044A3C60003C045 /* MainMenu.xib */, + 33CC10F72044A3C60003C045 /* Info.plist */, + ); + name = Resources; + path = ..; + sourceTree = ""; + }; + 33CEB47122A05771004F2AC0 /* Flutter */ = { + isa = PBXGroup; + children = ( + 78E0A7A72DC9AD7400C4905E /* FlutterGeneratedPluginSwiftPackage */, + 335BBD1A22A9A15E00E9071D /* GeneratedPluginRegistrant.swift */, + 33CEB47222A05771004F2AC0 /* Flutter-Debug.xcconfig */, + 33CEB47422A05771004F2AC0 /* Flutter-Release.xcconfig */, + 33CEB47722A0578A004F2AC0 /* Flutter-Generated.xcconfig */, + ); + path = Flutter; + sourceTree = ""; + }; + 33FAB671232836740065AC1E /* Runner */ = { + isa = PBXGroup; + children = ( + 25A01FAF278D938300D1E790 /* GoogleService-Info.plist */, + 33CC10F02044A3C60003C045 /* AppDelegate.swift */, + 33CC11122044BFA00003C045 /* MainFlutterWindow.swift */, + 33E51913231747F40026EE4D /* DebugProfile.entitlements */, + 33E51914231749380026EE4D /* Release.entitlements */, + 33CC11242044D66E0003C045 /* Resources */, + 33BA886A226E78AF003329D5 /* Configs */, + ); + path = Runner; + sourceTree = ""; + }; + D73912EC22F37F3D000D13A0 /* Frameworks */ = { + isa = PBXGroup; + children = ( + 1026236A547BC5196614E954 /* Pods_Runner.framework */, + ); + name = Frameworks; + sourceTree = ""; + }; +/* End PBXGroup section */ + +/* Begin PBXNativeTarget section */ + 33CC10EC2044A3C60003C045 /* Runner */ = { + isa = PBXNativeTarget; + buildConfigurationList = 33CC10FB2044A3C60003C045 /* Build configuration list for PBXNativeTarget "Runner" */; + buildPhases = ( + 9C4FABD4FD7B8936CFFEAF31 /* [CP] Check Pods Manifest.lock */, + 33CC10E92044A3C60003C045 /* Sources */, + 33CC10EA2044A3C60003C045 /* Frameworks */, + 33CC10EB2044A3C60003C045 /* Resources */, + 33CC110E2044A8840003C045 /* Bundle Framework */, + 3399D490228B24CF009A79C7 /* ShellScript */, + E033F9E34514FF7F419D8FF5 /* [CP] Embed Pods Frameworks */, + 91D69FDB92A2BAB6493D7E50 /* [CP] Copy Pods Resources */, + ); + buildRules = ( + ); + dependencies = ( + 33CC11202044C79F0003C045 /* PBXTargetDependency */, + ); + name = Runner; + packageProductDependencies = ( + 78A3181F2AECB46A00862997 /* FlutterGeneratedPluginSwiftPackage */, + ); + productName = Runner; + productReference = 33CC10ED2044A3C60003C045 /* example.app */; + productType = "com.apple.product-type.application"; + }; +/* End PBXNativeTarget section */ + +/* Begin PBXProject section */ + 33CC10E52044A3C60003C045 /* Project object */ = { + isa = PBXProject; + attributes = { + LastSwiftUpdateCheck = 0920; + LastUpgradeCheck = 1510; + ORGANIZATIONNAME = "The Flutter Authors"; + TargetAttributes = { + 33CC10EC2044A3C60003C045 = { + CreatedOnToolsVersion = 9.2; + LastSwiftMigration = 1100; + ProvisioningStyle = Automatic; + SystemCapabilities = { + com.apple.Sandbox = { + enabled = 1; + }; + }; + }; + 33CC111A2044C6BA0003C045 = { + CreatedOnToolsVersion = 9.2; + ProvisioningStyle = Manual; + }; + }; + }; + buildConfigurationList = 33CC10E82044A3C60003C045 /* Build configuration list for PBXProject "Runner" */; + compatibilityVersion = "Xcode 8.0"; + developmentRegion = en; + hasScannedForEncodings = 0; + knownRegions = ( + en, + Base, + ); + mainGroup = 33CC10E42044A3C60003C045; + packageReferences = ( + 781AD8BC2B33823900A9FFBB /* XCLocalSwiftPackageReference "FlutterGeneratedPluginSwiftPackage" */, + ); + productRefGroup = 33CC10EE2044A3C60003C045 /* Products */; + projectDirPath = ""; + projectRoot = ""; + targets = ( + 33CC10EC2044A3C60003C045 /* Runner */, + 33CC111A2044C6BA0003C045 /* Flutter Assemble */, + ); + }; +/* End PBXProject section */ + +/* Begin PBXResourcesBuildPhase section */ + 33CC10EB2044A3C60003C045 /* Resources */ = { + isa = PBXResourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + 33CC10F32044A3C60003C045 /* Assets.xcassets in Resources */, + 33CC10F62044A3C60003C045 /* MainMenu.xib in Resources */, + 25A01FB0278D938300D1E790 /* GoogleService-Info.plist in Resources */, + C0151CEAF69E3751D6A8FA78 /* GoogleService-Info.plist in Resources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXResourcesBuildPhase section */ + +/* Begin PBXShellScriptBuildPhase section */ + 3399D490228B24CF009A79C7 /* ShellScript */ = { + isa = PBXShellScriptBuildPhase; + alwaysOutOfDate = 1; + buildActionMask = 2147483647; + files = ( + ); + inputFileListPaths = ( + ); + inputPaths = ( + ); + outputFileListPaths = ( + ); + outputPaths = ( + ); + runOnlyForDeploymentPostprocessing = 0; + shellPath = /bin/sh; + shellScript = "echo \"$PRODUCT_NAME.app\" > \"$PROJECT_DIR\"/Flutter/ephemeral/.app_filename && \"$FLUTTER_ROOT\"/packages/flutter_tools/bin/macos_assemble.sh embed\n"; + }; + 33CC111E2044C6BF0003C045 /* ShellScript */ = { + isa = PBXShellScriptBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + inputFileListPaths = ( + Flutter/ephemeral/FlutterInputs.xcfilelist, + ); + inputPaths = ( + Flutter/ephemeral/tripwire, + ); + outputFileListPaths = ( + Flutter/ephemeral/FlutterOutputs.xcfilelist, + ); + outputPaths = ( + ); + runOnlyForDeploymentPostprocessing = 0; + shellPath = /bin/sh; + shellScript = "\"$FLUTTER_ROOT\"/packages/flutter_tools/bin/macos_assemble.sh\ntouch Flutter/ephemeral/tripwire\n"; + }; + 91D69FDB92A2BAB6493D7E50 /* [CP] Copy Pods Resources */ = { + isa = PBXShellScriptBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + inputPaths = ( + "${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-resources.sh", + "${PODS_CONFIGURATION_BUILD_DIR}/google_sign_in_ios/google_sign_in_ios_privacy.bundle", + ); + name = "[CP] Copy Pods Resources"; + outputPaths = ( + "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/google_sign_in_ios_privacy.bundle", + ); + runOnlyForDeploymentPostprocessing = 0; + shellPath = /bin/sh; + shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-resources.sh\"\n"; + showEnvVarsInLog = 0; + }; + 9C4FABD4FD7B8936CFFEAF31 /* [CP] Check Pods Manifest.lock */ = { + isa = PBXShellScriptBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + inputFileListPaths = ( + ); + inputPaths = ( + "${PODS_PODFILE_DIR_PATH}/Podfile.lock", + "${PODS_ROOT}/Manifest.lock", + ); + name = "[CP] Check Pods Manifest.lock"; + outputFileListPaths = ( + ); + outputPaths = ( + "$(DERIVED_FILE_DIR)/Pods-Runner-checkManifestLockResult.txt", + ); + runOnlyForDeploymentPostprocessing = 0; + shellPath = /bin/sh; + shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; + showEnvVarsInLog = 0; + }; + E033F9E34514FF7F419D8FF5 /* [CP] Embed Pods Frameworks */ = { + isa = PBXShellScriptBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + inputPaths = ( + "${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks.sh", + "${BUILT_PRODUCTS_DIR}/AppAuth/AppAuth.framework", + "${BUILT_PRODUCTS_DIR}/GTMAppAuth/GTMAppAuth.framework", + "${BUILT_PRODUCTS_DIR}/GTMSessionFetcher/GTMSessionFetcher.framework", + "${BUILT_PRODUCTS_DIR}/GoogleSignIn/GoogleSignIn.framework", + "${BUILT_PRODUCTS_DIR}/facebook_auth_desktop/facebook_auth_desktop.framework", + "${BUILT_PRODUCTS_DIR}/flutter_secure_storage_macos/flutter_secure_storage_macos.framework", + ); + name = "[CP] Embed Pods Frameworks"; + outputPaths = ( + "${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/AppAuth.framework", + "${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/GTMAppAuth.framework", + "${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/GTMSessionFetcher.framework", + "${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/GoogleSignIn.framework", + "${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/facebook_auth_desktop.framework", + "${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/flutter_secure_storage_macos.framework", + ); + runOnlyForDeploymentPostprocessing = 0; + shellPath = /bin/sh; + shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks.sh\"\n"; + showEnvVarsInLog = 0; + }; +/* End PBXShellScriptBuildPhase section */ + +/* Begin PBXSourcesBuildPhase section */ + 33CC10E92044A3C60003C045 /* Sources */ = { + isa = PBXSourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + 33CC11132044BFA00003C045 /* MainFlutterWindow.swift in Sources */, + 33CC10F12044A3C60003C045 /* AppDelegate.swift in Sources */, + 335BBD1B22A9A15E00E9071D /* GeneratedPluginRegistrant.swift in Sources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXSourcesBuildPhase section */ + +/* Begin PBXTargetDependency section */ + 33CC11202044C79F0003C045 /* PBXTargetDependency */ = { + isa = PBXTargetDependency; + target = 33CC111A2044C6BA0003C045 /* Flutter Assemble */; + targetProxy = 33CC111F2044C79F0003C045 /* PBXContainerItemProxy */; + }; +/* End PBXTargetDependency section */ + +/* Begin PBXVariantGroup section */ + 33CC10F42044A3C60003C045 /* MainMenu.xib */ = { + isa = PBXVariantGroup; + children = ( + 33CC10F52044A3C60003C045 /* Base */, + ); + name = MainMenu.xib; + path = Runner; + sourceTree = ""; + }; +/* End PBXVariantGroup section */ + +/* Begin XCBuildConfiguration section */ + 338D0CE9231458BD00FA5F75 /* Profile */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = 7AFA3C8E1D35360C0083082E /* Release.xcconfig */; + buildSettings = { + ALWAYS_SEARCH_USER_PATHS = NO; + CLANG_ANALYZER_NONNULL = YES; + CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE; + CLANG_CXX_LANGUAGE_STANDARD = "gnu++14"; + CLANG_CXX_LIBRARY = "libc++"; + CLANG_ENABLE_MODULES = YES; + CLANG_ENABLE_OBJC_ARC = YES; + CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES; + CLANG_WARN_BOOL_CONVERSION = YES; + CLANG_WARN_CONSTANT_CONVERSION = YES; + CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES; + CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; + CLANG_WARN_DOCUMENTATION_COMMENTS = YES; + CLANG_WARN_EMPTY_BODY = YES; + CLANG_WARN_ENUM_CONVERSION = YES; + CLANG_WARN_INFINITE_RECURSION = YES; + CLANG_WARN_INT_CONVERSION = YES; + CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES; + CLANG_WARN_OBJC_LITERAL_CONVERSION = YES; + CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; + CLANG_WARN_RANGE_LOOP_ANALYSIS = YES; + CLANG_WARN_SUSPICIOUS_MOVE = YES; + CODE_SIGN_IDENTITY = "-"; + COPY_PHASE_STRIP = NO; + DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; + ENABLE_NS_ASSERTIONS = NO; + ENABLE_STRICT_OBJC_MSGSEND = YES; + GCC_C_LANGUAGE_STANDARD = gnu11; + GCC_NO_COMMON_BLOCKS = YES; + GCC_WARN_64_TO_32_BIT_CONVERSION = YES; + GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; + GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; + GCC_WARN_UNUSED_FUNCTION = YES; + GCC_WARN_UNUSED_VARIABLE = YES; + MACOSX_DEPLOYMENT_TARGET = 10.15; + MTL_ENABLE_DEBUG_INFO = NO; + SDKROOT = macosx; + SWIFT_COMPILATION_MODE = wholemodule; + SWIFT_OPTIMIZATION_LEVEL = "-O"; + }; + name = Profile; + }; + 338D0CEA231458BD00FA5F75 /* Profile */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = 33E5194F232828860026EE4D /* AppInfo.xcconfig */; + buildSettings = { + ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; + CLANG_ENABLE_MODULES = YES; + CODE_SIGN_ENTITLEMENTS = Runner/DebugProfile.entitlements; + CODE_SIGN_IDENTITY = "Apple Development"; + CODE_SIGN_STYLE = Automatic; + COMBINE_HIDPI_IMAGES = YES; + DEVELOPMENT_TEAM = YYX2P3XVJ7; + FRAMEWORK_SEARCH_PATHS = ( + "$(inherited)", + "$(PROJECT_DIR)/Flutter/ephemeral", + ); + INFOPLIST_FILE = Runner/Info.plist; + LD_RUNPATH_SEARCH_PATHS = ( + "$(inherited)", + "@executable_path/../Frameworks", + ); + MACOSX_DEPLOYMENT_TARGET = 10.15; + PRODUCT_BUNDLE_IDENTIFIER = io.flutter.plugins.firebase.auth.example; + PROVISIONING_PROFILE_SPECIFIER = ""; + SWIFT_VERSION = 5.0; + }; + name = Profile; + }; + 338D0CEB231458BD00FA5F75 /* Profile */ = { + isa = XCBuildConfiguration; + buildSettings = { + CODE_SIGN_STYLE = Manual; + PRODUCT_NAME = "$(TARGET_NAME)"; + }; + name = Profile; + }; + 33CC10F92044A3C60003C045 /* Debug */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = 9740EEB21CF90195004384FC /* Debug.xcconfig */; + buildSettings = { + ALWAYS_SEARCH_USER_PATHS = NO; + CLANG_ANALYZER_NONNULL = YES; + CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE; + CLANG_CXX_LANGUAGE_STANDARD = "gnu++14"; + CLANG_CXX_LIBRARY = "libc++"; + CLANG_ENABLE_MODULES = YES; + CLANG_ENABLE_OBJC_ARC = YES; + CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES; + CLANG_WARN_BOOL_CONVERSION = YES; + CLANG_WARN_CONSTANT_CONVERSION = YES; + CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES; + CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; + CLANG_WARN_DOCUMENTATION_COMMENTS = YES; + CLANG_WARN_EMPTY_BODY = YES; + CLANG_WARN_ENUM_CONVERSION = YES; + CLANG_WARN_INFINITE_RECURSION = YES; + CLANG_WARN_INT_CONVERSION = YES; + CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES; + CLANG_WARN_OBJC_LITERAL_CONVERSION = YES; + CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; + CLANG_WARN_RANGE_LOOP_ANALYSIS = YES; + CLANG_WARN_SUSPICIOUS_MOVE = YES; + CODE_SIGN_IDENTITY = "-"; + COPY_PHASE_STRIP = NO; + DEBUG_INFORMATION_FORMAT = dwarf; + ENABLE_STRICT_OBJC_MSGSEND = YES; + ENABLE_TESTABILITY = YES; + GCC_C_LANGUAGE_STANDARD = gnu11; + GCC_DYNAMIC_NO_PIC = NO; + GCC_NO_COMMON_BLOCKS = YES; + GCC_OPTIMIZATION_LEVEL = 0; + GCC_PREPROCESSOR_DEFINITIONS = ( + "DEBUG=1", + "$(inherited)", + ); + GCC_WARN_64_TO_32_BIT_CONVERSION = YES; + GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; + GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; + GCC_WARN_UNUSED_FUNCTION = YES; + GCC_WARN_UNUSED_VARIABLE = YES; + MACOSX_DEPLOYMENT_TARGET = 10.15; + MTL_ENABLE_DEBUG_INFO = YES; + ONLY_ACTIVE_ARCH = YES; + SDKROOT = macosx; + SWIFT_ACTIVE_COMPILATION_CONDITIONS = DEBUG; + SWIFT_OPTIMIZATION_LEVEL = "-Onone"; + }; + name = Debug; + }; + 33CC10FA2044A3C60003C045 /* Release */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = 7AFA3C8E1D35360C0083082E /* Release.xcconfig */; + buildSettings = { + ALWAYS_SEARCH_USER_PATHS = NO; + CLANG_ANALYZER_NONNULL = YES; + CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE; + CLANG_CXX_LANGUAGE_STANDARD = "gnu++14"; + CLANG_CXX_LIBRARY = "libc++"; + CLANG_ENABLE_MODULES = YES; + CLANG_ENABLE_OBJC_ARC = YES; + CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES; + CLANG_WARN_BOOL_CONVERSION = YES; + CLANG_WARN_CONSTANT_CONVERSION = YES; + CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES; + CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; + CLANG_WARN_DOCUMENTATION_COMMENTS = YES; + CLANG_WARN_EMPTY_BODY = YES; + CLANG_WARN_ENUM_CONVERSION = YES; + CLANG_WARN_INFINITE_RECURSION = YES; + CLANG_WARN_INT_CONVERSION = YES; + CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES; + CLANG_WARN_OBJC_LITERAL_CONVERSION = YES; + CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; + CLANG_WARN_RANGE_LOOP_ANALYSIS = YES; + CLANG_WARN_SUSPICIOUS_MOVE = YES; + CODE_SIGN_IDENTITY = "-"; + COPY_PHASE_STRIP = NO; + DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; + ENABLE_NS_ASSERTIONS = NO; + ENABLE_STRICT_OBJC_MSGSEND = YES; + GCC_C_LANGUAGE_STANDARD = gnu11; + GCC_NO_COMMON_BLOCKS = YES; + GCC_WARN_64_TO_32_BIT_CONVERSION = YES; + GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; + GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; + GCC_WARN_UNUSED_FUNCTION = YES; + GCC_WARN_UNUSED_VARIABLE = YES; + MACOSX_DEPLOYMENT_TARGET = 10.15; + MTL_ENABLE_DEBUG_INFO = NO; + SDKROOT = macosx; + SWIFT_COMPILATION_MODE = wholemodule; + SWIFT_OPTIMIZATION_LEVEL = "-O"; + }; + name = Release; + }; + 33CC10FC2044A3C60003C045 /* Debug */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = 33E5194F232828860026EE4D /* AppInfo.xcconfig */; + buildSettings = { + ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; + CLANG_ENABLE_MODULES = YES; + CODE_SIGN_ENTITLEMENTS = Runner/DebugProfile.entitlements; + CODE_SIGN_IDENTITY = "Apple Development"; + CODE_SIGN_STYLE = Automatic; + COMBINE_HIDPI_IMAGES = YES; + DEVELOPMENT_TEAM = YYX2P3XVJ7; + FRAMEWORK_SEARCH_PATHS = ( + "$(inherited)", + "$(PROJECT_DIR)/Flutter/ephemeral", + ); + INFOPLIST_FILE = Runner/Info.plist; + LD_RUNPATH_SEARCH_PATHS = ( + "$(inherited)", + "@executable_path/../Frameworks", + ); + MACOSX_DEPLOYMENT_TARGET = 10.15; + PRODUCT_BUNDLE_IDENTIFIER = io.flutter.plugins.firebase.auth.example; + PROVISIONING_PROFILE_SPECIFIER = ""; + SWIFT_OPTIMIZATION_LEVEL = "-Onone"; + SWIFT_VERSION = 5.0; + }; + name = Debug; + }; + 33CC10FD2044A3C60003C045 /* Release */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = 33E5194F232828860026EE4D /* AppInfo.xcconfig */; + buildSettings = { + ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; + CLANG_ENABLE_MODULES = YES; + CODE_SIGN_ENTITLEMENTS = Runner/Release.entitlements; + CODE_SIGN_IDENTITY = "Apple Development"; + CODE_SIGN_STYLE = Automatic; + COMBINE_HIDPI_IMAGES = YES; + DEVELOPMENT_TEAM = YYX2P3XVJ7; + FRAMEWORK_SEARCH_PATHS = ( + "$(inherited)", + "$(PROJECT_DIR)/Flutter/ephemeral", + ); + INFOPLIST_FILE = Runner/Info.plist; + LD_RUNPATH_SEARCH_PATHS = ( + "$(inherited)", + "@executable_path/../Frameworks", + ); + MACOSX_DEPLOYMENT_TARGET = 10.15; + PRODUCT_BUNDLE_IDENTIFIER = io.flutter.plugins.firebase.auth.example; + PROVISIONING_PROFILE_SPECIFIER = ""; + SWIFT_VERSION = 5.0; + }; + name = Release; + }; + 33CC111C2044C6BA0003C045 /* Debug */ = { + isa = XCBuildConfiguration; + buildSettings = { + CODE_SIGN_STYLE = Manual; + PRODUCT_NAME = "$(TARGET_NAME)"; + }; + name = Debug; + }; + 33CC111D2044C6BA0003C045 /* Release */ = { + isa = XCBuildConfiguration; + buildSettings = { + CODE_SIGN_STYLE = Automatic; + PRODUCT_NAME = "$(TARGET_NAME)"; + }; + name = Release; + }; +/* End XCBuildConfiguration section */ + +/* Begin XCConfigurationList section */ + 33CC10E82044A3C60003C045 /* Build configuration list for PBXProject "Runner" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + 33CC10F92044A3C60003C045 /* Debug */, + 33CC10FA2044A3C60003C045 /* Release */, + 338D0CE9231458BD00FA5F75 /* Profile */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; + 33CC10FB2044A3C60003C045 /* Build configuration list for PBXNativeTarget "Runner" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + 33CC10FC2044A3C60003C045 /* Debug */, + 33CC10FD2044A3C60003C045 /* Release */, + 338D0CEA231458BD00FA5F75 /* Profile */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; + 33CC111B2044C6BA0003C045 /* Build configuration list for PBXAggregateTarget "Flutter Assemble" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + 33CC111C2044C6BA0003C045 /* Debug */, + 33CC111D2044C6BA0003C045 /* Release */, + 338D0CEB231458BD00FA5F75 /* Profile */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; +/* End XCConfigurationList section */ + +/* Begin XCLocalSwiftPackageReference section */ + 781AD8BC2B33823900A9FFBB /* XCLocalSwiftPackageReference "FlutterGeneratedPluginSwiftPackage" */ = { + isa = XCLocalSwiftPackageReference; + relativePath = Flutter/ephemeral/Packages/FlutterGeneratedPluginSwiftPackage; + }; +/* End XCLocalSwiftPackageReference section */ + +/* Begin XCSwiftPackageProductDependency section */ + 78A3181F2AECB46A00862997 /* FlutterGeneratedPluginSwiftPackage */ = { + isa = XCSwiftPackageProductDependency; + productName = FlutterGeneratedPluginSwiftPackage; + }; +/* End XCSwiftPackageProductDependency section */ + }; + rootObject = 33CC10E52044A3C60003C045 /* Project object */; +} diff --git a/mih_ui/android/build/ios/SourcePackages/firebase_auth-6.5.4/example/macos/Runner.xcodeproj/project.xcworkspace/contents.xcworkspacedata b/mih_ui/android/build/ios/SourcePackages/firebase_auth-6.5.4/example/macos/Runner.xcodeproj/project.xcworkspace/contents.xcworkspacedata new file mode 100644 index 00000000..764c74b8 --- /dev/null +++ b/mih_ui/android/build/ios/SourcePackages/firebase_auth-6.5.4/example/macos/Runner.xcodeproj/project.xcworkspace/contents.xcworkspacedata @@ -0,0 +1,7 @@ + + + + + diff --git a/mih_ui/android/build/ios/SourcePackages/firebase_auth-6.5.4/example/macos/Runner.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist b/mih_ui/android/build/ios/SourcePackages/firebase_auth-6.5.4/example/macos/Runner.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist new file mode 100644 index 00000000..18d98100 --- /dev/null +++ b/mih_ui/android/build/ios/SourcePackages/firebase_auth-6.5.4/example/macos/Runner.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist @@ -0,0 +1,8 @@ + + + + + IDEDidComputeMac32BitWarning + + + diff --git a/mih_ui/android/build/ios/SourcePackages/firebase_auth-6.5.4/example/macos/Runner.xcodeproj/xcshareddata/xcschemes/Runner.xcscheme b/mih_ui/android/build/ios/SourcePackages/firebase_auth-6.5.4/example/macos/Runner.xcodeproj/xcshareddata/xcschemes/Runner.xcscheme new file mode 100644 index 00000000..126b4eb8 --- /dev/null +++ b/mih_ui/android/build/ios/SourcePackages/firebase_auth-6.5.4/example/macos/Runner.xcodeproj/xcshareddata/xcschemes/Runner.xcscheme @@ -0,0 +1,120 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/mih_ui/android/build/ios/SourcePackages/firebase_auth-6.5.4/example/macos/Runner.xcworkspace/contents.xcworkspacedata b/mih_ui/android/build/ios/SourcePackages/firebase_auth-6.5.4/example/macos/Runner.xcworkspace/contents.xcworkspacedata new file mode 100644 index 00000000..21a3cc14 --- /dev/null +++ b/mih_ui/android/build/ios/SourcePackages/firebase_auth-6.5.4/example/macos/Runner.xcworkspace/contents.xcworkspacedata @@ -0,0 +1,10 @@ + + + + + + + diff --git a/mih_ui/android/build/ios/SourcePackages/firebase_auth-6.5.4/example/macos/Runner.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist b/mih_ui/android/build/ios/SourcePackages/firebase_auth-6.5.4/example/macos/Runner.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist new file mode 100644 index 00000000..18d98100 --- /dev/null +++ b/mih_ui/android/build/ios/SourcePackages/firebase_auth-6.5.4/example/macos/Runner.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist @@ -0,0 +1,8 @@ + + + + + IDEDidComputeMac32BitWarning + + + diff --git a/mih_ui/android/build/ios/SourcePackages/firebase_auth-6.5.4/example/macos/Runner.xcworkspace/xcshareddata/WorkspaceSettings.xcsettings b/mih_ui/android/build/ios/SourcePackages/firebase_auth-6.5.4/example/macos/Runner.xcworkspace/xcshareddata/WorkspaceSettings.xcsettings new file mode 100644 index 00000000..f9b0d7c5 --- /dev/null +++ b/mih_ui/android/build/ios/SourcePackages/firebase_auth-6.5.4/example/macos/Runner.xcworkspace/xcshareddata/WorkspaceSettings.xcsettings @@ -0,0 +1,8 @@ + + + + + PreviewsEnabled + + + diff --git a/mih_ui/android/build/ios/SourcePackages/firebase_auth-6.5.4/example/macos/Runner/AppDelegate.swift b/mih_ui/android/build/ios/SourcePackages/firebase_auth-6.5.4/example/macos/Runner/AppDelegate.swift new file mode 100644 index 00000000..b3c17614 --- /dev/null +++ b/mih_ui/android/build/ios/SourcePackages/firebase_auth-6.5.4/example/macos/Runner/AppDelegate.swift @@ -0,0 +1,13 @@ +import Cocoa +import FlutterMacOS + +@main +class AppDelegate: FlutterAppDelegate { + override func applicationShouldTerminateAfterLastWindowClosed(_ sender: NSApplication) -> Bool { + return true + } + + override func applicationSupportsSecureRestorableState(_ app: NSApplication) -> Bool { + return true + } +} diff --git a/mih_ui/android/build/ios/SourcePackages/firebase_auth-6.5.4/example/macos/Runner/Assets.xcassets/AppIcon.appiconset/Contents.json b/mih_ui/android/build/ios/SourcePackages/firebase_auth-6.5.4/example/macos/Runner/Assets.xcassets/AppIcon.appiconset/Contents.json new file mode 100644 index 00000000..a2ec33f1 --- /dev/null +++ b/mih_ui/android/build/ios/SourcePackages/firebase_auth-6.5.4/example/macos/Runner/Assets.xcassets/AppIcon.appiconset/Contents.json @@ -0,0 +1,68 @@ +{ + "images" : [ + { + "size" : "16x16", + "idiom" : "mac", + "filename" : "app_icon_16.png", + "scale" : "1x" + }, + { + "size" : "16x16", + "idiom" : "mac", + "filename" : "app_icon_32.png", + "scale" : "2x" + }, + { + "size" : "32x32", + "idiom" : "mac", + "filename" : "app_icon_32.png", + "scale" : "1x" + }, + { + "size" : "32x32", + "idiom" : "mac", + "filename" : "app_icon_64.png", + "scale" : "2x" + }, + { + "size" : "128x128", + "idiom" : "mac", + "filename" : "app_icon_128.png", + "scale" : "1x" + }, + { + "size" : "128x128", + "idiom" : "mac", + "filename" : "app_icon_256.png", + "scale" : "2x" + }, + { + "size" : "256x256", + "idiom" : "mac", + "filename" : "app_icon_256.png", + "scale" : "1x" + }, + { + "size" : "256x256", + "idiom" : "mac", + "filename" : "app_icon_512.png", + "scale" : "2x" + }, + { + "size" : "512x512", + "idiom" : "mac", + "filename" : "app_icon_512.png", + "scale" : "1x" + }, + { + "size" : "512x512", + "idiom" : "mac", + "filename" : "app_icon_1024.png", + "scale" : "2x" + } + ], + "info" : { + "version" : 1, + "author" : "xcode" + } +} diff --git a/mih_ui/android/build/ios/SourcePackages/firebase_auth-6.5.4/example/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_1024.png b/mih_ui/android/build/ios/SourcePackages/firebase_auth-6.5.4/example/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_1024.png new file mode 100644 index 0000000000000000000000000000000000000000..3c4935a7ca84f0976aca34b7f2895d65fb94d1ea GIT binary patch literal 46993 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 literal 0 HcmV?d00001 diff --git a/mih_ui/android/build/ios/SourcePackages/firebase_auth-6.5.4/example/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_128.png b/mih_ui/android/build/ios/SourcePackages/firebase_auth-6.5.4/example/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_128.png new file mode 100644 index 0000000000000000000000000000000000000000..ed4cc16421680a50164ba74381b4b35ceaa0ccfc GIT binary patch literal 3276 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 N;OXk;vd$@?2>?>Ex^Vyi literal 0 HcmV?d00001 diff --git a/mih_ui/android/build/ios/SourcePackages/firebase_auth-6.5.4/example/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_256.png b/mih_ui/android/build/ios/SourcePackages/firebase_auth-6.5.4/example/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_256.png new file mode 100644 index 0000000000000000000000000000000000000000..bcbf36df2f2aaaa0a63c7dabc94e600184229d0d GIT binary patch literal 5933 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 f$KZHO*s&vt|9^w-6P?|#0pRK8NSwWJ?9znhg z3{`3j3=J&|48MRv4KElNN(~qoUL`OvSj}Ky5HFasE6@fg!ItFh?!xdN1Q+aGJ{c&& zS>O>_%)r1c48n{Iv*t(u1=&kHeO=ifbFy+6aSK)V_AxLppYn8Z42d|rc6w}vOsL55 z`t&mC&y2@JTEyg!eDiFX^k#CC!jq%>erB=yHqUP0XcDOTw6ko}L zX;EmMrq(fKk*eygEuA616;0)>@A{TK|55PV@70 z$OfzS*(VJxQev3J?yY?O=ul(v`fp}?u9z`JK3ugibK>)DyCwImZOF4d{xK%%Ks1*} zv$oa)9anR%lXIBUqYnhLmT>VOzHfNP?ZwJNZ!5$s9M08RynIvaXw>@G^T9@r9^KH1 zVy??F&uuk)bH9Y4pQY!hP58i_H6 znl-NcuCpLV6ZWU;4C zu@9exF&OZi`Bovq_m%T+WhU2kvkz@^_LpycBvqm3bMpLw8X-Or5sL>0AKE1$(k_L=_Zc=CUq#=x1-QZf)G7nHu@fmsQ1eN_N3+nTEz`4HI4Z6uVlE zJH+X&det8JU?tO?upcM4Z=cV!JV;yF>FfL5Q$M|W_2Z!P`S=}Wzp|_1^#d%e?_H`> zV@%vA$+bFVqhw9`U;TfP|5|PD{||OiYdor8P*i??|NJcb%kzT_73*7WE?Ua5hAnR2 z=7WE=PhTlJ#ZeRznjTUb;`E(wkMZrj4e|Hilz-mK>9cZHQY**5TUPw~u}k;u73KI}xAx!0m-)GVia|x^d3p~s_9gh83jA&Ra<8rM%`>U3x69t&NzbwWY}7Ar?)FK#IZ0z|d0H0EkRO w3{9;}4Xg|ebq&m|3=9_N6z8I7$jwj5OsmAL;bP(Gi$Dzwp00i_>zopr02+f8CIA2c literal 0 HcmV?d00001 diff --git a/mih_ui/android/build/ios/SourcePackages/firebase_auth-6.5.4/example/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_512.png b/mih_ui/android/build/ios/SourcePackages/firebase_auth-6.5.4/example/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_512.png new file mode 100644 index 0000000000000000000000000000000000000000..e71a726136a47ed24125c7efc79d68a4a01961b4 GIT binary patch literal 14800 zcmZ{Lc|26@`~R6Crm_qwyCLMMh!)vm)F@HWt|+6V6lE=CaHfcnn4;2x(VilEl9-V} zsce-cGK|WaF}4{T=lt&J`Fy_L-|vs#>v^7+XU=`!*L|PszSj43o%o$Dj`9mM7C;ar z@3hrnHw59q|KcHn4EQr~{_70*BYk4yj*SqM&s>NcnFoIBdT-sm1A@YrK@dF#f+SPu z{Sb8441xx|AjtYQ1gQq5z1g(^49Fba=I8)nl7BMGpQeB(^8>dY41u79Dw6+j(A_jO z@K83?X~$;S-ud$gYZfZg5|bdvlI`TMaqs!>e}3%9HXev<6;dZZT8Yx`&;pKnN*iCJ z&x_ycWo9{*O}Gc$JHU`%s*$C%@v73hd+Mf%%9ph_Y1juXamcTAHd9tkwoua7yBu?V zgROzw>LbxAw3^;bZU~ZGnnHW?=7r9ZAK#wxT;0O<*z~_>^uV+VCU9B@)|r z*z^v>$!oH7%WZYrwf)zjGU|(8I%9PoktcsH8`z^%$48u z(O_}1U25s@Q*9{-3O!+t?w*QHo;~P99;6-KTGO{Cb#ADDYWF!eATsx{xh-!YMBiuE z%bJc7j^^B$Sa|27XRxg(XTaxWoFI}VFfV>0py8mMM;b^vH}49j;kwCA+Lw=q8lptk z?Pe`{wHI39A&xYkltf5*y%;-DF>5v`-lm0vydYtmqo0sClh5ueHCLJ+6$0y67Z zO-_LCT|JXi3tN7fB-!0_Kn#I+=tyUj87uR5*0>|SZ zy3x2;aql87`{aPZ@UbBwY0;Z-a*lYL90YApOAMKur7YgOiqA~Cne6%b&{V-t>Am2c z{eyEuKl!GsA*jF2H_gvX?bP~v46%3ax$r~B$HnZQ;UiCmRl`ROK8v>;Zs~upH9}qu1ZA3kn-AY2k2@CaH=Qh7K6`nU z3ib(Bk%H*^_omL6N4_G5NpY20UXGi}a$!}#lf<&J4~nhRwRM5cCB3Zvv#6+N1$g@W zj9?qmQ`zz-G9HTpoNl~bCOaEQqlTVYi7G0WmB5E34;f{SGcLvFpOb`+Zm)C(wjqLA z2;+nmB6~QDXbxZGWKLt38I%X$Q!;h zup9S~byxKv=$x|^YEV;l0l67jH~E8BU45ft_7xomac-48oq4PZpSNJbw<7DTM4mmz z!$)z#04cy%b8w@cOvjmb36o;gwYIOLwy+{I#3dJj#W4QdOWwJQ2#20AL49`hSFUa7 zFNAN3OD==G3_kbr1d96>l`_cI`<=thKNh5>hgg7FV>5TfC6d#u)9BNXi@p1K*;2Is zz+x;l4GbSt#*%>1iq}jGIebXYJY5;PGG0y(^{>SSuZY89aL`sDghOM&&pyP6ABJ#w zYwK~4^1eUQD)4!GL>`zrWeHV z-W!6JZbW*Ngo;Edhp_cOysYr!uhKS}vIg_UC}x z=jXxQfV@4B3`5 z!u#byBVXV5GtrSx_8bnT@iKv=Uc6n)Zpa`<9N>+!J~Loxptl5$Z`!u<3a)-+P)say z#=jc7^mJzPMI2;yMhCmN7YN78E7-^S(t8E}FklC;z|4PL{bO|JieM#p1mBjwyZMEm zkX^A1RXPGeS2YqtPMX~~t^$~oeFfWAU#jVLi%Z@l2hle^3|e(q?(uS=BVauF?VF{j z(owKLJuze;_@5p1OtRyrT`EFXf)NfMYb-)E8RVVdr<@}M>4R&~P=;B`c1L%o|8YfB z-a(LB-i8jc5!&B5cowyI2~M^YID&@Xt(D9v{|DB z959W z*vEA77fh3*w*UJ`4Y(bxsoEy6hm7_Wc5gT0^cvso%Ow>9<&@9Q>mxb6-^pv)5yc>n zQ~^!qY(lPQ1EDGkr%_*y*D8T^YbCa52^MVqYpTLhgJ;N5PfCQ{SXk|plD#Sm+g4c- zFeL2Dih35W4{_qb75U`4Rb#S0FEo%F85dOhXSX0huPOxdAid{&p6P;+9}I)XU7^=3RZu9M(g0dLyz_7$8K{`AddBLOfU&B_QNHtmsnNXq`hy~% zvJ{vtz~Yt9X|o}5vXX)9ZCHaRq8iAb zUDj8%(MpzJN39LferYKvIc!)z^5T-eW@j3h9a6d%WZ!%@2^@4+6%Z9W1GHZbOj|sb z0cU$}*~G$fYvDC|XulSC_;m}?KC2jg5pxES$Bt!hA|@EX*2+O!UEb5sn_^d>z;>;r~ zmO3BivdXboPY*}amsO&`xk|e)S*u=`o67MC(1WTB;OwG+ua4UV7T5Wvy%?U{Pa5cO zMoLG>#@chO{Oc72XPyX8f3jC7P`$j4$)0wc(b50COaDP3_Cm}aPAglUa7kRXAqmo5 z0KDD7G>Gmnpons40WJNYn+pxko92GXy@PvSErKE-Ou3)3UiRr7!L4+0%+5}sD{bf)uj^ounQ-Yn2%%JoZ%FjUv%yjS?Ks4u_88Jh%tNliYW~817IV@fqd1T zi(?;Fv-s3rQEn=9G*E-QzSl%YS|^fe*yn}Aqh!&P<5%#oB?*{wZMa5$PYa*A{VA8! zbOfS1W!W}cTo%g~iP$>WhE_x7#O4?h$jq=>{M77>bTAK_ z6uU0tl6HARboGi}=4krr6WP`9`aAt&P5ON1v(+H{T?jZuJ}B{L-=z3VX)}mZwzrqH zpf?T!k&$?{&{0_p>b`kdJbSb(p~tFcuG4zh6}hfl@ues6CfJu<-P+!>FlYMlD_3!E z9$6VE==tlxNYe(s;@8@+4c4jQ$R2g8t0QwE>Et|)5)@kJj6^yaqFYY?0LEM2C!+7+ z+FN|UxR1GCy1KA`{T_%24U+Vserchr5h`;U7TZPr@43x#MMN{@vV?KSII}R@5k`7cVK}E;c)$f~_{ZLDOoL|-01p~oafxi4F zG$?Wha&a*rTnz-nTI-bAJ*SLb!5(L!#iRdvLEyo>7D_=H78-qZrm=6{hkUR{tR{H! z`ZTOV$Oi6^qX5=_{f}V9h}WJAO%h9)kEUF#*-JyYDbOGZ>Nfs%7L}4p zopIul&&Bbn!C9o83ypC6W4F$X=_|pex$V4!Whm#48Wfm3*oAW0Gc&#&b+oq<8>aZR z2BLpouQQwyf$aHpQUK3pMRj(mS^^t#s$IC3{j*m9&l7sQt@RU{o_}N-xI_lh`rND^ zX~-8$o(;p^wf3_5-WZ^qgW`e8T@37{`J)e2KJdSSCUpX6KZu0Ga&U*+u3*PDAs1uK zpl)40+fROA@Vo#vK?^@Pq%w8DO9HdfmH+~vNinZ$5GRz?sD|k246NepqZd`>81P^P z#x#3kUS-}x4k%&~iEUrsb&-X#_;;?y9oCP4crMkC`=q58#NxQ| z*NXNA;GR4X=GiGXwab5=&M3j04fQw%2UxM`S(aE)_PlgJttBX96$$lY@Q%0xV^IbcHqzw^Uk&E=vFB;EQ@kzVIeM8lDIW_Q_ zrfy)l6s2QBApF;J2xTD_@wuNMlwDfsdfMyzRq)<>qG{M)Yt}9F1{1HaI_X7=F=7>& zYB54VaKlxu0lIgS;Ac&25Aw(tcf@K~(cvPi8(OChzhlYp6}#<_MVhU95sD&)n0FtL zmxm4w$~s(S9jmHOgyovpG!x4uLfJsMsJn^QMraKAa1Ix?{zkV!a7{f%-!u2{NqZ&) zo+^XB`eFQ4 zk-(;_>T#pTKyvW${yL|XXbcv?CE2Tp<3(PjeXhu^Jrp6^Mj}lg_)jamK{g;C+q^Da ztb!gV!q5)B7G1%lVanA2b>Xs?%hzCgJ{Hc!ldr9dnz7k^xG#4pDpr|0ZmxxiUVl}j zbD_rg3yAFQ>nnc)0>71D==715jRj4XsRb2#_lJoSOwky&c4957V-|m)@>b^Nak1!8 z@DsIOS8>Oe^T>tgB)WX3Y^I^65Uae+2M;$RxX_C)Aoo0dltvoRRIVQkpnegWj;D#G z+TwFIRUN%bZW3(K{8yN8!(1i0O!X3YN?Zo08L5D~)_tWQA8&|CvuQb8Od?p_x=GMF z-B@v9iNLYS1lUsbb`!%f5+1ev8RFPk7xyx5*G;ybRw(PW*yEZ$unu2`wpH)7b@ZXEz4Jr{?KZKYl!+3^)Q z)~^g?KlPGtT!{yQU&(Z&^rVjPu>ueeZN86AnhRwc)m|;5NvM&W3xD%n`+Hjg5$e8M zKh1Ju82L~&^ z-IQ5bYhsjqJfr38iwi~8<{oeREh|3l)*Enj4&Q$+mM$15YqwXeufK9P^(O=pj=F-1 zD+&REgwY~!W#ZPccSEi(*jiKJ5)Q|zX;hP}S2T9j_);epH9JQs{n>RG}{Nak)vIbfa zFQm?H;D+tzrBN2)6{?Mo%fzN6;6d_h0Qyn61)+XT63=!T*WQyRUoB_x0_)Ir`$FtS zak07C(mOaWN5m%bk?F9X&@mEVKN%{R6obt(9qw&p>w&p;R*l2th9$D^*`pC}NmB+v z>bk;OJ(C8p$G;jNvRsBbt=a!!tKnjJ`9*yQFgjEN1HcC<&>u9aStT3>Oq=MOQV!#WOZ6{cv$YVmlJdovPRV}<=IZUPeBVh5DC z91-?kimq3JUr;UMQ@0?h52gupvG=~(5AVdP(2(%*sL8!#K1-L$9B7MrWGdt(h&whR@vz~0oEHF8u3U1Q zdGdaIytJj4x@eF*E+^zgi{nPCA8tkjN}UoR8WhDzM3-zLqx0z?2tTdDKyENM={fp8VC@3Dt`AiK$;K#H$K2{08mrHG%jgEOLX3MCsG>afZm_0mLPS4jmYUJp~Dm! z5AUe_vEaOAT3zWdwl#cLvqwd1^lwW?gt7(92wEsOE6c#<0}{szFV4(uO70?3>=((! zQr}1{J?Wx2ZmjxYL_8OB*m&mimfojzYn~PiJ2g8R&ZRx-i^yF#sdhEWXAUIZ@J?T$ zs3PgT2<&Ki>Bob_n(@S>kUIvE+nY~ti9~6j;O9VAG#{oZ!DZCW)}i6iA!Tgsyz+hC z1VVyvbQ_nwgdZSEP=U4d#U`2*`e~d4y8uM4Bcmm%!jidaee#4WqN!ZnlBmbYpuaO! z!rU3`Kl2 z0O7PD&fQ|_b)Ub!g9^s;C2e>1i*2&?1$6yEn?~Y zI)-WIN8N(5s9;grW+J@K@I%g#?G&hzmlgV=L}ZA{f>3YCMx^P{u@c5Z;U1qmdk#)L zvX6z1!sL>+@vxO8qVn#k3YxYi?8ggV){?Rn@j$+Fd4-QkuH1@)j#3-=f82GZ!nl~{ zzZ(?kO`ANttVeHSo%xmH!NmNZECh*{s!-8S>ALoe5xOPs>|P5BbUmP@rlV8`d(c=7 zypcpLaI*FM^;GM%@q`GAb8kO`$oE|R48yn)?p(c1t>5;Wwn5r6ck&uw4}TnT80jI`IS~J%q8CpaVgIze<8IykSpVBg8~E! zW_tGqB;GO47r_er05y+Kwrcn{VLxL*1;HMv@*sd}MB6DH4zaP~u4Y;>@Nw7?F8S?c zfVIY(^ntnGgWlD|idzGz$Y+Oh(Ra=&VIf4!K2W*a)(%5%78s}8qxOknAGtDAq+HMO zM+Nu;0OgQRn36 zA@~a8`uVQ~v9?d!BxnsVaB-z-djypO44BjQAmg7&eVoaew|~)wH$SgefJ2$7_RiY+ z_7ACGoFM6Lhvho+eUG@pU&0X(Uy(*j;9pr?ET?FHTXadlfXC|MReZoU5>AG`mTM<% zc~*I@E*u0|hwVTdFA~4^b2VT7_~}~tCueNY{de3og=ASFQ`)0dhC2~Ne<}}Rc?ptA zi}+bQE%N9o*hpSUMH)9xt%Zlz&^p&5=cW}{m#f85iVX64^{!(vhClT<I)+c)RuiyrZqIw4v`z%YK&;_Fh4_+0B?qAGxMfAM`LzG_bjD>ib4;KGT4_1I>sxvL&&qp40ajgQOqIE^9=Az4w#ymo)bW-Vg{T!n=l&|nR_ zw+wcH|FxUH63)~{M;goHepmD{Fe?W9sO|eJP9L$G<{e_7FxxuXQ+)(Z^@;X8I1=%k zTK$gbHA1^4W<`q~ubQ0M_C^CA5#Z&*nGc(T?4Y_2jLu&FJDQYpCSiRny->$+nC9Jl z?avTW`ZXYT51%SrEq!}dXNM&!pM6nmL^lce=%S7{_TS)ckN8;{p*LT~LMgmlE~dpL zEBQy-jDj%cSK6N3)|CCR0LQ$N6iDM~+-1Oz|LAdkip(VZcO`gqCuJ+(Mm{m6@P%_; zBtF|MMVMP;E`5NJ{&@4j^JE5j&}(Jq{lCGL(P^#uqvbD`2)FVyfNgy|pvT!XY;02Z zZWbgGsvi6#!*$Zxwd{Xk6_M{+^yV_K@%_SAW(x)Lg|*AuG-%g2#GQYk8F?W&8|2dU z;00ppzrQnnYXnT`(S%_qF2#QNz&@Y$zcq+O8p>Gto2&4z8(^#cY?DuQwBQP4Fe?qUK_-yh4xT{8O@gb`uh` z>Q%jrgPAnANn4_)->n;w{Mei#J)F+`12&+-MLKSRzF6bL3;4O~oy~v7 zL0K-=m?>>(^qDCgvFRLBI@`04EGdTxe5}xBg#7#Wb!aUED;?5BLDEvZ@tai4*Rh8& z4V)cOr}DJ0&(FjWH%50Y+&=WtB42^eEVsmaHG)Il#j265oK&Bot(+-IIn`6InmuE# z;)qXs+X{fSb8^rYb#46X5?KCzH9X0>ppBQi(aKS--;4yA%0N|D<#8RZlOS(8n26=u zv~y;KC>`ypW=aqj`&x9 z0Zm>NKp}hPJu1+QDo(_U(Gt0SZ`IJWnp%QK`pye>Bm!w{sG>;VU^2 z4lZhV1}tCE8(?zu#j99|l3-qRBcz3bG+DlyxPGB$^6B^ssc_qYQ6lG0q~EAI?1$?( zahfn%etVvuKwB7R=>JDQluP97nLDM6*5;b0Ox#b{4nIgZA*+?IvyDN{K9WGnlA=Ju z+)6hjr}{;GxQQIDr3*lf32lRp{nHP8uiz^Fa|K+dUc@wD4Kf5RPxVkUZFCdtZH{+=c$AC)G2T-Qn@BPbr zZigIhKhKrVYy`!Mlc#HVr=CURVrhUjExhI~gZ%a=WM9BwvnN?=z!_ZQ$(sP?X;2Jy zyI$}H^^SvH2tf6+Uk$pJww@ngzPp856-l9g6WtW+%Yf>N^A}->#1W2n=WJ%sZ0<){Z&#% z^Kzl$>Km)sIxKLFjtc;}bZeoaZSpL4>`jCmAeRM-NP9sQ&-mi@p0j7Iq>1n&z@8?M z%dM7K^SgE5z)@i5w#rLE4+8%|^J`a6wYr`3BlvdD>7xW?Dd>`0HC0o{w7r_ot~h*G z2gI7Y!AUZ6YN+z$=GNzns@Tu7BxgAb3MBha30-ZG7a%rckU5}y{df`lj@^+34kr5> z988PPbWYdHye~=?>uZ4N&MN@4RBLk_?9W*b$}jqt0j%>yO9QOV(*!#cX~=wRdVL&S zhPQ{${0CGU-rfdS&b@u|IK{hV2Z=(*B2d0?&jwWfT=?Gk`4T9TfMQ)CfNgpLQa#>Q z%6A$w#QNc&qOtrHAbqY>J782@!X{9Y@N(HMSr;PP^;0DlJNxfC`oMB%Ocg zC*hnEsF|p*=CVe^dT)>BTL0yff)uo!U<+_2o3p)CE8quU1JI(=6)9$KxVdJYD*S*~ zzNeSkzFIQyqK}578+qq6X8rrRdgX z4k&R=AGex~a)MoB0pK&|yA<(*J#P&tR?ImBVD)ZTA4VH5L5DxXe<-*s`Aox%H1{-^Qa`kG_DGXD%QX-;l1#&#IVQP6>kir ztO@~ZvJDPnTvKt>fc*(j$W^)JhWk{4kWwbpFIXzuPt2V%M4H19-i5Gn*6(D`4_c1+ zYoI1@yT^~9JF~t>2eVM6p=GP3b*;daJpQOhAMNO|LKnwE2B5n8y9mf;q=)-L_FfD0 z<}YIRBO{k)6AHAn8iG>pYT+3bJ7jvP9}LSMR1nZW$5HR%PD1rFz z{4XE^Vmi-QX#?|Farz=CYS_8!%$E#G%4j2+;Avz|9QBj|YIExYk?y-1(j}0h{$$MnC_*F0U2*ExSi1ZCb_S9aV zTgyGP0Cl=m`emxM4Qih1E{`J{4oJo8K}WnH`@js^pR7Z-vTBK5F5JIFCDN}7pU^_nV>NTz@2$|Kcc5o+L&^Db_AQ);F?)X5BF*QJRCdLI-a%gW z++DZM)x=6*fNrSaUA&hf&CUqC$F*y^CJC-MAm9gd*5#^mh;-dR1?a&<3-hp3@}XN! z&8dcwo6=MQua%0KFvYbi>O{j)RrbDQo3S*y!oEJ~2=}^-v%zn~@hnmKGOvX6JLr;>DNC3)={8OM9n5Zs*(DlS*|%JTniJX2Uav7sOFT0vdIiUOC5pEtY?EF)@Fh9pCfD%N zXskZ8b^ldI{HHj{-l?iWo@IW6Nr`hAS>f8S*8FGc*gmcK^f2JS+>I&r#Gcewy=-JM zv0*w<5qBa6UQB@`esOG*4*t@7c9AkrTpM`v=eY?cO#z17H9B%Xy4m!}LhW}*iZ27w1?HrevgB1SZ1q2X$mm@FK@Qt7o z!s~Lio^IRdwzyvQ80{5iYeTV@mAo=2o5>KepRH0d{*Szlg~n%w2)S5v2|K8}pj;c{ zoDRLvYJO1@?x-=mq+LVhD{l-1-Dw4`7M?3@+ z`fu7?1#9W++6Y46N=H0+bD|CJH~q*CdEBm8D##VS7`cXy4~+x=ZC17rJeBh zI~qW^&FU`+e!{AKO3(>z5Ghh14bUT$=4B>@DVm(cj* zSLA*j!?z!=SLuVvAPh_EFKx}JE8T8;Gx)LH^H136=#Jn3Bo*@?=S`5M{WJPY&~ODs z+^V57DhJ2kD^Z|&;H}eoN~sxS8~cN5u1eW{t&y{!ouH`%p4(yDZaqw$%dlm4A0f0| z8H}XZFDs?3QuqI^PEy}T;r!5+QpfKEt&V|D)Z*xoJ?XXZ+k!sU2X!rcTF4tg8vWPM zr-JE>iu9DZK`#R5gQO{nyGDALY!l@M&eZsc*j*H~l4lD)8S?R*nrdxn?ELUR4kxK? zH(t9IM~^mfPs9WxR>J{agadQg@N6%=tUQ8Bn++TC|Hbqn*q;WydeNIS@gt|3j!P`w zxCKoeKQ*WBlF%l4-apIhERKl(hXS1vVk$U?Wifi)&lL6vF@bmFXmQEe{=$iG)Zt*l z0df@_)B-P_^K2P7h=>OIQ6f0Q-E@|M?$Z5n^oN>2_sBCpN>q(LnqUoef{tm^5^L$# z{<SL zKmH78cHX`4cBKIY8u1x*lwrgP^fJ%E&&AmHrRY7^hH*=2OA9K?!+|~Aeia=nAA`5~ z#zI=h#I>@FXaGk(n)0uqelNY;A5I9obE~OjsuW!%^NxK*52CfBPWYuw--v<1v|B>h z8R=#$TS-Pt3?d@P+xqmYpL4oB8- z>w99}%xqy9W!A^ODfLq8iA@z}10u?o#nG#MXumSaybi(S{`wIM z&nE3n2gWWMu93EvtofWzvG2{v;$ysuw^8q?3n}y=pB1vUr5gi++PjiyBH3jzKBRny zSO~O++1ZLdy7v7VzS&$yY;^Z7*j_#BI`PK`dAzJa9G1{9ahPqPi1C}ti+L)WHii*= z+RZ^+at-tlatc4|akPa&9H;%gn9aS`X_kfb>n>#NTyUVM6m4NCIfLm(28>qaYv7}t zn`M;XcONtXoa3#u3{L-ytd_&g z2mO$8CnE?460w#eSm|smlnNwFHM;A&IxSKLzVkV7nNVqZ*A`)eI{Nbg6WxsarAFuc=FFf1z|%#eTvBgUhY}N zsCT>`_YO>14i^vFX0KXbARLItzT{TeD%N~=ovGtZ6j{>PxkuYlHNTe0!u>rgw#?td z{)n=QrGvgCDE6BUem$Rh(1y!$@(Bn!k3E0|>PQ(8O==zN`?yBhAqlWyq+c%+h?p^- zE&OtLind}^_=>pbhxOgOIC0q9{cLK6p6*eg_|S+p9$W~_u4wzx@N?$QmFg2S)m~^R znni$X{U*!lHgdS@fI;|Owl=9Gwi?dr0m#>yL<8<}bLW_Kpl| zSGesADX&n?qmHC`2GyIev^hi~ka}ISZ^Y4w-yUzyPxaJB0mm%ww^>if3<;P^U+L5=s+cifT-ct*;!dOOk#SOZNv@a^J|DrS3YtSn8EEAlabX1NV3RfHwZn_41Xa z4;$taa6JJR()-FQ<#0G~WlML<l5I+IPnqDpW(PP>hRcQ+S2zU?tbG^(y z1K_?1R){jF;OKGw0WYjnm>aPxnmr5?bP?^B-|Fv`TT4ecH3O`Z3`X_r;vgFn>t1tE zGE6W2PODPKUj+@a%3lB;lS?srE5lp(tZ;uvzrPb){f~n7v_^z! z=16!Vdm!Q0q#?jy0qY%#0d^J8D9o)A;Rj!~j%u>KPs-tB08{4s1ry9VS>gW~5o^L; z7vyjmfXDGRVFa@-mis2!a$GI@9kE*pe3y_C3-$iVGUTQzZE+%>vT0=r|2%xMDBC@>WlkGU4CjoWs@D(rZ zS1NB#e69fvI^O#5r$Hj;bhHPEE4)4q5*t5Gyjzyc{)o459VkEhJ$%hJUC&67k z7gdo`Q*Jm3R&?ueqBezPTa}OI9wqcc;FRTcfVXob^z|dNIB0hMkHV26$zA%YgR$sM zTKM61S}#wJ#u+0UDE3N+U*~Tz1nnV;W<8Akz&6M7-6mIF(Pq`wJ1A%loYL( zIS;&2((xbyL7zoyaY2Sa%BBYBxo6Aa*53`~e@|RA`MP+?iI4KZ+y4EU&I zS_|(#*&j2hxpELa3r0O7ok&5!ijRiRu9i-_3cdnydZU9Mp6Y);skv%!$~`i-J7e-g zj@EoHf+gtcrKf;tY5`4iLnWSHa)9brUM$XmEzG3T0BXTG_+0}p7uGLs^(uYh0j$;~ zT1&~S%_Y5VImvf1EkD7vP-@F%hRlBe{a@T!SW(4WEQd1!O47*Crf@u-TS==48iR5x z!*`Ul4AJI^vIVaN3u5UifXBX{fJ@z>4Q2#1?jpcdLocwymBgKrZ+^Cb@QuIxl58B* zD{t-W3;M;{MGHm_@&n(6A-AsD;JO#>J3o4ru{hy;k;8?=rkp0tadEEcHNECoTI(W31`El-CI0eWQ zWD4&2ehvACkLCjG`82T`L^cNNC4Oo2IH(T4e;C75IwkJ&`|ArqSKD}TX_-E*eeiU& ziUuAC)A?d>-;@9Jcmsdca>@q1`6vzo^3etEH%1Gco&gvC{;Y-qyJ$Re`#A!5Kd((5 z6sSiKnA20uPX0**Mu&6tNgTunUR1sodoNmDst1&wz8v7AG3=^huypTi`S7+GrO$D6 z)0Ja-y5r?QQ+&jVQBjitIZ`z2Ia}iXWf#=#>nU+ zL29$)Q>f#o<#4deo!Kuo@WX{G(`eLaf%(_Nc}E`q=BXHMS(Os{!g%(|&tTDIczE_# z5y%wjCp9S?&*8bS3imJi_9_COC)-_;6D9~8Om@?U2PGQpM^7LKG7Q~(AoSRgP#tZfVDF_zr;_U*!F9qsbVQ@un9O2>T4M5tr0B~~v_@a=w^8h510a#=L z;8+9zhV}57uajb+9DbZm1G`_NqOuKN`bQ2fw9A*v*Kdb_E-SA`?2 z)OFIY-%uD`JZUZg?D4lHtNegKgWr!1m%hOpu5`R+bZ2K#&)*R-7ElKYo0$0xYxIL8 zLg%u|4oZixz}ILB-@aS4=XOe)z!VL6@?dX{LW^YCPjKtyw44)xT=H;h(fmFr>R?p%r5*}W z7_bo0drVDRq9V9QL4_!dazughK6t}tVVvBq={T0+3(1zmb>f+|;{D%J?^xnZcqio5 z%H?@L+L-CIdO=x6QrALL9&PwvjrZi5NS)1e<*%V8ntw~S2PF}zH}B5f_DHyB=I3m@ z_;^TpN|sesCU}qxQ`~jIwF>#8wGvxg9kdMT$}us8BM&W>OzZ|ry2BB)+UY*_yH+&L zl_=Jy9BNzIZs}D~Yv_H%HPjVGNV=xT3xpIW!Np1F^G#9Y8X zl)c_V1(DhYu-v%H3-m&n%M_}}c{E5Wu+6*>R24gW_A7$(U=9D|H$r;;;@o zJ)c_CmVf9l*;4SyJ}E{+4)}^C>SIJ*_bul7OJ{v&0oO>jG(5xzYP0$I%*YH|Mwu#r zubNW5VZ9^X#Phw<;?=^G?Kg&C)^x1FVsKGZ*n+{C1znj~YHSP?6PS(k5e9qGvS4X* z=1kA_27(iV65a(i+Sicmd@Vzf^2@*Wed-`aYQ~em=-h%Pu`gHfz)&@$hpr<&mNO={ zl^kI0HP0wTbbh{d(>5a#;zT2_=ppef?;D4;2^}&kZjB^yl%LBJ;|> zkLc)JEg*5rpQ;_)w?PnKynWtv!@ z>}+am{@(g$KKM+e$ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/mih_ui/android/build/ios/SourcePackages/firebase_auth-6.5.4/example/macos/Runner/Configs/AppInfo.xcconfig b/mih_ui/android/build/ios/SourcePackages/firebase_auth-6.5.4/example/macos/Runner/Configs/AppInfo.xcconfig new file mode 100644 index 00000000..f653d202 --- /dev/null +++ b/mih_ui/android/build/ios/SourcePackages/firebase_auth-6.5.4/example/macos/Runner/Configs/AppInfo.xcconfig @@ -0,0 +1,14 @@ +// Application-level settings for the Runner target. +// +// This may be replaced with something auto-generated from metadata (e.g., pubspec.yaml) in the +// future. If not, the values below would default to using the project name when this becomes a +// 'flutter create' template. + +// The application's name. By default this is also the title of the Flutter window. +PRODUCT_NAME = example + +// The application's bundle identifier +PRODUCT_BUNDLE_IDENTIFIER = io.flutter.plugins.example + +// The copyright displayed in application information +PRODUCT_COPYRIGHT = Copyright © 2020 io.flutter.plugins. All rights reserved. diff --git a/mih_ui/android/build/ios/SourcePackages/firebase_auth-6.5.4/example/macos/Runner/Configs/Debug.xcconfig b/mih_ui/android/build/ios/SourcePackages/firebase_auth-6.5.4/example/macos/Runner/Configs/Debug.xcconfig new file mode 100644 index 00000000..36b0fd94 --- /dev/null +++ b/mih_ui/android/build/ios/SourcePackages/firebase_auth-6.5.4/example/macos/Runner/Configs/Debug.xcconfig @@ -0,0 +1,2 @@ +#include "../../Flutter/Flutter-Debug.xcconfig" +#include "Warnings.xcconfig" diff --git a/mih_ui/android/build/ios/SourcePackages/firebase_auth-6.5.4/example/macos/Runner/Configs/Release.xcconfig b/mih_ui/android/build/ios/SourcePackages/firebase_auth-6.5.4/example/macos/Runner/Configs/Release.xcconfig new file mode 100644 index 00000000..dff4f495 --- /dev/null +++ b/mih_ui/android/build/ios/SourcePackages/firebase_auth-6.5.4/example/macos/Runner/Configs/Release.xcconfig @@ -0,0 +1,2 @@ +#include "../../Flutter/Flutter-Release.xcconfig" +#include "Warnings.xcconfig" diff --git a/mih_ui/android/build/ios/SourcePackages/firebase_auth-6.5.4/example/macos/Runner/Configs/Warnings.xcconfig b/mih_ui/android/build/ios/SourcePackages/firebase_auth-6.5.4/example/macos/Runner/Configs/Warnings.xcconfig new file mode 100644 index 00000000..42bcbf47 --- /dev/null +++ b/mih_ui/android/build/ios/SourcePackages/firebase_auth-6.5.4/example/macos/Runner/Configs/Warnings.xcconfig @@ -0,0 +1,13 @@ +WARNING_CFLAGS = -Wall -Wconditional-uninitialized -Wnullable-to-nonnull-conversion -Wmissing-method-return-type -Woverlength-strings +GCC_WARN_UNDECLARED_SELECTOR = YES +CLANG_UNDEFINED_BEHAVIOR_SANITIZER_NULLABILITY = YES +CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE +CLANG_WARN__DUPLICATE_METHOD_MATCH = YES +CLANG_WARN_PRAGMA_PACK = YES +CLANG_WARN_STRICT_PROTOTYPES = YES +CLANG_WARN_COMMA = YES +GCC_WARN_STRICT_SELECTOR_MATCH = YES +CLANG_WARN_OBJC_REPEATED_USE_OF_WEAK = YES +CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES +GCC_WARN_SHADOW = YES +CLANG_WARN_UNREACHABLE_CODE = YES diff --git a/mih_ui/android/build/ios/SourcePackages/firebase_auth-6.5.4/example/macos/Runner/DebugProfile.entitlements b/mih_ui/android/build/ios/SourcePackages/firebase_auth-6.5.4/example/macos/Runner/DebugProfile.entitlements new file mode 100644 index 00000000..c34fc0a4 --- /dev/null +++ b/mih_ui/android/build/ios/SourcePackages/firebase_auth-6.5.4/example/macos/Runner/DebugProfile.entitlements @@ -0,0 +1,18 @@ + + + + + com.apple.developer.applesignin + + Default + + com.apple.security.app-sandbox + + com.apple.security.cs.allow-jit + + com.apple.security.network.client + + com.apple.security.network.server + + + diff --git a/mih_ui/android/build/ios/SourcePackages/firebase_auth-6.5.4/example/macos/Runner/GoogleService-Info.plist b/mih_ui/android/build/ios/SourcePackages/firebase_auth-6.5.4/example/macos/Runner/GoogleService-Info.plist new file mode 100644 index 00000000..f325ead9 --- /dev/null +++ b/mih_ui/android/build/ios/SourcePackages/firebase_auth-6.5.4/example/macos/Runner/GoogleService-Info.plist @@ -0,0 +1,38 @@ + + + + + CLIENT_ID + 406099696497-134k3722m01rtrsklhf3b7k8sqa5r7in.apps.googleusercontent.com + REVERSED_CLIENT_ID + com.googleusercontent.apps.406099696497-134k3722m01rtrsklhf3b7k8sqa5r7in + ANDROID_CLIENT_ID + 406099696497-17qn06u8a0dc717u8ul7s49ampk13lul.apps.googleusercontent.com + API_KEY + AIzaSyDooSUGSf63Ghq02_iIhtnmwMDs4HlWS6c + GCM_SENDER_ID + 406099696497 + PLIST_VERSION + 1 + BUNDLE_ID + io.flutter.plugins.firebase.auth.example + PROJECT_ID + flutterfire-e2e-tests + STORAGE_BUCKET + flutterfire-e2e-tests.appspot.com + IS_ADS_ENABLED + + IS_ANALYTICS_ENABLED + + IS_APPINVITE_ENABLED + + IS_GCM_ENABLED + + IS_SIGNIN_ENABLED + + GOOGLE_APP_ID + 1:406099696497:ios:58cbc26aca8e5cf83574d0 + DATABASE_URL + https://flutterfire-e2e-tests-default-rtdb.europe-west1.firebasedatabase.app + + \ No newline at end of file diff --git a/mih_ui/android/build/ios/SourcePackages/firebase_auth-6.5.4/example/macos/Runner/Info.plist b/mih_ui/android/build/ios/SourcePackages/firebase_auth-6.5.4/example/macos/Runner/Info.plist new file mode 100644 index 00000000..de633ff2 --- /dev/null +++ b/mih_ui/android/build/ios/SourcePackages/firebase_auth-6.5.4/example/macos/Runner/Info.plist @@ -0,0 +1,48 @@ + + + + + CFBundleDevelopmentRegion + $(DEVELOPMENT_LANGUAGE) + CFBundleExecutable + $(EXECUTABLE_NAME) + CFBundleIconFile + + CFBundleIdentifier + $(PRODUCT_BUNDLE_IDENTIFIER) + CFBundleInfoDictionaryVersion + 6.0 + CFBundleName + $(PRODUCT_NAME) + CFBundlePackageType + APPL + CFBundleShortVersionString + $(FLUTTER_BUILD_NAME) + CFBundleURLTypes + + + CFBundleTypeRole + Editor + CFBundleURLSchemes + + com.googleusercontent.apps.448618578101-ja1be10uicsa2dvss16gh4hkqks0vq61 + + + + CFBundleVersion + $(FLUTTER_BUILD_NUMBER) + LSMinimumSystemVersion + $(MACOSX_DEPLOYMENT_TARGET) + NSAppTransportSecurity + + NSAllowsArbitraryLoads + + + NSHumanReadableCopyright + $(PRODUCT_COPYRIGHT) + NSMainNibFile + MainMenu + NSPrincipalClass + NSApplication + + diff --git a/mih_ui/android/build/ios/SourcePackages/firebase_auth-6.5.4/example/macos/Runner/MainFlutterWindow.swift b/mih_ui/android/build/ios/SourcePackages/firebase_auth-6.5.4/example/macos/Runner/MainFlutterWindow.swift new file mode 100644 index 00000000..2722837e --- /dev/null +++ b/mih_ui/android/build/ios/SourcePackages/firebase_auth-6.5.4/example/macos/Runner/MainFlutterWindow.swift @@ -0,0 +1,15 @@ +import Cocoa +import FlutterMacOS + +class MainFlutterWindow: NSWindow { + override func awakeFromNib() { + let flutterViewController = FlutterViewController.init() + let windowFrame = self.frame + self.contentViewController = flutterViewController + self.setFrame(windowFrame, display: true) + + RegisterGeneratedPlugins(registry: flutterViewController) + + super.awakeFromNib() + } +} diff --git a/mih_ui/android/build/ios/SourcePackages/firebase_auth-6.5.4/example/macos/Runner/Release.entitlements b/mih_ui/android/build/ios/SourcePackages/firebase_auth-6.5.4/example/macos/Runner/Release.entitlements new file mode 100644 index 00000000..cd2171f4 --- /dev/null +++ b/mih_ui/android/build/ios/SourcePackages/firebase_auth-6.5.4/example/macos/Runner/Release.entitlements @@ -0,0 +1,14 @@ + + + + + com.apple.developer.applesignin + + Default + + com.apple.security.app-sandbox + + com.apple.security.network.client + + + diff --git a/mih_ui/android/build/ios/SourcePackages/firebase_auth-6.5.4/example/macos/firebase_app_id_file.json b/mih_ui/android/build/ios/SourcePackages/firebase_auth-6.5.4/example/macos/firebase_app_id_file.json new file mode 100644 index 00000000..eaca8edd --- /dev/null +++ b/mih_ui/android/build/ios/SourcePackages/firebase_auth-6.5.4/example/macos/firebase_app_id_file.json @@ -0,0 +1,7 @@ +{ + "file_generated_by": "FlutterFire CLI", + "purpose": "FirebaseAppID & ProjectID for this Firebase app in this directory", + "GOOGLE_APP_ID": "1:406099696497:ios:58cbc26aca8e5cf83574d0", + "FIREBASE_PROJECT_ID": "flutterfire-e2e-tests", + "GCM_SENDER_ID": "406099696497" +} \ No newline at end of file diff --git a/mih_ui/android/build/ios/SourcePackages/firebase_auth-6.5.4/example/pubspec.yaml b/mih_ui/android/build/ios/SourcePackages/firebase_auth-6.5.4/example/pubspec.yaml new file mode 100644 index 00000000..5068e961 --- /dev/null +++ b/mih_ui/android/build/ios/SourcePackages/firebase_auth-6.5.4/example/pubspec.yaml @@ -0,0 +1,26 @@ +name: firebase_auth_example +description: Demonstrates how to use the firebase_auth plugin. +resolution: workspace + +environment: + sdk: '^3.6.0' + flutter: '>=3.27.0' + +dependencies: + barcode_widget: ^2.0.4 + firebase_auth: ^6.5.4 + firebase_core: ^4.11.0 + firebase_messaging: ^16.4.1 + flutter: + sdk: flutter + flutter_facebook_auth: ^7.1.5 + flutter_signin_button: ^2.0.0 + font_awesome_flutter: ^10.8.0 + google_sign_in: ^6.1.0 + google_sign_in_dartio: ^0.3.0 + +dev_dependencies: + http: ^1.0.0 + +flutter: + uses-material-design: true diff --git a/mih_ui/android/build/ios/SourcePackages/firebase_auth-6.5.4/example/web/favicon.png b/mih_ui/android/build/ios/SourcePackages/firebase_auth-6.5.4/example/web/favicon.png new file mode 100644 index 0000000000000000000000000000000000000000..8aaa46ac1ae21512746f852a42ba87e4165dfdd1 GIT binary patch literal 917 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`jKx9jP7LeL$-D$|I14-?iy0X7 zltGxWVyS%@P(fs7NJL45ua8x7ey(0(N`6wRUPW#JP&EUCO@$SZnVVXYs8ErclUHn2 zVXFjIVFhG^g!Ppaz)DK8ZIvQ?0~DO|i&7O#^-S~(l1AfjnEK zjFOT9D}DX)@^Za$W4-*MbbUihOG|wNBYh(yU7!lx;>x^|#0uTKVr7USFmqf|i<65o z3raHc^AtelCMM;Vme?vOfh>Xph&xL%(-1c06+^uR^q@XSM&D4+Kp$>4P^%3{)XKjo zGZknv$b36P8?Z_gF{nK@`XI}Z90TzwSQO}0J1!f2c(B=V`5aP@1P1a|PZ!4!3&Gl8 zTYqUsf!gYFyJnXpu0!n&N*SYAX-%d(5gVjrHJWqXQshj@!Zm{!01WsQrH~9=kTxW#6SvuapgMqt>$=j#%eyGrQzr zP{L-3gsMA^$I1&gsBAEL+vxi1*Igl=8#8`5?A-T5=z-sk46WA1IUT)AIZHx1rdUrf zVJrJn<74DDw`j)Ki#gt}mIT-Q`XRa2-jQXQoI%w`nb|XblvzK${ZzlV)m-XcwC(od z71_OEC5Bt9GEXosOXaPTYOia#R4ID2TiU~`zVMl08TV_C%DnU4^+HE>9(CE4D6?Fz oujB08i7adh9xk7*FX66dWH6F5TM;?E2b5PlUHx3vIVCg!0Dx9vYXATM literal 0 HcmV?d00001 diff --git a/mih_ui/android/build/ios/SourcePackages/firebase_auth-6.5.4/example/web/icons/Icon-192.png b/mih_ui/android/build/ios/SourcePackages/firebase_auth-6.5.4/example/web/icons/Icon-192.png new file mode 100644 index 0000000000000000000000000000000000000000..b749bfef07473333cf1dd31e9eed89862a5d52aa GIT binary patch literal 5292 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 literal 0 HcmV?d00001 diff --git a/mih_ui/android/build/ios/SourcePackages/firebase_auth-6.5.4/example/web/icons/Icon-512.png b/mih_ui/android/build/ios/SourcePackages/firebase_auth-6.5.4/example/web/icons/Icon-512.png new file mode 100644 index 0000000000000000000000000000000000000000..88cfd48dff1169879ba46840804b412fe02fefd6 GIT binary patch literal 8252 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 literal 0 HcmV?d00001 diff --git a/mih_ui/android/build/ios/SourcePackages/firebase_auth-6.5.4/example/web/icons/Icon-maskable-192.png b/mih_ui/android/build/ios/SourcePackages/firebase_auth-6.5.4/example/web/icons/Icon-maskable-192.png new file mode 100644 index 0000000000000000000000000000000000000000..eb9b4d76e525556d5d89141648c724331630325d GIT binary patch literal 5594 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 X>c!)3PgKfL&lX^$Z>Cpu&6)6jvi^Z! literal 0 HcmV?d00001 diff --git a/mih_ui/android/build/ios/SourcePackages/firebase_auth-6.5.4/example/web/icons/Icon-maskable-512.png b/mih_ui/android/build/ios/SourcePackages/firebase_auth-6.5.4/example/web/icons/Icon-maskable-512.png new file mode 100644 index 0000000000000000000000000000000000000000..d69c56691fbdb0b7efa65097c7cc1edac12a6d3e GIT binary patch literal 20998 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 MPgg&ebxsLQ025IeI{*Lx literal 0 HcmV?d00001 diff --git a/mih_ui/android/build/ios/SourcePackages/firebase_auth-6.5.4/example/web/index.html b/mih_ui/android/build/ios/SourcePackages/firebase_auth-6.5.4/example/web/index.html new file mode 100644 index 00000000..0168402a --- /dev/null +++ b/mih_ui/android/build/ios/SourcePackages/firebase_auth-6.5.4/example/web/index.html @@ -0,0 +1,38 @@ + + + + + + + + + + + + + + + + + + + + flutterfire_auth + + + + + + diff --git a/mih_ui/android/build/ios/SourcePackages/firebase_auth-6.5.4/example/web/manifest.json b/mih_ui/android/build/ios/SourcePackages/firebase_auth-6.5.4/example/web/manifest.json new file mode 100644 index 00000000..88044af3 --- /dev/null +++ b/mih_ui/android/build/ios/SourcePackages/firebase_auth-6.5.4/example/web/manifest.json @@ -0,0 +1,35 @@ +{ + "name": "flutterfire_auth", + "short_name": "flutterfire_auth", + "start_url": ".", + "display": "standalone", + "background_color": "#0175C2", + "theme_color": "#0175C2", + "description": "A new Flutter project.", + "orientation": "portrait-primary", + "prefer_related_applications": false, + "icons": [ + { + "src": "icons/Icon-192.png", + "sizes": "192x192", + "type": "image/png" + }, + { + "src": "icons/Icon-512.png", + "sizes": "512x512", + "type": "image/png" + }, + { + "src": "icons/Icon-maskable-192.png", + "sizes": "192x192", + "type": "image/png", + "purpose": "maskable" + }, + { + "src": "icons/Icon-maskable-512.png", + "sizes": "512x512", + "type": "image/png", + "purpose": "maskable" + } + ] +} diff --git a/mih_ui/android/build/ios/SourcePackages/firebase_auth-6.5.4/example/windows/CMakeLists.txt b/mih_ui/android/build/ios/SourcePackages/firebase_auth-6.5.4/example/windows/CMakeLists.txt new file mode 100644 index 00000000..13786727 --- /dev/null +++ b/mih_ui/android/build/ios/SourcePackages/firebase_auth-6.5.4/example/windows/CMakeLists.txt @@ -0,0 +1,102 @@ +# Project-level configuration. +cmake_minimum_required(VERSION 3.14) +project(example LANGUAGES CXX) + +# The name of the executable created for the application. Change this to change +# the on-disk name of your application. +set(BINARY_NAME "example") + +# Explicitly opt in to modern CMake behaviors to avoid warnings with recent +# versions of CMake. +cmake_policy(SET CMP0063 NEW) + +# Define build configuration option. +get_property(IS_MULTICONFIG GLOBAL PROPERTY GENERATOR_IS_MULTI_CONFIG) +if(IS_MULTICONFIG) + set(CMAKE_CONFIGURATION_TYPES "Debug;Profile;Release" + CACHE STRING "" FORCE) +else() + if(NOT CMAKE_BUILD_TYPE AND NOT CMAKE_CONFIGURATION_TYPES) + set(CMAKE_BUILD_TYPE "Debug" CACHE + STRING "Flutter build mode" FORCE) + set_property(CACHE CMAKE_BUILD_TYPE PROPERTY STRINGS + "Debug" "Profile" "Release") + endif() +endif() +# Define settings for the Profile build mode. +set(CMAKE_EXE_LINKER_FLAGS_PROFILE "${CMAKE_EXE_LINKER_FLAGS_RELEASE}") +set(CMAKE_SHARED_LINKER_FLAGS_PROFILE "${CMAKE_SHARED_LINKER_FLAGS_RELEASE}") +set(CMAKE_C_FLAGS_PROFILE "${CMAKE_C_FLAGS_RELEASE}") +set(CMAKE_CXX_FLAGS_PROFILE "${CMAKE_CXX_FLAGS_RELEASE}") + +# Use Unicode for all projects. +add_definitions(-DUNICODE -D_UNICODE) + +# Compilation settings that should be applied to most targets. +# +# Be cautious about adding new options here, as plugins use this function by +# default. In most cases, you should add new options to specific targets instead +# of modifying this function. +function(APPLY_STANDARD_SETTINGS TARGET) + target_compile_features(${TARGET} PUBLIC cxx_std_17) + target_compile_options(${TARGET} PRIVATE /W4 /WX /wd"4100") + target_compile_options(${TARGET} PRIVATE /EHsc) + target_compile_definitions(${TARGET} PRIVATE "_HAS_EXCEPTIONS=0") + target_compile_definitions(${TARGET} PRIVATE "$<$:_DEBUG>") +endfunction() + +# Flutter library and tool build rules. +set(FLUTTER_MANAGED_DIR "${CMAKE_CURRENT_SOURCE_DIR}/flutter") +add_subdirectory(${FLUTTER_MANAGED_DIR}) + +# Application build; see runner/CMakeLists.txt. +add_subdirectory("runner") + + +# Generated plugin build rules, which manage building the plugins and adding +# them to the application. +include(flutter/generated_plugins.cmake) + + +# === Installation === +# Support files are copied into place next to the executable, so that it can +# run in place. This is done instead of making a separate bundle (as on Linux) +# so that building and running from within Visual Studio will work. +set(BUILD_BUNDLE_DIR "$") +# Make the "install" step default, as it's required to run. +set(CMAKE_VS_INCLUDE_INSTALL_TO_DEFAULT_BUILD 1) +if(CMAKE_INSTALL_PREFIX_INITIALIZED_TO_DEFAULT) + set(CMAKE_INSTALL_PREFIX "${BUILD_BUNDLE_DIR}" CACHE PATH "..." FORCE) +endif() + +set(INSTALL_BUNDLE_DATA_DIR "${CMAKE_INSTALL_PREFIX}/data") +set(INSTALL_BUNDLE_LIB_DIR "${CMAKE_INSTALL_PREFIX}") + +install(TARGETS ${BINARY_NAME} RUNTIME DESTINATION "${CMAKE_INSTALL_PREFIX}" + COMPONENT Runtime) + +install(FILES "${FLUTTER_ICU_DATA_FILE}" DESTINATION "${INSTALL_BUNDLE_DATA_DIR}" + COMPONENT Runtime) + +install(FILES "${FLUTTER_LIBRARY}" DESTINATION "${INSTALL_BUNDLE_LIB_DIR}" + COMPONENT Runtime) + +if(PLUGIN_BUNDLED_LIBRARIES) + install(FILES "${PLUGIN_BUNDLED_LIBRARIES}" + DESTINATION "${INSTALL_BUNDLE_LIB_DIR}" + COMPONENT Runtime) +endif() + +# Fully re-copy the assets directory on each build to avoid having stale files +# from a previous install. +set(FLUTTER_ASSET_DIR_NAME "flutter_assets") +install(CODE " + file(REMOVE_RECURSE \"${INSTALL_BUNDLE_DATA_DIR}/${FLUTTER_ASSET_DIR_NAME}\") + " COMPONENT Runtime) +install(DIRECTORY "${PROJECT_BUILD_DIR}/${FLUTTER_ASSET_DIR_NAME}" + DESTINATION "${INSTALL_BUNDLE_DATA_DIR}" COMPONENT Runtime) + +# Install the AOT library on non-Debug builds only. +install(FILES "${AOT_LIBRARY}" DESTINATION "${INSTALL_BUNDLE_DATA_DIR}" + CONFIGURATIONS Profile;Release + COMPONENT Runtime) diff --git a/mih_ui/android/build/ios/SourcePackages/firebase_auth-6.5.4/example/windows/flutter/CMakeLists.txt b/mih_ui/android/build/ios/SourcePackages/firebase_auth-6.5.4/example/windows/flutter/CMakeLists.txt new file mode 100644 index 00000000..903f4899 --- /dev/null +++ b/mih_ui/android/build/ios/SourcePackages/firebase_auth-6.5.4/example/windows/flutter/CMakeLists.txt @@ -0,0 +1,109 @@ +# This file controls Flutter-level build steps. It should not be edited. +cmake_minimum_required(VERSION 3.14) + +set(EPHEMERAL_DIR "${CMAKE_CURRENT_SOURCE_DIR}/ephemeral") + +# Configuration provided via flutter tool. +include(${EPHEMERAL_DIR}/generated_config.cmake) + +# TODO: Move the rest of this into files in ephemeral. See +# https://github.com/flutter/flutter/issues/57146. +set(WRAPPER_ROOT "${EPHEMERAL_DIR}/cpp_client_wrapper") + +# Set fallback configurations for older versions of the flutter tool. +if (NOT DEFINED FLUTTER_TARGET_PLATFORM) + set(FLUTTER_TARGET_PLATFORM "windows-x64") +endif() + +# === Flutter Library === +set(FLUTTER_LIBRARY "${EPHEMERAL_DIR}/flutter_windows.dll") + +# Published to parent scope for install step. +set(FLUTTER_LIBRARY ${FLUTTER_LIBRARY} PARENT_SCOPE) +set(FLUTTER_ICU_DATA_FILE "${EPHEMERAL_DIR}/icudtl.dat" PARENT_SCOPE) +set(PROJECT_BUILD_DIR "${PROJECT_DIR}/build/" PARENT_SCOPE) +set(AOT_LIBRARY "${PROJECT_DIR}/build/windows/app.so" PARENT_SCOPE) + +list(APPEND FLUTTER_LIBRARY_HEADERS + "flutter_export.h" + "flutter_windows.h" + "flutter_messenger.h" + "flutter_plugin_registrar.h" + "flutter_texture_registrar.h" +) +list(TRANSFORM FLUTTER_LIBRARY_HEADERS PREPEND "${EPHEMERAL_DIR}/") +add_library(flutter INTERFACE) +target_include_directories(flutter INTERFACE + "${EPHEMERAL_DIR}" +) +target_link_libraries(flutter INTERFACE "${FLUTTER_LIBRARY}.lib") +add_dependencies(flutter flutter_assemble) + +# === Wrapper === +list(APPEND CPP_WRAPPER_SOURCES_CORE + "core_implementations.cc" + "standard_codec.cc" +) +list(TRANSFORM CPP_WRAPPER_SOURCES_CORE PREPEND "${WRAPPER_ROOT}/") +list(APPEND CPP_WRAPPER_SOURCES_PLUGIN + "plugin_registrar.cc" +) +list(TRANSFORM CPP_WRAPPER_SOURCES_PLUGIN PREPEND "${WRAPPER_ROOT}/") +list(APPEND CPP_WRAPPER_SOURCES_APP + "flutter_engine.cc" + "flutter_view_controller.cc" +) +list(TRANSFORM CPP_WRAPPER_SOURCES_APP PREPEND "${WRAPPER_ROOT}/") + +# Wrapper sources needed for a plugin. +add_library(flutter_wrapper_plugin STATIC + ${CPP_WRAPPER_SOURCES_CORE} + ${CPP_WRAPPER_SOURCES_PLUGIN} +) +apply_standard_settings(flutter_wrapper_plugin) +set_target_properties(flutter_wrapper_plugin PROPERTIES + POSITION_INDEPENDENT_CODE ON) +set_target_properties(flutter_wrapper_plugin PROPERTIES + CXX_VISIBILITY_PRESET hidden) +target_link_libraries(flutter_wrapper_plugin PUBLIC flutter) +target_include_directories(flutter_wrapper_plugin PUBLIC + "${WRAPPER_ROOT}/include" +) +add_dependencies(flutter_wrapper_plugin flutter_assemble) + +# Wrapper sources needed for the runner. +add_library(flutter_wrapper_app STATIC + ${CPP_WRAPPER_SOURCES_CORE} + ${CPP_WRAPPER_SOURCES_APP} +) +apply_standard_settings(flutter_wrapper_app) +target_link_libraries(flutter_wrapper_app PUBLIC flutter) +target_include_directories(flutter_wrapper_app PUBLIC + "${WRAPPER_ROOT}/include" +) +add_dependencies(flutter_wrapper_app flutter_assemble) + +# === Flutter tool backend === +# _phony_ is a non-existent file to force this command to run every time, +# since currently there's no way to get a full input/output list from the +# flutter tool. +set(PHONY_OUTPUT "${CMAKE_CURRENT_BINARY_DIR}/_phony_") +set_source_files_properties("${PHONY_OUTPUT}" PROPERTIES SYMBOLIC TRUE) +add_custom_command( + OUTPUT ${FLUTTER_LIBRARY} ${FLUTTER_LIBRARY_HEADERS} + ${CPP_WRAPPER_SOURCES_CORE} ${CPP_WRAPPER_SOURCES_PLUGIN} + ${CPP_WRAPPER_SOURCES_APP} + ${PHONY_OUTPUT} + COMMAND ${CMAKE_COMMAND} -E env + ${FLUTTER_TOOL_ENVIRONMENT} + "${FLUTTER_ROOT}/packages/flutter_tools/bin/tool_backend.bat" + ${FLUTTER_TARGET_PLATFORM} $ + VERBATIM +) +add_custom_target(flutter_assemble DEPENDS + "${FLUTTER_LIBRARY}" + ${FLUTTER_LIBRARY_HEADERS} + ${CPP_WRAPPER_SOURCES_CORE} + ${CPP_WRAPPER_SOURCES_PLUGIN} + ${CPP_WRAPPER_SOURCES_APP} +) diff --git a/mih_ui/android/build/ios/SourcePackages/firebase_auth-6.5.4/example/windows/runner/CMakeLists.txt b/mih_ui/android/build/ios/SourcePackages/firebase_auth-6.5.4/example/windows/runner/CMakeLists.txt new file mode 100644 index 00000000..394917c0 --- /dev/null +++ b/mih_ui/android/build/ios/SourcePackages/firebase_auth-6.5.4/example/windows/runner/CMakeLists.txt @@ -0,0 +1,40 @@ +cmake_minimum_required(VERSION 3.14) +project(runner LANGUAGES CXX) + +# Define the application target. To change its name, change BINARY_NAME in the +# top-level CMakeLists.txt, not the value here, or `flutter run` will no longer +# work. +# +# Any new source files that you add to the application should be added here. +add_executable(${BINARY_NAME} WIN32 + "flutter_window.cpp" + "main.cpp" + "utils.cpp" + "win32_window.cpp" + "${FLUTTER_MANAGED_DIR}/generated_plugin_registrant.cc" + "Runner.rc" + "runner.exe.manifest" +) + +# Apply the standard set of build settings. This can be removed for applications +# that need different build settings. +apply_standard_settings(${BINARY_NAME}) + +# Add preprocessor definitions for the build version. +target_compile_definitions(${BINARY_NAME} PRIVATE "FLUTTER_VERSION=\"${FLUTTER_VERSION}\"") +target_compile_definitions(${BINARY_NAME} PRIVATE "FLUTTER_VERSION_MAJOR=${FLUTTER_VERSION_MAJOR}") +target_compile_definitions(${BINARY_NAME} PRIVATE "FLUTTER_VERSION_MINOR=${FLUTTER_VERSION_MINOR}") +target_compile_definitions(${BINARY_NAME} PRIVATE "FLUTTER_VERSION_PATCH=${FLUTTER_VERSION_PATCH}") +target_compile_definitions(${BINARY_NAME} PRIVATE "FLUTTER_VERSION_BUILD=${FLUTTER_VERSION_BUILD}") + +# Disable Windows macros that collide with C++ standard library functions. +target_compile_definitions(${BINARY_NAME} PRIVATE "NOMINMAX") + +# Add dependency libraries and include directories. Add any application-specific +# dependencies here. +target_link_libraries(${BINARY_NAME} PRIVATE flutter flutter_wrapper_app) +target_link_libraries(${BINARY_NAME} PRIVATE "dwmapi.lib") +target_include_directories(${BINARY_NAME} PRIVATE "${CMAKE_SOURCE_DIR}") + +# Run the Flutter tool portions of the build. This must not be removed. +add_dependencies(${BINARY_NAME} flutter_assemble) diff --git a/mih_ui/android/build/ios/SourcePackages/firebase_auth-6.5.4/example/windows/runner/Runner.rc b/mih_ui/android/build/ios/SourcePackages/firebase_auth-6.5.4/example/windows/runner/Runner.rc new file mode 100644 index 00000000..4477b011 --- /dev/null +++ b/mih_ui/android/build/ios/SourcePackages/firebase_auth-6.5.4/example/windows/runner/Runner.rc @@ -0,0 +1,121 @@ +// Microsoft Visual C++ generated resource script. +// +#pragma code_page(65001) +#include "resource.h" + +#define APSTUDIO_READONLY_SYMBOLS +///////////////////////////////////////////////////////////////////////////// +// +// Generated from the TEXTINCLUDE 2 resource. +// +#include "winres.h" + +///////////////////////////////////////////////////////////////////////////// +#undef APSTUDIO_READONLY_SYMBOLS + +///////////////////////////////////////////////////////////////////////////// +// English (United States) resources + +#if !defined(AFX_RESOURCE_DLL) || defined(AFX_TARG_ENU) +LANGUAGE LANG_ENGLISH, SUBLANG_ENGLISH_US + +#ifdef APSTUDIO_INVOKED +///////////////////////////////////////////////////////////////////////////// +// +// TEXTINCLUDE +// + +1 TEXTINCLUDE +BEGIN + "resource.h\0" +END + +2 TEXTINCLUDE +BEGIN + "#include ""winres.h""\r\n" + "\0" +END + +3 TEXTINCLUDE +BEGIN + "\r\n" + "\0" +END + +#endif // APSTUDIO_INVOKED + + +///////////////////////////////////////////////////////////////////////////// +// +// Icon +// + +// Icon with lowest ID value placed first to ensure application icon +// remains consistent on all systems. +IDI_APP_ICON ICON "resources\\app_icon.ico" + + +///////////////////////////////////////////////////////////////////////////// +// +// Version +// + +#if defined(FLUTTER_VERSION_MAJOR) && defined(FLUTTER_VERSION_MINOR) && defined(FLUTTER_VERSION_PATCH) && defined(FLUTTER_VERSION_BUILD) +#define VERSION_AS_NUMBER FLUTTER_VERSION_MAJOR,FLUTTER_VERSION_MINOR,FLUTTER_VERSION_PATCH,FLUTTER_VERSION_BUILD +#else +#define VERSION_AS_NUMBER 1,0,0,0 +#endif + +#if defined(FLUTTER_VERSION) +#define VERSION_AS_STRING FLUTTER_VERSION +#else +#define VERSION_AS_STRING "1.0.0" +#endif + +VS_VERSION_INFO VERSIONINFO + FILEVERSION VERSION_AS_NUMBER + PRODUCTVERSION VERSION_AS_NUMBER + FILEFLAGSMASK VS_FFI_FILEFLAGSMASK +#ifdef _DEBUG + FILEFLAGS VS_FF_DEBUG +#else + FILEFLAGS 0x0L +#endif + FILEOS VOS__WINDOWS32 + FILETYPE VFT_APP + FILESUBTYPE 0x0L +BEGIN + BLOCK "StringFileInfo" + BEGIN + BLOCK "040904e4" + BEGIN + VALUE "CompanyName", "io.flutter.plugins.firebase.auth" "\0" + VALUE "FileDescription", "example" "\0" + VALUE "FileVersion", VERSION_AS_STRING "\0" + VALUE "InternalName", "example" "\0" + VALUE "LegalCopyright", "Copyright (C) 2023 io.flutter.plugins.firebase.auth. All rights reserved." "\0" + VALUE "OriginalFilename", "example.exe" "\0" + VALUE "ProductName", "example" "\0" + VALUE "ProductVersion", VERSION_AS_STRING "\0" + END + END + BLOCK "VarFileInfo" + BEGIN + VALUE "Translation", 0x409, 1252 + END +END + +#endif // English (United States) resources +///////////////////////////////////////////////////////////////////////////// + + + +#ifndef APSTUDIO_INVOKED +///////////////////////////////////////////////////////////////////////////// +// +// Generated from the TEXTINCLUDE 3 resource. +// + + +///////////////////////////////////////////////////////////////////////////// +#endif // not APSTUDIO_INVOKED diff --git a/mih_ui/android/build/ios/SourcePackages/firebase_auth-6.5.4/example/windows/runner/flutter_window.cpp b/mih_ui/android/build/ios/SourcePackages/firebase_auth-6.5.4/example/windows/runner/flutter_window.cpp new file mode 100644 index 00000000..227a2489 --- /dev/null +++ b/mih_ui/android/build/ios/SourcePackages/firebase_auth-6.5.4/example/windows/runner/flutter_window.cpp @@ -0,0 +1,68 @@ +// Copyright 2023, the Chromium project authors. Please see the AUTHORS file +// for details. All rights reserved. Use of this source code is governed by a +// BSD-style license that can be found in the LICENSE file. + +#include "flutter_window.h" + +#include + +#include "flutter/generated_plugin_registrant.h" + +FlutterWindow::FlutterWindow(const flutter::DartProject& project) + : project_(project) {} + +FlutterWindow::~FlutterWindow() {} + +bool FlutterWindow::OnCreate() { + if (!Win32Window::OnCreate()) { + return false; + } + + RECT frame = GetClientArea(); + + // The size here must match the window dimensions to avoid unnecessary surface + // creation / destruction in the startup path. + flutter_controller_ = std::make_unique( + frame.right - frame.left, frame.bottom - frame.top, project_); + // Ensure that basic setup of the controller was successful. + if (!flutter_controller_->engine() || !flutter_controller_->view()) { + return false; + } + RegisterPlugins(flutter_controller_->engine()); + SetChildContent(flutter_controller_->view()->GetNativeWindow()); + + flutter_controller_->engine()->SetNextFrameCallback([&]() { this->Show(); }); + + return true; +} + +void FlutterWindow::OnDestroy() { + if (flutter_controller_) { + flutter_controller_ = nullptr; + } + + Win32Window::OnDestroy(); +} + +LRESULT +FlutterWindow::MessageHandler(HWND hwnd, UINT const message, + WPARAM const wparam, + LPARAM const lparam) noexcept { + // Give Flutter, including plugins, an opportunity to handle window messages. + if (flutter_controller_) { + std::optional result = + flutter_controller_->HandleTopLevelWindowProc(hwnd, message, wparam, + lparam); + if (result) { + return *result; + } + } + + switch (message) { + case WM_FONTCHANGE: + flutter_controller_->engine()->ReloadSystemFonts(); + break; + } + + return Win32Window::MessageHandler(hwnd, message, wparam, lparam); +} diff --git a/mih_ui/android/build/ios/SourcePackages/firebase_auth-6.5.4/example/windows/runner/flutter_window.h b/mih_ui/android/build/ios/SourcePackages/firebase_auth-6.5.4/example/windows/runner/flutter_window.h new file mode 100644 index 00000000..2b30f421 --- /dev/null +++ b/mih_ui/android/build/ios/SourcePackages/firebase_auth-6.5.4/example/windows/runner/flutter_window.h @@ -0,0 +1,39 @@ +/* + * Copyright 2023, the Chromium project authors. Please see the AUTHORS file + * for details. All rights reserved. Use of this source code is governed by a + * BSD-style license that can be found in the LICENSE file. + */ + +#ifndef RUNNER_FLUTTER_WINDOW_H_ +#define RUNNER_FLUTTER_WINDOW_H_ + +#include +#include + +#include + +#include "win32_window.h" + +// A window that does nothing but host a Flutter view. +class FlutterWindow : public Win32Window { + public: + // Creates a new FlutterWindow hosting a Flutter view running |project|. + explicit FlutterWindow(const flutter::DartProject& project); + virtual ~FlutterWindow(); + + protected: + // Win32Window: + bool OnCreate() override; + void OnDestroy() override; + LRESULT MessageHandler(HWND window, UINT const message, WPARAM const wparam, + LPARAM const lparam) noexcept override; + + private: + // The project to run. + flutter::DartProject project_; + + // The Flutter instance hosted by this window. + std::unique_ptr flutter_controller_; +}; + +#endif // RUNNER_FLUTTER_WINDOW_H_ diff --git a/mih_ui/android/build/ios/SourcePackages/firebase_auth-6.5.4/example/windows/runner/main.cpp b/mih_ui/android/build/ios/SourcePackages/firebase_auth-6.5.4/example/windows/runner/main.cpp new file mode 100644 index 00000000..7a451dd2 --- /dev/null +++ b/mih_ui/android/build/ios/SourcePackages/firebase_auth-6.5.4/example/windows/runner/main.cpp @@ -0,0 +1,46 @@ +// Copyright 2023, the Chromium project authors. Please see the AUTHORS file +// for details. All rights reserved. Use of this source code is governed by a +// BSD-style license that can be found in the LICENSE file. + +#include +#include +#include + +#include "flutter_window.h" +#include "utils.h" + +int APIENTRY wWinMain(_In_ HINSTANCE instance, _In_opt_ HINSTANCE prev, + _In_ wchar_t* command_line, _In_ int show_command) { + // Attach to console when present (e.g., 'flutter run') or create a + // new console when running with a debugger. + if (!::AttachConsole(ATTACH_PARENT_PROCESS) && ::IsDebuggerPresent()) { + CreateAndAttachConsole(); + } + + // Initialize COM, so that it is available for use in the library and/or + // plugins. + ::CoInitializeEx(nullptr, COINIT_APARTMENTTHREADED); + + flutter::DartProject project(L"data"); + + std::vector command_line_arguments = GetCommandLineArguments(); + + project.set_dart_entrypoint_arguments(std::move(command_line_arguments)); + + FlutterWindow window(project); + Win32Window::Point origin(10, 10); + Win32Window::Size size(1280, 720); + if (!window.Create(L"example", origin, size)) { + return EXIT_FAILURE; + } + window.SetQuitOnClose(true); + + ::MSG msg; + while (::GetMessage(&msg, nullptr, 0, 0)) { + ::TranslateMessage(&msg); + ::DispatchMessage(&msg); + } + + ::CoUninitialize(); + return EXIT_SUCCESS; +} diff --git a/mih_ui/android/build/ios/SourcePackages/firebase_auth-6.5.4/example/windows/runner/resource.h b/mih_ui/android/build/ios/SourcePackages/firebase_auth-6.5.4/example/windows/runner/resource.h new file mode 100644 index 00000000..3b8e4da1 --- /dev/null +++ b/mih_ui/android/build/ios/SourcePackages/firebase_auth-6.5.4/example/windows/runner/resource.h @@ -0,0 +1,22 @@ +/* + * Copyright 2023, the Chromium project authors. Please see the AUTHORS file + * for details. All rights reserved. Use of this source code is governed by a + * BSD-style license that can be found in the LICENSE file. + */ + +//{{NO_DEPENDENCIES}} +// Microsoft Visual C++ generated include file. +// Used by Runner.rc +// +#define IDI_APP_ICON 101 + +// Next default values for new objects +// +#ifdef APSTUDIO_INVOKED +#ifndef APSTUDIO_READONLY_SYMBOLS +#define _APS_NEXT_RESOURCE_VALUE 102 +#define _APS_NEXT_COMMAND_VALUE 40001 +#define _APS_NEXT_CONTROL_VALUE 1001 +#define _APS_NEXT_SYMED_VALUE 101 +#endif +#endif diff --git a/mih_ui/android/build/ios/SourcePackages/firebase_auth-6.5.4/example/windows/runner/resources/app_icon.ico b/mih_ui/android/build/ios/SourcePackages/firebase_auth-6.5.4/example/windows/runner/resources/app_icon.ico new file mode 100644 index 0000000000000000000000000000000000000000..c04e20caf6370ebb9253ad831cc31de4a9c965f6 GIT binary patch literal 33772 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 literal 0 HcmV?d00001 diff --git a/mih_ui/android/build/ios/SourcePackages/firebase_auth-6.5.4/example/windows/runner/runner.exe.manifest b/mih_ui/android/build/ios/SourcePackages/firebase_auth-6.5.4/example/windows/runner/runner.exe.manifest new file mode 100644 index 00000000..a42ea768 --- /dev/null +++ b/mih_ui/android/build/ios/SourcePackages/firebase_auth-6.5.4/example/windows/runner/runner.exe.manifest @@ -0,0 +1,20 @@ + + + + + PerMonitorV2 + + + + + + + + + + + + + + + diff --git a/mih_ui/android/build/ios/SourcePackages/firebase_auth-6.5.4/example/windows/runner/utils.cpp b/mih_ui/android/build/ios/SourcePackages/firebase_auth-6.5.4/example/windows/runner/utils.cpp new file mode 100644 index 00000000..9f01ff8b --- /dev/null +++ b/mih_ui/android/build/ios/SourcePackages/firebase_auth-6.5.4/example/windows/runner/utils.cpp @@ -0,0 +1,69 @@ +// Copyright 2023, the Chromium project authors. Please see the AUTHORS file +// for details. All rights reserved. Use of this source code is governed by a +// BSD-style license that can be found in the LICENSE file. + +#include "utils.h" + +#include +#include +#include +#include + +#include + +void CreateAndAttachConsole() { + if (::AllocConsole()) { + FILE* unused; + if (freopen_s(&unused, "CONOUT$", "w", stdout)) { + _dup2(_fileno(stdout), 1); + } + if (freopen_s(&unused, "CONOUT$", "w", stderr)) { + _dup2(_fileno(stdout), 2); + } + std::ios::sync_with_stdio(); + FlutterDesktopResyncOutputStreams(); + } +} + +std::vector GetCommandLineArguments() { + // Convert the UTF-16 command line arguments to UTF-8 for the Engine to use. + int argc; + wchar_t** argv = ::CommandLineToArgvW(::GetCommandLineW(), &argc); + if (argv == nullptr) { + return std::vector(); + } + + std::vector command_line_arguments; + + // Skip the first argument as it's the binary name. + for (int i = 1; i < argc; i++) { + command_line_arguments.push_back(Utf8FromUtf16(argv[i])); + } + + ::LocalFree(argv); + + return command_line_arguments; +} + +std::string Utf8FromUtf16(const wchar_t* utf16_string) { + if (utf16_string == nullptr) { + return std::string(); + } + int target_length = + ::WideCharToMultiByte(CP_UTF8, WC_ERR_INVALID_CHARS, utf16_string, -1, + nullptr, 0, nullptr, nullptr) - + 1; // remove the trailing null character + int input_length = (int)wcslen(utf16_string); + std::string utf8_string; + if (target_length <= 0 || target_length > utf8_string.max_size()) { + return utf8_string; + } + utf8_string.resize(target_length); + int converted_length = ::WideCharToMultiByte( + CP_UTF8, WC_ERR_INVALID_CHARS, utf16_string, input_length, + utf8_string.data(), target_length, nullptr, nullptr); + if (converted_length == 0) { + return std::string(); + } + return utf8_string; +} diff --git a/mih_ui/android/build/ios/SourcePackages/firebase_auth-6.5.4/example/windows/runner/utils.h b/mih_ui/android/build/ios/SourcePackages/firebase_auth-6.5.4/example/windows/runner/utils.h new file mode 100644 index 00000000..67b5c48b --- /dev/null +++ b/mih_ui/android/build/ios/SourcePackages/firebase_auth-6.5.4/example/windows/runner/utils.h @@ -0,0 +1,25 @@ +/* + * Copyright 2023, the Chromium project authors. Please see the AUTHORS file + * for details. All rights reserved. Use of this source code is governed by a + * BSD-style license that can be found in the LICENSE file. + */ + +#ifndef RUNNER_UTILS_H_ +#define RUNNER_UTILS_H_ + +#include +#include + +// Creates a console for the process, and redirects stdout and stderr to +// it for both the runner and the Flutter library. +void CreateAndAttachConsole(); + +// Takes a null-terminated wchar_t* encoded in UTF-16 and returns a std::string +// encoded in UTF-8. Returns an empty std::string on failure. +std::string Utf8FromUtf16(const wchar_t* utf16_string); + +// Gets the command line arguments passed in as a std::vector, +// encoded in UTF-8. Returns an empty std::vector on failure. +std::vector GetCommandLineArguments(); + +#endif // RUNNER_UTILS_H_ diff --git a/mih_ui/android/build/ios/SourcePackages/firebase_auth-6.5.4/example/windows/runner/win32_window.cpp b/mih_ui/android/build/ios/SourcePackages/firebase_auth-6.5.4/example/windows/runner/win32_window.cpp new file mode 100644 index 00000000..45d150e7 --- /dev/null +++ b/mih_ui/android/build/ios/SourcePackages/firebase_auth-6.5.4/example/windows/runner/win32_window.cpp @@ -0,0 +1,284 @@ +// Copyright 2023, the Chromium project authors. Please see the AUTHORS file +// for details. All rights reserved. Use of this source code is governed by a +// BSD-style license that can be found in the LICENSE file. + +#include "win32_window.h" + +#include +#include + +#include "resource.h" + +namespace { + +/// Window attribute that enables dark mode window decorations. +/// +/// Redefined in case the developer's machine has a Windows SDK older than +/// version 10.0.22000.0. +/// See: +/// https://docs.microsoft.com/windows/win32/api/dwmapi/ne-dwmapi-dwmwindowattribute +#ifndef DWMWA_USE_IMMERSIVE_DARK_MODE +#define DWMWA_USE_IMMERSIVE_DARK_MODE 20 +#endif + +constexpr const wchar_t kWindowClassName[] = L"FLUTTER_RUNNER_WIN32_WINDOW"; + +/// Registry key for app theme preference. +/// +/// A value of 0 indicates apps should use dark mode. A non-zero or missing +/// value indicates apps should use light mode. +constexpr const wchar_t kGetPreferredBrightnessRegKey[] = + L"Software\\Microsoft\\Windows\\CurrentVersion\\Themes\\Personalize"; +constexpr const wchar_t kGetPreferredBrightnessRegValue[] = + L"AppsUseLightTheme"; + +// The number of Win32Window objects that currently exist. +static int g_active_window_count = 0; + +using EnableNonClientDpiScaling = BOOL __stdcall(HWND hwnd); + +// Scale helper to convert logical scaler values to physical using passed in +// scale factor +int Scale(int source, double scale_factor) { + return static_cast(source * scale_factor); +} + +// Dynamically loads the |EnableNonClientDpiScaling| from the User32 module. +// This API is only needed for PerMonitor V1 awareness mode. +void EnableFullDpiSupportIfAvailable(HWND hwnd) { + HMODULE user32_module = LoadLibraryA("User32.dll"); + if (!user32_module) { + return; + } + auto enable_non_client_dpi_scaling = + reinterpret_cast( + GetProcAddress(user32_module, "EnableNonClientDpiScaling")); + if (enable_non_client_dpi_scaling != nullptr) { + enable_non_client_dpi_scaling(hwnd); + } + FreeLibrary(user32_module); +} + +} // namespace + +// Manages the Win32Window's window class registration. +class WindowClassRegistrar { + public: + ~WindowClassRegistrar() = default; + + // Returns the singleton registrar instance. + static WindowClassRegistrar* GetInstance() { + if (!instance_) { + instance_ = new WindowClassRegistrar(); + } + return instance_; + } + + // Returns the name of the window class, registering the class if it hasn't + // previously been registered. + const wchar_t* GetWindowClass(); + + // Unregisters the window class. Should only be called if there are no + // instances of the window. + void UnregisterWindowClass(); + + private: + WindowClassRegistrar() = default; + + static WindowClassRegistrar* instance_; + + bool class_registered_ = false; +}; + +WindowClassRegistrar* WindowClassRegistrar::instance_ = nullptr; + +const wchar_t* WindowClassRegistrar::GetWindowClass() { + if (!class_registered_) { + WNDCLASS window_class{}; + window_class.hCursor = LoadCursor(nullptr, IDC_ARROW); + window_class.lpszClassName = kWindowClassName; + window_class.style = CS_HREDRAW | CS_VREDRAW; + window_class.cbClsExtra = 0; + window_class.cbWndExtra = 0; + window_class.hInstance = GetModuleHandle(nullptr); + window_class.hIcon = + LoadIcon(window_class.hInstance, MAKEINTRESOURCE(IDI_APP_ICON)); + window_class.hbrBackground = 0; + window_class.lpszMenuName = nullptr; + window_class.lpfnWndProc = Win32Window::WndProc; + RegisterClass(&window_class); + class_registered_ = true; + } + return kWindowClassName; +} + +void WindowClassRegistrar::UnregisterWindowClass() { + UnregisterClass(kWindowClassName, nullptr); + class_registered_ = false; +} + +Win32Window::Win32Window() { ++g_active_window_count; } + +Win32Window::~Win32Window() { + --g_active_window_count; + Destroy(); +} + +bool Win32Window::Create(const std::wstring& title, const Point& origin, + const Size& size) { + Destroy(); + + const wchar_t* window_class = + WindowClassRegistrar::GetInstance()->GetWindowClass(); + + const POINT target_point = {static_cast(origin.x), + static_cast(origin.y)}; + HMONITOR monitor = MonitorFromPoint(target_point, MONITOR_DEFAULTTONEAREST); + UINT dpi = FlutterDesktopGetDpiForMonitor(monitor); + double scale_factor = dpi / 96.0; + + HWND window = CreateWindow( + window_class, title.c_str(), WS_OVERLAPPEDWINDOW, + Scale(origin.x, scale_factor), Scale(origin.y, scale_factor), + Scale(size.width, scale_factor), Scale(size.height, scale_factor), + nullptr, nullptr, GetModuleHandle(nullptr), this); + + if (!window) { + return false; + } + + UpdateTheme(window); + + return OnCreate(); +} + +bool Win32Window::Show() { return ShowWindow(window_handle_, SW_SHOWNORMAL); } + +// static +LRESULT CALLBACK Win32Window::WndProc(HWND const window, UINT const message, + WPARAM const wparam, + LPARAM const lparam) noexcept { + if (message == WM_NCCREATE) { + auto window_struct = reinterpret_cast(lparam); + SetWindowLongPtr(window, GWLP_USERDATA, + reinterpret_cast(window_struct->lpCreateParams)); + + auto that = static_cast(window_struct->lpCreateParams); + EnableFullDpiSupportIfAvailable(window); + that->window_handle_ = window; + } else if (Win32Window* that = GetThisFromHandle(window)) { + return that->MessageHandler(window, message, wparam, lparam); + } + + return DefWindowProc(window, message, wparam, lparam); +} + +LRESULT +Win32Window::MessageHandler(HWND hwnd, UINT const message, WPARAM const wparam, + LPARAM const lparam) noexcept { + switch (message) { + case WM_DESTROY: + window_handle_ = nullptr; + Destroy(); + if (quit_on_close_) { + PostQuitMessage(0); + } + return 0; + + case WM_DPICHANGED: { + auto newRectSize = reinterpret_cast(lparam); + LONG newWidth = newRectSize->right - newRectSize->left; + LONG newHeight = newRectSize->bottom - newRectSize->top; + + SetWindowPos(hwnd, nullptr, newRectSize->left, newRectSize->top, newWidth, + newHeight, SWP_NOZORDER | SWP_NOACTIVATE); + + return 0; + } + case WM_SIZE: { + RECT rect = GetClientArea(); + if (child_content_ != nullptr) { + // Size and position the child window. + MoveWindow(child_content_, rect.left, rect.top, rect.right - rect.left, + rect.bottom - rect.top, TRUE); + } + return 0; + } + + case WM_ACTIVATE: + if (child_content_ != nullptr) { + SetFocus(child_content_); + } + return 0; + + case WM_DWMCOLORIZATIONCOLORCHANGED: + UpdateTheme(hwnd); + return 0; + } + + return DefWindowProc(window_handle_, message, wparam, lparam); +} + +void Win32Window::Destroy() { + OnDestroy(); + + if (window_handle_) { + DestroyWindow(window_handle_); + window_handle_ = nullptr; + } + if (g_active_window_count == 0) { + WindowClassRegistrar::GetInstance()->UnregisterWindowClass(); + } +} + +Win32Window* Win32Window::GetThisFromHandle(HWND const window) noexcept { + return reinterpret_cast( + GetWindowLongPtr(window, GWLP_USERDATA)); +} + +void Win32Window::SetChildContent(HWND content) { + child_content_ = content; + SetParent(content, window_handle_); + RECT frame = GetClientArea(); + + MoveWindow(content, frame.left, frame.top, frame.right - frame.left, + frame.bottom - frame.top, true); + + SetFocus(child_content_); +} + +RECT Win32Window::GetClientArea() { + RECT frame; + GetClientRect(window_handle_, &frame); + return frame; +} + +HWND Win32Window::GetHandle() { return window_handle_; } + +void Win32Window::SetQuitOnClose(bool quit_on_close) { + quit_on_close_ = quit_on_close; +} + +bool Win32Window::OnCreate() { + // No-op; provided for subclasses. + return true; +} + +void Win32Window::OnDestroy() { + // No-op; provided for subclasses. +} + +void Win32Window::UpdateTheme(HWND const window) { + DWORD light_mode; + DWORD light_mode_size = sizeof(light_mode); + LSTATUS result = + RegGetValue(HKEY_CURRENT_USER, kGetPreferredBrightnessRegKey, + kGetPreferredBrightnessRegValue, RRF_RT_REG_DWORD, nullptr, + &light_mode, &light_mode_size); + + if (result == ERROR_SUCCESS) { + BOOL enable_dark_mode = light_mode == 0; + DwmSetWindowAttribute(window, DWMWA_USE_IMMERSIVE_DARK_MODE, + &enable_dark_mode, sizeof(enable_dark_mode)); + } +} diff --git a/mih_ui/android/build/ios/SourcePackages/firebase_auth-6.5.4/example/windows/runner/win32_window.h b/mih_ui/android/build/ios/SourcePackages/firebase_auth-6.5.4/example/windows/runner/win32_window.h new file mode 100644 index 00000000..32aab58c --- /dev/null +++ b/mih_ui/android/build/ios/SourcePackages/firebase_auth-6.5.4/example/windows/runner/win32_window.h @@ -0,0 +1,106 @@ +/* + * Copyright 2023, the Chromium project authors. Please see the AUTHORS file + * for details. All rights reserved. Use of this source code is governed by a + * BSD-style license that can be found in the LICENSE file. + */ + +#ifndef RUNNER_WIN32_WINDOW_H_ +#define RUNNER_WIN32_WINDOW_H_ + +#include + +#include +#include +#include + +// A class abstraction for a high DPI-aware Win32 Window. Intended to be +// inherited from by classes that wish to specialize with custom +// rendering and input handling +class Win32Window { + public: + struct Point { + unsigned int x; + unsigned int y; + Point(unsigned int x, unsigned int y) : x(x), y(y) {} + }; + + struct Size { + unsigned int width; + unsigned int height; + Size(unsigned int width, unsigned int height) + : width(width), height(height) {} + }; + + Win32Window(); + virtual ~Win32Window(); + + // Creates a win32 window with |title| that is positioned and sized using + // |origin| and |size|. New windows are created on the default monitor. Window + // sizes are specified to the OS in physical pixels, hence to ensure a + // consistent size this function will scale the inputted width and height as + // as appropriate for the default monitor. The window is invisible until + // |Show| is called. Returns true if the window was created successfully. + bool Create(const std::wstring& title, const Point& origin, const Size& size); + + // Show the current window. Returns true if the window was successfully shown. + bool Show(); + + // Release OS resources associated with window. + void Destroy(); + + // Inserts |content| into the window tree. + void SetChildContent(HWND content); + + // Returns the backing Window handle to enable clients to set icon and other + // window properties. Returns nullptr if the window has been destroyed. + HWND GetHandle(); + + // If true, closing this window will quit the application. + void SetQuitOnClose(bool quit_on_close); + + // Return a RECT representing the bounds of the current client area. + RECT GetClientArea(); + + protected: + // Processes and route salient window messages for mouse handling, + // size change and DPI. Delegates handling of these to member overloads that + // inheriting classes can handle. + virtual LRESULT MessageHandler(HWND window, UINT const message, + WPARAM const wparam, + LPARAM const lparam) noexcept; + + // Called when CreateAndShow is called, allowing subclass window-related + // setup. Subclasses should return false if setup fails. + virtual bool OnCreate(); + + // Called when Destroy is called. + virtual void OnDestroy(); + + private: + friend class WindowClassRegistrar; + + // OS callback called by message pump. Handles the WM_NCCREATE message which + // is passed when the non-client area is being created and enables automatic + // non-client DPI scaling so that the non-client area automatically + // responds to changes in DPI. All other messages are handled by + // MessageHandler. + static LRESULT CALLBACK WndProc(HWND const window, UINT const message, + WPARAM const wparam, + LPARAM const lparam) noexcept; + + // Retrieves a class instance pointer for |window| + static Win32Window* GetThisFromHandle(HWND const window) noexcept; + + // Update the window frame's theme to match the system theme. + static void UpdateTheme(HWND const window); + + bool quit_on_close_ = false; + + // window handle for top level window. + HWND window_handle_ = nullptr; + + // window handle for hosted content. + HWND child_content_ = nullptr; +}; + +#endif // RUNNER_WIN32_WINDOW_H_ diff --git a/mih_ui/android/build/ios/SourcePackages/firebase_auth-6.5.4/ios/firebase_auth.podspec b/mih_ui/android/build/ios/SourcePackages/firebase_auth-6.5.4/ios/firebase_auth.podspec new file mode 100755 index 00000000..eba26315 --- /dev/null +++ b/mih_ui/android/build/ios/SourcePackages/firebase_auth-6.5.4/ios/firebase_auth.podspec @@ -0,0 +1,43 @@ +require 'yaml' + +pubspec = YAML.load_file(File.join('..', 'pubspec.yaml')) +library_version = pubspec['version'].gsub('+', '-') + +if defined?($FirebaseSDKVersion) + Pod::UI.puts "#{pubspec['name']}: Using user specified Firebase SDK version '#{$FirebaseSDKVersion}'" + firebase_sdk_version = $FirebaseSDKVersion +else + firebase_core_script = File.join(File.expand_path('..', File.expand_path('..', File.dirname(__FILE__))), 'firebase_core/ios/firebase_sdk_version.rb') + if File.exist?(firebase_core_script) + require firebase_core_script + firebase_sdk_version = firebase_sdk_version! + Pod::UI.puts "#{pubspec['name']}: Using Firebase SDK version '#{firebase_sdk_version}' defined in 'firebase_core'" + end +end + +Pod::Spec.new do |s| + s.name = pubspec['name'] + s.version = library_version + s.summary = pubspec['description'] + s.description = pubspec['description'] + s.homepage = pubspec['homepage'] + s.license = { :file => '../LICENSE' } + s.authors = 'The Chromium Authors' + s.source = { :path => '.' } + + s.source_files = 'firebase_auth/Sources/firebase_auth/**/*.{h,m}' + s.public_header_files = 'firebase_auth/Sources/firebase_auth/include/Public/**/*.h' + s.private_header_files = 'firebase_auth/Sources/firebase_auth/include/Private/**/*.h' + + s.ios.deployment_target = '15.0' + s.dependency 'Flutter' + + s.dependency 'firebase_core' + s.dependency 'Firebase/Auth', firebase_sdk_version + + s.static_framework = true + s.pod_target_xcconfig = { + 'GCC_PREPROCESSOR_DEFINITIONS' => "LIBRARY_VERSION=\\\"#{library_version}\\\" LIBRARY_NAME=\\\"flutter-fire-auth\\\"", + 'DEFINES_MODULE' => 'YES' + } +end diff --git a/mih_ui/android/build/ios/SourcePackages/firebase_auth-6.5.4/ios/firebase_auth/Package.swift b/mih_ui/android/build/ios/SourcePackages/firebase_auth-6.5.4/ios/firebase_auth/Package.swift new file mode 100644 index 00000000..b53cc1ad --- /dev/null +++ b/mih_ui/android/build/ios/SourcePackages/firebase_auth-6.5.4/ios/firebase_auth/Package.swift @@ -0,0 +1,43 @@ +// swift-tools-version: 5.9 +// The swift-tools-version declares the minimum version of Swift required to build this package. + +// Copyright 2024, the Chromium project authors. Please see the AUTHORS file +// for details. All rights reserved. Use of this source code is governed by a +// BSD-style license that can be found in the LICENSE file. + +import PackageDescription + +let libraryVersion = "6.5.4" +let firebaseSdkVersion: Version = "12.15.0" + +let package = Package( + name: "firebase_auth", + platforms: [ + .iOS("15.0") + ], + products: [ + .library(name: "firebase-auth", targets: ["firebase_auth"]) + ], + dependencies: [ + .package(url: "https://github.com/firebase/firebase-ios-sdk", exact: firebaseSdkVersion), + .package(name: "firebase_core", path: "../firebase_core-4.11.0"), + ], + targets: [ + .target( + name: "firebase_auth", + dependencies: [ + .product(name: "FirebaseAuth", package: "firebase-ios-sdk"), + .product(name: "firebase-core", package: "firebase_core"), + ], + resources: [ + .process("Resources") + ], + cSettings: [ + .headerSearchPath("include/Private"), + .headerSearchPath("include/Public"), + .define("LIBRARY_VERSION", to: "\"\(libraryVersion)\""), + .define("LIBRARY_NAME", to: "\"flutter-fire-auth\""), + ] + ) + ] +) diff --git a/mih_ui/android/build/ios/SourcePackages/firebase_auth-6.5.4/ios/firebase_auth/Sources/firebase_auth/FLTAuthStateChannelStreamHandler.m b/mih_ui/android/build/ios/SourcePackages/firebase_auth-6.5.4/ios/firebase_auth/Sources/firebase_auth/FLTAuthStateChannelStreamHandler.m new file mode 100644 index 00000000..5ef9adaf --- /dev/null +++ b/mih_ui/android/build/ios/SourcePackages/firebase_auth-6.5.4/ios/firebase_auth/Sources/firebase_auth/FLTAuthStateChannelStreamHandler.m @@ -0,0 +1,56 @@ +// Copyright 2021 The Chromium Authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. +@import FirebaseAuth; +#import "include/Private/FLTAuthStateChannelStreamHandler.h" +#import +#import "include/Private/PigeonParser.h" +#import "include/Public/FLTFirebaseAuthPlugin.h" + +@implementation FLTAuthStateChannelStreamHandler { + FIRAuth *_auth; + FIRAuthStateDidChangeListenerHandle _listener; +} + +- (instancetype)initWithAuth:(FIRAuth *)auth { + self = [super init]; + if (self) { + _auth = auth; + } + return self; +} + +- (FlutterError *)onListenWithArguments:(id)arguments eventSink:(FlutterEventSink)events { + bool __block initialAuthState = YES; + + _listener = [_auth addAuthStateDidChangeListener:^(FIRAuth *_Nonnull auth, + FIRUser *_Nullable user) { + if (initialAuthState) { + initialAuthState = NO; + return; + } + + if (user) { + events(@{ + @"user" : [PigeonParser getManualList:[PigeonParser getPigeonDetails:[auth currentUser]]] + }); + } else { + events(@{ + @"user" : [NSNull null], + }); + } + }]; + + return nil; +} + +- (FlutterError *)onCancelWithArguments:(id)arguments { + if (_listener) { + [_auth removeAuthStateDidChangeListener:_listener]; + } + _listener = nil; + + return nil; +} + +@end diff --git a/mih_ui/android/build/ios/SourcePackages/firebase_auth-6.5.4/ios/firebase_auth/Sources/firebase_auth/FLTFirebaseAuthPlugin.m b/mih_ui/android/build/ios/SourcePackages/firebase_auth-6.5.4/ios/firebase_auth/Sources/firebase_auth/FLTFirebaseAuthPlugin.m new file mode 100644 index 00000000..606dda68 --- /dev/null +++ b/mih_ui/android/build/ios/SourcePackages/firebase_auth-6.5.4/ios/firebase_auth/Sources/firebase_auth/FLTFirebaseAuthPlugin.m @@ -0,0 +1,2376 @@ +// Copyright 2020 The Chromium Authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +@import FirebaseAuth; +#import +#import +#if __has_include() +#import +#else +#import +#endif + +#import "include/Private/FLTAuthStateChannelStreamHandler.h" +#import "include/Private/FLTIdTokenChannelStreamHandler.h" +#import "include/Private/FLTPhoneNumberVerificationStreamHandler.h" +#import "include/Private/PigeonParser.h" + +#import "include/Public/CustomPigeonHeader.h" +#import "include/Public/FLTFirebaseAuthPlugin.h" +@import CommonCrypto; +#import + +#if __has_include() +#import +#else +#import +#endif + +NSString *const kFLTFirebaseAuthChannelName = @"plugins.flutter.io/firebase_auth"; + +// Argument Keys +NSString *const kAppName = @"appName"; + +// Provider type keys. +NSString *const kSignInMethodPassword = @"password"; +NSString *const kSignInMethodEmailLink = @"emailLink"; +NSString *const kSignInMethodFacebook = @"facebook.com"; +NSString *const kSignInMethodGoogle = @"google.com"; +NSString *const kSignInMethodGameCenter = @"gc.apple.com"; +NSString *const kSignInMethodTwitter = @"twitter.com"; +NSString *const kSignInMethodGithub = @"github.com"; +NSString *const kSignInMethodApple = @"apple.com"; +NSString *const kSignInMethodPhone = @"phone"; +NSString *const kSignInMethodOAuth = @"oauth"; + +// Credential argument keys. +NSString *const kArgumentCredential = @"credential"; +NSString *const kArgumentProviderId = @"providerId"; +NSString *const kArgumentProviderScope = @"scopes"; +NSString *const kArgumentProviderCustomParameters = @"customParameters"; +NSString *const kArgumentSignInMethod = @"signInMethod"; +NSString *const kArgumentSecret = @"secret"; +NSString *const kArgumentIdToken = @"idToken"; +NSString *const kArgumentAccessToken = @"accessToken"; +NSString *const kArgumentRawNonce = @"rawNonce"; +NSString *const kArgumentEmail = @"email"; +NSString *const kArgumentCode = @"code"; +NSString *const kArgumentNewEmail = @"newEmail"; +NSString *const kArgumentEmailLink = kSignInMethodEmailLink; +NSString *const kArgumentToken = @"token"; +NSString *const kArgumentVerificationId = @"verificationId"; +NSString *const kArgumentSmsCode = @"smsCode"; +NSString *const kArgumentActionCodeSettings = @"actionCodeSettings"; +NSString *const kArgumentFamilyName = @"familyName"; +NSString *const kArgumentGivenName = @"givenName"; +NSString *const kArgumentMiddleName = @"middleName"; +NSString *const kArgumentNickname = @"nickname"; +NSString *const kArgumentNamePrefix = @"namePrefix"; +NSString *const kArgumentNameSuffix = @"nameSuffix"; + +// MultiFactor +NSString *const kArgumentMultiFactorHints = @"multiFactorHints"; +NSString *const kArgumentMultiFactorSessionId = @"multiFactorSessionId"; +NSString *const kArgumentMultiFactorResolverId = @"multiFactorResolverId"; +NSString *const kArgumentMultiFactorInfo = @"multiFactorInfo"; + +// Manual error codes & messages. +NSString *const kErrCodeNoCurrentUser = @"no-current-user"; +NSString *const kErrMsgNoCurrentUser = @"No user currently signed in."; +NSString *const kErrCodeInvalidCredential = @"invalid-credential"; +NSString *const kErrMsgInvalidCredential = + @"The supplied auth credential is malformed, has expired or is not " + @"currently supported."; + +// Used for caching credentials between Method Channel method calls. +static NSMutableDictionary *credentialsMap; + +@interface FLTFirebaseAuthPlugin () +@property(nonatomic, retain) NSObject *messenger; +@property(strong, nonatomic) FIROAuthProvider *authProvider; +// Used to keep the user who wants to link with Apple Sign In +@property(strong, nonatomic) FIRUser *linkWithAppleUser; +@property(strong, nonatomic) FIRAuth *signInWithAppleAuth; +@property BOOL isReauthenticatingWithApple; +@property(strong, nonatomic) NSString *currentNonce; +@property(strong, nonatomic) void (^appleCompletion) + (InternalUserCredential *_Nullable, FlutterError *_Nullable); +@property(strong, nonatomic) AuthPigeonFirebaseApp *appleArguments; +/// YES while an `ASAuthorizationController` Sign in with Apple flow is active. +@property(nonatomic, assign) BOOL appleSignInRequestInFlight; + +@end + +@implementation FLTFirebaseAuthPlugin { + // Map an id to a MultiFactorSession object. + NSMutableDictionary *_multiFactorSessionMap; + + // Map an id to a MultiFactorResolver object. + NSMutableDictionary *_multiFactorResolverMap; + + // Map an id to a MultiFactorResolver object. + NSMutableDictionary *_multiFactorAssertionMap; + + // Map an id to a MultiFactorResolver object. + NSMutableDictionary *_multiFactorTotpSecretMap; + + // Emulator host/port per app, used to build REST URLs for workarounds. + NSMutableDictionary *_emulatorConfigs; + + NSObject *_binaryMessenger; + NSMutableDictionary *_eventChannels; + NSMutableDictionary *> *_streamHandlers; + NSData *_apnsToken; +} + +#pragma mark - FlutterPlugin + +- (instancetype)init:(NSObject *)messenger { + self = [super init]; + if (self) { + [[FLTFirebasePluginRegistry sharedInstance] registerFirebasePlugin:self]; + credentialsMap = [NSMutableDictionary dictionary]; + _binaryMessenger = messenger; + _eventChannels = [NSMutableDictionary dictionary]; + _streamHandlers = [NSMutableDictionary dictionary]; + + _multiFactorSessionMap = [NSMutableDictionary dictionary]; + _multiFactorResolverMap = [NSMutableDictionary dictionary]; + _multiFactorAssertionMap = [NSMutableDictionary dictionary]; + _multiFactorTotpSecretMap = [NSMutableDictionary dictionary]; + _emulatorConfigs = [NSMutableDictionary dictionary]; + } + return self; +} + ++ (void)registerWithRegistrar:(NSObject *)registrar { + FlutterMethodChannel *channel = + [FlutterMethodChannel methodChannelWithName:kFLTFirebaseAuthChannelName + binaryMessenger:[registrar messenger]]; + FLTFirebaseAuthPlugin *instance = [[FLTFirebaseAuthPlugin alloc] init:registrar.messenger]; + + [registrar addMethodCallDelegate:instance channel:channel]; + + [registrar publish:instance]; + [registrar addApplicationDelegate:instance]; +#if !TARGET_OS_OSX + if (@available(iOS 13.0, *)) { + if ([registrar respondsToSelector:@selector(addSceneDelegate:)]) { + [registrar performSelector:@selector(addSceneDelegate:) withObject:instance]; + } + } +#endif + SetUpFirebaseAuthHostApi(registrar.messenger, instance); + SetUpFirebaseAuthUserHostApi(registrar.messenger, instance); + SetUpMultiFactorUserHostApi(registrar.messenger, instance); + SetUpMultiFactoResolverHostApi(registrar.messenger, instance); + SetUpMultiFactorTotpHostApi(registrar.messenger, instance); + SetUpMultiFactorTotpSecretHostApi(registrar.messenger, instance); +} + ++ (FlutterError *)convertToFlutterError:(NSError *)error { + NSString *code = @"unknown"; + NSString *message = @"An unknown error has occurred."; + + if (error == nil) { + return [FlutterError errorWithCode:code message:message details:@{}]; + } + + // code + if ([error userInfo][FIRAuthErrorUserInfoNameKey] != nil) { + // See [FIRAuthErrorCodeString] for list of codes. + // Codes are in the format "ERROR_SOME_NAME", converting below to the format + // required in Dart. ERROR_SOME_NAME -> SOME_NAME + NSString *firebaseErrorCode = [error userInfo][FIRAuthErrorUserInfoNameKey]; + code = [firebaseErrorCode stringByReplacingOccurrencesOfString:@"ERROR_" withString:@""]; + // SOME_NAME -> SOME-NAME + code = [code stringByReplacingOccurrencesOfString:@"_" withString:@"-"]; + // SOME-NAME -> some-name + code = [code lowercaseString]; + } + + // message + if ([error userInfo][NSLocalizedDescriptionKey] != nil) { + message = [error userInfo][NSLocalizedDescriptionKey]; + } + + NSMutableDictionary *additionalData = [NSMutableDictionary dictionary]; + // additionalData.email + if ([error userInfo][FIRAuthErrorUserInfoEmailKey] != nil) { + additionalData[kArgumentEmail] = [error userInfo][FIRAuthErrorUserInfoEmailKey]; + } + // We want to store the credential if present for future sign in if the exception contains a + // credential, we pass a token back to Flutter to allow retrieval of the credential. + NSNumber *token = [FLTFirebaseAuthPlugin storeAuthCredentialIfPresent:error]; + + // additionalData.authCredential + if ([error userInfo][FIRAuthErrorUserInfoUpdatedCredentialKey] != nil) { + FIRAuthCredential *authCredential = [error userInfo][FIRAuthErrorUserInfoUpdatedCredentialKey]; + additionalData[@"authCredential"] = [PigeonParser getPigeonAuthCredential:authCredential + token:token]; + } + + // Manual message overrides to ensure messages/codes matches other platforms. + if ([message isEqual:@"The password must be 6 characters long or more."]) { + message = @"Password should be at least 6 characters"; + } + + return [FlutterError errorWithCode:code message:message details:additionalData]; +} + ++ (id)getNSDictionaryFromAuthCredential:(FIRAuthCredential *)authCredential { + if (authCredential == nil) { + return [NSNull null]; + } + + NSString *accessToken = nil; + if ([authCredential isKindOfClass:[FIROAuthCredential class]]) { + if (((FIROAuthCredential *)authCredential).accessToken != nil) { + accessToken = ((FIROAuthCredential *)authCredential).accessToken; + } else if (((FIROAuthCredential *)authCredential).IDToken != nil) { + // For Sign In With Apple, the token is stored in IDToken + accessToken = ((FIROAuthCredential *)authCredential).IDToken; + } + } + + return @{ + kArgumentProviderId : authCredential.provider, + // Note: "signInMethod" does not exist on iOS SDK, so using provider + // instead. + kArgumentSignInMethod : authCredential.provider, + kArgumentToken : @([authCredential hash]), + kArgumentAccessToken : accessToken ?: [NSNull null], + }; +} + +- (void)cleanupWithCompletion:(void (^)(void))completion { + // Cleanup credentials. + [credentialsMap removeAllObjects]; + + for (FlutterEventChannel *channel in self->_eventChannels.allValues) { + [channel setStreamHandler:nil]; + } + [self->_eventChannels removeAllObjects]; + for (NSObject *handler in self->_streamHandlers.allValues) { + [handler onCancelWithArguments:nil]; + } + [self->_streamHandlers removeAllObjects]; + + if (completion != nil) completion(); +} + +- (void)detachFromEngineForRegistrar:(NSObject *)registrar { + [self cleanupWithCompletion:nil]; +} + +#pragma mark - AppDelegate + +#if TARGET_OS_IPHONE +#if !__has_include() +- (BOOL)application:(UIApplication *)application + didReceiveRemoteNotification:(NSDictionary *)notification + fetchCompletionHandler:(void (^)(UIBackgroundFetchResult result))completionHandler { + if ([[FIRAuth auth] canHandleNotification:notification]) { + completionHandler(UIBackgroundFetchResultNoData); + return YES; + } + return NO; +} +#endif + +- (void)application:(UIApplication *)application + didRegisterForRemoteNotificationsWithDeviceToken:(NSData *)deviceToken { + _apnsToken = deviceToken; +} + +- (BOOL)application:(UIApplication *)app openURL:(NSURL *)url options:(NSDictionary *)options { + return [[FIRAuth auth] canHandleURL:url]; +} + +#pragma mark - SceneDelegate + +- (BOOL)scene:(UIScene *)scene + openURLContexts:(NSSet *)URLContexts API_AVAILABLE(ios(13.0)) { + for (UIOpenURLContext *urlContext in URLContexts) { + if ([[FIRAuth auth] canHandleURL:urlContext.URL]) { + return YES; + } + } + return NO; +} +#endif + +#pragma mark - FLTFirebasePlugin + +- (void)didReinitializeFirebaseCore:(void (^_Nonnull)(void))completion { + [self cleanupWithCompletion:completion]; +} + +- (NSString *_Nonnull)firebaseLibraryName { + return @LIBRARY_NAME; +} + +- (NSString *_Nonnull)firebaseLibraryVersion { + return @LIBRARY_VERSION; +} + +- (NSString *_Nonnull)flutterChannelName { + return kFLTFirebaseAuthChannelName; +} + +- (NSDictionary *_Nonnull)pluginConstantsForFIRApp:(FIRApp *_Nonnull)firebaseApp { + FIRAuth *auth = [FIRAuth authWithApp:firebaseApp]; + return @{ + @"APP_LANGUAGE_CODE" : (id)[auth languageCode] ?: [NSNull null], + @"APP_CURRENT_USER" : [auth currentUser] + ? [PigeonParser getManualList:[PigeonParser getPigeonDetails:[auth currentUser]]] + : [NSNull null], + }; +} + +#pragma mark - Firebase Auth API + +// Adapted from +// https://auth0.com/docs/api-auth/tutorials/nonce#generate-a-cryptographically-random-nonce Used +// for Apple Sign In +- (NSString *)randomNonce:(NSInteger)length { + NSAssert(length > 0, @"Expected nonce to have positive length"); + NSString *characterSet = @"0123456789ABCDEFGHIJKLMNOPQRSTUVXYZabcdefghijklmnopqrstuvwxyz-._"; + NSMutableString *result = [NSMutableString string]; + NSInteger remainingLength = length; + + while (remainingLength > 0) { + NSMutableArray *randoms = [NSMutableArray arrayWithCapacity:16]; + for (NSInteger i = 0; i < 16; i++) { + uint8_t random = 0; + int errorCode = SecRandomCopyBytes(kSecRandomDefault, 1, &random); + NSAssert(errorCode == errSecSuccess, @"Unable to generate nonce: OSStatus %i", errorCode); + + [randoms addObject:@(random)]; + } + + for (NSNumber *random in randoms) { + if (remainingLength == 0) { + break; + } + + if (random.unsignedIntValue < characterSet.length) { + unichar character = [characterSet characterAtIndex:random.unsignedIntValue]; + [result appendFormat:@"%C", character]; + remainingLength--; + } + } + } + + return [result copy]; +} + +- (NSString *)stringBySha256HashingString:(NSString *)input { + const char *string = [input UTF8String]; + unsigned char result[CC_SHA256_DIGEST_LENGTH]; + CC_SHA256(string, (CC_LONG)strlen(string), result); + + NSMutableString *hashed = [NSMutableString stringWithCapacity:CC_SHA256_DIGEST_LENGTH * 2]; + for (NSInteger i = 0; i < CC_SHA256_DIGEST_LENGTH; i++) { + [hashed appendFormat:@"%02x", result[i]]; + } + return hashed; +} + +static void handleSignInWithApple(FLTFirebaseAuthPlugin *object, FIRAuthDataResult *authResult, + NSString *authorizationCode, NSError *error) { + void (^completion)(InternalUserCredential *_Nullable, FlutterError *_Nullable) = + object.appleCompletion; + if (completion == nil) { + object.appleSignInRequestInFlight = NO; + return; + } + + if (error != nil) { + if (error.code == FIRAuthErrorCodeSecondFactorRequired) { + object.appleCompletion = nil; + object.appleSignInRequestInFlight = NO; + [object handleMultiFactorError:object.appleArguments completion:completion withError:error]; + } else { + object.appleCompletion = nil; + object.appleSignInRequestInFlight = NO; + completion(nil, [FLTFirebaseAuthPlugin convertToFlutterError:error]); + } + return; + } + object.appleCompletion = nil; + object.appleSignInRequestInFlight = NO; + completion([PigeonParser getPigeonUserCredentialFromAuthResult:authResult + authorizationCode:authorizationCode], + nil); +} + +- (void)authorizationController:(ASAuthorizationController *)controller + didCompleteWithAuthorization:(ASAuthorization *)authorization + API_AVAILABLE(macos(10.15), ios(13.0)) { + if ([authorization.credential isKindOfClass:[ASAuthorizationAppleIDCredential class]]) { + ASAuthorizationAppleIDCredential *appleIDCredential = authorization.credential; + NSString *rawNonce = self.currentNonce; + NSAssert(rawNonce != nil, + @"Invalid state: A login callback was received, but no login request was sent."); + + if (appleIDCredential.identityToken == nil) { + NSLog(@"Unable to fetch identity token."); + void (^completion)(InternalUserCredential *_Nullable, FlutterError *_Nullable) = + self.appleCompletion; + self.appleCompletion = nil; + self.appleSignInRequestInFlight = NO; + if (completion != nil) { + completion(nil, [FlutterError errorWithCode:kErrCodeInvalidCredential + message:kErrMsgInvalidCredential + details:nil]); + } + return; + } + + NSString *idToken = [[NSString alloc] initWithData:appleIDCredential.identityToken + encoding:NSUTF8StringEncoding]; + if (idToken == nil) { + NSLog(@"Unable to serialize id token from data: %@", appleIDCredential.identityToken); + } + + NSString *authorizationCode = nil; + if (appleIDCredential.authorizationCode != nil) { + authorizationCode = [[NSString alloc] initWithData:appleIDCredential.authorizationCode + encoding:NSUTF8StringEncoding]; + } + + FIROAuthCredential *credential = + [FIROAuthProvider appleCredentialWithIDToken:idToken + rawNonce:rawNonce + fullName:appleIDCredential.fullName]; + + if (self.isReauthenticatingWithApple == YES) { + self.isReauthenticatingWithApple = NO; + void (^capturedCompletion)(InternalUserCredential *_Nullable, FlutterError *_Nullable) = + self.appleCompletion; + [[FIRAuth.auth currentUser] + reauthenticateWithCredential:credential + completion:^(FIRAuthDataResult *_Nullable authResult, + NSError *_Nullable error) { + handleSignInWithApple(self, authResult, authorizationCode, error); + }]; + + } else if (self.linkWithAppleUser != nil) { + FIRUser *userToLink = self.linkWithAppleUser; + void (^capturedCompletion)(InternalUserCredential *_Nullable, FlutterError *_Nullable) = + self.appleCompletion; + [userToLink linkWithCredential:credential + completion:^(FIRAuthDataResult *authResult, NSError *error) { + self.linkWithAppleUser = nil; + handleSignInWithApple(self, authResult, authorizationCode, error); + }]; + + } else { + FIRAuth *signInAuth = + self.signInWithAppleAuth != nil ? self.signInWithAppleAuth : FIRAuth.auth; + void (^capturedCompletion)(InternalUserCredential *_Nullable, FlutterError *_Nullable) = + self.appleCompletion; + [signInAuth signInWithCredential:credential + completion:^(FIRAuthDataResult *_Nullable authResult, + NSError *_Nullable error) { + self.signInWithAppleAuth = nil; + handleSignInWithApple(self, authResult, authorizationCode, error); + }]; + } + } else { + void (^completion)(InternalUserCredential *_Nullable, FlutterError *_Nullable) = + self.appleCompletion; + self.appleCompletion = nil; + self.appleSignInRequestInFlight = NO; + if (completion != nil) { + completion(nil, [FlutterError errorWithCode:kErrCodeInvalidCredential + message:kErrMsgInvalidCredential + details:nil]); + } + } +} + +- (void)authorizationController:(ASAuthorizationController *)controller + didCompleteWithError:(NSError *)error API_AVAILABLE(macos(10.15), ios(13.0)) { + void (^completion)(InternalUserCredential *_Nullable, FlutterError *_Nullable) = + self.appleCompletion; + self.appleCompletion = nil; + self.appleSignInRequestInFlight = NO; + + NSLog(@"Sign in with Apple errored: %@", error); + if (completion == nil) { + return; + } + + switch (error.code) { + case ASAuthorizationErrorCanceled: + completion(nil, [FlutterError errorWithCode:@"canceled" + message:@"The user canceled the authorization attempt." + details:nil]); + break; + + case ASAuthorizationErrorInvalidResponse: + completion(nil, [FlutterError + errorWithCode:@"invalid-response" + message:@"The authorization request received an invalid response." + details:nil]); + break; + + case ASAuthorizationErrorNotHandled: + completion(nil, [FlutterError errorWithCode:@"not-handled" + message:@"The authorization request wasn’t handled." + details:nil]); + break; + + case ASAuthorizationErrorFailed: + completion(nil, [FlutterError errorWithCode:@"failed" + message:@"The authorization attempt failed." + details:nil]); + break; + + case ASAuthorizationErrorUnknown: + default: + completion(nil, [FLTFirebaseAuthPlugin convertToFlutterError:error]); + break; + } +} + +- (void)handleInternalError:(nonnull void (^)(InternalUserCredential *_Nullable, + FlutterError *_Nullable))completion + withError:(NSError *)error { + const NSError *underlyingError = error.userInfo[@"NSUnderlyingError"]; + if (underlyingError != nil) { + const NSDictionary *details = + underlyingError.userInfo[@"FIRAuthErrorUserInfoDeserializedResponseKey"]; + completion(nil, [FlutterError errorWithCode:@"internal-error" + message:error.description + details:details]); + return; + } + completion(nil, [FlutterError errorWithCode:@"internal-error" + message:error.description + details:nil]); +} + +- (void)handleMultiFactorError:(AuthPigeonFirebaseApp *)app + completion:(nonnull void (^)(InternalUserCredential *_Nullable, + FlutterError *_Nullable))completion + withError:(NSError *_Nullable)error { + FIRMultiFactorResolver *resolver = + (FIRMultiFactorResolver *)error.userInfo[FIRAuthErrorUserInfoMultiFactorResolverKey]; + + NSArray *hints = resolver.hints; + FIRMultiFactorSession *session = resolver.session; + + NSString *sessionId = [[NSUUID UUID] UUIDString]; + self->_multiFactorSessionMap[sessionId] = session; + + NSString *resolverId = [[NSUUID UUID] UUIDString]; + self->_multiFactorResolverMap[resolverId] = resolver; + + NSMutableArray *pigeonHints = [NSMutableArray array]; + + for (FIRMultiFactorInfo *multiFactorInfo in hints) { + NSString *phoneNumber; + if ([multiFactorInfo class] == [FIRPhoneMultiFactorInfo class]) { + FIRPhoneMultiFactorInfo *phoneFactorInfo = (FIRPhoneMultiFactorInfo *)multiFactorInfo; + phoneNumber = phoneFactorInfo.phoneNumber; + } + + InternalMultiFactorInfo *object = [InternalMultiFactorInfo + makeWithDisplayName:multiFactorInfo.displayName + enrollmentTimestamp:multiFactorInfo.enrollmentDate.timeIntervalSince1970 + factorId:multiFactorInfo.factorID + uid:multiFactorInfo.UID + phoneNumber:phoneNumber]; + + [pigeonHints addObject:object.toList]; + } + + NSDictionary *output = @{ + kAppName : app.appName, + kArgumentMultiFactorHints : pigeonHints, + kArgumentMultiFactorSessionId : sessionId, + kArgumentMultiFactorResolverId : resolverId, + }; + completion(nil, [FlutterError errorWithCode:@"second-factor-required" + message:error.description + details:output]); +} + +static void launchAppleSignInRequest(FLTFirebaseAuthPlugin *object, AuthPigeonFirebaseApp *app, + InternalSignInProvider *signInProvider, + void (^_Nonnull completion)(InternalUserCredential *_Nullable, + FlutterError *_Nullable)) { + if (@available(iOS 13.0, macOS 10.15, *)) { + if (object.appleSignInRequestInFlight) { + completion(nil, + [FlutterError errorWithCode:@"operation-not-allowed" + message:@"A Sign in with Apple request is already in progress." + details:nil]); + return; + } + + NSString *nonce = [object randomNonce:32]; + object.currentNonce = nonce; + object.appleCompletion = completion; + object.appleArguments = app; + object.appleSignInRequestInFlight = YES; + + ASAuthorizationAppleIDProvider *appleIDProvider = [[ASAuthorizationAppleIDProvider alloc] init]; + + ASAuthorizationAppleIDRequest *request = [appleIDProvider createRequest]; + NSMutableArray *requestedScopes = [NSMutableArray arrayWithCapacity:2]; + if ([signInProvider.scopes containsObject:@"name"]) { + [requestedScopes addObject:ASAuthorizationScopeFullName]; + } + if ([signInProvider.scopes containsObject:@"email"]) { + [requestedScopes addObject:ASAuthorizationScopeEmail]; + } + request.requestedScopes = [requestedScopes copy]; + request.nonce = [object stringBySha256HashingString:nonce]; + + ASAuthorizationController *authorizationController = + [[ASAuthorizationController alloc] initWithAuthorizationRequests:@[ request ]]; + authorizationController.delegate = object; + authorizationController.presentationContextProvider = object; + [authorizationController performRequests]; + } else { + NSLog(@"Sign in with Apple was introduced in iOS 13, update your Podfile with platform :ios, " + @"'13.0'"); + } +} + +static void handleAppleAuthResult(FLTFirebaseAuthPlugin *object, AuthPigeonFirebaseApp *app, + FIRAuth *auth, FIRAuthCredential *credentials, NSError *error, + void (^_Nonnull completion)(InternalUserCredential *_Nullable, + FlutterError *_Nullable)) { + if (error) { + if (error.code == FIRAuthErrorCodeSecondFactorRequired) { + [object handleMultiFactorError:app completion:completion withError:error]; + } else { + completion(nil, [FLTFirebaseAuthPlugin convertToFlutterError:error]); + } + return; + } + if (credentials) { + [auth + signInWithCredential:credentials + completion:^(FIRAuthDataResult *authResult, NSError *error) { + if (error != nil) { + NSDictionary *userInfo = [error userInfo]; + NSError *underlyingError = [userInfo objectForKey:NSUnderlyingErrorKey]; + + NSDictionary *firebaseDictionary = + underlyingError.userInfo[@"FIRAuthErrorUserInfoDes" + @"erializedResponseKey"]; + + NSString *errorCode = userInfo[@"FIRAuthErrorUserInfoNameKey"]; + + if (firebaseDictionary == nil && errorCode != nil) { + if ([errorCode isEqual:@"ERROR_ACCOUNT_EXISTS_WITH_DIFFERENT_CREDENTIAL"]) { + completion(nil, [FLTFirebaseAuthPlugin convertToFlutterError:error]); + return; + } + + // Removing since it's not parsed and causing issue when sending back the + // object to Flutter + NSMutableDictionary *mutableUserInfo = [userInfo mutableCopy]; + [mutableUserInfo + removeObjectForKey:@"FIRAuthErrorUserInfoUpdatedCredentialKey"]; + NSError *modifiedError = [NSError errorWithDomain:error.domain + code:error.code + userInfo:mutableUserInfo]; + + completion(nil, + [FlutterError errorWithCode:@"sign-in-failed" + message:userInfo[@"NSLocalizedDescription"] + details:modifiedError.userInfo]); + + } else if (firebaseDictionary != nil && + firebaseDictionary[@"message"] != nil) { + // error from firebase-ios-sdk is + // buried in underlying error. + completion(nil, + [FlutterError errorWithCode:@"sign-in-failed" + message:error.localizedDescription + details:firebaseDictionary[@"message"]]); + } else { + completion(nil, [FlutterError errorWithCode:@"sign-in-failed" + message:error.localizedDescription + details:error.userInfo]); + } + } else { + completion([PigeonParser getPigeonUserCredentialFromAuthResult:authResult + authorizationCode:nil], + nil); + } + }]; + } +} + +#pragma mark - Utilities + ++ (NSNumber *_Nullable)storeAuthCredentialIfPresent:(NSError *)error { + if ([error userInfo][FIRAuthErrorUserInfoUpdatedCredentialKey] != nil) { + FIRAuthCredential *authCredential = [error userInfo][FIRAuthErrorUserInfoUpdatedCredentialKey]; + // We temporarily store the non-serializable credential so the + // Dart API can consume these at a later time. + NSNumber *authCredentialHash = @([authCredential hash]); + credentialsMap[authCredentialHash] = authCredential; + return authCredentialHash; + } + return nil; +} + +- (FIRAuth *_Nullable)getFIRAuthFromAppNameFromPigeon:(AuthPigeonFirebaseApp *)pigeonApp { + FIRApp *app = [FLTFirebasePlugin firebaseAppNamed:pigeonApp.appName]; + FIRAuth *auth = [FIRAuth authWithApp:app]; + + auth.tenantID = pigeonApp.tenantId; + auth.customAuthDomain = [FLTFirebaseCorePlugin getCustomDomain:app.name]; + // Auth's `customAuthDomain` supersedes value from `getCustomDomain` set by `initializeApp` + if (pigeonApp.customAuthDomain != nil) { + auth.customAuthDomain = pigeonApp.customAuthDomain; + } + + return auth; +} + +- (void)getFIRAuthCredentialFromArguments:(NSDictionary *)arguments + app:(AuthPigeonFirebaseApp *)app + completion:(void (^)(FIRAuthCredential *credential, + NSError *error))completion { + // If the credential dictionary contains a token, it means a native one has + // been stored for later usage, so we'll attempt to retrieve it here. + if (arguments[kArgumentToken] != nil && ![arguments[kArgumentToken] isEqual:[NSNull null]]) { + NSNumber *credentialHashCode = arguments[kArgumentToken]; + if (credentialsMap[credentialHashCode] != nil) { + completion(credentialsMap[credentialHashCode], nil); + return; + } + } + + NSString *signInMethod = arguments[kArgumentSignInMethod]; + + if ([signInMethod isEqualToString:kSignInMethodGameCenter]) { + // Game Center Games is different to other providers, it requires below callback to get a + // credential. This is why getFIRAuthCredentialFromArguments now requires a completion() + // callback + [FIRGameCenterAuthProvider + getCredentialWithCompletion:^(FIRAuthCredential *credential, NSError *error) { + if (error) { + completion(nil, error); + } else { + completion(credential, nil); + } + }]; + return; + } + + NSString *secret = arguments[kArgumentSecret] == [NSNull null] ? nil : arguments[kArgumentSecret]; + NSString *idToken = + arguments[kArgumentIdToken] == [NSNull null] ? nil : arguments[kArgumentIdToken]; + NSString *accessToken = + arguments[kArgumentAccessToken] == [NSNull null] ? nil : arguments[kArgumentAccessToken]; + NSString *rawNonce = + arguments[kArgumentRawNonce] == [NSNull null] ? nil : arguments[kArgumentRawNonce]; + + // Password Auth + if ([signInMethod isEqualToString:kSignInMethodPassword]) { + NSString *email = arguments[kArgumentEmail]; + completion([FIREmailAuthProvider credentialWithEmail:email password:secret], nil); + return; + } + + // Email Link Auth + if ([signInMethod isEqualToString:kSignInMethodEmailLink]) { + NSString *email = arguments[kArgumentEmail]; + NSString *emailLink = arguments[kArgumentEmailLink]; + completion([FIREmailAuthProvider credentialWithEmail:email link:emailLink], nil); + return; + } + + // Facebook Auth + if ([signInMethod isEqualToString:kSignInMethodFacebook]) { + completion([FIRFacebookAuthProvider credentialWithAccessToken:accessToken], nil); + return; + } + + // Google Auth + if ([signInMethod isEqualToString:kSignInMethodGoogle]) { + completion([FIRGoogleAuthProvider credentialWithIDToken:idToken accessToken:accessToken], nil); + return; + } + + // Twitter Auth + if ([signInMethod isEqualToString:kSignInMethodTwitter]) { + completion([FIRTwitterAuthProvider credentialWithToken:accessToken secret:secret], nil); + return; + } + + // GitHub Auth + if ([signInMethod isEqualToString:kSignInMethodGithub]) { + completion([FIRGitHubAuthProvider credentialWithToken:accessToken], nil); + return; + } + + // Phone Auth - Only supported on iOS + if ([signInMethod isEqualToString:kSignInMethodPhone]) { +#if TARGET_OS_IPHONE + NSString *verificationId = arguments[kArgumentVerificationId]; + NSString *smsCode = arguments[kArgumentSmsCode]; + completion([[FIRPhoneAuthProvider providerWithAuth:[self getFIRAuthFromAppNameFromPigeon:app]] + credentialWithVerificationID:verificationId + verificationCode:smsCode], + nil); + return; +#else + NSLog(@"The Firebase Phone Authentication provider is not supported on the " + @"MacOS platform."); + completion(nil, nil); + return; +#endif + } + // Apple Auth + if ([signInMethod isEqualToString:kSignInMethodApple]) { + if (idToken && rawNonce) { + // Credential with idToken, rawNonce and fullName + NSPersonNameComponents *fullName = [[NSPersonNameComponents alloc] init]; + fullName.givenName = + arguments[kArgumentGivenName] == [NSNull null] ? nil : arguments[kArgumentGivenName]; + fullName.familyName = + arguments[kArgumentFamilyName] == [NSNull null] ? nil : arguments[kArgumentFamilyName]; + fullName.nickname = + arguments[kArgumentNickname] == [NSNull null] ? nil : arguments[kArgumentNickname]; + fullName.namePrefix = + arguments[kArgumentNamePrefix] == [NSNull null] ? nil : arguments[kArgumentNamePrefix]; + fullName.nameSuffix = + arguments[kArgumentNameSuffix] == [NSNull null] ? nil : arguments[kArgumentNameSuffix]; + fullName.middleName = + arguments[kArgumentMiddleName] == [NSNull null] ? nil : arguments[kArgumentMiddleName]; + + completion([FIROAuthProvider appleCredentialWithIDToken:idToken + rawNonce:rawNonce + fullName:fullName], + nil); + return; + } + } + // OAuth + if ([signInMethod isEqualToString:kSignInMethodOAuth]) { + NSString *providerId = arguments[kArgumentProviderId]; + completion([FIROAuthProvider credentialWithProviderID:providerId + IDToken:idToken + rawNonce:rawNonce + accessToken:accessToken], + nil); + return; + } + + NSLog(@"Support for an auth provider with identifier '%@' is not implemented.", signInMethod); + completion(nil, nil); + return; +} + +- (void)ensureAPNSTokenSetting { +#if !TARGET_OS_OSX + FIRApp *defaultApp = [FIRApp defaultApp]; + if (defaultApp) { + if ([FIRAuth auth].APNSToken == nil && _apnsToken != nil) { + [[FIRAuth auth] setAPNSToken:_apnsToken type:FIRAuthAPNSTokenTypeUnknown]; + _apnsToken = nil; + } + } +#endif +} + +- (FIRMultiFactor *)getAppMultiFactorFromPigeon:(nonnull AuthPigeonFirebaseApp *)app { + FIRAuth *auth = [self getFIRAuthFromAppNameFromPigeon:app]; + FIRUser *currentUser = auth.currentUser; + return currentUser.multiFactor; +} + +- (nonnull ASPresentationAnchor)presentationAnchorForAuthorizationController: + (nonnull ASAuthorizationController *)controller API_AVAILABLE(macos(10.15), ios(13.0)) { +#if TARGET_OS_OSX + return [[NSApplication sharedApplication] keyWindow]; +#else + // UIApplication.keyWindow is deprecated in iOS 13+ with UIScene lifecycle. + // Walk the connected scenes to find the foreground active window. + if (@available(iOS 15.0, *)) { + for (UIScene *scene in [UIApplication sharedApplication].connectedScenes) { + if (scene.activationState == UISceneActivationStateForegroundActive && + [scene isKindOfClass:[UIWindowScene class]]) { + UIWindowScene *windowScene = (UIWindowScene *)scene; + if (windowScene.keyWindow) { + return windowScene.keyWindow; + } + } + } + } else if (@available(iOS 13.0, *)) { + for (UIScene *scene in [UIApplication sharedApplication].connectedScenes) { + if (scene.activationState == UISceneActivationStateForegroundActive && + [scene isKindOfClass:[UIWindowScene class]]) { + UIWindowScene *windowScene = (UIWindowScene *)scene; + for (UIWindow *window in windowScene.windows) { + if (window.isKeyWindow) { + return window; + } + } + } + } + } + return [[UIApplication sharedApplication] keyWindow]; +#endif +} + +- (void)enrollPhoneApp:(nonnull AuthPigeonFirebaseApp *)app + assertion:(nonnull InternalPhoneMultiFactorAssertion *)assertion + displayName:(nullable NSString *)displayName + completion:(nonnull void (^)(FlutterError *_Nullable))completion { +#if TARGET_OS_OSX + completion([FlutterError errorWithCode:@"unsupported-platform" + message:@"Phone authentication is not supported on macOS" + details:nil]); +#else + + FIRMultiFactor *multiFactor = [self getAppMultiFactorFromPigeon:app]; + + FIRPhoneAuthCredential *credential = + [[FIRPhoneAuthProvider providerWithAuth:[self getFIRAuthFromAppNameFromPigeon:app]] + credentialWithVerificationID:[assertion verificationId] + verificationCode:[assertion verificationCode]]; + + FIRMultiFactorAssertion *multiFactorAssertion = + [FIRPhoneMultiFactorGenerator assertionWithCredential:credential]; + + [multiFactor enrollWithAssertion:multiFactorAssertion + displayName:displayName + completion:^(NSError *_Nullable error) { + if (error == nil) { + completion(nil); + } else { + completion([FlutterError errorWithCode:@"enroll-failed" + message:error.localizedDescription + details:nil]); + } + }]; +#endif +} + +- (void)getEnrolledFactorsApp:(nonnull AuthPigeonFirebaseApp *)app + completion:(nonnull void (^)(NSArray *_Nullable, + FlutterError *_Nullable))completion { + FIRMultiFactor *multiFactor = [self getAppMultiFactorFromPigeon:app]; + + NSArray *enrolledFactors = [multiFactor enrolledFactors]; + + NSMutableArray *results = [NSMutableArray array]; + + for (FIRMultiFactorInfo *multiFactorInfo in enrolledFactors) { + NSString *phoneNumber; + if ([multiFactorInfo class] == [FIRPhoneMultiFactorInfo class]) { + FIRPhoneMultiFactorInfo *phoneFactorInfo = (FIRPhoneMultiFactorInfo *)multiFactorInfo; + phoneNumber = phoneFactorInfo.phoneNumber; + } + + [results addObject:[InternalMultiFactorInfo + makeWithDisplayName:multiFactorInfo.displayName + enrollmentTimestamp:multiFactorInfo.enrollmentDate.timeIntervalSince1970 + factorId:multiFactorInfo.factorID + uid:multiFactorInfo.UID + phoneNumber:phoneNumber]]; + } + + completion(results, nil); +} + +- (void)getSessionApp:(nonnull AuthPigeonFirebaseApp *)app + completion:(nonnull void (^)(InternalMultiFactorSession *_Nullable, + FlutterError *_Nullable))completion { + FIRMultiFactor *multiFactor = [self getAppMultiFactorFromPigeon:app]; + [multiFactor getSessionWithCompletion:^(FIRMultiFactorSession *_Nullable session, + NSError *_Nullable error) { + NSString *UUID = [[NSUUID UUID] UUIDString]; + self->_multiFactorSessionMap[UUID] = session; + + InternalMultiFactorSession *pigeonSession = [InternalMultiFactorSession makeWithId:UUID]; + completion(pigeonSession, nil); + }]; +} + +- (void)unenrollApp:(nonnull AuthPigeonFirebaseApp *)app + factorUid:(nonnull NSString *)factorUid + completion:(nonnull void (^)(FlutterError *_Nullable))completion { + FIRMultiFactor *multiFactor = [self getAppMultiFactorFromPigeon:app]; + [multiFactor unenrollWithFactorUID:factorUid + completion:^(NSError *_Nullable error) { + if (error == nil) { + completion(nil); + } else { + completion([FlutterError errorWithCode:@"unenroll-failed" + message:error.localizedDescription + details:nil]); + } + }]; +} + +- (void)enrollTotpApp:(nonnull AuthPigeonFirebaseApp *)app + assertionId:(nonnull NSString *)assertionId + displayName:(nullable NSString *)displayName + completion:(nonnull void (^)(FlutterError *_Nullable))completion { + FIRMultiFactor *multiFactor = [self getAppMultiFactorFromPigeon:app]; + + FIRMultiFactorAssertion *assertion = _multiFactorAssertionMap[assertionId]; + + [multiFactor enrollWithAssertion:assertion + displayName:displayName + completion:^(NSError *_Nullable error) { + if (error == nil) { + completion(nil); + } else { + completion([FlutterError errorWithCode:@"enroll-failed" + message:error.localizedDescription + details:nil]); + } + }]; +} + +- (void)resolveSignInResolverId:(nonnull NSString *)resolverId + assertion:(nullable InternalPhoneMultiFactorAssertion *)assertion + totpAssertionId:(nullable NSString *)totpAssertionId + completion:(nonnull void (^)(InternalUserCredential *_Nullable, + FlutterError *_Nullable))completion { + FIRMultiFactorResolver *resolver = _multiFactorResolverMap[resolverId]; + + FIRMultiFactorAssertion *multiFactorAssertion; + + if (assertion != nil) { +#if TARGET_OS_IPHONE + FIRPhoneAuthCredential *credential = + [[FIRPhoneAuthProvider provider] credentialWithVerificationID:[assertion verificationId] + verificationCode:[assertion verificationCode]]; + multiFactorAssertion = [FIRPhoneMultiFactorGenerator assertionWithCredential:credential]; +#endif + } else if (totpAssertionId != nil) { + multiFactorAssertion = _multiFactorAssertionMap[totpAssertionId]; + } else { + completion(nil, + [FlutterError errorWithCode:@"resolve-signin-failed" + message:@"Neither assertion nor totpAssertionId were provided" + details:nil]); + return; + } + + [resolver + resolveSignInWithAssertion:multiFactorAssertion + completion:^(FIRAuthDataResult *_Nullable authResult, + NSError *_Nullable error) { + if (error == nil) { + completion([PigeonParser getPigeonUserCredentialFromAuthResult:authResult + authorizationCode:nil], + nil); + } else { + completion(nil, [FlutterError errorWithCode:@"resolve-signin-failed" + message:error.localizedDescription + details:nil]); + } + }]; +} + +- (void)generateSecretSessionId:(nonnull NSString *)sessionId + completion:(nonnull void (^)(InternalTotpSecret *_Nullable, + FlutterError *_Nullable))completion { + FIRMultiFactorSession *multiFactorSession = _multiFactorSessionMap[sessionId]; + + [FIRTOTPMultiFactorGenerator + generateSecretWithMultiFactorSession:multiFactorSession + completion:^(FIRTOTPSecret *_Nullable secret, + NSError *_Nullable error) { + if (error == nil) { + self->_multiFactorTotpSecretMap[secret.sharedSecretKey] = + secret; + completion([PigeonParser getPigeonTotpSecret:secret], nil); + } else { + completion( + nil, [FlutterError errorWithCode:@"generate-secret-failed" + message:error.localizedDescription + details:nil]); + } + }]; +} + +- (void)getAssertionForEnrollmentSecretKey:(nonnull NSString *)secretKey + oneTimePassword:(nonnull NSString *)oneTimePassword + completion:(nonnull void (^)(NSString *_Nullable, + FlutterError *_Nullable))completion { + FIRTOTPSecret *totpSecret = _multiFactorTotpSecretMap[secretKey]; + + FIRTOTPMultiFactorAssertion *assertion = + [FIRTOTPMultiFactorGenerator assertionForEnrollmentWithSecret:totpSecret + oneTimePassword:oneTimePassword]; + + NSString *UUID = [[NSUUID UUID] UUIDString]; + self->_multiFactorAssertionMap[UUID] = assertion; + completion(UUID, nil); +} + +- (void)getAssertionForSignInEnrollmentId:(nonnull NSString *)enrollmentId + oneTimePassword:(nonnull NSString *)oneTimePassword + completion:(nonnull void (^)(NSString *_Nullable, + FlutterError *_Nullable))completion { + FIRTOTPMultiFactorAssertion *assertion = + [FIRTOTPMultiFactorGenerator assertionForSignInWithEnrollmentID:enrollmentId + oneTimePassword:oneTimePassword]; + NSString *UUID = [[NSUUID UUID] UUIDString]; + self->_multiFactorAssertionMap[UUID] = assertion; + completion(UUID, nil); +} + +- (void)generateQrCodeUrlSecretKey:(nonnull NSString *)secretKey + accountName:(nullable NSString *)accountName + issuer:(nullable NSString *)issuer + completion:(nonnull void (^)(NSString *_Nullable, + FlutterError *_Nullable))completion { + FIRTOTPSecret *totpSecret = _multiFactorTotpSecretMap[secretKey]; + completion([totpSecret generateQRCodeURLWithAccountName:accountName issuer:issuer], nil); +} + +- (void)openInOtpAppSecretKey:(nonnull NSString *)secretKey + qrCodeUrl:(nonnull NSString *)qrCodeUrl + completion:(nonnull void (^)(FlutterError *_Nullable))completion { + FIRTOTPSecret *totpSecret = _multiFactorTotpSecretMap[secretKey]; + [totpSecret openInOTPAppWithQRCodeURL:qrCodeUrl]; + completion(nil); +} + +- (void)applyActionCodeApp:(nonnull AuthPigeonFirebaseApp *)app + code:(nonnull NSString *)code + completion:(nonnull void (^)(FlutterError *_Nullable))completion { + FIRAuth *auth = [self getFIRAuthFromAppNameFromPigeon:app]; + [auth applyActionCode:code + completion:^(NSError *_Nullable error) { + if (error != nil) { + completion([FLTFirebaseAuthPlugin convertToFlutterError:error]); + } else { + completion(nil); + } + }]; +} + +- (void)revokeTokenWithAuthorizationCodeApp:(nonnull AuthPigeonFirebaseApp *)app + authorizationCode:(nonnull NSString *)authorizationCode + completion:(nonnull void (^)(FlutterError *_Nullable))completion { + FIRAuth *auth = [self getFIRAuthFromAppNameFromPigeon:app]; + [auth revokeTokenWithAuthorizationCode:authorizationCode + completion:^(NSError *_Nullable error) { + if (error != nil) { + completion([FLTFirebaseAuthPlugin convertToFlutterError:error]); + } else { + completion(nil); + } + }]; +} + +- (void)revokeAccessTokenApp:(nonnull AuthPigeonFirebaseApp *)app + accessToken:(nonnull NSString *)accessToken + completion:(nonnull void (^)(FlutterError *_Nullable))completion { + // `revokeAccessToken(_:)` is currently Android-only on the Firebase SDK. + // On Apple platforms use `revokeTokenWithAuthorizationCode:` instead. + completion([FlutterError errorWithCode:@"unsupported-platform-operation" + message:@"revokeAccessToken is not supported on iOS/macOS. " + @"Use revokeTokenWithAuthorizationCode instead." + details:nil]); +} + +- (void)checkActionCodeApp:(nonnull AuthPigeonFirebaseApp *)app + code:(nonnull NSString *)code + completion:(nonnull void (^)(InternalActionCodeInfo *_Nullable, + FlutterError *_Nullable))completion { + FIRAuth *auth = [self getFIRAuthFromAppNameFromPigeon:app]; + [auth checkActionCode:code + completion:^(FIRActionCodeInfo *_Nullable info, NSError *_Nullable error) { + if (error != nil) { + completion(nil, [FLTFirebaseAuthPlugin convertToFlutterError:error]); + } else { + InternalActionCodeInfo *result = [self parseActionCode:info]; + if (result.operation == ActionCodeInfoOperationUnknown) { + // Workaround: Firebase iOS SDK >=11.12.0 returns .unknown because + // actionCodeOperation(forRequestType:) only matches camelCase but the + // REST API returns SCREAMING_SNAKE_CASE (e.g. "VERIFY_EMAIL"). + // Re-fetch the raw requestType via REST to resolve the operation. + // See: https://github.com/firebase/flutterfire/issues/17452 + [self resolveActionCodeOperationForApp:app + code:code + fallbackInfo:result + completion:completion]; + } else { + completion(result, nil); + } + } + }]; +} + +- (InternalActionCodeInfo *_Nullable)parseActionCode:(nonnull FIRActionCodeInfo *)info { + InternalActionCodeInfoData *data = [InternalActionCodeInfoData makeWithEmail:info.email + previousEmail:info.previousEmail]; + + ActionCodeInfoOperation operation; + + if (info.operation == FIRActionCodeOperationPasswordReset) { + operation = ActionCodeInfoOperationPasswordReset; + } else if (info.operation == FIRActionCodeOperationVerifyEmail) { + operation = ActionCodeInfoOperationVerifyEmail; + } else if (info.operation == FIRActionCodeOperationRecoverEmail) { + operation = ActionCodeInfoOperationRecoverEmail; + } else if (info.operation == FIRActionCodeOperationEmailLink) { + operation = ActionCodeInfoOperationEmailSignIn; + } else if (info.operation == FIRActionCodeOperationVerifyAndChangeEmail) { + operation = ActionCodeInfoOperationVerifyAndChangeEmail; + } else if (info.operation == FIRActionCodeOperationRevertSecondFactorAddition) { + operation = ActionCodeInfoOperationRevertSecondFactorAddition; + } else { + operation = ActionCodeInfoOperationUnknown; + } + + return [InternalActionCodeInfo makeWithOperation:operation data:data]; +} + +/// Maps a raw requestType string (either camelCase or SCREAMING_SNAKE_CASE) to +/// the corresponding Pigeon enum value. ++ (ActionCodeInfoOperation)operationFromRequestType:(nullable NSString *)requestType { + static NSDictionary *mapping; + static dispatch_once_t onceToken; + dispatch_once(&onceToken, ^{ + mapping = @{ + @"PASSWORD_RESET" : @(ActionCodeInfoOperationPasswordReset), + @"resetPassword" : @(ActionCodeInfoOperationPasswordReset), + @"VERIFY_EMAIL" : @(ActionCodeInfoOperationVerifyEmail), + @"verifyEmail" : @(ActionCodeInfoOperationVerifyEmail), + @"RECOVER_EMAIL" : @(ActionCodeInfoOperationRecoverEmail), + @"recoverEmail" : @(ActionCodeInfoOperationRecoverEmail), + @"EMAIL_SIGNIN" : @(ActionCodeInfoOperationEmailSignIn), + @"signIn" : @(ActionCodeInfoOperationEmailSignIn), + @"VERIFY_AND_CHANGE_EMAIL" : @(ActionCodeInfoOperationVerifyAndChangeEmail), + @"verifyAndChangeEmail" : @(ActionCodeInfoOperationVerifyAndChangeEmail), + @"REVERT_SECOND_FACTOR_ADDITION" : @(ActionCodeInfoOperationRevertSecondFactorAddition), + @"revertSecondFactorAddition" : @(ActionCodeInfoOperationRevertSecondFactorAddition), + }; + }); + + NSNumber *value = mapping[requestType]; + return value ? (ActionCodeInfoOperation)value.integerValue : ActionCodeInfoOperationUnknown; +} + +/// Calls the Identity Toolkit REST API directly to retrieve the raw requestType +/// string, which the iOS SDK fails to parse correctly. Falls back to the original +/// result if the REST call fails for any reason. +- (void)resolveActionCodeOperationForApp:(nonnull AuthPigeonFirebaseApp *)app + code:(nonnull NSString *)code + fallbackInfo:(nonnull InternalActionCodeInfo *)fallbackInfo + completion:(nonnull void (^)(InternalActionCodeInfo *_Nullable, + FlutterError *_Nullable))completion { + FIRApp *firebaseApp = [FLTFirebasePlugin firebaseAppNamed:app.appName]; + NSString *apiKey = firebaseApp.options.APIKey; + + NSString *baseURL; + NSDictionary *emulatorConfig = _emulatorConfigs[app.appName]; + if (emulatorConfig) { + baseURL = [NSString stringWithFormat:@"http://%@:%@/identitytoolkit.googleapis.com", + emulatorConfig[@"host"], emulatorConfig[@"port"]]; + } else { + baseURL = @"https://identitytoolkit.googleapis.com"; + } + + NSString *urlString = + [NSString stringWithFormat:@"%@/v1/accounts:resetPassword?key=%@", baseURL, apiKey]; + NSURL *url = [NSURL URLWithString:urlString]; + + NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:url]; + request.HTTPMethod = @"POST"; + [request setValue:@"application/json" forHTTPHeaderField:@"Content-Type"]; + request.HTTPBody = [NSJSONSerialization dataWithJSONObject:@{@"oobCode" : code} + options:0 + error:nil]; + + NSURLSessionDataTask *task = [[NSURLSession sharedSession] + dataTaskWithRequest:request + completionHandler:^(NSData *_Nullable data, NSURLResponse *_Nullable response, + NSError *_Nullable error) { + if (error || !data) { + completion(fallbackInfo, nil); + return; + } + + NSDictionary *json = [NSJSONSerialization JSONObjectWithData:data options:0 error:nil]; + if (!json || json[@"error"]) { + completion(fallbackInfo, nil); + return; + } + + ActionCodeInfoOperation operation = + [FLTFirebaseAuthPlugin operationFromRequestType:json[@"requestType"]]; + + if (operation != ActionCodeInfoOperationUnknown) { + completion([InternalActionCodeInfo makeWithOperation:operation data:fallbackInfo.data], + nil); + } else { + completion(fallbackInfo, nil); + } + }]; + [task resume]; +} + +- (void)confirmPasswordResetApp:(nonnull AuthPigeonFirebaseApp *)app + code:(nonnull NSString *)code + newPassword:(nonnull NSString *)newPassword + completion:(nonnull void (^)(FlutterError *_Nullable))completion { + FIRAuth *auth = [self getFIRAuthFromAppNameFromPigeon:app]; + [auth confirmPasswordResetWithCode:code + newPassword:newPassword + completion:^(NSError *_Nullable error) { + if (error != nil) { + completion([FLTFirebaseAuthPlugin convertToFlutterError:error]); + } else { + completion(nil); + } + }]; +} + +- (void)createUserWithEmailAndPasswordApp:(nonnull AuthPigeonFirebaseApp *)app + email:(nonnull NSString *)email + password:(nonnull NSString *)password + completion:(nonnull void (^)(InternalUserCredential *_Nullable, + FlutterError *_Nullable))completion { + FIRAuth *auth = [self getFIRAuthFromAppNameFromPigeon:app]; + [auth createUserWithEmail:email + password:password + completion:^(FIRAuthDataResult *_Nullable authResult, NSError *_Nullable error) { + if (error != nil) { + completion(nil, [FLTFirebaseAuthPlugin convertToFlutterError:error]); + } else { + completion([PigeonParser getPigeonUserCredentialFromAuthResult:authResult + authorizationCode:nil], + nil); + } + }]; +} + +- (void)fetchSignInMethodsForEmailApp:(nonnull AuthPigeonFirebaseApp *)app + email:(nonnull NSString *)email + completion:(nonnull void (^)(NSArray *_Nullable, + FlutterError *_Nullable))completion { + FIRAuth *auth = [self getFIRAuthFromAppNameFromPigeon:app]; + [auth fetchSignInMethodsForEmail:email + completion:^(NSArray *_Nullable providers, + NSError *_Nullable error) { + if (error != nil) { + completion(nil, [FLTFirebaseAuthPlugin convertToFlutterError:error]); + } else { + if (providers == nil) { + completion(@[], nil); + } else { + completion(providers, nil); + } + } + }]; +} + +- (void)registerAuthStateListenerApp:(nonnull AuthPigeonFirebaseApp *)app + completion:(nonnull void (^)(NSString *_Nullable, + FlutterError *_Nullable))completion { + FIRAuth *auth = [self getFIRAuthFromAppNameFromPigeon:app]; + + NSString *name = + [NSString stringWithFormat:@"%@/auth-state/%@", kFLTFirebaseAuthChannelName, auth.app.name]; + FlutterEventChannel *channel = [FlutterEventChannel eventChannelWithName:name + binaryMessenger:_binaryMessenger]; + + FLTAuthStateChannelStreamHandler *handler = + [[FLTAuthStateChannelStreamHandler alloc] initWithAuth:auth]; + [channel setStreamHandler:handler]; + + [_eventChannels setObject:channel forKey:name]; + [_streamHandlers setObject:handler forKey:name]; + + completion(name, nil); +} + +- (void)registerIdTokenListenerApp:(nonnull AuthPigeonFirebaseApp *)app + completion:(nonnull void (^)(NSString *_Nullable, + FlutterError *_Nullable))completion { + FIRAuth *auth = [self getFIRAuthFromAppNameFromPigeon:app]; + + NSString *name = + [NSString stringWithFormat:@"%@/id-token/%@", kFLTFirebaseAuthChannelName, auth.app.name]; + + FlutterEventChannel *channel = [FlutterEventChannel eventChannelWithName:name + binaryMessenger:_binaryMessenger]; + + FLTIdTokenChannelStreamHandler *handler = + [[FLTIdTokenChannelStreamHandler alloc] initWithAuth:auth]; + [channel setStreamHandler:handler]; + + [_eventChannels setObject:channel forKey:name]; + [_streamHandlers setObject:handler forKey:name]; + + completion(name, nil); +} + +- (void)sendPasswordResetEmailApp:(nonnull AuthPigeonFirebaseApp *)app + email:(nonnull NSString *)email + actionCodeSettings:(nullable InternalActionCodeSettings *)actionCodeSettings + completion:(nonnull void (^)(FlutterError *_Nullable))completion { + FIRAuth *auth = [self getFIRAuthFromAppNameFromPigeon:app]; + if (actionCodeSettings != nil) { + FIRActionCodeSettings *settings = [PigeonParser parseActionCodeSettings:actionCodeSettings]; + [auth sendPasswordResetWithEmail:email + actionCodeSettings:settings + completion:^(NSError *_Nullable error) { + if (error != nil) { + completion([FLTFirebaseAuthPlugin convertToFlutterError:error]); + } else { + completion(nil); + } + }]; + } else { + [auth sendPasswordResetWithEmail:email + completion:^(NSError *_Nullable error) { + if (error != nil) { + completion([FLTFirebaseAuthPlugin convertToFlutterError:error]); + } else { + completion(nil); + } + }]; + } +} + +- (void)sendSignInLinkToEmailApp:(nonnull AuthPigeonFirebaseApp *)app + email:(nonnull NSString *)email + actionCodeSettings:(nonnull InternalActionCodeSettings *)actionCodeSettings + completion:(nonnull void (^)(FlutterError *_Nullable))completion { + FIRAuth *auth = [self getFIRAuthFromAppNameFromPigeon:app]; + [auth sendSignInLinkToEmail:email + actionCodeSettings:[PigeonParser parseActionCodeSettings:actionCodeSettings] + completion:^(NSError *_Nullable error) { + if (error != nil) { + if (error.code == FIRAuthErrorCodeInternalError) { + [self + handleInternalError:^(InternalUserCredential *_Nullable creds, + FlutterError *_Nullable internalError) { + completion(internalError); + } + withError:error]; + } else { + completion([FLTFirebaseAuthPlugin convertToFlutterError:error]); + } + } else { + completion(nil); + } + }]; +} + +- (void)setLanguageCodeApp:(nonnull AuthPigeonFirebaseApp *)app + languageCode:(nullable NSString *)languageCode + completion: + (nonnull void (^)(NSString *_Nullable, FlutterError *_Nullable))completion { + FIRAuth *auth = [self getFIRAuthFromAppNameFromPigeon:app]; + + if (languageCode != nil && ![languageCode isEqual:[NSNull null]]) { + auth.languageCode = languageCode; + } else { + [auth useAppLanguage]; + } + + completion(auth.languageCode, nil); +} + +- (void)setSettingsApp:(nonnull AuthPigeonFirebaseApp *)app + settings:(nonnull InternalFirebaseAuthSettings *)settings + completion:(nonnull void (^)(FlutterError *_Nullable))completion { + FIRAuth *auth = [self getFIRAuthFromAppNameFromPigeon:app]; + + if (settings.userAccessGroup != nil) { + BOOL useUserAccessGroupSuccessful; + NSError *useUserAccessGroupErrorPtr; + useUserAccessGroupSuccessful = [auth useUserAccessGroup:settings.userAccessGroup + error:&useUserAccessGroupErrorPtr]; + if (!useUserAccessGroupSuccessful) { + completion([FLTFirebaseAuthPlugin convertToFlutterError:useUserAccessGroupErrorPtr]); + return; + } + } + +#if TARGET_OS_IPHONE + if (settings.appVerificationDisabledForTesting) { + auth.settings.appVerificationDisabledForTesting = settings.appVerificationDisabledForTesting; + } +#else + NSLog(@"FIRAuthSettings.appVerificationDisabledForTesting is not supported " + @"on MacOS."); +#endif + + completion(nil); +} + +- (void)signInAnonymouslyApp:(nonnull AuthPigeonFirebaseApp *)app + completion:(nonnull void (^)(InternalUserCredential *_Nullable, + FlutterError *_Nullable))completion { + FIRAuth *auth = [self getFIRAuthFromAppNameFromPigeon:app]; + [auth signInAnonymouslyWithCompletion:^(FIRAuthDataResult *authResult, NSError *error) { + if (error != nil) { + completion(nil, [FLTFirebaseAuthPlugin convertToFlutterError:error]); + } else { + completion([PigeonParser getPigeonUserCredentialFromAuthResult:authResult + authorizationCode:nil], + nil); + } + }]; +} + +- (void)signInWithCredentialApp:(nonnull AuthPigeonFirebaseApp *)app + input:(nonnull NSDictionary *)input + completion:(nonnull void (^)(InternalUserCredential *_Nullable, + FlutterError *_Nullable))completion { + FIRAuth *auth = [self getFIRAuthFromAppNameFromPigeon:app]; + [self + getFIRAuthCredentialFromArguments:input + app:app + completion:^(FIRAuthCredential *credential, NSError *error) { + if (credential == nil) { + completion(nil, + [FlutterError errorWithCode:kErrCodeInvalidCredential + message:kErrMsgInvalidCredential + details:nil]); + return; + } + + if (error) { + completion(nil, + [FLTFirebaseAuthPlugin convertToFlutterError:error]); + } + + [auth + signInWithCredential:credential + completion:^(FIRAuthDataResult *authResult, + NSError *error) { + if (error != nil) { + NSDictionary *userInfo = [error userInfo]; + NSError *underlyingError = + [userInfo objectForKey:NSUnderlyingErrorKey]; + + NSDictionary *firebaseDictionary = + underlyingError + .userInfo[@"FIRAuthErrorUserInfoDeserializ" + @"edResponseKey"]; + + if (firebaseDictionary != nil && + firebaseDictionary[@"message"] != nil) { + // error from firebase-ios-sdk is buried in + // underlying error. + if ([firebaseDictionary[@"code"] + isKindOfClass:[NSNumber class]]) { + [self handleInternalError:completion + withError:error]; + } else { + completion(nil, + [FlutterError + errorWithCode:firebaseDictionary + [@"code"] + message:firebaseDictionary + [@"message"] + details:nil]); + } + } else { + if (error.code == + FIRAuthErrorCodeSecondFactorRequired) { + [self handleMultiFactorError:app + completion:completion + withError:error]; + } else if (error.code == + FIRAuthErrorCodeInternalError) { + [self handleInternalError:completion + withError:error]; + } else { + completion(nil, + [FLTFirebaseAuthPlugin + convertToFlutterError:error]); + } + } + } else { + completion( + [PigeonParser + getPigeonUserCredentialFromAuthResult: + authResult + authorizationCode:nil], + nil); + } + }]; + }]; +} + +- (void)signInWithCustomTokenApp:(nonnull AuthPigeonFirebaseApp *)app + token:(nonnull NSString *)token + completion:(nonnull void (^)(InternalUserCredential *_Nullable, + FlutterError *_Nullable))completion { + FIRAuth *auth = [self getFIRAuthFromAppNameFromPigeon:app]; + + [auth signInWithCustomToken:token + completion:^(FIRAuthDataResult *_Nullable authResult, NSError *_Nullable error) { + if (error != nil) { + if (error.code == FIRAuthErrorCodeSecondFactorRequired) { + [self handleMultiFactorError:app completion:completion withError:error]; + } else if (error.code == FIRAuthErrorCodeInternalError) { + [self handleInternalError:completion withError:error]; + } else { + completion(nil, [FLTFirebaseAuthPlugin convertToFlutterError:error]); + } + } else { + completion([PigeonParser getPigeonUserCredentialFromAuthResult:authResult + authorizationCode:nil], + nil); + } + }]; +} + +- (void)signInWithEmailAndPasswordApp:(nonnull AuthPigeonFirebaseApp *)app + email:(nonnull NSString *)email + password:(nonnull NSString *)password + completion:(nonnull void (^)(InternalUserCredential *_Nullable, + FlutterError *_Nullable))completion { + FIRAuth *auth = [self getFIRAuthFromAppNameFromPigeon:app]; + [auth signInWithEmail:email + password:password + completion:^(FIRAuthDataResult *_Nullable authResult, NSError *_Nullable error) { + if (error != nil) { + if (error.code == FIRAuthErrorCodeSecondFactorRequired) { + [self handleMultiFactorError:app completion:completion withError:error]; + } else if (error.code == FIRAuthErrorCodeInternalError) { + [self handleInternalError:completion withError:error]; + } else { + completion(nil, [FLTFirebaseAuthPlugin convertToFlutterError:error]); + } + } else { + completion([PigeonParser getPigeonUserCredentialFromAuthResult:authResult + authorizationCode:nil], + nil); + } + }]; +} + +- (void)signInWithEmailLinkApp:(nonnull AuthPigeonFirebaseApp *)app + email:(nonnull NSString *)email + emailLink:(nonnull NSString *)emailLink + completion:(nonnull void (^)(InternalUserCredential *_Nullable, + FlutterError *_Nullable))completion { + FIRAuth *auth = [self getFIRAuthFromAppNameFromPigeon:app]; + [auth signInWithEmail:email + link:emailLink + completion:^(FIRAuthDataResult *_Nullable authResult, NSError *_Nullable error) { + if (error != nil) { + if (error.code == FIRAuthErrorCodeSecondFactorRequired) { + [self handleMultiFactorError:app completion:completion withError:error]; + } else if (error.code == FIRAuthErrorCodeInternalError) { + [self handleInternalError:completion withError:error]; + } else { + completion(nil, [FLTFirebaseAuthPlugin convertToFlutterError:error]); + } + } else { + completion([PigeonParser getPigeonUserCredentialFromAuthResult:authResult + authorizationCode:nil], + nil); + } + }]; +} + +- (void)signInWithProviderApp:(nonnull AuthPigeonFirebaseApp *)app + signInProvider:(nonnull InternalSignInProvider *)signInProvider + completion:(nonnull void (^)(InternalUserCredential *_Nullable, + FlutterError *_Nullable))completion { + FIRAuth *auth = [self getFIRAuthFromAppNameFromPigeon:app]; + + if ([signInProvider.providerId isEqualToString:kSignInMethodGameCenter]) { + completion( + nil, + [FlutterError + errorWithCode:@"sign-in-failure" + message: + @"Game Center sign-in requires signing in with 'signInWithCredential()' API." + details:@{}]); + return; + } + + if ([signInProvider.providerId isEqualToString:kSignInMethodApple]) { + self.signInWithAppleAuth = auth; + launchAppleSignInRequest(self, app, signInProvider, completion); + return; + } +#if TARGET_OS_OSX + NSLog(@"signInWithProvider is not supported on the " + @"MacOS platform."); + completion(nil, nil); +#else + self.authProvider = [FIROAuthProvider providerWithProviderID:signInProvider.providerId auth:auth]; + NSArray *scopes = signInProvider.scopes; + if (scopes != nil) { + [self.authProvider setScopes:scopes]; + } + NSDictionary *customParameters = signInProvider.customParameters; + if (customParameters != nil) { + [self.authProvider setCustomParameters:customParameters]; + } + + [self.authProvider + getCredentialWithUIDelegate:nil + completion:^(FIRAuthCredential *_Nullable credential, + NSError *_Nullable error) { + handleAppleAuthResult(self, app, auth, credential, error, completion); + }]; +#endif +} + +- (void)signOutApp:(nonnull AuthPigeonFirebaseApp *)app + completion:(nonnull void (^)(FlutterError *_Nullable))completion { + FIRAuth *auth = [self getFIRAuthFromAppNameFromPigeon:app]; + + if (auth.currentUser == nil) { + completion(nil); + return; + } + + NSError *signOutErrorPtr; + BOOL signOutSuccessful = [auth signOut:&signOutErrorPtr]; + + if (!signOutSuccessful) { + completion([FLTFirebaseAuthPlugin convertToFlutterError:signOutErrorPtr]); + } else { + completion(nil); + } +} + +- (void)useEmulatorApp:(nonnull AuthPigeonFirebaseApp *)app + host:(nonnull NSString *)host + port:(long)port + completion:(nonnull void (^)(FlutterError *_Nullable))completion { + FIRAuth *auth = [self getFIRAuthFromAppNameFromPigeon:app]; + [auth useEmulatorWithHost:host port:port]; + _emulatorConfigs[app.appName] = @{@"host" : host, @"port" : @(port)}; + completion(nil); +} + +- (void)verifyPasswordResetCodeApp:(nonnull AuthPigeonFirebaseApp *)app + code:(nonnull NSString *)code + completion:(nonnull void (^)(NSString *_Nullable, + FlutterError *_Nullable))completion { + FIRAuth *auth = [self getFIRAuthFromAppNameFromPigeon:app]; + + [auth verifyPasswordResetCode:code + completion:^(NSString *_Nullable email, NSError *_Nullable error) { + if (error != nil) { + completion(nil, [FLTFirebaseAuthPlugin convertToFlutterError:error]); + } else { + completion(email, nil); + } + }]; +} + +- (void)verifyPhoneNumberApp:(nonnull AuthPigeonFirebaseApp *)app + request:(nonnull InternalVerifyPhoneNumberRequest *)request + completion: + (nonnull void (^)(NSString *_Nullable, FlutterError *_Nullable))completion { +#if TARGET_OS_OSX + NSLog(@"The Firebase Phone Authentication provider is not supported on the " + @"MacOS platform."); + completion(nil, nil); +#else + FIRAuth *auth = [self getFIRAuthFromAppNameFromPigeon:app]; + + NSString *name = [NSString + stringWithFormat:@"%@/phone/%@", kFLTFirebaseAuthChannelName, [NSUUID UUID].UUIDString]; + FlutterEventChannel *channel = [FlutterEventChannel eventChannelWithName:name + binaryMessenger:_binaryMessenger]; + + NSString *multiFactorSessionId = request.multiFactorSessionId; + FIRMultiFactorSession *multiFactorSession = nil; + + if (multiFactorSessionId != nil) { + multiFactorSession = _multiFactorSessionMap[multiFactorSessionId]; + } + + NSString *multiFactorInfoId = request.multiFactorInfoId; + + FIRPhoneMultiFactorInfo *multiFactorInfo = nil; + if (multiFactorInfoId != nil) { + for (NSString *resolverId in _multiFactorResolverMap) { + for (FIRMultiFactorInfo *info in _multiFactorResolverMap[resolverId].hints) { + if ([info.UID isEqualToString:multiFactorInfoId] && + [info class] == [FIRPhoneMultiFactorInfo class]) { + multiFactorInfo = (FIRPhoneMultiFactorInfo *)info; + break; + } + } + } + } + +#if TARGET_OS_OSX + FLTPhoneNumberVerificationStreamHandler *handler = + [[FLTPhoneNumberVerificationStreamHandler alloc] initWithAuth:auth]; +#else + FLTPhoneNumberVerificationStreamHandler *handler = + [[FLTPhoneNumberVerificationStreamHandler alloc] initWithAuth:auth + request:request + session:multiFactorSession + factorInfo:multiFactorInfo]; +#endif + + [channel setStreamHandler:handler]; + + [_eventChannels setObject:channel forKey:name]; + [_streamHandlers setObject:handler forKey:name]; + + completion(name, nil); +#endif +} + +- (void)deleteApp:(nonnull AuthPigeonFirebaseApp *)app + completion:(nonnull void (^)(FlutterError *_Nullable))completion { + FIRAuth *auth = [self getFIRAuthFromAppNameFromPigeon:app]; + FIRUser *currentUser = auth.currentUser; + if (currentUser == nil) { + completion([FlutterError errorWithCode:kErrCodeNoCurrentUser + message:kErrMsgNoCurrentUser + details:nil]); + return; + } + + [currentUser deleteWithCompletion:^(NSError *_Nullable error) { + if (error != nil) { + completion([FLTFirebaseAuthPlugin convertToFlutterError:error]); + } else { + completion(nil); + } + }]; +} + +- (void)getIdTokenApp:(nonnull AuthPigeonFirebaseApp *)app + forceRefresh:(BOOL)forceRefresh + completion:(nonnull void (^)(InternalIdTokenResult *_Nullable, + FlutterError *_Nullable))completion { + FIRAuth *auth = [self getFIRAuthFromAppNameFromPigeon:app]; + FIRUser *currentUser = auth.currentUser; + if (currentUser == nil) { + completion(nil, [FlutterError errorWithCode:kErrCodeNoCurrentUser + message:kErrMsgNoCurrentUser + details:nil]); + return; + } + + [currentUser + getIDTokenResultForcingRefresh:forceRefresh + completion:^(FIRAuthTokenResult *tokenResult, NSError *error) { + if (error != nil) { + completion(nil, [FLTFirebaseAuthPlugin convertToFlutterError:error]); + return; + } + + completion([PigeonParser parseIdTokenResult:tokenResult], nil); + }]; +} + +- (void)linkWithCredentialApp:(nonnull AuthPigeonFirebaseApp *)app + input:(nonnull NSDictionary *)input + completion:(nonnull void (^)(InternalUserCredential *_Nullable, + FlutterError *_Nullable))completion { + FIRAuth *auth = [self getFIRAuthFromAppNameFromPigeon:app]; + FIRUser *currentUser = auth.currentUser; + if (currentUser == nil) { + completion(nil, [FlutterError errorWithCode:kErrCodeNoCurrentUser + message:kErrMsgNoCurrentUser + details:nil]); + return; + } + + [self + getFIRAuthCredentialFromArguments:input + app:app + completion:^(FIRAuthCredential *credential, NSError *error) { + if (credential == nil) { + completion(nil, + [FlutterError errorWithCode:kErrCodeInvalidCredential + message:kErrMsgInvalidCredential + details:nil]); + return; + } + + if (error) { + completion(nil, + [FLTFirebaseAuthPlugin convertToFlutterError:error]); + } + + [currentUser + linkWithCredential:credential + completion:^(FIRAuthDataResult *authResult, + NSError *error) { + if (error != nil) { + if (error.code == + FIRAuthErrorCodeSecondFactorRequired) { + [self handleMultiFactorError:app + completion:completion + withError:error]; + } else { + completion(nil, [FLTFirebaseAuthPlugin + convertToFlutterError:error]); + } + } else { + completion( + [PigeonParser + getPigeonUserCredentialFromAuthResult: + authResult + authorizationCode:nil], + nil); + } + }]; + }]; +} + +- (void)linkWithProviderApp:(nonnull AuthPigeonFirebaseApp *)app + signInProvider:(nonnull InternalSignInProvider *)signInProvider + completion:(nonnull void (^)(InternalUserCredential *_Nullable, + FlutterError *_Nullable))completion { + FIRAuth *auth = [self getFIRAuthFromAppNameFromPigeon:app]; + FIRUser *currentUser = auth.currentUser; + if ([signInProvider.providerId isEqualToString:kSignInMethodGameCenter]) { + completion( + nil, + [FlutterError + errorWithCode:@"provider-link-failure" + message:@"Game Center provider requires linking with 'linkWithCredential()' API." + details:@{}]); + return; + } + + if (currentUser == nil) { + completion(nil, [FlutterError errorWithCode:kErrCodeNoCurrentUser + message:kErrMsgNoCurrentUser + details:nil]); + return; + } + + if ([signInProvider.providerId isEqualToString:kSignInMethodApple]) { + self.linkWithAppleUser = currentUser; + launchAppleSignInRequest(self, app, signInProvider, completion); + return; + } +#if TARGET_OS_OSX + NSLog(@"linkWithProvider is not supported on the " + @"MacOS platform."); + completion(nil, nil); +#else + self.authProvider = [FIROAuthProvider providerWithProviderID:signInProvider.providerId]; + NSArray *scopes = signInProvider.scopes; + if (scopes != nil) { + [self.authProvider setScopes:scopes]; + } + NSDictionary *customParameters = signInProvider.customParameters; + if (customParameters != nil) { + [self.authProvider setCustomParameters:customParameters]; + } + + [currentUser + linkWithProvider:self.authProvider + UIDelegate:nil + completion:^(FIRAuthDataResult *authResult, NSError *error) { + handleAppleAuthResult(self, app, auth, authResult.credential, error, completion); + }]; +#endif +} + +- (void)reauthenticateWithCredentialApp:(nonnull AuthPigeonFirebaseApp *)app + input:(nonnull NSDictionary *)input + completion:(nonnull void (^)(InternalUserCredential *_Nullable, + FlutterError *_Nullable))completion { + FIRAuth *auth = [self getFIRAuthFromAppNameFromPigeon:app]; + FIRUser *currentUser = auth.currentUser; + if (currentUser == nil) { + completion(nil, [FlutterError errorWithCode:kErrCodeNoCurrentUser + message:kErrMsgNoCurrentUser + details:nil]); + return; + } + + [self + getFIRAuthCredentialFromArguments:input + app:app + completion:^(FIRAuthCredential *credential, NSError *error) { + if (credential == nil) { + completion(nil, + [FlutterError errorWithCode:kErrCodeInvalidCredential + message:kErrMsgInvalidCredential + details:nil]); + return; + } + + if (error) { + completion(nil, + [FLTFirebaseAuthPlugin convertToFlutterError:error]); + } + + [currentUser + reauthenticateWithCredential:credential + completion:^(FIRAuthDataResult *authResult, + NSError *error) { + if (error != nil) { + if (error.code == + FIRAuthErrorCodeSecondFactorRequired) { + [self handleMultiFactorError:app + completion:completion + withError:error]; + } else { + completion( + nil, + [FLTFirebaseAuthPlugin + convertToFlutterError:error]); + } + } else { + completion( + [PigeonParser + getPigeonUserCredentialFromAuthResult: + authResult + authorizationCode: + nil], + nil); + } + }]; + }]; +} + +- (void)reauthenticateWithProviderApp:(nonnull AuthPigeonFirebaseApp *)app + signInProvider:(nonnull InternalSignInProvider *)signInProvider + completion:(nonnull void (^)(InternalUserCredential *_Nullable, + FlutterError *_Nullable))completion { + FIRAuth *auth = [self getFIRAuthFromAppNameFromPigeon:app]; + FIRUser *currentUser = auth.currentUser; + if (currentUser == nil) { + completion(nil, [FlutterError errorWithCode:kErrCodeNoCurrentUser + message:kErrMsgNoCurrentUser + details:nil]); + return; + } + + if ([signInProvider.providerId isEqualToString:kSignInMethodApple]) { + self.isReauthenticatingWithApple = YES; + launchAppleSignInRequest(self, app, signInProvider, completion); + return; + } +#if TARGET_OS_OSX + NSLog(@"reauthenticateWithProvider is not supported on the " + @"MacOS platform."); + completion(nil, nil); +#else + self.authProvider = [FIROAuthProvider providerWithProviderID:signInProvider.providerId]; + NSArray *scopes = signInProvider.scopes; + if (scopes != nil) { + [self.authProvider setScopes:scopes]; + } + NSDictionary *customParameters = signInProvider.customParameters; + if (customParameters != nil) { + [self.authProvider setCustomParameters:customParameters]; + } + + [currentUser reauthenticateWithProvider:self.authProvider + UIDelegate:nil + completion:^(FIRAuthDataResult *authResult, NSError *error) { + handleAppleAuthResult(self, app, auth, authResult.credential, + error, completion); + }]; +#endif +} + +- (void)reloadApp:(nonnull AuthPigeonFirebaseApp *)app + completion: + (nonnull void (^)(InternalUserDetails *_Nullable, FlutterError *_Nullable))completion { + FIRAuth *auth = [self getFIRAuthFromAppNameFromPigeon:app]; + FIRUser *currentUser = auth.currentUser; + if (currentUser == nil) { + completion(nil, [FlutterError errorWithCode:kErrCodeNoCurrentUser + message:kErrMsgNoCurrentUser + details:nil]); + return; + } + + [currentUser reloadWithCompletion:^(NSError *_Nullable error) { + if (error != nil) { + completion(nil, [FLTFirebaseAuthPlugin convertToFlutterError:error]); + } else { + completion([PigeonParser getPigeonDetails:currentUser], nil); + } + }]; +} + +- (void)sendEmailVerificationApp:(nonnull AuthPigeonFirebaseApp *)app + actionCodeSettings:(nullable InternalActionCodeSettings *)actionCodeSettings + completion:(nonnull void (^)(FlutterError *_Nullable))completion { + FIRAuth *auth = [self getFIRAuthFromAppNameFromPigeon:app]; + FIRUser *currentUser = auth.currentUser; + if (currentUser == nil) { + completion([FlutterError errorWithCode:kErrCodeNoCurrentUser + message:kErrMsgNoCurrentUser + details:nil]); + return; + } + + [currentUser + sendEmailVerificationWithActionCodeSettings:[PigeonParser + parseActionCodeSettings:actionCodeSettings] + + completion:^(NSError *_Nullable error) { + if (error != nil) { + completion( + [FLTFirebaseAuthPlugin convertToFlutterError:error]); + } else { + completion(nil); + } + }]; +} + +- (void)unlinkApp:(nonnull AuthPigeonFirebaseApp *)app + providerId:(nonnull NSString *)providerId + completion:(nonnull void (^)(InternalUserCredential *_Nullable, + FlutterError *_Nullable))completion { + FIRAuth *auth = [self getFIRAuthFromAppNameFromPigeon:app]; + FIRUser *currentUser = auth.currentUser; + if (currentUser == nil) { + completion(nil, [FlutterError errorWithCode:kErrCodeNoCurrentUser + message:kErrMsgNoCurrentUser + details:nil]); + return; + } + + [currentUser unlinkFromProvider:providerId + completion:^(FIRUser *_Nullable user, NSError *_Nullable error) { + if (error != nil) { + completion(nil, [FLTFirebaseAuthPlugin convertToFlutterError:error]); + } else { + completion([PigeonParser getPigeonUserCredentialFromFIRUser:user], nil); + } + }]; +} + +- (void)updateEmailApp:(nonnull AuthPigeonFirebaseApp *)app + newEmail:(nonnull NSString *)newEmail + completion:(nonnull void (^)(InternalUserDetails *_Nullable, + FlutterError *_Nullable))completion { + FIRAuth *auth = [self getFIRAuthFromAppNameFromPigeon:app]; + FIRUser *currentUser = auth.currentUser; + if (currentUser == nil) { + completion(nil, [FlutterError errorWithCode:kErrCodeNoCurrentUser + message:kErrMsgNoCurrentUser + details:nil]); + return; + } + + [currentUser updateEmail:newEmail + completion:^(NSError *_Nullable error) { + if (error != nil) { + completion(nil, [FLTFirebaseAuthPlugin convertToFlutterError:error]); + } else { + [currentUser reloadWithCompletion:^(NSError *_Nullable reloadError) { + if (reloadError != nil) { + completion(nil, [FLTFirebaseAuthPlugin convertToFlutterError:reloadError]); + } else { + completion([PigeonParser getPigeonDetails:currentUser], nil); + } + }]; + } + }]; +} + +- (void)updatePasswordApp:(nonnull AuthPigeonFirebaseApp *)app + newPassword:(nonnull NSString *)newPassword + completion:(nonnull void (^)(InternalUserDetails *_Nullable, + FlutterError *_Nullable))completion { + FIRAuth *auth = [self getFIRAuthFromAppNameFromPigeon:app]; + FIRUser *currentUser = auth.currentUser; + if (currentUser == nil) { + completion(nil, [FlutterError errorWithCode:kErrCodeNoCurrentUser + message:kErrMsgNoCurrentUser + details:nil]); + return; + } + + [currentUser + updatePassword:newPassword + completion:^(NSError *_Nullable error) { + if (error != nil) { + completion(nil, [FLTFirebaseAuthPlugin convertToFlutterError:error]); + } else { + [currentUser reloadWithCompletion:^(NSError *_Nullable reloadError) { + if (reloadError != nil) { + completion(nil, [FLTFirebaseAuthPlugin convertToFlutterError:reloadError]); + } else { + completion([PigeonParser getPigeonDetails:currentUser], nil); + } + }]; + } + }]; +} + +- (void)updatePhoneNumberApp:(nonnull AuthPigeonFirebaseApp *)app + input:(nonnull NSDictionary *)input + completion:(nonnull void (^)(InternalUserDetails *_Nullable, + FlutterError *_Nullable))completion { +#if TARGET_OS_IPHONE + FIRAuth *auth = [self getFIRAuthFromAppNameFromPigeon:app]; + FIRUser *currentUser = auth.currentUser; + if (currentUser == nil) { + completion(nil, [FlutterError errorWithCode:kErrCodeNoCurrentUser + message:kErrMsgNoCurrentUser + details:nil]); + return; + } + + [self + getFIRAuthCredentialFromArguments:input + app:app + completion:^(FIRAuthCredential *credential, NSError *error) { + if (credential == nil) { + completion(nil, + [FlutterError errorWithCode:kErrCodeInvalidCredential + message:kErrMsgInvalidCredential + details:nil]); + return; + } + + if (error) { + completion(nil, + [FLTFirebaseAuthPlugin convertToFlutterError:error]); + } + + [currentUser + updatePhoneNumberCredential:(FIRPhoneAuthCredential *)credential + completion:^(NSError *_Nullable error) { + if (error != nil) { + completion( + nil, [FLTFirebaseAuthPlugin + convertToFlutterError:error]); + } else { + [currentUser + reloadWithCompletion:^( + NSError *_Nullable reloadError) { + if (reloadError != nil) { + completion( + nil, [FLTFirebaseAuthPlugin + convertToFlutterError: + reloadError]); + } else { + completion( + [PigeonParser getPigeonDetails: + currentUser], + nil); + } + }]; + } + }]; + }]; +#else + NSLog(@"Updating a users phone number via Firebase Authentication is only " + @"supported on the iOS " + @"platform."); + completion(nil, nil); +#endif +} + +- (void)updateProfileApp:(nonnull AuthPigeonFirebaseApp *)app + profile:(nonnull InternalUserProfile *)profile + completion:(nonnull void (^)(InternalUserDetails *_Nullable, + FlutterError *_Nullable))completion { + FIRAuth *auth = [self getFIRAuthFromAppNameFromPigeon:app]; + FIRUser *currentUser = auth.currentUser; + if (currentUser == nil) { + completion(nil, [FlutterError errorWithCode:kErrCodeNoCurrentUser + message:kErrMsgNoCurrentUser + details:nil]); + return; + } + + FIRUserProfileChangeRequest *changeRequest = [currentUser profileChangeRequest]; + + if (profile.displayNameChanged) { + changeRequest.displayName = profile.displayName; + } + + if (profile.photoUrlChanged) { + if (profile.photoUrl == nil) { + // We apparently cannot set photoURL to nil/NULL to remove it. + // Instead, setting it to empty string appears to work. + // When doing so, Dart will properly receive `null` anyway. + changeRequest.photoURL = [NSURL URLWithString:@""]; + } else { + changeRequest.photoURL = [NSURL URLWithString:profile.photoUrl]; + } + } + + [changeRequest commitChangesWithCompletion:^(NSError *error) { + if (error != nil) { + completion(nil, [FLTFirebaseAuthPlugin convertToFlutterError:error]); + } else { + [currentUser reloadWithCompletion:^(NSError *_Nullable reloadError) { + if (reloadError != nil) { + completion(nil, [FLTFirebaseAuthPlugin convertToFlutterError:reloadError]); + } else { + completion([PigeonParser getPigeonDetails:currentUser], nil); + } + }]; + } + }]; +} + +- (void)verifyBeforeUpdateEmailApp:(nonnull AuthPigeonFirebaseApp *)app + newEmail:(nonnull NSString *)newEmail + actionCodeSettings:(nullable InternalActionCodeSettings *)actionCodeSettings + completion:(nonnull void (^)(FlutterError *_Nullable))completion { + FIRAuth *auth = [self getFIRAuthFromAppNameFromPigeon:app]; + FIRUser *currentUser = auth.currentUser; + if (currentUser == nil) { + completion([FlutterError errorWithCode:kErrCodeNoCurrentUser + message:kErrMsgNoCurrentUser + details:nil]); + return; + } + + [currentUser + sendEmailVerificationBeforeUpdatingEmail:newEmail + actionCodeSettings:[PigeonParser + parseActionCodeSettings:actionCodeSettings] + completion:^(NSError *error) { + if (error != nil) { + completion( + [FLTFirebaseAuthPlugin convertToFlutterError:error]); + } else { + completion(nil); + } + }]; +} + +- (void)initializeRecaptchaConfigApp:(AuthPigeonFirebaseApp *)app + completion:(void (^)(FlutterError *_Nullable))completion { +#if TARGET_OS_OSX + NSLog(@"initializeRecaptchaConfigWithCompletion is not supported on the " + @"MacOS platform."); + completion(nil); +#else + FIRAuth *auth = [self getFIRAuthFromAppNameFromPigeon:app]; + [auth initializeRecaptchaConfigWithCompletion:^(NSError *_Nullable error) { + if (error != nil) { + completion([FLTFirebaseAuthPlugin convertToFlutterError:error]); + } else { + completion(nil); + } + }]; +#endif +} + +@end diff --git a/mih_ui/android/build/ios/SourcePackages/firebase_auth-6.5.4/ios/firebase_auth/Sources/firebase_auth/FLTIdTokenChannelStreamHandler.m b/mih_ui/android/build/ios/SourcePackages/firebase_auth-6.5.4/ios/firebase_auth/Sources/firebase_auth/FLTIdTokenChannelStreamHandler.m new file mode 100644 index 00000000..315bc5ec --- /dev/null +++ b/mih_ui/android/build/ios/SourcePackages/firebase_auth-6.5.4/ios/firebase_auth/Sources/firebase_auth/FLTIdTokenChannelStreamHandler.m @@ -0,0 +1,54 @@ +// Copyright 2021 The Chromium Authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. +@import FirebaseAuth; +#import "include/Private/FLTIdTokenChannelStreamHandler.h" +#import +#import "include/Private/PigeonParser.h" +#import "include/Public/FLTFirebaseAuthPlugin.h" + +@implementation FLTIdTokenChannelStreamHandler { + FIRAuth *_auth; + FIRIDTokenDidChangeListenerHandle _listener; +} + +- (instancetype)initWithAuth:(FIRAuth *)auth { + self = [super init]; + if (self) { + _auth = auth; + } + return self; +} + +- (FlutterError *)onListenWithArguments:(id)arguments eventSink:(FlutterEventSink)events { + bool __block initialAuthState = YES; + + _listener = [_auth addIDTokenDidChangeListener:^(FIRAuth *_Nonnull auth, + FIRUser *_Nullable user) { + if (initialAuthState) { + initialAuthState = NO; + return; + } + + if (user) { + events(@{ + @"user" : [PigeonParser getManualList:[PigeonParser getPigeonDetails:[auth currentUser]]] + }); + } else { + events(@{@"user" : [NSNull null]}); + } + }]; + + return nil; +} + +- (FlutterError *)onCancelWithArguments:(id)arguments { + if (_listener) { + [_auth removeIDTokenDidChangeListener:_listener]; + } + _listener = nil; + + return nil; +} + +@end diff --git a/mih_ui/android/build/ios/SourcePackages/firebase_auth-6.5.4/ios/firebase_auth/Sources/firebase_auth/FLTPhoneNumberVerificationStreamHandler.m b/mih_ui/android/build/ios/SourcePackages/firebase_auth-6.5.4/ios/firebase_auth/Sources/firebase_auth/FLTPhoneNumberVerificationStreamHandler.m new file mode 100644 index 00000000..511d2caa --- /dev/null +++ b/mih_ui/android/build/ios/SourcePackages/firebase_auth-6.5.4/ios/firebase_auth/Sources/firebase_auth/FLTPhoneNumberVerificationStreamHandler.m @@ -0,0 +1,98 @@ +// Copyright 2021 The Chromium Authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +@import FirebaseAuth; + +#import "include/Private/FLTPhoneNumberVerificationStreamHandler.h" +#import "include/Public/FLTFirebaseAuthPlugin.h" + +@implementation FLTPhoneNumberVerificationStreamHandler { + FIRAuth *_auth; + NSString *_phoneNumber; +#if TARGET_OS_OSX +#else + FIRMultiFactorSession *_session; + FIRPhoneMultiFactorInfo *_factorInfo; +#endif +} + +#if TARGET_OS_OSX +- (instancetype)initWithAuth:(id)auth request:(InternalVerifyPhoneNumberRequest *)request { + self = [super init]; + if (self) { + _auth = auth; + _phoneNumber = request.phoneNumber; + } + return self; +} +#else +- (instancetype)initWithAuth:(id)auth + request:(InternalVerifyPhoneNumberRequest *)request + session:(FIRMultiFactorSession *)session + factorInfo:(FIRPhoneMultiFactorInfo *)factorInfo { + self = [super init]; + if (self) { + _auth = auth; + _phoneNumber = request.phoneNumber; + _session = session; + _factorInfo = factorInfo; + } + return self; +} +#endif + +- (FlutterError *)onListenWithArguments:(id)arguments eventSink:(FlutterEventSink)events { +#if TARGET_OS_IPHONE + id completer = ^(NSString *verificationID, NSError *error) { + if (error != nil) { + FlutterError *errorDetails = [FLTFirebaseAuthPlugin convertToFlutterError:error]; + events(@{ + @"name" : @"Auth#phoneVerificationFailed", + @"error" : @{ + @"code" : errorDetails.code, + @"message" : errorDetails.message, + @"details" : errorDetails.details, + } + }); + } else { + events(@{ + @"name" : @"Auth#phoneCodeSent", + @"verificationId" : verificationID, + }); + } + }; + + // Try catch to capture 'missing URL scheme' error. + @try { + if (_factorInfo != nil) { + [[FIRPhoneAuthProvider providerWithAuth:_auth] + verifyPhoneNumberWithMultiFactorInfo:_factorInfo + UIDelegate:nil + multiFactorSession:_session + completion:completer]; + + } else { + [[FIRPhoneAuthProvider providerWithAuth:_auth] verifyPhoneNumber:_phoneNumber + UIDelegate:nil + multiFactorSession:_session + completion:completer]; + } + } @catch (NSException *exception) { + events(@{ + @"name" : @"Auth#phoneVerificationFailed", + @"error" : @{ + @"message" : exception.reason, + } + }); + } +#endif + + return nil; +} + +- (FlutterError *)onCancelWithArguments:(id)arguments { + return nil; +} + +@end diff --git a/mih_ui/android/build/ios/SourcePackages/firebase_auth-6.5.4/ios/firebase_auth/Sources/firebase_auth/PigeonParser.m b/mih_ui/android/build/ios/SourcePackages/firebase_auth-6.5.4/ios/firebase_auth/Sources/firebase_auth/PigeonParser.m new file mode 100644 index 00000000..8d7a7b1c --- /dev/null +++ b/mih_ui/android/build/ios/SourcePackages/firebase_auth-6.5.4/ios/firebase_auth/Sources/firebase_auth/PigeonParser.m @@ -0,0 +1,171 @@ +// Copyright 2023, the Chromium project authors. Please see the AUTHORS file +// for details. All rights reserved. Use of this source code is governed by a +// BSD-style license that can be found in the LICENSE file. + +@import FirebaseAuth; + +#import "include/Private/PigeonParser.h" +#import +#import "include/Public/CustomPigeonHeader.h" + +@implementation PigeonParser + ++ (InternalUserCredential *) + getPigeonUserCredentialFromAuthResult:(nonnull FIRAuthDataResult *)authResult + authorizationCode:(nullable NSString *)authorizationCode { + return [InternalUserCredential + makeWithUser:[self getPigeonDetails:authResult.user] + additionalUserInfo:[self getPigeonAdditionalUserInfo:authResult.additionalUserInfo + authorizationCode:authorizationCode] + credential:[self getPigeonAuthCredential:authResult.credential token:nil]]; +} + ++ (InternalUserCredential *)getPigeonUserCredentialFromFIRUser:(nonnull FIRUser *)user { + return [InternalUserCredential makeWithUser:[self getPigeonDetails:user] + additionalUserInfo:nil + credential:nil]; +} + ++ (InternalUserDetails *)getPigeonDetails:(nonnull FIRUser *)user { + return [InternalUserDetails makeWithUserInfo:[self getPigeonUserInfo:user] + providerData:[self getProviderData:user.providerData]]; +} + ++ (InternalUserInfo *)getPigeonUserInfo:(nonnull FIRUser *)user { + NSString *photoUrlString = user.photoURL.absoluteString; + return [InternalUserInfo + makeWithUid:user.uid + email:user.email + displayName:user.displayName + photoUrl:(photoUrlString.length > 0) ? photoUrlString : nil + phoneNumber:user.phoneNumber + isAnonymous:user.isAnonymous + isEmailVerified:user.emailVerified + providerId:user.providerID + tenantId:user.tenantID + refreshToken:user.refreshToken + creationTimestamp:@((long)([user.metadata.creationDate timeIntervalSince1970] * 1000)) + lastSignInTimestamp:@((long)([user.metadata.lastSignInDate timeIntervalSince1970] * 1000))]; +} + ++ (NSArray *> *)getProviderData: + (nonnull NSArray> *)providerData { + NSMutableArray *> *dataArray = + [NSMutableArray arrayWithCapacity:providerData.count]; + + for (id userInfo in providerData) { + NSString *photoUrlStr = userInfo.photoURL.absoluteString; + NSDictionary *dataDict = @{ + @"providerId" : userInfo.providerID, + // Can be null on emulator + @"uid" : userInfo.uid ?: @"", + @"displayName" : userInfo.displayName ?: [NSNull null], + @"email" : userInfo.email ?: [NSNull null], + @"phoneNumber" : userInfo.phoneNumber ?: [NSNull null], + @"photoURL" : photoUrlStr ?: [NSNull null], + // isAnonymous is always false on in a providerData object (the user is not anonymous) + @"isAnonymous" : @NO, + // isEmailVerified is always true on in a providerData object (the email is verified by the + // provider) + @"isEmailVerified" : @YES, + }; + [dataArray addObject:dataDict]; + } + return [dataArray copy]; +} + ++ (InternalAdditionalUserInfo *)getPigeonAdditionalUserInfo: + (nonnull FIRAdditionalUserInfo *)userInfo + authorizationCode:(nullable NSString *)authorizationCode { + return [InternalAdditionalUserInfo makeWithIsNewUser:userInfo.isNewUser + providerId:userInfo.providerID + username:userInfo.username + authorizationCode:authorizationCode + profile:userInfo.profile]; +} + ++ (InternalTotpSecret *)getPigeonTotpSecret:(FIRTOTPSecret *)secret { + return [InternalTotpSecret makeWithCodeIntervalSeconds:nil + codeLength:nil + enrollmentCompletionDeadline:nil + hashingAlgorithm:nil + secretKey:secret.sharedSecretKey]; +} + ++ (InternalAuthCredential *)getPigeonAuthCredential:(FIRAuthCredential *)authCredential + token:(NSNumber *_Nullable)token { + if (authCredential == nil) { + return nil; + } + + NSString *accessToken = nil; + if ([authCredential isKindOfClass:[FIROAuthCredential class]]) { + if (((FIROAuthCredential *)authCredential).accessToken != nil) { + accessToken = ((FIROAuthCredential *)authCredential).accessToken; + } else if (((FIROAuthCredential *)authCredential).IDToken != nil) { + // For Sign In With Apple, the token is stored in IDToken + accessToken = ((FIROAuthCredential *)authCredential).IDToken; + } + } + + NSUInteger nativeId = + token != nil ? [token unsignedLongValue] : (NSUInteger)[authCredential hash]; + + return [InternalAuthCredential makeWithProviderId:authCredential.provider + signInMethod:authCredential.provider + nativeId:nativeId + accessToken:accessToken ?: nil]; +} + ++ (FIRActionCodeSettings *_Nullable)parseActionCodeSettings: + (nullable InternalActionCodeSettings *)settings { + if (settings == nil) { + return nil; + } + + FIRActionCodeSettings *codeSettings = [[FIRActionCodeSettings alloc] init]; + + if (settings.url != nil) { + codeSettings.URL = [NSURL URLWithString:settings.url]; + } + + if (settings.linkDomain != nil) { + codeSettings.linkDomain = settings.linkDomain; + } + + codeSettings.handleCodeInApp = settings.handleCodeInApp; + + if (settings.iOSBundleId != nil) { + codeSettings.iOSBundleID = settings.iOSBundleId; + } + + return codeSettings; +} + ++ (InternalIdTokenResult *)parseIdTokenResult:(FIRAuthTokenResult *)tokenResult { + long expirationTimestamp = (long)[tokenResult.expirationDate timeIntervalSince1970] * 1000; + long authTimestamp = (long)[tokenResult.authDate timeIntervalSince1970] * 1000; + long issuedAtTimestamp = (long)[tokenResult.issuedAtDate timeIntervalSince1970] * 1000; + + return [InternalIdTokenResult makeWithToken:tokenResult.token + expirationTimestamp:@(expirationTimestamp) + authTimestamp:@(authTimestamp) + issuedAtTimestamp:@(issuedAtTimestamp) + signInProvider:tokenResult.signInProvider + claims:tokenResult.claims + signInSecondFactor:tokenResult.signInSecondFactor]; +} + ++ (NSArray *_Nonnull)getManualList:(nonnull InternalUserDetails *)userDetails { + NSMutableArray *output = [NSMutableArray array]; + + id userInfoList = [[userDetails userInfo] toList]; + [output addObject:userInfoList]; + + id providerData = [userDetails providerData]; + [output addObject:providerData]; + + return [output copy]; +} + +@end diff --git a/mih_ui/android/build/ios/SourcePackages/firebase_auth-6.5.4/ios/firebase_auth/Sources/firebase_auth/firebase_auth_messages.g.m b/mih_ui/android/build/ios/SourcePackages/firebase_auth-6.5.4/ios/firebase_auth/Sources/firebase_auth/firebase_auth_messages.g.m new file mode 100644 index 00000000..82ae8cfc --- /dev/null +++ b/mih_ui/android/build/ios/SourcePackages/firebase_auth-6.5.4/ios/firebase_auth/Sources/firebase_auth/firebase_auth_messages.g.m @@ -0,0 +1,3005 @@ +// Copyright 2023, the Chromium project authors. Please see the AUTHORS file +// for details. All rights reserved. Use of this source code is governed by a +// BSD-style license that can be found in the LICENSE file. +// Autogenerated from Pigeon (v26.3.4), do not edit directly. +// See also: https://pub.dev/packages/pigeon + +#import "include/Public/firebase_auth_messages.g.h" + +#if TARGET_OS_OSX +@import FlutterMacOS; +#else +@import Flutter; +#endif + +static BOOL __attribute__((unused)) FLTPigeonDeepEquals(id _Nullable a, id _Nullable b) { + if (a == b) { + return YES; + } + if (a == nil) { + return b == [NSNull null]; + } + if (b == nil) { + return a == [NSNull null]; + } + if ([a isKindOfClass:[NSNumber class]] && [b isKindOfClass:[NSNumber class]]) { + return + [a isEqual:b] || (isnan([(NSNumber *)a doubleValue]) && isnan([(NSNumber *)b doubleValue])); + } + if ([a isKindOfClass:[NSArray class]] && [b isKindOfClass:[NSArray class]]) { + NSArray *arrayA = (NSArray *)a; + NSArray *arrayB = (NSArray *)b; + if (arrayA.count != arrayB.count) { + return NO; + } + for (NSUInteger i = 0; i < arrayA.count; i++) { + if (!FLTPigeonDeepEquals(arrayA[i], arrayB[i])) { + return NO; + } + } + return YES; + } + if ([a isKindOfClass:[NSDictionary class]] && [b isKindOfClass:[NSDictionary class]]) { + NSDictionary *dictA = (NSDictionary *)a; + NSDictionary *dictB = (NSDictionary *)b; + if (dictA.count != dictB.count) { + return NO; + } + for (id keyA in dictA) { + id valueA = dictA[keyA]; + BOOL found = NO; + for (id keyB in dictB) { + if (FLTPigeonDeepEquals(keyA, keyB)) { + id valueB = dictB[keyB]; + if (FLTPigeonDeepEquals(valueA, valueB)) { + found = YES; + break; + } else { + return NO; + } + } + } + if (!found) { + return NO; + } + } + return YES; + } + return [a isEqual:b]; +} + +static NSUInteger __attribute__((unused)) FLTPigeonDeepHash(id _Nullable value) { + if (value == nil || value == (id)[NSNull null]) { + return 0; + } + if ([value isKindOfClass:[NSNumber class]]) { + NSNumber *n = (NSNumber *)value; + double d = n.doubleValue; + if (isnan(d)) { + // Normalize NaN to a consistent hash. + return (NSUInteger)0x7FF8000000000000; + } + if (d == 0.0) { + // Normalize -0.0 to 0.0 so they have the same hash code. + d = 0.0; + } + return @(d).hash; + } + if ([value isKindOfClass:[NSArray class]]) { + NSUInteger result = 1; + for (id item in (NSArray *)value) { + result = result * 31 + FLTPigeonDeepHash(item); + } + return result; + } + if ([value isKindOfClass:[NSDictionary class]]) { + NSUInteger result = 0; + NSDictionary *dict = (NSDictionary *)value; + for (id key in dict) { + result += ((FLTPigeonDeepHash(key) * 31) ^ FLTPigeonDeepHash(dict[key])); + } + return result; + } + return [value hash]; +} + +static NSArray *wrapResult(id result, FlutterError *error) { + if (error) { + return @[ + error.code ?: [NSNull null], error.message ?: [NSNull null], error.details ?: [NSNull null] + ]; + } + return @[ result ?: [NSNull null] ]; +} + +static id GetNullableObjectAtIndex(NSArray *array, NSInteger key) { + id result = array[key]; + return (result == [NSNull null]) ? nil : result; +} + +/// The type of operation that generated the action code from calling +/// [checkActionCode]. +@implementation ActionCodeInfoOperationBox +- (instancetype)initWithValue:(ActionCodeInfoOperation)value { + self = [super init]; + if (self) { + _value = value; + } + return self; +} +@end + +@interface InternalMultiFactorSession () ++ (InternalMultiFactorSession *)fromList:(NSArray *)list; ++ (nullable InternalMultiFactorSession *)nullableFromList:(NSArray *)list; +- (NSArray *)toList; +@end + +@interface InternalPhoneMultiFactorAssertion () ++ (InternalPhoneMultiFactorAssertion *)fromList:(NSArray *)list; ++ (nullable InternalPhoneMultiFactorAssertion *)nullableFromList:(NSArray *)list; +- (NSArray *)toList; +@end + +@interface InternalMultiFactorInfo () ++ (InternalMultiFactorInfo *)fromList:(NSArray *)list; ++ (nullable InternalMultiFactorInfo *)nullableFromList:(NSArray *)list; +- (NSArray *)toList; +@end + +@interface AuthPigeonFirebaseApp () ++ (AuthPigeonFirebaseApp *)fromList:(NSArray *)list; ++ (nullable AuthPigeonFirebaseApp *)nullableFromList:(NSArray *)list; +- (NSArray *)toList; +@end + +@interface InternalActionCodeInfoData () ++ (InternalActionCodeInfoData *)fromList:(NSArray *)list; ++ (nullable InternalActionCodeInfoData *)nullableFromList:(NSArray *)list; +- (NSArray *)toList; +@end + +@interface InternalActionCodeInfo () ++ (InternalActionCodeInfo *)fromList:(NSArray *)list; ++ (nullable InternalActionCodeInfo *)nullableFromList:(NSArray *)list; +- (NSArray *)toList; +@end + +@interface InternalAdditionalUserInfo () ++ (InternalAdditionalUserInfo *)fromList:(NSArray *)list; ++ (nullable InternalAdditionalUserInfo *)nullableFromList:(NSArray *)list; +- (NSArray *)toList; +@end + +@interface InternalAuthCredential () ++ (InternalAuthCredential *)fromList:(NSArray *)list; ++ (nullable InternalAuthCredential *)nullableFromList:(NSArray *)list; +- (NSArray *)toList; +@end + +@interface InternalUserInfo () ++ (InternalUserInfo *)fromList:(NSArray *)list; ++ (nullable InternalUserInfo *)nullableFromList:(NSArray *)list; +- (NSArray *)toList; +@end + +@interface InternalUserDetails () ++ (InternalUserDetails *)fromList:(NSArray *)list; ++ (nullable InternalUserDetails *)nullableFromList:(NSArray *)list; +- (NSArray *)toList; +@end + +@interface InternalUserCredential () ++ (InternalUserCredential *)fromList:(NSArray *)list; ++ (nullable InternalUserCredential *)nullableFromList:(NSArray *)list; +- (NSArray *)toList; +@end + +@interface InternalAuthCredentialInput () ++ (InternalAuthCredentialInput *)fromList:(NSArray *)list; ++ (nullable InternalAuthCredentialInput *)nullableFromList:(NSArray *)list; +- (NSArray *)toList; +@end + +@interface InternalActionCodeSettings () ++ (InternalActionCodeSettings *)fromList:(NSArray *)list; ++ (nullable InternalActionCodeSettings *)nullableFromList:(NSArray *)list; +- (NSArray *)toList; +@end + +@interface InternalFirebaseAuthSettings () ++ (InternalFirebaseAuthSettings *)fromList:(NSArray *)list; ++ (nullable InternalFirebaseAuthSettings *)nullableFromList:(NSArray *)list; +- (NSArray *)toList; +@end + +@interface InternalSignInProvider () ++ (InternalSignInProvider *)fromList:(NSArray *)list; ++ (nullable InternalSignInProvider *)nullableFromList:(NSArray *)list; +- (NSArray *)toList; +@end + +@interface InternalVerifyPhoneNumberRequest () ++ (InternalVerifyPhoneNumberRequest *)fromList:(NSArray *)list; ++ (nullable InternalVerifyPhoneNumberRequest *)nullableFromList:(NSArray *)list; +- (NSArray *)toList; +@end + +@interface InternalIdTokenResult () ++ (InternalIdTokenResult *)fromList:(NSArray *)list; ++ (nullable InternalIdTokenResult *)nullableFromList:(NSArray *)list; +- (NSArray *)toList; +@end + +@interface InternalUserProfile () ++ (InternalUserProfile *)fromList:(NSArray *)list; ++ (nullable InternalUserProfile *)nullableFromList:(NSArray *)list; +- (NSArray *)toList; +@end + +@interface InternalTotpSecret () ++ (InternalTotpSecret *)fromList:(NSArray *)list; ++ (nullable InternalTotpSecret *)nullableFromList:(NSArray *)list; +- (NSArray *)toList; +@end + +@implementation InternalMultiFactorSession ++ (instancetype)makeWithId:(NSString *)id { + InternalMultiFactorSession *pigeonResult = [[InternalMultiFactorSession alloc] init]; + pigeonResult.id = id; + return pigeonResult; +} ++ (InternalMultiFactorSession *)fromList:(NSArray *)list { + InternalMultiFactorSession *pigeonResult = [[InternalMultiFactorSession alloc] init]; + pigeonResult.id = GetNullableObjectAtIndex(list, 0); + return pigeonResult; +} ++ (nullable InternalMultiFactorSession *)nullableFromList:(NSArray *)list { + return (list) ? [InternalMultiFactorSession fromList:list] : nil; +} +- (NSArray *)toList { + return @[ + self.id ?: [NSNull null], + ]; +} +- (BOOL)isEqual:(id)object { + if (self == object) { + return YES; + } + if (![object isKindOfClass:[self class]]) { + return NO; + } + InternalMultiFactorSession *other = (InternalMultiFactorSession *)object; + return FLTPigeonDeepEquals(self.id, other.id); +} + +- (NSUInteger)hash { + NSUInteger result = [self class].hash; + result = result * 31 + FLTPigeonDeepHash(self.id); + return result; +} +@end + +@implementation InternalPhoneMultiFactorAssertion ++ (instancetype)makeWithVerificationId:(NSString *)verificationId + verificationCode:(NSString *)verificationCode { + InternalPhoneMultiFactorAssertion *pigeonResult = + [[InternalPhoneMultiFactorAssertion alloc] init]; + pigeonResult.verificationId = verificationId; + pigeonResult.verificationCode = verificationCode; + return pigeonResult; +} ++ (InternalPhoneMultiFactorAssertion *)fromList:(NSArray *)list { + InternalPhoneMultiFactorAssertion *pigeonResult = + [[InternalPhoneMultiFactorAssertion alloc] init]; + pigeonResult.verificationId = GetNullableObjectAtIndex(list, 0); + pigeonResult.verificationCode = GetNullableObjectAtIndex(list, 1); + return pigeonResult; +} ++ (nullable InternalPhoneMultiFactorAssertion *)nullableFromList:(NSArray *)list { + return (list) ? [InternalPhoneMultiFactorAssertion fromList:list] : nil; +} +- (NSArray *)toList { + return @[ + self.verificationId ?: [NSNull null], + self.verificationCode ?: [NSNull null], + ]; +} +- (BOOL)isEqual:(id)object { + if (self == object) { + return YES; + } + if (![object isKindOfClass:[self class]]) { + return NO; + } + InternalPhoneMultiFactorAssertion *other = (InternalPhoneMultiFactorAssertion *)object; + return FLTPigeonDeepEquals(self.verificationId, other.verificationId) && + FLTPigeonDeepEquals(self.verificationCode, other.verificationCode); +} + +- (NSUInteger)hash { + NSUInteger result = [self class].hash; + result = result * 31 + FLTPigeonDeepHash(self.verificationId); + result = result * 31 + FLTPigeonDeepHash(self.verificationCode); + return result; +} +@end + +@implementation InternalMultiFactorInfo ++ (instancetype)makeWithDisplayName:(nullable NSString *)displayName + enrollmentTimestamp:(double)enrollmentTimestamp + factorId:(nullable NSString *)factorId + uid:(NSString *)uid + phoneNumber:(nullable NSString *)phoneNumber { + InternalMultiFactorInfo *pigeonResult = [[InternalMultiFactorInfo alloc] init]; + pigeonResult.displayName = displayName; + pigeonResult.enrollmentTimestamp = enrollmentTimestamp; + pigeonResult.factorId = factorId; + pigeonResult.uid = uid; + pigeonResult.phoneNumber = phoneNumber; + return pigeonResult; +} ++ (InternalMultiFactorInfo *)fromList:(NSArray *)list { + InternalMultiFactorInfo *pigeonResult = [[InternalMultiFactorInfo alloc] init]; + pigeonResult.displayName = GetNullableObjectAtIndex(list, 0); + pigeonResult.enrollmentTimestamp = [GetNullableObjectAtIndex(list, 1) doubleValue]; + pigeonResult.factorId = GetNullableObjectAtIndex(list, 2); + pigeonResult.uid = GetNullableObjectAtIndex(list, 3); + pigeonResult.phoneNumber = GetNullableObjectAtIndex(list, 4); + return pigeonResult; +} ++ (nullable InternalMultiFactorInfo *)nullableFromList:(NSArray *)list { + return (list) ? [InternalMultiFactorInfo fromList:list] : nil; +} +- (NSArray *)toList { + return @[ + self.displayName ?: [NSNull null], + @(self.enrollmentTimestamp), + self.factorId ?: [NSNull null], + self.uid ?: [NSNull null], + self.phoneNumber ?: [NSNull null], + ]; +} +- (BOOL)isEqual:(id)object { + if (self == object) { + return YES; + } + if (![object isKindOfClass:[self class]]) { + return NO; + } + InternalMultiFactorInfo *other = (InternalMultiFactorInfo *)object; + return FLTPigeonDeepEquals(self.displayName, other.displayName) && + (self.enrollmentTimestamp == other.enrollmentTimestamp || + (isnan(self.enrollmentTimestamp) && isnan(other.enrollmentTimestamp))) && + FLTPigeonDeepEquals(self.factorId, other.factorId) && + FLTPigeonDeepEquals(self.uid, other.uid) && + FLTPigeonDeepEquals(self.phoneNumber, other.phoneNumber); +} + +- (NSUInteger)hash { + NSUInteger result = [self class].hash; + result = result * 31 + FLTPigeonDeepHash(self.displayName); + result = result * 31 + (isnan(self.enrollmentTimestamp) ? (NSUInteger)0x7FF8000000000000 + : @(self.enrollmentTimestamp).hash); + result = result * 31 + FLTPigeonDeepHash(self.factorId); + result = result * 31 + FLTPigeonDeepHash(self.uid); + result = result * 31 + FLTPigeonDeepHash(self.phoneNumber); + return result; +} +@end + +@implementation AuthPigeonFirebaseApp ++ (instancetype)makeWithAppName:(NSString *)appName + tenantId:(nullable NSString *)tenantId + customAuthDomain:(nullable NSString *)customAuthDomain { + AuthPigeonFirebaseApp *pigeonResult = [[AuthPigeonFirebaseApp alloc] init]; + pigeonResult.appName = appName; + pigeonResult.tenantId = tenantId; + pigeonResult.customAuthDomain = customAuthDomain; + return pigeonResult; +} ++ (AuthPigeonFirebaseApp *)fromList:(NSArray *)list { + AuthPigeonFirebaseApp *pigeonResult = [[AuthPigeonFirebaseApp alloc] init]; + pigeonResult.appName = GetNullableObjectAtIndex(list, 0); + pigeonResult.tenantId = GetNullableObjectAtIndex(list, 1); + pigeonResult.customAuthDomain = GetNullableObjectAtIndex(list, 2); + return pigeonResult; +} ++ (nullable AuthPigeonFirebaseApp *)nullableFromList:(NSArray *)list { + return (list) ? [AuthPigeonFirebaseApp fromList:list] : nil; +} +- (NSArray *)toList { + return @[ + self.appName ?: [NSNull null], + self.tenantId ?: [NSNull null], + self.customAuthDomain ?: [NSNull null], + ]; +} +- (BOOL)isEqual:(id)object { + if (self == object) { + return YES; + } + if (![object isKindOfClass:[self class]]) { + return NO; + } + AuthPigeonFirebaseApp *other = (AuthPigeonFirebaseApp *)object; + return FLTPigeonDeepEquals(self.appName, other.appName) && + FLTPigeonDeepEquals(self.tenantId, other.tenantId) && + FLTPigeonDeepEquals(self.customAuthDomain, other.customAuthDomain); +} + +- (NSUInteger)hash { + NSUInteger result = [self class].hash; + result = result * 31 + FLTPigeonDeepHash(self.appName); + result = result * 31 + FLTPigeonDeepHash(self.tenantId); + result = result * 31 + FLTPigeonDeepHash(self.customAuthDomain); + return result; +} +@end + +@implementation InternalActionCodeInfoData ++ (instancetype)makeWithEmail:(nullable NSString *)email + previousEmail:(nullable NSString *)previousEmail { + InternalActionCodeInfoData *pigeonResult = [[InternalActionCodeInfoData alloc] init]; + pigeonResult.email = email; + pigeonResult.previousEmail = previousEmail; + return pigeonResult; +} ++ (InternalActionCodeInfoData *)fromList:(NSArray *)list { + InternalActionCodeInfoData *pigeonResult = [[InternalActionCodeInfoData alloc] init]; + pigeonResult.email = GetNullableObjectAtIndex(list, 0); + pigeonResult.previousEmail = GetNullableObjectAtIndex(list, 1); + return pigeonResult; +} ++ (nullable InternalActionCodeInfoData *)nullableFromList:(NSArray *)list { + return (list) ? [InternalActionCodeInfoData fromList:list] : nil; +} +- (NSArray *)toList { + return @[ + self.email ?: [NSNull null], + self.previousEmail ?: [NSNull null], + ]; +} +- (BOOL)isEqual:(id)object { + if (self == object) { + return YES; + } + if (![object isKindOfClass:[self class]]) { + return NO; + } + InternalActionCodeInfoData *other = (InternalActionCodeInfoData *)object; + return FLTPigeonDeepEquals(self.email, other.email) && + FLTPigeonDeepEquals(self.previousEmail, other.previousEmail); +} + +- (NSUInteger)hash { + NSUInteger result = [self class].hash; + result = result * 31 + FLTPigeonDeepHash(self.email); + result = result * 31 + FLTPigeonDeepHash(self.previousEmail); + return result; +} +@end + +@implementation InternalActionCodeInfo ++ (instancetype)makeWithOperation:(ActionCodeInfoOperation)operation + data:(InternalActionCodeInfoData *)data { + InternalActionCodeInfo *pigeonResult = [[InternalActionCodeInfo alloc] init]; + pigeonResult.operation = operation; + pigeonResult.data = data; + return pigeonResult; +} ++ (InternalActionCodeInfo *)fromList:(NSArray *)list { + InternalActionCodeInfo *pigeonResult = [[InternalActionCodeInfo alloc] init]; + ActionCodeInfoOperationBox *boxedActionCodeInfoOperation = GetNullableObjectAtIndex(list, 0); + pigeonResult.operation = boxedActionCodeInfoOperation.value; + pigeonResult.data = GetNullableObjectAtIndex(list, 1); + return pigeonResult; +} ++ (nullable InternalActionCodeInfo *)nullableFromList:(NSArray *)list { + return (list) ? [InternalActionCodeInfo fromList:list] : nil; +} +- (NSArray *)toList { + return @[ + [[ActionCodeInfoOperationBox alloc] initWithValue:self.operation], + self.data ?: [NSNull null], + ]; +} +- (BOOL)isEqual:(id)object { + if (self == object) { + return YES; + } + if (![object isKindOfClass:[self class]]) { + return NO; + } + InternalActionCodeInfo *other = (InternalActionCodeInfo *)object; + return self.operation == other.operation && FLTPigeonDeepEquals(self.data, other.data); +} + +- (NSUInteger)hash { + NSUInteger result = [self class].hash; + result = result * 31 + @(self.operation).hash; + result = result * 31 + FLTPigeonDeepHash(self.data); + return result; +} +@end + +@implementation InternalAdditionalUserInfo ++ (instancetype)makeWithIsNewUser:(BOOL)isNewUser + providerId:(nullable NSString *)providerId + username:(nullable NSString *)username + authorizationCode:(nullable NSString *)authorizationCode + profile:(nullable NSDictionary *)profile { + InternalAdditionalUserInfo *pigeonResult = [[InternalAdditionalUserInfo alloc] init]; + pigeonResult.isNewUser = isNewUser; + pigeonResult.providerId = providerId; + pigeonResult.username = username; + pigeonResult.authorizationCode = authorizationCode; + pigeonResult.profile = profile; + return pigeonResult; +} ++ (InternalAdditionalUserInfo *)fromList:(NSArray *)list { + InternalAdditionalUserInfo *pigeonResult = [[InternalAdditionalUserInfo alloc] init]; + pigeonResult.isNewUser = [GetNullableObjectAtIndex(list, 0) boolValue]; + pigeonResult.providerId = GetNullableObjectAtIndex(list, 1); + pigeonResult.username = GetNullableObjectAtIndex(list, 2); + pigeonResult.authorizationCode = GetNullableObjectAtIndex(list, 3); + pigeonResult.profile = GetNullableObjectAtIndex(list, 4); + return pigeonResult; +} ++ (nullable InternalAdditionalUserInfo *)nullableFromList:(NSArray *)list { + return (list) ? [InternalAdditionalUserInfo fromList:list] : nil; +} +- (NSArray *)toList { + return @[ + @(self.isNewUser), + self.providerId ?: [NSNull null], + self.username ?: [NSNull null], + self.authorizationCode ?: [NSNull null], + self.profile ?: [NSNull null], + ]; +} +- (BOOL)isEqual:(id)object { + if (self == object) { + return YES; + } + if (![object isKindOfClass:[self class]]) { + return NO; + } + InternalAdditionalUserInfo *other = (InternalAdditionalUserInfo *)object; + return self.isNewUser == other.isNewUser && + FLTPigeonDeepEquals(self.providerId, other.providerId) && + FLTPigeonDeepEquals(self.username, other.username) && + FLTPigeonDeepEquals(self.authorizationCode, other.authorizationCode) && + FLTPigeonDeepEquals(self.profile, other.profile); +} + +- (NSUInteger)hash { + NSUInteger result = [self class].hash; + result = result * 31 + @(self.isNewUser).hash; + result = result * 31 + FLTPigeonDeepHash(self.providerId); + result = result * 31 + FLTPigeonDeepHash(self.username); + result = result * 31 + FLTPigeonDeepHash(self.authorizationCode); + result = result * 31 + FLTPigeonDeepHash(self.profile); + return result; +} +@end + +@implementation InternalAuthCredential ++ (instancetype)makeWithProviderId:(NSString *)providerId + signInMethod:(NSString *)signInMethod + nativeId:(NSInteger)nativeId + accessToken:(nullable NSString *)accessToken { + InternalAuthCredential *pigeonResult = [[InternalAuthCredential alloc] init]; + pigeonResult.providerId = providerId; + pigeonResult.signInMethod = signInMethod; + pigeonResult.nativeId = nativeId; + pigeonResult.accessToken = accessToken; + return pigeonResult; +} ++ (InternalAuthCredential *)fromList:(NSArray *)list { + InternalAuthCredential *pigeonResult = [[InternalAuthCredential alloc] init]; + pigeonResult.providerId = GetNullableObjectAtIndex(list, 0); + pigeonResult.signInMethod = GetNullableObjectAtIndex(list, 1); + pigeonResult.nativeId = [GetNullableObjectAtIndex(list, 2) integerValue]; + pigeonResult.accessToken = GetNullableObjectAtIndex(list, 3); + return pigeonResult; +} ++ (nullable InternalAuthCredential *)nullableFromList:(NSArray *)list { + return (list) ? [InternalAuthCredential fromList:list] : nil; +} +- (NSArray *)toList { + return @[ + self.providerId ?: [NSNull null], + self.signInMethod ?: [NSNull null], + @(self.nativeId), + self.accessToken ?: [NSNull null], + ]; +} +- (BOOL)isEqual:(id)object { + if (self == object) { + return YES; + } + if (![object isKindOfClass:[self class]]) { + return NO; + } + InternalAuthCredential *other = (InternalAuthCredential *)object; + return FLTPigeonDeepEquals(self.providerId, other.providerId) && + FLTPigeonDeepEquals(self.signInMethod, other.signInMethod) && + self.nativeId == other.nativeId && + FLTPigeonDeepEquals(self.accessToken, other.accessToken); +} + +- (NSUInteger)hash { + NSUInteger result = [self class].hash; + result = result * 31 + FLTPigeonDeepHash(self.providerId); + result = result * 31 + FLTPigeonDeepHash(self.signInMethod); + result = result * 31 + @(self.nativeId).hash; + result = result * 31 + FLTPigeonDeepHash(self.accessToken); + return result; +} +@end + +@implementation InternalUserInfo ++ (instancetype)makeWithUid:(NSString *)uid + email:(nullable NSString *)email + displayName:(nullable NSString *)displayName + photoUrl:(nullable NSString *)photoUrl + phoneNumber:(nullable NSString *)phoneNumber + isAnonymous:(BOOL)isAnonymous + isEmailVerified:(BOOL)isEmailVerified + providerId:(nullable NSString *)providerId + tenantId:(nullable NSString *)tenantId + refreshToken:(nullable NSString *)refreshToken + creationTimestamp:(nullable NSNumber *)creationTimestamp + lastSignInTimestamp:(nullable NSNumber *)lastSignInTimestamp { + InternalUserInfo *pigeonResult = [[InternalUserInfo alloc] init]; + pigeonResult.uid = uid; + pigeonResult.email = email; + pigeonResult.displayName = displayName; + pigeonResult.photoUrl = photoUrl; + pigeonResult.phoneNumber = phoneNumber; + pigeonResult.isAnonymous = isAnonymous; + pigeonResult.isEmailVerified = isEmailVerified; + pigeonResult.providerId = providerId; + pigeonResult.tenantId = tenantId; + pigeonResult.refreshToken = refreshToken; + pigeonResult.creationTimestamp = creationTimestamp; + pigeonResult.lastSignInTimestamp = lastSignInTimestamp; + return pigeonResult; +} ++ (InternalUserInfo *)fromList:(NSArray *)list { + InternalUserInfo *pigeonResult = [[InternalUserInfo alloc] init]; + pigeonResult.uid = GetNullableObjectAtIndex(list, 0); + pigeonResult.email = GetNullableObjectAtIndex(list, 1); + pigeonResult.displayName = GetNullableObjectAtIndex(list, 2); + pigeonResult.photoUrl = GetNullableObjectAtIndex(list, 3); + pigeonResult.phoneNumber = GetNullableObjectAtIndex(list, 4); + pigeonResult.isAnonymous = [GetNullableObjectAtIndex(list, 5) boolValue]; + pigeonResult.isEmailVerified = [GetNullableObjectAtIndex(list, 6) boolValue]; + pigeonResult.providerId = GetNullableObjectAtIndex(list, 7); + pigeonResult.tenantId = GetNullableObjectAtIndex(list, 8); + pigeonResult.refreshToken = GetNullableObjectAtIndex(list, 9); + pigeonResult.creationTimestamp = GetNullableObjectAtIndex(list, 10); + pigeonResult.lastSignInTimestamp = GetNullableObjectAtIndex(list, 11); + return pigeonResult; +} ++ (nullable InternalUserInfo *)nullableFromList:(NSArray *)list { + return (list) ? [InternalUserInfo fromList:list] : nil; +} +- (NSArray *)toList { + return @[ + self.uid ?: [NSNull null], + self.email ?: [NSNull null], + self.displayName ?: [NSNull null], + self.photoUrl ?: [NSNull null], + self.phoneNumber ?: [NSNull null], + @(self.isAnonymous), + @(self.isEmailVerified), + self.providerId ?: [NSNull null], + self.tenantId ?: [NSNull null], + self.refreshToken ?: [NSNull null], + self.creationTimestamp ?: [NSNull null], + self.lastSignInTimestamp ?: [NSNull null], + ]; +} +- (BOOL)isEqual:(id)object { + if (self == object) { + return YES; + } + if (![object isKindOfClass:[self class]]) { + return NO; + } + InternalUserInfo *other = (InternalUserInfo *)object; + return FLTPigeonDeepEquals(self.uid, other.uid) && FLTPigeonDeepEquals(self.email, other.email) && + FLTPigeonDeepEquals(self.displayName, other.displayName) && + FLTPigeonDeepEquals(self.photoUrl, other.photoUrl) && + FLTPigeonDeepEquals(self.phoneNumber, other.phoneNumber) && + self.isAnonymous == other.isAnonymous && self.isEmailVerified == other.isEmailVerified && + FLTPigeonDeepEquals(self.providerId, other.providerId) && + FLTPigeonDeepEquals(self.tenantId, other.tenantId) && + FLTPigeonDeepEquals(self.refreshToken, other.refreshToken) && + FLTPigeonDeepEquals(self.creationTimestamp, other.creationTimestamp) && + FLTPigeonDeepEquals(self.lastSignInTimestamp, other.lastSignInTimestamp); +} + +- (NSUInteger)hash { + NSUInteger result = [self class].hash; + result = result * 31 + FLTPigeonDeepHash(self.uid); + result = result * 31 + FLTPigeonDeepHash(self.email); + result = result * 31 + FLTPigeonDeepHash(self.displayName); + result = result * 31 + FLTPigeonDeepHash(self.photoUrl); + result = result * 31 + FLTPigeonDeepHash(self.phoneNumber); + result = result * 31 + @(self.isAnonymous).hash; + result = result * 31 + @(self.isEmailVerified).hash; + result = result * 31 + FLTPigeonDeepHash(self.providerId); + result = result * 31 + FLTPigeonDeepHash(self.tenantId); + result = result * 31 + FLTPigeonDeepHash(self.refreshToken); + result = result * 31 + FLTPigeonDeepHash(self.creationTimestamp); + result = result * 31 + FLTPigeonDeepHash(self.lastSignInTimestamp); + return result; +} +@end + +@implementation InternalUserDetails ++ (instancetype)makeWithUserInfo:(InternalUserInfo *)userInfo + providerData:(NSArray *> *)providerData { + InternalUserDetails *pigeonResult = [[InternalUserDetails alloc] init]; + pigeonResult.userInfo = userInfo; + pigeonResult.providerData = providerData; + return pigeonResult; +} ++ (InternalUserDetails *)fromList:(NSArray *)list { + InternalUserDetails *pigeonResult = [[InternalUserDetails alloc] init]; + pigeonResult.userInfo = GetNullableObjectAtIndex(list, 0); + pigeonResult.providerData = GetNullableObjectAtIndex(list, 1); + return pigeonResult; +} ++ (nullable InternalUserDetails *)nullableFromList:(NSArray *)list { + return (list) ? [InternalUserDetails fromList:list] : nil; +} +- (NSArray *)toList { + return @[ + self.userInfo ?: [NSNull null], + self.providerData ?: [NSNull null], + ]; +} +- (BOOL)isEqual:(id)object { + if (self == object) { + return YES; + } + if (![object isKindOfClass:[self class]]) { + return NO; + } + InternalUserDetails *other = (InternalUserDetails *)object; + return FLTPigeonDeepEquals(self.userInfo, other.userInfo) && + FLTPigeonDeepEquals(self.providerData, other.providerData); +} + +- (NSUInteger)hash { + NSUInteger result = [self class].hash; + result = result * 31 + FLTPigeonDeepHash(self.userInfo); + result = result * 31 + FLTPigeonDeepHash(self.providerData); + return result; +} +@end + +@implementation InternalUserCredential ++ (instancetype)makeWithUser:(nullable InternalUserDetails *)user + additionalUserInfo:(nullable InternalAdditionalUserInfo *)additionalUserInfo + credential:(nullable InternalAuthCredential *)credential { + InternalUserCredential *pigeonResult = [[InternalUserCredential alloc] init]; + pigeonResult.user = user; + pigeonResult.additionalUserInfo = additionalUserInfo; + pigeonResult.credential = credential; + return pigeonResult; +} ++ (InternalUserCredential *)fromList:(NSArray *)list { + InternalUserCredential *pigeonResult = [[InternalUserCredential alloc] init]; + pigeonResult.user = GetNullableObjectAtIndex(list, 0); + pigeonResult.additionalUserInfo = GetNullableObjectAtIndex(list, 1); + pigeonResult.credential = GetNullableObjectAtIndex(list, 2); + return pigeonResult; +} ++ (nullable InternalUserCredential *)nullableFromList:(NSArray *)list { + return (list) ? [InternalUserCredential fromList:list] : nil; +} +- (NSArray *)toList { + return @[ + self.user ?: [NSNull null], + self.additionalUserInfo ?: [NSNull null], + self.credential ?: [NSNull null], + ]; +} +- (BOOL)isEqual:(id)object { + if (self == object) { + return YES; + } + if (![object isKindOfClass:[self class]]) { + return NO; + } + InternalUserCredential *other = (InternalUserCredential *)object; + return FLTPigeonDeepEquals(self.user, other.user) && + FLTPigeonDeepEquals(self.additionalUserInfo, other.additionalUserInfo) && + FLTPigeonDeepEquals(self.credential, other.credential); +} + +- (NSUInteger)hash { + NSUInteger result = [self class].hash; + result = result * 31 + FLTPigeonDeepHash(self.user); + result = result * 31 + FLTPigeonDeepHash(self.additionalUserInfo); + result = result * 31 + FLTPigeonDeepHash(self.credential); + return result; +} +@end + +@implementation InternalAuthCredentialInput ++ (instancetype)makeWithProviderId:(NSString *)providerId + signInMethod:(NSString *)signInMethod + token:(nullable NSString *)token + accessToken:(nullable NSString *)accessToken { + InternalAuthCredentialInput *pigeonResult = [[InternalAuthCredentialInput alloc] init]; + pigeonResult.providerId = providerId; + pigeonResult.signInMethod = signInMethod; + pigeonResult.token = token; + pigeonResult.accessToken = accessToken; + return pigeonResult; +} ++ (InternalAuthCredentialInput *)fromList:(NSArray *)list { + InternalAuthCredentialInput *pigeonResult = [[InternalAuthCredentialInput alloc] init]; + pigeonResult.providerId = GetNullableObjectAtIndex(list, 0); + pigeonResult.signInMethod = GetNullableObjectAtIndex(list, 1); + pigeonResult.token = GetNullableObjectAtIndex(list, 2); + pigeonResult.accessToken = GetNullableObjectAtIndex(list, 3); + return pigeonResult; +} ++ (nullable InternalAuthCredentialInput *)nullableFromList:(NSArray *)list { + return (list) ? [InternalAuthCredentialInput fromList:list] : nil; +} +- (NSArray *)toList { + return @[ + self.providerId ?: [NSNull null], + self.signInMethod ?: [NSNull null], + self.token ?: [NSNull null], + self.accessToken ?: [NSNull null], + ]; +} +- (BOOL)isEqual:(id)object { + if (self == object) { + return YES; + } + if (![object isKindOfClass:[self class]]) { + return NO; + } + InternalAuthCredentialInput *other = (InternalAuthCredentialInput *)object; + return FLTPigeonDeepEquals(self.providerId, other.providerId) && + FLTPigeonDeepEquals(self.signInMethod, other.signInMethod) && + FLTPigeonDeepEquals(self.token, other.token) && + FLTPigeonDeepEquals(self.accessToken, other.accessToken); +} + +- (NSUInteger)hash { + NSUInteger result = [self class].hash; + result = result * 31 + FLTPigeonDeepHash(self.providerId); + result = result * 31 + FLTPigeonDeepHash(self.signInMethod); + result = result * 31 + FLTPigeonDeepHash(self.token); + result = result * 31 + FLTPigeonDeepHash(self.accessToken); + return result; +} +@end + +@implementation InternalActionCodeSettings ++ (instancetype)makeWithUrl:(NSString *)url + dynamicLinkDomain:(nullable NSString *)dynamicLinkDomain + handleCodeInApp:(BOOL)handleCodeInApp + iOSBundleId:(nullable NSString *)iOSBundleId + androidPackageName:(nullable NSString *)androidPackageName + androidInstallApp:(BOOL)androidInstallApp + androidMinimumVersion:(nullable NSString *)androidMinimumVersion + linkDomain:(nullable NSString *)linkDomain { + InternalActionCodeSettings *pigeonResult = [[InternalActionCodeSettings alloc] init]; + pigeonResult.url = url; + pigeonResult.dynamicLinkDomain = dynamicLinkDomain; + pigeonResult.handleCodeInApp = handleCodeInApp; + pigeonResult.iOSBundleId = iOSBundleId; + pigeonResult.androidPackageName = androidPackageName; + pigeonResult.androidInstallApp = androidInstallApp; + pigeonResult.androidMinimumVersion = androidMinimumVersion; + pigeonResult.linkDomain = linkDomain; + return pigeonResult; +} ++ (InternalActionCodeSettings *)fromList:(NSArray *)list { + InternalActionCodeSettings *pigeonResult = [[InternalActionCodeSettings alloc] init]; + pigeonResult.url = GetNullableObjectAtIndex(list, 0); + pigeonResult.dynamicLinkDomain = GetNullableObjectAtIndex(list, 1); + pigeonResult.handleCodeInApp = [GetNullableObjectAtIndex(list, 2) boolValue]; + pigeonResult.iOSBundleId = GetNullableObjectAtIndex(list, 3); + pigeonResult.androidPackageName = GetNullableObjectAtIndex(list, 4); + pigeonResult.androidInstallApp = [GetNullableObjectAtIndex(list, 5) boolValue]; + pigeonResult.androidMinimumVersion = GetNullableObjectAtIndex(list, 6); + pigeonResult.linkDomain = GetNullableObjectAtIndex(list, 7); + return pigeonResult; +} ++ (nullable InternalActionCodeSettings *)nullableFromList:(NSArray *)list { + return (list) ? [InternalActionCodeSettings fromList:list] : nil; +} +- (NSArray *)toList { + return @[ + self.url ?: [NSNull null], + self.dynamicLinkDomain ?: [NSNull null], + @(self.handleCodeInApp), + self.iOSBundleId ?: [NSNull null], + self.androidPackageName ?: [NSNull null], + @(self.androidInstallApp), + self.androidMinimumVersion ?: [NSNull null], + self.linkDomain ?: [NSNull null], + ]; +} +- (BOOL)isEqual:(id)object { + if (self == object) { + return YES; + } + if (![object isKindOfClass:[self class]]) { + return NO; + } + InternalActionCodeSettings *other = (InternalActionCodeSettings *)object; + return FLTPigeonDeepEquals(self.url, other.url) && + FLTPigeonDeepEquals(self.dynamicLinkDomain, other.dynamicLinkDomain) && + self.handleCodeInApp == other.handleCodeInApp && + FLTPigeonDeepEquals(self.iOSBundleId, other.iOSBundleId) && + FLTPigeonDeepEquals(self.androidPackageName, other.androidPackageName) && + self.androidInstallApp == other.androidInstallApp && + FLTPigeonDeepEquals(self.androidMinimumVersion, other.androidMinimumVersion) && + FLTPigeonDeepEquals(self.linkDomain, other.linkDomain); +} + +- (NSUInteger)hash { + NSUInteger result = [self class].hash; + result = result * 31 + FLTPigeonDeepHash(self.url); + result = result * 31 + FLTPigeonDeepHash(self.dynamicLinkDomain); + result = result * 31 + @(self.handleCodeInApp).hash; + result = result * 31 + FLTPigeonDeepHash(self.iOSBundleId); + result = result * 31 + FLTPigeonDeepHash(self.androidPackageName); + result = result * 31 + @(self.androidInstallApp).hash; + result = result * 31 + FLTPigeonDeepHash(self.androidMinimumVersion); + result = result * 31 + FLTPigeonDeepHash(self.linkDomain); + return result; +} +@end + +@implementation InternalFirebaseAuthSettings ++ (instancetype)makeWithAppVerificationDisabledForTesting:(BOOL)appVerificationDisabledForTesting + userAccessGroup:(nullable NSString *)userAccessGroup + phoneNumber:(nullable NSString *)phoneNumber + smsCode:(nullable NSString *)smsCode + forceRecaptchaFlow:(nullable NSNumber *)forceRecaptchaFlow { + InternalFirebaseAuthSettings *pigeonResult = [[InternalFirebaseAuthSettings alloc] init]; + pigeonResult.appVerificationDisabledForTesting = appVerificationDisabledForTesting; + pigeonResult.userAccessGroup = userAccessGroup; + pigeonResult.phoneNumber = phoneNumber; + pigeonResult.smsCode = smsCode; + pigeonResult.forceRecaptchaFlow = forceRecaptchaFlow; + return pigeonResult; +} ++ (InternalFirebaseAuthSettings *)fromList:(NSArray *)list { + InternalFirebaseAuthSettings *pigeonResult = [[InternalFirebaseAuthSettings alloc] init]; + pigeonResult.appVerificationDisabledForTesting = [GetNullableObjectAtIndex(list, 0) boolValue]; + pigeonResult.userAccessGroup = GetNullableObjectAtIndex(list, 1); + pigeonResult.phoneNumber = GetNullableObjectAtIndex(list, 2); + pigeonResult.smsCode = GetNullableObjectAtIndex(list, 3); + pigeonResult.forceRecaptchaFlow = GetNullableObjectAtIndex(list, 4); + return pigeonResult; +} ++ (nullable InternalFirebaseAuthSettings *)nullableFromList:(NSArray *)list { + return (list) ? [InternalFirebaseAuthSettings fromList:list] : nil; +} +- (NSArray *)toList { + return @[ + @(self.appVerificationDisabledForTesting), + self.userAccessGroup ?: [NSNull null], + self.phoneNumber ?: [NSNull null], + self.smsCode ?: [NSNull null], + self.forceRecaptchaFlow ?: [NSNull null], + ]; +} +- (BOOL)isEqual:(id)object { + if (self == object) { + return YES; + } + if (![object isKindOfClass:[self class]]) { + return NO; + } + InternalFirebaseAuthSettings *other = (InternalFirebaseAuthSettings *)object; + return self.appVerificationDisabledForTesting == other.appVerificationDisabledForTesting && + FLTPigeonDeepEquals(self.userAccessGroup, other.userAccessGroup) && + FLTPigeonDeepEquals(self.phoneNumber, other.phoneNumber) && + FLTPigeonDeepEquals(self.smsCode, other.smsCode) && + FLTPigeonDeepEquals(self.forceRecaptchaFlow, other.forceRecaptchaFlow); +} + +- (NSUInteger)hash { + NSUInteger result = [self class].hash; + result = result * 31 + @(self.appVerificationDisabledForTesting).hash; + result = result * 31 + FLTPigeonDeepHash(self.userAccessGroup); + result = result * 31 + FLTPigeonDeepHash(self.phoneNumber); + result = result * 31 + FLTPigeonDeepHash(self.smsCode); + result = result * 31 + FLTPigeonDeepHash(self.forceRecaptchaFlow); + return result; +} +@end + +@implementation InternalSignInProvider ++ (instancetype)makeWithProviderId:(NSString *)providerId + scopes:(nullable NSArray *)scopes + customParameters: + (nullable NSDictionary *)customParameters { + InternalSignInProvider *pigeonResult = [[InternalSignInProvider alloc] init]; + pigeonResult.providerId = providerId; + pigeonResult.scopes = scopes; + pigeonResult.customParameters = customParameters; + return pigeonResult; +} ++ (InternalSignInProvider *)fromList:(NSArray *)list { + InternalSignInProvider *pigeonResult = [[InternalSignInProvider alloc] init]; + pigeonResult.providerId = GetNullableObjectAtIndex(list, 0); + pigeonResult.scopes = GetNullableObjectAtIndex(list, 1); + pigeonResult.customParameters = GetNullableObjectAtIndex(list, 2); + return pigeonResult; +} ++ (nullable InternalSignInProvider *)nullableFromList:(NSArray *)list { + return (list) ? [InternalSignInProvider fromList:list] : nil; +} +- (NSArray *)toList { + return @[ + self.providerId ?: [NSNull null], + self.scopes ?: [NSNull null], + self.customParameters ?: [NSNull null], + ]; +} +- (BOOL)isEqual:(id)object { + if (self == object) { + return YES; + } + if (![object isKindOfClass:[self class]]) { + return NO; + } + InternalSignInProvider *other = (InternalSignInProvider *)object; + return FLTPigeonDeepEquals(self.providerId, other.providerId) && + FLTPigeonDeepEquals(self.scopes, other.scopes) && + FLTPigeonDeepEquals(self.customParameters, other.customParameters); +} + +- (NSUInteger)hash { + NSUInteger result = [self class].hash; + result = result * 31 + FLTPigeonDeepHash(self.providerId); + result = result * 31 + FLTPigeonDeepHash(self.scopes); + result = result * 31 + FLTPigeonDeepHash(self.customParameters); + return result; +} +@end + +@implementation InternalVerifyPhoneNumberRequest ++ (instancetype)makeWithPhoneNumber:(nullable NSString *)phoneNumber + timeout:(NSInteger)timeout + forceResendingToken:(nullable NSNumber *)forceResendingToken + autoRetrievedSmsCodeForTesting:(nullable NSString *)autoRetrievedSmsCodeForTesting + multiFactorInfoId:(nullable NSString *)multiFactorInfoId + multiFactorSessionId:(nullable NSString *)multiFactorSessionId { + InternalVerifyPhoneNumberRequest *pigeonResult = [[InternalVerifyPhoneNumberRequest alloc] init]; + pigeonResult.phoneNumber = phoneNumber; + pigeonResult.timeout = timeout; + pigeonResult.forceResendingToken = forceResendingToken; + pigeonResult.autoRetrievedSmsCodeForTesting = autoRetrievedSmsCodeForTesting; + pigeonResult.multiFactorInfoId = multiFactorInfoId; + pigeonResult.multiFactorSessionId = multiFactorSessionId; + return pigeonResult; +} ++ (InternalVerifyPhoneNumberRequest *)fromList:(NSArray *)list { + InternalVerifyPhoneNumberRequest *pigeonResult = [[InternalVerifyPhoneNumberRequest alloc] init]; + pigeonResult.phoneNumber = GetNullableObjectAtIndex(list, 0); + pigeonResult.timeout = [GetNullableObjectAtIndex(list, 1) integerValue]; + pigeonResult.forceResendingToken = GetNullableObjectAtIndex(list, 2); + pigeonResult.autoRetrievedSmsCodeForTesting = GetNullableObjectAtIndex(list, 3); + pigeonResult.multiFactorInfoId = GetNullableObjectAtIndex(list, 4); + pigeonResult.multiFactorSessionId = GetNullableObjectAtIndex(list, 5); + return pigeonResult; +} ++ (nullable InternalVerifyPhoneNumberRequest *)nullableFromList:(NSArray *)list { + return (list) ? [InternalVerifyPhoneNumberRequest fromList:list] : nil; +} +- (NSArray *)toList { + return @[ + self.phoneNumber ?: [NSNull null], + @(self.timeout), + self.forceResendingToken ?: [NSNull null], + self.autoRetrievedSmsCodeForTesting ?: [NSNull null], + self.multiFactorInfoId ?: [NSNull null], + self.multiFactorSessionId ?: [NSNull null], + ]; +} +- (BOOL)isEqual:(id)object { + if (self == object) { + return YES; + } + if (![object isKindOfClass:[self class]]) { + return NO; + } + InternalVerifyPhoneNumberRequest *other = (InternalVerifyPhoneNumberRequest *)object; + return FLTPigeonDeepEquals(self.phoneNumber, other.phoneNumber) && + self.timeout == other.timeout && + FLTPigeonDeepEquals(self.forceResendingToken, other.forceResendingToken) && + FLTPigeonDeepEquals(self.autoRetrievedSmsCodeForTesting, + other.autoRetrievedSmsCodeForTesting) && + FLTPigeonDeepEquals(self.multiFactorInfoId, other.multiFactorInfoId) && + FLTPigeonDeepEquals(self.multiFactorSessionId, other.multiFactorSessionId); +} + +- (NSUInteger)hash { + NSUInteger result = [self class].hash; + result = result * 31 + FLTPigeonDeepHash(self.phoneNumber); + result = result * 31 + @(self.timeout).hash; + result = result * 31 + FLTPigeonDeepHash(self.forceResendingToken); + result = result * 31 + FLTPigeonDeepHash(self.autoRetrievedSmsCodeForTesting); + result = result * 31 + FLTPigeonDeepHash(self.multiFactorInfoId); + result = result * 31 + FLTPigeonDeepHash(self.multiFactorSessionId); + return result; +} +@end + +@implementation InternalIdTokenResult ++ (instancetype)makeWithToken:(nullable NSString *)token + expirationTimestamp:(nullable NSNumber *)expirationTimestamp + authTimestamp:(nullable NSNumber *)authTimestamp + issuedAtTimestamp:(nullable NSNumber *)issuedAtTimestamp + signInProvider:(nullable NSString *)signInProvider + claims:(nullable NSDictionary *)claims + signInSecondFactor:(nullable NSString *)signInSecondFactor { + InternalIdTokenResult *pigeonResult = [[InternalIdTokenResult alloc] init]; + pigeonResult.token = token; + pigeonResult.expirationTimestamp = expirationTimestamp; + pigeonResult.authTimestamp = authTimestamp; + pigeonResult.issuedAtTimestamp = issuedAtTimestamp; + pigeonResult.signInProvider = signInProvider; + pigeonResult.claims = claims; + pigeonResult.signInSecondFactor = signInSecondFactor; + return pigeonResult; +} ++ (InternalIdTokenResult *)fromList:(NSArray *)list { + InternalIdTokenResult *pigeonResult = [[InternalIdTokenResult alloc] init]; + pigeonResult.token = GetNullableObjectAtIndex(list, 0); + pigeonResult.expirationTimestamp = GetNullableObjectAtIndex(list, 1); + pigeonResult.authTimestamp = GetNullableObjectAtIndex(list, 2); + pigeonResult.issuedAtTimestamp = GetNullableObjectAtIndex(list, 3); + pigeonResult.signInProvider = GetNullableObjectAtIndex(list, 4); + pigeonResult.claims = GetNullableObjectAtIndex(list, 5); + pigeonResult.signInSecondFactor = GetNullableObjectAtIndex(list, 6); + return pigeonResult; +} ++ (nullable InternalIdTokenResult *)nullableFromList:(NSArray *)list { + return (list) ? [InternalIdTokenResult fromList:list] : nil; +} +- (NSArray *)toList { + return @[ + self.token ?: [NSNull null], + self.expirationTimestamp ?: [NSNull null], + self.authTimestamp ?: [NSNull null], + self.issuedAtTimestamp ?: [NSNull null], + self.signInProvider ?: [NSNull null], + self.claims ?: [NSNull null], + self.signInSecondFactor ?: [NSNull null], + ]; +} +- (BOOL)isEqual:(id)object { + if (self == object) { + return YES; + } + if (![object isKindOfClass:[self class]]) { + return NO; + } + InternalIdTokenResult *other = (InternalIdTokenResult *)object; + return FLTPigeonDeepEquals(self.token, other.token) && + FLTPigeonDeepEquals(self.expirationTimestamp, other.expirationTimestamp) && + FLTPigeonDeepEquals(self.authTimestamp, other.authTimestamp) && + FLTPigeonDeepEquals(self.issuedAtTimestamp, other.issuedAtTimestamp) && + FLTPigeonDeepEquals(self.signInProvider, other.signInProvider) && + FLTPigeonDeepEquals(self.claims, other.claims) && + FLTPigeonDeepEquals(self.signInSecondFactor, other.signInSecondFactor); +} + +- (NSUInteger)hash { + NSUInteger result = [self class].hash; + result = result * 31 + FLTPigeonDeepHash(self.token); + result = result * 31 + FLTPigeonDeepHash(self.expirationTimestamp); + result = result * 31 + FLTPigeonDeepHash(self.authTimestamp); + result = result * 31 + FLTPigeonDeepHash(self.issuedAtTimestamp); + result = result * 31 + FLTPigeonDeepHash(self.signInProvider); + result = result * 31 + FLTPigeonDeepHash(self.claims); + result = result * 31 + FLTPigeonDeepHash(self.signInSecondFactor); + return result; +} +@end + +@implementation InternalUserProfile ++ (instancetype)makeWithDisplayName:(nullable NSString *)displayName + photoUrl:(nullable NSString *)photoUrl + displayNameChanged:(BOOL)displayNameChanged + photoUrlChanged:(BOOL)photoUrlChanged { + InternalUserProfile *pigeonResult = [[InternalUserProfile alloc] init]; + pigeonResult.displayName = displayName; + pigeonResult.photoUrl = photoUrl; + pigeonResult.displayNameChanged = displayNameChanged; + pigeonResult.photoUrlChanged = photoUrlChanged; + return pigeonResult; +} ++ (InternalUserProfile *)fromList:(NSArray *)list { + InternalUserProfile *pigeonResult = [[InternalUserProfile alloc] init]; + pigeonResult.displayName = GetNullableObjectAtIndex(list, 0); + pigeonResult.photoUrl = GetNullableObjectAtIndex(list, 1); + pigeonResult.displayNameChanged = [GetNullableObjectAtIndex(list, 2) boolValue]; + pigeonResult.photoUrlChanged = [GetNullableObjectAtIndex(list, 3) boolValue]; + return pigeonResult; +} ++ (nullable InternalUserProfile *)nullableFromList:(NSArray *)list { + return (list) ? [InternalUserProfile fromList:list] : nil; +} +- (NSArray *)toList { + return @[ + self.displayName ?: [NSNull null], + self.photoUrl ?: [NSNull null], + @(self.displayNameChanged), + @(self.photoUrlChanged), + ]; +} +- (BOOL)isEqual:(id)object { + if (self == object) { + return YES; + } + if (![object isKindOfClass:[self class]]) { + return NO; + } + InternalUserProfile *other = (InternalUserProfile *)object; + return FLTPigeonDeepEquals(self.displayName, other.displayName) && + FLTPigeonDeepEquals(self.photoUrl, other.photoUrl) && + self.displayNameChanged == other.displayNameChanged && + self.photoUrlChanged == other.photoUrlChanged; +} + +- (NSUInteger)hash { + NSUInteger result = [self class].hash; + result = result * 31 + FLTPigeonDeepHash(self.displayName); + result = result * 31 + FLTPigeonDeepHash(self.photoUrl); + result = result * 31 + @(self.displayNameChanged).hash; + result = result * 31 + @(self.photoUrlChanged).hash; + return result; +} +@end + +@implementation InternalTotpSecret ++ (instancetype)makeWithCodeIntervalSeconds:(nullable NSNumber *)codeIntervalSeconds + codeLength:(nullable NSNumber *)codeLength + enrollmentCompletionDeadline:(nullable NSNumber *)enrollmentCompletionDeadline + hashingAlgorithm:(nullable NSString *)hashingAlgorithm + secretKey:(NSString *)secretKey { + InternalTotpSecret *pigeonResult = [[InternalTotpSecret alloc] init]; + pigeonResult.codeIntervalSeconds = codeIntervalSeconds; + pigeonResult.codeLength = codeLength; + pigeonResult.enrollmentCompletionDeadline = enrollmentCompletionDeadline; + pigeonResult.hashingAlgorithm = hashingAlgorithm; + pigeonResult.secretKey = secretKey; + return pigeonResult; +} ++ (InternalTotpSecret *)fromList:(NSArray *)list { + InternalTotpSecret *pigeonResult = [[InternalTotpSecret alloc] init]; + pigeonResult.codeIntervalSeconds = GetNullableObjectAtIndex(list, 0); + pigeonResult.codeLength = GetNullableObjectAtIndex(list, 1); + pigeonResult.enrollmentCompletionDeadline = GetNullableObjectAtIndex(list, 2); + pigeonResult.hashingAlgorithm = GetNullableObjectAtIndex(list, 3); + pigeonResult.secretKey = GetNullableObjectAtIndex(list, 4); + return pigeonResult; +} ++ (nullable InternalTotpSecret *)nullableFromList:(NSArray *)list { + return (list) ? [InternalTotpSecret fromList:list] : nil; +} +- (NSArray *)toList { + return @[ + self.codeIntervalSeconds ?: [NSNull null], + self.codeLength ?: [NSNull null], + self.enrollmentCompletionDeadline ?: [NSNull null], + self.hashingAlgorithm ?: [NSNull null], + self.secretKey ?: [NSNull null], + ]; +} +- (BOOL)isEqual:(id)object { + if (self == object) { + return YES; + } + if (![object isKindOfClass:[self class]]) { + return NO; + } + InternalTotpSecret *other = (InternalTotpSecret *)object; + return FLTPigeonDeepEquals(self.codeIntervalSeconds, other.codeIntervalSeconds) && + FLTPigeonDeepEquals(self.codeLength, other.codeLength) && + FLTPigeonDeepEquals(self.enrollmentCompletionDeadline, + other.enrollmentCompletionDeadline) && + FLTPigeonDeepEquals(self.hashingAlgorithm, other.hashingAlgorithm) && + FLTPigeonDeepEquals(self.secretKey, other.secretKey); +} + +- (NSUInteger)hash { + NSUInteger result = [self class].hash; + result = result * 31 + FLTPigeonDeepHash(self.codeIntervalSeconds); + result = result * 31 + FLTPigeonDeepHash(self.codeLength); + result = result * 31 + FLTPigeonDeepHash(self.enrollmentCompletionDeadline); + result = result * 31 + FLTPigeonDeepHash(self.hashingAlgorithm); + result = result * 31 + FLTPigeonDeepHash(self.secretKey); + return result; +} +@end + +@interface nullFirebaseAuthMessagesPigeonCodecReader : FlutterStandardReader +@end +@implementation nullFirebaseAuthMessagesPigeonCodecReader +- (nullable id)readValueOfType:(UInt8)type { + switch (type) { + case 129: { + NSNumber *enumAsNumber = [self readValue]; + return enumAsNumber == nil + ? nil + : [[ActionCodeInfoOperationBox alloc] initWithValue:[enumAsNumber integerValue]]; + } + case 130: + return [InternalMultiFactorSession fromList:[self readValue]]; + case 131: + return [InternalPhoneMultiFactorAssertion fromList:[self readValue]]; + case 132: + return [InternalMultiFactorInfo fromList:[self readValue]]; + case 133: + return [AuthPigeonFirebaseApp fromList:[self readValue]]; + case 134: + return [InternalActionCodeInfoData fromList:[self readValue]]; + case 135: + return [InternalActionCodeInfo fromList:[self readValue]]; + case 136: + return [InternalAdditionalUserInfo fromList:[self readValue]]; + case 137: + return [InternalAuthCredential fromList:[self readValue]]; + case 138: + return [InternalUserInfo fromList:[self readValue]]; + case 139: + return [InternalUserDetails fromList:[self readValue]]; + case 140: + return [InternalUserCredential fromList:[self readValue]]; + case 141: + return [InternalAuthCredentialInput fromList:[self readValue]]; + case 142: + return [InternalActionCodeSettings fromList:[self readValue]]; + case 143: + return [InternalFirebaseAuthSettings fromList:[self readValue]]; + case 144: + return [InternalSignInProvider fromList:[self readValue]]; + case 145: + return [InternalVerifyPhoneNumberRequest fromList:[self readValue]]; + case 146: + return [InternalIdTokenResult fromList:[self readValue]]; + case 147: + return [InternalUserProfile fromList:[self readValue]]; + case 148: + return [InternalTotpSecret fromList:[self readValue]]; + default: + return [super readValueOfType:type]; + } +} +@end + +@interface nullFirebaseAuthMessagesPigeonCodecWriter : FlutterStandardWriter +@end +@implementation nullFirebaseAuthMessagesPigeonCodecWriter +- (void)writeValue:(id)value { + if ([value isKindOfClass:[ActionCodeInfoOperationBox class]]) { + ActionCodeInfoOperationBox *box = (ActionCodeInfoOperationBox *)value; + [self writeByte:129]; + [self writeValue:(value == nil ? [NSNull null] : [NSNumber numberWithInteger:box.value])]; + } else if ([value isKindOfClass:[InternalMultiFactorSession class]]) { + [self writeByte:130]; + [self writeValue:[value toList]]; + } else if ([value isKindOfClass:[InternalPhoneMultiFactorAssertion class]]) { + [self writeByte:131]; + [self writeValue:[value toList]]; + } else if ([value isKindOfClass:[InternalMultiFactorInfo class]]) { + [self writeByte:132]; + [self writeValue:[value toList]]; + } else if ([value isKindOfClass:[AuthPigeonFirebaseApp class]]) { + [self writeByte:133]; + [self writeValue:[value toList]]; + } else if ([value isKindOfClass:[InternalActionCodeInfoData class]]) { + [self writeByte:134]; + [self writeValue:[value toList]]; + } else if ([value isKindOfClass:[InternalActionCodeInfo class]]) { + [self writeByte:135]; + [self writeValue:[value toList]]; + } else if ([value isKindOfClass:[InternalAdditionalUserInfo class]]) { + [self writeByte:136]; + [self writeValue:[value toList]]; + } else if ([value isKindOfClass:[InternalAuthCredential class]]) { + [self writeByte:137]; + [self writeValue:[value toList]]; + } else if ([value isKindOfClass:[InternalUserInfo class]]) { + [self writeByte:138]; + [self writeValue:[value toList]]; + } else if ([value isKindOfClass:[InternalUserDetails class]]) { + [self writeByte:139]; + [self writeValue:[value toList]]; + } else if ([value isKindOfClass:[InternalUserCredential class]]) { + [self writeByte:140]; + [self writeValue:[value toList]]; + } else if ([value isKindOfClass:[InternalAuthCredentialInput class]]) { + [self writeByte:141]; + [self writeValue:[value toList]]; + } else if ([value isKindOfClass:[InternalActionCodeSettings class]]) { + [self writeByte:142]; + [self writeValue:[value toList]]; + } else if ([value isKindOfClass:[InternalFirebaseAuthSettings class]]) { + [self writeByte:143]; + [self writeValue:[value toList]]; + } else if ([value isKindOfClass:[InternalSignInProvider class]]) { + [self writeByte:144]; + [self writeValue:[value toList]]; + } else if ([value isKindOfClass:[InternalVerifyPhoneNumberRequest class]]) { + [self writeByte:145]; + [self writeValue:[value toList]]; + } else if ([value isKindOfClass:[InternalIdTokenResult class]]) { + [self writeByte:146]; + [self writeValue:[value toList]]; + } else if ([value isKindOfClass:[InternalUserProfile class]]) { + [self writeByte:147]; + [self writeValue:[value toList]]; + } else if ([value isKindOfClass:[InternalTotpSecret class]]) { + [self writeByte:148]; + [self writeValue:[value toList]]; + } else { + [super writeValue:value]; + } +} +@end + +@interface nullFirebaseAuthMessagesPigeonCodecReaderWriter : FlutterStandardReaderWriter +@end +@implementation nullFirebaseAuthMessagesPigeonCodecReaderWriter +- (FlutterStandardWriter *)writerWithData:(NSMutableData *)data { + return [[nullFirebaseAuthMessagesPigeonCodecWriter alloc] initWithData:data]; +} +- (FlutterStandardReader *)readerWithData:(NSData *)data { + return [[nullFirebaseAuthMessagesPigeonCodecReader alloc] initWithData:data]; +} +@end + +NSObject *nullGetFirebaseAuthMessagesCodec(void) { + static FlutterStandardMessageCodec *sSharedObject = nil; + static dispatch_once_t sPred = 0; + dispatch_once(&sPred, ^{ + nullFirebaseAuthMessagesPigeonCodecReaderWriter *readerWriter = + [[nullFirebaseAuthMessagesPigeonCodecReaderWriter alloc] init]; + sSharedObject = [FlutterStandardMessageCodec codecWithReaderWriter:readerWriter]; + }); + return sSharedObject; +} +void SetUpFirebaseAuthHostApi(id binaryMessenger, + NSObject *api) { + SetUpFirebaseAuthHostApiWithSuffix(binaryMessenger, api, @""); +} + +void SetUpFirebaseAuthHostApiWithSuffix(id binaryMessenger, + NSObject *api, + NSString *messageChannelSuffix) { + messageChannelSuffix = messageChannelSuffix.length > 0 + ? [NSString stringWithFormat:@".%@", messageChannelSuffix] + : @""; + { + FlutterBasicMessageChannel *channel = [[FlutterBasicMessageChannel alloc] + initWithName:[NSString + stringWithFormat:@"%@%@", + @"dev.flutter.pigeon.firebase_auth_platform_interface." + @"FirebaseAuthHostApi.registerIdTokenListener", + messageChannelSuffix] + binaryMessenger:binaryMessenger + codec:nullGetFirebaseAuthMessagesCodec()]; + if (api) { + NSCAssert([api respondsToSelector:@selector(registerIdTokenListenerApp:completion:)], + @"FirebaseAuthHostApi api (%@) doesn't respond to " + @"@selector(registerIdTokenListenerApp:completion:)", + api); + [channel setMessageHandler:^(id _Nullable message, FlutterReply callback) { + NSArray *args = message; + AuthPigeonFirebaseApp *arg_app = GetNullableObjectAtIndex(args, 0); + [api registerIdTokenListenerApp:arg_app + completion:^(NSString *_Nullable output, + FlutterError *_Nullable error) { + callback(wrapResult(output, error)); + }]; + }]; + } else { + [channel setMessageHandler:nil]; + } + } + { + FlutterBasicMessageChannel *channel = [[FlutterBasicMessageChannel alloc] + initWithName:[NSString + stringWithFormat:@"%@%@", + @"dev.flutter.pigeon.firebase_auth_platform_interface." + @"FirebaseAuthHostApi.registerAuthStateListener", + messageChannelSuffix] + binaryMessenger:binaryMessenger + codec:nullGetFirebaseAuthMessagesCodec()]; + if (api) { + NSCAssert([api respondsToSelector:@selector(registerAuthStateListenerApp:completion:)], + @"FirebaseAuthHostApi api (%@) doesn't respond to " + @"@selector(registerAuthStateListenerApp:completion:)", + api); + [channel setMessageHandler:^(id _Nullable message, FlutterReply callback) { + NSArray *args = message; + AuthPigeonFirebaseApp *arg_app = GetNullableObjectAtIndex(args, 0); + [api registerAuthStateListenerApp:arg_app + completion:^(NSString *_Nullable output, + FlutterError *_Nullable error) { + callback(wrapResult(output, error)); + }]; + }]; + } else { + [channel setMessageHandler:nil]; + } + } + { + FlutterBasicMessageChannel *channel = [[FlutterBasicMessageChannel alloc] + initWithName:[NSString stringWithFormat:@"%@%@", + @"dev.flutter.pigeon.firebase_auth_platform_" + @"interface.FirebaseAuthHostApi.useEmulator", + messageChannelSuffix] + binaryMessenger:binaryMessenger + codec:nullGetFirebaseAuthMessagesCodec()]; + if (api) { + NSCAssert([api respondsToSelector:@selector(useEmulatorApp:host:port:completion:)], + @"FirebaseAuthHostApi api (%@) doesn't respond to " + @"@selector(useEmulatorApp:host:port:completion:)", + api); + [channel setMessageHandler:^(id _Nullable message, FlutterReply callback) { + NSArray *args = message; + AuthPigeonFirebaseApp *arg_app = GetNullableObjectAtIndex(args, 0); + NSString *arg_host = GetNullableObjectAtIndex(args, 1); + NSInteger arg_port = [GetNullableObjectAtIndex(args, 2) integerValue]; + [api useEmulatorApp:arg_app + host:arg_host + port:arg_port + completion:^(FlutterError *_Nullable error) { + callback(wrapResult(nil, error)); + }]; + }]; + } else { + [channel setMessageHandler:nil]; + } + } + { + FlutterBasicMessageChannel *channel = [[FlutterBasicMessageChannel alloc] + initWithName:[NSString stringWithFormat:@"%@%@", + @"dev.flutter.pigeon.firebase_auth_platform_" + @"interface.FirebaseAuthHostApi.applyActionCode", + messageChannelSuffix] + binaryMessenger:binaryMessenger + codec:nullGetFirebaseAuthMessagesCodec()]; + if (api) { + NSCAssert([api respondsToSelector:@selector(applyActionCodeApp:code:completion:)], + @"FirebaseAuthHostApi api (%@) doesn't respond to " + @"@selector(applyActionCodeApp:code:completion:)", + api); + [channel setMessageHandler:^(id _Nullable message, FlutterReply callback) { + NSArray *args = message; + AuthPigeonFirebaseApp *arg_app = GetNullableObjectAtIndex(args, 0); + NSString *arg_code = GetNullableObjectAtIndex(args, 1); + [api applyActionCodeApp:arg_app + code:arg_code + completion:^(FlutterError *_Nullable error) { + callback(wrapResult(nil, error)); + }]; + }]; + } else { + [channel setMessageHandler:nil]; + } + } + { + FlutterBasicMessageChannel *channel = [[FlutterBasicMessageChannel alloc] + initWithName:[NSString stringWithFormat:@"%@%@", + @"dev.flutter.pigeon.firebase_auth_platform_" + @"interface.FirebaseAuthHostApi.checkActionCode", + messageChannelSuffix] + binaryMessenger:binaryMessenger + codec:nullGetFirebaseAuthMessagesCodec()]; + if (api) { + NSCAssert([api respondsToSelector:@selector(checkActionCodeApp:code:completion:)], + @"FirebaseAuthHostApi api (%@) doesn't respond to " + @"@selector(checkActionCodeApp:code:completion:)", + api); + [channel setMessageHandler:^(id _Nullable message, FlutterReply callback) { + NSArray *args = message; + AuthPigeonFirebaseApp *arg_app = GetNullableObjectAtIndex(args, 0); + NSString *arg_code = GetNullableObjectAtIndex(args, 1); + [api checkActionCodeApp:arg_app + code:arg_code + completion:^(InternalActionCodeInfo *_Nullable output, + FlutterError *_Nullable error) { + callback(wrapResult(output, error)); + }]; + }]; + } else { + [channel setMessageHandler:nil]; + } + } + { + FlutterBasicMessageChannel *channel = [[FlutterBasicMessageChannel alloc] + initWithName:[NSString + stringWithFormat:@"%@%@", + @"dev.flutter.pigeon.firebase_auth_platform_interface." + @"FirebaseAuthHostApi.confirmPasswordReset", + messageChannelSuffix] + binaryMessenger:binaryMessenger + codec:nullGetFirebaseAuthMessagesCodec()]; + if (api) { + NSCAssert( + [api respondsToSelector:@selector(confirmPasswordResetApp:code:newPassword:completion:)], + @"FirebaseAuthHostApi api (%@) doesn't respond to " + @"@selector(confirmPasswordResetApp:code:newPassword:completion:)", + api); + [channel setMessageHandler:^(id _Nullable message, FlutterReply callback) { + NSArray *args = message; + AuthPigeonFirebaseApp *arg_app = GetNullableObjectAtIndex(args, 0); + NSString *arg_code = GetNullableObjectAtIndex(args, 1); + NSString *arg_newPassword = GetNullableObjectAtIndex(args, 2); + [api confirmPasswordResetApp:arg_app + code:arg_code + newPassword:arg_newPassword + completion:^(FlutterError *_Nullable error) { + callback(wrapResult(nil, error)); + }]; + }]; + } else { + [channel setMessageHandler:nil]; + } + } + { + FlutterBasicMessageChannel *channel = [[FlutterBasicMessageChannel alloc] + initWithName:[NSString + stringWithFormat:@"%@%@", + @"dev.flutter.pigeon.firebase_auth_platform_interface." + @"FirebaseAuthHostApi.createUserWithEmailAndPassword", + messageChannelSuffix] + binaryMessenger:binaryMessenger + codec:nullGetFirebaseAuthMessagesCodec()]; + if (api) { + NSCAssert( + [api + respondsToSelector:@selector( + createUserWithEmailAndPasswordApp:email:password:completion:)], + @"FirebaseAuthHostApi api (%@) doesn't respond to " + @"@selector(createUserWithEmailAndPasswordApp:email:password:completion:)", + api); + [channel setMessageHandler:^(id _Nullable message, FlutterReply callback) { + NSArray *args = message; + AuthPigeonFirebaseApp *arg_app = GetNullableObjectAtIndex(args, 0); + NSString *arg_email = GetNullableObjectAtIndex(args, 1); + NSString *arg_password = GetNullableObjectAtIndex(args, 2); + [api createUserWithEmailAndPasswordApp:arg_app + email:arg_email + password:arg_password + completion:^(InternalUserCredential *_Nullable output, + FlutterError *_Nullable error) { + callback(wrapResult(output, error)); + }]; + }]; + } else { + [channel setMessageHandler:nil]; + } + } + { + FlutterBasicMessageChannel *channel = [[FlutterBasicMessageChannel alloc] + initWithName:[NSString + stringWithFormat:@"%@%@", + @"dev.flutter.pigeon.firebase_auth_platform_interface." + @"FirebaseAuthHostApi.signInAnonymously", + messageChannelSuffix] + binaryMessenger:binaryMessenger + codec:nullGetFirebaseAuthMessagesCodec()]; + if (api) { + NSCAssert([api respondsToSelector:@selector(signInAnonymouslyApp:completion:)], + @"FirebaseAuthHostApi api (%@) doesn't respond to " + @"@selector(signInAnonymouslyApp:completion:)", + api); + [channel setMessageHandler:^(id _Nullable message, FlutterReply callback) { + NSArray *args = message; + AuthPigeonFirebaseApp *arg_app = GetNullableObjectAtIndex(args, 0); + [api signInAnonymouslyApp:arg_app + completion:^(InternalUserCredential *_Nullable output, + FlutterError *_Nullable error) { + callback(wrapResult(output, error)); + }]; + }]; + } else { + [channel setMessageHandler:nil]; + } + } + { + FlutterBasicMessageChannel *channel = [[FlutterBasicMessageChannel alloc] + initWithName:[NSString + stringWithFormat:@"%@%@", + @"dev.flutter.pigeon.firebase_auth_platform_interface." + @"FirebaseAuthHostApi.signInWithCredential", + messageChannelSuffix] + binaryMessenger:binaryMessenger + codec:nullGetFirebaseAuthMessagesCodec()]; + if (api) { + NSCAssert([api respondsToSelector:@selector(signInWithCredentialApp:input:completion:)], + @"FirebaseAuthHostApi api (%@) doesn't respond to " + @"@selector(signInWithCredentialApp:input:completion:)", + api); + [channel setMessageHandler:^(id _Nullable message, FlutterReply callback) { + NSArray *args = message; + AuthPigeonFirebaseApp *arg_app = GetNullableObjectAtIndex(args, 0); + NSDictionary *arg_input = GetNullableObjectAtIndex(args, 1); + [api signInWithCredentialApp:arg_app + input:arg_input + completion:^(InternalUserCredential *_Nullable output, + FlutterError *_Nullable error) { + callback(wrapResult(output, error)); + }]; + }]; + } else { + [channel setMessageHandler:nil]; + } + } + { + FlutterBasicMessageChannel *channel = [[FlutterBasicMessageChannel alloc] + initWithName:[NSString + stringWithFormat:@"%@%@", + @"dev.flutter.pigeon.firebase_auth_platform_interface." + @"FirebaseAuthHostApi.signInWithCustomToken", + messageChannelSuffix] + binaryMessenger:binaryMessenger + codec:nullGetFirebaseAuthMessagesCodec()]; + if (api) { + NSCAssert([api respondsToSelector:@selector(signInWithCustomTokenApp:token:completion:)], + @"FirebaseAuthHostApi api (%@) doesn't respond to " + @"@selector(signInWithCustomTokenApp:token:completion:)", + api); + [channel setMessageHandler:^(id _Nullable message, FlutterReply callback) { + NSArray *args = message; + AuthPigeonFirebaseApp *arg_app = GetNullableObjectAtIndex(args, 0); + NSString *arg_token = GetNullableObjectAtIndex(args, 1); + [api signInWithCustomTokenApp:arg_app + token:arg_token + completion:^(InternalUserCredential *_Nullable output, + FlutterError *_Nullable error) { + callback(wrapResult(output, error)); + }]; + }]; + } else { + [channel setMessageHandler:nil]; + } + } + { + FlutterBasicMessageChannel *channel = [[FlutterBasicMessageChannel alloc] + initWithName:[NSString + stringWithFormat:@"%@%@", + @"dev.flutter.pigeon.firebase_auth_platform_interface." + @"FirebaseAuthHostApi.signInWithEmailAndPassword", + messageChannelSuffix] + binaryMessenger:binaryMessenger + codec:nullGetFirebaseAuthMessagesCodec()]; + if (api) { + NSCAssert( + [api respondsToSelector:@selector( + signInWithEmailAndPasswordApp:email:password:completion:)], + @"FirebaseAuthHostApi api (%@) doesn't respond to " + @"@selector(signInWithEmailAndPasswordApp:email:password:completion:)", + api); + [channel setMessageHandler:^(id _Nullable message, FlutterReply callback) { + NSArray *args = message; + AuthPigeonFirebaseApp *arg_app = GetNullableObjectAtIndex(args, 0); + NSString *arg_email = GetNullableObjectAtIndex(args, 1); + NSString *arg_password = GetNullableObjectAtIndex(args, 2); + [api signInWithEmailAndPasswordApp:arg_app + email:arg_email + password:arg_password + completion:^(InternalUserCredential *_Nullable output, + FlutterError *_Nullable error) { + callback(wrapResult(output, error)); + }]; + }]; + } else { + [channel setMessageHandler:nil]; + } + } + { + FlutterBasicMessageChannel *channel = [[FlutterBasicMessageChannel alloc] + initWithName:[NSString + stringWithFormat:@"%@%@", + @"dev.flutter.pigeon.firebase_auth_platform_interface." + @"FirebaseAuthHostApi.signInWithEmailLink", + messageChannelSuffix] + binaryMessenger:binaryMessenger + codec:nullGetFirebaseAuthMessagesCodec()]; + if (api) { + NSCAssert( + [api respondsToSelector:@selector(signInWithEmailLinkApp:email:emailLink:completion:)], + @"FirebaseAuthHostApi api (%@) doesn't respond to " + @"@selector(signInWithEmailLinkApp:email:emailLink:completion:)", + api); + [channel setMessageHandler:^(id _Nullable message, FlutterReply callback) { + NSArray *args = message; + AuthPigeonFirebaseApp *arg_app = GetNullableObjectAtIndex(args, 0); + NSString *arg_email = GetNullableObjectAtIndex(args, 1); + NSString *arg_emailLink = GetNullableObjectAtIndex(args, 2); + [api signInWithEmailLinkApp:arg_app + email:arg_email + emailLink:arg_emailLink + completion:^(InternalUserCredential *_Nullable output, + FlutterError *_Nullable error) { + callback(wrapResult(output, error)); + }]; + }]; + } else { + [channel setMessageHandler:nil]; + } + } + { + FlutterBasicMessageChannel *channel = [[FlutterBasicMessageChannel alloc] + initWithName:[NSString + stringWithFormat:@"%@%@", + @"dev.flutter.pigeon.firebase_auth_platform_interface." + @"FirebaseAuthHostApi.signInWithProvider", + messageChannelSuffix] + binaryMessenger:binaryMessenger + codec:nullGetFirebaseAuthMessagesCodec()]; + if (api) { + NSCAssert( + [api respondsToSelector:@selector(signInWithProviderApp:signInProvider:completion:)], + @"FirebaseAuthHostApi api (%@) doesn't respond to " + @"@selector(signInWithProviderApp:signInProvider:completion:)", + api); + [channel setMessageHandler:^(id _Nullable message, FlutterReply callback) { + NSArray *args = message; + AuthPigeonFirebaseApp *arg_app = GetNullableObjectAtIndex(args, 0); + InternalSignInProvider *arg_signInProvider = GetNullableObjectAtIndex(args, 1); + [api signInWithProviderApp:arg_app + signInProvider:arg_signInProvider + completion:^(InternalUserCredential *_Nullable output, + FlutterError *_Nullable error) { + callback(wrapResult(output, error)); + }]; + }]; + } else { + [channel setMessageHandler:nil]; + } + } + { + FlutterBasicMessageChannel *channel = [[FlutterBasicMessageChannel alloc] + initWithName:[NSString stringWithFormat:@"%@%@", + @"dev.flutter.pigeon.firebase_auth_platform_" + @"interface.FirebaseAuthHostApi.signOut", + messageChannelSuffix] + binaryMessenger:binaryMessenger + codec:nullGetFirebaseAuthMessagesCodec()]; + if (api) { + NSCAssert( + [api respondsToSelector:@selector(signOutApp:completion:)], + @"FirebaseAuthHostApi api (%@) doesn't respond to @selector(signOutApp:completion:)", + api); + [channel setMessageHandler:^(id _Nullable message, FlutterReply callback) { + NSArray *args = message; + AuthPigeonFirebaseApp *arg_app = GetNullableObjectAtIndex(args, 0); + [api signOutApp:arg_app + completion:^(FlutterError *_Nullable error) { + callback(wrapResult(nil, error)); + }]; + }]; + } else { + [channel setMessageHandler:nil]; + } + } + { + FlutterBasicMessageChannel *channel = [[FlutterBasicMessageChannel alloc] + initWithName:[NSString + stringWithFormat:@"%@%@", + @"dev.flutter.pigeon.firebase_auth_platform_interface." + @"FirebaseAuthHostApi.fetchSignInMethodsForEmail", + messageChannelSuffix] + binaryMessenger:binaryMessenger + codec:nullGetFirebaseAuthMessagesCodec()]; + if (api) { + NSCAssert([api respondsToSelector:@selector(fetchSignInMethodsForEmailApp:email:completion:)], + @"FirebaseAuthHostApi api (%@) doesn't respond to " + @"@selector(fetchSignInMethodsForEmailApp:email:completion:)", + api); + [channel setMessageHandler:^(id _Nullable message, FlutterReply callback) { + NSArray *args = message; + AuthPigeonFirebaseApp *arg_app = GetNullableObjectAtIndex(args, 0); + NSString *arg_email = GetNullableObjectAtIndex(args, 1); + [api fetchSignInMethodsForEmailApp:arg_app + email:arg_email + completion:^(NSArray *_Nullable output, + FlutterError *_Nullable error) { + callback(wrapResult(output, error)); + }]; + }]; + } else { + [channel setMessageHandler:nil]; + } + } + { + FlutterBasicMessageChannel *channel = [[FlutterBasicMessageChannel alloc] + initWithName:[NSString + stringWithFormat:@"%@%@", + @"dev.flutter.pigeon.firebase_auth_platform_interface." + @"FirebaseAuthHostApi.sendPasswordResetEmail", + messageChannelSuffix] + binaryMessenger:binaryMessenger + codec:nullGetFirebaseAuthMessagesCodec()]; + if (api) { + NSCAssert([api respondsToSelector: + @selector(sendPasswordResetEmailApp:email:actionCodeSettings:completion:)], + @"FirebaseAuthHostApi api (%@) doesn't respond to " + @"@selector(sendPasswordResetEmailApp:email:actionCodeSettings:completion:)", + api); + [channel setMessageHandler:^(id _Nullable message, FlutterReply callback) { + NSArray *args = message; + AuthPigeonFirebaseApp *arg_app = GetNullableObjectAtIndex(args, 0); + NSString *arg_email = GetNullableObjectAtIndex(args, 1); + InternalActionCodeSettings *arg_actionCodeSettings = GetNullableObjectAtIndex(args, 2); + [api sendPasswordResetEmailApp:arg_app + email:arg_email + actionCodeSettings:arg_actionCodeSettings + completion:^(FlutterError *_Nullable error) { + callback(wrapResult(nil, error)); + }]; + }]; + } else { + [channel setMessageHandler:nil]; + } + } + { + FlutterBasicMessageChannel *channel = [[FlutterBasicMessageChannel alloc] + initWithName:[NSString + stringWithFormat:@"%@%@", + @"dev.flutter.pigeon.firebase_auth_platform_interface." + @"FirebaseAuthHostApi.sendSignInLinkToEmail", + messageChannelSuffix] + binaryMessenger:binaryMessenger + codec:nullGetFirebaseAuthMessagesCodec()]; + if (api) { + NSCAssert([api respondsToSelector: + @selector(sendSignInLinkToEmailApp:email:actionCodeSettings:completion:)], + @"FirebaseAuthHostApi api (%@) doesn't respond to " + @"@selector(sendSignInLinkToEmailApp:email:actionCodeSettings:completion:)", + api); + [channel setMessageHandler:^(id _Nullable message, FlutterReply callback) { + NSArray *args = message; + AuthPigeonFirebaseApp *arg_app = GetNullableObjectAtIndex(args, 0); + NSString *arg_email = GetNullableObjectAtIndex(args, 1); + InternalActionCodeSettings *arg_actionCodeSettings = GetNullableObjectAtIndex(args, 2); + [api sendSignInLinkToEmailApp:arg_app + email:arg_email + actionCodeSettings:arg_actionCodeSettings + completion:^(FlutterError *_Nullable error) { + callback(wrapResult(nil, error)); + }]; + }]; + } else { + [channel setMessageHandler:nil]; + } + } + { + FlutterBasicMessageChannel *channel = [[FlutterBasicMessageChannel alloc] + initWithName:[NSString stringWithFormat:@"%@%@", + @"dev.flutter.pigeon.firebase_auth_platform_" + @"interface.FirebaseAuthHostApi.setLanguageCode", + messageChannelSuffix] + binaryMessenger:binaryMessenger + codec:nullGetFirebaseAuthMessagesCodec()]; + if (api) { + NSCAssert([api respondsToSelector:@selector(setLanguageCodeApp:languageCode:completion:)], + @"FirebaseAuthHostApi api (%@) doesn't respond to " + @"@selector(setLanguageCodeApp:languageCode:completion:)", + api); + [channel setMessageHandler:^(id _Nullable message, FlutterReply callback) { + NSArray *args = message; + AuthPigeonFirebaseApp *arg_app = GetNullableObjectAtIndex(args, 0); + NSString *arg_languageCode = GetNullableObjectAtIndex(args, 1); + [api setLanguageCodeApp:arg_app + languageCode:arg_languageCode + completion:^(NSString *_Nullable output, FlutterError *_Nullable error) { + callback(wrapResult(output, error)); + }]; + }]; + } else { + [channel setMessageHandler:nil]; + } + } + { + FlutterBasicMessageChannel *channel = [[FlutterBasicMessageChannel alloc] + initWithName:[NSString stringWithFormat:@"%@%@", + @"dev.flutter.pigeon.firebase_auth_platform_" + @"interface.FirebaseAuthHostApi.setSettings", + messageChannelSuffix] + binaryMessenger:binaryMessenger + codec:nullGetFirebaseAuthMessagesCodec()]; + if (api) { + NSCAssert([api respondsToSelector:@selector(setSettingsApp:settings:completion:)], + @"FirebaseAuthHostApi api (%@) doesn't respond to " + @"@selector(setSettingsApp:settings:completion:)", + api); + [channel setMessageHandler:^(id _Nullable message, FlutterReply callback) { + NSArray *args = message; + AuthPigeonFirebaseApp *arg_app = GetNullableObjectAtIndex(args, 0); + InternalFirebaseAuthSettings *arg_settings = GetNullableObjectAtIndex(args, 1); + [api setSettingsApp:arg_app + settings:arg_settings + completion:^(FlutterError *_Nullable error) { + callback(wrapResult(nil, error)); + }]; + }]; + } else { + [channel setMessageHandler:nil]; + } + } + { + FlutterBasicMessageChannel *channel = [[FlutterBasicMessageChannel alloc] + initWithName:[NSString + stringWithFormat:@"%@%@", + @"dev.flutter.pigeon.firebase_auth_platform_interface." + @"FirebaseAuthHostApi.verifyPasswordResetCode", + messageChannelSuffix] + binaryMessenger:binaryMessenger + codec:nullGetFirebaseAuthMessagesCodec()]; + if (api) { + NSCAssert([api respondsToSelector:@selector(verifyPasswordResetCodeApp:code:completion:)], + @"FirebaseAuthHostApi api (%@) doesn't respond to " + @"@selector(verifyPasswordResetCodeApp:code:completion:)", + api); + [channel setMessageHandler:^(id _Nullable message, FlutterReply callback) { + NSArray *args = message; + AuthPigeonFirebaseApp *arg_app = GetNullableObjectAtIndex(args, 0); + NSString *arg_code = GetNullableObjectAtIndex(args, 1); + [api verifyPasswordResetCodeApp:arg_app + code:arg_code + completion:^(NSString *_Nullable output, + FlutterError *_Nullable error) { + callback(wrapResult(output, error)); + }]; + }]; + } else { + [channel setMessageHandler:nil]; + } + } + { + FlutterBasicMessageChannel *channel = [[FlutterBasicMessageChannel alloc] + initWithName:[NSString + stringWithFormat:@"%@%@", + @"dev.flutter.pigeon.firebase_auth_platform_interface." + @"FirebaseAuthHostApi.verifyPhoneNumber", + messageChannelSuffix] + binaryMessenger:binaryMessenger + codec:nullGetFirebaseAuthMessagesCodec()]; + if (api) { + NSCAssert([api respondsToSelector:@selector(verifyPhoneNumberApp:request:completion:)], + @"FirebaseAuthHostApi api (%@) doesn't respond to " + @"@selector(verifyPhoneNumberApp:request:completion:)", + api); + [channel setMessageHandler:^(id _Nullable message, FlutterReply callback) { + NSArray *args = message; + AuthPigeonFirebaseApp *arg_app = GetNullableObjectAtIndex(args, 0); + InternalVerifyPhoneNumberRequest *arg_request = GetNullableObjectAtIndex(args, 1); + [api verifyPhoneNumberApp:arg_app + request:arg_request + completion:^(NSString *_Nullable output, FlutterError *_Nullable error) { + callback(wrapResult(output, error)); + }]; + }]; + } else { + [channel setMessageHandler:nil]; + } + } + { + FlutterBasicMessageChannel *channel = [[FlutterBasicMessageChannel alloc] + initWithName: + [NSString stringWithFormat:@"%@%@", + @"dev.flutter.pigeon.firebase_auth_platform_interface." + @"FirebaseAuthHostApi.revokeTokenWithAuthorizationCode", + messageChannelSuffix] + binaryMessenger:binaryMessenger + codec:nullGetFirebaseAuthMessagesCodec()]; + if (api) { + NSCAssert([api respondsToSelector:@selector(revokeTokenWithAuthorizationCodeApp: + authorizationCode:completion:)], + @"FirebaseAuthHostApi api (%@) doesn't respond to " + @"@selector(revokeTokenWithAuthorizationCodeApp:authorizationCode:completion:)", + api); + [channel setMessageHandler:^(id _Nullable message, FlutterReply callback) { + NSArray *args = message; + AuthPigeonFirebaseApp *arg_app = GetNullableObjectAtIndex(args, 0); + NSString *arg_authorizationCode = GetNullableObjectAtIndex(args, 1); + [api revokeTokenWithAuthorizationCodeApp:arg_app + authorizationCode:arg_authorizationCode + completion:^(FlutterError *_Nullable error) { + callback(wrapResult(nil, error)); + }]; + }]; + } else { + [channel setMessageHandler:nil]; + } + } + { + FlutterBasicMessageChannel *channel = [[FlutterBasicMessageChannel alloc] + initWithName:[NSString + stringWithFormat:@"%@%@", + @"dev.flutter.pigeon.firebase_auth_platform_interface." + @"FirebaseAuthHostApi.revokeAccessToken", + messageChannelSuffix] + binaryMessenger:binaryMessenger + codec:nullGetFirebaseAuthMessagesCodec()]; + if (api) { + NSCAssert([api respondsToSelector:@selector(revokeAccessTokenApp:accessToken:completion:)], + @"FirebaseAuthHostApi api (%@) doesn't respond to " + @"@selector(revokeAccessTokenApp:accessToken:completion:)", + api); + [channel setMessageHandler:^(id _Nullable message, FlutterReply callback) { + NSArray *args = message; + AuthPigeonFirebaseApp *arg_app = GetNullableObjectAtIndex(args, 0); + NSString *arg_accessToken = GetNullableObjectAtIndex(args, 1); + [api revokeAccessTokenApp:arg_app + accessToken:arg_accessToken + completion:^(FlutterError *_Nullable error) { + callback(wrapResult(nil, error)); + }]; + }]; + } else { + [channel setMessageHandler:nil]; + } + } + { + FlutterBasicMessageChannel *channel = [[FlutterBasicMessageChannel alloc] + initWithName:[NSString + stringWithFormat:@"%@%@", + @"dev.flutter.pigeon.firebase_auth_platform_interface." + @"FirebaseAuthHostApi.initializeRecaptchaConfig", + messageChannelSuffix] + binaryMessenger:binaryMessenger + codec:nullGetFirebaseAuthMessagesCodec()]; + if (api) { + NSCAssert([api respondsToSelector:@selector(initializeRecaptchaConfigApp:completion:)], + @"FirebaseAuthHostApi api (%@) doesn't respond to " + @"@selector(initializeRecaptchaConfigApp:completion:)", + api); + [channel setMessageHandler:^(id _Nullable message, FlutterReply callback) { + NSArray *args = message; + AuthPigeonFirebaseApp *arg_app = GetNullableObjectAtIndex(args, 0); + [api initializeRecaptchaConfigApp:arg_app + completion:^(FlutterError *_Nullable error) { + callback(wrapResult(nil, error)); + }]; + }]; + } else { + [channel setMessageHandler:nil]; + } + } +} +void SetUpFirebaseAuthUserHostApi(id binaryMessenger, + NSObject *api) { + SetUpFirebaseAuthUserHostApiWithSuffix(binaryMessenger, api, @""); +} + +void SetUpFirebaseAuthUserHostApiWithSuffix(id binaryMessenger, + NSObject *api, + NSString *messageChannelSuffix) { + messageChannelSuffix = messageChannelSuffix.length > 0 + ? [NSString stringWithFormat:@".%@", messageChannelSuffix] + : @""; + { + FlutterBasicMessageChannel *channel = [[FlutterBasicMessageChannel alloc] + initWithName:[NSString stringWithFormat:@"%@%@", + @"dev.flutter.pigeon.firebase_auth_platform_" + @"interface.FirebaseAuthUserHostApi.delete", + messageChannelSuffix] + binaryMessenger:binaryMessenger + codec:nullGetFirebaseAuthMessagesCodec()]; + if (api) { + NSCAssert( + [api respondsToSelector:@selector(deleteApp:completion:)], + @"FirebaseAuthUserHostApi api (%@) doesn't respond to @selector(deleteApp:completion:)", + api); + [channel setMessageHandler:^(id _Nullable message, FlutterReply callback) { + NSArray *args = message; + AuthPigeonFirebaseApp *arg_app = GetNullableObjectAtIndex(args, 0); + [api deleteApp:arg_app + completion:^(FlutterError *_Nullable error) { + callback(wrapResult(nil, error)); + }]; + }]; + } else { + [channel setMessageHandler:nil]; + } + } + { + FlutterBasicMessageChannel *channel = [[FlutterBasicMessageChannel alloc] + initWithName:[NSString stringWithFormat:@"%@%@", + @"dev.flutter.pigeon.firebase_auth_platform_" + @"interface.FirebaseAuthUserHostApi.getIdToken", + messageChannelSuffix] + binaryMessenger:binaryMessenger + codec:nullGetFirebaseAuthMessagesCodec()]; + if (api) { + NSCAssert([api respondsToSelector:@selector(getIdTokenApp:forceRefresh:completion:)], + @"FirebaseAuthUserHostApi api (%@) doesn't respond to " + @"@selector(getIdTokenApp:forceRefresh:completion:)", + api); + [channel setMessageHandler:^(id _Nullable message, FlutterReply callback) { + NSArray *args = message; + AuthPigeonFirebaseApp *arg_app = GetNullableObjectAtIndex(args, 0); + BOOL arg_forceRefresh = [GetNullableObjectAtIndex(args, 1) boolValue]; + [api getIdTokenApp:arg_app + forceRefresh:arg_forceRefresh + completion:^(InternalIdTokenResult *_Nullable output, + FlutterError *_Nullable error) { + callback(wrapResult(output, error)); + }]; + }]; + } else { + [channel setMessageHandler:nil]; + } + } + { + FlutterBasicMessageChannel *channel = [[FlutterBasicMessageChannel alloc] + initWithName:[NSString + stringWithFormat:@"%@%@", + @"dev.flutter.pigeon.firebase_auth_platform_interface." + @"FirebaseAuthUserHostApi.linkWithCredential", + messageChannelSuffix] + binaryMessenger:binaryMessenger + codec:nullGetFirebaseAuthMessagesCodec()]; + if (api) { + NSCAssert([api respondsToSelector:@selector(linkWithCredentialApp:input:completion:)], + @"FirebaseAuthUserHostApi api (%@) doesn't respond to " + @"@selector(linkWithCredentialApp:input:completion:)", + api); + [channel setMessageHandler:^(id _Nullable message, FlutterReply callback) { + NSArray *args = message; + AuthPigeonFirebaseApp *arg_app = GetNullableObjectAtIndex(args, 0); + NSDictionary *arg_input = GetNullableObjectAtIndex(args, 1); + [api linkWithCredentialApp:arg_app + input:arg_input + completion:^(InternalUserCredential *_Nullable output, + FlutterError *_Nullable error) { + callback(wrapResult(output, error)); + }]; + }]; + } else { + [channel setMessageHandler:nil]; + } + } + { + FlutterBasicMessageChannel *channel = [[FlutterBasicMessageChannel alloc] + initWithName:[NSString + stringWithFormat:@"%@%@", + @"dev.flutter.pigeon.firebase_auth_platform_interface." + @"FirebaseAuthUserHostApi.linkWithProvider", + messageChannelSuffix] + binaryMessenger:binaryMessenger + codec:nullGetFirebaseAuthMessagesCodec()]; + if (api) { + NSCAssert([api respondsToSelector:@selector(linkWithProviderApp:signInProvider:completion:)], + @"FirebaseAuthUserHostApi api (%@) doesn't respond to " + @"@selector(linkWithProviderApp:signInProvider:completion:)", + api); + [channel setMessageHandler:^(id _Nullable message, FlutterReply callback) { + NSArray *args = message; + AuthPigeonFirebaseApp *arg_app = GetNullableObjectAtIndex(args, 0); + InternalSignInProvider *arg_signInProvider = GetNullableObjectAtIndex(args, 1); + [api linkWithProviderApp:arg_app + signInProvider:arg_signInProvider + completion:^(InternalUserCredential *_Nullable output, + FlutterError *_Nullable error) { + callback(wrapResult(output, error)); + }]; + }]; + } else { + [channel setMessageHandler:nil]; + } + } + { + FlutterBasicMessageChannel *channel = [[FlutterBasicMessageChannel alloc] + initWithName: + [NSString stringWithFormat:@"%@%@", + @"dev.flutter.pigeon.firebase_auth_platform_interface." + @"FirebaseAuthUserHostApi.reauthenticateWithCredential", + messageChannelSuffix] + binaryMessenger:binaryMessenger + codec:nullGetFirebaseAuthMessagesCodec()]; + if (api) { + NSCAssert( + [api respondsToSelector:@selector(reauthenticateWithCredentialApp:input:completion:)], + @"FirebaseAuthUserHostApi api (%@) doesn't respond to " + @"@selector(reauthenticateWithCredentialApp:input:completion:)", + api); + [channel setMessageHandler:^(id _Nullable message, FlutterReply callback) { + NSArray *args = message; + AuthPigeonFirebaseApp *arg_app = GetNullableObjectAtIndex(args, 0); + NSDictionary *arg_input = GetNullableObjectAtIndex(args, 1); + [api reauthenticateWithCredentialApp:arg_app + input:arg_input + completion:^(InternalUserCredential *_Nullable output, + FlutterError *_Nullable error) { + callback(wrapResult(output, error)); + }]; + }]; + } else { + [channel setMessageHandler:nil]; + } + } + { + FlutterBasicMessageChannel *channel = [[FlutterBasicMessageChannel alloc] + initWithName:[NSString + stringWithFormat:@"%@%@", + @"dev.flutter.pigeon.firebase_auth_platform_interface." + @"FirebaseAuthUserHostApi.reauthenticateWithProvider", + messageChannelSuffix] + binaryMessenger:binaryMessenger + codec:nullGetFirebaseAuthMessagesCodec()]; + if (api) { + NSCAssert( + [api respondsToSelector:@selector( + reauthenticateWithProviderApp:signInProvider:completion:)], + @"FirebaseAuthUserHostApi api (%@) doesn't respond to " + @"@selector(reauthenticateWithProviderApp:signInProvider:completion:)", + api); + [channel setMessageHandler:^(id _Nullable message, FlutterReply callback) { + NSArray *args = message; + AuthPigeonFirebaseApp *arg_app = GetNullableObjectAtIndex(args, 0); + InternalSignInProvider *arg_signInProvider = GetNullableObjectAtIndex(args, 1); + [api reauthenticateWithProviderApp:arg_app + signInProvider:arg_signInProvider + completion:^(InternalUserCredential *_Nullable output, + FlutterError *_Nullable error) { + callback(wrapResult(output, error)); + }]; + }]; + } else { + [channel setMessageHandler:nil]; + } + } + { + FlutterBasicMessageChannel *channel = [[FlutterBasicMessageChannel alloc] + initWithName:[NSString stringWithFormat:@"%@%@", + @"dev.flutter.pigeon.firebase_auth_platform_" + @"interface.FirebaseAuthUserHostApi.reload", + messageChannelSuffix] + binaryMessenger:binaryMessenger + codec:nullGetFirebaseAuthMessagesCodec()]; + if (api) { + NSCAssert( + [api respondsToSelector:@selector(reloadApp:completion:)], + @"FirebaseAuthUserHostApi api (%@) doesn't respond to @selector(reloadApp:completion:)", + api); + [channel setMessageHandler:^(id _Nullable message, FlutterReply callback) { + NSArray *args = message; + AuthPigeonFirebaseApp *arg_app = GetNullableObjectAtIndex(args, 0); + [api reloadApp:arg_app + completion:^(InternalUserDetails *_Nullable output, FlutterError *_Nullable error) { + callback(wrapResult(output, error)); + }]; + }]; + } else { + [channel setMessageHandler:nil]; + } + } + { + FlutterBasicMessageChannel *channel = [[FlutterBasicMessageChannel alloc] + initWithName:[NSString + stringWithFormat:@"%@%@", + @"dev.flutter.pigeon.firebase_auth_platform_interface." + @"FirebaseAuthUserHostApi.sendEmailVerification", + messageChannelSuffix] + binaryMessenger:binaryMessenger + codec:nullGetFirebaseAuthMessagesCodec()]; + if (api) { + NSCAssert( + [api respondsToSelector:@selector( + sendEmailVerificationApp:actionCodeSettings:completion:)], + @"FirebaseAuthUserHostApi api (%@) doesn't respond to " + @"@selector(sendEmailVerificationApp:actionCodeSettings:completion:)", + api); + [channel setMessageHandler:^(id _Nullable message, FlutterReply callback) { + NSArray *args = message; + AuthPigeonFirebaseApp *arg_app = GetNullableObjectAtIndex(args, 0); + InternalActionCodeSettings *arg_actionCodeSettings = GetNullableObjectAtIndex(args, 1); + [api sendEmailVerificationApp:arg_app + actionCodeSettings:arg_actionCodeSettings + completion:^(FlutterError *_Nullable error) { + callback(wrapResult(nil, error)); + }]; + }]; + } else { + [channel setMessageHandler:nil]; + } + } + { + FlutterBasicMessageChannel *channel = [[FlutterBasicMessageChannel alloc] + initWithName:[NSString stringWithFormat:@"%@%@", + @"dev.flutter.pigeon.firebase_auth_platform_" + @"interface.FirebaseAuthUserHostApi.unlink", + messageChannelSuffix] + binaryMessenger:binaryMessenger + codec:nullGetFirebaseAuthMessagesCodec()]; + if (api) { + NSCAssert([api respondsToSelector:@selector(unlinkApp:providerId:completion:)], + @"FirebaseAuthUserHostApi api (%@) doesn't respond to " + @"@selector(unlinkApp:providerId:completion:)", + api); + [channel setMessageHandler:^(id _Nullable message, FlutterReply callback) { + NSArray *args = message; + AuthPigeonFirebaseApp *arg_app = GetNullableObjectAtIndex(args, 0); + NSString *arg_providerId = GetNullableObjectAtIndex(args, 1); + [api unlinkApp:arg_app + providerId:arg_providerId + completion:^(InternalUserCredential *_Nullable output, FlutterError *_Nullable error) { + callback(wrapResult(output, error)); + }]; + }]; + } else { + [channel setMessageHandler:nil]; + } + } + { + FlutterBasicMessageChannel *channel = [[FlutterBasicMessageChannel alloc] + initWithName:[NSString stringWithFormat:@"%@%@", + @"dev.flutter.pigeon.firebase_auth_platform_" + @"interface.FirebaseAuthUserHostApi.updateEmail", + messageChannelSuffix] + binaryMessenger:binaryMessenger + codec:nullGetFirebaseAuthMessagesCodec()]; + if (api) { + NSCAssert([api respondsToSelector:@selector(updateEmailApp:newEmail:completion:)], + @"FirebaseAuthUserHostApi api (%@) doesn't respond to " + @"@selector(updateEmailApp:newEmail:completion:)", + api); + [channel setMessageHandler:^(id _Nullable message, FlutterReply callback) { + NSArray *args = message; + AuthPigeonFirebaseApp *arg_app = GetNullableObjectAtIndex(args, 0); + NSString *arg_newEmail = GetNullableObjectAtIndex(args, 1); + [api + updateEmailApp:arg_app + newEmail:arg_newEmail + completion:^(InternalUserDetails *_Nullable output, FlutterError *_Nullable error) { + callback(wrapResult(output, error)); + }]; + }]; + } else { + [channel setMessageHandler:nil]; + } + } + { + FlutterBasicMessageChannel *channel = [[FlutterBasicMessageChannel alloc] + initWithName:[NSString + stringWithFormat:@"%@%@", + @"dev.flutter.pigeon.firebase_auth_platform_interface." + @"FirebaseAuthUserHostApi.updatePassword", + messageChannelSuffix] + binaryMessenger:binaryMessenger + codec:nullGetFirebaseAuthMessagesCodec()]; + if (api) { + NSCAssert([api respondsToSelector:@selector(updatePasswordApp:newPassword:completion:)], + @"FirebaseAuthUserHostApi api (%@) doesn't respond to " + @"@selector(updatePasswordApp:newPassword:completion:)", + api); + [channel setMessageHandler:^(id _Nullable message, FlutterReply callback) { + NSArray *args = message; + AuthPigeonFirebaseApp *arg_app = GetNullableObjectAtIndex(args, 0); + NSString *arg_newPassword = GetNullableObjectAtIndex(args, 1); + [api updatePasswordApp:arg_app + newPassword:arg_newPassword + completion:^(InternalUserDetails *_Nullable output, + FlutterError *_Nullable error) { + callback(wrapResult(output, error)); + }]; + }]; + } else { + [channel setMessageHandler:nil]; + } + } + { + FlutterBasicMessageChannel *channel = [[FlutterBasicMessageChannel alloc] + initWithName:[NSString + stringWithFormat:@"%@%@", + @"dev.flutter.pigeon.firebase_auth_platform_interface." + @"FirebaseAuthUserHostApi.updatePhoneNumber", + messageChannelSuffix] + binaryMessenger:binaryMessenger + codec:nullGetFirebaseAuthMessagesCodec()]; + if (api) { + NSCAssert([api respondsToSelector:@selector(updatePhoneNumberApp:input:completion:)], + @"FirebaseAuthUserHostApi api (%@) doesn't respond to " + @"@selector(updatePhoneNumberApp:input:completion:)", + api); + [channel setMessageHandler:^(id _Nullable message, FlutterReply callback) { + NSArray *args = message; + AuthPigeonFirebaseApp *arg_app = GetNullableObjectAtIndex(args, 0); + NSDictionary *arg_input = GetNullableObjectAtIndex(args, 1); + [api updatePhoneNumberApp:arg_app + input:arg_input + completion:^(InternalUserDetails *_Nullable output, + FlutterError *_Nullable error) { + callback(wrapResult(output, error)); + }]; + }]; + } else { + [channel setMessageHandler:nil]; + } + } + { + FlutterBasicMessageChannel *channel = [[FlutterBasicMessageChannel alloc] + initWithName:[NSString + stringWithFormat:@"%@%@", + @"dev.flutter.pigeon.firebase_auth_platform_interface." + @"FirebaseAuthUserHostApi.updateProfile", + messageChannelSuffix] + binaryMessenger:binaryMessenger + codec:nullGetFirebaseAuthMessagesCodec()]; + if (api) { + NSCAssert([api respondsToSelector:@selector(updateProfileApp:profile:completion:)], + @"FirebaseAuthUserHostApi api (%@) doesn't respond to " + @"@selector(updateProfileApp:profile:completion:)", + api); + [channel setMessageHandler:^(id _Nullable message, FlutterReply callback) { + NSArray *args = message; + AuthPigeonFirebaseApp *arg_app = GetNullableObjectAtIndex(args, 0); + InternalUserProfile *arg_profile = GetNullableObjectAtIndex(args, 1); + [api updateProfileApp:arg_app + profile:arg_profile + completion:^(InternalUserDetails *_Nullable output, + FlutterError *_Nullable error) { + callback(wrapResult(output, error)); + }]; + }]; + } else { + [channel setMessageHandler:nil]; + } + } + { + FlutterBasicMessageChannel *channel = [[FlutterBasicMessageChannel alloc] + initWithName:[NSString + stringWithFormat:@"%@%@", + @"dev.flutter.pigeon.firebase_auth_platform_interface." + @"FirebaseAuthUserHostApi.verifyBeforeUpdateEmail", + messageChannelSuffix] + binaryMessenger:binaryMessenger + codec:nullGetFirebaseAuthMessagesCodec()]; + if (api) { + NSCAssert([api respondsToSelector:@selector(verifyBeforeUpdateEmailApp:newEmail: + actionCodeSettings:completion:)], + @"FirebaseAuthUserHostApi api (%@) doesn't respond to " + @"@selector(verifyBeforeUpdateEmailApp:newEmail:actionCodeSettings:completion:)", + api); + [channel setMessageHandler:^(id _Nullable message, FlutterReply callback) { + NSArray *args = message; + AuthPigeonFirebaseApp *arg_app = GetNullableObjectAtIndex(args, 0); + NSString *arg_newEmail = GetNullableObjectAtIndex(args, 1); + InternalActionCodeSettings *arg_actionCodeSettings = GetNullableObjectAtIndex(args, 2); + [api verifyBeforeUpdateEmailApp:arg_app + newEmail:arg_newEmail + actionCodeSettings:arg_actionCodeSettings + completion:^(FlutterError *_Nullable error) { + callback(wrapResult(nil, error)); + }]; + }]; + } else { + [channel setMessageHandler:nil]; + } + } +} +void SetUpMultiFactorUserHostApi(id binaryMessenger, + NSObject *api) { + SetUpMultiFactorUserHostApiWithSuffix(binaryMessenger, api, @""); +} + +void SetUpMultiFactorUserHostApiWithSuffix(id binaryMessenger, + NSObject *api, + NSString *messageChannelSuffix) { + messageChannelSuffix = messageChannelSuffix.length > 0 + ? [NSString stringWithFormat:@".%@", messageChannelSuffix] + : @""; + { + FlutterBasicMessageChannel *channel = [[FlutterBasicMessageChannel alloc] + initWithName:[NSString stringWithFormat:@"%@%@", + @"dev.flutter.pigeon.firebase_auth_platform_" + @"interface.MultiFactorUserHostApi.enrollPhone", + messageChannelSuffix] + binaryMessenger:binaryMessenger + codec:nullGetFirebaseAuthMessagesCodec()]; + if (api) { + NSCAssert( + [api respondsToSelector:@selector(enrollPhoneApp:assertion:displayName:completion:)], + @"MultiFactorUserHostApi api (%@) doesn't respond to " + @"@selector(enrollPhoneApp:assertion:displayName:completion:)", + api); + [channel setMessageHandler:^(id _Nullable message, FlutterReply callback) { + NSArray *args = message; + AuthPigeonFirebaseApp *arg_app = GetNullableObjectAtIndex(args, 0); + InternalPhoneMultiFactorAssertion *arg_assertion = GetNullableObjectAtIndex(args, 1); + NSString *arg_displayName = GetNullableObjectAtIndex(args, 2); + [api enrollPhoneApp:arg_app + assertion:arg_assertion + displayName:arg_displayName + completion:^(FlutterError *_Nullable error) { + callback(wrapResult(nil, error)); + }]; + }]; + } else { + [channel setMessageHandler:nil]; + } + } + { + FlutterBasicMessageChannel *channel = [[FlutterBasicMessageChannel alloc] + initWithName:[NSString stringWithFormat:@"%@%@", + @"dev.flutter.pigeon.firebase_auth_platform_" + @"interface.MultiFactorUserHostApi.enrollTotp", + messageChannelSuffix] + binaryMessenger:binaryMessenger + codec:nullGetFirebaseAuthMessagesCodec()]; + if (api) { + NSCAssert( + [api respondsToSelector:@selector(enrollTotpApp:assertionId:displayName:completion:)], + @"MultiFactorUserHostApi api (%@) doesn't respond to " + @"@selector(enrollTotpApp:assertionId:displayName:completion:)", + api); + [channel setMessageHandler:^(id _Nullable message, FlutterReply callback) { + NSArray *args = message; + AuthPigeonFirebaseApp *arg_app = GetNullableObjectAtIndex(args, 0); + NSString *arg_assertionId = GetNullableObjectAtIndex(args, 1); + NSString *arg_displayName = GetNullableObjectAtIndex(args, 2); + [api enrollTotpApp:arg_app + assertionId:arg_assertionId + displayName:arg_displayName + completion:^(FlutterError *_Nullable error) { + callback(wrapResult(nil, error)); + }]; + }]; + } else { + [channel setMessageHandler:nil]; + } + } + { + FlutterBasicMessageChannel *channel = [[FlutterBasicMessageChannel alloc] + initWithName:[NSString stringWithFormat:@"%@%@", + @"dev.flutter.pigeon.firebase_auth_platform_" + @"interface.MultiFactorUserHostApi.getSession", + messageChannelSuffix] + binaryMessenger:binaryMessenger + codec:nullGetFirebaseAuthMessagesCodec()]; + if (api) { + NSCAssert([api respondsToSelector:@selector(getSessionApp:completion:)], + @"MultiFactorUserHostApi api (%@) doesn't respond to " + @"@selector(getSessionApp:completion:)", + api); + [channel setMessageHandler:^(id _Nullable message, FlutterReply callback) { + NSArray *args = message; + AuthPigeonFirebaseApp *arg_app = GetNullableObjectAtIndex(args, 0); + [api getSessionApp:arg_app + completion:^(InternalMultiFactorSession *_Nullable output, + FlutterError *_Nullable error) { + callback(wrapResult(output, error)); + }]; + }]; + } else { + [channel setMessageHandler:nil]; + } + } + { + FlutterBasicMessageChannel *channel = [[FlutterBasicMessageChannel alloc] + initWithName:[NSString stringWithFormat:@"%@%@", + @"dev.flutter.pigeon.firebase_auth_platform_" + @"interface.MultiFactorUserHostApi.unenroll", + messageChannelSuffix] + binaryMessenger:binaryMessenger + codec:nullGetFirebaseAuthMessagesCodec()]; + if (api) { + NSCAssert([api respondsToSelector:@selector(unenrollApp:factorUid:completion:)], + @"MultiFactorUserHostApi api (%@) doesn't respond to " + @"@selector(unenrollApp:factorUid:completion:)", + api); + [channel setMessageHandler:^(id _Nullable message, FlutterReply callback) { + NSArray *args = message; + AuthPigeonFirebaseApp *arg_app = GetNullableObjectAtIndex(args, 0); + NSString *arg_factorUid = GetNullableObjectAtIndex(args, 1); + [api unenrollApp:arg_app + factorUid:arg_factorUid + completion:^(FlutterError *_Nullable error) { + callback(wrapResult(nil, error)); + }]; + }]; + } else { + [channel setMessageHandler:nil]; + } + } + { + FlutterBasicMessageChannel *channel = [[FlutterBasicMessageChannel alloc] + initWithName:[NSString + stringWithFormat:@"%@%@", + @"dev.flutter.pigeon.firebase_auth_platform_interface." + @"MultiFactorUserHostApi.getEnrolledFactors", + messageChannelSuffix] + binaryMessenger:binaryMessenger + codec:nullGetFirebaseAuthMessagesCodec()]; + if (api) { + NSCAssert([api respondsToSelector:@selector(getEnrolledFactorsApp:completion:)], + @"MultiFactorUserHostApi api (%@) doesn't respond to " + @"@selector(getEnrolledFactorsApp:completion:)", + api); + [channel setMessageHandler:^(id _Nullable message, FlutterReply callback) { + NSArray *args = message; + AuthPigeonFirebaseApp *arg_app = GetNullableObjectAtIndex(args, 0); + [api getEnrolledFactorsApp:arg_app + completion:^(NSArray *_Nullable output, + FlutterError *_Nullable error) { + callback(wrapResult(output, error)); + }]; + }]; + } else { + [channel setMessageHandler:nil]; + } + } +} +void SetUpMultiFactoResolverHostApi(id binaryMessenger, + NSObject *api) { + SetUpMultiFactoResolverHostApiWithSuffix(binaryMessenger, api, @""); +} + +void SetUpMultiFactoResolverHostApiWithSuffix(id binaryMessenger, + NSObject *api, + NSString *messageChannelSuffix) { + messageChannelSuffix = messageChannelSuffix.length > 0 + ? [NSString stringWithFormat:@".%@", messageChannelSuffix] + : @""; + { + FlutterBasicMessageChannel *channel = [[FlutterBasicMessageChannel alloc] + initWithName:[NSString + stringWithFormat:@"%@%@", + @"dev.flutter.pigeon.firebase_auth_platform_interface." + @"MultiFactoResolverHostApi.resolveSignIn", + messageChannelSuffix] + binaryMessenger:binaryMessenger + codec:nullGetFirebaseAuthMessagesCodec()]; + if (api) { + NSCAssert([api respondsToSelector: + @selector(resolveSignInResolverId:assertion:totpAssertionId:completion:)], + @"MultiFactoResolverHostApi api (%@) doesn't respond to " + @"@selector(resolveSignInResolverId:assertion:totpAssertionId:completion:)", + api); + [channel setMessageHandler:^(id _Nullable message, FlutterReply callback) { + NSArray *args = message; + NSString *arg_resolverId = GetNullableObjectAtIndex(args, 0); + InternalPhoneMultiFactorAssertion *arg_assertion = GetNullableObjectAtIndex(args, 1); + NSString *arg_totpAssertionId = GetNullableObjectAtIndex(args, 2); + [api resolveSignInResolverId:arg_resolverId + assertion:arg_assertion + totpAssertionId:arg_totpAssertionId + completion:^(InternalUserCredential *_Nullable output, + FlutterError *_Nullable error) { + callback(wrapResult(output, error)); + }]; + }]; + } else { + [channel setMessageHandler:nil]; + } + } +} +void SetUpMultiFactorTotpHostApi(id binaryMessenger, + NSObject *api) { + SetUpMultiFactorTotpHostApiWithSuffix(binaryMessenger, api, @""); +} + +void SetUpMultiFactorTotpHostApiWithSuffix(id binaryMessenger, + NSObject *api, + NSString *messageChannelSuffix) { + messageChannelSuffix = messageChannelSuffix.length > 0 + ? [NSString stringWithFormat:@".%@", messageChannelSuffix] + : @""; + { + FlutterBasicMessageChannel *channel = [[FlutterBasicMessageChannel alloc] + initWithName:[NSString + stringWithFormat:@"%@%@", + @"dev.flutter.pigeon.firebase_auth_platform_interface." + @"MultiFactorTotpHostApi.generateSecret", + messageChannelSuffix] + binaryMessenger:binaryMessenger + codec:nullGetFirebaseAuthMessagesCodec()]; + if (api) { + NSCAssert([api respondsToSelector:@selector(generateSecretSessionId:completion:)], + @"MultiFactorTotpHostApi api (%@) doesn't respond to " + @"@selector(generateSecretSessionId:completion:)", + api); + [channel setMessageHandler:^(id _Nullable message, FlutterReply callback) { + NSArray *args = message; + NSString *arg_sessionId = GetNullableObjectAtIndex(args, 0); + [api generateSecretSessionId:arg_sessionId + completion:^(InternalTotpSecret *_Nullable output, + FlutterError *_Nullable error) { + callback(wrapResult(output, error)); + }]; + }]; + } else { + [channel setMessageHandler:nil]; + } + } + { + FlutterBasicMessageChannel *channel = [[FlutterBasicMessageChannel alloc] + initWithName:[NSString + stringWithFormat:@"%@%@", + @"dev.flutter.pigeon.firebase_auth_platform_interface." + @"MultiFactorTotpHostApi.getAssertionForEnrollment", + messageChannelSuffix] + binaryMessenger:binaryMessenger + codec:nullGetFirebaseAuthMessagesCodec()]; + if (api) { + NSCAssert([api respondsToSelector: + @selector(getAssertionForEnrollmentSecretKey:oneTimePassword:completion:)], + @"MultiFactorTotpHostApi api (%@) doesn't respond to " + @"@selector(getAssertionForEnrollmentSecretKey:oneTimePassword:completion:)", + api); + [channel setMessageHandler:^(id _Nullable message, FlutterReply callback) { + NSArray *args = message; + NSString *arg_secretKey = GetNullableObjectAtIndex(args, 0); + NSString *arg_oneTimePassword = GetNullableObjectAtIndex(args, 1); + [api getAssertionForEnrollmentSecretKey:arg_secretKey + oneTimePassword:arg_oneTimePassword + completion:^(NSString *_Nullable output, + FlutterError *_Nullable error) { + callback(wrapResult(output, error)); + }]; + }]; + } else { + [channel setMessageHandler:nil]; + } + } + { + FlutterBasicMessageChannel *channel = [[FlutterBasicMessageChannel alloc] + initWithName:[NSString + stringWithFormat:@"%@%@", + @"dev.flutter.pigeon.firebase_auth_platform_interface." + @"MultiFactorTotpHostApi.getAssertionForSignIn", + messageChannelSuffix] + binaryMessenger:binaryMessenger + codec:nullGetFirebaseAuthMessagesCodec()]; + if (api) { + NSCAssert([api respondsToSelector: + @selector(getAssertionForSignInEnrollmentId:oneTimePassword:completion:)], + @"MultiFactorTotpHostApi api (%@) doesn't respond to " + @"@selector(getAssertionForSignInEnrollmentId:oneTimePassword:completion:)", + api); + [channel setMessageHandler:^(id _Nullable message, FlutterReply callback) { + NSArray *args = message; + NSString *arg_enrollmentId = GetNullableObjectAtIndex(args, 0); + NSString *arg_oneTimePassword = GetNullableObjectAtIndex(args, 1); + [api getAssertionForSignInEnrollmentId:arg_enrollmentId + oneTimePassword:arg_oneTimePassword + completion:^(NSString *_Nullable output, + FlutterError *_Nullable error) { + callback(wrapResult(output, error)); + }]; + }]; + } else { + [channel setMessageHandler:nil]; + } + } +} +void SetUpMultiFactorTotpSecretHostApi(id binaryMessenger, + NSObject *api) { + SetUpMultiFactorTotpSecretHostApiWithSuffix(binaryMessenger, api, @""); +} + +void SetUpMultiFactorTotpSecretHostApiWithSuffix(id binaryMessenger, + NSObject *api, + NSString *messageChannelSuffix) { + messageChannelSuffix = messageChannelSuffix.length > 0 + ? [NSString stringWithFormat:@".%@", messageChannelSuffix] + : @""; + { + FlutterBasicMessageChannel *channel = [[FlutterBasicMessageChannel alloc] + initWithName:[NSString + stringWithFormat:@"%@%@", + @"dev.flutter.pigeon.firebase_auth_platform_interface." + @"MultiFactorTotpSecretHostApi.generateQrCodeUrl", + messageChannelSuffix] + binaryMessenger:binaryMessenger + codec:nullGetFirebaseAuthMessagesCodec()]; + if (api) { + NSCAssert( + [api respondsToSelector:@selector( + generateQrCodeUrlSecretKey:accountName:issuer:completion:)], + @"MultiFactorTotpSecretHostApi api (%@) doesn't respond to " + @"@selector(generateQrCodeUrlSecretKey:accountName:issuer:completion:)", + api); + [channel setMessageHandler:^(id _Nullable message, FlutterReply callback) { + NSArray *args = message; + NSString *arg_secretKey = GetNullableObjectAtIndex(args, 0); + NSString *arg_accountName = GetNullableObjectAtIndex(args, 1); + NSString *arg_issuer = GetNullableObjectAtIndex(args, 2); + [api generateQrCodeUrlSecretKey:arg_secretKey + accountName:arg_accountName + issuer:arg_issuer + completion:^(NSString *_Nullable output, + FlutterError *_Nullable error) { + callback(wrapResult(output, error)); + }]; + }]; + } else { + [channel setMessageHandler:nil]; + } + } + { + FlutterBasicMessageChannel *channel = [[FlutterBasicMessageChannel alloc] + initWithName:[NSString + stringWithFormat:@"%@%@", + @"dev.flutter.pigeon.firebase_auth_platform_interface." + @"MultiFactorTotpSecretHostApi.openInOtpApp", + messageChannelSuffix] + binaryMessenger:binaryMessenger + codec:nullGetFirebaseAuthMessagesCodec()]; + if (api) { + NSCAssert([api respondsToSelector:@selector(openInOtpAppSecretKey:qrCodeUrl:completion:)], + @"MultiFactorTotpSecretHostApi api (%@) doesn't respond to " + @"@selector(openInOtpAppSecretKey:qrCodeUrl:completion:)", + api); + [channel setMessageHandler:^(id _Nullable message, FlutterReply callback) { + NSArray *args = message; + NSString *arg_secretKey = GetNullableObjectAtIndex(args, 0); + NSString *arg_qrCodeUrl = GetNullableObjectAtIndex(args, 1); + [api openInOtpAppSecretKey:arg_secretKey + qrCodeUrl:arg_qrCodeUrl + completion:^(FlutterError *_Nullable error) { + callback(wrapResult(nil, error)); + }]; + }]; + } else { + [channel setMessageHandler:nil]; + } + } +} +void SetUpGenerateInterfaces(id binaryMessenger, + NSObject *api) { + SetUpGenerateInterfacesWithSuffix(binaryMessenger, api, @""); +} + +void SetUpGenerateInterfacesWithSuffix(id binaryMessenger, + NSObject *api, + NSString *messageChannelSuffix) { + messageChannelSuffix = messageChannelSuffix.length > 0 + ? [NSString stringWithFormat:@".%@", messageChannelSuffix] + : @""; + { + FlutterBasicMessageChannel *channel = [[FlutterBasicMessageChannel alloc] + initWithName:[NSString stringWithFormat:@"%@%@", + @"dev.flutter.pigeon.firebase_auth_platform_" + @"interface.GenerateInterfaces.pigeonInterface", + messageChannelSuffix] + binaryMessenger:binaryMessenger + codec:nullGetFirebaseAuthMessagesCodec()]; + if (api) { + NSCAssert( + [api respondsToSelector:@selector(pigeonInterfaceInfo:error:)], + @"GenerateInterfaces api (%@) doesn't respond to @selector(pigeonInterfaceInfo:error:)", + api); + [channel setMessageHandler:^(id _Nullable message, FlutterReply callback) { + NSArray *args = message; + InternalMultiFactorInfo *arg_info = GetNullableObjectAtIndex(args, 0); + FlutterError *error; + [api pigeonInterfaceInfo:arg_info error:&error]; + callback(wrapResult(nil, error)); + }]; + } else { + [channel setMessageHandler:nil]; + } + } +} diff --git a/mih_ui/android/build/ios/SourcePackages/firebase_auth-6.5.4/ios/firebase_auth/Sources/firebase_auth/include/Private/FLTAuthStateChannelStreamHandler.h b/mih_ui/android/build/ios/SourcePackages/firebase_auth-6.5.4/ios/firebase_auth/Sources/firebase_auth/include/Private/FLTAuthStateChannelStreamHandler.h new file mode 100644 index 00000000..7b7efae7 --- /dev/null +++ b/mih_ui/android/build/ios/SourcePackages/firebase_auth-6.5.4/ios/firebase_auth/Sources/firebase_auth/include/Private/FLTAuthStateChannelStreamHandler.h @@ -0,0 +1,26 @@ +// Copyright 2021 The Chromium Authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +#import + +#if TARGET_OS_OSX +#import +#else +#import +#endif + +#import +#import "../Public/CustomPigeonHeader.h" + +@class FIRAuth; + +NS_ASSUME_NONNULL_BEGIN + +@interface FLTAuthStateChannelStreamHandler : NSObject + +- (instancetype)initWithAuth:(FIRAuth *)auth; + +@end + +NS_ASSUME_NONNULL_END diff --git a/mih_ui/android/build/ios/SourcePackages/firebase_auth-6.5.4/ios/firebase_auth/Sources/firebase_auth/include/Private/FLTIdTokenChannelStreamHandler.h b/mih_ui/android/build/ios/SourcePackages/firebase_auth-6.5.4/ios/firebase_auth/Sources/firebase_auth/include/Private/FLTIdTokenChannelStreamHandler.h new file mode 100644 index 00000000..c1660499 --- /dev/null +++ b/mih_ui/android/build/ios/SourcePackages/firebase_auth-6.5.4/ios/firebase_auth/Sources/firebase_auth/include/Private/FLTIdTokenChannelStreamHandler.h @@ -0,0 +1,27 @@ +// Copyright 2021 The Chromium Authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +#import + +#if TARGET_OS_OSX +#import +#else +#import +#endif + +#import "../Public/CustomPigeonHeader.h" + +#import + +@class FIRAuth; + +NS_ASSUME_NONNULL_BEGIN + +@interface FLTIdTokenChannelStreamHandler : NSObject + +- (instancetype)initWithAuth:(FIRAuth *)auth; + +@end + +NS_ASSUME_NONNULL_END diff --git a/mih_ui/android/build/ios/SourcePackages/firebase_auth-6.5.4/ios/firebase_auth/Sources/firebase_auth/include/Private/FLTPhoneNumberVerificationStreamHandler.h b/mih_ui/android/build/ios/SourcePackages/firebase_auth-6.5.4/ios/firebase_auth/Sources/firebase_auth/include/Private/FLTPhoneNumberVerificationStreamHandler.h new file mode 100644 index 00000000..53e5f28c --- /dev/null +++ b/mih_ui/android/build/ios/SourcePackages/firebase_auth-6.5.4/ios/firebase_auth/Sources/firebase_auth/include/Private/FLTPhoneNumberVerificationStreamHandler.h @@ -0,0 +1,36 @@ +// Copyright 2021 The Chromium Authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +#import + +#if TARGET_OS_OSX +#import +#else +#import +#endif + +#import "../Public/firebase_auth_messages.g.h" + +#import + +@class FIRAuth; +@class FIRMultiFactorSession; +@class FIRPhoneMultiFactorInfo; + +NS_ASSUME_NONNULL_BEGIN + +@interface FLTPhoneNumberVerificationStreamHandler : NSObject + +#if TARGET_OS_OSX +- (instancetype)initWithAuth:(FIRAuth *)auth arguments:(NSDictionary *)arguments; +#else +- (instancetype)initWithAuth:(FIRAuth *)auth + request:(InternalVerifyPhoneNumberRequest *)request + session:(FIRMultiFactorSession *)session + factorInfo:(FIRPhoneMultiFactorInfo *)factorInfo; +#endif + +@end + +NS_ASSUME_NONNULL_END diff --git a/mih_ui/android/build/ios/SourcePackages/firebase_auth-6.5.4/ios/firebase_auth/Sources/firebase_auth/include/Private/PigeonParser.h b/mih_ui/android/build/ios/SourcePackages/firebase_auth-6.5.4/ios/firebase_auth/Sources/firebase_auth/include/Private/PigeonParser.h new file mode 100644 index 00000000..b500fd2c --- /dev/null +++ b/mih_ui/android/build/ios/SourcePackages/firebase_auth-6.5.4/ios/firebase_auth/Sources/firebase_auth/include/Private/PigeonParser.h @@ -0,0 +1,33 @@ +/* + * Copyright 2023, the Chromium project authors. Please see the AUTHORS file + * for details. All rights reserved. Use of this source code is governed by a + * BSD-style license that can be found in the LICENSE file. + */ + +#import +#import "../Public/firebase_auth_messages.g.h" + +@class FIRAuthDataResult; +@class FIRUser; +@class FIRActionCodeSettings; +@class FIRAuthTokenResult; +@class FIRTOTPSecret; +@class FIRAuthCredential; + +@interface PigeonParser : NSObject + ++ (NSArray *_Nonnull)getManualList:(nonnull InternalUserDetails *)userDetails; ++ (InternalUserCredential *_Nullable) + getPigeonUserCredentialFromAuthResult:(nonnull FIRAuthDataResult *)authResult + authorizationCode:(nullable NSString *)authorizationCode; ++ (InternalUserDetails *_Nullable)getPigeonDetails:(nonnull FIRUser *)user; ++ (InternalUserInfo *_Nullable)getPigeonUserInfo:(nonnull FIRUser *)user; ++ (FIRActionCodeSettings *_Nullable)parseActionCodeSettings: + (nullable InternalActionCodeSettings *)settings; ++ (InternalUserCredential *_Nullable)getPigeonUserCredentialFromFIRUser:(nonnull FIRUser *)user; ++ (InternalIdTokenResult *_Nonnull)parseIdTokenResult:(nonnull FIRAuthTokenResult *)tokenResult; ++ (InternalTotpSecret *_Nonnull)getPigeonTotpSecret:(nonnull FIRTOTPSecret *)secret; ++ (InternalAuthCredential *_Nullable)getPigeonAuthCredential: + (FIRAuthCredential *_Nullable)authCredentialToken + token:(NSNumber *_Nullable)token; +@end diff --git a/mih_ui/android/build/ios/SourcePackages/firebase_auth-6.5.4/ios/firebase_auth/Sources/firebase_auth/include/Public/CustomPigeonHeader.h b/mih_ui/android/build/ios/SourcePackages/firebase_auth-6.5.4/ios/firebase_auth/Sources/firebase_auth/include/Public/CustomPigeonHeader.h new file mode 100644 index 00000000..d32a6b45 --- /dev/null +++ b/mih_ui/android/build/ios/SourcePackages/firebase_auth-6.5.4/ios/firebase_auth/Sources/firebase_auth/include/Public/CustomPigeonHeader.h @@ -0,0 +1,16 @@ +// Copyright 2021 The Chromium Authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. +#import "firebase_auth_messages.g.h" + +@interface InternalMultiFactorInfo (Map) +- (NSDictionary *)toList; +@end + +@interface InternalUserDetails (Map) +- (NSDictionary *)toList; +@end + +@interface InternalUserInfo (Map) +- (NSDictionary *)toList; +@end diff --git a/mih_ui/android/build/ios/SourcePackages/firebase_auth-6.5.4/ios/firebase_auth/Sources/firebase_auth/include/Public/FLTFirebaseAuthPlugin.h b/mih_ui/android/build/ios/SourcePackages/firebase_auth-6.5.4/ios/firebase_auth/Sources/firebase_auth/include/Public/FLTFirebaseAuthPlugin.h new file mode 100644 index 00000000..53e20eca --- /dev/null +++ b/mih_ui/android/build/ios/SourcePackages/firebase_auth-6.5.4/ios/firebase_auth/Sources/firebase_auth/include/Public/FLTFirebaseAuthPlugin.h @@ -0,0 +1,45 @@ +// Copyright 2020 The Chromium Authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +#import + +#if TARGET_OS_OSX +#import +#else +#import +#endif + +#import +#import +#if __has_include() +#import +#else +#import +#endif +#import "firebase_auth_messages.g.h" + +#if !TARGET_OS_OSX +@protocol FlutterSceneLifeCycleDelegate; +#endif + +@interface FLTFirebaseAuthPlugin + : FLTFirebasePlugin ) + , + FlutterSceneLifeCycleDelegate +#endif +#endif + > + ++ (FlutterError *)convertToFlutterError:(NSError *)error; +@end diff --git a/mih_ui/android/build/ios/SourcePackages/firebase_auth-6.5.4/ios/firebase_auth/Sources/firebase_auth/include/Public/firebase_auth_messages.g.h b/mih_ui/android/build/ios/SourcePackages/firebase_auth-6.5.4/ios/firebase_auth/Sources/firebase_auth/include/Public/firebase_auth_messages.g.h new file mode 100644 index 00000000..f83da7e3 --- /dev/null +++ b/mih_ui/android/build/ios/SourcePackages/firebase_auth-6.5.4/ios/firebase_auth/Sources/firebase_auth/include/Public/firebase_auth_messages.g.h @@ -0,0 +1,571 @@ +// Copyright 2023, the Chromium project authors. Please see the AUTHORS file +// for details. All rights reserved. Use of this source code is governed by a +// BSD-style license that can be found in the LICENSE file. +// Autogenerated from Pigeon (v26.3.4), do not edit directly. +// See also: https://pub.dev/packages/pigeon + +@import Foundation; + +@protocol FlutterBinaryMessenger; +@protocol FlutterMessageCodec; +@class FlutterError; +@class FlutterStandardTypedData; + +NS_ASSUME_NONNULL_BEGIN + +/// The type of operation that generated the action code from calling +/// [checkActionCode]. +typedef NS_ENUM(NSUInteger, ActionCodeInfoOperation) { + /// Unknown operation. + ActionCodeInfoOperationUnknown = 0, + /// Password reset code generated via [sendPasswordResetEmail]. + ActionCodeInfoOperationPasswordReset = 1, + /// Email verification code generated via [User.sendEmailVerification]. + ActionCodeInfoOperationVerifyEmail = 2, + /// Email change revocation code generated via [User.updateEmail]. + ActionCodeInfoOperationRecoverEmail = 3, + /// Email sign in code generated via [sendSignInLinkToEmail]. + ActionCodeInfoOperationEmailSignIn = 4, + /// Verify and change email code generated via [User.verifyBeforeUpdateEmail]. + ActionCodeInfoOperationVerifyAndChangeEmail = 5, + /// Action code for reverting second factor addition. + ActionCodeInfoOperationRevertSecondFactorAddition = 6, +}; + +/// Wrapper for ActionCodeInfoOperation to allow for nullability. +@interface ActionCodeInfoOperationBox : NSObject +@property(nonatomic, assign) ActionCodeInfoOperation value; +- (instancetype)initWithValue:(ActionCodeInfoOperation)value; +@end + +@class InternalMultiFactorSession; +@class InternalPhoneMultiFactorAssertion; +@class InternalMultiFactorInfo; +@class AuthPigeonFirebaseApp; +@class InternalActionCodeInfoData; +@class InternalActionCodeInfo; +@class InternalAdditionalUserInfo; +@class InternalAuthCredential; +@class InternalUserInfo; +@class InternalUserDetails; +@class InternalUserCredential; +@class InternalAuthCredentialInput; +@class InternalActionCodeSettings; +@class InternalFirebaseAuthSettings; +@class InternalSignInProvider; +@class InternalVerifyPhoneNumberRequest; +@class InternalIdTokenResult; +@class InternalUserProfile; +@class InternalTotpSecret; + +@interface InternalMultiFactorSession : NSObject +/// `init` unavailable to enforce nonnull fields, see the `make` class method. +- (instancetype)init NS_UNAVAILABLE; ++ (instancetype)makeWithId:(NSString *)id; +@property(nonatomic, copy) NSString *id; +@end + +@interface InternalPhoneMultiFactorAssertion : NSObject +/// `init` unavailable to enforce nonnull fields, see the `make` class method. +- (instancetype)init NS_UNAVAILABLE; ++ (instancetype)makeWithVerificationId:(NSString *)verificationId + verificationCode:(NSString *)verificationCode; +@property(nonatomic, copy) NSString *verificationId; +@property(nonatomic, copy) NSString *verificationCode; +@end + +@interface InternalMultiFactorInfo : NSObject +/// `init` unavailable to enforce nonnull fields, see the `make` class method. +- (instancetype)init NS_UNAVAILABLE; ++ (instancetype)makeWithDisplayName:(nullable NSString *)displayName + enrollmentTimestamp:(double)enrollmentTimestamp + factorId:(nullable NSString *)factorId + uid:(NSString *)uid + phoneNumber:(nullable NSString *)phoneNumber; +@property(nonatomic, copy, nullable) NSString *displayName; +@property(nonatomic, assign) double enrollmentTimestamp; +@property(nonatomic, copy, nullable) NSString *factorId; +@property(nonatomic, copy) NSString *uid; +@property(nonatomic, copy, nullable) NSString *phoneNumber; +@end + +@interface AuthPigeonFirebaseApp : NSObject +/// `init` unavailable to enforce nonnull fields, see the `make` class method. +- (instancetype)init NS_UNAVAILABLE; ++ (instancetype)makeWithAppName:(NSString *)appName + tenantId:(nullable NSString *)tenantId + customAuthDomain:(nullable NSString *)customAuthDomain; +@property(nonatomic, copy) NSString *appName; +@property(nonatomic, copy, nullable) NSString *tenantId; +@property(nonatomic, copy, nullable) NSString *customAuthDomain; +@end + +@interface InternalActionCodeInfoData : NSObject ++ (instancetype)makeWithEmail:(nullable NSString *)email + previousEmail:(nullable NSString *)previousEmail; +@property(nonatomic, copy, nullable) NSString *email; +@property(nonatomic, copy, nullable) NSString *previousEmail; +@end + +@interface InternalActionCodeInfo : NSObject +/// `init` unavailable to enforce nonnull fields, see the `make` class method. +- (instancetype)init NS_UNAVAILABLE; ++ (instancetype)makeWithOperation:(ActionCodeInfoOperation)operation + data:(InternalActionCodeInfoData *)data; +@property(nonatomic, assign) ActionCodeInfoOperation operation; +@property(nonatomic, strong) InternalActionCodeInfoData *data; +@end + +@interface InternalAdditionalUserInfo : NSObject +/// `init` unavailable to enforce nonnull fields, see the `make` class method. +- (instancetype)init NS_UNAVAILABLE; ++ (instancetype)makeWithIsNewUser:(BOOL)isNewUser + providerId:(nullable NSString *)providerId + username:(nullable NSString *)username + authorizationCode:(nullable NSString *)authorizationCode + profile:(nullable NSDictionary *)profile; +@property(nonatomic, assign) BOOL isNewUser; +@property(nonatomic, copy, nullable) NSString *providerId; +@property(nonatomic, copy, nullable) NSString *username; +@property(nonatomic, copy, nullable) NSString *authorizationCode; +@property(nonatomic, copy, nullable) NSDictionary *profile; +@end + +@interface InternalAuthCredential : NSObject +/// `init` unavailable to enforce nonnull fields, see the `make` class method. +- (instancetype)init NS_UNAVAILABLE; ++ (instancetype)makeWithProviderId:(NSString *)providerId + signInMethod:(NSString *)signInMethod + nativeId:(NSInteger)nativeId + accessToken:(nullable NSString *)accessToken; +@property(nonatomic, copy) NSString *providerId; +@property(nonatomic, copy) NSString *signInMethod; +@property(nonatomic, assign) NSInteger nativeId; +@property(nonatomic, copy, nullable) NSString *accessToken; +@end + +@interface InternalUserInfo : NSObject +/// `init` unavailable to enforce nonnull fields, see the `make` class method. +- (instancetype)init NS_UNAVAILABLE; ++ (instancetype)makeWithUid:(NSString *)uid + email:(nullable NSString *)email + displayName:(nullable NSString *)displayName + photoUrl:(nullable NSString *)photoUrl + phoneNumber:(nullable NSString *)phoneNumber + isAnonymous:(BOOL)isAnonymous + isEmailVerified:(BOOL)isEmailVerified + providerId:(nullable NSString *)providerId + tenantId:(nullable NSString *)tenantId + refreshToken:(nullable NSString *)refreshToken + creationTimestamp:(nullable NSNumber *)creationTimestamp + lastSignInTimestamp:(nullable NSNumber *)lastSignInTimestamp; +@property(nonatomic, copy) NSString *uid; +@property(nonatomic, copy, nullable) NSString *email; +@property(nonatomic, copy, nullable) NSString *displayName; +@property(nonatomic, copy, nullable) NSString *photoUrl; +@property(nonatomic, copy, nullable) NSString *phoneNumber; +@property(nonatomic, assign) BOOL isAnonymous; +@property(nonatomic, assign) BOOL isEmailVerified; +@property(nonatomic, copy, nullable) NSString *providerId; +@property(nonatomic, copy, nullable) NSString *tenantId; +@property(nonatomic, copy, nullable) NSString *refreshToken; +@property(nonatomic, strong, nullable) NSNumber *creationTimestamp; +@property(nonatomic, strong, nullable) NSNumber *lastSignInTimestamp; +@end + +@interface InternalUserDetails : NSObject +/// `init` unavailable to enforce nonnull fields, see the `make` class method. +- (instancetype)init NS_UNAVAILABLE; ++ (instancetype)makeWithUserInfo:(InternalUserInfo *)userInfo + providerData:(NSArray *> *)providerData; +@property(nonatomic, strong) InternalUserInfo *userInfo; +@property(nonatomic, copy) NSArray *> *providerData; +@end + +@interface InternalUserCredential : NSObject ++ (instancetype)makeWithUser:(nullable InternalUserDetails *)user + additionalUserInfo:(nullable InternalAdditionalUserInfo *)additionalUserInfo + credential:(nullable InternalAuthCredential *)credential; +@property(nonatomic, strong, nullable) InternalUserDetails *user; +@property(nonatomic, strong, nullable) InternalAdditionalUserInfo *additionalUserInfo; +@property(nonatomic, strong, nullable) InternalAuthCredential *credential; +@end + +@interface InternalAuthCredentialInput : NSObject +/// `init` unavailable to enforce nonnull fields, see the `make` class method. +- (instancetype)init NS_UNAVAILABLE; ++ (instancetype)makeWithProviderId:(NSString *)providerId + signInMethod:(NSString *)signInMethod + token:(nullable NSString *)token + accessToken:(nullable NSString *)accessToken; +@property(nonatomic, copy) NSString *providerId; +@property(nonatomic, copy) NSString *signInMethod; +@property(nonatomic, copy, nullable) NSString *token; +@property(nonatomic, copy, nullable) NSString *accessToken; +@end + +@interface InternalActionCodeSettings : NSObject +/// `init` unavailable to enforce nonnull fields, see the `make` class method. +- (instancetype)init NS_UNAVAILABLE; ++ (instancetype)makeWithUrl:(NSString *)url + dynamicLinkDomain:(nullable NSString *)dynamicLinkDomain + handleCodeInApp:(BOOL)handleCodeInApp + iOSBundleId:(nullable NSString *)iOSBundleId + androidPackageName:(nullable NSString *)androidPackageName + androidInstallApp:(BOOL)androidInstallApp + androidMinimumVersion:(nullable NSString *)androidMinimumVersion + linkDomain:(nullable NSString *)linkDomain; +@property(nonatomic, copy) NSString *url; +@property(nonatomic, copy, nullable) NSString *dynamicLinkDomain; +@property(nonatomic, assign) BOOL handleCodeInApp; +@property(nonatomic, copy, nullable) NSString *iOSBundleId; +@property(nonatomic, copy, nullable) NSString *androidPackageName; +@property(nonatomic, assign) BOOL androidInstallApp; +@property(nonatomic, copy, nullable) NSString *androidMinimumVersion; +@property(nonatomic, copy, nullable) NSString *linkDomain; +@end + +@interface InternalFirebaseAuthSettings : NSObject +/// `init` unavailable to enforce nonnull fields, see the `make` class method. +- (instancetype)init NS_UNAVAILABLE; ++ (instancetype)makeWithAppVerificationDisabledForTesting:(BOOL)appVerificationDisabledForTesting + userAccessGroup:(nullable NSString *)userAccessGroup + phoneNumber:(nullable NSString *)phoneNumber + smsCode:(nullable NSString *)smsCode + forceRecaptchaFlow:(nullable NSNumber *)forceRecaptchaFlow; +@property(nonatomic, assign) BOOL appVerificationDisabledForTesting; +@property(nonatomic, copy, nullable) NSString *userAccessGroup; +@property(nonatomic, copy, nullable) NSString *phoneNumber; +@property(nonatomic, copy, nullable) NSString *smsCode; +@property(nonatomic, strong, nullable) NSNumber *forceRecaptchaFlow; +@end + +@interface InternalSignInProvider : NSObject +/// `init` unavailable to enforce nonnull fields, see the `make` class method. +- (instancetype)init NS_UNAVAILABLE; ++ (instancetype)makeWithProviderId:(NSString *)providerId + scopes:(nullable NSArray *)scopes + customParameters: + (nullable NSDictionary *)customParameters; +@property(nonatomic, copy) NSString *providerId; +@property(nonatomic, copy, nullable) NSArray *scopes; +@property(nonatomic, copy, nullable) NSDictionary *customParameters; +@end + +@interface InternalVerifyPhoneNumberRequest : NSObject +/// `init` unavailable to enforce nonnull fields, see the `make` class method. +- (instancetype)init NS_UNAVAILABLE; ++ (instancetype)makeWithPhoneNumber:(nullable NSString *)phoneNumber + timeout:(NSInteger)timeout + forceResendingToken:(nullable NSNumber *)forceResendingToken + autoRetrievedSmsCodeForTesting:(nullable NSString *)autoRetrievedSmsCodeForTesting + multiFactorInfoId:(nullable NSString *)multiFactorInfoId + multiFactorSessionId:(nullable NSString *)multiFactorSessionId; +@property(nonatomic, copy, nullable) NSString *phoneNumber; +@property(nonatomic, assign) NSInteger timeout; +@property(nonatomic, strong, nullable) NSNumber *forceResendingToken; +@property(nonatomic, copy, nullable) NSString *autoRetrievedSmsCodeForTesting; +@property(nonatomic, copy, nullable) NSString *multiFactorInfoId; +@property(nonatomic, copy, nullable) NSString *multiFactorSessionId; +@end + +@interface InternalIdTokenResult : NSObject ++ (instancetype)makeWithToken:(nullable NSString *)token + expirationTimestamp:(nullable NSNumber *)expirationTimestamp + authTimestamp:(nullable NSNumber *)authTimestamp + issuedAtTimestamp:(nullable NSNumber *)issuedAtTimestamp + signInProvider:(nullable NSString *)signInProvider + claims:(nullable NSDictionary *)claims + signInSecondFactor:(nullable NSString *)signInSecondFactor; +@property(nonatomic, copy, nullable) NSString *token; +@property(nonatomic, strong, nullable) NSNumber *expirationTimestamp; +@property(nonatomic, strong, nullable) NSNumber *authTimestamp; +@property(nonatomic, strong, nullable) NSNumber *issuedAtTimestamp; +@property(nonatomic, copy, nullable) NSString *signInProvider; +@property(nonatomic, copy, nullable) NSDictionary *claims; +@property(nonatomic, copy, nullable) NSString *signInSecondFactor; +@end + +@interface InternalUserProfile : NSObject +/// `init` unavailable to enforce nonnull fields, see the `make` class method. +- (instancetype)init NS_UNAVAILABLE; ++ (instancetype)makeWithDisplayName:(nullable NSString *)displayName + photoUrl:(nullable NSString *)photoUrl + displayNameChanged:(BOOL)displayNameChanged + photoUrlChanged:(BOOL)photoUrlChanged; +@property(nonatomic, copy, nullable) NSString *displayName; +@property(nonatomic, copy, nullable) NSString *photoUrl; +@property(nonatomic, assign) BOOL displayNameChanged; +@property(nonatomic, assign) BOOL photoUrlChanged; +@end + +@interface InternalTotpSecret : NSObject +/// `init` unavailable to enforce nonnull fields, see the `make` class method. +- (instancetype)init NS_UNAVAILABLE; ++ (instancetype)makeWithCodeIntervalSeconds:(nullable NSNumber *)codeIntervalSeconds + codeLength:(nullable NSNumber *)codeLength + enrollmentCompletionDeadline:(nullable NSNumber *)enrollmentCompletionDeadline + hashingAlgorithm:(nullable NSString *)hashingAlgorithm + secretKey:(NSString *)secretKey; +@property(nonatomic, strong, nullable) NSNumber *codeIntervalSeconds; +@property(nonatomic, strong, nullable) NSNumber *codeLength; +@property(nonatomic, strong, nullable) NSNumber *enrollmentCompletionDeadline; +@property(nonatomic, copy, nullable) NSString *hashingAlgorithm; +@property(nonatomic, copy) NSString *secretKey; +@end + +/// The codec used by all APIs. +NSObject *nullGetFirebaseAuthMessagesCodec(void); + +@protocol FirebaseAuthHostApi +- (void)registerIdTokenListenerApp:(AuthPigeonFirebaseApp *)app + completion: + (void (^)(NSString *_Nullable, FlutterError *_Nullable))completion; +- (void)registerAuthStateListenerApp:(AuthPigeonFirebaseApp *)app + completion: + (void (^)(NSString *_Nullable, FlutterError *_Nullable))completion; +- (void)useEmulatorApp:(AuthPigeonFirebaseApp *)app + host:(NSString *)host + port:(NSInteger)port + completion:(void (^)(FlutterError *_Nullable))completion; +- (void)applyActionCodeApp:(AuthPigeonFirebaseApp *)app + code:(NSString *)code + completion:(void (^)(FlutterError *_Nullable))completion; +- (void)checkActionCodeApp:(AuthPigeonFirebaseApp *)app + code:(NSString *)code + completion:(void (^)(InternalActionCodeInfo *_Nullable, + FlutterError *_Nullable))completion; +- (void)confirmPasswordResetApp:(AuthPigeonFirebaseApp *)app + code:(NSString *)code + newPassword:(NSString *)newPassword + completion:(void (^)(FlutterError *_Nullable))completion; +- (void)createUserWithEmailAndPasswordApp:(AuthPigeonFirebaseApp *)app + email:(NSString *)email + password:(NSString *)password + completion:(void (^)(InternalUserCredential *_Nullable, + FlutterError *_Nullable))completion; +- (void)signInAnonymouslyApp:(AuthPigeonFirebaseApp *)app + completion:(void (^)(InternalUserCredential *_Nullable, + FlutterError *_Nullable))completion; +- (void)signInWithCredentialApp:(AuthPigeonFirebaseApp *)app + input:(NSDictionary *)input + completion:(void (^)(InternalUserCredential *_Nullable, + FlutterError *_Nullable))completion; +- (void)signInWithCustomTokenApp:(AuthPigeonFirebaseApp *)app + token:(NSString *)token + completion:(void (^)(InternalUserCredential *_Nullable, + FlutterError *_Nullable))completion; +- (void)signInWithEmailAndPasswordApp:(AuthPigeonFirebaseApp *)app + email:(NSString *)email + password:(NSString *)password + completion:(void (^)(InternalUserCredential *_Nullable, + FlutterError *_Nullable))completion; +- (void)signInWithEmailLinkApp:(AuthPigeonFirebaseApp *)app + email:(NSString *)email + emailLink:(NSString *)emailLink + completion:(void (^)(InternalUserCredential *_Nullable, + FlutterError *_Nullable))completion; +- (void)signInWithProviderApp:(AuthPigeonFirebaseApp *)app + signInProvider:(InternalSignInProvider *)signInProvider + completion:(void (^)(InternalUserCredential *_Nullable, + FlutterError *_Nullable))completion; +- (void)signOutApp:(AuthPigeonFirebaseApp *)app + completion:(void (^)(FlutterError *_Nullable))completion; +- (void)fetchSignInMethodsForEmailApp:(AuthPigeonFirebaseApp *)app + email:(NSString *)email + completion:(void (^)(NSArray *_Nullable, + FlutterError *_Nullable))completion; +- (void)sendPasswordResetEmailApp:(AuthPigeonFirebaseApp *)app + email:(NSString *)email + actionCodeSettings:(nullable InternalActionCodeSettings *)actionCodeSettings + completion:(void (^)(FlutterError *_Nullable))completion; +- (void)sendSignInLinkToEmailApp:(AuthPigeonFirebaseApp *)app + email:(NSString *)email + actionCodeSettings:(InternalActionCodeSettings *)actionCodeSettings + completion:(void (^)(FlutterError *_Nullable))completion; +- (void)setLanguageCodeApp:(AuthPigeonFirebaseApp *)app + languageCode:(nullable NSString *)languageCode + completion:(void (^)(NSString *_Nullable, FlutterError *_Nullable))completion; +- (void)setSettingsApp:(AuthPigeonFirebaseApp *)app + settings:(InternalFirebaseAuthSettings *)settings + completion:(void (^)(FlutterError *_Nullable))completion; +- (void)verifyPasswordResetCodeApp:(AuthPigeonFirebaseApp *)app + code:(NSString *)code + completion: + (void (^)(NSString *_Nullable, FlutterError *_Nullable))completion; +- (void)verifyPhoneNumberApp:(AuthPigeonFirebaseApp *)app + request:(InternalVerifyPhoneNumberRequest *)request + completion:(void (^)(NSString *_Nullable, FlutterError *_Nullable))completion; +- (void)revokeTokenWithAuthorizationCodeApp:(AuthPigeonFirebaseApp *)app + authorizationCode:(NSString *)authorizationCode + completion:(void (^)(FlutterError *_Nullable))completion; +- (void)revokeAccessTokenApp:(AuthPigeonFirebaseApp *)app + accessToken:(NSString *)accessToken + completion:(void (^)(FlutterError *_Nullable))completion; +- (void)initializeRecaptchaConfigApp:(AuthPigeonFirebaseApp *)app + completion:(void (^)(FlutterError *_Nullable))completion; +@end + +extern void SetUpFirebaseAuthHostApi(id binaryMessenger, + NSObject *_Nullable api); + +extern void SetUpFirebaseAuthHostApiWithSuffix(id binaryMessenger, + NSObject *_Nullable api, + NSString *messageChannelSuffix); + +@protocol FirebaseAuthUserHostApi +- (void)deleteApp:(AuthPigeonFirebaseApp *)app + completion:(void (^)(FlutterError *_Nullable))completion; +- (void)getIdTokenApp:(AuthPigeonFirebaseApp *)app + forceRefresh:(BOOL)forceRefresh + completion: + (void (^)(InternalIdTokenResult *_Nullable, FlutterError *_Nullable))completion; +- (void)linkWithCredentialApp:(AuthPigeonFirebaseApp *)app + input:(NSDictionary *)input + completion:(void (^)(InternalUserCredential *_Nullable, + FlutterError *_Nullable))completion; +- (void)linkWithProviderApp:(AuthPigeonFirebaseApp *)app + signInProvider:(InternalSignInProvider *)signInProvider + completion:(void (^)(InternalUserCredential *_Nullable, + FlutterError *_Nullable))completion; +- (void)reauthenticateWithCredentialApp:(AuthPigeonFirebaseApp *)app + input:(NSDictionary *)input + completion:(void (^)(InternalUserCredential *_Nullable, + FlutterError *_Nullable))completion; +- (void)reauthenticateWithProviderApp:(AuthPigeonFirebaseApp *)app + signInProvider:(InternalSignInProvider *)signInProvider + completion:(void (^)(InternalUserCredential *_Nullable, + FlutterError *_Nullable))completion; +- (void)reloadApp:(AuthPigeonFirebaseApp *)app + completion:(void (^)(InternalUserDetails *_Nullable, FlutterError *_Nullable))completion; +- (void)sendEmailVerificationApp:(AuthPigeonFirebaseApp *)app + actionCodeSettings:(nullable InternalActionCodeSettings *)actionCodeSettings + completion:(void (^)(FlutterError *_Nullable))completion; +- (void)unlinkApp:(AuthPigeonFirebaseApp *)app + providerId:(NSString *)providerId + completion:(void (^)(InternalUserCredential *_Nullable, FlutterError *_Nullable))completion; +- (void)updateEmailApp:(AuthPigeonFirebaseApp *)app + newEmail:(NSString *)newEmail + completion: + (void (^)(InternalUserDetails *_Nullable, FlutterError *_Nullable))completion; +- (void)updatePasswordApp:(AuthPigeonFirebaseApp *)app + newPassword:(NSString *)newPassword + completion: + (void (^)(InternalUserDetails *_Nullable, FlutterError *_Nullable))completion; +- (void)updatePhoneNumberApp:(AuthPigeonFirebaseApp *)app + input:(NSDictionary *)input + completion: + (void (^)(InternalUserDetails *_Nullable, FlutterError *_Nullable))completion; +- (void)updateProfileApp:(AuthPigeonFirebaseApp *)app + profile:(InternalUserProfile *)profile + completion: + (void (^)(InternalUserDetails *_Nullable, FlutterError *_Nullable))completion; +- (void)verifyBeforeUpdateEmailApp:(AuthPigeonFirebaseApp *)app + newEmail:(NSString *)newEmail + actionCodeSettings:(nullable InternalActionCodeSettings *)actionCodeSettings + completion:(void (^)(FlutterError *_Nullable))completion; +@end + +extern void SetUpFirebaseAuthUserHostApi(id binaryMessenger, + NSObject *_Nullable api); + +extern void SetUpFirebaseAuthUserHostApiWithSuffix(id binaryMessenger, + NSObject *_Nullable api, + NSString *messageChannelSuffix); + +@protocol MultiFactorUserHostApi +- (void)enrollPhoneApp:(AuthPigeonFirebaseApp *)app + assertion:(InternalPhoneMultiFactorAssertion *)assertion + displayName:(nullable NSString *)displayName + completion:(void (^)(FlutterError *_Nullable))completion; +- (void)enrollTotpApp:(AuthPigeonFirebaseApp *)app + assertionId:(NSString *)assertionId + displayName:(nullable NSString *)displayName + completion:(void (^)(FlutterError *_Nullable))completion; +- (void)getSessionApp:(AuthPigeonFirebaseApp *)app + completion: + (void (^)(InternalMultiFactorSession *_Nullable, FlutterError *_Nullable))completion; +- (void)unenrollApp:(AuthPigeonFirebaseApp *)app + factorUid:(NSString *)factorUid + completion:(void (^)(FlutterError *_Nullable))completion; +- (void)getEnrolledFactorsApp:(AuthPigeonFirebaseApp *)app + completion:(void (^)(NSArray *_Nullable, + FlutterError *_Nullable))completion; +@end + +extern void SetUpMultiFactorUserHostApi(id binaryMessenger, + NSObject *_Nullable api); + +extern void SetUpMultiFactorUserHostApiWithSuffix(id binaryMessenger, + NSObject *_Nullable api, + NSString *messageChannelSuffix); + +@protocol MultiFactoResolverHostApi +- (void)resolveSignInResolverId:(NSString *)resolverId + assertion:(nullable InternalPhoneMultiFactorAssertion *)assertion + totpAssertionId:(nullable NSString *)totpAssertionId + completion:(void (^)(InternalUserCredential *_Nullable, + FlutterError *_Nullable))completion; +@end + +extern void SetUpMultiFactoResolverHostApi(id binaryMessenger, + NSObject *_Nullable api); + +extern void SetUpMultiFactoResolverHostApiWithSuffix( + id binaryMessenger, NSObject *_Nullable api, + NSString *messageChannelSuffix); + +@protocol MultiFactorTotpHostApi +- (void)generateSecretSessionId:(NSString *)sessionId + completion:(void (^)(InternalTotpSecret *_Nullable, + FlutterError *_Nullable))completion; +- (void)getAssertionForEnrollmentSecretKey:(NSString *)secretKey + oneTimePassword:(NSString *)oneTimePassword + completion:(void (^)(NSString *_Nullable, + FlutterError *_Nullable))completion; +- (void)getAssertionForSignInEnrollmentId:(NSString *)enrollmentId + oneTimePassword:(NSString *)oneTimePassword + completion:(void (^)(NSString *_Nullable, + FlutterError *_Nullable))completion; +@end + +extern void SetUpMultiFactorTotpHostApi(id binaryMessenger, + NSObject *_Nullable api); + +extern void SetUpMultiFactorTotpHostApiWithSuffix(id binaryMessenger, + NSObject *_Nullable api, + NSString *messageChannelSuffix); + +@protocol MultiFactorTotpSecretHostApi +- (void)generateQrCodeUrlSecretKey:(NSString *)secretKey + accountName:(nullable NSString *)accountName + issuer:(nullable NSString *)issuer + completion: + (void (^)(NSString *_Nullable, FlutterError *_Nullable))completion; +- (void)openInOtpAppSecretKey:(NSString *)secretKey + qrCodeUrl:(NSString *)qrCodeUrl + completion:(void (^)(FlutterError *_Nullable))completion; +@end + +extern void SetUpMultiFactorTotpSecretHostApi( + id binaryMessenger, + NSObject *_Nullable api); + +extern void SetUpMultiFactorTotpSecretHostApiWithSuffix( + id binaryMessenger, + NSObject *_Nullable api, NSString *messageChannelSuffix); + +/// Only used to generate the object interface that are use outside of the Pigeon interface +@protocol GenerateInterfaces +- (void)pigeonInterfaceInfo:(InternalMultiFactorInfo *)info + error:(FlutterError *_Nullable *_Nonnull)error; +@end + +extern void SetUpGenerateInterfaces(id binaryMessenger, + NSObject *_Nullable api); + +extern void SetUpGenerateInterfacesWithSuffix(id binaryMessenger, + NSObject *_Nullable api, + NSString *messageChannelSuffix); + +NS_ASSUME_NONNULL_END diff --git a/mih_ui/android/build/ios/SourcePackages/firebase_auth-6.5.4/lib/firebase_auth.dart b/mih_ui/android/build/ios/SourcePackages/firebase_auth-6.5.4/lib/firebase_auth.dart new file mode 100755 index 00000000..61e60561 --- /dev/null +++ b/mih_ui/android/build/ios/SourcePackages/firebase_auth-6.5.4/lib/firebase_auth.dart @@ -0,0 +1,72 @@ +// Copyright 2019 The Chromium Authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +import 'dart:async'; + +import 'package:firebase_auth_platform_interface/firebase_auth_platform_interface.dart'; +import 'package:firebase_core/firebase_core.dart'; +import 'package:firebase_core_platform_interface/firebase_core_platform_interface.dart'; +import 'package:flutter/foundation.dart'; + +export 'package:firebase_auth_platform_interface/firebase_auth_platform_interface.dart' + show + FirebaseAuthException, + MultiFactorInfo, + MultiFactorSession, + PhoneMultiFactorInfo, + TotpMultiFactorInfo, + IdTokenResult, + UserMetadata, + UserInfo, + ActionCodeInfo, + ActionCodeSettings, + AdditionalUserInfo, + ActionCodeInfoOperation, + Persistence, + PhoneVerificationCompleted, + PhoneVerificationFailed, + PhoneCodeSent, + PhoneCodeAutoRetrievalTimeout, + AuthCredential, + AuthProvider, + AppleAuthProvider, + AppleFullPersonName, + AppleAuthCredential, + EmailAuthProvider, + EmailAuthCredential, + FacebookAuthProvider, + FacebookAuthCredential, + GameCenterAuthProvider, + GameCenterAuthCredential, + PlayGamesAuthProvider, + PlayGamesAuthCredential, + GithubAuthProvider, + GithubAuthCredential, + GoogleAuthProvider, + GoogleAuthCredential, + YahooAuthProvider, + YahooAuthCredential, + MicrosoftAuthProvider, + OAuthProvider, + OAuthCredential, + PhoneAuthProvider, + PhoneAuthCredential, + SAMLAuthProvider, + TwitterAuthProvider, + TwitterAuthCredential, + RecaptchaVerifierOnSuccess, + RecaptchaVerifierOnExpired, + RecaptchaVerifierOnError, + RecaptchaVerifierSize, + RecaptchaVerifierTheme, + PasswordValidationStatus; +export 'package:firebase_core_platform_interface/firebase_core_platform_interface.dart' + show FirebaseException; + +part 'src/confirmation_result.dart'; +part 'src/firebase_auth.dart'; +part 'src/multi_factor.dart'; +part 'src/recaptcha_verifier.dart'; +part 'src/user.dart'; +part 'src/user_credential.dart'; diff --git a/mih_ui/android/build/ios/SourcePackages/firebase_auth-6.5.4/lib/src/confirmation_result.dart b/mih_ui/android/build/ios/SourcePackages/firebase_auth-6.5.4/lib/src/confirmation_result.dart new file mode 100644 index 00000000..c039cd79 --- /dev/null +++ b/mih_ui/android/build/ios/SourcePackages/firebase_auth-6.5.4/lib/src/confirmation_result.dart @@ -0,0 +1,36 @@ +// ignore_for_file: require_trailing_commas +// Copyright 2020 The Chromium Authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +part of '../firebase_auth.dart'; + +/// A result from a phone number sign-in, link, or reauthenticate call. +/// +/// This class is only usable on web based platforms. +class ConfirmationResult { + ConfirmationResultPlatform _delegate; + + final FirebaseAuth _auth; + + ConfirmationResult._(this._auth, this._delegate) { + ConfirmationResultPlatform.verify(_delegate); + } + + /// The phone number authentication operation's verification ID. + /// + /// This can be used along with the verification code to initialize a phone + /// auth credential. + String get verificationId { + return _delegate.verificationId; + } + + /// Finishes a phone number sign-in, link, or reauthentication, given the code + /// that was sent to the user's mobile device. + Future confirm(String verificationCode) async { + return UserCredential._( + _auth, + await _delegate.confirm(verificationCode), + ); + } +} diff --git a/mih_ui/android/build/ios/SourcePackages/firebase_auth-6.5.4/lib/src/firebase_auth.dart b/mih_ui/android/build/ios/SourcePackages/firebase_auth-6.5.4/lib/src/firebase_auth.dart new file mode 100644 index 00000000..2f4ebe42 --- /dev/null +++ b/mih_ui/android/build/ios/SourcePackages/firebase_auth-6.5.4/lib/src/firebase_auth.dart @@ -0,0 +1,893 @@ +// ignore_for_file: require_trailing_commas +// Copyright 2017 The Chromium Authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +part of '../firebase_auth.dart'; + +/// The entry point of the Firebase Authentication SDK. +class FirebaseAuth extends FirebasePluginPlatform implements FirebaseService { + // Cached instances of [FirebaseAuth]. + static Map _firebaseAuthInstances = {}; + + // Cached and lazily loaded instance of [FirebaseAuthPlatform] to avoid + // creating a [MethodChannelFirebaseAuth] when not needed or creating an + // instance with the default app before a user specifies an app. + FirebaseAuthPlatform? _delegatePackingProperty; + + /// Returns the underlying delegate implementation. + /// + /// If called and no [_delegatePackingProperty] exists, it will first be + /// created and assigned before returning the delegate. + FirebaseAuthPlatform get _delegate { + _delegatePackingProperty ??= FirebaseAuthPlatform.instanceFor( + app: app, + pluginConstants: pluginConstants, + ); + return _delegatePackingProperty!; + } + + /// The [FirebaseApp] for this current Auth instance. + FirebaseApp app; + + FirebaseAuth._({required this.app}) + : super(app.name, 'plugins.flutter.io/firebase_auth'); + + /// Returns an instance using the default [FirebaseApp]. + static FirebaseAuth get instance { + FirebaseApp defaultAppInstance = Firebase.app(); + + return FirebaseAuth.instanceFor(app: defaultAppInstance); + } + + /// Returns an instance using a specified [FirebaseApp]. + factory FirebaseAuth.instanceFor({ + required FirebaseApp app, + }) { + return _firebaseAuthInstances.putIfAbsent(app.name, () { + final instance = FirebaseAuth._(app: app); + app.registerService( + instance, + dispose: (auth) => auth._dispose(), + ); + return instance; + }); + } + + Future _dispose() async { + _firebaseAuthInstances.remove(app.name); + final delegate = _delegatePackingProperty; + _delegatePackingProperty = null; + await delegate?.dispose(); + } + + /// Returns the current [User] if they are currently signed-in, or `null` if + /// not. + /// + /// This getter only provides a snapshot of user state. Applications that need + /// to react to changes in user state should instead use [authStateChanges], + /// [idTokenChanges] or [userChanges] to subscribe to updates. + User? get currentUser { + if (_delegate.currentUser != null) { + return User._(this, _delegate.currentUser!); + } + + return null; + } + + /// The current Auth instance's language code. + /// + /// See [setLanguageCode] to update the language code. + String? get languageCode { + return _delegate.languageCode; + } + + /// Changes this instance to point to an Auth emulator running locally. + /// + /// Set the [host] of the local emulator, such as "localhost" + /// Set the [port] of the local emulator, such as "9099" (port 9099 is default for auth package) + /// + /// Note: Must be called immediately, prior to accessing auth methods. + /// Do not use with production credentials as emulator traffic is not encrypted. + Future useAuthEmulator(String host, int port, + {bool automaticHostMapping = true}) async { + String mappedHost = automaticHostMapping ? getMappedHost(host) : host; + + await _delegate.useAuthEmulator(mappedHost, port); + } + + /// The current Auth instance's tenant ID. + String? get tenantId { + return _delegate.tenantId; + } + + /// Set the current Auth instance's tenant ID. + /// + /// When you set the tenant ID of an Auth instance, all future sign-in/sign-up + /// operations will pass this tenant ID and sign in or sign up users to the + /// specified tenant project. When set to null, users are signed in to the + /// parent project. By default, this is set to `null`. + set tenantId(String? tenantId) { + _delegate.tenantId = tenantId; + } + + /// The current Auth instance's custom auth domain. + /// The auth domain used to handle redirects from OAuth provides, for example + /// "my-awesome-app.firebaseapp.com". By default, this is set to `null` and + /// default auth domain is used. + /// + /// If not `null`, this value will supersede `authDomain` property set in `initializeApp`. + String? get customAuthDomain { + return _delegate.customAuthDomain; + } + + /// Set the current Auth instance's auth domain for apple and android platforms. + /// The auth domain used to handle redirects from OAuth provides, for example + /// "my-awesome-app.firebaseapp.com". By default, this is set to `null` and + /// default auth domain is used. + /// + /// If not `null`, this value will supersede `authDomain` property set in `initializeApp`. + set customAuthDomain(String? customAuthDomain) { + // Web and windows do not support setting custom auth domains on the auth instance + if (defaultTargetPlatform == TargetPlatform.windows || kIsWeb) { + final message = defaultTargetPlatform == TargetPlatform.windows + ? 'Cannot set custom auth domain on a FirebaseAuth instance for windows platform' + : 'Cannot set custom auth domain on a FirebaseAuth instance. Set the custom auth domain on `FirebaseOptions.authDomain` instance and pass into `Firebase.initializeApp()` instead.'; + throw UnimplementedError( + message, + ); + } + _delegate.customAuthDomain = customAuthDomain; + } + + /// Applies a verification code sent to the user by email or other out-of-band + /// mechanism. + /// + /// A [FirebaseAuthException] maybe thrown with the following error code: + /// - **expired-action-code**: + /// - Thrown if the action code has expired. + /// - **invalid-action-code**: + /// - Thrown if the action code is invalid. This can happen if the code is + /// malformed or has already been used. + /// - **user-disabled**: + /// - Thrown if the user corresponding to the given action code has been + /// disabled. + /// - **user-not-found**: + /// - Thrown if there is no user corresponding to the action code. This may + /// have happened if the user was deleted between when the action code was + /// issued and when this method was called. + Future applyActionCode(String code) async { + await _delegate.applyActionCode(code); + } + + /// Checks a verification code sent to the user by email or other out-of-band + /// mechanism. + /// + /// Returns [ActionCodeInfo] about the code. + /// + /// A [FirebaseAuthException] maybe thrown with the following error code: + /// - **expired-action-code**: + /// - Thrown if the action code has expired. + /// - **invalid-action-code**: + /// - Thrown if the action code is invalid. This can happen if the code is + /// malformed or has already been used. + /// - **user-disabled**: + /// - Thrown if the user corresponding to the given action code has been + /// disabled. + /// - **user-not-found**: + /// - Thrown if there is no user corresponding to the action code. This may + /// have happened if the user was deleted between when the action code was + /// issued and when this method was called. + Future checkActionCode(String code) { + return _delegate.checkActionCode(code); + } + + /// Completes the password reset process, given a confirmation code and new + /// password. + /// + /// A [FirebaseAuthException] maybe thrown with the following error code: + /// - **expired-action-code**: + /// - Thrown if the action code has expired. + /// - **invalid-action-code**: + /// - Thrown if the action code is invalid. This can happen if the code is + /// malformed or has already been used. + /// - **user-disabled**: + /// - Thrown if the user corresponding to the given action code has been + /// disabled. + /// - **user-not-found**: + /// - Thrown if there is no user corresponding to the action code. This may + /// have happened if the user was deleted between when the action code was + /// issued and when this method was called. + /// - **weak-password**: + /// - Thrown if the new password is not strong enough. + Future confirmPasswordReset({ + required String code, + required String newPassword, + }) async { + await _delegate.confirmPasswordReset(code, newPassword); + } + + /// Tries to create a new user account with the given email address and + /// password. + /// + /// A [FirebaseAuthException] maybe thrown with the following error code: + /// - **email-already-in-use**: + /// - Thrown if there already exists an account with the given email address. + /// - **invalid-email**: + /// - Thrown if the email address is not valid. + /// - **operation-not-allowed**: + /// - Thrown if email/password accounts are not enabled. Enable + /// email/password accounts in the Firebase Console, under the Auth tab. + /// - **weak-password**: + /// - Thrown if the password is not strong enough. + /// - **too-many-requests**: + /// - Thrown if the user sent too many requests at the same time, for security + /// the api will not allow too many attempts at the same time, user will have + /// to wait for some time + /// - **user-token-expired**: + /// - Thrown if the user is no longer authenticated since his refresh token + /// has been expired + /// - **network-request-failed**: + /// - Thrown if there was a network request error, for example the user + /// doesn't have internet connection + /// - **operation-not-allowed**: + /// - Thrown if email/password accounts are not enabled. Enable + /// email/password accounts in the Firebase Console, under the Auth tab. + Future createUserWithEmailAndPassword({ + required String email, + required String password, + }) async { + return UserCredential._( + this, + await _delegate.createUserWithEmailAndPassword(email, password), + ); + } + + /// Returns a UserCredential from the redirect-based sign-in flow. + /// + /// If sign-in succeeded, returns the signed in user. If sign-in was + /// unsuccessful, fails with an error. If no redirect operation was called, + /// returns a [UserCredential] with a null User. + /// + /// This method is only support on web platforms. + Future getRedirectResult() async { + return UserCredential._(this, await _delegate.getRedirectResult()); + } + + /// Checks if an incoming link is a sign-in with email link. + bool isSignInWithEmailLink(String emailLink) { + return _delegate.isSignInWithEmailLink(emailLink); + } + + /// Internal helper which pipes internal [Stream] events onto + /// a users own Stream. + Stream _pipeStreamChanges(Stream stream) { + return stream.map((delegateUser) { + if (delegateUser == null) { + return null; + } + + return User._(this, delegateUser); + }).asBroadcastStream(onCancel: (sub) => sub.cancel()); + } + + /// Notifies about changes to the user's sign-in state (such as sign-in or + /// sign-out). + Stream authStateChanges() => + _pipeStreamChanges(_delegate.authStateChanges()); + + /// Notifies about changes to the user's sign-in state (such as sign-in or + /// sign-out) and also token refresh events. + Stream idTokenChanges() => + _pipeStreamChanges(_delegate.idTokenChanges()); + + /// Notifies about changes to any user updates. + /// + /// This is a superset of both [authStateChanges] and [idTokenChanges]. It + /// provides events on all user changes, such as when credentials are linked, + /// unlinked and when updates to the user profile are made. The purpose of + /// this Stream is for listening to realtime updates to the user state + /// (signed-in, signed-out, different user & token refresh) without + /// manually having to call [reload] and then rehydrating changes to your + /// application. + Stream userChanges() => _pipeStreamChanges(_delegate.userChanges()); + + /// Sends a password reset email to the given email address. + /// + /// To complete the password reset, call [confirmPasswordReset] with the code supplied + /// in the email sent to the user, along with the new password specified by the user. + /// + /// If email enumeration protection is enabled for the Firebase project, this + /// method may complete successfully even when the email does not correspond + /// to an existing user. + /// + /// May throw a [FirebaseAuthException] with the following error codes: + /// + /// - **auth/invalid-email**\ + /// Thrown if the email address is not valid. + /// - **auth/missing-android-pkg-name**\ + /// An Android package name must be provided if the Android app is required to be installed. + /// - **auth/missing-continue-uri**\ + /// A continue URL must be provided in the request. + /// - **auth/missing-ios-bundle-id**\ + /// An iOS Bundle ID must be provided if an App Store ID is provided. + /// - **auth/invalid-continue-uri**\ + /// The continue URL provided in the request is invalid. + /// - **auth/unauthorized-continue-uri**\ + /// The domain of the continue URL is not whitelisted. Whitelist the domain in the Firebase console. + /// - **auth/user-not-found**\ + /// Thrown if there is no user corresponding to the email address. Note: This + /// exception is not thrown when email enumeration protection is enabled. + Future sendPasswordResetEmail({ + required String email, + ActionCodeSettings? actionCodeSettings, + }) { + return _delegate.sendPasswordResetEmail(email, actionCodeSettings); + } + + /// Sends a sign in with email link to provided email address. + /// + /// To complete the password reset, call [confirmPasswordReset] with the code + /// supplied in the email sent to the user, along with the new password + /// specified by the user. + /// + /// The [handleCodeInApp] of [actionCodeSettings] must be set to `true` + /// otherwise an [ArgumentError] will be thrown. + /// + /// A [FirebaseAuthException] maybe thrown with the following error code: + /// - **invalid-email**: + /// - Thrown if the email address is not valid. + Future sendSignInLinkToEmail({ + required String email, + required ActionCodeSettings actionCodeSettings, + }) async { + if (actionCodeSettings.handleCodeInApp != true) { + throw ArgumentError( + 'The [handleCodeInApp] value of [ActionCodeSettings] must be `true`.', + ); + } + + await _delegate.sendSignInLinkToEmail(email, actionCodeSettings); + } + + /// When set to null, sets the user-facing language code to be the default app language. + /// + /// The language code will propagate to email action templates (password + /// reset, email verification and email change revocation), SMS templates for + /// phone authentication, reCAPTCHA verifier and OAuth popup/redirect + /// operations provided the specified providers support localization with the + /// language code specified. + Future setLanguageCode(String? languageCode) { + return _delegate.setLanguageCode(languageCode); + } + + /// Updates the current instance with the provided settings. + /// + /// [appVerificationDisabledForTesting] This setting applies to Android, iOS and + /// web platforms. When set to `true`, this property disables app + /// verification for the purpose of testing phone authentication. For this + /// property to take effect, it needs to be set before handling a reCAPTCHA + /// app verifier. When this is disabled, a mock reCAPTCHA is rendered + /// instead. This is useful for manual testing during development or for + /// automated integration tests. + /// + /// In order to use this feature, you will need to + /// [whitelist your phone number](https://firebase.google.com/docs/auth/web/phone-auth?authuser=0#test-with-whitelisted-phone-numbers) + /// via the Firebase Console. + /// + /// The default value is `false` (app verification is enabled). + /// + /// [forceRecaptchaFlow] This setting applies to Android only. When set to 'true', + /// it forces the application verification to use the web reCAPTCHA flow for Phone Authentication. + /// Once this has been called, every call to PhoneAuthProvider#verifyPhoneNumber() will skip the SafetyNet verification flow and use the reCAPTCHA flow instead. + /// Calling this method a second time will overwrite the previously passed parameter. + /// + /// [phoneNumber] & [smsCode] These settings apply to Android only. The phone number and SMS code here must have been configured in the Firebase Console (Authentication > Sign In Method > Phone). + /// Once this has been called, every call to PhoneAuthProvider#verifyPhoneNumber() with the same phone number as the one that is configured here will have onVerificationCompleted() triggered as the callback. + /// Calling this method a second time will overwrite the previously passed parameters. Only one number can be configured at a given time. + /// Calling this method with either parameter set to null removes this functionality until valid parameters are passed. + /// Verifying a phone number other than the one configured here will trigger normal behavior. If the phone number is configured as a test phone number in the console, the regular testing flow occurs. Otherwise, normal phone number verification will take place. + /// When this is set and PhoneAuthProvider#verifyPhoneNumber() is called with a matching phone number, PhoneAuthProvider.OnVerificationStateChangedCallbacks.onCodeAutoRetrievalTimeOut(String) will never be called. + /// + /// [userAccessGroup] This setting only applies to iOS and MacOS platforms. + /// When set, it allows you to share authentication state between + /// applications. Set the property to your team group ID or set to `null` + /// to remove sharing capabilities. + /// + /// Key Sharing capabilities must be enabled for your app via XCode (Project + /// settings > Capabilities). To learn more, visit the + /// [Apple documentation](https://developer.apple.com/documentation/security/keychain_services/keychain_items/sharing_access_to_keychain_items_among_a_collection_of_apps). + Future setSettings({ + bool appVerificationDisabledForTesting = false, + String? userAccessGroup, + String? phoneNumber, + String? smsCode, + bool? forceRecaptchaFlow, + }) { + return _delegate.setSettings( + appVerificationDisabledForTesting: appVerificationDisabledForTesting, + userAccessGroup: userAccessGroup, + phoneNumber: phoneNumber, + smsCode: smsCode, + forceRecaptchaFlow: forceRecaptchaFlow, + ); + } + + /// Changes the current type of persistence on the current Auth instance for + /// the currently saved Auth session and applies this type of persistence for + /// future sign-in requests, including sign-in with redirect requests. + /// + /// This will return a promise that will resolve once the state finishes + /// copying from one type of storage to the other. Calling a sign-in method + /// after changing persistence will wait for that persistence change to + /// complete before applying it on the new Auth state. + /// + /// This makes it easy for a user signing in to specify whether their session + /// should be remembered or not. It also makes it easier to never persist the + /// Auth state for applications that are shared by other users or have + /// sensitive data. + /// + /// This is only supported on web based platforms. + Future setPersistence(Persistence persistence) async { + return _delegate.setPersistence(persistence); + } + + /// Asynchronously creates and becomes an anonymous user. + /// + /// If there is already an anonymous user signed in, that user will be + /// returned instead. If there is any other existing user signed in, that + /// user will be signed out. + /// + /// **Important**: You must enable Anonymous accounts in the Auth section + /// of the Firebase console before being able to use them. + /// + /// A [FirebaseAuthException] maybe thrown with the following error code: + /// - **operation-not-allowed**: + /// - Thrown if anonymous accounts are not enabled. Enable anonymous accounts + /// in the Firebase Console, under the Auth tab. + Future signInAnonymously() async { + return UserCredential._(this, await _delegate.signInAnonymously()); + } + + /// Asynchronously signs in to Firebase with the given 3rd-party credentials + /// (e.g. a Facebook login Access Token, a Google ID Token/Access Token pair, + /// etc.) and returns additional identity provider data. + /// + /// If successful, it also signs the user in into the app and updates + /// any [authStateChanges], [idTokenChanges] or [userChanges] stream + /// listeners. + /// + /// If the user doesn't have an account already, one will be created + /// automatically. + /// + /// **Important**: You must enable the relevant accounts in the Auth section + /// of the Firebase console before being able to use them. + /// + /// A [FirebaseAuthException] maybe thrown with the following error code: + /// - **account-exists-with-different-credential**: + /// - Thrown if there already exists an account with the email address + /// asserted by the credential. + // ignore: deprecated_member_use_from_same_package + /// Resolve this by asking + /// the user to sign in using one of the returned providers. + /// Once the user is signed in, the original credential can be linked to + /// the user with [linkWithCredential]. + /// - **invalid-credential**: + /// - Thrown if the credential is malformed or has expired. + /// - **operation-not-allowed**: + /// - Thrown if the type of account corresponding to the credential is not + /// enabled. Enable the account type in the Firebase Console, under the + /// Auth tab. + /// - **user-disabled**: + /// - Thrown if the user corresponding to the given credential has been + /// disabled. + /// - **user-not-found**: + /// - Thrown if signing in with a credential from [EmailAuthProvider.credential] + /// and there is no user corresponding to the given email. + /// - **wrong-password**: + /// - Thrown if signing in with a credential from [EmailAuthProvider.credential] + /// and the password is invalid for the given email, or if the account + /// corresponding to the email does not have a password set. + /// - **invalid-verification-code**: + /// - Thrown if the credential is a [PhoneAuthProvider.credential] and the + /// verification code of the credential is not valid. + /// - **invalid-verification-id**: + /// - Thrown if the credential is a [PhoneAuthProvider.credential] and the + /// verification ID of the credential is not valid. + Future signInWithCredential(AuthCredential credential) async { + try { + return UserCredential._( + this, + await _delegate.signInWithCredential(credential), + ); + } on FirebaseAuthMultiFactorExceptionPlatform catch (e) { + throw FirebaseAuthMultiFactorException._(this, e); + } catch (e) { + rethrow; + } + } + + /// Tries to sign in a user with a given custom token. + /// + /// Custom tokens are used to integrate Firebase Auth with existing auth + /// systems, and must be generated by the auth backend. + /// + /// If successful, it also signs the user in into the app and updates + /// any [authStateChanges], [idTokenChanges] or [userChanges] stream + /// listeners. + /// + /// If the user identified by the [uid] specified in the token doesn't + /// have an account already, one will be created automatically. + /// + /// Read how to use Custom Token authentication and the cases where it is + /// useful in [the guides](https://firebase.google.com/docs/auth/android/custom-auth). + /// + /// A [FirebaseAuthException] maybe thrown with the following error code: + /// - **custom-token-mismatch**: + /// - Thrown if the custom token is for a different Firebase App. + /// - **invalid-custom-token**: + /// - Thrown if the custom token format is incorrect. + Future signInWithCustomToken(String token) async { + try { + return UserCredential._( + this, await _delegate.signInWithCustomToken(token)); + } on FirebaseAuthMultiFactorExceptionPlatform catch (e) { + throw FirebaseAuthMultiFactorException._(this, e); + } catch (e) { + rethrow; + } + } + + /// Attempts to sign in a user with the given email address and password. + /// + /// If successful, it also signs the user in into the app and updates + /// any [authStateChanges], [idTokenChanges] or [userChanges] stream + /// listeners. + /// + /// **Important**: You must enable Email & Password accounts in the Auth + /// section of the Firebase console before being able to use them. + /// + /// A [FirebaseAuthException] maybe thrown with the following error code: + /// - **invalid-email**: + /// - Thrown if the email address is not valid. + /// - **user-disabled**: + /// - Thrown if the user corresponding to the given email has been disabled. + /// - **user-not-found** _(deprecated)_: + /// - Thrown if there is no user corresponding to the given email. + /// **Note:** This code is no longer returned on projects that have + /// [email enumeration protection](https://cloud.google.com/identity-platform/docs/admin/email-enumeration-protection) + /// enabled (the default for new projects since September 2023). + /// Use **invalid-credential** instead. + /// - **wrong-password** _(deprecated)_: + /// - Thrown if the password is invalid for the given email, or the account + /// corresponding to the email does not have a password set. + /// **Note:** This code is no longer returned on projects that have + /// [email enumeration protection](https://cloud.google.com/identity-platform/docs/admin/email-enumeration-protection) + /// enabled (the default for new projects since September 2023). + /// Use **invalid-credential** instead. + /// - **too-many-requests**: + /// - Thrown if the user sent too many requests at the same time, for security + /// the api will not allow too many attempts at the same time, user will have + /// to wait for some time + /// - **user-token-expired**: + /// - Thrown if the user is no longer authenticated since his refresh token + /// has been expired + /// - **network-request-failed**: + /// - Thrown if there was a network request error, for example the user + /// doesn't have internet connection + /// - **invalid-credential**: + /// - Thrown if the email or password is incorrect. On projects with + /// [email enumeration protection](https://cloud.google.com/identity-platform/docs/admin/email-enumeration-protection) + /// enabled (the default since September 2023), this replaces + /// **user-not-found** and **wrong-password** to prevent revealing + /// whether an account exists. On the Firebase emulator, the code may + /// appear as **INVALID_LOGIN_CREDENTIALS**. + /// - **operation-not-allowed**: + /// - Thrown if email/password accounts are not enabled. Enable + /// email/password accounts in the Firebase Console, under the Auth tab. + Future signInWithEmailAndPassword({ + required String email, + required String password, + }) async { + try { + return UserCredential._( + this, + await _delegate.signInWithEmailAndPassword(email, password), + ); + } on FirebaseAuthMultiFactorExceptionPlatform catch (e) { + throw FirebaseAuthMultiFactorException._(this, e); + } catch (e) { + rethrow; + } + } + + /// Signs in using an email address and email sign-in link. + /// + /// Fails with an error if the email address is invalid or OTP in email link + /// expires. + /// + /// Confirm the link is a sign-in email link before calling this method, + /// using [isSignInWithEmailLink]. + /// + /// A [FirebaseAuthException] maybe thrown with the following error code: + /// - **expired-action-code**: + /// - Thrown if OTP in email link expires. + /// - **invalid-email**: + /// - Thrown if the email address is not valid. + /// - **user-disabled**: + /// - Thrown if the user corresponding to the given email has been disabled. + Future signInWithEmailLink({ + required String email, + required String emailLink, + }) async { + try { + return UserCredential._( + this, + await _delegate.signInWithEmailLink(email, emailLink), + ); + } on FirebaseAuthMultiFactorExceptionPlatform catch (e) { + throw FirebaseAuthMultiFactorException._(this, e); + } catch (e) { + rethrow; + } + } + + /// Signs in with an AuthProvider using native authentication flow. + /// + /// A [FirebaseAuthException] maybe thrown with the following error code: + /// - **user-disabled**: + /// - Thrown if the user corresponding to the given email has been disabled. + Future signInWithProvider( + AuthProvider provider, + ) async { + try { + return UserCredential._( + this, + await _delegate.signInWithProvider(provider), + ); + } on FirebaseAuthMultiFactorExceptionPlatform catch (e) { + throw FirebaseAuthMultiFactorException._(this, e); + } catch (e) { + rethrow; + } + } + + /// Starts a sign-in flow for a phone number. + /// + /// You can optionally provide a [RecaptchaVerifier] instance to control the + /// reCAPTCHA widget appearance and behavior. + /// + /// Once the reCAPTCHA verification has completed, called [ConfirmationResult.confirm] + /// with the users SMS verification code to complete the authentication flow. + /// + /// This method is only available on web based platforms. + Future signInWithPhoneNumber( + String phoneNumber, [ + RecaptchaVerifier? verifier, + ]) async { + assert(phoneNumber.isNotEmpty); + // If we add a recaptcha to the page by creating a new instance, we must + // also clear that instance before proceeding. + bool mustClear = verifier == null; + verifier ??= RecaptchaVerifier(auth: _delegate); + final result = + await _delegate.signInWithPhoneNumber(phoneNumber, verifier.delegate); + if (mustClear) { + verifier.clear(); + } + return ConfirmationResult._(this, result); + } + + /// Authenticates a Firebase client using a popup-based OAuth authentication + /// flow. + /// + /// If succeeds, returns the signed in user along with the provider's + /// credential. + /// + /// This method is only available on web based platforms. + Future signInWithPopup(AuthProvider provider) async { + try { + return UserCredential._(this, await _delegate.signInWithPopup(provider)); + } on FirebaseAuthMultiFactorExceptionPlatform catch (e) { + throw FirebaseAuthMultiFactorException._(this, e); + } catch (e) { + rethrow; + } + } + + /// Authenticates a Firebase client using a full-page redirect flow. + /// + /// To handle the results and errors for this operation, refer to + /// [getRedirectResult]. + Future signInWithRedirect(AuthProvider provider) { + try { + return _delegate.signInWithRedirect(provider); + } on FirebaseAuthMultiFactorExceptionPlatform catch (e) { + throw FirebaseAuthMultiFactorException._(this, e); + } catch (e) { + rethrow; + } + } + + /// Checks a password reset code sent to the user by email or other + /// out-of-band mechanism. + /// + /// Returns the user's email address if valid. + /// + /// A [FirebaseAuthException] maybe thrown with the following error code: + /// - **expired-action-code**: + /// - Thrown if the password reset code has expired. + /// - **invalid-action-code**: + /// - Thrown if the password reset code is invalid. This can happen if the + /// code is malformed or has already been used. + /// - **user-disabled**: + /// - Thrown if the user corresponding to the given email has been disabled. + /// - **user-not-found**: + /// - Thrown if there is no user corresponding to the password reset code. + /// This may have happened if the user was deleted between when the code + /// was issued and when this method was called. + Future verifyPasswordResetCode(String code) { + return _delegate.verifyPasswordResetCode(code); + } + + /// Starts a phone number verification process for the given phone number. + /// + /// This method is used to verify that the user-provided phone number belongs + /// to the user. Firebase sends a code via SMS message to the phone number, + /// where you must then prompt the user to enter the code. The code can be + /// combined with the verification ID to create a [PhoneAuthProvider.credential] + /// which you can then use to sign the user in, or link with their account ( + /// see [signInWithCredential] or [linkWithCredential]). + /// + /// On some Android devices, auto-verification can be handled by the device + /// and a [PhoneAuthCredential] will be automatically provided. + /// + /// No duplicated SMS will be sent out unless a [forceResendingToken] is + /// provided. + /// + /// [phoneNumber] The phone number for the account the user is signing up + /// for or signing into. Make sure to pass in a phone number with country + /// code prefixed with plus sign ('+'). + /// Should be null if it's a multi-factor sign in. + /// + /// [multiFactorInfo] The multi factor info you're using to verify the phone number. + /// Should be set if a [multiFactorSession] is provided. + /// + /// [multiFactorSession] The multi factor session you're using to verify the phone number. + /// Should be set if a [multiFactorInfo] is provided. + /// + /// [timeout] The maximum amount of time you are willing to wait for SMS + /// auto-retrieval to be completed by the library. Maximum allowed value + /// is 2 minutes. + /// + /// [forceResendingToken] The [forceResendingToken] obtained from [codeSent] + /// callback to force re-sending another verification SMS before the + /// auto-retrieval timeout. + /// + /// [verificationCompleted] Triggered when an SMS is auto-retrieved or the + /// phone number has been instantly verified. The callback will receive an + /// [PhoneAuthCredential] that can be passed to [signInWithCredential] or + /// [linkWithCredential]. + /// + /// [verificationFailed] Triggered when an error occurred during phone number + /// verification. A [FirebaseAuthException] is provided when this is + /// triggered. + /// + /// [codeSent] Triggered when an SMS has been sent to the users phone, and + /// will include a [verificationId] and [forceResendingToken]. + /// + /// [codeAutoRetrievalTimeout] Triggered when SMS auto-retrieval times out and + /// provide a [verificationId]. + Future verifyPhoneNumber({ + String? phoneNumber, + PhoneMultiFactorInfo? multiFactorInfo, + required PhoneVerificationCompleted verificationCompleted, + required PhoneVerificationFailed verificationFailed, + required PhoneCodeSent codeSent, + required PhoneCodeAutoRetrievalTimeout codeAutoRetrievalTimeout, + @visibleForTesting String? autoRetrievedSmsCodeForTesting, + Duration timeout = const Duration(seconds: 30), + int? forceResendingToken, + MultiFactorSession? multiFactorSession, + }) { + assert( + phoneNumber != null || multiFactorInfo != null, + 'Either phoneNumber or multiFactorInfo must be provided.', + ); + return _delegate.verifyPhoneNumber( + phoneNumber: phoneNumber, + multiFactorInfo: multiFactorInfo, + timeout: timeout, + forceResendingToken: forceResendingToken, + verificationCompleted: verificationCompleted, + verificationFailed: verificationFailed, + codeSent: codeSent, + codeAutoRetrievalTimeout: codeAutoRetrievalTimeout, + // ignore: invalid_use_of_visible_for_testing_member + autoRetrievedSmsCodeForTesting: autoRetrievedSmsCodeForTesting, + multiFactorSession: multiFactorSession, + ); + } + + /// Apple only. Users signed in with Apple provider can revoke their token using an authorization code. + /// Authorization code can be retrieved on the user credential i.e. userCredential.additionalUserInfo.authorizationCode + Future revokeTokenWithAuthorizationCode(String authorizationCode) { + return _delegate.revokeTokenWithAuthorizationCode(authorizationCode); + } + + /// Android only. Revokes the provided accessToken. Currently supports revoking Apple-issued accessToken only. + Future revokeAccessToken(String accessToken) { + return _delegate.revokeAccessToken(accessToken); + } + + /// Signs out the current user. + /// + /// If successful, it also updates + /// any [authStateChanges], [idTokenChanges] or [userChanges] stream + /// listeners. + Future signOut() async { + await _delegate.signOut(); + } + + /// Initializes the reCAPTCHA Enterprise client proactively to enhance reCAPTCHA signal collection and + /// to complete reCAPTCHA-protected flows in a single attempt. + Future initializeRecaptchaConfig() { + return _delegate.initializeRecaptchaConfig(); + } + + /// Validates a password against the password policy configured for the project or tenant. + /// + /// If no tenant ID is set on the Auth instance, then this method will use the password policy configured for the project. + /// Otherwise, this method will use the policy configured for the tenant. If a password policy has not been configured, + /// then the default policy configured for all projects will be used. + /// + /// If an auth flow fails because a submitted password does not meet the password policy requirements and this method has previously been called, + /// then this method will use the most recent policy available when called again. + /// + /// Returns a map with the following keys: + /// - **status**: A boolean indicating if the password is valid. + /// - **passwordPolicy**: The password policy used to validate the password. + /// - **meetsMinPasswordLength**: A boolean indicating if the password meets the minimum length requirement. + /// - **meetsMaxPasswordLength**: A boolean indicating if the password meets the maximum length requirement. + /// - **meetsLowercaseRequirement**: A boolean indicating if the password meets the lowercase requirement. + /// - **meetsUppercaseRequirement**: A boolean indicating if the password meets the uppercase requirement. + /// - **meetsDigitsRequirement**: A boolean indicating if the password meets the digits requirement. + /// - **meetsSymbolsRequirement**: A boolean indicating if the password meets the symbols requirement. + /// + /// A [FirebaseAuthException] maybe thrown with the following error code: + /// - **invalid-password**: + /// - Thrown if the password is invalid. + /// - **network-request-failed**: + /// - Thrown if there was a network request error, for example the user + /// doesn't have internet connection + /// - **INVALID_LOGIN_CREDENTIALS** or **invalid-credential**: + /// - Thrown if the password is invalid for the given email, or the account + /// corresponding to the email does not have a password set. + /// Depending on if you are using firebase emulator or not the code is + /// different + /// - **operation-not-allowed**: + /// - Thrown if email/password accounts are not enabled. Enable + /// email/password accounts in the Firebase Console, under the Auth tab. + Future validatePassword( + FirebaseAuth auth, + String? password, + ) async { + if (password == null || password.isEmpty) { + throw FirebaseAuthException( + code: 'invalid-password', + message: 'Password cannot be null or empty', + ); + } + PasswordPolicyApi passwordPolicyApi = + PasswordPolicyApi(auth.app.options.apiKey); + PasswordPolicy passwordPolicy = + await passwordPolicyApi.fetchPasswordPolicy(); + PasswordPolicyImpl passwordPolicyImpl = PasswordPolicyImpl(passwordPolicy); + return passwordPolicyImpl.isPasswordValid(password); + } + + @override + String toString() { + return 'FirebaseAuth(app: ${app.name})'; + } +} diff --git a/mih_ui/android/build/ios/SourcePackages/firebase_auth-6.5.4/lib/src/multi_factor.dart b/mih_ui/android/build/ios/SourcePackages/firebase_auth-6.5.4/lib/src/multi_factor.dart new file mode 100644 index 00000000..4610e284 --- /dev/null +++ b/mih_ui/android/build/ios/SourcePackages/firebase_auth-6.5.4/lib/src/multi_factor.dart @@ -0,0 +1,213 @@ +// Copyright 2022, the Chromium project authors. Please see the AUTHORS file +// for details. All rights reserved. Use of this source code is governed by a +// BSD-style license that can be found in the LICENSE file. + +part of '../firebase_auth.dart'; + +/// Defines multi-factor related properties and operations pertaining to a [User]. +/// This class acts as the main entry point for enrolling or un-enrolling +/// second factors for a user, and provides access to their currently enrolled factors. +class MultiFactor { + MultiFactorPlatform _delegate; + + MultiFactor._(this._delegate); + + /// Returns a session identifier for a second factor enrollment operation. + Future getSession() { + return _delegate.getSession(); + } + + /// Enrolls a second factor as identified by the [MultiFactorAssertion] parameter for the current user. + /// + /// [displayName] can be used to provide a display name for the second factor. + Future enroll( + MultiFactorAssertion assertion, { + String? displayName, + }) async { + if (assertion._delegate is TotpMultiFactorGeneratorPlatform) { + assert(displayName != null, 'displayName is mandatory for TOTP'); + } + return _delegate.enroll(assertion._delegate, displayName: displayName); + } + + /// Unenrolls a second factor from this user. + /// + /// [factorUid] is the unique identifier of the second factor to unenroll. + /// [multiFactorInfo] is the [MultiFactorInfo] of the second factor to unenroll. + /// Only one of [factorUid] or [multiFactorInfo] should be provided. + Future unenroll({String? factorUid, MultiFactorInfo? multiFactorInfo}) { + assert( + (factorUid != null && multiFactorInfo == null) || + (factorUid == null && multiFactorInfo != null), + 'Exactly one of `factorUid` or `multiFactorInfo` must be provided', + ); + return _delegate.unenroll( + factorUid: factorUid, + multiFactorInfo: multiFactorInfo, + ); + } + + /// Returns a list of the [MultiFactorInfo] already associated with this user. + Future> getEnrolledFactors() { + return _delegate.getEnrolledFactors(); + } +} + +/// Provider for generating a PhoneMultiFactorAssertion. +class PhoneMultiFactorGenerator { + /// Transforms a PhoneAuthCredential into a [MultiFactorAssertion] + /// which can be used to confirm ownership of a phone second factor. + static MultiFactorAssertion getAssertion( + PhoneAuthCredential credential, + ) { + final assertion = + PhoneMultiFactorGeneratorPlatform.instance.getAssertion(credential); + return MultiFactorAssertion._(assertion); + } +} + +/// Provider for generating a PhoneMultiFactorAssertion. +class TotpMultiFactorGenerator { + /// Transforms a PhoneAuthCredential into a [MultiFactorAssertion] + /// which can be used to confirm ownership of a phone second factor. + static Future generateSecret( + MultiFactorSession session, + ) async { + final secret = + await TotpMultiFactorGeneratorPlatform.instance.generateSecret(session); + return TotpSecret._( + secret.codeIntervalSeconds, + secret.codeLength, + secret.enrollmentCompletionDeadline, + secret.hashingAlgorithm, + secret.secretKey, + secret, + ); + } + + /// Get a [MultiFactorAssertion] + /// which can be used to confirm ownership of a TOTP second factor. + static Future getAssertionForEnrollment( + TotpSecret secret, + String oneTimePassword, + ) async { + final assertion = await TotpMultiFactorGeneratorPlatform.instance + .getAssertionForEnrollment( + secret._instance, + oneTimePassword, + ); + + return MultiFactorAssertion._(assertion); + } + + /// Get a [MultiFactorAssertion] + /// which can be used to confirm ownership of a TOTP second factor. + static Future getAssertionForSignIn( + String enrollmentId, + String oneTimePassword, + ) async { + final assertion = + await TotpMultiFactorGeneratorPlatform.instance.getAssertionForSignIn( + enrollmentId, + oneTimePassword, + ); + + return MultiFactorAssertion._(assertion); + } +} + +class TotpSecret { + final TotpSecretPlatform _instance; + + final int? codeIntervalSeconds; + final int? codeLength; + final DateTime? enrollmentCompletionDeadline; + final String? hashingAlgorithm; + final String secretKey; + + TotpSecret._( + this.codeIntervalSeconds, + this.codeLength, + this.enrollmentCompletionDeadline, + this.hashingAlgorithm, + this.secretKey, + this._instance, + ); + + /// Generate a TOTP secret for the authenticated user. + Future generateQrCodeUrl({ + String? accountName, + String? issuer, + }) { + return _instance.generateQrCodeUrl( + accountName: accountName, + issuer: issuer, + ); + } + + /// Opens the specified QR Code URL in a password manager like iCloud Keychain. + Future openInOtpApp( + String qrCodeUrl, + ) async { + await _instance.openInOtpApp( + qrCodeUrl, + ); + } +} + +/// Represents an assertion that the Firebase Authentication server +/// can use to authenticate a user as part of a multi-factor flow. +class MultiFactorAssertion { + final MultiFactorAssertionPlatform _delegate; + + MultiFactorAssertion._(this._delegate) { + MultiFactorAssertionPlatform.verify(_delegate); + } +} + +/// Utility class that contains methods to resolve second factor +/// requirements on users that have opted into two-factor authentication. +class MultiFactorResolver { + final FirebaseAuth _auth; + final MultiFactorResolverPlatform _delegate; + + MultiFactorResolver._(this._auth, this._delegate) { + MultiFactorResolverPlatform.verify(_delegate); + } + + /// List of [MultiFactorInfo] which represents the available + /// second factors that can be used to complete the sign-in for the current session. + List get hints => _delegate.hints; + + /// A MultiFactorSession, an opaque session identifier for the current sign-in flow. + MultiFactorSession get session => _delegate.session; + + /// Completes sign in with a second factor using an MultiFactorAssertion which + /// confirms that the user has successfully completed the second factor challenge. + Future resolveSignIn( + MultiFactorAssertion assertion, + ) async { + final credential = await _delegate.resolveSignIn(assertion._delegate); + return UserCredential._(_auth, credential); + } +} + +/// MultiFactor exception related to Firebase Authentication. Check the error code +/// and message for more details. +class FirebaseAuthMultiFactorException extends FirebaseAuthException { + final FirebaseAuth _auth; + final FirebaseAuthMultiFactorExceptionPlatform _delegate; + + FirebaseAuthMultiFactorException._(this._auth, this._delegate) + : super( + code: _delegate.code, + message: _delegate.message, + email: _delegate.email, + credential: _delegate.credential, + phoneNumber: _delegate.phoneNumber, + tenantId: _delegate.tenantId, + ); + + MultiFactorResolver get resolver => + MultiFactorResolver._(_auth, _delegate.resolver); +} diff --git a/mih_ui/android/build/ios/SourcePackages/firebase_auth-6.5.4/lib/src/recaptcha_verifier.dart b/mih_ui/android/build/ios/SourcePackages/firebase_auth-6.5.4/lib/src/recaptcha_verifier.dart new file mode 100644 index 00000000..8c86d794 --- /dev/null +++ b/mih_ui/android/build/ios/SourcePackages/firebase_auth-6.5.4/lib/src/recaptcha_verifier.dart @@ -0,0 +1,100 @@ +// ignore_for_file: require_trailing_commas +// Copyright 2020 The Chromium Authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +part of '../firebase_auth.dart'; + +/// An [reCAPTCHA](https://www.google.com/recaptcha/?authuser=0)-based +/// application verifier. +class RecaptchaVerifier { + static final RecaptchaVerifierFactoryPlatform _factory = + RecaptchaVerifierFactoryPlatform.instance; + + RecaptchaVerifier._(this._delegate); + + RecaptchaVerifierFactoryPlatform _delegate; + + /// Creates a new [RecaptchaVerifier] instance used to render a reCAPTCHA widget + /// when calling [signInWithPhoneNumber]. + /// + /// It is possible to configure the reCAPTCHA widget with the following arguments, + /// however if no arguments are provided, an "invisible" reCAPTCHA widget with + /// defaults will be created. + /// + /// [container] If a value is provided, the element must exist in the DOM when + /// [render] or [signInWithPhoneNumber] is called. The reCAPTCHA widget will + /// be rendered within the specified DOM element. + /// + /// If no value is provided, an "invisible" reCAPTCHA will be shown when [render] + /// is called. An invisible reCAPTCHA widget is shown a modal on-top of your + /// application. + /// + /// [size] When providing a custom [container], a size (normal or compact) can + /// be provided to change the size of the reCAPTCHA widget. This has no effect + /// when a [container] is not provided. Defaults to [RecaptchaVerifierSize.normal]. + /// + /// [theme] When providing a custom [container], a theme (light or dark) can + /// be provided to change the appearance of the reCAPTCHA widget. This has no + /// effect when a [container] is not provided. Defaults to [RecaptchaVerifierTheme.light]. + /// + /// [onSuccess] An optional callback which is called when the user successfully + /// completes the reCAPTCHA widget. + /// + /// [onError] An optional callback which is called when the reCAPTCHA widget errors + /// (such as a network issue). + /// + /// [onExpired] An optional callback which is called when the reCAPTCHA expires. + factory RecaptchaVerifier({ + required FirebaseAuthPlatform auth, + String? container, + RecaptchaVerifierSize size = RecaptchaVerifierSize.normal, + RecaptchaVerifierTheme theme = RecaptchaVerifierTheme.light, + RecaptchaVerifierOnSuccess? onSuccess, + RecaptchaVerifierOnError? onError, + RecaptchaVerifierOnExpired? onExpired, + }) { + return RecaptchaVerifier._( + _factory.delegateFor( + auth: auth, + container: container, + size: size, + theme: theme, + onSuccess: onSuccess, + onError: onError, + onExpired: onExpired, + ), + ); + } + + /// Returns the underlying factory delegate instance. + @protected + RecaptchaVerifierFactoryPlatform get delegate { + return _delegate; + } + + /// The application verifier type. For a reCAPTCHA verifier, this is + /// 'recaptcha'. + String get type { + return _delegate.type; + } + + /// Clears the reCAPTCHA widget from the page and destroys the current + /// instance. + void clear() { + return _delegate.clear(); + } + + /// Renders the reCAPTCHA widget on the page. + /// + /// Returns a [Future] that resolves with the reCAPTCHA widget ID. + Future render() async { + return _delegate.render(); + } + + /// Waits for the user to solve the reCAPTCHA and resolves with the reCAPTCHA + /// token. + Future verify() async { + return _delegate.verify(); + } +} diff --git a/mih_ui/android/build/ios/SourcePackages/firebase_auth-6.5.4/lib/src/user.dart b/mih_ui/android/build/ios/SourcePackages/firebase_auth-6.5.4/lib/src/user.dart new file mode 100644 index 00000000..9b7ccdb7 --- /dev/null +++ b/mih_ui/android/build/ios/SourcePackages/firebase_auth-6.5.4/lib/src/user.dart @@ -0,0 +1,685 @@ +// ignore_for_file: require_trailing_commas +// Copyright 2020 The Chromium Authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +part of '../firebase_auth.dart'; + +/// A user account. +class User { + UserPlatform _delegate; + + final FirebaseAuth _auth; + MultiFactor? _multiFactor; + + User._(this._auth, this._delegate) { + UserPlatform.verify(_delegate); + } + + /// The users display name. + /// + /// Will be `null` if signing in anonymously or via password authentication. + String? get displayName { + return _delegate.displayName; + } + + /// The users email address. + /// + /// Will be `null` if signing in anonymously. + String? get email { + return _delegate.email; + } + + /// Returns whether the users email address has been verified. + /// + /// To send a verification email, see [sendEmailVerification]. + /// + /// Once verified, call [reload] to ensure the latest user information is + /// retrieved from Firebase. + bool get emailVerified { + return _delegate.isEmailVerified; + } + + /// Returns whether the user is a anonymous. + bool get isAnonymous { + return _delegate.isAnonymous; + } + + /// Returns additional metadata about the user, such as their creation time. + UserMetadata get metadata { + return _delegate.metadata; + } + + /// Returns the users phone number. + /// + /// This property will be `null` if the user has not signed in or been has + /// their phone number linked. + String? get phoneNumber { + return _delegate.phoneNumber; + } + + /// Returns a photo URL for the user. + /// + /// This property will be populated if the user has signed in or been linked + /// with a 3rd party OAuth provider (such as Google). + String? get photoURL { + return _delegate.photoURL; + } + + /// Returns a list of user information for each linked provider. + List get providerData { + return _delegate.providerData; + } + + /// Returns a JWT refresh token for the user. + /// + /// This property will be an empty string for native platforms (android, iOS & macOS) as they do not + /// support refresh tokens. + String? get refreshToken { + return _delegate.refreshToken; + } + + /// The current user's tenant ID. + /// + /// This is a read-only property, which indicates the tenant ID used to sign + /// in the current user. This is `null` if the user is signed in from the + /// parent project. + String? get tenantId { + return _delegate.tenantId; + } + + /// The user's unique ID. + String get uid { + return _delegate.uid; + } + + /// Deletes and signs out the user. + /// + /// **Important**: this is a security-sensitive operation that requires the + /// user to have recently signed in. If this requirement isn't met, ask the + /// user to authenticate again and then call [User.reauthenticateWithCredential]. + /// + /// A [FirebaseAuthException] maybe thrown with the following error code: + /// - **requires-recent-login**: + /// - Thrown if the user's last sign-in time does not meet the security + /// threshold. Use [User.reauthenticateWithCredential] to resolve. This + /// does not apply if the user is anonymous. + Future delete() async { + return _delegate.delete(); + } + + /// Returns a JSON Web Token (JWT) used to identify the user to a Firebase + /// service. + /// + /// Returns the current token if it has not expired. Otherwise, this will + /// refresh the token and return a new one. + /// + /// If [forceRefresh] is `true`, the token returned will be refreshed regardless + /// of token expiration. + Future getIdToken([bool forceRefresh = false]) { + return _delegate.getIdToken(forceRefresh); + } + + /// Returns a [IdTokenResult] containing the users JSON Web Token (JWT) and + /// other metadata. + /// + /// Returns the current token if it has not expired. Otherwise, this will + /// refresh the token and return a new one. + /// + /// If [forceRefresh] is `true`, the token returned will be refreshed regardless + /// of token expiration. + Future getIdTokenResult([bool forceRefresh = false]) { + return _delegate.getIdTokenResult(forceRefresh); + } + + /// Links the user account with the given credentials. + /// + /// A [FirebaseAuthException] maybe thrown with the following error code: + /// - **provider-already-linked**: + /// - Thrown if the provider has already been linked to the user. This error + /// is thrown even if this is not the same provider's account that is + /// currently linked to the user. + /// - **invalid-credential**: + /// - Thrown if the provider's credential is not valid. This can happen if it + /// has already expired when calling link, or if it used invalid token(s). + /// See the Firebase documentation for your provider, and make sure you + /// pass in the correct parameters to the credential method. + /// - **credential-already-in-use**: + /// - Thrown if the account corresponding to the credential already exists + /// among your users, or is already linked to a Firebase User. For example, + /// this error could be thrown if you are upgrading an anonymous user to a + /// Google user by linking a Google credential to it and the Google + /// credential used is already associated with an existing Firebase Google + /// user. The fields `email`, `phoneNumber`, and `credential` + /// ([AuthCredential]) may be provided, depending on the type of + /// credential. You can recover from this error by signing in with + /// `credential` directly via [signInWithCredential]. Please note, you will + /// not recover from this error if you're using a [PhoneAuthCredential] to link + /// a provider to an account. Once an attempt to link an account has been made, + /// a new sms code is required to sign in the user. + /// - **email-already-in-use**: + /// - Thrown if the email corresponding to the credential already exists + /// among your users. When thrown while linking a credential to an existing + /// user, an `email` and `credential` ([AuthCredential]) fields are also + /// provided. You have to link the credential to the existing user with + /// that email if you wish to continue signing in with that credential. To + /// do so, sign in to `email` via one of + /// the providers returned and then [User.linkWithCredential] the original + /// credential to that newly signed in user. + /// - **operation-not-allowed**: + /// - Thrown if you have not enabled the provider in the Firebase Console. Go + /// to the Firebase Console for your project, in the Auth section and the + /// Sign in Method tab and configure the provider. + /// - **invalid-email**: + /// - Thrown if the email used in a [EmailAuthProvider.credential] is + /// invalid. + /// - **invalid-email**: + /// - Thrown if the password used in a [EmailAuthProvider.credential] is not + /// correct or when the user associated with the email does not have a + /// password. + /// - **invalid-verification-code**: + /// - Thrown if the credential is a [PhoneAuthProvider.credential] and the + /// verification code of the credential is not valid. + /// - **invalid-verification-id**: + /// - Thrown if the credential is a [PhoneAuthProvider.credential] and the + /// verification ID of the credential is not valid. + Future linkWithCredential(AuthCredential credential) async { + try { + return UserCredential._( + _auth, + await _delegate.linkWithCredential(credential), + ); + } on FirebaseAuthMultiFactorExceptionPlatform catch (e) { + throw FirebaseAuthMultiFactorException._(_auth, e); + } catch (e) { + rethrow; + } + } + + /// Links with an AuthProvider using native authentication flow. + /// On web, you should use [linkWithPopup] or [linkWithRedirect] instead. + /// + /// A [FirebaseAuthException] maybe thrown with the following error code: + /// - **provider-already-linked**: + /// - Thrown if the provider has already been linked to the user. This error + /// is thrown even if this is not the same provider's account that is + /// currently linked to the user. + /// - **invalid-credential**: + /// - Thrown if the provider's credential is not valid. This can happen if it + /// has already expired when calling link, or if it used invalid token(s). + /// See the Firebase documentation for your provider, and make sure you + /// pass in the correct parameters to the credential method. + /// - **credential-already-in-use**: + /// - Thrown if the account corresponding to the credential already exists + /// among your users, or is already linked to a Firebase User. For example, + /// this error could be thrown if you are upgrading an anonymous user to a + /// Google user by linking a Google credential to it and the Google + /// credential used is already associated with an existing Firebase Google + /// user. The fields `email`, `phoneNumber`, and `credential` + /// ([AuthCredential]) may be provided, depending on the type of + /// credential. You can recover from this error by signing in with + /// `credential` directly via [signInWithCredential]. + /// - **email-already-in-use**: + /// - Thrown if the email corresponding to the credential already exists + /// among your users. When thrown while linking a credential to an existing + /// user, an `email` and `credential` ([AuthCredential]) fields are also + /// provided. You have to link the credential to the existing user with + /// that email if you wish to continue signing in with that credential. + /// To do so, sign in to `email` via one + /// of the providers and then [User.linkWithCredential] the + /// original credential to that newly signed in user. + /// - **operation-not-allowed**: + /// - Thrown if you have not enabled the provider in the Firebase Console. Go + /// to the Firebase Console for your project, in the Auth section and the + /// Sign in Method tab and configure the provider. + Future linkWithProvider( + AuthProvider provider, + ) async { + try { + return UserCredential._( + _auth, + await _delegate.linkWithProvider(provider), + ); + } on FirebaseAuthMultiFactorExceptionPlatform catch (e) { + throw FirebaseAuthMultiFactorException._(_auth, e); + } catch (e) { + rethrow; + } + } + + /// Re-authenticates a user using a Provider. + /// + /// Use before operations such as [User.updatePassword] that require tokens + /// from recent sign-in attempts. + /// + /// A [FirebaseAuthException] maybe thrown with the following error code: + /// - **user-mismatch**: + /// - Thrown if the credential given does not correspond to the user. + /// - **user-not-found**: + /// - Thrown if the credential given does not correspond to any existing + /// user. + /// - **invalid-credential**: + /// - Thrown if the provider's credential is not valid. This can happen if it + /// has already expired when calling link, or if it used invalid token(s). + /// See the Firebase documentation for your provider, and make sure you + /// pass in the correct parameters to the credential method. + /// - **invalid-email**: + /// - Thrown if the email used in a [EmailAuthProvider.credential] is + /// invalid. + /// - **wrong-password**: + /// - Thrown if the password used in a [EmailAuthProvider.credential] is not + /// correct or when the user associated with the email does not have a + /// password. + /// - **invalid-verification-code**: + /// - Thrown if the credential is a [PhoneAuthProvider.credential] and the + /// verification code of the credential is not valid. + /// - **invalid-verification-id**: + /// - Thrown if the credential is a [PhoneAuthProvider.credential] and the + /// verification ID of the credential is not valid. + Future reauthenticateWithProvider( + AuthProvider provider, + ) async { + try { + return UserCredential._( + _auth, + await _delegate.reauthenticateWithProvider(provider), + ); + } on FirebaseAuthMultiFactorExceptionPlatform catch (e) { + throw FirebaseAuthMultiFactorException._(_auth, e); + } catch (e) { + rethrow; + } + } + + /// Re-authenticates a user using a popup on Web. + /// + /// Use before operations such as [User.updatePassword] that require tokens + /// from recent sign-in attempts. + /// + /// A [FirebaseAuthException] maybe thrown with the following error code: + /// - **user-mismatch**: + /// - Thrown if the credential given does not correspond to the user. + /// - **user-not-found**: + /// - Thrown if the credential given does not correspond to any existing + /// user. + /// - **invalid-credential**: + /// - Thrown if the provider's credential is not valid. This can happen if it + /// has already expired when calling link, or if it used invalid token(s). + /// See the Firebase documentation for your provider, and make sure you + /// pass in the correct parameters to the credential method. + /// - **invalid-email**: + /// - Thrown if the email used in a [EmailAuthProvider.credential] is + /// invalid. + /// - **wrong-password**: + /// - Thrown if the password used in a [EmailAuthProvider.credential] is not + /// correct or when the user associated with the email does not have a + /// password. + /// - **invalid-verification-code**: + /// - Thrown if the credential is a [PhoneAuthProvider.credential] and the + /// verification code of the credential is not valid. + /// - **invalid-verification-id**: + /// - Thrown if the credential is a [PhoneAuthProvider.credential] and the + /// verification ID of the credential is not valid. + Future reauthenticateWithPopup( + AuthProvider provider, + ) async { + return UserCredential._( + _auth, + await _delegate.reauthenticateWithPopup(provider), + ); + } + + /// Re-authenticates a user using a redirection on Web. + /// + /// Use before operations such as [User.updatePassword] that require tokens + /// from recent sign-in attempts. + /// + /// A [FirebaseAuthException] maybe thrown with the following error code: + /// - **user-mismatch**: + /// - Thrown if the credential given does not correspond to the user. + /// - **user-not-found**: + /// - Thrown if the credential given does not correspond to any existing + /// user. + /// - **invalid-credential**: + /// - Thrown if the provider's credential is not valid. This can happen if it + /// has already expired when calling link, or if it used invalid token(s). + /// See the Firebase documentation for your provider, and make sure you + /// pass in the correct parameters to the credential method. + /// - **invalid-email**: + /// - Thrown if the email used in a [EmailAuthProvider.credential] is + /// invalid. + /// - **wrong-password**: + /// - Thrown if the password used in a [EmailAuthProvider.credential] is not + /// correct or when the user associated with the email does not have a + /// password. + /// - **invalid-verification-code**: + /// - Thrown if the credential is a [PhoneAuthProvider.credential] and the + /// verification code of the credential is not valid. + /// - **invalid-verification-id**: + /// - Thrown if the credential is a [PhoneAuthProvider.credential] and the + /// verification ID of the credential is not valid. + Future reauthenticateWithRedirect( + AuthProvider provider, + ) async { + await _delegate.reauthenticateWithRedirect(provider); + } + + /// Links the user account with the given provider. + /// + /// A [FirebaseAuthException] maybe thrown with the following error code: + /// - **provider-already-linked**: + /// - Thrown if the provider has already been linked to the user. This error + /// is thrown even if this is not the same provider's account that is + /// currently linked to the user. + /// - **invalid-credential**: + /// - Thrown if the provider's credential is not valid. This can happen if it + /// has already expired when calling link, or if it used invalid token(s). + /// See the Firebase documentation for your provider, and make sure you + /// pass in the correct parameters to the credential method. + /// - **credential-already-in-use**: + /// - Thrown if the account corresponding to the credential already exists + /// among your users, or is already linked to a Firebase User. For example, + /// this error could be thrown if you are upgrading an anonymous user to a + /// Google user by linking a Google credential to it and the Google + /// credential used is already associated with an existing Firebase Google + /// user. The fields `email`, `phoneNumber`, and `credential` + /// ([AuthCredential]) may be provided, depending on the type of + /// credential. You can recover from this error by signing in with + /// `credential` directly via [signInWithCredential]. + /// - **email-already-in-use**: + /// - Thrown if the email corresponding to the credential already exists + /// among your users. When thrown while linking a credential to an existing + /// user, an `email` and `credential` ([AuthCredential]) fields are also + /// provided. You have to link the credential to the existing user with + /// that email if you wish to continue signing in with that credential. + /// To do so, sign in to `email` via one + /// of the providers and then [User.linkWithCredential] the + /// original credential to that newly signed in user. + /// - **operation-not-allowed**: + /// - Thrown if you have not enabled the provider in the Firebase Console. Go + /// to the Firebase Console for your project, in the Auth section and the + /// Sign in Method tab and configure the provider. + Future linkWithPopup(AuthProvider provider) async { + try { + return UserCredential._( + _auth, + await _delegate.linkWithPopup(provider), + ); + } on FirebaseAuthMultiFactorExceptionPlatform catch (e) { + throw FirebaseAuthMultiFactorException._(_auth, e); + } catch (e) { + rethrow; + } + } + + /// Links the user account with the given provider. + /// + /// A [FirebaseAuthException] maybe thrown with the following error code: + /// - **provider-already-linked**: + /// - Thrown if the provider has already been linked to the user. This error + /// is thrown even if this is not the same provider's account that is + /// currently linked to the user. + /// - **invalid-credential**: + /// - Thrown if the provider's credential is not valid. This can happen if it + /// has already expired when calling link, or if it used invalid token(s). + /// See the Firebase documentation for your provider, and make sure you + /// pass in the correct parameters to the credential method. + /// - **credential-already-in-use**: + /// - Thrown if the account corresponding to the credential already exists + /// among your users, or is already linked to a Firebase User. For example, + /// this error could be thrown if you are upgrading an anonymous user to a + /// Google user by linking a Google credential to it and the Google + /// credential used is already associated with an existing Firebase Google + /// user. The fields `email`, `phoneNumber`, and `credential` + /// ([AuthCredential]) may be provided, depending on the type of + /// credential. You can recover from this error by signing in with + /// `credential` directly via [signInWithCredential]. + /// - **email-already-in-use**: + /// - Thrown if the email corresponding to the credential already exists + /// among your users. When thrown while linking a credential to an existing + /// user, an `email` and `credential` ([AuthCredential]) fields are also + /// provided. You have to link the credential to the existing user with + /// that email if you wish to continue signing in with that credential. + /// To do so, sign in to `email` via one + /// of the providers and then [User.linkWithCredential] the + /// original credential to that newly signed in user. + /// - **operation-not-allowed**: + /// - Thrown if you have not enabled the provider in the Firebase Console. Go + /// to the Firebase Console for your project, in the Auth section and the + /// Sign in Method tab and configure the provider. + Future linkWithRedirect(AuthProvider provider) async { + try { + await _delegate.linkWithRedirect(provider); + } on FirebaseAuthMultiFactorExceptionPlatform catch (e) { + throw FirebaseAuthMultiFactorException._(_auth, e); + } catch (e) { + rethrow; + } + } + + /// Links the user account with the given phone number. + /// + /// This method is only supported on web platforms. Use [verifyPhoneNumber] and + /// then [linkWithCredential] on these platforms. + /// + /// A [FirebaseAuthException] maybe thrown with the following error code: + /// - **provider-already-linked**: + /// - Thrown if the provider has already been linked to the user. This error + /// is thrown even if this is not the same provider's account that is + /// currently linked to the user. + /// - **captcha-check-failed**: + /// - Thrown if the reCAPTCHA response token was invalid, expired, or if this + /// method was called from a non-whitelisted domain. + /// - **invalid-phone-number**: + /// - Thrown if the phone number has an invalid format. + /// - **quota-exceeded**: + /// - Thrown if the SMS quota for the Firebase project has been exceeded. + /// - **user-disabled**: + /// - Thrown if the user corresponding to the given phone number has been disabled. + /// - **credential-already-in-use**: + /// - Thrown if the account corresponding to the phone number already exists + /// among your users, or is already linked to a Firebase User. + /// - **operation-not-allowed**: + /// - Thrown if you have not enabled the phone authentication provider in the + /// Firebase Console. Go to the Firebase Console for your project, in the Auth + /// section and the Sign in Method tab and configure the provider. + Future linkWithPhoneNumber( + String phoneNumber, [ + RecaptchaVerifier? verifier, + ]) async { + assert(phoneNumber.isNotEmpty); + // If we add a recaptcha to the page by creating a new instance, we must + // also clear that instance before proceeding. + bool mustClear = verifier == null; + verifier ??= RecaptchaVerifier(auth: _delegate.auth); + try { + final result = + await _delegate.linkWithPhoneNumber(phoneNumber, verifier.delegate); + if (mustClear) { + verifier.clear(); + } + return ConfirmationResult._(_auth, result); + } on FirebaseAuthMultiFactorExceptionPlatform catch (e) { + throw FirebaseAuthMultiFactorException._(_auth, e); + } catch (e) { + rethrow; + } + } + + /// Re-authenticates a user using a fresh credential. + /// + /// Use before operations such as [User.updatePassword] that require tokens + /// from recent sign-in attempts. + /// + /// A [FirebaseAuthException] maybe thrown with the following error code: + /// - **user-mismatch**: + /// - Thrown if the credential given does not correspond to the user. + /// - **user-not-found**: + /// - Thrown if the credential given does not correspond to any existing + /// user. + /// - **invalid-credential**: + /// - Thrown if the provider's credential is not valid. This can happen if it + /// has already expired when calling link, or if it used invalid token(s). + /// See the Firebase documentation for your provider, and make sure you + /// pass in the correct parameters to the credential method. + /// - **invalid-email**: + /// - Thrown if the email used in a [EmailAuthProvider.credential] is + /// invalid. + /// - **wrong-password**: + /// - Thrown if the password used in a [EmailAuthProvider.credential] is not + /// correct or when the user associated with the email does not have a + /// password. + /// - **invalid-verification-code**: + /// - Thrown if the credential is a [PhoneAuthProvider.credential] and the + /// verification code of the credential is not valid. + /// - **invalid-verification-id**: + /// - Thrown if the credential is a [PhoneAuthProvider.credential] and the + /// verification ID of the credential is not valid. + Future reauthenticateWithCredential( + AuthCredential credential, + ) async { + try { + return UserCredential._( + _auth, + await _delegate.reauthenticateWithCredential(credential), + ); + } on FirebaseAuthMultiFactorExceptionPlatform catch (e) { + throw FirebaseAuthMultiFactorException._(_auth, e); + } catch (e) { + rethrow; + } + } + + /// Refreshes the current user, if signed in. + Future reload() async { + await _delegate.reload(); + } + + /// Sends a verification email to a user. + /// + /// The verification process is completed by calling [applyActionCode]. + Future sendEmailVerification([ + ActionCodeSettings? actionCodeSettings, + ]) async { + await _delegate.sendEmailVerification(actionCodeSettings); + } + + /// Unlinks a provider from a user account. + /// + /// A [FirebaseAuthException] maybe thrown with the following error code: + /// - **no-such-provider**: + /// - Thrown if the user does not have this provider linked or when the + /// provider ID given does not exist. + Future unlink(String providerId) async { + return User._(_auth, await _delegate.unlink(providerId)); + } + + /// Updates the user's email address. + /// + /// An email will be sent to the original email address (if it was set) that + /// allows to revoke the email address change, in order to protect them from + /// account hijacking. + /// + /// **Important**: this is a security sensitive operation that requires the + /// user to have recently signed in. If this requirement isn't met, ask the + /// user to authenticate again and then call [User.reauthenticateWithCredential]. + /// + + /// Updates the user's password. + /// + /// **Important**: this is a security sensitive operation that requires the + /// user to have recently signed in. If this requirement isn't met, ask the + /// user to authenticate again and then call [User.reauthenticateWithCredential]. + /// + /// A [FirebaseAuthException] maybe thrown with the following error code: + /// - **weak-password**: + /// - Thrown if the password is not strong enough. + /// - **requires-recent-login**: + /// - Thrown if the user's last sign-in time does not meet the security + /// threshold. Use [User.reauthenticateWithCredential] to resolve. This + /// does not apply if the user is anonymous. + Future updatePassword(String newPassword) async { + await _delegate.updatePassword(newPassword); + } + + /// Updates the user's phone number. + /// + /// A credential can be created by verifying a phone number via [verifyPhoneNumber]. + /// + /// A [FirebaseAuthException] maybe thrown with the following error code: + /// - **invalid-verification-code**: + /// - Thrown if the verification code of the credential is not valid. + /// - **invalid-verification-id**: + /// - Thrown if the verification ID of the credential is not valid. + Future updatePhoneNumber(PhoneAuthCredential phoneCredential) async { + await _delegate.updatePhoneNumber(phoneCredential); + } + + /// Update the user name. + Future updateDisplayName(String? displayName) { + return _delegate + .updateProfile({'displayName': displayName}); + } + + /// Update the user's profile picture. + Future updatePhotoURL(String? photoURL) { + return _delegate.updateProfile({'photoURL': photoURL}); + } + + /// Updates a user's profile data. + Future updateProfile({String? displayName, String? photoURL}) { + return _delegate.updateProfile({ + 'displayName': displayName, + 'photoURL': photoURL, + }); + } + + /// Sends a verification email to a new email address. The user's email will + /// be updated to the new one after being verified. + /// + /// If you have a custom email action handler, you can complete the + /// verification process by calling [applyActionCode]. + /// + /// A [FirebaseAuthException] maybe thrown with the following error code: + /// - **missing-android-pkg-name**: + /// - An Android package name must be provided if the Android app is required to be installed. + /// - **missing-continue-uri**: + /// - A continue URL must be provided in the request. + /// - **missing-ios-bundle-id**: + /// - An iOS bundle ID must be provided if an App Store ID is provided. + /// - **invalid-continue-uri**: + /// - The continue URL provided in the request is invalid. + /// - **unauthorized-continue-uri**: + /// - The domain of the continue URL is not whitelisted. Whitelist the domain in the Firebase console. + Future verifyBeforeUpdateEmail( + String newEmail, [ + ActionCodeSettings? actionCodeSettings, + ]) async { + await _delegate.verifyBeforeUpdateEmail(newEmail, actionCodeSettings); + } + + MultiFactor get multiFactor { + if (!kIsWeb && (defaultTargetPlatform == TargetPlatform.windows)) { + throw UnimplementedError( + 'MultiFactor Authentication is only supported on web, Android, iOS and macOS.', + ); + } + return _multiFactor ??= MultiFactor._(_delegate.multiFactor); + } + + @override + String toString() { + return '$User(' + 'displayName: $displayName, ' + 'email: $email, ' + 'isEmailVerified: $emailVerified, ' + 'isAnonymous: $isAnonymous, ' + 'metadata: $metadata, ' + 'phoneNumber: $phoneNumber, ' + 'photoURL: $photoURL, ' + 'providerData, $providerData, ' + 'refreshToken: $refreshToken, ' + 'tenantId: $tenantId, ' + 'uid: $uid)'; + } +} diff --git a/mih_ui/android/build/ios/SourcePackages/firebase_auth-6.5.4/lib/src/user_credential.dart b/mih_ui/android/build/ios/SourcePackages/firebase_auth-6.5.4/lib/src/user_credential.dart new file mode 100644 index 00000000..3afbbc7d --- /dev/null +++ b/mih_ui/android/build/ios/SourcePackages/firebase_auth-6.5.4/lib/src/user_credential.dart @@ -0,0 +1,39 @@ +// ignore_for_file: require_trailing_commas +// Copyright 2020 The Chromium Authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +part of '../firebase_auth.dart'; + +/// A UserCredential is returned from authentication requests such as +/// [createUserWithEmailAndPassword]. +class UserCredential { + UserCredential._(this._auth, this._delegate) { + UserCredentialPlatform.verify(_delegate); + } + + final FirebaseAuth _auth; + final UserCredentialPlatform _delegate; + + /// Returns additional information about the user, such as whether they are a + /// newly created one. + AdditionalUserInfo? get additionalUserInfo => _delegate.additionalUserInfo; + + /// The users [AuthCredential]. + AuthCredential? get credential => _delegate.credential; + + /// Returns a [User] containing additional information and user specific + /// methods. + User? get user { + // TODO(rousselGit): cache the `user` instance or override == so that ".user == .user" + return _delegate.user == null ? null : User._(_auth, _delegate.user!); + } + + @override + String toString() { + return 'UserCredential(' + 'additionalUserInfo: $additionalUserInfo, ' + 'credential: $credential, ' + 'user: $user)'; + } +} diff --git a/mih_ui/android/build/ios/SourcePackages/firebase_auth-6.5.4/macos/firebase_auth.podspec b/mih_ui/android/build/ios/SourcePackages/firebase_auth-6.5.4/macos/firebase_auth.podspec new file mode 100755 index 00000000..4e5be544 --- /dev/null +++ b/mih_ui/android/build/ios/SourcePackages/firebase_auth-6.5.4/macos/firebase_auth.podspec @@ -0,0 +1,65 @@ +require 'yaml' + +pubspec = YAML.load_file(File.join('..', 'pubspec.yaml')) +library_version = pubspec['version'].gsub('+', '-') + +if defined?($FirebaseSDKVersion) + Pod::UI.puts "#{pubspec['name']}: Using user specified Firebase SDK version '#{$FirebaseSDKVersion}'" + firebase_sdk_version = $FirebaseSDKVersion +else + firebase_core_script = File.join(File.expand_path('..', File.expand_path('..', File.dirname(__FILE__))), 'firebase_core/ios/firebase_sdk_version.rb') + if File.exist?(firebase_core_script) + require firebase_core_script + firebase_sdk_version = firebase_sdk_version! + Pod::UI.puts "#{pubspec['name']}: Using Firebase SDK version '#{firebase_sdk_version}' defined in 'firebase_core'" + end +end + +begin + required_macos_version = "10.12" + current_target_definition = Pod::Config.instance.podfile.send(:current_target_definition) + user_osx_target = current_target_definition.to_hash["platform"]["osx"] + if (Gem::Version.new(user_osx_target) < Gem::Version.new(required_macos_version)) + error_message = "The FlutterFire plugin #{pubspec['name']} for macOS requires a macOS deployment target of #{required_macos_version} or later." + Pod::UI.warn error_message, [ + "Update the `platform :osx, '#{user_osx_target}'` line in your macOS/Podfile to version `#{required_macos_version}` and ensure you commit this file.", + "Open your `macos/Runner.xcodeproj` Xcode project and under the 'Runner' target General tab set your Deployment Target to #{required_macos_version} or later." + ] + raise Pod::Informative, error_message + end +rescue Pod::Informative + raise +rescue + # Do nothing for all other errors and let `pod install` deal with any issues. +end + +Pod::Spec.new do |s| + s.name = pubspec['name'] + s.version = library_version + s.summary = pubspec['description'] + s.description = pubspec['description'] + s.homepage = pubspec['homepage'] + s.license = { :file => '../LICENSE' } + s.authors = 'The Chromium Authors' + s.source = { :path => '.' } + + s.source_files = 'firebase_auth/Sources/firebase_auth/**/*.{h,m}' + s.public_header_files = 'firebase_auth/Sources/firebase_auth/include/Public/**/*.h' + s.private_header_files = 'firebase_auth/Sources/firebase_auth/include/Private/**/*.h' + + s.platform = :osx, '10.13' + + # Flutter dependencies + s.dependency 'FlutterMacOS' + + # Firebase dependencies + s.dependency 'firebase_core' + s.dependency 'Firebase/CoreOnly', "~> #{firebase_sdk_version}" + s.dependency 'Firebase/Auth', "~> #{firebase_sdk_version}" + + s.static_framework = true + s.pod_target_xcconfig = { + 'GCC_PREPROCESSOR_DEFINITIONS' => "LIBRARY_VERSION=\\\"#{library_version}\\\" LIBRARY_NAME=\\\"flutter-fire-auth\\\"", + 'DEFINES_MODULE' => 'YES' + } +end diff --git a/mih_ui/android/build/ios/SourcePackages/firebase_auth-6.5.4/macos/firebase_auth/Package.swift b/mih_ui/android/build/ios/SourcePackages/firebase_auth-6.5.4/macos/firebase_auth/Package.swift new file mode 100644 index 00000000..d6451507 --- /dev/null +++ b/mih_ui/android/build/ios/SourcePackages/firebase_auth-6.5.4/macos/firebase_auth/Package.swift @@ -0,0 +1,43 @@ +// swift-tools-version: 5.9 +// The swift-tools-version declares the minimum version of Swift required to build this package. + +// Copyright 2024, the Chromium project authors. Please see the AUTHORS file +// for details. All rights reserved. Use of this source code is governed by a +// BSD-style license that can be found in the LICENSE file. + +import PackageDescription + +let libraryVersion = "6.5.4" +let firebaseSdkVersion: Version = "12.15.0" + +let package = Package( + name: "firebase_auth", + platforms: [ + .macOS("10.15") + ], + products: [ + .library(name: "firebase-auth", targets: ["firebase_auth"]) + ], + dependencies: [ + .package(url: "https://github.com/firebase/firebase-ios-sdk", exact: firebaseSdkVersion), + .package(name: "firebase_core", path: "../firebase_core"), + ], + targets: [ + .target( + name: "firebase_auth", + dependencies: [ + .product(name: "FirebaseAuth", package: "firebase-ios-sdk"), + .product(name: "firebase-core", package: "firebase_core"), + ], + resources: [ + .process("Resources") + ], + cSettings: [ + .headerSearchPath("include/Private"), + .headerSearchPath("include/Public"), + .define("LIBRARY_VERSION", to: "\"\(libraryVersion)\""), + .define("LIBRARY_NAME", to: "\"flutter-fire-auth\""), + ] + ) + ] +) diff --git a/mih_ui/android/build/ios/SourcePackages/firebase_auth-6.5.4/macos/firebase_auth/Sources/firebase_auth/FLTAuthStateChannelStreamHandler.m b/mih_ui/android/build/ios/SourcePackages/firebase_auth-6.5.4/macos/firebase_auth/Sources/firebase_auth/FLTAuthStateChannelStreamHandler.m new file mode 100644 index 00000000..5ef9adaf --- /dev/null +++ b/mih_ui/android/build/ios/SourcePackages/firebase_auth-6.5.4/macos/firebase_auth/Sources/firebase_auth/FLTAuthStateChannelStreamHandler.m @@ -0,0 +1,56 @@ +// Copyright 2021 The Chromium Authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. +@import FirebaseAuth; +#import "include/Private/FLTAuthStateChannelStreamHandler.h" +#import +#import "include/Private/PigeonParser.h" +#import "include/Public/FLTFirebaseAuthPlugin.h" + +@implementation FLTAuthStateChannelStreamHandler { + FIRAuth *_auth; + FIRAuthStateDidChangeListenerHandle _listener; +} + +- (instancetype)initWithAuth:(FIRAuth *)auth { + self = [super init]; + if (self) { + _auth = auth; + } + return self; +} + +- (FlutterError *)onListenWithArguments:(id)arguments eventSink:(FlutterEventSink)events { + bool __block initialAuthState = YES; + + _listener = [_auth addAuthStateDidChangeListener:^(FIRAuth *_Nonnull auth, + FIRUser *_Nullable user) { + if (initialAuthState) { + initialAuthState = NO; + return; + } + + if (user) { + events(@{ + @"user" : [PigeonParser getManualList:[PigeonParser getPigeonDetails:[auth currentUser]]] + }); + } else { + events(@{ + @"user" : [NSNull null], + }); + } + }]; + + return nil; +} + +- (FlutterError *)onCancelWithArguments:(id)arguments { + if (_listener) { + [_auth removeAuthStateDidChangeListener:_listener]; + } + _listener = nil; + + return nil; +} + +@end diff --git a/mih_ui/android/build/ios/SourcePackages/firebase_auth-6.5.4/macos/firebase_auth/Sources/firebase_auth/FLTFirebaseAuthPlugin.m b/mih_ui/android/build/ios/SourcePackages/firebase_auth-6.5.4/macos/firebase_auth/Sources/firebase_auth/FLTFirebaseAuthPlugin.m new file mode 100644 index 00000000..606dda68 --- /dev/null +++ b/mih_ui/android/build/ios/SourcePackages/firebase_auth-6.5.4/macos/firebase_auth/Sources/firebase_auth/FLTFirebaseAuthPlugin.m @@ -0,0 +1,2376 @@ +// Copyright 2020 The Chromium Authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +@import FirebaseAuth; +#import +#import +#if __has_include() +#import +#else +#import +#endif + +#import "include/Private/FLTAuthStateChannelStreamHandler.h" +#import "include/Private/FLTIdTokenChannelStreamHandler.h" +#import "include/Private/FLTPhoneNumberVerificationStreamHandler.h" +#import "include/Private/PigeonParser.h" + +#import "include/Public/CustomPigeonHeader.h" +#import "include/Public/FLTFirebaseAuthPlugin.h" +@import CommonCrypto; +#import + +#if __has_include() +#import +#else +#import +#endif + +NSString *const kFLTFirebaseAuthChannelName = @"plugins.flutter.io/firebase_auth"; + +// Argument Keys +NSString *const kAppName = @"appName"; + +// Provider type keys. +NSString *const kSignInMethodPassword = @"password"; +NSString *const kSignInMethodEmailLink = @"emailLink"; +NSString *const kSignInMethodFacebook = @"facebook.com"; +NSString *const kSignInMethodGoogle = @"google.com"; +NSString *const kSignInMethodGameCenter = @"gc.apple.com"; +NSString *const kSignInMethodTwitter = @"twitter.com"; +NSString *const kSignInMethodGithub = @"github.com"; +NSString *const kSignInMethodApple = @"apple.com"; +NSString *const kSignInMethodPhone = @"phone"; +NSString *const kSignInMethodOAuth = @"oauth"; + +// Credential argument keys. +NSString *const kArgumentCredential = @"credential"; +NSString *const kArgumentProviderId = @"providerId"; +NSString *const kArgumentProviderScope = @"scopes"; +NSString *const kArgumentProviderCustomParameters = @"customParameters"; +NSString *const kArgumentSignInMethod = @"signInMethod"; +NSString *const kArgumentSecret = @"secret"; +NSString *const kArgumentIdToken = @"idToken"; +NSString *const kArgumentAccessToken = @"accessToken"; +NSString *const kArgumentRawNonce = @"rawNonce"; +NSString *const kArgumentEmail = @"email"; +NSString *const kArgumentCode = @"code"; +NSString *const kArgumentNewEmail = @"newEmail"; +NSString *const kArgumentEmailLink = kSignInMethodEmailLink; +NSString *const kArgumentToken = @"token"; +NSString *const kArgumentVerificationId = @"verificationId"; +NSString *const kArgumentSmsCode = @"smsCode"; +NSString *const kArgumentActionCodeSettings = @"actionCodeSettings"; +NSString *const kArgumentFamilyName = @"familyName"; +NSString *const kArgumentGivenName = @"givenName"; +NSString *const kArgumentMiddleName = @"middleName"; +NSString *const kArgumentNickname = @"nickname"; +NSString *const kArgumentNamePrefix = @"namePrefix"; +NSString *const kArgumentNameSuffix = @"nameSuffix"; + +// MultiFactor +NSString *const kArgumentMultiFactorHints = @"multiFactorHints"; +NSString *const kArgumentMultiFactorSessionId = @"multiFactorSessionId"; +NSString *const kArgumentMultiFactorResolverId = @"multiFactorResolverId"; +NSString *const kArgumentMultiFactorInfo = @"multiFactorInfo"; + +// Manual error codes & messages. +NSString *const kErrCodeNoCurrentUser = @"no-current-user"; +NSString *const kErrMsgNoCurrentUser = @"No user currently signed in."; +NSString *const kErrCodeInvalidCredential = @"invalid-credential"; +NSString *const kErrMsgInvalidCredential = + @"The supplied auth credential is malformed, has expired or is not " + @"currently supported."; + +// Used for caching credentials between Method Channel method calls. +static NSMutableDictionary *credentialsMap; + +@interface FLTFirebaseAuthPlugin () +@property(nonatomic, retain) NSObject *messenger; +@property(strong, nonatomic) FIROAuthProvider *authProvider; +// Used to keep the user who wants to link with Apple Sign In +@property(strong, nonatomic) FIRUser *linkWithAppleUser; +@property(strong, nonatomic) FIRAuth *signInWithAppleAuth; +@property BOOL isReauthenticatingWithApple; +@property(strong, nonatomic) NSString *currentNonce; +@property(strong, nonatomic) void (^appleCompletion) + (InternalUserCredential *_Nullable, FlutterError *_Nullable); +@property(strong, nonatomic) AuthPigeonFirebaseApp *appleArguments; +/// YES while an `ASAuthorizationController` Sign in with Apple flow is active. +@property(nonatomic, assign) BOOL appleSignInRequestInFlight; + +@end + +@implementation FLTFirebaseAuthPlugin { + // Map an id to a MultiFactorSession object. + NSMutableDictionary *_multiFactorSessionMap; + + // Map an id to a MultiFactorResolver object. + NSMutableDictionary *_multiFactorResolverMap; + + // Map an id to a MultiFactorResolver object. + NSMutableDictionary *_multiFactorAssertionMap; + + // Map an id to a MultiFactorResolver object. + NSMutableDictionary *_multiFactorTotpSecretMap; + + // Emulator host/port per app, used to build REST URLs for workarounds. + NSMutableDictionary *_emulatorConfigs; + + NSObject *_binaryMessenger; + NSMutableDictionary *_eventChannels; + NSMutableDictionary *> *_streamHandlers; + NSData *_apnsToken; +} + +#pragma mark - FlutterPlugin + +- (instancetype)init:(NSObject *)messenger { + self = [super init]; + if (self) { + [[FLTFirebasePluginRegistry sharedInstance] registerFirebasePlugin:self]; + credentialsMap = [NSMutableDictionary dictionary]; + _binaryMessenger = messenger; + _eventChannels = [NSMutableDictionary dictionary]; + _streamHandlers = [NSMutableDictionary dictionary]; + + _multiFactorSessionMap = [NSMutableDictionary dictionary]; + _multiFactorResolverMap = [NSMutableDictionary dictionary]; + _multiFactorAssertionMap = [NSMutableDictionary dictionary]; + _multiFactorTotpSecretMap = [NSMutableDictionary dictionary]; + _emulatorConfigs = [NSMutableDictionary dictionary]; + } + return self; +} + ++ (void)registerWithRegistrar:(NSObject *)registrar { + FlutterMethodChannel *channel = + [FlutterMethodChannel methodChannelWithName:kFLTFirebaseAuthChannelName + binaryMessenger:[registrar messenger]]; + FLTFirebaseAuthPlugin *instance = [[FLTFirebaseAuthPlugin alloc] init:registrar.messenger]; + + [registrar addMethodCallDelegate:instance channel:channel]; + + [registrar publish:instance]; + [registrar addApplicationDelegate:instance]; +#if !TARGET_OS_OSX + if (@available(iOS 13.0, *)) { + if ([registrar respondsToSelector:@selector(addSceneDelegate:)]) { + [registrar performSelector:@selector(addSceneDelegate:) withObject:instance]; + } + } +#endif + SetUpFirebaseAuthHostApi(registrar.messenger, instance); + SetUpFirebaseAuthUserHostApi(registrar.messenger, instance); + SetUpMultiFactorUserHostApi(registrar.messenger, instance); + SetUpMultiFactoResolverHostApi(registrar.messenger, instance); + SetUpMultiFactorTotpHostApi(registrar.messenger, instance); + SetUpMultiFactorTotpSecretHostApi(registrar.messenger, instance); +} + ++ (FlutterError *)convertToFlutterError:(NSError *)error { + NSString *code = @"unknown"; + NSString *message = @"An unknown error has occurred."; + + if (error == nil) { + return [FlutterError errorWithCode:code message:message details:@{}]; + } + + // code + if ([error userInfo][FIRAuthErrorUserInfoNameKey] != nil) { + // See [FIRAuthErrorCodeString] for list of codes. + // Codes are in the format "ERROR_SOME_NAME", converting below to the format + // required in Dart. ERROR_SOME_NAME -> SOME_NAME + NSString *firebaseErrorCode = [error userInfo][FIRAuthErrorUserInfoNameKey]; + code = [firebaseErrorCode stringByReplacingOccurrencesOfString:@"ERROR_" withString:@""]; + // SOME_NAME -> SOME-NAME + code = [code stringByReplacingOccurrencesOfString:@"_" withString:@"-"]; + // SOME-NAME -> some-name + code = [code lowercaseString]; + } + + // message + if ([error userInfo][NSLocalizedDescriptionKey] != nil) { + message = [error userInfo][NSLocalizedDescriptionKey]; + } + + NSMutableDictionary *additionalData = [NSMutableDictionary dictionary]; + // additionalData.email + if ([error userInfo][FIRAuthErrorUserInfoEmailKey] != nil) { + additionalData[kArgumentEmail] = [error userInfo][FIRAuthErrorUserInfoEmailKey]; + } + // We want to store the credential if present for future sign in if the exception contains a + // credential, we pass a token back to Flutter to allow retrieval of the credential. + NSNumber *token = [FLTFirebaseAuthPlugin storeAuthCredentialIfPresent:error]; + + // additionalData.authCredential + if ([error userInfo][FIRAuthErrorUserInfoUpdatedCredentialKey] != nil) { + FIRAuthCredential *authCredential = [error userInfo][FIRAuthErrorUserInfoUpdatedCredentialKey]; + additionalData[@"authCredential"] = [PigeonParser getPigeonAuthCredential:authCredential + token:token]; + } + + // Manual message overrides to ensure messages/codes matches other platforms. + if ([message isEqual:@"The password must be 6 characters long or more."]) { + message = @"Password should be at least 6 characters"; + } + + return [FlutterError errorWithCode:code message:message details:additionalData]; +} + ++ (id)getNSDictionaryFromAuthCredential:(FIRAuthCredential *)authCredential { + if (authCredential == nil) { + return [NSNull null]; + } + + NSString *accessToken = nil; + if ([authCredential isKindOfClass:[FIROAuthCredential class]]) { + if (((FIROAuthCredential *)authCredential).accessToken != nil) { + accessToken = ((FIROAuthCredential *)authCredential).accessToken; + } else if (((FIROAuthCredential *)authCredential).IDToken != nil) { + // For Sign In With Apple, the token is stored in IDToken + accessToken = ((FIROAuthCredential *)authCredential).IDToken; + } + } + + return @{ + kArgumentProviderId : authCredential.provider, + // Note: "signInMethod" does not exist on iOS SDK, so using provider + // instead. + kArgumentSignInMethod : authCredential.provider, + kArgumentToken : @([authCredential hash]), + kArgumentAccessToken : accessToken ?: [NSNull null], + }; +} + +- (void)cleanupWithCompletion:(void (^)(void))completion { + // Cleanup credentials. + [credentialsMap removeAllObjects]; + + for (FlutterEventChannel *channel in self->_eventChannels.allValues) { + [channel setStreamHandler:nil]; + } + [self->_eventChannels removeAllObjects]; + for (NSObject *handler in self->_streamHandlers.allValues) { + [handler onCancelWithArguments:nil]; + } + [self->_streamHandlers removeAllObjects]; + + if (completion != nil) completion(); +} + +- (void)detachFromEngineForRegistrar:(NSObject *)registrar { + [self cleanupWithCompletion:nil]; +} + +#pragma mark - AppDelegate + +#if TARGET_OS_IPHONE +#if !__has_include() +- (BOOL)application:(UIApplication *)application + didReceiveRemoteNotification:(NSDictionary *)notification + fetchCompletionHandler:(void (^)(UIBackgroundFetchResult result))completionHandler { + if ([[FIRAuth auth] canHandleNotification:notification]) { + completionHandler(UIBackgroundFetchResultNoData); + return YES; + } + return NO; +} +#endif + +- (void)application:(UIApplication *)application + didRegisterForRemoteNotificationsWithDeviceToken:(NSData *)deviceToken { + _apnsToken = deviceToken; +} + +- (BOOL)application:(UIApplication *)app openURL:(NSURL *)url options:(NSDictionary *)options { + return [[FIRAuth auth] canHandleURL:url]; +} + +#pragma mark - SceneDelegate + +- (BOOL)scene:(UIScene *)scene + openURLContexts:(NSSet *)URLContexts API_AVAILABLE(ios(13.0)) { + for (UIOpenURLContext *urlContext in URLContexts) { + if ([[FIRAuth auth] canHandleURL:urlContext.URL]) { + return YES; + } + } + return NO; +} +#endif + +#pragma mark - FLTFirebasePlugin + +- (void)didReinitializeFirebaseCore:(void (^_Nonnull)(void))completion { + [self cleanupWithCompletion:completion]; +} + +- (NSString *_Nonnull)firebaseLibraryName { + return @LIBRARY_NAME; +} + +- (NSString *_Nonnull)firebaseLibraryVersion { + return @LIBRARY_VERSION; +} + +- (NSString *_Nonnull)flutterChannelName { + return kFLTFirebaseAuthChannelName; +} + +- (NSDictionary *_Nonnull)pluginConstantsForFIRApp:(FIRApp *_Nonnull)firebaseApp { + FIRAuth *auth = [FIRAuth authWithApp:firebaseApp]; + return @{ + @"APP_LANGUAGE_CODE" : (id)[auth languageCode] ?: [NSNull null], + @"APP_CURRENT_USER" : [auth currentUser] + ? [PigeonParser getManualList:[PigeonParser getPigeonDetails:[auth currentUser]]] + : [NSNull null], + }; +} + +#pragma mark - Firebase Auth API + +// Adapted from +// https://auth0.com/docs/api-auth/tutorials/nonce#generate-a-cryptographically-random-nonce Used +// for Apple Sign In +- (NSString *)randomNonce:(NSInteger)length { + NSAssert(length > 0, @"Expected nonce to have positive length"); + NSString *characterSet = @"0123456789ABCDEFGHIJKLMNOPQRSTUVXYZabcdefghijklmnopqrstuvwxyz-._"; + NSMutableString *result = [NSMutableString string]; + NSInteger remainingLength = length; + + while (remainingLength > 0) { + NSMutableArray *randoms = [NSMutableArray arrayWithCapacity:16]; + for (NSInteger i = 0; i < 16; i++) { + uint8_t random = 0; + int errorCode = SecRandomCopyBytes(kSecRandomDefault, 1, &random); + NSAssert(errorCode == errSecSuccess, @"Unable to generate nonce: OSStatus %i", errorCode); + + [randoms addObject:@(random)]; + } + + for (NSNumber *random in randoms) { + if (remainingLength == 0) { + break; + } + + if (random.unsignedIntValue < characterSet.length) { + unichar character = [characterSet characterAtIndex:random.unsignedIntValue]; + [result appendFormat:@"%C", character]; + remainingLength--; + } + } + } + + return [result copy]; +} + +- (NSString *)stringBySha256HashingString:(NSString *)input { + const char *string = [input UTF8String]; + unsigned char result[CC_SHA256_DIGEST_LENGTH]; + CC_SHA256(string, (CC_LONG)strlen(string), result); + + NSMutableString *hashed = [NSMutableString stringWithCapacity:CC_SHA256_DIGEST_LENGTH * 2]; + for (NSInteger i = 0; i < CC_SHA256_DIGEST_LENGTH; i++) { + [hashed appendFormat:@"%02x", result[i]]; + } + return hashed; +} + +static void handleSignInWithApple(FLTFirebaseAuthPlugin *object, FIRAuthDataResult *authResult, + NSString *authorizationCode, NSError *error) { + void (^completion)(InternalUserCredential *_Nullable, FlutterError *_Nullable) = + object.appleCompletion; + if (completion == nil) { + object.appleSignInRequestInFlight = NO; + return; + } + + if (error != nil) { + if (error.code == FIRAuthErrorCodeSecondFactorRequired) { + object.appleCompletion = nil; + object.appleSignInRequestInFlight = NO; + [object handleMultiFactorError:object.appleArguments completion:completion withError:error]; + } else { + object.appleCompletion = nil; + object.appleSignInRequestInFlight = NO; + completion(nil, [FLTFirebaseAuthPlugin convertToFlutterError:error]); + } + return; + } + object.appleCompletion = nil; + object.appleSignInRequestInFlight = NO; + completion([PigeonParser getPigeonUserCredentialFromAuthResult:authResult + authorizationCode:authorizationCode], + nil); +} + +- (void)authorizationController:(ASAuthorizationController *)controller + didCompleteWithAuthorization:(ASAuthorization *)authorization + API_AVAILABLE(macos(10.15), ios(13.0)) { + if ([authorization.credential isKindOfClass:[ASAuthorizationAppleIDCredential class]]) { + ASAuthorizationAppleIDCredential *appleIDCredential = authorization.credential; + NSString *rawNonce = self.currentNonce; + NSAssert(rawNonce != nil, + @"Invalid state: A login callback was received, but no login request was sent."); + + if (appleIDCredential.identityToken == nil) { + NSLog(@"Unable to fetch identity token."); + void (^completion)(InternalUserCredential *_Nullable, FlutterError *_Nullable) = + self.appleCompletion; + self.appleCompletion = nil; + self.appleSignInRequestInFlight = NO; + if (completion != nil) { + completion(nil, [FlutterError errorWithCode:kErrCodeInvalidCredential + message:kErrMsgInvalidCredential + details:nil]); + } + return; + } + + NSString *idToken = [[NSString alloc] initWithData:appleIDCredential.identityToken + encoding:NSUTF8StringEncoding]; + if (idToken == nil) { + NSLog(@"Unable to serialize id token from data: %@", appleIDCredential.identityToken); + } + + NSString *authorizationCode = nil; + if (appleIDCredential.authorizationCode != nil) { + authorizationCode = [[NSString alloc] initWithData:appleIDCredential.authorizationCode + encoding:NSUTF8StringEncoding]; + } + + FIROAuthCredential *credential = + [FIROAuthProvider appleCredentialWithIDToken:idToken + rawNonce:rawNonce + fullName:appleIDCredential.fullName]; + + if (self.isReauthenticatingWithApple == YES) { + self.isReauthenticatingWithApple = NO; + void (^capturedCompletion)(InternalUserCredential *_Nullable, FlutterError *_Nullable) = + self.appleCompletion; + [[FIRAuth.auth currentUser] + reauthenticateWithCredential:credential + completion:^(FIRAuthDataResult *_Nullable authResult, + NSError *_Nullable error) { + handleSignInWithApple(self, authResult, authorizationCode, error); + }]; + + } else if (self.linkWithAppleUser != nil) { + FIRUser *userToLink = self.linkWithAppleUser; + void (^capturedCompletion)(InternalUserCredential *_Nullable, FlutterError *_Nullable) = + self.appleCompletion; + [userToLink linkWithCredential:credential + completion:^(FIRAuthDataResult *authResult, NSError *error) { + self.linkWithAppleUser = nil; + handleSignInWithApple(self, authResult, authorizationCode, error); + }]; + + } else { + FIRAuth *signInAuth = + self.signInWithAppleAuth != nil ? self.signInWithAppleAuth : FIRAuth.auth; + void (^capturedCompletion)(InternalUserCredential *_Nullable, FlutterError *_Nullable) = + self.appleCompletion; + [signInAuth signInWithCredential:credential + completion:^(FIRAuthDataResult *_Nullable authResult, + NSError *_Nullable error) { + self.signInWithAppleAuth = nil; + handleSignInWithApple(self, authResult, authorizationCode, error); + }]; + } + } else { + void (^completion)(InternalUserCredential *_Nullable, FlutterError *_Nullable) = + self.appleCompletion; + self.appleCompletion = nil; + self.appleSignInRequestInFlight = NO; + if (completion != nil) { + completion(nil, [FlutterError errorWithCode:kErrCodeInvalidCredential + message:kErrMsgInvalidCredential + details:nil]); + } + } +} + +- (void)authorizationController:(ASAuthorizationController *)controller + didCompleteWithError:(NSError *)error API_AVAILABLE(macos(10.15), ios(13.0)) { + void (^completion)(InternalUserCredential *_Nullable, FlutterError *_Nullable) = + self.appleCompletion; + self.appleCompletion = nil; + self.appleSignInRequestInFlight = NO; + + NSLog(@"Sign in with Apple errored: %@", error); + if (completion == nil) { + return; + } + + switch (error.code) { + case ASAuthorizationErrorCanceled: + completion(nil, [FlutterError errorWithCode:@"canceled" + message:@"The user canceled the authorization attempt." + details:nil]); + break; + + case ASAuthorizationErrorInvalidResponse: + completion(nil, [FlutterError + errorWithCode:@"invalid-response" + message:@"The authorization request received an invalid response." + details:nil]); + break; + + case ASAuthorizationErrorNotHandled: + completion(nil, [FlutterError errorWithCode:@"not-handled" + message:@"The authorization request wasn’t handled." + details:nil]); + break; + + case ASAuthorizationErrorFailed: + completion(nil, [FlutterError errorWithCode:@"failed" + message:@"The authorization attempt failed." + details:nil]); + break; + + case ASAuthorizationErrorUnknown: + default: + completion(nil, [FLTFirebaseAuthPlugin convertToFlutterError:error]); + break; + } +} + +- (void)handleInternalError:(nonnull void (^)(InternalUserCredential *_Nullable, + FlutterError *_Nullable))completion + withError:(NSError *)error { + const NSError *underlyingError = error.userInfo[@"NSUnderlyingError"]; + if (underlyingError != nil) { + const NSDictionary *details = + underlyingError.userInfo[@"FIRAuthErrorUserInfoDeserializedResponseKey"]; + completion(nil, [FlutterError errorWithCode:@"internal-error" + message:error.description + details:details]); + return; + } + completion(nil, [FlutterError errorWithCode:@"internal-error" + message:error.description + details:nil]); +} + +- (void)handleMultiFactorError:(AuthPigeonFirebaseApp *)app + completion:(nonnull void (^)(InternalUserCredential *_Nullable, + FlutterError *_Nullable))completion + withError:(NSError *_Nullable)error { + FIRMultiFactorResolver *resolver = + (FIRMultiFactorResolver *)error.userInfo[FIRAuthErrorUserInfoMultiFactorResolverKey]; + + NSArray *hints = resolver.hints; + FIRMultiFactorSession *session = resolver.session; + + NSString *sessionId = [[NSUUID UUID] UUIDString]; + self->_multiFactorSessionMap[sessionId] = session; + + NSString *resolverId = [[NSUUID UUID] UUIDString]; + self->_multiFactorResolverMap[resolverId] = resolver; + + NSMutableArray *pigeonHints = [NSMutableArray array]; + + for (FIRMultiFactorInfo *multiFactorInfo in hints) { + NSString *phoneNumber; + if ([multiFactorInfo class] == [FIRPhoneMultiFactorInfo class]) { + FIRPhoneMultiFactorInfo *phoneFactorInfo = (FIRPhoneMultiFactorInfo *)multiFactorInfo; + phoneNumber = phoneFactorInfo.phoneNumber; + } + + InternalMultiFactorInfo *object = [InternalMultiFactorInfo + makeWithDisplayName:multiFactorInfo.displayName + enrollmentTimestamp:multiFactorInfo.enrollmentDate.timeIntervalSince1970 + factorId:multiFactorInfo.factorID + uid:multiFactorInfo.UID + phoneNumber:phoneNumber]; + + [pigeonHints addObject:object.toList]; + } + + NSDictionary *output = @{ + kAppName : app.appName, + kArgumentMultiFactorHints : pigeonHints, + kArgumentMultiFactorSessionId : sessionId, + kArgumentMultiFactorResolverId : resolverId, + }; + completion(nil, [FlutterError errorWithCode:@"second-factor-required" + message:error.description + details:output]); +} + +static void launchAppleSignInRequest(FLTFirebaseAuthPlugin *object, AuthPigeonFirebaseApp *app, + InternalSignInProvider *signInProvider, + void (^_Nonnull completion)(InternalUserCredential *_Nullable, + FlutterError *_Nullable)) { + if (@available(iOS 13.0, macOS 10.15, *)) { + if (object.appleSignInRequestInFlight) { + completion(nil, + [FlutterError errorWithCode:@"operation-not-allowed" + message:@"A Sign in with Apple request is already in progress." + details:nil]); + return; + } + + NSString *nonce = [object randomNonce:32]; + object.currentNonce = nonce; + object.appleCompletion = completion; + object.appleArguments = app; + object.appleSignInRequestInFlight = YES; + + ASAuthorizationAppleIDProvider *appleIDProvider = [[ASAuthorizationAppleIDProvider alloc] init]; + + ASAuthorizationAppleIDRequest *request = [appleIDProvider createRequest]; + NSMutableArray *requestedScopes = [NSMutableArray arrayWithCapacity:2]; + if ([signInProvider.scopes containsObject:@"name"]) { + [requestedScopes addObject:ASAuthorizationScopeFullName]; + } + if ([signInProvider.scopes containsObject:@"email"]) { + [requestedScopes addObject:ASAuthorizationScopeEmail]; + } + request.requestedScopes = [requestedScopes copy]; + request.nonce = [object stringBySha256HashingString:nonce]; + + ASAuthorizationController *authorizationController = + [[ASAuthorizationController alloc] initWithAuthorizationRequests:@[ request ]]; + authorizationController.delegate = object; + authorizationController.presentationContextProvider = object; + [authorizationController performRequests]; + } else { + NSLog(@"Sign in with Apple was introduced in iOS 13, update your Podfile with platform :ios, " + @"'13.0'"); + } +} + +static void handleAppleAuthResult(FLTFirebaseAuthPlugin *object, AuthPigeonFirebaseApp *app, + FIRAuth *auth, FIRAuthCredential *credentials, NSError *error, + void (^_Nonnull completion)(InternalUserCredential *_Nullable, + FlutterError *_Nullable)) { + if (error) { + if (error.code == FIRAuthErrorCodeSecondFactorRequired) { + [object handleMultiFactorError:app completion:completion withError:error]; + } else { + completion(nil, [FLTFirebaseAuthPlugin convertToFlutterError:error]); + } + return; + } + if (credentials) { + [auth + signInWithCredential:credentials + completion:^(FIRAuthDataResult *authResult, NSError *error) { + if (error != nil) { + NSDictionary *userInfo = [error userInfo]; + NSError *underlyingError = [userInfo objectForKey:NSUnderlyingErrorKey]; + + NSDictionary *firebaseDictionary = + underlyingError.userInfo[@"FIRAuthErrorUserInfoDes" + @"erializedResponseKey"]; + + NSString *errorCode = userInfo[@"FIRAuthErrorUserInfoNameKey"]; + + if (firebaseDictionary == nil && errorCode != nil) { + if ([errorCode isEqual:@"ERROR_ACCOUNT_EXISTS_WITH_DIFFERENT_CREDENTIAL"]) { + completion(nil, [FLTFirebaseAuthPlugin convertToFlutterError:error]); + return; + } + + // Removing since it's not parsed and causing issue when sending back the + // object to Flutter + NSMutableDictionary *mutableUserInfo = [userInfo mutableCopy]; + [mutableUserInfo + removeObjectForKey:@"FIRAuthErrorUserInfoUpdatedCredentialKey"]; + NSError *modifiedError = [NSError errorWithDomain:error.domain + code:error.code + userInfo:mutableUserInfo]; + + completion(nil, + [FlutterError errorWithCode:@"sign-in-failed" + message:userInfo[@"NSLocalizedDescription"] + details:modifiedError.userInfo]); + + } else if (firebaseDictionary != nil && + firebaseDictionary[@"message"] != nil) { + // error from firebase-ios-sdk is + // buried in underlying error. + completion(nil, + [FlutterError errorWithCode:@"sign-in-failed" + message:error.localizedDescription + details:firebaseDictionary[@"message"]]); + } else { + completion(nil, [FlutterError errorWithCode:@"sign-in-failed" + message:error.localizedDescription + details:error.userInfo]); + } + } else { + completion([PigeonParser getPigeonUserCredentialFromAuthResult:authResult + authorizationCode:nil], + nil); + } + }]; + } +} + +#pragma mark - Utilities + ++ (NSNumber *_Nullable)storeAuthCredentialIfPresent:(NSError *)error { + if ([error userInfo][FIRAuthErrorUserInfoUpdatedCredentialKey] != nil) { + FIRAuthCredential *authCredential = [error userInfo][FIRAuthErrorUserInfoUpdatedCredentialKey]; + // We temporarily store the non-serializable credential so the + // Dart API can consume these at a later time. + NSNumber *authCredentialHash = @([authCredential hash]); + credentialsMap[authCredentialHash] = authCredential; + return authCredentialHash; + } + return nil; +} + +- (FIRAuth *_Nullable)getFIRAuthFromAppNameFromPigeon:(AuthPigeonFirebaseApp *)pigeonApp { + FIRApp *app = [FLTFirebasePlugin firebaseAppNamed:pigeonApp.appName]; + FIRAuth *auth = [FIRAuth authWithApp:app]; + + auth.tenantID = pigeonApp.tenantId; + auth.customAuthDomain = [FLTFirebaseCorePlugin getCustomDomain:app.name]; + // Auth's `customAuthDomain` supersedes value from `getCustomDomain` set by `initializeApp` + if (pigeonApp.customAuthDomain != nil) { + auth.customAuthDomain = pigeonApp.customAuthDomain; + } + + return auth; +} + +- (void)getFIRAuthCredentialFromArguments:(NSDictionary *)arguments + app:(AuthPigeonFirebaseApp *)app + completion:(void (^)(FIRAuthCredential *credential, + NSError *error))completion { + // If the credential dictionary contains a token, it means a native one has + // been stored for later usage, so we'll attempt to retrieve it here. + if (arguments[kArgumentToken] != nil && ![arguments[kArgumentToken] isEqual:[NSNull null]]) { + NSNumber *credentialHashCode = arguments[kArgumentToken]; + if (credentialsMap[credentialHashCode] != nil) { + completion(credentialsMap[credentialHashCode], nil); + return; + } + } + + NSString *signInMethod = arguments[kArgumentSignInMethod]; + + if ([signInMethod isEqualToString:kSignInMethodGameCenter]) { + // Game Center Games is different to other providers, it requires below callback to get a + // credential. This is why getFIRAuthCredentialFromArguments now requires a completion() + // callback + [FIRGameCenterAuthProvider + getCredentialWithCompletion:^(FIRAuthCredential *credential, NSError *error) { + if (error) { + completion(nil, error); + } else { + completion(credential, nil); + } + }]; + return; + } + + NSString *secret = arguments[kArgumentSecret] == [NSNull null] ? nil : arguments[kArgumentSecret]; + NSString *idToken = + arguments[kArgumentIdToken] == [NSNull null] ? nil : arguments[kArgumentIdToken]; + NSString *accessToken = + arguments[kArgumentAccessToken] == [NSNull null] ? nil : arguments[kArgumentAccessToken]; + NSString *rawNonce = + arguments[kArgumentRawNonce] == [NSNull null] ? nil : arguments[kArgumentRawNonce]; + + // Password Auth + if ([signInMethod isEqualToString:kSignInMethodPassword]) { + NSString *email = arguments[kArgumentEmail]; + completion([FIREmailAuthProvider credentialWithEmail:email password:secret], nil); + return; + } + + // Email Link Auth + if ([signInMethod isEqualToString:kSignInMethodEmailLink]) { + NSString *email = arguments[kArgumentEmail]; + NSString *emailLink = arguments[kArgumentEmailLink]; + completion([FIREmailAuthProvider credentialWithEmail:email link:emailLink], nil); + return; + } + + // Facebook Auth + if ([signInMethod isEqualToString:kSignInMethodFacebook]) { + completion([FIRFacebookAuthProvider credentialWithAccessToken:accessToken], nil); + return; + } + + // Google Auth + if ([signInMethod isEqualToString:kSignInMethodGoogle]) { + completion([FIRGoogleAuthProvider credentialWithIDToken:idToken accessToken:accessToken], nil); + return; + } + + // Twitter Auth + if ([signInMethod isEqualToString:kSignInMethodTwitter]) { + completion([FIRTwitterAuthProvider credentialWithToken:accessToken secret:secret], nil); + return; + } + + // GitHub Auth + if ([signInMethod isEqualToString:kSignInMethodGithub]) { + completion([FIRGitHubAuthProvider credentialWithToken:accessToken], nil); + return; + } + + // Phone Auth - Only supported on iOS + if ([signInMethod isEqualToString:kSignInMethodPhone]) { +#if TARGET_OS_IPHONE + NSString *verificationId = arguments[kArgumentVerificationId]; + NSString *smsCode = arguments[kArgumentSmsCode]; + completion([[FIRPhoneAuthProvider providerWithAuth:[self getFIRAuthFromAppNameFromPigeon:app]] + credentialWithVerificationID:verificationId + verificationCode:smsCode], + nil); + return; +#else + NSLog(@"The Firebase Phone Authentication provider is not supported on the " + @"MacOS platform."); + completion(nil, nil); + return; +#endif + } + // Apple Auth + if ([signInMethod isEqualToString:kSignInMethodApple]) { + if (idToken && rawNonce) { + // Credential with idToken, rawNonce and fullName + NSPersonNameComponents *fullName = [[NSPersonNameComponents alloc] init]; + fullName.givenName = + arguments[kArgumentGivenName] == [NSNull null] ? nil : arguments[kArgumentGivenName]; + fullName.familyName = + arguments[kArgumentFamilyName] == [NSNull null] ? nil : arguments[kArgumentFamilyName]; + fullName.nickname = + arguments[kArgumentNickname] == [NSNull null] ? nil : arguments[kArgumentNickname]; + fullName.namePrefix = + arguments[kArgumentNamePrefix] == [NSNull null] ? nil : arguments[kArgumentNamePrefix]; + fullName.nameSuffix = + arguments[kArgumentNameSuffix] == [NSNull null] ? nil : arguments[kArgumentNameSuffix]; + fullName.middleName = + arguments[kArgumentMiddleName] == [NSNull null] ? nil : arguments[kArgumentMiddleName]; + + completion([FIROAuthProvider appleCredentialWithIDToken:idToken + rawNonce:rawNonce + fullName:fullName], + nil); + return; + } + } + // OAuth + if ([signInMethod isEqualToString:kSignInMethodOAuth]) { + NSString *providerId = arguments[kArgumentProviderId]; + completion([FIROAuthProvider credentialWithProviderID:providerId + IDToken:idToken + rawNonce:rawNonce + accessToken:accessToken], + nil); + return; + } + + NSLog(@"Support for an auth provider with identifier '%@' is not implemented.", signInMethod); + completion(nil, nil); + return; +} + +- (void)ensureAPNSTokenSetting { +#if !TARGET_OS_OSX + FIRApp *defaultApp = [FIRApp defaultApp]; + if (defaultApp) { + if ([FIRAuth auth].APNSToken == nil && _apnsToken != nil) { + [[FIRAuth auth] setAPNSToken:_apnsToken type:FIRAuthAPNSTokenTypeUnknown]; + _apnsToken = nil; + } + } +#endif +} + +- (FIRMultiFactor *)getAppMultiFactorFromPigeon:(nonnull AuthPigeonFirebaseApp *)app { + FIRAuth *auth = [self getFIRAuthFromAppNameFromPigeon:app]; + FIRUser *currentUser = auth.currentUser; + return currentUser.multiFactor; +} + +- (nonnull ASPresentationAnchor)presentationAnchorForAuthorizationController: + (nonnull ASAuthorizationController *)controller API_AVAILABLE(macos(10.15), ios(13.0)) { +#if TARGET_OS_OSX + return [[NSApplication sharedApplication] keyWindow]; +#else + // UIApplication.keyWindow is deprecated in iOS 13+ with UIScene lifecycle. + // Walk the connected scenes to find the foreground active window. + if (@available(iOS 15.0, *)) { + for (UIScene *scene in [UIApplication sharedApplication].connectedScenes) { + if (scene.activationState == UISceneActivationStateForegroundActive && + [scene isKindOfClass:[UIWindowScene class]]) { + UIWindowScene *windowScene = (UIWindowScene *)scene; + if (windowScene.keyWindow) { + return windowScene.keyWindow; + } + } + } + } else if (@available(iOS 13.0, *)) { + for (UIScene *scene in [UIApplication sharedApplication].connectedScenes) { + if (scene.activationState == UISceneActivationStateForegroundActive && + [scene isKindOfClass:[UIWindowScene class]]) { + UIWindowScene *windowScene = (UIWindowScene *)scene; + for (UIWindow *window in windowScene.windows) { + if (window.isKeyWindow) { + return window; + } + } + } + } + } + return [[UIApplication sharedApplication] keyWindow]; +#endif +} + +- (void)enrollPhoneApp:(nonnull AuthPigeonFirebaseApp *)app + assertion:(nonnull InternalPhoneMultiFactorAssertion *)assertion + displayName:(nullable NSString *)displayName + completion:(nonnull void (^)(FlutterError *_Nullable))completion { +#if TARGET_OS_OSX + completion([FlutterError errorWithCode:@"unsupported-platform" + message:@"Phone authentication is not supported on macOS" + details:nil]); +#else + + FIRMultiFactor *multiFactor = [self getAppMultiFactorFromPigeon:app]; + + FIRPhoneAuthCredential *credential = + [[FIRPhoneAuthProvider providerWithAuth:[self getFIRAuthFromAppNameFromPigeon:app]] + credentialWithVerificationID:[assertion verificationId] + verificationCode:[assertion verificationCode]]; + + FIRMultiFactorAssertion *multiFactorAssertion = + [FIRPhoneMultiFactorGenerator assertionWithCredential:credential]; + + [multiFactor enrollWithAssertion:multiFactorAssertion + displayName:displayName + completion:^(NSError *_Nullable error) { + if (error == nil) { + completion(nil); + } else { + completion([FlutterError errorWithCode:@"enroll-failed" + message:error.localizedDescription + details:nil]); + } + }]; +#endif +} + +- (void)getEnrolledFactorsApp:(nonnull AuthPigeonFirebaseApp *)app + completion:(nonnull void (^)(NSArray *_Nullable, + FlutterError *_Nullable))completion { + FIRMultiFactor *multiFactor = [self getAppMultiFactorFromPigeon:app]; + + NSArray *enrolledFactors = [multiFactor enrolledFactors]; + + NSMutableArray *results = [NSMutableArray array]; + + for (FIRMultiFactorInfo *multiFactorInfo in enrolledFactors) { + NSString *phoneNumber; + if ([multiFactorInfo class] == [FIRPhoneMultiFactorInfo class]) { + FIRPhoneMultiFactorInfo *phoneFactorInfo = (FIRPhoneMultiFactorInfo *)multiFactorInfo; + phoneNumber = phoneFactorInfo.phoneNumber; + } + + [results addObject:[InternalMultiFactorInfo + makeWithDisplayName:multiFactorInfo.displayName + enrollmentTimestamp:multiFactorInfo.enrollmentDate.timeIntervalSince1970 + factorId:multiFactorInfo.factorID + uid:multiFactorInfo.UID + phoneNumber:phoneNumber]]; + } + + completion(results, nil); +} + +- (void)getSessionApp:(nonnull AuthPigeonFirebaseApp *)app + completion:(nonnull void (^)(InternalMultiFactorSession *_Nullable, + FlutterError *_Nullable))completion { + FIRMultiFactor *multiFactor = [self getAppMultiFactorFromPigeon:app]; + [multiFactor getSessionWithCompletion:^(FIRMultiFactorSession *_Nullable session, + NSError *_Nullable error) { + NSString *UUID = [[NSUUID UUID] UUIDString]; + self->_multiFactorSessionMap[UUID] = session; + + InternalMultiFactorSession *pigeonSession = [InternalMultiFactorSession makeWithId:UUID]; + completion(pigeonSession, nil); + }]; +} + +- (void)unenrollApp:(nonnull AuthPigeonFirebaseApp *)app + factorUid:(nonnull NSString *)factorUid + completion:(nonnull void (^)(FlutterError *_Nullable))completion { + FIRMultiFactor *multiFactor = [self getAppMultiFactorFromPigeon:app]; + [multiFactor unenrollWithFactorUID:factorUid + completion:^(NSError *_Nullable error) { + if (error == nil) { + completion(nil); + } else { + completion([FlutterError errorWithCode:@"unenroll-failed" + message:error.localizedDescription + details:nil]); + } + }]; +} + +- (void)enrollTotpApp:(nonnull AuthPigeonFirebaseApp *)app + assertionId:(nonnull NSString *)assertionId + displayName:(nullable NSString *)displayName + completion:(nonnull void (^)(FlutterError *_Nullable))completion { + FIRMultiFactor *multiFactor = [self getAppMultiFactorFromPigeon:app]; + + FIRMultiFactorAssertion *assertion = _multiFactorAssertionMap[assertionId]; + + [multiFactor enrollWithAssertion:assertion + displayName:displayName + completion:^(NSError *_Nullable error) { + if (error == nil) { + completion(nil); + } else { + completion([FlutterError errorWithCode:@"enroll-failed" + message:error.localizedDescription + details:nil]); + } + }]; +} + +- (void)resolveSignInResolverId:(nonnull NSString *)resolverId + assertion:(nullable InternalPhoneMultiFactorAssertion *)assertion + totpAssertionId:(nullable NSString *)totpAssertionId + completion:(nonnull void (^)(InternalUserCredential *_Nullable, + FlutterError *_Nullable))completion { + FIRMultiFactorResolver *resolver = _multiFactorResolverMap[resolverId]; + + FIRMultiFactorAssertion *multiFactorAssertion; + + if (assertion != nil) { +#if TARGET_OS_IPHONE + FIRPhoneAuthCredential *credential = + [[FIRPhoneAuthProvider provider] credentialWithVerificationID:[assertion verificationId] + verificationCode:[assertion verificationCode]]; + multiFactorAssertion = [FIRPhoneMultiFactorGenerator assertionWithCredential:credential]; +#endif + } else if (totpAssertionId != nil) { + multiFactorAssertion = _multiFactorAssertionMap[totpAssertionId]; + } else { + completion(nil, + [FlutterError errorWithCode:@"resolve-signin-failed" + message:@"Neither assertion nor totpAssertionId were provided" + details:nil]); + return; + } + + [resolver + resolveSignInWithAssertion:multiFactorAssertion + completion:^(FIRAuthDataResult *_Nullable authResult, + NSError *_Nullable error) { + if (error == nil) { + completion([PigeonParser getPigeonUserCredentialFromAuthResult:authResult + authorizationCode:nil], + nil); + } else { + completion(nil, [FlutterError errorWithCode:@"resolve-signin-failed" + message:error.localizedDescription + details:nil]); + } + }]; +} + +- (void)generateSecretSessionId:(nonnull NSString *)sessionId + completion:(nonnull void (^)(InternalTotpSecret *_Nullable, + FlutterError *_Nullable))completion { + FIRMultiFactorSession *multiFactorSession = _multiFactorSessionMap[sessionId]; + + [FIRTOTPMultiFactorGenerator + generateSecretWithMultiFactorSession:multiFactorSession + completion:^(FIRTOTPSecret *_Nullable secret, + NSError *_Nullable error) { + if (error == nil) { + self->_multiFactorTotpSecretMap[secret.sharedSecretKey] = + secret; + completion([PigeonParser getPigeonTotpSecret:secret], nil); + } else { + completion( + nil, [FlutterError errorWithCode:@"generate-secret-failed" + message:error.localizedDescription + details:nil]); + } + }]; +} + +- (void)getAssertionForEnrollmentSecretKey:(nonnull NSString *)secretKey + oneTimePassword:(nonnull NSString *)oneTimePassword + completion:(nonnull void (^)(NSString *_Nullable, + FlutterError *_Nullable))completion { + FIRTOTPSecret *totpSecret = _multiFactorTotpSecretMap[secretKey]; + + FIRTOTPMultiFactorAssertion *assertion = + [FIRTOTPMultiFactorGenerator assertionForEnrollmentWithSecret:totpSecret + oneTimePassword:oneTimePassword]; + + NSString *UUID = [[NSUUID UUID] UUIDString]; + self->_multiFactorAssertionMap[UUID] = assertion; + completion(UUID, nil); +} + +- (void)getAssertionForSignInEnrollmentId:(nonnull NSString *)enrollmentId + oneTimePassword:(nonnull NSString *)oneTimePassword + completion:(nonnull void (^)(NSString *_Nullable, + FlutterError *_Nullable))completion { + FIRTOTPMultiFactorAssertion *assertion = + [FIRTOTPMultiFactorGenerator assertionForSignInWithEnrollmentID:enrollmentId + oneTimePassword:oneTimePassword]; + NSString *UUID = [[NSUUID UUID] UUIDString]; + self->_multiFactorAssertionMap[UUID] = assertion; + completion(UUID, nil); +} + +- (void)generateQrCodeUrlSecretKey:(nonnull NSString *)secretKey + accountName:(nullable NSString *)accountName + issuer:(nullable NSString *)issuer + completion:(nonnull void (^)(NSString *_Nullable, + FlutterError *_Nullable))completion { + FIRTOTPSecret *totpSecret = _multiFactorTotpSecretMap[secretKey]; + completion([totpSecret generateQRCodeURLWithAccountName:accountName issuer:issuer], nil); +} + +- (void)openInOtpAppSecretKey:(nonnull NSString *)secretKey + qrCodeUrl:(nonnull NSString *)qrCodeUrl + completion:(nonnull void (^)(FlutterError *_Nullable))completion { + FIRTOTPSecret *totpSecret = _multiFactorTotpSecretMap[secretKey]; + [totpSecret openInOTPAppWithQRCodeURL:qrCodeUrl]; + completion(nil); +} + +- (void)applyActionCodeApp:(nonnull AuthPigeonFirebaseApp *)app + code:(nonnull NSString *)code + completion:(nonnull void (^)(FlutterError *_Nullable))completion { + FIRAuth *auth = [self getFIRAuthFromAppNameFromPigeon:app]; + [auth applyActionCode:code + completion:^(NSError *_Nullable error) { + if (error != nil) { + completion([FLTFirebaseAuthPlugin convertToFlutterError:error]); + } else { + completion(nil); + } + }]; +} + +- (void)revokeTokenWithAuthorizationCodeApp:(nonnull AuthPigeonFirebaseApp *)app + authorizationCode:(nonnull NSString *)authorizationCode + completion:(nonnull void (^)(FlutterError *_Nullable))completion { + FIRAuth *auth = [self getFIRAuthFromAppNameFromPigeon:app]; + [auth revokeTokenWithAuthorizationCode:authorizationCode + completion:^(NSError *_Nullable error) { + if (error != nil) { + completion([FLTFirebaseAuthPlugin convertToFlutterError:error]); + } else { + completion(nil); + } + }]; +} + +- (void)revokeAccessTokenApp:(nonnull AuthPigeonFirebaseApp *)app + accessToken:(nonnull NSString *)accessToken + completion:(nonnull void (^)(FlutterError *_Nullable))completion { + // `revokeAccessToken(_:)` is currently Android-only on the Firebase SDK. + // On Apple platforms use `revokeTokenWithAuthorizationCode:` instead. + completion([FlutterError errorWithCode:@"unsupported-platform-operation" + message:@"revokeAccessToken is not supported on iOS/macOS. " + @"Use revokeTokenWithAuthorizationCode instead." + details:nil]); +} + +- (void)checkActionCodeApp:(nonnull AuthPigeonFirebaseApp *)app + code:(nonnull NSString *)code + completion:(nonnull void (^)(InternalActionCodeInfo *_Nullable, + FlutterError *_Nullable))completion { + FIRAuth *auth = [self getFIRAuthFromAppNameFromPigeon:app]; + [auth checkActionCode:code + completion:^(FIRActionCodeInfo *_Nullable info, NSError *_Nullable error) { + if (error != nil) { + completion(nil, [FLTFirebaseAuthPlugin convertToFlutterError:error]); + } else { + InternalActionCodeInfo *result = [self parseActionCode:info]; + if (result.operation == ActionCodeInfoOperationUnknown) { + // Workaround: Firebase iOS SDK >=11.12.0 returns .unknown because + // actionCodeOperation(forRequestType:) only matches camelCase but the + // REST API returns SCREAMING_SNAKE_CASE (e.g. "VERIFY_EMAIL"). + // Re-fetch the raw requestType via REST to resolve the operation. + // See: https://github.com/firebase/flutterfire/issues/17452 + [self resolveActionCodeOperationForApp:app + code:code + fallbackInfo:result + completion:completion]; + } else { + completion(result, nil); + } + } + }]; +} + +- (InternalActionCodeInfo *_Nullable)parseActionCode:(nonnull FIRActionCodeInfo *)info { + InternalActionCodeInfoData *data = [InternalActionCodeInfoData makeWithEmail:info.email + previousEmail:info.previousEmail]; + + ActionCodeInfoOperation operation; + + if (info.operation == FIRActionCodeOperationPasswordReset) { + operation = ActionCodeInfoOperationPasswordReset; + } else if (info.operation == FIRActionCodeOperationVerifyEmail) { + operation = ActionCodeInfoOperationVerifyEmail; + } else if (info.operation == FIRActionCodeOperationRecoverEmail) { + operation = ActionCodeInfoOperationRecoverEmail; + } else if (info.operation == FIRActionCodeOperationEmailLink) { + operation = ActionCodeInfoOperationEmailSignIn; + } else if (info.operation == FIRActionCodeOperationVerifyAndChangeEmail) { + operation = ActionCodeInfoOperationVerifyAndChangeEmail; + } else if (info.operation == FIRActionCodeOperationRevertSecondFactorAddition) { + operation = ActionCodeInfoOperationRevertSecondFactorAddition; + } else { + operation = ActionCodeInfoOperationUnknown; + } + + return [InternalActionCodeInfo makeWithOperation:operation data:data]; +} + +/// Maps a raw requestType string (either camelCase or SCREAMING_SNAKE_CASE) to +/// the corresponding Pigeon enum value. ++ (ActionCodeInfoOperation)operationFromRequestType:(nullable NSString *)requestType { + static NSDictionary *mapping; + static dispatch_once_t onceToken; + dispatch_once(&onceToken, ^{ + mapping = @{ + @"PASSWORD_RESET" : @(ActionCodeInfoOperationPasswordReset), + @"resetPassword" : @(ActionCodeInfoOperationPasswordReset), + @"VERIFY_EMAIL" : @(ActionCodeInfoOperationVerifyEmail), + @"verifyEmail" : @(ActionCodeInfoOperationVerifyEmail), + @"RECOVER_EMAIL" : @(ActionCodeInfoOperationRecoverEmail), + @"recoverEmail" : @(ActionCodeInfoOperationRecoverEmail), + @"EMAIL_SIGNIN" : @(ActionCodeInfoOperationEmailSignIn), + @"signIn" : @(ActionCodeInfoOperationEmailSignIn), + @"VERIFY_AND_CHANGE_EMAIL" : @(ActionCodeInfoOperationVerifyAndChangeEmail), + @"verifyAndChangeEmail" : @(ActionCodeInfoOperationVerifyAndChangeEmail), + @"REVERT_SECOND_FACTOR_ADDITION" : @(ActionCodeInfoOperationRevertSecondFactorAddition), + @"revertSecondFactorAddition" : @(ActionCodeInfoOperationRevertSecondFactorAddition), + }; + }); + + NSNumber *value = mapping[requestType]; + return value ? (ActionCodeInfoOperation)value.integerValue : ActionCodeInfoOperationUnknown; +} + +/// Calls the Identity Toolkit REST API directly to retrieve the raw requestType +/// string, which the iOS SDK fails to parse correctly. Falls back to the original +/// result if the REST call fails for any reason. +- (void)resolveActionCodeOperationForApp:(nonnull AuthPigeonFirebaseApp *)app + code:(nonnull NSString *)code + fallbackInfo:(nonnull InternalActionCodeInfo *)fallbackInfo + completion:(nonnull void (^)(InternalActionCodeInfo *_Nullable, + FlutterError *_Nullable))completion { + FIRApp *firebaseApp = [FLTFirebasePlugin firebaseAppNamed:app.appName]; + NSString *apiKey = firebaseApp.options.APIKey; + + NSString *baseURL; + NSDictionary *emulatorConfig = _emulatorConfigs[app.appName]; + if (emulatorConfig) { + baseURL = [NSString stringWithFormat:@"http://%@:%@/identitytoolkit.googleapis.com", + emulatorConfig[@"host"], emulatorConfig[@"port"]]; + } else { + baseURL = @"https://identitytoolkit.googleapis.com"; + } + + NSString *urlString = + [NSString stringWithFormat:@"%@/v1/accounts:resetPassword?key=%@", baseURL, apiKey]; + NSURL *url = [NSURL URLWithString:urlString]; + + NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:url]; + request.HTTPMethod = @"POST"; + [request setValue:@"application/json" forHTTPHeaderField:@"Content-Type"]; + request.HTTPBody = [NSJSONSerialization dataWithJSONObject:@{@"oobCode" : code} + options:0 + error:nil]; + + NSURLSessionDataTask *task = [[NSURLSession sharedSession] + dataTaskWithRequest:request + completionHandler:^(NSData *_Nullable data, NSURLResponse *_Nullable response, + NSError *_Nullable error) { + if (error || !data) { + completion(fallbackInfo, nil); + return; + } + + NSDictionary *json = [NSJSONSerialization JSONObjectWithData:data options:0 error:nil]; + if (!json || json[@"error"]) { + completion(fallbackInfo, nil); + return; + } + + ActionCodeInfoOperation operation = + [FLTFirebaseAuthPlugin operationFromRequestType:json[@"requestType"]]; + + if (operation != ActionCodeInfoOperationUnknown) { + completion([InternalActionCodeInfo makeWithOperation:operation data:fallbackInfo.data], + nil); + } else { + completion(fallbackInfo, nil); + } + }]; + [task resume]; +} + +- (void)confirmPasswordResetApp:(nonnull AuthPigeonFirebaseApp *)app + code:(nonnull NSString *)code + newPassword:(nonnull NSString *)newPassword + completion:(nonnull void (^)(FlutterError *_Nullable))completion { + FIRAuth *auth = [self getFIRAuthFromAppNameFromPigeon:app]; + [auth confirmPasswordResetWithCode:code + newPassword:newPassword + completion:^(NSError *_Nullable error) { + if (error != nil) { + completion([FLTFirebaseAuthPlugin convertToFlutterError:error]); + } else { + completion(nil); + } + }]; +} + +- (void)createUserWithEmailAndPasswordApp:(nonnull AuthPigeonFirebaseApp *)app + email:(nonnull NSString *)email + password:(nonnull NSString *)password + completion:(nonnull void (^)(InternalUserCredential *_Nullable, + FlutterError *_Nullable))completion { + FIRAuth *auth = [self getFIRAuthFromAppNameFromPigeon:app]; + [auth createUserWithEmail:email + password:password + completion:^(FIRAuthDataResult *_Nullable authResult, NSError *_Nullable error) { + if (error != nil) { + completion(nil, [FLTFirebaseAuthPlugin convertToFlutterError:error]); + } else { + completion([PigeonParser getPigeonUserCredentialFromAuthResult:authResult + authorizationCode:nil], + nil); + } + }]; +} + +- (void)fetchSignInMethodsForEmailApp:(nonnull AuthPigeonFirebaseApp *)app + email:(nonnull NSString *)email + completion:(nonnull void (^)(NSArray *_Nullable, + FlutterError *_Nullable))completion { + FIRAuth *auth = [self getFIRAuthFromAppNameFromPigeon:app]; + [auth fetchSignInMethodsForEmail:email + completion:^(NSArray *_Nullable providers, + NSError *_Nullable error) { + if (error != nil) { + completion(nil, [FLTFirebaseAuthPlugin convertToFlutterError:error]); + } else { + if (providers == nil) { + completion(@[], nil); + } else { + completion(providers, nil); + } + } + }]; +} + +- (void)registerAuthStateListenerApp:(nonnull AuthPigeonFirebaseApp *)app + completion:(nonnull void (^)(NSString *_Nullable, + FlutterError *_Nullable))completion { + FIRAuth *auth = [self getFIRAuthFromAppNameFromPigeon:app]; + + NSString *name = + [NSString stringWithFormat:@"%@/auth-state/%@", kFLTFirebaseAuthChannelName, auth.app.name]; + FlutterEventChannel *channel = [FlutterEventChannel eventChannelWithName:name + binaryMessenger:_binaryMessenger]; + + FLTAuthStateChannelStreamHandler *handler = + [[FLTAuthStateChannelStreamHandler alloc] initWithAuth:auth]; + [channel setStreamHandler:handler]; + + [_eventChannels setObject:channel forKey:name]; + [_streamHandlers setObject:handler forKey:name]; + + completion(name, nil); +} + +- (void)registerIdTokenListenerApp:(nonnull AuthPigeonFirebaseApp *)app + completion:(nonnull void (^)(NSString *_Nullable, + FlutterError *_Nullable))completion { + FIRAuth *auth = [self getFIRAuthFromAppNameFromPigeon:app]; + + NSString *name = + [NSString stringWithFormat:@"%@/id-token/%@", kFLTFirebaseAuthChannelName, auth.app.name]; + + FlutterEventChannel *channel = [FlutterEventChannel eventChannelWithName:name + binaryMessenger:_binaryMessenger]; + + FLTIdTokenChannelStreamHandler *handler = + [[FLTIdTokenChannelStreamHandler alloc] initWithAuth:auth]; + [channel setStreamHandler:handler]; + + [_eventChannels setObject:channel forKey:name]; + [_streamHandlers setObject:handler forKey:name]; + + completion(name, nil); +} + +- (void)sendPasswordResetEmailApp:(nonnull AuthPigeonFirebaseApp *)app + email:(nonnull NSString *)email + actionCodeSettings:(nullable InternalActionCodeSettings *)actionCodeSettings + completion:(nonnull void (^)(FlutterError *_Nullable))completion { + FIRAuth *auth = [self getFIRAuthFromAppNameFromPigeon:app]; + if (actionCodeSettings != nil) { + FIRActionCodeSettings *settings = [PigeonParser parseActionCodeSettings:actionCodeSettings]; + [auth sendPasswordResetWithEmail:email + actionCodeSettings:settings + completion:^(NSError *_Nullable error) { + if (error != nil) { + completion([FLTFirebaseAuthPlugin convertToFlutterError:error]); + } else { + completion(nil); + } + }]; + } else { + [auth sendPasswordResetWithEmail:email + completion:^(NSError *_Nullable error) { + if (error != nil) { + completion([FLTFirebaseAuthPlugin convertToFlutterError:error]); + } else { + completion(nil); + } + }]; + } +} + +- (void)sendSignInLinkToEmailApp:(nonnull AuthPigeonFirebaseApp *)app + email:(nonnull NSString *)email + actionCodeSettings:(nonnull InternalActionCodeSettings *)actionCodeSettings + completion:(nonnull void (^)(FlutterError *_Nullable))completion { + FIRAuth *auth = [self getFIRAuthFromAppNameFromPigeon:app]; + [auth sendSignInLinkToEmail:email + actionCodeSettings:[PigeonParser parseActionCodeSettings:actionCodeSettings] + completion:^(NSError *_Nullable error) { + if (error != nil) { + if (error.code == FIRAuthErrorCodeInternalError) { + [self + handleInternalError:^(InternalUserCredential *_Nullable creds, + FlutterError *_Nullable internalError) { + completion(internalError); + } + withError:error]; + } else { + completion([FLTFirebaseAuthPlugin convertToFlutterError:error]); + } + } else { + completion(nil); + } + }]; +} + +- (void)setLanguageCodeApp:(nonnull AuthPigeonFirebaseApp *)app + languageCode:(nullable NSString *)languageCode + completion: + (nonnull void (^)(NSString *_Nullable, FlutterError *_Nullable))completion { + FIRAuth *auth = [self getFIRAuthFromAppNameFromPigeon:app]; + + if (languageCode != nil && ![languageCode isEqual:[NSNull null]]) { + auth.languageCode = languageCode; + } else { + [auth useAppLanguage]; + } + + completion(auth.languageCode, nil); +} + +- (void)setSettingsApp:(nonnull AuthPigeonFirebaseApp *)app + settings:(nonnull InternalFirebaseAuthSettings *)settings + completion:(nonnull void (^)(FlutterError *_Nullable))completion { + FIRAuth *auth = [self getFIRAuthFromAppNameFromPigeon:app]; + + if (settings.userAccessGroup != nil) { + BOOL useUserAccessGroupSuccessful; + NSError *useUserAccessGroupErrorPtr; + useUserAccessGroupSuccessful = [auth useUserAccessGroup:settings.userAccessGroup + error:&useUserAccessGroupErrorPtr]; + if (!useUserAccessGroupSuccessful) { + completion([FLTFirebaseAuthPlugin convertToFlutterError:useUserAccessGroupErrorPtr]); + return; + } + } + +#if TARGET_OS_IPHONE + if (settings.appVerificationDisabledForTesting) { + auth.settings.appVerificationDisabledForTesting = settings.appVerificationDisabledForTesting; + } +#else + NSLog(@"FIRAuthSettings.appVerificationDisabledForTesting is not supported " + @"on MacOS."); +#endif + + completion(nil); +} + +- (void)signInAnonymouslyApp:(nonnull AuthPigeonFirebaseApp *)app + completion:(nonnull void (^)(InternalUserCredential *_Nullable, + FlutterError *_Nullable))completion { + FIRAuth *auth = [self getFIRAuthFromAppNameFromPigeon:app]; + [auth signInAnonymouslyWithCompletion:^(FIRAuthDataResult *authResult, NSError *error) { + if (error != nil) { + completion(nil, [FLTFirebaseAuthPlugin convertToFlutterError:error]); + } else { + completion([PigeonParser getPigeonUserCredentialFromAuthResult:authResult + authorizationCode:nil], + nil); + } + }]; +} + +- (void)signInWithCredentialApp:(nonnull AuthPigeonFirebaseApp *)app + input:(nonnull NSDictionary *)input + completion:(nonnull void (^)(InternalUserCredential *_Nullable, + FlutterError *_Nullable))completion { + FIRAuth *auth = [self getFIRAuthFromAppNameFromPigeon:app]; + [self + getFIRAuthCredentialFromArguments:input + app:app + completion:^(FIRAuthCredential *credential, NSError *error) { + if (credential == nil) { + completion(nil, + [FlutterError errorWithCode:kErrCodeInvalidCredential + message:kErrMsgInvalidCredential + details:nil]); + return; + } + + if (error) { + completion(nil, + [FLTFirebaseAuthPlugin convertToFlutterError:error]); + } + + [auth + signInWithCredential:credential + completion:^(FIRAuthDataResult *authResult, + NSError *error) { + if (error != nil) { + NSDictionary *userInfo = [error userInfo]; + NSError *underlyingError = + [userInfo objectForKey:NSUnderlyingErrorKey]; + + NSDictionary *firebaseDictionary = + underlyingError + .userInfo[@"FIRAuthErrorUserInfoDeserializ" + @"edResponseKey"]; + + if (firebaseDictionary != nil && + firebaseDictionary[@"message"] != nil) { + // error from firebase-ios-sdk is buried in + // underlying error. + if ([firebaseDictionary[@"code"] + isKindOfClass:[NSNumber class]]) { + [self handleInternalError:completion + withError:error]; + } else { + completion(nil, + [FlutterError + errorWithCode:firebaseDictionary + [@"code"] + message:firebaseDictionary + [@"message"] + details:nil]); + } + } else { + if (error.code == + FIRAuthErrorCodeSecondFactorRequired) { + [self handleMultiFactorError:app + completion:completion + withError:error]; + } else if (error.code == + FIRAuthErrorCodeInternalError) { + [self handleInternalError:completion + withError:error]; + } else { + completion(nil, + [FLTFirebaseAuthPlugin + convertToFlutterError:error]); + } + } + } else { + completion( + [PigeonParser + getPigeonUserCredentialFromAuthResult: + authResult + authorizationCode:nil], + nil); + } + }]; + }]; +} + +- (void)signInWithCustomTokenApp:(nonnull AuthPigeonFirebaseApp *)app + token:(nonnull NSString *)token + completion:(nonnull void (^)(InternalUserCredential *_Nullable, + FlutterError *_Nullable))completion { + FIRAuth *auth = [self getFIRAuthFromAppNameFromPigeon:app]; + + [auth signInWithCustomToken:token + completion:^(FIRAuthDataResult *_Nullable authResult, NSError *_Nullable error) { + if (error != nil) { + if (error.code == FIRAuthErrorCodeSecondFactorRequired) { + [self handleMultiFactorError:app completion:completion withError:error]; + } else if (error.code == FIRAuthErrorCodeInternalError) { + [self handleInternalError:completion withError:error]; + } else { + completion(nil, [FLTFirebaseAuthPlugin convertToFlutterError:error]); + } + } else { + completion([PigeonParser getPigeonUserCredentialFromAuthResult:authResult + authorizationCode:nil], + nil); + } + }]; +} + +- (void)signInWithEmailAndPasswordApp:(nonnull AuthPigeonFirebaseApp *)app + email:(nonnull NSString *)email + password:(nonnull NSString *)password + completion:(nonnull void (^)(InternalUserCredential *_Nullable, + FlutterError *_Nullable))completion { + FIRAuth *auth = [self getFIRAuthFromAppNameFromPigeon:app]; + [auth signInWithEmail:email + password:password + completion:^(FIRAuthDataResult *_Nullable authResult, NSError *_Nullable error) { + if (error != nil) { + if (error.code == FIRAuthErrorCodeSecondFactorRequired) { + [self handleMultiFactorError:app completion:completion withError:error]; + } else if (error.code == FIRAuthErrorCodeInternalError) { + [self handleInternalError:completion withError:error]; + } else { + completion(nil, [FLTFirebaseAuthPlugin convertToFlutterError:error]); + } + } else { + completion([PigeonParser getPigeonUserCredentialFromAuthResult:authResult + authorizationCode:nil], + nil); + } + }]; +} + +- (void)signInWithEmailLinkApp:(nonnull AuthPigeonFirebaseApp *)app + email:(nonnull NSString *)email + emailLink:(nonnull NSString *)emailLink + completion:(nonnull void (^)(InternalUserCredential *_Nullable, + FlutterError *_Nullable))completion { + FIRAuth *auth = [self getFIRAuthFromAppNameFromPigeon:app]; + [auth signInWithEmail:email + link:emailLink + completion:^(FIRAuthDataResult *_Nullable authResult, NSError *_Nullable error) { + if (error != nil) { + if (error.code == FIRAuthErrorCodeSecondFactorRequired) { + [self handleMultiFactorError:app completion:completion withError:error]; + } else if (error.code == FIRAuthErrorCodeInternalError) { + [self handleInternalError:completion withError:error]; + } else { + completion(nil, [FLTFirebaseAuthPlugin convertToFlutterError:error]); + } + } else { + completion([PigeonParser getPigeonUserCredentialFromAuthResult:authResult + authorizationCode:nil], + nil); + } + }]; +} + +- (void)signInWithProviderApp:(nonnull AuthPigeonFirebaseApp *)app + signInProvider:(nonnull InternalSignInProvider *)signInProvider + completion:(nonnull void (^)(InternalUserCredential *_Nullable, + FlutterError *_Nullable))completion { + FIRAuth *auth = [self getFIRAuthFromAppNameFromPigeon:app]; + + if ([signInProvider.providerId isEqualToString:kSignInMethodGameCenter]) { + completion( + nil, + [FlutterError + errorWithCode:@"sign-in-failure" + message: + @"Game Center sign-in requires signing in with 'signInWithCredential()' API." + details:@{}]); + return; + } + + if ([signInProvider.providerId isEqualToString:kSignInMethodApple]) { + self.signInWithAppleAuth = auth; + launchAppleSignInRequest(self, app, signInProvider, completion); + return; + } +#if TARGET_OS_OSX + NSLog(@"signInWithProvider is not supported on the " + @"MacOS platform."); + completion(nil, nil); +#else + self.authProvider = [FIROAuthProvider providerWithProviderID:signInProvider.providerId auth:auth]; + NSArray *scopes = signInProvider.scopes; + if (scopes != nil) { + [self.authProvider setScopes:scopes]; + } + NSDictionary *customParameters = signInProvider.customParameters; + if (customParameters != nil) { + [self.authProvider setCustomParameters:customParameters]; + } + + [self.authProvider + getCredentialWithUIDelegate:nil + completion:^(FIRAuthCredential *_Nullable credential, + NSError *_Nullable error) { + handleAppleAuthResult(self, app, auth, credential, error, completion); + }]; +#endif +} + +- (void)signOutApp:(nonnull AuthPigeonFirebaseApp *)app + completion:(nonnull void (^)(FlutterError *_Nullable))completion { + FIRAuth *auth = [self getFIRAuthFromAppNameFromPigeon:app]; + + if (auth.currentUser == nil) { + completion(nil); + return; + } + + NSError *signOutErrorPtr; + BOOL signOutSuccessful = [auth signOut:&signOutErrorPtr]; + + if (!signOutSuccessful) { + completion([FLTFirebaseAuthPlugin convertToFlutterError:signOutErrorPtr]); + } else { + completion(nil); + } +} + +- (void)useEmulatorApp:(nonnull AuthPigeonFirebaseApp *)app + host:(nonnull NSString *)host + port:(long)port + completion:(nonnull void (^)(FlutterError *_Nullable))completion { + FIRAuth *auth = [self getFIRAuthFromAppNameFromPigeon:app]; + [auth useEmulatorWithHost:host port:port]; + _emulatorConfigs[app.appName] = @{@"host" : host, @"port" : @(port)}; + completion(nil); +} + +- (void)verifyPasswordResetCodeApp:(nonnull AuthPigeonFirebaseApp *)app + code:(nonnull NSString *)code + completion:(nonnull void (^)(NSString *_Nullable, + FlutterError *_Nullable))completion { + FIRAuth *auth = [self getFIRAuthFromAppNameFromPigeon:app]; + + [auth verifyPasswordResetCode:code + completion:^(NSString *_Nullable email, NSError *_Nullable error) { + if (error != nil) { + completion(nil, [FLTFirebaseAuthPlugin convertToFlutterError:error]); + } else { + completion(email, nil); + } + }]; +} + +- (void)verifyPhoneNumberApp:(nonnull AuthPigeonFirebaseApp *)app + request:(nonnull InternalVerifyPhoneNumberRequest *)request + completion: + (nonnull void (^)(NSString *_Nullable, FlutterError *_Nullable))completion { +#if TARGET_OS_OSX + NSLog(@"The Firebase Phone Authentication provider is not supported on the " + @"MacOS platform."); + completion(nil, nil); +#else + FIRAuth *auth = [self getFIRAuthFromAppNameFromPigeon:app]; + + NSString *name = [NSString + stringWithFormat:@"%@/phone/%@", kFLTFirebaseAuthChannelName, [NSUUID UUID].UUIDString]; + FlutterEventChannel *channel = [FlutterEventChannel eventChannelWithName:name + binaryMessenger:_binaryMessenger]; + + NSString *multiFactorSessionId = request.multiFactorSessionId; + FIRMultiFactorSession *multiFactorSession = nil; + + if (multiFactorSessionId != nil) { + multiFactorSession = _multiFactorSessionMap[multiFactorSessionId]; + } + + NSString *multiFactorInfoId = request.multiFactorInfoId; + + FIRPhoneMultiFactorInfo *multiFactorInfo = nil; + if (multiFactorInfoId != nil) { + for (NSString *resolverId in _multiFactorResolverMap) { + for (FIRMultiFactorInfo *info in _multiFactorResolverMap[resolverId].hints) { + if ([info.UID isEqualToString:multiFactorInfoId] && + [info class] == [FIRPhoneMultiFactorInfo class]) { + multiFactorInfo = (FIRPhoneMultiFactorInfo *)info; + break; + } + } + } + } + +#if TARGET_OS_OSX + FLTPhoneNumberVerificationStreamHandler *handler = + [[FLTPhoneNumberVerificationStreamHandler alloc] initWithAuth:auth]; +#else + FLTPhoneNumberVerificationStreamHandler *handler = + [[FLTPhoneNumberVerificationStreamHandler alloc] initWithAuth:auth + request:request + session:multiFactorSession + factorInfo:multiFactorInfo]; +#endif + + [channel setStreamHandler:handler]; + + [_eventChannels setObject:channel forKey:name]; + [_streamHandlers setObject:handler forKey:name]; + + completion(name, nil); +#endif +} + +- (void)deleteApp:(nonnull AuthPigeonFirebaseApp *)app + completion:(nonnull void (^)(FlutterError *_Nullable))completion { + FIRAuth *auth = [self getFIRAuthFromAppNameFromPigeon:app]; + FIRUser *currentUser = auth.currentUser; + if (currentUser == nil) { + completion([FlutterError errorWithCode:kErrCodeNoCurrentUser + message:kErrMsgNoCurrentUser + details:nil]); + return; + } + + [currentUser deleteWithCompletion:^(NSError *_Nullable error) { + if (error != nil) { + completion([FLTFirebaseAuthPlugin convertToFlutterError:error]); + } else { + completion(nil); + } + }]; +} + +- (void)getIdTokenApp:(nonnull AuthPigeonFirebaseApp *)app + forceRefresh:(BOOL)forceRefresh + completion:(nonnull void (^)(InternalIdTokenResult *_Nullable, + FlutterError *_Nullable))completion { + FIRAuth *auth = [self getFIRAuthFromAppNameFromPigeon:app]; + FIRUser *currentUser = auth.currentUser; + if (currentUser == nil) { + completion(nil, [FlutterError errorWithCode:kErrCodeNoCurrentUser + message:kErrMsgNoCurrentUser + details:nil]); + return; + } + + [currentUser + getIDTokenResultForcingRefresh:forceRefresh + completion:^(FIRAuthTokenResult *tokenResult, NSError *error) { + if (error != nil) { + completion(nil, [FLTFirebaseAuthPlugin convertToFlutterError:error]); + return; + } + + completion([PigeonParser parseIdTokenResult:tokenResult], nil); + }]; +} + +- (void)linkWithCredentialApp:(nonnull AuthPigeonFirebaseApp *)app + input:(nonnull NSDictionary *)input + completion:(nonnull void (^)(InternalUserCredential *_Nullable, + FlutterError *_Nullable))completion { + FIRAuth *auth = [self getFIRAuthFromAppNameFromPigeon:app]; + FIRUser *currentUser = auth.currentUser; + if (currentUser == nil) { + completion(nil, [FlutterError errorWithCode:kErrCodeNoCurrentUser + message:kErrMsgNoCurrentUser + details:nil]); + return; + } + + [self + getFIRAuthCredentialFromArguments:input + app:app + completion:^(FIRAuthCredential *credential, NSError *error) { + if (credential == nil) { + completion(nil, + [FlutterError errorWithCode:kErrCodeInvalidCredential + message:kErrMsgInvalidCredential + details:nil]); + return; + } + + if (error) { + completion(nil, + [FLTFirebaseAuthPlugin convertToFlutterError:error]); + } + + [currentUser + linkWithCredential:credential + completion:^(FIRAuthDataResult *authResult, + NSError *error) { + if (error != nil) { + if (error.code == + FIRAuthErrorCodeSecondFactorRequired) { + [self handleMultiFactorError:app + completion:completion + withError:error]; + } else { + completion(nil, [FLTFirebaseAuthPlugin + convertToFlutterError:error]); + } + } else { + completion( + [PigeonParser + getPigeonUserCredentialFromAuthResult: + authResult + authorizationCode:nil], + nil); + } + }]; + }]; +} + +- (void)linkWithProviderApp:(nonnull AuthPigeonFirebaseApp *)app + signInProvider:(nonnull InternalSignInProvider *)signInProvider + completion:(nonnull void (^)(InternalUserCredential *_Nullable, + FlutterError *_Nullable))completion { + FIRAuth *auth = [self getFIRAuthFromAppNameFromPigeon:app]; + FIRUser *currentUser = auth.currentUser; + if ([signInProvider.providerId isEqualToString:kSignInMethodGameCenter]) { + completion( + nil, + [FlutterError + errorWithCode:@"provider-link-failure" + message:@"Game Center provider requires linking with 'linkWithCredential()' API." + details:@{}]); + return; + } + + if (currentUser == nil) { + completion(nil, [FlutterError errorWithCode:kErrCodeNoCurrentUser + message:kErrMsgNoCurrentUser + details:nil]); + return; + } + + if ([signInProvider.providerId isEqualToString:kSignInMethodApple]) { + self.linkWithAppleUser = currentUser; + launchAppleSignInRequest(self, app, signInProvider, completion); + return; + } +#if TARGET_OS_OSX + NSLog(@"linkWithProvider is not supported on the " + @"MacOS platform."); + completion(nil, nil); +#else + self.authProvider = [FIROAuthProvider providerWithProviderID:signInProvider.providerId]; + NSArray *scopes = signInProvider.scopes; + if (scopes != nil) { + [self.authProvider setScopes:scopes]; + } + NSDictionary *customParameters = signInProvider.customParameters; + if (customParameters != nil) { + [self.authProvider setCustomParameters:customParameters]; + } + + [currentUser + linkWithProvider:self.authProvider + UIDelegate:nil + completion:^(FIRAuthDataResult *authResult, NSError *error) { + handleAppleAuthResult(self, app, auth, authResult.credential, error, completion); + }]; +#endif +} + +- (void)reauthenticateWithCredentialApp:(nonnull AuthPigeonFirebaseApp *)app + input:(nonnull NSDictionary *)input + completion:(nonnull void (^)(InternalUserCredential *_Nullable, + FlutterError *_Nullable))completion { + FIRAuth *auth = [self getFIRAuthFromAppNameFromPigeon:app]; + FIRUser *currentUser = auth.currentUser; + if (currentUser == nil) { + completion(nil, [FlutterError errorWithCode:kErrCodeNoCurrentUser + message:kErrMsgNoCurrentUser + details:nil]); + return; + } + + [self + getFIRAuthCredentialFromArguments:input + app:app + completion:^(FIRAuthCredential *credential, NSError *error) { + if (credential == nil) { + completion(nil, + [FlutterError errorWithCode:kErrCodeInvalidCredential + message:kErrMsgInvalidCredential + details:nil]); + return; + } + + if (error) { + completion(nil, + [FLTFirebaseAuthPlugin convertToFlutterError:error]); + } + + [currentUser + reauthenticateWithCredential:credential + completion:^(FIRAuthDataResult *authResult, + NSError *error) { + if (error != nil) { + if (error.code == + FIRAuthErrorCodeSecondFactorRequired) { + [self handleMultiFactorError:app + completion:completion + withError:error]; + } else { + completion( + nil, + [FLTFirebaseAuthPlugin + convertToFlutterError:error]); + } + } else { + completion( + [PigeonParser + getPigeonUserCredentialFromAuthResult: + authResult + authorizationCode: + nil], + nil); + } + }]; + }]; +} + +- (void)reauthenticateWithProviderApp:(nonnull AuthPigeonFirebaseApp *)app + signInProvider:(nonnull InternalSignInProvider *)signInProvider + completion:(nonnull void (^)(InternalUserCredential *_Nullable, + FlutterError *_Nullable))completion { + FIRAuth *auth = [self getFIRAuthFromAppNameFromPigeon:app]; + FIRUser *currentUser = auth.currentUser; + if (currentUser == nil) { + completion(nil, [FlutterError errorWithCode:kErrCodeNoCurrentUser + message:kErrMsgNoCurrentUser + details:nil]); + return; + } + + if ([signInProvider.providerId isEqualToString:kSignInMethodApple]) { + self.isReauthenticatingWithApple = YES; + launchAppleSignInRequest(self, app, signInProvider, completion); + return; + } +#if TARGET_OS_OSX + NSLog(@"reauthenticateWithProvider is not supported on the " + @"MacOS platform."); + completion(nil, nil); +#else + self.authProvider = [FIROAuthProvider providerWithProviderID:signInProvider.providerId]; + NSArray *scopes = signInProvider.scopes; + if (scopes != nil) { + [self.authProvider setScopes:scopes]; + } + NSDictionary *customParameters = signInProvider.customParameters; + if (customParameters != nil) { + [self.authProvider setCustomParameters:customParameters]; + } + + [currentUser reauthenticateWithProvider:self.authProvider + UIDelegate:nil + completion:^(FIRAuthDataResult *authResult, NSError *error) { + handleAppleAuthResult(self, app, auth, authResult.credential, + error, completion); + }]; +#endif +} + +- (void)reloadApp:(nonnull AuthPigeonFirebaseApp *)app + completion: + (nonnull void (^)(InternalUserDetails *_Nullable, FlutterError *_Nullable))completion { + FIRAuth *auth = [self getFIRAuthFromAppNameFromPigeon:app]; + FIRUser *currentUser = auth.currentUser; + if (currentUser == nil) { + completion(nil, [FlutterError errorWithCode:kErrCodeNoCurrentUser + message:kErrMsgNoCurrentUser + details:nil]); + return; + } + + [currentUser reloadWithCompletion:^(NSError *_Nullable error) { + if (error != nil) { + completion(nil, [FLTFirebaseAuthPlugin convertToFlutterError:error]); + } else { + completion([PigeonParser getPigeonDetails:currentUser], nil); + } + }]; +} + +- (void)sendEmailVerificationApp:(nonnull AuthPigeonFirebaseApp *)app + actionCodeSettings:(nullable InternalActionCodeSettings *)actionCodeSettings + completion:(nonnull void (^)(FlutterError *_Nullable))completion { + FIRAuth *auth = [self getFIRAuthFromAppNameFromPigeon:app]; + FIRUser *currentUser = auth.currentUser; + if (currentUser == nil) { + completion([FlutterError errorWithCode:kErrCodeNoCurrentUser + message:kErrMsgNoCurrentUser + details:nil]); + return; + } + + [currentUser + sendEmailVerificationWithActionCodeSettings:[PigeonParser + parseActionCodeSettings:actionCodeSettings] + + completion:^(NSError *_Nullable error) { + if (error != nil) { + completion( + [FLTFirebaseAuthPlugin convertToFlutterError:error]); + } else { + completion(nil); + } + }]; +} + +- (void)unlinkApp:(nonnull AuthPigeonFirebaseApp *)app + providerId:(nonnull NSString *)providerId + completion:(nonnull void (^)(InternalUserCredential *_Nullable, + FlutterError *_Nullable))completion { + FIRAuth *auth = [self getFIRAuthFromAppNameFromPigeon:app]; + FIRUser *currentUser = auth.currentUser; + if (currentUser == nil) { + completion(nil, [FlutterError errorWithCode:kErrCodeNoCurrentUser + message:kErrMsgNoCurrentUser + details:nil]); + return; + } + + [currentUser unlinkFromProvider:providerId + completion:^(FIRUser *_Nullable user, NSError *_Nullable error) { + if (error != nil) { + completion(nil, [FLTFirebaseAuthPlugin convertToFlutterError:error]); + } else { + completion([PigeonParser getPigeonUserCredentialFromFIRUser:user], nil); + } + }]; +} + +- (void)updateEmailApp:(nonnull AuthPigeonFirebaseApp *)app + newEmail:(nonnull NSString *)newEmail + completion:(nonnull void (^)(InternalUserDetails *_Nullable, + FlutterError *_Nullable))completion { + FIRAuth *auth = [self getFIRAuthFromAppNameFromPigeon:app]; + FIRUser *currentUser = auth.currentUser; + if (currentUser == nil) { + completion(nil, [FlutterError errorWithCode:kErrCodeNoCurrentUser + message:kErrMsgNoCurrentUser + details:nil]); + return; + } + + [currentUser updateEmail:newEmail + completion:^(NSError *_Nullable error) { + if (error != nil) { + completion(nil, [FLTFirebaseAuthPlugin convertToFlutterError:error]); + } else { + [currentUser reloadWithCompletion:^(NSError *_Nullable reloadError) { + if (reloadError != nil) { + completion(nil, [FLTFirebaseAuthPlugin convertToFlutterError:reloadError]); + } else { + completion([PigeonParser getPigeonDetails:currentUser], nil); + } + }]; + } + }]; +} + +- (void)updatePasswordApp:(nonnull AuthPigeonFirebaseApp *)app + newPassword:(nonnull NSString *)newPassword + completion:(nonnull void (^)(InternalUserDetails *_Nullable, + FlutterError *_Nullable))completion { + FIRAuth *auth = [self getFIRAuthFromAppNameFromPigeon:app]; + FIRUser *currentUser = auth.currentUser; + if (currentUser == nil) { + completion(nil, [FlutterError errorWithCode:kErrCodeNoCurrentUser + message:kErrMsgNoCurrentUser + details:nil]); + return; + } + + [currentUser + updatePassword:newPassword + completion:^(NSError *_Nullable error) { + if (error != nil) { + completion(nil, [FLTFirebaseAuthPlugin convertToFlutterError:error]); + } else { + [currentUser reloadWithCompletion:^(NSError *_Nullable reloadError) { + if (reloadError != nil) { + completion(nil, [FLTFirebaseAuthPlugin convertToFlutterError:reloadError]); + } else { + completion([PigeonParser getPigeonDetails:currentUser], nil); + } + }]; + } + }]; +} + +- (void)updatePhoneNumberApp:(nonnull AuthPigeonFirebaseApp *)app + input:(nonnull NSDictionary *)input + completion:(nonnull void (^)(InternalUserDetails *_Nullable, + FlutterError *_Nullable))completion { +#if TARGET_OS_IPHONE + FIRAuth *auth = [self getFIRAuthFromAppNameFromPigeon:app]; + FIRUser *currentUser = auth.currentUser; + if (currentUser == nil) { + completion(nil, [FlutterError errorWithCode:kErrCodeNoCurrentUser + message:kErrMsgNoCurrentUser + details:nil]); + return; + } + + [self + getFIRAuthCredentialFromArguments:input + app:app + completion:^(FIRAuthCredential *credential, NSError *error) { + if (credential == nil) { + completion(nil, + [FlutterError errorWithCode:kErrCodeInvalidCredential + message:kErrMsgInvalidCredential + details:nil]); + return; + } + + if (error) { + completion(nil, + [FLTFirebaseAuthPlugin convertToFlutterError:error]); + } + + [currentUser + updatePhoneNumberCredential:(FIRPhoneAuthCredential *)credential + completion:^(NSError *_Nullable error) { + if (error != nil) { + completion( + nil, [FLTFirebaseAuthPlugin + convertToFlutterError:error]); + } else { + [currentUser + reloadWithCompletion:^( + NSError *_Nullable reloadError) { + if (reloadError != nil) { + completion( + nil, [FLTFirebaseAuthPlugin + convertToFlutterError: + reloadError]); + } else { + completion( + [PigeonParser getPigeonDetails: + currentUser], + nil); + } + }]; + } + }]; + }]; +#else + NSLog(@"Updating a users phone number via Firebase Authentication is only " + @"supported on the iOS " + @"platform."); + completion(nil, nil); +#endif +} + +- (void)updateProfileApp:(nonnull AuthPigeonFirebaseApp *)app + profile:(nonnull InternalUserProfile *)profile + completion:(nonnull void (^)(InternalUserDetails *_Nullable, + FlutterError *_Nullable))completion { + FIRAuth *auth = [self getFIRAuthFromAppNameFromPigeon:app]; + FIRUser *currentUser = auth.currentUser; + if (currentUser == nil) { + completion(nil, [FlutterError errorWithCode:kErrCodeNoCurrentUser + message:kErrMsgNoCurrentUser + details:nil]); + return; + } + + FIRUserProfileChangeRequest *changeRequest = [currentUser profileChangeRequest]; + + if (profile.displayNameChanged) { + changeRequest.displayName = profile.displayName; + } + + if (profile.photoUrlChanged) { + if (profile.photoUrl == nil) { + // We apparently cannot set photoURL to nil/NULL to remove it. + // Instead, setting it to empty string appears to work. + // When doing so, Dart will properly receive `null` anyway. + changeRequest.photoURL = [NSURL URLWithString:@""]; + } else { + changeRequest.photoURL = [NSURL URLWithString:profile.photoUrl]; + } + } + + [changeRequest commitChangesWithCompletion:^(NSError *error) { + if (error != nil) { + completion(nil, [FLTFirebaseAuthPlugin convertToFlutterError:error]); + } else { + [currentUser reloadWithCompletion:^(NSError *_Nullable reloadError) { + if (reloadError != nil) { + completion(nil, [FLTFirebaseAuthPlugin convertToFlutterError:reloadError]); + } else { + completion([PigeonParser getPigeonDetails:currentUser], nil); + } + }]; + } + }]; +} + +- (void)verifyBeforeUpdateEmailApp:(nonnull AuthPigeonFirebaseApp *)app + newEmail:(nonnull NSString *)newEmail + actionCodeSettings:(nullable InternalActionCodeSettings *)actionCodeSettings + completion:(nonnull void (^)(FlutterError *_Nullable))completion { + FIRAuth *auth = [self getFIRAuthFromAppNameFromPigeon:app]; + FIRUser *currentUser = auth.currentUser; + if (currentUser == nil) { + completion([FlutterError errorWithCode:kErrCodeNoCurrentUser + message:kErrMsgNoCurrentUser + details:nil]); + return; + } + + [currentUser + sendEmailVerificationBeforeUpdatingEmail:newEmail + actionCodeSettings:[PigeonParser + parseActionCodeSettings:actionCodeSettings] + completion:^(NSError *error) { + if (error != nil) { + completion( + [FLTFirebaseAuthPlugin convertToFlutterError:error]); + } else { + completion(nil); + } + }]; +} + +- (void)initializeRecaptchaConfigApp:(AuthPigeonFirebaseApp *)app + completion:(void (^)(FlutterError *_Nullable))completion { +#if TARGET_OS_OSX + NSLog(@"initializeRecaptchaConfigWithCompletion is not supported on the " + @"MacOS platform."); + completion(nil); +#else + FIRAuth *auth = [self getFIRAuthFromAppNameFromPigeon:app]; + [auth initializeRecaptchaConfigWithCompletion:^(NSError *_Nullable error) { + if (error != nil) { + completion([FLTFirebaseAuthPlugin convertToFlutterError:error]); + } else { + completion(nil); + } + }]; +#endif +} + +@end diff --git a/mih_ui/android/build/ios/SourcePackages/firebase_auth-6.5.4/macos/firebase_auth/Sources/firebase_auth/FLTIdTokenChannelStreamHandler.m b/mih_ui/android/build/ios/SourcePackages/firebase_auth-6.5.4/macos/firebase_auth/Sources/firebase_auth/FLTIdTokenChannelStreamHandler.m new file mode 100644 index 00000000..315bc5ec --- /dev/null +++ b/mih_ui/android/build/ios/SourcePackages/firebase_auth-6.5.4/macos/firebase_auth/Sources/firebase_auth/FLTIdTokenChannelStreamHandler.m @@ -0,0 +1,54 @@ +// Copyright 2021 The Chromium Authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. +@import FirebaseAuth; +#import "include/Private/FLTIdTokenChannelStreamHandler.h" +#import +#import "include/Private/PigeonParser.h" +#import "include/Public/FLTFirebaseAuthPlugin.h" + +@implementation FLTIdTokenChannelStreamHandler { + FIRAuth *_auth; + FIRIDTokenDidChangeListenerHandle _listener; +} + +- (instancetype)initWithAuth:(FIRAuth *)auth { + self = [super init]; + if (self) { + _auth = auth; + } + return self; +} + +- (FlutterError *)onListenWithArguments:(id)arguments eventSink:(FlutterEventSink)events { + bool __block initialAuthState = YES; + + _listener = [_auth addIDTokenDidChangeListener:^(FIRAuth *_Nonnull auth, + FIRUser *_Nullable user) { + if (initialAuthState) { + initialAuthState = NO; + return; + } + + if (user) { + events(@{ + @"user" : [PigeonParser getManualList:[PigeonParser getPigeonDetails:[auth currentUser]]] + }); + } else { + events(@{@"user" : [NSNull null]}); + } + }]; + + return nil; +} + +- (FlutterError *)onCancelWithArguments:(id)arguments { + if (_listener) { + [_auth removeIDTokenDidChangeListener:_listener]; + } + _listener = nil; + + return nil; +} + +@end diff --git a/mih_ui/android/build/ios/SourcePackages/firebase_auth-6.5.4/macos/firebase_auth/Sources/firebase_auth/FLTPhoneNumberVerificationStreamHandler.m b/mih_ui/android/build/ios/SourcePackages/firebase_auth-6.5.4/macos/firebase_auth/Sources/firebase_auth/FLTPhoneNumberVerificationStreamHandler.m new file mode 100644 index 00000000..511d2caa --- /dev/null +++ b/mih_ui/android/build/ios/SourcePackages/firebase_auth-6.5.4/macos/firebase_auth/Sources/firebase_auth/FLTPhoneNumberVerificationStreamHandler.m @@ -0,0 +1,98 @@ +// Copyright 2021 The Chromium Authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +@import FirebaseAuth; + +#import "include/Private/FLTPhoneNumberVerificationStreamHandler.h" +#import "include/Public/FLTFirebaseAuthPlugin.h" + +@implementation FLTPhoneNumberVerificationStreamHandler { + FIRAuth *_auth; + NSString *_phoneNumber; +#if TARGET_OS_OSX +#else + FIRMultiFactorSession *_session; + FIRPhoneMultiFactorInfo *_factorInfo; +#endif +} + +#if TARGET_OS_OSX +- (instancetype)initWithAuth:(id)auth request:(InternalVerifyPhoneNumberRequest *)request { + self = [super init]; + if (self) { + _auth = auth; + _phoneNumber = request.phoneNumber; + } + return self; +} +#else +- (instancetype)initWithAuth:(id)auth + request:(InternalVerifyPhoneNumberRequest *)request + session:(FIRMultiFactorSession *)session + factorInfo:(FIRPhoneMultiFactorInfo *)factorInfo { + self = [super init]; + if (self) { + _auth = auth; + _phoneNumber = request.phoneNumber; + _session = session; + _factorInfo = factorInfo; + } + return self; +} +#endif + +- (FlutterError *)onListenWithArguments:(id)arguments eventSink:(FlutterEventSink)events { +#if TARGET_OS_IPHONE + id completer = ^(NSString *verificationID, NSError *error) { + if (error != nil) { + FlutterError *errorDetails = [FLTFirebaseAuthPlugin convertToFlutterError:error]; + events(@{ + @"name" : @"Auth#phoneVerificationFailed", + @"error" : @{ + @"code" : errorDetails.code, + @"message" : errorDetails.message, + @"details" : errorDetails.details, + } + }); + } else { + events(@{ + @"name" : @"Auth#phoneCodeSent", + @"verificationId" : verificationID, + }); + } + }; + + // Try catch to capture 'missing URL scheme' error. + @try { + if (_factorInfo != nil) { + [[FIRPhoneAuthProvider providerWithAuth:_auth] + verifyPhoneNumberWithMultiFactorInfo:_factorInfo + UIDelegate:nil + multiFactorSession:_session + completion:completer]; + + } else { + [[FIRPhoneAuthProvider providerWithAuth:_auth] verifyPhoneNumber:_phoneNumber + UIDelegate:nil + multiFactorSession:_session + completion:completer]; + } + } @catch (NSException *exception) { + events(@{ + @"name" : @"Auth#phoneVerificationFailed", + @"error" : @{ + @"message" : exception.reason, + } + }); + } +#endif + + return nil; +} + +- (FlutterError *)onCancelWithArguments:(id)arguments { + return nil; +} + +@end diff --git a/mih_ui/android/build/ios/SourcePackages/firebase_auth-6.5.4/macos/firebase_auth/Sources/firebase_auth/PigeonParser.m b/mih_ui/android/build/ios/SourcePackages/firebase_auth-6.5.4/macos/firebase_auth/Sources/firebase_auth/PigeonParser.m new file mode 100644 index 00000000..8d7a7b1c --- /dev/null +++ b/mih_ui/android/build/ios/SourcePackages/firebase_auth-6.5.4/macos/firebase_auth/Sources/firebase_auth/PigeonParser.m @@ -0,0 +1,171 @@ +// Copyright 2023, the Chromium project authors. Please see the AUTHORS file +// for details. All rights reserved. Use of this source code is governed by a +// BSD-style license that can be found in the LICENSE file. + +@import FirebaseAuth; + +#import "include/Private/PigeonParser.h" +#import +#import "include/Public/CustomPigeonHeader.h" + +@implementation PigeonParser + ++ (InternalUserCredential *) + getPigeonUserCredentialFromAuthResult:(nonnull FIRAuthDataResult *)authResult + authorizationCode:(nullable NSString *)authorizationCode { + return [InternalUserCredential + makeWithUser:[self getPigeonDetails:authResult.user] + additionalUserInfo:[self getPigeonAdditionalUserInfo:authResult.additionalUserInfo + authorizationCode:authorizationCode] + credential:[self getPigeonAuthCredential:authResult.credential token:nil]]; +} + ++ (InternalUserCredential *)getPigeonUserCredentialFromFIRUser:(nonnull FIRUser *)user { + return [InternalUserCredential makeWithUser:[self getPigeonDetails:user] + additionalUserInfo:nil + credential:nil]; +} + ++ (InternalUserDetails *)getPigeonDetails:(nonnull FIRUser *)user { + return [InternalUserDetails makeWithUserInfo:[self getPigeonUserInfo:user] + providerData:[self getProviderData:user.providerData]]; +} + ++ (InternalUserInfo *)getPigeonUserInfo:(nonnull FIRUser *)user { + NSString *photoUrlString = user.photoURL.absoluteString; + return [InternalUserInfo + makeWithUid:user.uid + email:user.email + displayName:user.displayName + photoUrl:(photoUrlString.length > 0) ? photoUrlString : nil + phoneNumber:user.phoneNumber + isAnonymous:user.isAnonymous + isEmailVerified:user.emailVerified + providerId:user.providerID + tenantId:user.tenantID + refreshToken:user.refreshToken + creationTimestamp:@((long)([user.metadata.creationDate timeIntervalSince1970] * 1000)) + lastSignInTimestamp:@((long)([user.metadata.lastSignInDate timeIntervalSince1970] * 1000))]; +} + ++ (NSArray *> *)getProviderData: + (nonnull NSArray> *)providerData { + NSMutableArray *> *dataArray = + [NSMutableArray arrayWithCapacity:providerData.count]; + + for (id userInfo in providerData) { + NSString *photoUrlStr = userInfo.photoURL.absoluteString; + NSDictionary *dataDict = @{ + @"providerId" : userInfo.providerID, + // Can be null on emulator + @"uid" : userInfo.uid ?: @"", + @"displayName" : userInfo.displayName ?: [NSNull null], + @"email" : userInfo.email ?: [NSNull null], + @"phoneNumber" : userInfo.phoneNumber ?: [NSNull null], + @"photoURL" : photoUrlStr ?: [NSNull null], + // isAnonymous is always false on in a providerData object (the user is not anonymous) + @"isAnonymous" : @NO, + // isEmailVerified is always true on in a providerData object (the email is verified by the + // provider) + @"isEmailVerified" : @YES, + }; + [dataArray addObject:dataDict]; + } + return [dataArray copy]; +} + ++ (InternalAdditionalUserInfo *)getPigeonAdditionalUserInfo: + (nonnull FIRAdditionalUserInfo *)userInfo + authorizationCode:(nullable NSString *)authorizationCode { + return [InternalAdditionalUserInfo makeWithIsNewUser:userInfo.isNewUser + providerId:userInfo.providerID + username:userInfo.username + authorizationCode:authorizationCode + profile:userInfo.profile]; +} + ++ (InternalTotpSecret *)getPigeonTotpSecret:(FIRTOTPSecret *)secret { + return [InternalTotpSecret makeWithCodeIntervalSeconds:nil + codeLength:nil + enrollmentCompletionDeadline:nil + hashingAlgorithm:nil + secretKey:secret.sharedSecretKey]; +} + ++ (InternalAuthCredential *)getPigeonAuthCredential:(FIRAuthCredential *)authCredential + token:(NSNumber *_Nullable)token { + if (authCredential == nil) { + return nil; + } + + NSString *accessToken = nil; + if ([authCredential isKindOfClass:[FIROAuthCredential class]]) { + if (((FIROAuthCredential *)authCredential).accessToken != nil) { + accessToken = ((FIROAuthCredential *)authCredential).accessToken; + } else if (((FIROAuthCredential *)authCredential).IDToken != nil) { + // For Sign In With Apple, the token is stored in IDToken + accessToken = ((FIROAuthCredential *)authCredential).IDToken; + } + } + + NSUInteger nativeId = + token != nil ? [token unsignedLongValue] : (NSUInteger)[authCredential hash]; + + return [InternalAuthCredential makeWithProviderId:authCredential.provider + signInMethod:authCredential.provider + nativeId:nativeId + accessToken:accessToken ?: nil]; +} + ++ (FIRActionCodeSettings *_Nullable)parseActionCodeSettings: + (nullable InternalActionCodeSettings *)settings { + if (settings == nil) { + return nil; + } + + FIRActionCodeSettings *codeSettings = [[FIRActionCodeSettings alloc] init]; + + if (settings.url != nil) { + codeSettings.URL = [NSURL URLWithString:settings.url]; + } + + if (settings.linkDomain != nil) { + codeSettings.linkDomain = settings.linkDomain; + } + + codeSettings.handleCodeInApp = settings.handleCodeInApp; + + if (settings.iOSBundleId != nil) { + codeSettings.iOSBundleID = settings.iOSBundleId; + } + + return codeSettings; +} + ++ (InternalIdTokenResult *)parseIdTokenResult:(FIRAuthTokenResult *)tokenResult { + long expirationTimestamp = (long)[tokenResult.expirationDate timeIntervalSince1970] * 1000; + long authTimestamp = (long)[tokenResult.authDate timeIntervalSince1970] * 1000; + long issuedAtTimestamp = (long)[tokenResult.issuedAtDate timeIntervalSince1970] * 1000; + + return [InternalIdTokenResult makeWithToken:tokenResult.token + expirationTimestamp:@(expirationTimestamp) + authTimestamp:@(authTimestamp) + issuedAtTimestamp:@(issuedAtTimestamp) + signInProvider:tokenResult.signInProvider + claims:tokenResult.claims + signInSecondFactor:tokenResult.signInSecondFactor]; +} + ++ (NSArray *_Nonnull)getManualList:(nonnull InternalUserDetails *)userDetails { + NSMutableArray *output = [NSMutableArray array]; + + id userInfoList = [[userDetails userInfo] toList]; + [output addObject:userInfoList]; + + id providerData = [userDetails providerData]; + [output addObject:providerData]; + + return [output copy]; +} + +@end diff --git a/mih_ui/android/build/ios/SourcePackages/firebase_auth-6.5.4/macos/firebase_auth/Sources/firebase_auth/firebase_auth_messages.g.m b/mih_ui/android/build/ios/SourcePackages/firebase_auth-6.5.4/macos/firebase_auth/Sources/firebase_auth/firebase_auth_messages.g.m new file mode 100644 index 00000000..82ae8cfc --- /dev/null +++ b/mih_ui/android/build/ios/SourcePackages/firebase_auth-6.5.4/macos/firebase_auth/Sources/firebase_auth/firebase_auth_messages.g.m @@ -0,0 +1,3005 @@ +// Copyright 2023, the Chromium project authors. Please see the AUTHORS file +// for details. All rights reserved. Use of this source code is governed by a +// BSD-style license that can be found in the LICENSE file. +// Autogenerated from Pigeon (v26.3.4), do not edit directly. +// See also: https://pub.dev/packages/pigeon + +#import "include/Public/firebase_auth_messages.g.h" + +#if TARGET_OS_OSX +@import FlutterMacOS; +#else +@import Flutter; +#endif + +static BOOL __attribute__((unused)) FLTPigeonDeepEquals(id _Nullable a, id _Nullable b) { + if (a == b) { + return YES; + } + if (a == nil) { + return b == [NSNull null]; + } + if (b == nil) { + return a == [NSNull null]; + } + if ([a isKindOfClass:[NSNumber class]] && [b isKindOfClass:[NSNumber class]]) { + return + [a isEqual:b] || (isnan([(NSNumber *)a doubleValue]) && isnan([(NSNumber *)b doubleValue])); + } + if ([a isKindOfClass:[NSArray class]] && [b isKindOfClass:[NSArray class]]) { + NSArray *arrayA = (NSArray *)a; + NSArray *arrayB = (NSArray *)b; + if (arrayA.count != arrayB.count) { + return NO; + } + for (NSUInteger i = 0; i < arrayA.count; i++) { + if (!FLTPigeonDeepEquals(arrayA[i], arrayB[i])) { + return NO; + } + } + return YES; + } + if ([a isKindOfClass:[NSDictionary class]] && [b isKindOfClass:[NSDictionary class]]) { + NSDictionary *dictA = (NSDictionary *)a; + NSDictionary *dictB = (NSDictionary *)b; + if (dictA.count != dictB.count) { + return NO; + } + for (id keyA in dictA) { + id valueA = dictA[keyA]; + BOOL found = NO; + for (id keyB in dictB) { + if (FLTPigeonDeepEquals(keyA, keyB)) { + id valueB = dictB[keyB]; + if (FLTPigeonDeepEquals(valueA, valueB)) { + found = YES; + break; + } else { + return NO; + } + } + } + if (!found) { + return NO; + } + } + return YES; + } + return [a isEqual:b]; +} + +static NSUInteger __attribute__((unused)) FLTPigeonDeepHash(id _Nullable value) { + if (value == nil || value == (id)[NSNull null]) { + return 0; + } + if ([value isKindOfClass:[NSNumber class]]) { + NSNumber *n = (NSNumber *)value; + double d = n.doubleValue; + if (isnan(d)) { + // Normalize NaN to a consistent hash. + return (NSUInteger)0x7FF8000000000000; + } + if (d == 0.0) { + // Normalize -0.0 to 0.0 so they have the same hash code. + d = 0.0; + } + return @(d).hash; + } + if ([value isKindOfClass:[NSArray class]]) { + NSUInteger result = 1; + for (id item in (NSArray *)value) { + result = result * 31 + FLTPigeonDeepHash(item); + } + return result; + } + if ([value isKindOfClass:[NSDictionary class]]) { + NSUInteger result = 0; + NSDictionary *dict = (NSDictionary *)value; + for (id key in dict) { + result += ((FLTPigeonDeepHash(key) * 31) ^ FLTPigeonDeepHash(dict[key])); + } + return result; + } + return [value hash]; +} + +static NSArray *wrapResult(id result, FlutterError *error) { + if (error) { + return @[ + error.code ?: [NSNull null], error.message ?: [NSNull null], error.details ?: [NSNull null] + ]; + } + return @[ result ?: [NSNull null] ]; +} + +static id GetNullableObjectAtIndex(NSArray *array, NSInteger key) { + id result = array[key]; + return (result == [NSNull null]) ? nil : result; +} + +/// The type of operation that generated the action code from calling +/// [checkActionCode]. +@implementation ActionCodeInfoOperationBox +- (instancetype)initWithValue:(ActionCodeInfoOperation)value { + self = [super init]; + if (self) { + _value = value; + } + return self; +} +@end + +@interface InternalMultiFactorSession () ++ (InternalMultiFactorSession *)fromList:(NSArray *)list; ++ (nullable InternalMultiFactorSession *)nullableFromList:(NSArray *)list; +- (NSArray *)toList; +@end + +@interface InternalPhoneMultiFactorAssertion () ++ (InternalPhoneMultiFactorAssertion *)fromList:(NSArray *)list; ++ (nullable InternalPhoneMultiFactorAssertion *)nullableFromList:(NSArray *)list; +- (NSArray *)toList; +@end + +@interface InternalMultiFactorInfo () ++ (InternalMultiFactorInfo *)fromList:(NSArray *)list; ++ (nullable InternalMultiFactorInfo *)nullableFromList:(NSArray *)list; +- (NSArray *)toList; +@end + +@interface AuthPigeonFirebaseApp () ++ (AuthPigeonFirebaseApp *)fromList:(NSArray *)list; ++ (nullable AuthPigeonFirebaseApp *)nullableFromList:(NSArray *)list; +- (NSArray *)toList; +@end + +@interface InternalActionCodeInfoData () ++ (InternalActionCodeInfoData *)fromList:(NSArray *)list; ++ (nullable InternalActionCodeInfoData *)nullableFromList:(NSArray *)list; +- (NSArray *)toList; +@end + +@interface InternalActionCodeInfo () ++ (InternalActionCodeInfo *)fromList:(NSArray *)list; ++ (nullable InternalActionCodeInfo *)nullableFromList:(NSArray *)list; +- (NSArray *)toList; +@end + +@interface InternalAdditionalUserInfo () ++ (InternalAdditionalUserInfo *)fromList:(NSArray *)list; ++ (nullable InternalAdditionalUserInfo *)nullableFromList:(NSArray *)list; +- (NSArray *)toList; +@end + +@interface InternalAuthCredential () ++ (InternalAuthCredential *)fromList:(NSArray *)list; ++ (nullable InternalAuthCredential *)nullableFromList:(NSArray *)list; +- (NSArray *)toList; +@end + +@interface InternalUserInfo () ++ (InternalUserInfo *)fromList:(NSArray *)list; ++ (nullable InternalUserInfo *)nullableFromList:(NSArray *)list; +- (NSArray *)toList; +@end + +@interface InternalUserDetails () ++ (InternalUserDetails *)fromList:(NSArray *)list; ++ (nullable InternalUserDetails *)nullableFromList:(NSArray *)list; +- (NSArray *)toList; +@end + +@interface InternalUserCredential () ++ (InternalUserCredential *)fromList:(NSArray *)list; ++ (nullable InternalUserCredential *)nullableFromList:(NSArray *)list; +- (NSArray *)toList; +@end + +@interface InternalAuthCredentialInput () ++ (InternalAuthCredentialInput *)fromList:(NSArray *)list; ++ (nullable InternalAuthCredentialInput *)nullableFromList:(NSArray *)list; +- (NSArray *)toList; +@end + +@interface InternalActionCodeSettings () ++ (InternalActionCodeSettings *)fromList:(NSArray *)list; ++ (nullable InternalActionCodeSettings *)nullableFromList:(NSArray *)list; +- (NSArray *)toList; +@end + +@interface InternalFirebaseAuthSettings () ++ (InternalFirebaseAuthSettings *)fromList:(NSArray *)list; ++ (nullable InternalFirebaseAuthSettings *)nullableFromList:(NSArray *)list; +- (NSArray *)toList; +@end + +@interface InternalSignInProvider () ++ (InternalSignInProvider *)fromList:(NSArray *)list; ++ (nullable InternalSignInProvider *)nullableFromList:(NSArray *)list; +- (NSArray *)toList; +@end + +@interface InternalVerifyPhoneNumberRequest () ++ (InternalVerifyPhoneNumberRequest *)fromList:(NSArray *)list; ++ (nullable InternalVerifyPhoneNumberRequest *)nullableFromList:(NSArray *)list; +- (NSArray *)toList; +@end + +@interface InternalIdTokenResult () ++ (InternalIdTokenResult *)fromList:(NSArray *)list; ++ (nullable InternalIdTokenResult *)nullableFromList:(NSArray *)list; +- (NSArray *)toList; +@end + +@interface InternalUserProfile () ++ (InternalUserProfile *)fromList:(NSArray *)list; ++ (nullable InternalUserProfile *)nullableFromList:(NSArray *)list; +- (NSArray *)toList; +@end + +@interface InternalTotpSecret () ++ (InternalTotpSecret *)fromList:(NSArray *)list; ++ (nullable InternalTotpSecret *)nullableFromList:(NSArray *)list; +- (NSArray *)toList; +@end + +@implementation InternalMultiFactorSession ++ (instancetype)makeWithId:(NSString *)id { + InternalMultiFactorSession *pigeonResult = [[InternalMultiFactorSession alloc] init]; + pigeonResult.id = id; + return pigeonResult; +} ++ (InternalMultiFactorSession *)fromList:(NSArray *)list { + InternalMultiFactorSession *pigeonResult = [[InternalMultiFactorSession alloc] init]; + pigeonResult.id = GetNullableObjectAtIndex(list, 0); + return pigeonResult; +} ++ (nullable InternalMultiFactorSession *)nullableFromList:(NSArray *)list { + return (list) ? [InternalMultiFactorSession fromList:list] : nil; +} +- (NSArray *)toList { + return @[ + self.id ?: [NSNull null], + ]; +} +- (BOOL)isEqual:(id)object { + if (self == object) { + return YES; + } + if (![object isKindOfClass:[self class]]) { + return NO; + } + InternalMultiFactorSession *other = (InternalMultiFactorSession *)object; + return FLTPigeonDeepEquals(self.id, other.id); +} + +- (NSUInteger)hash { + NSUInteger result = [self class].hash; + result = result * 31 + FLTPigeonDeepHash(self.id); + return result; +} +@end + +@implementation InternalPhoneMultiFactorAssertion ++ (instancetype)makeWithVerificationId:(NSString *)verificationId + verificationCode:(NSString *)verificationCode { + InternalPhoneMultiFactorAssertion *pigeonResult = + [[InternalPhoneMultiFactorAssertion alloc] init]; + pigeonResult.verificationId = verificationId; + pigeonResult.verificationCode = verificationCode; + return pigeonResult; +} ++ (InternalPhoneMultiFactorAssertion *)fromList:(NSArray *)list { + InternalPhoneMultiFactorAssertion *pigeonResult = + [[InternalPhoneMultiFactorAssertion alloc] init]; + pigeonResult.verificationId = GetNullableObjectAtIndex(list, 0); + pigeonResult.verificationCode = GetNullableObjectAtIndex(list, 1); + return pigeonResult; +} ++ (nullable InternalPhoneMultiFactorAssertion *)nullableFromList:(NSArray *)list { + return (list) ? [InternalPhoneMultiFactorAssertion fromList:list] : nil; +} +- (NSArray *)toList { + return @[ + self.verificationId ?: [NSNull null], + self.verificationCode ?: [NSNull null], + ]; +} +- (BOOL)isEqual:(id)object { + if (self == object) { + return YES; + } + if (![object isKindOfClass:[self class]]) { + return NO; + } + InternalPhoneMultiFactorAssertion *other = (InternalPhoneMultiFactorAssertion *)object; + return FLTPigeonDeepEquals(self.verificationId, other.verificationId) && + FLTPigeonDeepEquals(self.verificationCode, other.verificationCode); +} + +- (NSUInteger)hash { + NSUInteger result = [self class].hash; + result = result * 31 + FLTPigeonDeepHash(self.verificationId); + result = result * 31 + FLTPigeonDeepHash(self.verificationCode); + return result; +} +@end + +@implementation InternalMultiFactorInfo ++ (instancetype)makeWithDisplayName:(nullable NSString *)displayName + enrollmentTimestamp:(double)enrollmentTimestamp + factorId:(nullable NSString *)factorId + uid:(NSString *)uid + phoneNumber:(nullable NSString *)phoneNumber { + InternalMultiFactorInfo *pigeonResult = [[InternalMultiFactorInfo alloc] init]; + pigeonResult.displayName = displayName; + pigeonResult.enrollmentTimestamp = enrollmentTimestamp; + pigeonResult.factorId = factorId; + pigeonResult.uid = uid; + pigeonResult.phoneNumber = phoneNumber; + return pigeonResult; +} ++ (InternalMultiFactorInfo *)fromList:(NSArray *)list { + InternalMultiFactorInfo *pigeonResult = [[InternalMultiFactorInfo alloc] init]; + pigeonResult.displayName = GetNullableObjectAtIndex(list, 0); + pigeonResult.enrollmentTimestamp = [GetNullableObjectAtIndex(list, 1) doubleValue]; + pigeonResult.factorId = GetNullableObjectAtIndex(list, 2); + pigeonResult.uid = GetNullableObjectAtIndex(list, 3); + pigeonResult.phoneNumber = GetNullableObjectAtIndex(list, 4); + return pigeonResult; +} ++ (nullable InternalMultiFactorInfo *)nullableFromList:(NSArray *)list { + return (list) ? [InternalMultiFactorInfo fromList:list] : nil; +} +- (NSArray *)toList { + return @[ + self.displayName ?: [NSNull null], + @(self.enrollmentTimestamp), + self.factorId ?: [NSNull null], + self.uid ?: [NSNull null], + self.phoneNumber ?: [NSNull null], + ]; +} +- (BOOL)isEqual:(id)object { + if (self == object) { + return YES; + } + if (![object isKindOfClass:[self class]]) { + return NO; + } + InternalMultiFactorInfo *other = (InternalMultiFactorInfo *)object; + return FLTPigeonDeepEquals(self.displayName, other.displayName) && + (self.enrollmentTimestamp == other.enrollmentTimestamp || + (isnan(self.enrollmentTimestamp) && isnan(other.enrollmentTimestamp))) && + FLTPigeonDeepEquals(self.factorId, other.factorId) && + FLTPigeonDeepEquals(self.uid, other.uid) && + FLTPigeonDeepEquals(self.phoneNumber, other.phoneNumber); +} + +- (NSUInteger)hash { + NSUInteger result = [self class].hash; + result = result * 31 + FLTPigeonDeepHash(self.displayName); + result = result * 31 + (isnan(self.enrollmentTimestamp) ? (NSUInteger)0x7FF8000000000000 + : @(self.enrollmentTimestamp).hash); + result = result * 31 + FLTPigeonDeepHash(self.factorId); + result = result * 31 + FLTPigeonDeepHash(self.uid); + result = result * 31 + FLTPigeonDeepHash(self.phoneNumber); + return result; +} +@end + +@implementation AuthPigeonFirebaseApp ++ (instancetype)makeWithAppName:(NSString *)appName + tenantId:(nullable NSString *)tenantId + customAuthDomain:(nullable NSString *)customAuthDomain { + AuthPigeonFirebaseApp *pigeonResult = [[AuthPigeonFirebaseApp alloc] init]; + pigeonResult.appName = appName; + pigeonResult.tenantId = tenantId; + pigeonResult.customAuthDomain = customAuthDomain; + return pigeonResult; +} ++ (AuthPigeonFirebaseApp *)fromList:(NSArray *)list { + AuthPigeonFirebaseApp *pigeonResult = [[AuthPigeonFirebaseApp alloc] init]; + pigeonResult.appName = GetNullableObjectAtIndex(list, 0); + pigeonResult.tenantId = GetNullableObjectAtIndex(list, 1); + pigeonResult.customAuthDomain = GetNullableObjectAtIndex(list, 2); + return pigeonResult; +} ++ (nullable AuthPigeonFirebaseApp *)nullableFromList:(NSArray *)list { + return (list) ? [AuthPigeonFirebaseApp fromList:list] : nil; +} +- (NSArray *)toList { + return @[ + self.appName ?: [NSNull null], + self.tenantId ?: [NSNull null], + self.customAuthDomain ?: [NSNull null], + ]; +} +- (BOOL)isEqual:(id)object { + if (self == object) { + return YES; + } + if (![object isKindOfClass:[self class]]) { + return NO; + } + AuthPigeonFirebaseApp *other = (AuthPigeonFirebaseApp *)object; + return FLTPigeonDeepEquals(self.appName, other.appName) && + FLTPigeonDeepEquals(self.tenantId, other.tenantId) && + FLTPigeonDeepEquals(self.customAuthDomain, other.customAuthDomain); +} + +- (NSUInteger)hash { + NSUInteger result = [self class].hash; + result = result * 31 + FLTPigeonDeepHash(self.appName); + result = result * 31 + FLTPigeonDeepHash(self.tenantId); + result = result * 31 + FLTPigeonDeepHash(self.customAuthDomain); + return result; +} +@end + +@implementation InternalActionCodeInfoData ++ (instancetype)makeWithEmail:(nullable NSString *)email + previousEmail:(nullable NSString *)previousEmail { + InternalActionCodeInfoData *pigeonResult = [[InternalActionCodeInfoData alloc] init]; + pigeonResult.email = email; + pigeonResult.previousEmail = previousEmail; + return pigeonResult; +} ++ (InternalActionCodeInfoData *)fromList:(NSArray *)list { + InternalActionCodeInfoData *pigeonResult = [[InternalActionCodeInfoData alloc] init]; + pigeonResult.email = GetNullableObjectAtIndex(list, 0); + pigeonResult.previousEmail = GetNullableObjectAtIndex(list, 1); + return pigeonResult; +} ++ (nullable InternalActionCodeInfoData *)nullableFromList:(NSArray *)list { + return (list) ? [InternalActionCodeInfoData fromList:list] : nil; +} +- (NSArray *)toList { + return @[ + self.email ?: [NSNull null], + self.previousEmail ?: [NSNull null], + ]; +} +- (BOOL)isEqual:(id)object { + if (self == object) { + return YES; + } + if (![object isKindOfClass:[self class]]) { + return NO; + } + InternalActionCodeInfoData *other = (InternalActionCodeInfoData *)object; + return FLTPigeonDeepEquals(self.email, other.email) && + FLTPigeonDeepEquals(self.previousEmail, other.previousEmail); +} + +- (NSUInteger)hash { + NSUInteger result = [self class].hash; + result = result * 31 + FLTPigeonDeepHash(self.email); + result = result * 31 + FLTPigeonDeepHash(self.previousEmail); + return result; +} +@end + +@implementation InternalActionCodeInfo ++ (instancetype)makeWithOperation:(ActionCodeInfoOperation)operation + data:(InternalActionCodeInfoData *)data { + InternalActionCodeInfo *pigeonResult = [[InternalActionCodeInfo alloc] init]; + pigeonResult.operation = operation; + pigeonResult.data = data; + return pigeonResult; +} ++ (InternalActionCodeInfo *)fromList:(NSArray *)list { + InternalActionCodeInfo *pigeonResult = [[InternalActionCodeInfo alloc] init]; + ActionCodeInfoOperationBox *boxedActionCodeInfoOperation = GetNullableObjectAtIndex(list, 0); + pigeonResult.operation = boxedActionCodeInfoOperation.value; + pigeonResult.data = GetNullableObjectAtIndex(list, 1); + return pigeonResult; +} ++ (nullable InternalActionCodeInfo *)nullableFromList:(NSArray *)list { + return (list) ? [InternalActionCodeInfo fromList:list] : nil; +} +- (NSArray *)toList { + return @[ + [[ActionCodeInfoOperationBox alloc] initWithValue:self.operation], + self.data ?: [NSNull null], + ]; +} +- (BOOL)isEqual:(id)object { + if (self == object) { + return YES; + } + if (![object isKindOfClass:[self class]]) { + return NO; + } + InternalActionCodeInfo *other = (InternalActionCodeInfo *)object; + return self.operation == other.operation && FLTPigeonDeepEquals(self.data, other.data); +} + +- (NSUInteger)hash { + NSUInteger result = [self class].hash; + result = result * 31 + @(self.operation).hash; + result = result * 31 + FLTPigeonDeepHash(self.data); + return result; +} +@end + +@implementation InternalAdditionalUserInfo ++ (instancetype)makeWithIsNewUser:(BOOL)isNewUser + providerId:(nullable NSString *)providerId + username:(nullable NSString *)username + authorizationCode:(nullable NSString *)authorizationCode + profile:(nullable NSDictionary *)profile { + InternalAdditionalUserInfo *pigeonResult = [[InternalAdditionalUserInfo alloc] init]; + pigeonResult.isNewUser = isNewUser; + pigeonResult.providerId = providerId; + pigeonResult.username = username; + pigeonResult.authorizationCode = authorizationCode; + pigeonResult.profile = profile; + return pigeonResult; +} ++ (InternalAdditionalUserInfo *)fromList:(NSArray *)list { + InternalAdditionalUserInfo *pigeonResult = [[InternalAdditionalUserInfo alloc] init]; + pigeonResult.isNewUser = [GetNullableObjectAtIndex(list, 0) boolValue]; + pigeonResult.providerId = GetNullableObjectAtIndex(list, 1); + pigeonResult.username = GetNullableObjectAtIndex(list, 2); + pigeonResult.authorizationCode = GetNullableObjectAtIndex(list, 3); + pigeonResult.profile = GetNullableObjectAtIndex(list, 4); + return pigeonResult; +} ++ (nullable InternalAdditionalUserInfo *)nullableFromList:(NSArray *)list { + return (list) ? [InternalAdditionalUserInfo fromList:list] : nil; +} +- (NSArray *)toList { + return @[ + @(self.isNewUser), + self.providerId ?: [NSNull null], + self.username ?: [NSNull null], + self.authorizationCode ?: [NSNull null], + self.profile ?: [NSNull null], + ]; +} +- (BOOL)isEqual:(id)object { + if (self == object) { + return YES; + } + if (![object isKindOfClass:[self class]]) { + return NO; + } + InternalAdditionalUserInfo *other = (InternalAdditionalUserInfo *)object; + return self.isNewUser == other.isNewUser && + FLTPigeonDeepEquals(self.providerId, other.providerId) && + FLTPigeonDeepEquals(self.username, other.username) && + FLTPigeonDeepEquals(self.authorizationCode, other.authorizationCode) && + FLTPigeonDeepEquals(self.profile, other.profile); +} + +- (NSUInteger)hash { + NSUInteger result = [self class].hash; + result = result * 31 + @(self.isNewUser).hash; + result = result * 31 + FLTPigeonDeepHash(self.providerId); + result = result * 31 + FLTPigeonDeepHash(self.username); + result = result * 31 + FLTPigeonDeepHash(self.authorizationCode); + result = result * 31 + FLTPigeonDeepHash(self.profile); + return result; +} +@end + +@implementation InternalAuthCredential ++ (instancetype)makeWithProviderId:(NSString *)providerId + signInMethod:(NSString *)signInMethod + nativeId:(NSInteger)nativeId + accessToken:(nullable NSString *)accessToken { + InternalAuthCredential *pigeonResult = [[InternalAuthCredential alloc] init]; + pigeonResult.providerId = providerId; + pigeonResult.signInMethod = signInMethod; + pigeonResult.nativeId = nativeId; + pigeonResult.accessToken = accessToken; + return pigeonResult; +} ++ (InternalAuthCredential *)fromList:(NSArray *)list { + InternalAuthCredential *pigeonResult = [[InternalAuthCredential alloc] init]; + pigeonResult.providerId = GetNullableObjectAtIndex(list, 0); + pigeonResult.signInMethod = GetNullableObjectAtIndex(list, 1); + pigeonResult.nativeId = [GetNullableObjectAtIndex(list, 2) integerValue]; + pigeonResult.accessToken = GetNullableObjectAtIndex(list, 3); + return pigeonResult; +} ++ (nullable InternalAuthCredential *)nullableFromList:(NSArray *)list { + return (list) ? [InternalAuthCredential fromList:list] : nil; +} +- (NSArray *)toList { + return @[ + self.providerId ?: [NSNull null], + self.signInMethod ?: [NSNull null], + @(self.nativeId), + self.accessToken ?: [NSNull null], + ]; +} +- (BOOL)isEqual:(id)object { + if (self == object) { + return YES; + } + if (![object isKindOfClass:[self class]]) { + return NO; + } + InternalAuthCredential *other = (InternalAuthCredential *)object; + return FLTPigeonDeepEquals(self.providerId, other.providerId) && + FLTPigeonDeepEquals(self.signInMethod, other.signInMethod) && + self.nativeId == other.nativeId && + FLTPigeonDeepEquals(self.accessToken, other.accessToken); +} + +- (NSUInteger)hash { + NSUInteger result = [self class].hash; + result = result * 31 + FLTPigeonDeepHash(self.providerId); + result = result * 31 + FLTPigeonDeepHash(self.signInMethod); + result = result * 31 + @(self.nativeId).hash; + result = result * 31 + FLTPigeonDeepHash(self.accessToken); + return result; +} +@end + +@implementation InternalUserInfo ++ (instancetype)makeWithUid:(NSString *)uid + email:(nullable NSString *)email + displayName:(nullable NSString *)displayName + photoUrl:(nullable NSString *)photoUrl + phoneNumber:(nullable NSString *)phoneNumber + isAnonymous:(BOOL)isAnonymous + isEmailVerified:(BOOL)isEmailVerified + providerId:(nullable NSString *)providerId + tenantId:(nullable NSString *)tenantId + refreshToken:(nullable NSString *)refreshToken + creationTimestamp:(nullable NSNumber *)creationTimestamp + lastSignInTimestamp:(nullable NSNumber *)lastSignInTimestamp { + InternalUserInfo *pigeonResult = [[InternalUserInfo alloc] init]; + pigeonResult.uid = uid; + pigeonResult.email = email; + pigeonResult.displayName = displayName; + pigeonResult.photoUrl = photoUrl; + pigeonResult.phoneNumber = phoneNumber; + pigeonResult.isAnonymous = isAnonymous; + pigeonResult.isEmailVerified = isEmailVerified; + pigeonResult.providerId = providerId; + pigeonResult.tenantId = tenantId; + pigeonResult.refreshToken = refreshToken; + pigeonResult.creationTimestamp = creationTimestamp; + pigeonResult.lastSignInTimestamp = lastSignInTimestamp; + return pigeonResult; +} ++ (InternalUserInfo *)fromList:(NSArray *)list { + InternalUserInfo *pigeonResult = [[InternalUserInfo alloc] init]; + pigeonResult.uid = GetNullableObjectAtIndex(list, 0); + pigeonResult.email = GetNullableObjectAtIndex(list, 1); + pigeonResult.displayName = GetNullableObjectAtIndex(list, 2); + pigeonResult.photoUrl = GetNullableObjectAtIndex(list, 3); + pigeonResult.phoneNumber = GetNullableObjectAtIndex(list, 4); + pigeonResult.isAnonymous = [GetNullableObjectAtIndex(list, 5) boolValue]; + pigeonResult.isEmailVerified = [GetNullableObjectAtIndex(list, 6) boolValue]; + pigeonResult.providerId = GetNullableObjectAtIndex(list, 7); + pigeonResult.tenantId = GetNullableObjectAtIndex(list, 8); + pigeonResult.refreshToken = GetNullableObjectAtIndex(list, 9); + pigeonResult.creationTimestamp = GetNullableObjectAtIndex(list, 10); + pigeonResult.lastSignInTimestamp = GetNullableObjectAtIndex(list, 11); + return pigeonResult; +} ++ (nullable InternalUserInfo *)nullableFromList:(NSArray *)list { + return (list) ? [InternalUserInfo fromList:list] : nil; +} +- (NSArray *)toList { + return @[ + self.uid ?: [NSNull null], + self.email ?: [NSNull null], + self.displayName ?: [NSNull null], + self.photoUrl ?: [NSNull null], + self.phoneNumber ?: [NSNull null], + @(self.isAnonymous), + @(self.isEmailVerified), + self.providerId ?: [NSNull null], + self.tenantId ?: [NSNull null], + self.refreshToken ?: [NSNull null], + self.creationTimestamp ?: [NSNull null], + self.lastSignInTimestamp ?: [NSNull null], + ]; +} +- (BOOL)isEqual:(id)object { + if (self == object) { + return YES; + } + if (![object isKindOfClass:[self class]]) { + return NO; + } + InternalUserInfo *other = (InternalUserInfo *)object; + return FLTPigeonDeepEquals(self.uid, other.uid) && FLTPigeonDeepEquals(self.email, other.email) && + FLTPigeonDeepEquals(self.displayName, other.displayName) && + FLTPigeonDeepEquals(self.photoUrl, other.photoUrl) && + FLTPigeonDeepEquals(self.phoneNumber, other.phoneNumber) && + self.isAnonymous == other.isAnonymous && self.isEmailVerified == other.isEmailVerified && + FLTPigeonDeepEquals(self.providerId, other.providerId) && + FLTPigeonDeepEquals(self.tenantId, other.tenantId) && + FLTPigeonDeepEquals(self.refreshToken, other.refreshToken) && + FLTPigeonDeepEquals(self.creationTimestamp, other.creationTimestamp) && + FLTPigeonDeepEquals(self.lastSignInTimestamp, other.lastSignInTimestamp); +} + +- (NSUInteger)hash { + NSUInteger result = [self class].hash; + result = result * 31 + FLTPigeonDeepHash(self.uid); + result = result * 31 + FLTPigeonDeepHash(self.email); + result = result * 31 + FLTPigeonDeepHash(self.displayName); + result = result * 31 + FLTPigeonDeepHash(self.photoUrl); + result = result * 31 + FLTPigeonDeepHash(self.phoneNumber); + result = result * 31 + @(self.isAnonymous).hash; + result = result * 31 + @(self.isEmailVerified).hash; + result = result * 31 + FLTPigeonDeepHash(self.providerId); + result = result * 31 + FLTPigeonDeepHash(self.tenantId); + result = result * 31 + FLTPigeonDeepHash(self.refreshToken); + result = result * 31 + FLTPigeonDeepHash(self.creationTimestamp); + result = result * 31 + FLTPigeonDeepHash(self.lastSignInTimestamp); + return result; +} +@end + +@implementation InternalUserDetails ++ (instancetype)makeWithUserInfo:(InternalUserInfo *)userInfo + providerData:(NSArray *> *)providerData { + InternalUserDetails *pigeonResult = [[InternalUserDetails alloc] init]; + pigeonResult.userInfo = userInfo; + pigeonResult.providerData = providerData; + return pigeonResult; +} ++ (InternalUserDetails *)fromList:(NSArray *)list { + InternalUserDetails *pigeonResult = [[InternalUserDetails alloc] init]; + pigeonResult.userInfo = GetNullableObjectAtIndex(list, 0); + pigeonResult.providerData = GetNullableObjectAtIndex(list, 1); + return pigeonResult; +} ++ (nullable InternalUserDetails *)nullableFromList:(NSArray *)list { + return (list) ? [InternalUserDetails fromList:list] : nil; +} +- (NSArray *)toList { + return @[ + self.userInfo ?: [NSNull null], + self.providerData ?: [NSNull null], + ]; +} +- (BOOL)isEqual:(id)object { + if (self == object) { + return YES; + } + if (![object isKindOfClass:[self class]]) { + return NO; + } + InternalUserDetails *other = (InternalUserDetails *)object; + return FLTPigeonDeepEquals(self.userInfo, other.userInfo) && + FLTPigeonDeepEquals(self.providerData, other.providerData); +} + +- (NSUInteger)hash { + NSUInteger result = [self class].hash; + result = result * 31 + FLTPigeonDeepHash(self.userInfo); + result = result * 31 + FLTPigeonDeepHash(self.providerData); + return result; +} +@end + +@implementation InternalUserCredential ++ (instancetype)makeWithUser:(nullable InternalUserDetails *)user + additionalUserInfo:(nullable InternalAdditionalUserInfo *)additionalUserInfo + credential:(nullable InternalAuthCredential *)credential { + InternalUserCredential *pigeonResult = [[InternalUserCredential alloc] init]; + pigeonResult.user = user; + pigeonResult.additionalUserInfo = additionalUserInfo; + pigeonResult.credential = credential; + return pigeonResult; +} ++ (InternalUserCredential *)fromList:(NSArray *)list { + InternalUserCredential *pigeonResult = [[InternalUserCredential alloc] init]; + pigeonResult.user = GetNullableObjectAtIndex(list, 0); + pigeonResult.additionalUserInfo = GetNullableObjectAtIndex(list, 1); + pigeonResult.credential = GetNullableObjectAtIndex(list, 2); + return pigeonResult; +} ++ (nullable InternalUserCredential *)nullableFromList:(NSArray *)list { + return (list) ? [InternalUserCredential fromList:list] : nil; +} +- (NSArray *)toList { + return @[ + self.user ?: [NSNull null], + self.additionalUserInfo ?: [NSNull null], + self.credential ?: [NSNull null], + ]; +} +- (BOOL)isEqual:(id)object { + if (self == object) { + return YES; + } + if (![object isKindOfClass:[self class]]) { + return NO; + } + InternalUserCredential *other = (InternalUserCredential *)object; + return FLTPigeonDeepEquals(self.user, other.user) && + FLTPigeonDeepEquals(self.additionalUserInfo, other.additionalUserInfo) && + FLTPigeonDeepEquals(self.credential, other.credential); +} + +- (NSUInteger)hash { + NSUInteger result = [self class].hash; + result = result * 31 + FLTPigeonDeepHash(self.user); + result = result * 31 + FLTPigeonDeepHash(self.additionalUserInfo); + result = result * 31 + FLTPigeonDeepHash(self.credential); + return result; +} +@end + +@implementation InternalAuthCredentialInput ++ (instancetype)makeWithProviderId:(NSString *)providerId + signInMethod:(NSString *)signInMethod + token:(nullable NSString *)token + accessToken:(nullable NSString *)accessToken { + InternalAuthCredentialInput *pigeonResult = [[InternalAuthCredentialInput alloc] init]; + pigeonResult.providerId = providerId; + pigeonResult.signInMethod = signInMethod; + pigeonResult.token = token; + pigeonResult.accessToken = accessToken; + return pigeonResult; +} ++ (InternalAuthCredentialInput *)fromList:(NSArray *)list { + InternalAuthCredentialInput *pigeonResult = [[InternalAuthCredentialInput alloc] init]; + pigeonResult.providerId = GetNullableObjectAtIndex(list, 0); + pigeonResult.signInMethod = GetNullableObjectAtIndex(list, 1); + pigeonResult.token = GetNullableObjectAtIndex(list, 2); + pigeonResult.accessToken = GetNullableObjectAtIndex(list, 3); + return pigeonResult; +} ++ (nullable InternalAuthCredentialInput *)nullableFromList:(NSArray *)list { + return (list) ? [InternalAuthCredentialInput fromList:list] : nil; +} +- (NSArray *)toList { + return @[ + self.providerId ?: [NSNull null], + self.signInMethod ?: [NSNull null], + self.token ?: [NSNull null], + self.accessToken ?: [NSNull null], + ]; +} +- (BOOL)isEqual:(id)object { + if (self == object) { + return YES; + } + if (![object isKindOfClass:[self class]]) { + return NO; + } + InternalAuthCredentialInput *other = (InternalAuthCredentialInput *)object; + return FLTPigeonDeepEquals(self.providerId, other.providerId) && + FLTPigeonDeepEquals(self.signInMethod, other.signInMethod) && + FLTPigeonDeepEquals(self.token, other.token) && + FLTPigeonDeepEquals(self.accessToken, other.accessToken); +} + +- (NSUInteger)hash { + NSUInteger result = [self class].hash; + result = result * 31 + FLTPigeonDeepHash(self.providerId); + result = result * 31 + FLTPigeonDeepHash(self.signInMethod); + result = result * 31 + FLTPigeonDeepHash(self.token); + result = result * 31 + FLTPigeonDeepHash(self.accessToken); + return result; +} +@end + +@implementation InternalActionCodeSettings ++ (instancetype)makeWithUrl:(NSString *)url + dynamicLinkDomain:(nullable NSString *)dynamicLinkDomain + handleCodeInApp:(BOOL)handleCodeInApp + iOSBundleId:(nullable NSString *)iOSBundleId + androidPackageName:(nullable NSString *)androidPackageName + androidInstallApp:(BOOL)androidInstallApp + androidMinimumVersion:(nullable NSString *)androidMinimumVersion + linkDomain:(nullable NSString *)linkDomain { + InternalActionCodeSettings *pigeonResult = [[InternalActionCodeSettings alloc] init]; + pigeonResult.url = url; + pigeonResult.dynamicLinkDomain = dynamicLinkDomain; + pigeonResult.handleCodeInApp = handleCodeInApp; + pigeonResult.iOSBundleId = iOSBundleId; + pigeonResult.androidPackageName = androidPackageName; + pigeonResult.androidInstallApp = androidInstallApp; + pigeonResult.androidMinimumVersion = androidMinimumVersion; + pigeonResult.linkDomain = linkDomain; + return pigeonResult; +} ++ (InternalActionCodeSettings *)fromList:(NSArray *)list { + InternalActionCodeSettings *pigeonResult = [[InternalActionCodeSettings alloc] init]; + pigeonResult.url = GetNullableObjectAtIndex(list, 0); + pigeonResult.dynamicLinkDomain = GetNullableObjectAtIndex(list, 1); + pigeonResult.handleCodeInApp = [GetNullableObjectAtIndex(list, 2) boolValue]; + pigeonResult.iOSBundleId = GetNullableObjectAtIndex(list, 3); + pigeonResult.androidPackageName = GetNullableObjectAtIndex(list, 4); + pigeonResult.androidInstallApp = [GetNullableObjectAtIndex(list, 5) boolValue]; + pigeonResult.androidMinimumVersion = GetNullableObjectAtIndex(list, 6); + pigeonResult.linkDomain = GetNullableObjectAtIndex(list, 7); + return pigeonResult; +} ++ (nullable InternalActionCodeSettings *)nullableFromList:(NSArray *)list { + return (list) ? [InternalActionCodeSettings fromList:list] : nil; +} +- (NSArray *)toList { + return @[ + self.url ?: [NSNull null], + self.dynamicLinkDomain ?: [NSNull null], + @(self.handleCodeInApp), + self.iOSBundleId ?: [NSNull null], + self.androidPackageName ?: [NSNull null], + @(self.androidInstallApp), + self.androidMinimumVersion ?: [NSNull null], + self.linkDomain ?: [NSNull null], + ]; +} +- (BOOL)isEqual:(id)object { + if (self == object) { + return YES; + } + if (![object isKindOfClass:[self class]]) { + return NO; + } + InternalActionCodeSettings *other = (InternalActionCodeSettings *)object; + return FLTPigeonDeepEquals(self.url, other.url) && + FLTPigeonDeepEquals(self.dynamicLinkDomain, other.dynamicLinkDomain) && + self.handleCodeInApp == other.handleCodeInApp && + FLTPigeonDeepEquals(self.iOSBundleId, other.iOSBundleId) && + FLTPigeonDeepEquals(self.androidPackageName, other.androidPackageName) && + self.androidInstallApp == other.androidInstallApp && + FLTPigeonDeepEquals(self.androidMinimumVersion, other.androidMinimumVersion) && + FLTPigeonDeepEquals(self.linkDomain, other.linkDomain); +} + +- (NSUInteger)hash { + NSUInteger result = [self class].hash; + result = result * 31 + FLTPigeonDeepHash(self.url); + result = result * 31 + FLTPigeonDeepHash(self.dynamicLinkDomain); + result = result * 31 + @(self.handleCodeInApp).hash; + result = result * 31 + FLTPigeonDeepHash(self.iOSBundleId); + result = result * 31 + FLTPigeonDeepHash(self.androidPackageName); + result = result * 31 + @(self.androidInstallApp).hash; + result = result * 31 + FLTPigeonDeepHash(self.androidMinimumVersion); + result = result * 31 + FLTPigeonDeepHash(self.linkDomain); + return result; +} +@end + +@implementation InternalFirebaseAuthSettings ++ (instancetype)makeWithAppVerificationDisabledForTesting:(BOOL)appVerificationDisabledForTesting + userAccessGroup:(nullable NSString *)userAccessGroup + phoneNumber:(nullable NSString *)phoneNumber + smsCode:(nullable NSString *)smsCode + forceRecaptchaFlow:(nullable NSNumber *)forceRecaptchaFlow { + InternalFirebaseAuthSettings *pigeonResult = [[InternalFirebaseAuthSettings alloc] init]; + pigeonResult.appVerificationDisabledForTesting = appVerificationDisabledForTesting; + pigeonResult.userAccessGroup = userAccessGroup; + pigeonResult.phoneNumber = phoneNumber; + pigeonResult.smsCode = smsCode; + pigeonResult.forceRecaptchaFlow = forceRecaptchaFlow; + return pigeonResult; +} ++ (InternalFirebaseAuthSettings *)fromList:(NSArray *)list { + InternalFirebaseAuthSettings *pigeonResult = [[InternalFirebaseAuthSettings alloc] init]; + pigeonResult.appVerificationDisabledForTesting = [GetNullableObjectAtIndex(list, 0) boolValue]; + pigeonResult.userAccessGroup = GetNullableObjectAtIndex(list, 1); + pigeonResult.phoneNumber = GetNullableObjectAtIndex(list, 2); + pigeonResult.smsCode = GetNullableObjectAtIndex(list, 3); + pigeonResult.forceRecaptchaFlow = GetNullableObjectAtIndex(list, 4); + return pigeonResult; +} ++ (nullable InternalFirebaseAuthSettings *)nullableFromList:(NSArray *)list { + return (list) ? [InternalFirebaseAuthSettings fromList:list] : nil; +} +- (NSArray *)toList { + return @[ + @(self.appVerificationDisabledForTesting), + self.userAccessGroup ?: [NSNull null], + self.phoneNumber ?: [NSNull null], + self.smsCode ?: [NSNull null], + self.forceRecaptchaFlow ?: [NSNull null], + ]; +} +- (BOOL)isEqual:(id)object { + if (self == object) { + return YES; + } + if (![object isKindOfClass:[self class]]) { + return NO; + } + InternalFirebaseAuthSettings *other = (InternalFirebaseAuthSettings *)object; + return self.appVerificationDisabledForTesting == other.appVerificationDisabledForTesting && + FLTPigeonDeepEquals(self.userAccessGroup, other.userAccessGroup) && + FLTPigeonDeepEquals(self.phoneNumber, other.phoneNumber) && + FLTPigeonDeepEquals(self.smsCode, other.smsCode) && + FLTPigeonDeepEquals(self.forceRecaptchaFlow, other.forceRecaptchaFlow); +} + +- (NSUInteger)hash { + NSUInteger result = [self class].hash; + result = result * 31 + @(self.appVerificationDisabledForTesting).hash; + result = result * 31 + FLTPigeonDeepHash(self.userAccessGroup); + result = result * 31 + FLTPigeonDeepHash(self.phoneNumber); + result = result * 31 + FLTPigeonDeepHash(self.smsCode); + result = result * 31 + FLTPigeonDeepHash(self.forceRecaptchaFlow); + return result; +} +@end + +@implementation InternalSignInProvider ++ (instancetype)makeWithProviderId:(NSString *)providerId + scopes:(nullable NSArray *)scopes + customParameters: + (nullable NSDictionary *)customParameters { + InternalSignInProvider *pigeonResult = [[InternalSignInProvider alloc] init]; + pigeonResult.providerId = providerId; + pigeonResult.scopes = scopes; + pigeonResult.customParameters = customParameters; + return pigeonResult; +} ++ (InternalSignInProvider *)fromList:(NSArray *)list { + InternalSignInProvider *pigeonResult = [[InternalSignInProvider alloc] init]; + pigeonResult.providerId = GetNullableObjectAtIndex(list, 0); + pigeonResult.scopes = GetNullableObjectAtIndex(list, 1); + pigeonResult.customParameters = GetNullableObjectAtIndex(list, 2); + return pigeonResult; +} ++ (nullable InternalSignInProvider *)nullableFromList:(NSArray *)list { + return (list) ? [InternalSignInProvider fromList:list] : nil; +} +- (NSArray *)toList { + return @[ + self.providerId ?: [NSNull null], + self.scopes ?: [NSNull null], + self.customParameters ?: [NSNull null], + ]; +} +- (BOOL)isEqual:(id)object { + if (self == object) { + return YES; + } + if (![object isKindOfClass:[self class]]) { + return NO; + } + InternalSignInProvider *other = (InternalSignInProvider *)object; + return FLTPigeonDeepEquals(self.providerId, other.providerId) && + FLTPigeonDeepEquals(self.scopes, other.scopes) && + FLTPigeonDeepEquals(self.customParameters, other.customParameters); +} + +- (NSUInteger)hash { + NSUInteger result = [self class].hash; + result = result * 31 + FLTPigeonDeepHash(self.providerId); + result = result * 31 + FLTPigeonDeepHash(self.scopes); + result = result * 31 + FLTPigeonDeepHash(self.customParameters); + return result; +} +@end + +@implementation InternalVerifyPhoneNumberRequest ++ (instancetype)makeWithPhoneNumber:(nullable NSString *)phoneNumber + timeout:(NSInteger)timeout + forceResendingToken:(nullable NSNumber *)forceResendingToken + autoRetrievedSmsCodeForTesting:(nullable NSString *)autoRetrievedSmsCodeForTesting + multiFactorInfoId:(nullable NSString *)multiFactorInfoId + multiFactorSessionId:(nullable NSString *)multiFactorSessionId { + InternalVerifyPhoneNumberRequest *pigeonResult = [[InternalVerifyPhoneNumberRequest alloc] init]; + pigeonResult.phoneNumber = phoneNumber; + pigeonResult.timeout = timeout; + pigeonResult.forceResendingToken = forceResendingToken; + pigeonResult.autoRetrievedSmsCodeForTesting = autoRetrievedSmsCodeForTesting; + pigeonResult.multiFactorInfoId = multiFactorInfoId; + pigeonResult.multiFactorSessionId = multiFactorSessionId; + return pigeonResult; +} ++ (InternalVerifyPhoneNumberRequest *)fromList:(NSArray *)list { + InternalVerifyPhoneNumberRequest *pigeonResult = [[InternalVerifyPhoneNumberRequest alloc] init]; + pigeonResult.phoneNumber = GetNullableObjectAtIndex(list, 0); + pigeonResult.timeout = [GetNullableObjectAtIndex(list, 1) integerValue]; + pigeonResult.forceResendingToken = GetNullableObjectAtIndex(list, 2); + pigeonResult.autoRetrievedSmsCodeForTesting = GetNullableObjectAtIndex(list, 3); + pigeonResult.multiFactorInfoId = GetNullableObjectAtIndex(list, 4); + pigeonResult.multiFactorSessionId = GetNullableObjectAtIndex(list, 5); + return pigeonResult; +} ++ (nullable InternalVerifyPhoneNumberRequest *)nullableFromList:(NSArray *)list { + return (list) ? [InternalVerifyPhoneNumberRequest fromList:list] : nil; +} +- (NSArray *)toList { + return @[ + self.phoneNumber ?: [NSNull null], + @(self.timeout), + self.forceResendingToken ?: [NSNull null], + self.autoRetrievedSmsCodeForTesting ?: [NSNull null], + self.multiFactorInfoId ?: [NSNull null], + self.multiFactorSessionId ?: [NSNull null], + ]; +} +- (BOOL)isEqual:(id)object { + if (self == object) { + return YES; + } + if (![object isKindOfClass:[self class]]) { + return NO; + } + InternalVerifyPhoneNumberRequest *other = (InternalVerifyPhoneNumberRequest *)object; + return FLTPigeonDeepEquals(self.phoneNumber, other.phoneNumber) && + self.timeout == other.timeout && + FLTPigeonDeepEquals(self.forceResendingToken, other.forceResendingToken) && + FLTPigeonDeepEquals(self.autoRetrievedSmsCodeForTesting, + other.autoRetrievedSmsCodeForTesting) && + FLTPigeonDeepEquals(self.multiFactorInfoId, other.multiFactorInfoId) && + FLTPigeonDeepEquals(self.multiFactorSessionId, other.multiFactorSessionId); +} + +- (NSUInteger)hash { + NSUInteger result = [self class].hash; + result = result * 31 + FLTPigeonDeepHash(self.phoneNumber); + result = result * 31 + @(self.timeout).hash; + result = result * 31 + FLTPigeonDeepHash(self.forceResendingToken); + result = result * 31 + FLTPigeonDeepHash(self.autoRetrievedSmsCodeForTesting); + result = result * 31 + FLTPigeonDeepHash(self.multiFactorInfoId); + result = result * 31 + FLTPigeonDeepHash(self.multiFactorSessionId); + return result; +} +@end + +@implementation InternalIdTokenResult ++ (instancetype)makeWithToken:(nullable NSString *)token + expirationTimestamp:(nullable NSNumber *)expirationTimestamp + authTimestamp:(nullable NSNumber *)authTimestamp + issuedAtTimestamp:(nullable NSNumber *)issuedAtTimestamp + signInProvider:(nullable NSString *)signInProvider + claims:(nullable NSDictionary *)claims + signInSecondFactor:(nullable NSString *)signInSecondFactor { + InternalIdTokenResult *pigeonResult = [[InternalIdTokenResult alloc] init]; + pigeonResult.token = token; + pigeonResult.expirationTimestamp = expirationTimestamp; + pigeonResult.authTimestamp = authTimestamp; + pigeonResult.issuedAtTimestamp = issuedAtTimestamp; + pigeonResult.signInProvider = signInProvider; + pigeonResult.claims = claims; + pigeonResult.signInSecondFactor = signInSecondFactor; + return pigeonResult; +} ++ (InternalIdTokenResult *)fromList:(NSArray *)list { + InternalIdTokenResult *pigeonResult = [[InternalIdTokenResult alloc] init]; + pigeonResult.token = GetNullableObjectAtIndex(list, 0); + pigeonResult.expirationTimestamp = GetNullableObjectAtIndex(list, 1); + pigeonResult.authTimestamp = GetNullableObjectAtIndex(list, 2); + pigeonResult.issuedAtTimestamp = GetNullableObjectAtIndex(list, 3); + pigeonResult.signInProvider = GetNullableObjectAtIndex(list, 4); + pigeonResult.claims = GetNullableObjectAtIndex(list, 5); + pigeonResult.signInSecondFactor = GetNullableObjectAtIndex(list, 6); + return pigeonResult; +} ++ (nullable InternalIdTokenResult *)nullableFromList:(NSArray *)list { + return (list) ? [InternalIdTokenResult fromList:list] : nil; +} +- (NSArray *)toList { + return @[ + self.token ?: [NSNull null], + self.expirationTimestamp ?: [NSNull null], + self.authTimestamp ?: [NSNull null], + self.issuedAtTimestamp ?: [NSNull null], + self.signInProvider ?: [NSNull null], + self.claims ?: [NSNull null], + self.signInSecondFactor ?: [NSNull null], + ]; +} +- (BOOL)isEqual:(id)object { + if (self == object) { + return YES; + } + if (![object isKindOfClass:[self class]]) { + return NO; + } + InternalIdTokenResult *other = (InternalIdTokenResult *)object; + return FLTPigeonDeepEquals(self.token, other.token) && + FLTPigeonDeepEquals(self.expirationTimestamp, other.expirationTimestamp) && + FLTPigeonDeepEquals(self.authTimestamp, other.authTimestamp) && + FLTPigeonDeepEquals(self.issuedAtTimestamp, other.issuedAtTimestamp) && + FLTPigeonDeepEquals(self.signInProvider, other.signInProvider) && + FLTPigeonDeepEquals(self.claims, other.claims) && + FLTPigeonDeepEquals(self.signInSecondFactor, other.signInSecondFactor); +} + +- (NSUInteger)hash { + NSUInteger result = [self class].hash; + result = result * 31 + FLTPigeonDeepHash(self.token); + result = result * 31 + FLTPigeonDeepHash(self.expirationTimestamp); + result = result * 31 + FLTPigeonDeepHash(self.authTimestamp); + result = result * 31 + FLTPigeonDeepHash(self.issuedAtTimestamp); + result = result * 31 + FLTPigeonDeepHash(self.signInProvider); + result = result * 31 + FLTPigeonDeepHash(self.claims); + result = result * 31 + FLTPigeonDeepHash(self.signInSecondFactor); + return result; +} +@end + +@implementation InternalUserProfile ++ (instancetype)makeWithDisplayName:(nullable NSString *)displayName + photoUrl:(nullable NSString *)photoUrl + displayNameChanged:(BOOL)displayNameChanged + photoUrlChanged:(BOOL)photoUrlChanged { + InternalUserProfile *pigeonResult = [[InternalUserProfile alloc] init]; + pigeonResult.displayName = displayName; + pigeonResult.photoUrl = photoUrl; + pigeonResult.displayNameChanged = displayNameChanged; + pigeonResult.photoUrlChanged = photoUrlChanged; + return pigeonResult; +} ++ (InternalUserProfile *)fromList:(NSArray *)list { + InternalUserProfile *pigeonResult = [[InternalUserProfile alloc] init]; + pigeonResult.displayName = GetNullableObjectAtIndex(list, 0); + pigeonResult.photoUrl = GetNullableObjectAtIndex(list, 1); + pigeonResult.displayNameChanged = [GetNullableObjectAtIndex(list, 2) boolValue]; + pigeonResult.photoUrlChanged = [GetNullableObjectAtIndex(list, 3) boolValue]; + return pigeonResult; +} ++ (nullable InternalUserProfile *)nullableFromList:(NSArray *)list { + return (list) ? [InternalUserProfile fromList:list] : nil; +} +- (NSArray *)toList { + return @[ + self.displayName ?: [NSNull null], + self.photoUrl ?: [NSNull null], + @(self.displayNameChanged), + @(self.photoUrlChanged), + ]; +} +- (BOOL)isEqual:(id)object { + if (self == object) { + return YES; + } + if (![object isKindOfClass:[self class]]) { + return NO; + } + InternalUserProfile *other = (InternalUserProfile *)object; + return FLTPigeonDeepEquals(self.displayName, other.displayName) && + FLTPigeonDeepEquals(self.photoUrl, other.photoUrl) && + self.displayNameChanged == other.displayNameChanged && + self.photoUrlChanged == other.photoUrlChanged; +} + +- (NSUInteger)hash { + NSUInteger result = [self class].hash; + result = result * 31 + FLTPigeonDeepHash(self.displayName); + result = result * 31 + FLTPigeonDeepHash(self.photoUrl); + result = result * 31 + @(self.displayNameChanged).hash; + result = result * 31 + @(self.photoUrlChanged).hash; + return result; +} +@end + +@implementation InternalTotpSecret ++ (instancetype)makeWithCodeIntervalSeconds:(nullable NSNumber *)codeIntervalSeconds + codeLength:(nullable NSNumber *)codeLength + enrollmentCompletionDeadline:(nullable NSNumber *)enrollmentCompletionDeadline + hashingAlgorithm:(nullable NSString *)hashingAlgorithm + secretKey:(NSString *)secretKey { + InternalTotpSecret *pigeonResult = [[InternalTotpSecret alloc] init]; + pigeonResult.codeIntervalSeconds = codeIntervalSeconds; + pigeonResult.codeLength = codeLength; + pigeonResult.enrollmentCompletionDeadline = enrollmentCompletionDeadline; + pigeonResult.hashingAlgorithm = hashingAlgorithm; + pigeonResult.secretKey = secretKey; + return pigeonResult; +} ++ (InternalTotpSecret *)fromList:(NSArray *)list { + InternalTotpSecret *pigeonResult = [[InternalTotpSecret alloc] init]; + pigeonResult.codeIntervalSeconds = GetNullableObjectAtIndex(list, 0); + pigeonResult.codeLength = GetNullableObjectAtIndex(list, 1); + pigeonResult.enrollmentCompletionDeadline = GetNullableObjectAtIndex(list, 2); + pigeonResult.hashingAlgorithm = GetNullableObjectAtIndex(list, 3); + pigeonResult.secretKey = GetNullableObjectAtIndex(list, 4); + return pigeonResult; +} ++ (nullable InternalTotpSecret *)nullableFromList:(NSArray *)list { + return (list) ? [InternalTotpSecret fromList:list] : nil; +} +- (NSArray *)toList { + return @[ + self.codeIntervalSeconds ?: [NSNull null], + self.codeLength ?: [NSNull null], + self.enrollmentCompletionDeadline ?: [NSNull null], + self.hashingAlgorithm ?: [NSNull null], + self.secretKey ?: [NSNull null], + ]; +} +- (BOOL)isEqual:(id)object { + if (self == object) { + return YES; + } + if (![object isKindOfClass:[self class]]) { + return NO; + } + InternalTotpSecret *other = (InternalTotpSecret *)object; + return FLTPigeonDeepEquals(self.codeIntervalSeconds, other.codeIntervalSeconds) && + FLTPigeonDeepEquals(self.codeLength, other.codeLength) && + FLTPigeonDeepEquals(self.enrollmentCompletionDeadline, + other.enrollmentCompletionDeadline) && + FLTPigeonDeepEquals(self.hashingAlgorithm, other.hashingAlgorithm) && + FLTPigeonDeepEquals(self.secretKey, other.secretKey); +} + +- (NSUInteger)hash { + NSUInteger result = [self class].hash; + result = result * 31 + FLTPigeonDeepHash(self.codeIntervalSeconds); + result = result * 31 + FLTPigeonDeepHash(self.codeLength); + result = result * 31 + FLTPigeonDeepHash(self.enrollmentCompletionDeadline); + result = result * 31 + FLTPigeonDeepHash(self.hashingAlgorithm); + result = result * 31 + FLTPigeonDeepHash(self.secretKey); + return result; +} +@end + +@interface nullFirebaseAuthMessagesPigeonCodecReader : FlutterStandardReader +@end +@implementation nullFirebaseAuthMessagesPigeonCodecReader +- (nullable id)readValueOfType:(UInt8)type { + switch (type) { + case 129: { + NSNumber *enumAsNumber = [self readValue]; + return enumAsNumber == nil + ? nil + : [[ActionCodeInfoOperationBox alloc] initWithValue:[enumAsNumber integerValue]]; + } + case 130: + return [InternalMultiFactorSession fromList:[self readValue]]; + case 131: + return [InternalPhoneMultiFactorAssertion fromList:[self readValue]]; + case 132: + return [InternalMultiFactorInfo fromList:[self readValue]]; + case 133: + return [AuthPigeonFirebaseApp fromList:[self readValue]]; + case 134: + return [InternalActionCodeInfoData fromList:[self readValue]]; + case 135: + return [InternalActionCodeInfo fromList:[self readValue]]; + case 136: + return [InternalAdditionalUserInfo fromList:[self readValue]]; + case 137: + return [InternalAuthCredential fromList:[self readValue]]; + case 138: + return [InternalUserInfo fromList:[self readValue]]; + case 139: + return [InternalUserDetails fromList:[self readValue]]; + case 140: + return [InternalUserCredential fromList:[self readValue]]; + case 141: + return [InternalAuthCredentialInput fromList:[self readValue]]; + case 142: + return [InternalActionCodeSettings fromList:[self readValue]]; + case 143: + return [InternalFirebaseAuthSettings fromList:[self readValue]]; + case 144: + return [InternalSignInProvider fromList:[self readValue]]; + case 145: + return [InternalVerifyPhoneNumberRequest fromList:[self readValue]]; + case 146: + return [InternalIdTokenResult fromList:[self readValue]]; + case 147: + return [InternalUserProfile fromList:[self readValue]]; + case 148: + return [InternalTotpSecret fromList:[self readValue]]; + default: + return [super readValueOfType:type]; + } +} +@end + +@interface nullFirebaseAuthMessagesPigeonCodecWriter : FlutterStandardWriter +@end +@implementation nullFirebaseAuthMessagesPigeonCodecWriter +- (void)writeValue:(id)value { + if ([value isKindOfClass:[ActionCodeInfoOperationBox class]]) { + ActionCodeInfoOperationBox *box = (ActionCodeInfoOperationBox *)value; + [self writeByte:129]; + [self writeValue:(value == nil ? [NSNull null] : [NSNumber numberWithInteger:box.value])]; + } else if ([value isKindOfClass:[InternalMultiFactorSession class]]) { + [self writeByte:130]; + [self writeValue:[value toList]]; + } else if ([value isKindOfClass:[InternalPhoneMultiFactorAssertion class]]) { + [self writeByte:131]; + [self writeValue:[value toList]]; + } else if ([value isKindOfClass:[InternalMultiFactorInfo class]]) { + [self writeByte:132]; + [self writeValue:[value toList]]; + } else if ([value isKindOfClass:[AuthPigeonFirebaseApp class]]) { + [self writeByte:133]; + [self writeValue:[value toList]]; + } else if ([value isKindOfClass:[InternalActionCodeInfoData class]]) { + [self writeByte:134]; + [self writeValue:[value toList]]; + } else if ([value isKindOfClass:[InternalActionCodeInfo class]]) { + [self writeByte:135]; + [self writeValue:[value toList]]; + } else if ([value isKindOfClass:[InternalAdditionalUserInfo class]]) { + [self writeByte:136]; + [self writeValue:[value toList]]; + } else if ([value isKindOfClass:[InternalAuthCredential class]]) { + [self writeByte:137]; + [self writeValue:[value toList]]; + } else if ([value isKindOfClass:[InternalUserInfo class]]) { + [self writeByte:138]; + [self writeValue:[value toList]]; + } else if ([value isKindOfClass:[InternalUserDetails class]]) { + [self writeByte:139]; + [self writeValue:[value toList]]; + } else if ([value isKindOfClass:[InternalUserCredential class]]) { + [self writeByte:140]; + [self writeValue:[value toList]]; + } else if ([value isKindOfClass:[InternalAuthCredentialInput class]]) { + [self writeByte:141]; + [self writeValue:[value toList]]; + } else if ([value isKindOfClass:[InternalActionCodeSettings class]]) { + [self writeByte:142]; + [self writeValue:[value toList]]; + } else if ([value isKindOfClass:[InternalFirebaseAuthSettings class]]) { + [self writeByte:143]; + [self writeValue:[value toList]]; + } else if ([value isKindOfClass:[InternalSignInProvider class]]) { + [self writeByte:144]; + [self writeValue:[value toList]]; + } else if ([value isKindOfClass:[InternalVerifyPhoneNumberRequest class]]) { + [self writeByte:145]; + [self writeValue:[value toList]]; + } else if ([value isKindOfClass:[InternalIdTokenResult class]]) { + [self writeByte:146]; + [self writeValue:[value toList]]; + } else if ([value isKindOfClass:[InternalUserProfile class]]) { + [self writeByte:147]; + [self writeValue:[value toList]]; + } else if ([value isKindOfClass:[InternalTotpSecret class]]) { + [self writeByte:148]; + [self writeValue:[value toList]]; + } else { + [super writeValue:value]; + } +} +@end + +@interface nullFirebaseAuthMessagesPigeonCodecReaderWriter : FlutterStandardReaderWriter +@end +@implementation nullFirebaseAuthMessagesPigeonCodecReaderWriter +- (FlutterStandardWriter *)writerWithData:(NSMutableData *)data { + return [[nullFirebaseAuthMessagesPigeonCodecWriter alloc] initWithData:data]; +} +- (FlutterStandardReader *)readerWithData:(NSData *)data { + return [[nullFirebaseAuthMessagesPigeonCodecReader alloc] initWithData:data]; +} +@end + +NSObject *nullGetFirebaseAuthMessagesCodec(void) { + static FlutterStandardMessageCodec *sSharedObject = nil; + static dispatch_once_t sPred = 0; + dispatch_once(&sPred, ^{ + nullFirebaseAuthMessagesPigeonCodecReaderWriter *readerWriter = + [[nullFirebaseAuthMessagesPigeonCodecReaderWriter alloc] init]; + sSharedObject = [FlutterStandardMessageCodec codecWithReaderWriter:readerWriter]; + }); + return sSharedObject; +} +void SetUpFirebaseAuthHostApi(id binaryMessenger, + NSObject *api) { + SetUpFirebaseAuthHostApiWithSuffix(binaryMessenger, api, @""); +} + +void SetUpFirebaseAuthHostApiWithSuffix(id binaryMessenger, + NSObject *api, + NSString *messageChannelSuffix) { + messageChannelSuffix = messageChannelSuffix.length > 0 + ? [NSString stringWithFormat:@".%@", messageChannelSuffix] + : @""; + { + FlutterBasicMessageChannel *channel = [[FlutterBasicMessageChannel alloc] + initWithName:[NSString + stringWithFormat:@"%@%@", + @"dev.flutter.pigeon.firebase_auth_platform_interface." + @"FirebaseAuthHostApi.registerIdTokenListener", + messageChannelSuffix] + binaryMessenger:binaryMessenger + codec:nullGetFirebaseAuthMessagesCodec()]; + if (api) { + NSCAssert([api respondsToSelector:@selector(registerIdTokenListenerApp:completion:)], + @"FirebaseAuthHostApi api (%@) doesn't respond to " + @"@selector(registerIdTokenListenerApp:completion:)", + api); + [channel setMessageHandler:^(id _Nullable message, FlutterReply callback) { + NSArray *args = message; + AuthPigeonFirebaseApp *arg_app = GetNullableObjectAtIndex(args, 0); + [api registerIdTokenListenerApp:arg_app + completion:^(NSString *_Nullable output, + FlutterError *_Nullable error) { + callback(wrapResult(output, error)); + }]; + }]; + } else { + [channel setMessageHandler:nil]; + } + } + { + FlutterBasicMessageChannel *channel = [[FlutterBasicMessageChannel alloc] + initWithName:[NSString + stringWithFormat:@"%@%@", + @"dev.flutter.pigeon.firebase_auth_platform_interface." + @"FirebaseAuthHostApi.registerAuthStateListener", + messageChannelSuffix] + binaryMessenger:binaryMessenger + codec:nullGetFirebaseAuthMessagesCodec()]; + if (api) { + NSCAssert([api respondsToSelector:@selector(registerAuthStateListenerApp:completion:)], + @"FirebaseAuthHostApi api (%@) doesn't respond to " + @"@selector(registerAuthStateListenerApp:completion:)", + api); + [channel setMessageHandler:^(id _Nullable message, FlutterReply callback) { + NSArray *args = message; + AuthPigeonFirebaseApp *arg_app = GetNullableObjectAtIndex(args, 0); + [api registerAuthStateListenerApp:arg_app + completion:^(NSString *_Nullable output, + FlutterError *_Nullable error) { + callback(wrapResult(output, error)); + }]; + }]; + } else { + [channel setMessageHandler:nil]; + } + } + { + FlutterBasicMessageChannel *channel = [[FlutterBasicMessageChannel alloc] + initWithName:[NSString stringWithFormat:@"%@%@", + @"dev.flutter.pigeon.firebase_auth_platform_" + @"interface.FirebaseAuthHostApi.useEmulator", + messageChannelSuffix] + binaryMessenger:binaryMessenger + codec:nullGetFirebaseAuthMessagesCodec()]; + if (api) { + NSCAssert([api respondsToSelector:@selector(useEmulatorApp:host:port:completion:)], + @"FirebaseAuthHostApi api (%@) doesn't respond to " + @"@selector(useEmulatorApp:host:port:completion:)", + api); + [channel setMessageHandler:^(id _Nullable message, FlutterReply callback) { + NSArray *args = message; + AuthPigeonFirebaseApp *arg_app = GetNullableObjectAtIndex(args, 0); + NSString *arg_host = GetNullableObjectAtIndex(args, 1); + NSInteger arg_port = [GetNullableObjectAtIndex(args, 2) integerValue]; + [api useEmulatorApp:arg_app + host:arg_host + port:arg_port + completion:^(FlutterError *_Nullable error) { + callback(wrapResult(nil, error)); + }]; + }]; + } else { + [channel setMessageHandler:nil]; + } + } + { + FlutterBasicMessageChannel *channel = [[FlutterBasicMessageChannel alloc] + initWithName:[NSString stringWithFormat:@"%@%@", + @"dev.flutter.pigeon.firebase_auth_platform_" + @"interface.FirebaseAuthHostApi.applyActionCode", + messageChannelSuffix] + binaryMessenger:binaryMessenger + codec:nullGetFirebaseAuthMessagesCodec()]; + if (api) { + NSCAssert([api respondsToSelector:@selector(applyActionCodeApp:code:completion:)], + @"FirebaseAuthHostApi api (%@) doesn't respond to " + @"@selector(applyActionCodeApp:code:completion:)", + api); + [channel setMessageHandler:^(id _Nullable message, FlutterReply callback) { + NSArray *args = message; + AuthPigeonFirebaseApp *arg_app = GetNullableObjectAtIndex(args, 0); + NSString *arg_code = GetNullableObjectAtIndex(args, 1); + [api applyActionCodeApp:arg_app + code:arg_code + completion:^(FlutterError *_Nullable error) { + callback(wrapResult(nil, error)); + }]; + }]; + } else { + [channel setMessageHandler:nil]; + } + } + { + FlutterBasicMessageChannel *channel = [[FlutterBasicMessageChannel alloc] + initWithName:[NSString stringWithFormat:@"%@%@", + @"dev.flutter.pigeon.firebase_auth_platform_" + @"interface.FirebaseAuthHostApi.checkActionCode", + messageChannelSuffix] + binaryMessenger:binaryMessenger + codec:nullGetFirebaseAuthMessagesCodec()]; + if (api) { + NSCAssert([api respondsToSelector:@selector(checkActionCodeApp:code:completion:)], + @"FirebaseAuthHostApi api (%@) doesn't respond to " + @"@selector(checkActionCodeApp:code:completion:)", + api); + [channel setMessageHandler:^(id _Nullable message, FlutterReply callback) { + NSArray *args = message; + AuthPigeonFirebaseApp *arg_app = GetNullableObjectAtIndex(args, 0); + NSString *arg_code = GetNullableObjectAtIndex(args, 1); + [api checkActionCodeApp:arg_app + code:arg_code + completion:^(InternalActionCodeInfo *_Nullable output, + FlutterError *_Nullable error) { + callback(wrapResult(output, error)); + }]; + }]; + } else { + [channel setMessageHandler:nil]; + } + } + { + FlutterBasicMessageChannel *channel = [[FlutterBasicMessageChannel alloc] + initWithName:[NSString + stringWithFormat:@"%@%@", + @"dev.flutter.pigeon.firebase_auth_platform_interface." + @"FirebaseAuthHostApi.confirmPasswordReset", + messageChannelSuffix] + binaryMessenger:binaryMessenger + codec:nullGetFirebaseAuthMessagesCodec()]; + if (api) { + NSCAssert( + [api respondsToSelector:@selector(confirmPasswordResetApp:code:newPassword:completion:)], + @"FirebaseAuthHostApi api (%@) doesn't respond to " + @"@selector(confirmPasswordResetApp:code:newPassword:completion:)", + api); + [channel setMessageHandler:^(id _Nullable message, FlutterReply callback) { + NSArray *args = message; + AuthPigeonFirebaseApp *arg_app = GetNullableObjectAtIndex(args, 0); + NSString *arg_code = GetNullableObjectAtIndex(args, 1); + NSString *arg_newPassword = GetNullableObjectAtIndex(args, 2); + [api confirmPasswordResetApp:arg_app + code:arg_code + newPassword:arg_newPassword + completion:^(FlutterError *_Nullable error) { + callback(wrapResult(nil, error)); + }]; + }]; + } else { + [channel setMessageHandler:nil]; + } + } + { + FlutterBasicMessageChannel *channel = [[FlutterBasicMessageChannel alloc] + initWithName:[NSString + stringWithFormat:@"%@%@", + @"dev.flutter.pigeon.firebase_auth_platform_interface." + @"FirebaseAuthHostApi.createUserWithEmailAndPassword", + messageChannelSuffix] + binaryMessenger:binaryMessenger + codec:nullGetFirebaseAuthMessagesCodec()]; + if (api) { + NSCAssert( + [api + respondsToSelector:@selector( + createUserWithEmailAndPasswordApp:email:password:completion:)], + @"FirebaseAuthHostApi api (%@) doesn't respond to " + @"@selector(createUserWithEmailAndPasswordApp:email:password:completion:)", + api); + [channel setMessageHandler:^(id _Nullable message, FlutterReply callback) { + NSArray *args = message; + AuthPigeonFirebaseApp *arg_app = GetNullableObjectAtIndex(args, 0); + NSString *arg_email = GetNullableObjectAtIndex(args, 1); + NSString *arg_password = GetNullableObjectAtIndex(args, 2); + [api createUserWithEmailAndPasswordApp:arg_app + email:arg_email + password:arg_password + completion:^(InternalUserCredential *_Nullable output, + FlutterError *_Nullable error) { + callback(wrapResult(output, error)); + }]; + }]; + } else { + [channel setMessageHandler:nil]; + } + } + { + FlutterBasicMessageChannel *channel = [[FlutterBasicMessageChannel alloc] + initWithName:[NSString + stringWithFormat:@"%@%@", + @"dev.flutter.pigeon.firebase_auth_platform_interface." + @"FirebaseAuthHostApi.signInAnonymously", + messageChannelSuffix] + binaryMessenger:binaryMessenger + codec:nullGetFirebaseAuthMessagesCodec()]; + if (api) { + NSCAssert([api respondsToSelector:@selector(signInAnonymouslyApp:completion:)], + @"FirebaseAuthHostApi api (%@) doesn't respond to " + @"@selector(signInAnonymouslyApp:completion:)", + api); + [channel setMessageHandler:^(id _Nullable message, FlutterReply callback) { + NSArray *args = message; + AuthPigeonFirebaseApp *arg_app = GetNullableObjectAtIndex(args, 0); + [api signInAnonymouslyApp:arg_app + completion:^(InternalUserCredential *_Nullable output, + FlutterError *_Nullable error) { + callback(wrapResult(output, error)); + }]; + }]; + } else { + [channel setMessageHandler:nil]; + } + } + { + FlutterBasicMessageChannel *channel = [[FlutterBasicMessageChannel alloc] + initWithName:[NSString + stringWithFormat:@"%@%@", + @"dev.flutter.pigeon.firebase_auth_platform_interface." + @"FirebaseAuthHostApi.signInWithCredential", + messageChannelSuffix] + binaryMessenger:binaryMessenger + codec:nullGetFirebaseAuthMessagesCodec()]; + if (api) { + NSCAssert([api respondsToSelector:@selector(signInWithCredentialApp:input:completion:)], + @"FirebaseAuthHostApi api (%@) doesn't respond to " + @"@selector(signInWithCredentialApp:input:completion:)", + api); + [channel setMessageHandler:^(id _Nullable message, FlutterReply callback) { + NSArray *args = message; + AuthPigeonFirebaseApp *arg_app = GetNullableObjectAtIndex(args, 0); + NSDictionary *arg_input = GetNullableObjectAtIndex(args, 1); + [api signInWithCredentialApp:arg_app + input:arg_input + completion:^(InternalUserCredential *_Nullable output, + FlutterError *_Nullable error) { + callback(wrapResult(output, error)); + }]; + }]; + } else { + [channel setMessageHandler:nil]; + } + } + { + FlutterBasicMessageChannel *channel = [[FlutterBasicMessageChannel alloc] + initWithName:[NSString + stringWithFormat:@"%@%@", + @"dev.flutter.pigeon.firebase_auth_platform_interface." + @"FirebaseAuthHostApi.signInWithCustomToken", + messageChannelSuffix] + binaryMessenger:binaryMessenger + codec:nullGetFirebaseAuthMessagesCodec()]; + if (api) { + NSCAssert([api respondsToSelector:@selector(signInWithCustomTokenApp:token:completion:)], + @"FirebaseAuthHostApi api (%@) doesn't respond to " + @"@selector(signInWithCustomTokenApp:token:completion:)", + api); + [channel setMessageHandler:^(id _Nullable message, FlutterReply callback) { + NSArray *args = message; + AuthPigeonFirebaseApp *arg_app = GetNullableObjectAtIndex(args, 0); + NSString *arg_token = GetNullableObjectAtIndex(args, 1); + [api signInWithCustomTokenApp:arg_app + token:arg_token + completion:^(InternalUserCredential *_Nullable output, + FlutterError *_Nullable error) { + callback(wrapResult(output, error)); + }]; + }]; + } else { + [channel setMessageHandler:nil]; + } + } + { + FlutterBasicMessageChannel *channel = [[FlutterBasicMessageChannel alloc] + initWithName:[NSString + stringWithFormat:@"%@%@", + @"dev.flutter.pigeon.firebase_auth_platform_interface." + @"FirebaseAuthHostApi.signInWithEmailAndPassword", + messageChannelSuffix] + binaryMessenger:binaryMessenger + codec:nullGetFirebaseAuthMessagesCodec()]; + if (api) { + NSCAssert( + [api respondsToSelector:@selector( + signInWithEmailAndPasswordApp:email:password:completion:)], + @"FirebaseAuthHostApi api (%@) doesn't respond to " + @"@selector(signInWithEmailAndPasswordApp:email:password:completion:)", + api); + [channel setMessageHandler:^(id _Nullable message, FlutterReply callback) { + NSArray *args = message; + AuthPigeonFirebaseApp *arg_app = GetNullableObjectAtIndex(args, 0); + NSString *arg_email = GetNullableObjectAtIndex(args, 1); + NSString *arg_password = GetNullableObjectAtIndex(args, 2); + [api signInWithEmailAndPasswordApp:arg_app + email:arg_email + password:arg_password + completion:^(InternalUserCredential *_Nullable output, + FlutterError *_Nullable error) { + callback(wrapResult(output, error)); + }]; + }]; + } else { + [channel setMessageHandler:nil]; + } + } + { + FlutterBasicMessageChannel *channel = [[FlutterBasicMessageChannel alloc] + initWithName:[NSString + stringWithFormat:@"%@%@", + @"dev.flutter.pigeon.firebase_auth_platform_interface." + @"FirebaseAuthHostApi.signInWithEmailLink", + messageChannelSuffix] + binaryMessenger:binaryMessenger + codec:nullGetFirebaseAuthMessagesCodec()]; + if (api) { + NSCAssert( + [api respondsToSelector:@selector(signInWithEmailLinkApp:email:emailLink:completion:)], + @"FirebaseAuthHostApi api (%@) doesn't respond to " + @"@selector(signInWithEmailLinkApp:email:emailLink:completion:)", + api); + [channel setMessageHandler:^(id _Nullable message, FlutterReply callback) { + NSArray *args = message; + AuthPigeonFirebaseApp *arg_app = GetNullableObjectAtIndex(args, 0); + NSString *arg_email = GetNullableObjectAtIndex(args, 1); + NSString *arg_emailLink = GetNullableObjectAtIndex(args, 2); + [api signInWithEmailLinkApp:arg_app + email:arg_email + emailLink:arg_emailLink + completion:^(InternalUserCredential *_Nullable output, + FlutterError *_Nullable error) { + callback(wrapResult(output, error)); + }]; + }]; + } else { + [channel setMessageHandler:nil]; + } + } + { + FlutterBasicMessageChannel *channel = [[FlutterBasicMessageChannel alloc] + initWithName:[NSString + stringWithFormat:@"%@%@", + @"dev.flutter.pigeon.firebase_auth_platform_interface." + @"FirebaseAuthHostApi.signInWithProvider", + messageChannelSuffix] + binaryMessenger:binaryMessenger + codec:nullGetFirebaseAuthMessagesCodec()]; + if (api) { + NSCAssert( + [api respondsToSelector:@selector(signInWithProviderApp:signInProvider:completion:)], + @"FirebaseAuthHostApi api (%@) doesn't respond to " + @"@selector(signInWithProviderApp:signInProvider:completion:)", + api); + [channel setMessageHandler:^(id _Nullable message, FlutterReply callback) { + NSArray *args = message; + AuthPigeonFirebaseApp *arg_app = GetNullableObjectAtIndex(args, 0); + InternalSignInProvider *arg_signInProvider = GetNullableObjectAtIndex(args, 1); + [api signInWithProviderApp:arg_app + signInProvider:arg_signInProvider + completion:^(InternalUserCredential *_Nullable output, + FlutterError *_Nullable error) { + callback(wrapResult(output, error)); + }]; + }]; + } else { + [channel setMessageHandler:nil]; + } + } + { + FlutterBasicMessageChannel *channel = [[FlutterBasicMessageChannel alloc] + initWithName:[NSString stringWithFormat:@"%@%@", + @"dev.flutter.pigeon.firebase_auth_platform_" + @"interface.FirebaseAuthHostApi.signOut", + messageChannelSuffix] + binaryMessenger:binaryMessenger + codec:nullGetFirebaseAuthMessagesCodec()]; + if (api) { + NSCAssert( + [api respondsToSelector:@selector(signOutApp:completion:)], + @"FirebaseAuthHostApi api (%@) doesn't respond to @selector(signOutApp:completion:)", + api); + [channel setMessageHandler:^(id _Nullable message, FlutterReply callback) { + NSArray *args = message; + AuthPigeonFirebaseApp *arg_app = GetNullableObjectAtIndex(args, 0); + [api signOutApp:arg_app + completion:^(FlutterError *_Nullable error) { + callback(wrapResult(nil, error)); + }]; + }]; + } else { + [channel setMessageHandler:nil]; + } + } + { + FlutterBasicMessageChannel *channel = [[FlutterBasicMessageChannel alloc] + initWithName:[NSString + stringWithFormat:@"%@%@", + @"dev.flutter.pigeon.firebase_auth_platform_interface." + @"FirebaseAuthHostApi.fetchSignInMethodsForEmail", + messageChannelSuffix] + binaryMessenger:binaryMessenger + codec:nullGetFirebaseAuthMessagesCodec()]; + if (api) { + NSCAssert([api respondsToSelector:@selector(fetchSignInMethodsForEmailApp:email:completion:)], + @"FirebaseAuthHostApi api (%@) doesn't respond to " + @"@selector(fetchSignInMethodsForEmailApp:email:completion:)", + api); + [channel setMessageHandler:^(id _Nullable message, FlutterReply callback) { + NSArray *args = message; + AuthPigeonFirebaseApp *arg_app = GetNullableObjectAtIndex(args, 0); + NSString *arg_email = GetNullableObjectAtIndex(args, 1); + [api fetchSignInMethodsForEmailApp:arg_app + email:arg_email + completion:^(NSArray *_Nullable output, + FlutterError *_Nullable error) { + callback(wrapResult(output, error)); + }]; + }]; + } else { + [channel setMessageHandler:nil]; + } + } + { + FlutterBasicMessageChannel *channel = [[FlutterBasicMessageChannel alloc] + initWithName:[NSString + stringWithFormat:@"%@%@", + @"dev.flutter.pigeon.firebase_auth_platform_interface." + @"FirebaseAuthHostApi.sendPasswordResetEmail", + messageChannelSuffix] + binaryMessenger:binaryMessenger + codec:nullGetFirebaseAuthMessagesCodec()]; + if (api) { + NSCAssert([api respondsToSelector: + @selector(sendPasswordResetEmailApp:email:actionCodeSettings:completion:)], + @"FirebaseAuthHostApi api (%@) doesn't respond to " + @"@selector(sendPasswordResetEmailApp:email:actionCodeSettings:completion:)", + api); + [channel setMessageHandler:^(id _Nullable message, FlutterReply callback) { + NSArray *args = message; + AuthPigeonFirebaseApp *arg_app = GetNullableObjectAtIndex(args, 0); + NSString *arg_email = GetNullableObjectAtIndex(args, 1); + InternalActionCodeSettings *arg_actionCodeSettings = GetNullableObjectAtIndex(args, 2); + [api sendPasswordResetEmailApp:arg_app + email:arg_email + actionCodeSettings:arg_actionCodeSettings + completion:^(FlutterError *_Nullable error) { + callback(wrapResult(nil, error)); + }]; + }]; + } else { + [channel setMessageHandler:nil]; + } + } + { + FlutterBasicMessageChannel *channel = [[FlutterBasicMessageChannel alloc] + initWithName:[NSString + stringWithFormat:@"%@%@", + @"dev.flutter.pigeon.firebase_auth_platform_interface." + @"FirebaseAuthHostApi.sendSignInLinkToEmail", + messageChannelSuffix] + binaryMessenger:binaryMessenger + codec:nullGetFirebaseAuthMessagesCodec()]; + if (api) { + NSCAssert([api respondsToSelector: + @selector(sendSignInLinkToEmailApp:email:actionCodeSettings:completion:)], + @"FirebaseAuthHostApi api (%@) doesn't respond to " + @"@selector(sendSignInLinkToEmailApp:email:actionCodeSettings:completion:)", + api); + [channel setMessageHandler:^(id _Nullable message, FlutterReply callback) { + NSArray *args = message; + AuthPigeonFirebaseApp *arg_app = GetNullableObjectAtIndex(args, 0); + NSString *arg_email = GetNullableObjectAtIndex(args, 1); + InternalActionCodeSettings *arg_actionCodeSettings = GetNullableObjectAtIndex(args, 2); + [api sendSignInLinkToEmailApp:arg_app + email:arg_email + actionCodeSettings:arg_actionCodeSettings + completion:^(FlutterError *_Nullable error) { + callback(wrapResult(nil, error)); + }]; + }]; + } else { + [channel setMessageHandler:nil]; + } + } + { + FlutterBasicMessageChannel *channel = [[FlutterBasicMessageChannel alloc] + initWithName:[NSString stringWithFormat:@"%@%@", + @"dev.flutter.pigeon.firebase_auth_platform_" + @"interface.FirebaseAuthHostApi.setLanguageCode", + messageChannelSuffix] + binaryMessenger:binaryMessenger + codec:nullGetFirebaseAuthMessagesCodec()]; + if (api) { + NSCAssert([api respondsToSelector:@selector(setLanguageCodeApp:languageCode:completion:)], + @"FirebaseAuthHostApi api (%@) doesn't respond to " + @"@selector(setLanguageCodeApp:languageCode:completion:)", + api); + [channel setMessageHandler:^(id _Nullable message, FlutterReply callback) { + NSArray *args = message; + AuthPigeonFirebaseApp *arg_app = GetNullableObjectAtIndex(args, 0); + NSString *arg_languageCode = GetNullableObjectAtIndex(args, 1); + [api setLanguageCodeApp:arg_app + languageCode:arg_languageCode + completion:^(NSString *_Nullable output, FlutterError *_Nullable error) { + callback(wrapResult(output, error)); + }]; + }]; + } else { + [channel setMessageHandler:nil]; + } + } + { + FlutterBasicMessageChannel *channel = [[FlutterBasicMessageChannel alloc] + initWithName:[NSString stringWithFormat:@"%@%@", + @"dev.flutter.pigeon.firebase_auth_platform_" + @"interface.FirebaseAuthHostApi.setSettings", + messageChannelSuffix] + binaryMessenger:binaryMessenger + codec:nullGetFirebaseAuthMessagesCodec()]; + if (api) { + NSCAssert([api respondsToSelector:@selector(setSettingsApp:settings:completion:)], + @"FirebaseAuthHostApi api (%@) doesn't respond to " + @"@selector(setSettingsApp:settings:completion:)", + api); + [channel setMessageHandler:^(id _Nullable message, FlutterReply callback) { + NSArray *args = message; + AuthPigeonFirebaseApp *arg_app = GetNullableObjectAtIndex(args, 0); + InternalFirebaseAuthSettings *arg_settings = GetNullableObjectAtIndex(args, 1); + [api setSettingsApp:arg_app + settings:arg_settings + completion:^(FlutterError *_Nullable error) { + callback(wrapResult(nil, error)); + }]; + }]; + } else { + [channel setMessageHandler:nil]; + } + } + { + FlutterBasicMessageChannel *channel = [[FlutterBasicMessageChannel alloc] + initWithName:[NSString + stringWithFormat:@"%@%@", + @"dev.flutter.pigeon.firebase_auth_platform_interface." + @"FirebaseAuthHostApi.verifyPasswordResetCode", + messageChannelSuffix] + binaryMessenger:binaryMessenger + codec:nullGetFirebaseAuthMessagesCodec()]; + if (api) { + NSCAssert([api respondsToSelector:@selector(verifyPasswordResetCodeApp:code:completion:)], + @"FirebaseAuthHostApi api (%@) doesn't respond to " + @"@selector(verifyPasswordResetCodeApp:code:completion:)", + api); + [channel setMessageHandler:^(id _Nullable message, FlutterReply callback) { + NSArray *args = message; + AuthPigeonFirebaseApp *arg_app = GetNullableObjectAtIndex(args, 0); + NSString *arg_code = GetNullableObjectAtIndex(args, 1); + [api verifyPasswordResetCodeApp:arg_app + code:arg_code + completion:^(NSString *_Nullable output, + FlutterError *_Nullable error) { + callback(wrapResult(output, error)); + }]; + }]; + } else { + [channel setMessageHandler:nil]; + } + } + { + FlutterBasicMessageChannel *channel = [[FlutterBasicMessageChannel alloc] + initWithName:[NSString + stringWithFormat:@"%@%@", + @"dev.flutter.pigeon.firebase_auth_platform_interface." + @"FirebaseAuthHostApi.verifyPhoneNumber", + messageChannelSuffix] + binaryMessenger:binaryMessenger + codec:nullGetFirebaseAuthMessagesCodec()]; + if (api) { + NSCAssert([api respondsToSelector:@selector(verifyPhoneNumberApp:request:completion:)], + @"FirebaseAuthHostApi api (%@) doesn't respond to " + @"@selector(verifyPhoneNumberApp:request:completion:)", + api); + [channel setMessageHandler:^(id _Nullable message, FlutterReply callback) { + NSArray *args = message; + AuthPigeonFirebaseApp *arg_app = GetNullableObjectAtIndex(args, 0); + InternalVerifyPhoneNumberRequest *arg_request = GetNullableObjectAtIndex(args, 1); + [api verifyPhoneNumberApp:arg_app + request:arg_request + completion:^(NSString *_Nullable output, FlutterError *_Nullable error) { + callback(wrapResult(output, error)); + }]; + }]; + } else { + [channel setMessageHandler:nil]; + } + } + { + FlutterBasicMessageChannel *channel = [[FlutterBasicMessageChannel alloc] + initWithName: + [NSString stringWithFormat:@"%@%@", + @"dev.flutter.pigeon.firebase_auth_platform_interface." + @"FirebaseAuthHostApi.revokeTokenWithAuthorizationCode", + messageChannelSuffix] + binaryMessenger:binaryMessenger + codec:nullGetFirebaseAuthMessagesCodec()]; + if (api) { + NSCAssert([api respondsToSelector:@selector(revokeTokenWithAuthorizationCodeApp: + authorizationCode:completion:)], + @"FirebaseAuthHostApi api (%@) doesn't respond to " + @"@selector(revokeTokenWithAuthorizationCodeApp:authorizationCode:completion:)", + api); + [channel setMessageHandler:^(id _Nullable message, FlutterReply callback) { + NSArray *args = message; + AuthPigeonFirebaseApp *arg_app = GetNullableObjectAtIndex(args, 0); + NSString *arg_authorizationCode = GetNullableObjectAtIndex(args, 1); + [api revokeTokenWithAuthorizationCodeApp:arg_app + authorizationCode:arg_authorizationCode + completion:^(FlutterError *_Nullable error) { + callback(wrapResult(nil, error)); + }]; + }]; + } else { + [channel setMessageHandler:nil]; + } + } + { + FlutterBasicMessageChannel *channel = [[FlutterBasicMessageChannel alloc] + initWithName:[NSString + stringWithFormat:@"%@%@", + @"dev.flutter.pigeon.firebase_auth_platform_interface." + @"FirebaseAuthHostApi.revokeAccessToken", + messageChannelSuffix] + binaryMessenger:binaryMessenger + codec:nullGetFirebaseAuthMessagesCodec()]; + if (api) { + NSCAssert([api respondsToSelector:@selector(revokeAccessTokenApp:accessToken:completion:)], + @"FirebaseAuthHostApi api (%@) doesn't respond to " + @"@selector(revokeAccessTokenApp:accessToken:completion:)", + api); + [channel setMessageHandler:^(id _Nullable message, FlutterReply callback) { + NSArray *args = message; + AuthPigeonFirebaseApp *arg_app = GetNullableObjectAtIndex(args, 0); + NSString *arg_accessToken = GetNullableObjectAtIndex(args, 1); + [api revokeAccessTokenApp:arg_app + accessToken:arg_accessToken + completion:^(FlutterError *_Nullable error) { + callback(wrapResult(nil, error)); + }]; + }]; + } else { + [channel setMessageHandler:nil]; + } + } + { + FlutterBasicMessageChannel *channel = [[FlutterBasicMessageChannel alloc] + initWithName:[NSString + stringWithFormat:@"%@%@", + @"dev.flutter.pigeon.firebase_auth_platform_interface." + @"FirebaseAuthHostApi.initializeRecaptchaConfig", + messageChannelSuffix] + binaryMessenger:binaryMessenger + codec:nullGetFirebaseAuthMessagesCodec()]; + if (api) { + NSCAssert([api respondsToSelector:@selector(initializeRecaptchaConfigApp:completion:)], + @"FirebaseAuthHostApi api (%@) doesn't respond to " + @"@selector(initializeRecaptchaConfigApp:completion:)", + api); + [channel setMessageHandler:^(id _Nullable message, FlutterReply callback) { + NSArray *args = message; + AuthPigeonFirebaseApp *arg_app = GetNullableObjectAtIndex(args, 0); + [api initializeRecaptchaConfigApp:arg_app + completion:^(FlutterError *_Nullable error) { + callback(wrapResult(nil, error)); + }]; + }]; + } else { + [channel setMessageHandler:nil]; + } + } +} +void SetUpFirebaseAuthUserHostApi(id binaryMessenger, + NSObject *api) { + SetUpFirebaseAuthUserHostApiWithSuffix(binaryMessenger, api, @""); +} + +void SetUpFirebaseAuthUserHostApiWithSuffix(id binaryMessenger, + NSObject *api, + NSString *messageChannelSuffix) { + messageChannelSuffix = messageChannelSuffix.length > 0 + ? [NSString stringWithFormat:@".%@", messageChannelSuffix] + : @""; + { + FlutterBasicMessageChannel *channel = [[FlutterBasicMessageChannel alloc] + initWithName:[NSString stringWithFormat:@"%@%@", + @"dev.flutter.pigeon.firebase_auth_platform_" + @"interface.FirebaseAuthUserHostApi.delete", + messageChannelSuffix] + binaryMessenger:binaryMessenger + codec:nullGetFirebaseAuthMessagesCodec()]; + if (api) { + NSCAssert( + [api respondsToSelector:@selector(deleteApp:completion:)], + @"FirebaseAuthUserHostApi api (%@) doesn't respond to @selector(deleteApp:completion:)", + api); + [channel setMessageHandler:^(id _Nullable message, FlutterReply callback) { + NSArray *args = message; + AuthPigeonFirebaseApp *arg_app = GetNullableObjectAtIndex(args, 0); + [api deleteApp:arg_app + completion:^(FlutterError *_Nullable error) { + callback(wrapResult(nil, error)); + }]; + }]; + } else { + [channel setMessageHandler:nil]; + } + } + { + FlutterBasicMessageChannel *channel = [[FlutterBasicMessageChannel alloc] + initWithName:[NSString stringWithFormat:@"%@%@", + @"dev.flutter.pigeon.firebase_auth_platform_" + @"interface.FirebaseAuthUserHostApi.getIdToken", + messageChannelSuffix] + binaryMessenger:binaryMessenger + codec:nullGetFirebaseAuthMessagesCodec()]; + if (api) { + NSCAssert([api respondsToSelector:@selector(getIdTokenApp:forceRefresh:completion:)], + @"FirebaseAuthUserHostApi api (%@) doesn't respond to " + @"@selector(getIdTokenApp:forceRefresh:completion:)", + api); + [channel setMessageHandler:^(id _Nullable message, FlutterReply callback) { + NSArray *args = message; + AuthPigeonFirebaseApp *arg_app = GetNullableObjectAtIndex(args, 0); + BOOL arg_forceRefresh = [GetNullableObjectAtIndex(args, 1) boolValue]; + [api getIdTokenApp:arg_app + forceRefresh:arg_forceRefresh + completion:^(InternalIdTokenResult *_Nullable output, + FlutterError *_Nullable error) { + callback(wrapResult(output, error)); + }]; + }]; + } else { + [channel setMessageHandler:nil]; + } + } + { + FlutterBasicMessageChannel *channel = [[FlutterBasicMessageChannel alloc] + initWithName:[NSString + stringWithFormat:@"%@%@", + @"dev.flutter.pigeon.firebase_auth_platform_interface." + @"FirebaseAuthUserHostApi.linkWithCredential", + messageChannelSuffix] + binaryMessenger:binaryMessenger + codec:nullGetFirebaseAuthMessagesCodec()]; + if (api) { + NSCAssert([api respondsToSelector:@selector(linkWithCredentialApp:input:completion:)], + @"FirebaseAuthUserHostApi api (%@) doesn't respond to " + @"@selector(linkWithCredentialApp:input:completion:)", + api); + [channel setMessageHandler:^(id _Nullable message, FlutterReply callback) { + NSArray *args = message; + AuthPigeonFirebaseApp *arg_app = GetNullableObjectAtIndex(args, 0); + NSDictionary *arg_input = GetNullableObjectAtIndex(args, 1); + [api linkWithCredentialApp:arg_app + input:arg_input + completion:^(InternalUserCredential *_Nullable output, + FlutterError *_Nullable error) { + callback(wrapResult(output, error)); + }]; + }]; + } else { + [channel setMessageHandler:nil]; + } + } + { + FlutterBasicMessageChannel *channel = [[FlutterBasicMessageChannel alloc] + initWithName:[NSString + stringWithFormat:@"%@%@", + @"dev.flutter.pigeon.firebase_auth_platform_interface." + @"FirebaseAuthUserHostApi.linkWithProvider", + messageChannelSuffix] + binaryMessenger:binaryMessenger + codec:nullGetFirebaseAuthMessagesCodec()]; + if (api) { + NSCAssert([api respondsToSelector:@selector(linkWithProviderApp:signInProvider:completion:)], + @"FirebaseAuthUserHostApi api (%@) doesn't respond to " + @"@selector(linkWithProviderApp:signInProvider:completion:)", + api); + [channel setMessageHandler:^(id _Nullable message, FlutterReply callback) { + NSArray *args = message; + AuthPigeonFirebaseApp *arg_app = GetNullableObjectAtIndex(args, 0); + InternalSignInProvider *arg_signInProvider = GetNullableObjectAtIndex(args, 1); + [api linkWithProviderApp:arg_app + signInProvider:arg_signInProvider + completion:^(InternalUserCredential *_Nullable output, + FlutterError *_Nullable error) { + callback(wrapResult(output, error)); + }]; + }]; + } else { + [channel setMessageHandler:nil]; + } + } + { + FlutterBasicMessageChannel *channel = [[FlutterBasicMessageChannel alloc] + initWithName: + [NSString stringWithFormat:@"%@%@", + @"dev.flutter.pigeon.firebase_auth_platform_interface." + @"FirebaseAuthUserHostApi.reauthenticateWithCredential", + messageChannelSuffix] + binaryMessenger:binaryMessenger + codec:nullGetFirebaseAuthMessagesCodec()]; + if (api) { + NSCAssert( + [api respondsToSelector:@selector(reauthenticateWithCredentialApp:input:completion:)], + @"FirebaseAuthUserHostApi api (%@) doesn't respond to " + @"@selector(reauthenticateWithCredentialApp:input:completion:)", + api); + [channel setMessageHandler:^(id _Nullable message, FlutterReply callback) { + NSArray *args = message; + AuthPigeonFirebaseApp *arg_app = GetNullableObjectAtIndex(args, 0); + NSDictionary *arg_input = GetNullableObjectAtIndex(args, 1); + [api reauthenticateWithCredentialApp:arg_app + input:arg_input + completion:^(InternalUserCredential *_Nullable output, + FlutterError *_Nullable error) { + callback(wrapResult(output, error)); + }]; + }]; + } else { + [channel setMessageHandler:nil]; + } + } + { + FlutterBasicMessageChannel *channel = [[FlutterBasicMessageChannel alloc] + initWithName:[NSString + stringWithFormat:@"%@%@", + @"dev.flutter.pigeon.firebase_auth_platform_interface." + @"FirebaseAuthUserHostApi.reauthenticateWithProvider", + messageChannelSuffix] + binaryMessenger:binaryMessenger + codec:nullGetFirebaseAuthMessagesCodec()]; + if (api) { + NSCAssert( + [api respondsToSelector:@selector( + reauthenticateWithProviderApp:signInProvider:completion:)], + @"FirebaseAuthUserHostApi api (%@) doesn't respond to " + @"@selector(reauthenticateWithProviderApp:signInProvider:completion:)", + api); + [channel setMessageHandler:^(id _Nullable message, FlutterReply callback) { + NSArray *args = message; + AuthPigeonFirebaseApp *arg_app = GetNullableObjectAtIndex(args, 0); + InternalSignInProvider *arg_signInProvider = GetNullableObjectAtIndex(args, 1); + [api reauthenticateWithProviderApp:arg_app + signInProvider:arg_signInProvider + completion:^(InternalUserCredential *_Nullable output, + FlutterError *_Nullable error) { + callback(wrapResult(output, error)); + }]; + }]; + } else { + [channel setMessageHandler:nil]; + } + } + { + FlutterBasicMessageChannel *channel = [[FlutterBasicMessageChannel alloc] + initWithName:[NSString stringWithFormat:@"%@%@", + @"dev.flutter.pigeon.firebase_auth_platform_" + @"interface.FirebaseAuthUserHostApi.reload", + messageChannelSuffix] + binaryMessenger:binaryMessenger + codec:nullGetFirebaseAuthMessagesCodec()]; + if (api) { + NSCAssert( + [api respondsToSelector:@selector(reloadApp:completion:)], + @"FirebaseAuthUserHostApi api (%@) doesn't respond to @selector(reloadApp:completion:)", + api); + [channel setMessageHandler:^(id _Nullable message, FlutterReply callback) { + NSArray *args = message; + AuthPigeonFirebaseApp *arg_app = GetNullableObjectAtIndex(args, 0); + [api reloadApp:arg_app + completion:^(InternalUserDetails *_Nullable output, FlutterError *_Nullable error) { + callback(wrapResult(output, error)); + }]; + }]; + } else { + [channel setMessageHandler:nil]; + } + } + { + FlutterBasicMessageChannel *channel = [[FlutterBasicMessageChannel alloc] + initWithName:[NSString + stringWithFormat:@"%@%@", + @"dev.flutter.pigeon.firebase_auth_platform_interface." + @"FirebaseAuthUserHostApi.sendEmailVerification", + messageChannelSuffix] + binaryMessenger:binaryMessenger + codec:nullGetFirebaseAuthMessagesCodec()]; + if (api) { + NSCAssert( + [api respondsToSelector:@selector( + sendEmailVerificationApp:actionCodeSettings:completion:)], + @"FirebaseAuthUserHostApi api (%@) doesn't respond to " + @"@selector(sendEmailVerificationApp:actionCodeSettings:completion:)", + api); + [channel setMessageHandler:^(id _Nullable message, FlutterReply callback) { + NSArray *args = message; + AuthPigeonFirebaseApp *arg_app = GetNullableObjectAtIndex(args, 0); + InternalActionCodeSettings *arg_actionCodeSettings = GetNullableObjectAtIndex(args, 1); + [api sendEmailVerificationApp:arg_app + actionCodeSettings:arg_actionCodeSettings + completion:^(FlutterError *_Nullable error) { + callback(wrapResult(nil, error)); + }]; + }]; + } else { + [channel setMessageHandler:nil]; + } + } + { + FlutterBasicMessageChannel *channel = [[FlutterBasicMessageChannel alloc] + initWithName:[NSString stringWithFormat:@"%@%@", + @"dev.flutter.pigeon.firebase_auth_platform_" + @"interface.FirebaseAuthUserHostApi.unlink", + messageChannelSuffix] + binaryMessenger:binaryMessenger + codec:nullGetFirebaseAuthMessagesCodec()]; + if (api) { + NSCAssert([api respondsToSelector:@selector(unlinkApp:providerId:completion:)], + @"FirebaseAuthUserHostApi api (%@) doesn't respond to " + @"@selector(unlinkApp:providerId:completion:)", + api); + [channel setMessageHandler:^(id _Nullable message, FlutterReply callback) { + NSArray *args = message; + AuthPigeonFirebaseApp *arg_app = GetNullableObjectAtIndex(args, 0); + NSString *arg_providerId = GetNullableObjectAtIndex(args, 1); + [api unlinkApp:arg_app + providerId:arg_providerId + completion:^(InternalUserCredential *_Nullable output, FlutterError *_Nullable error) { + callback(wrapResult(output, error)); + }]; + }]; + } else { + [channel setMessageHandler:nil]; + } + } + { + FlutterBasicMessageChannel *channel = [[FlutterBasicMessageChannel alloc] + initWithName:[NSString stringWithFormat:@"%@%@", + @"dev.flutter.pigeon.firebase_auth_platform_" + @"interface.FirebaseAuthUserHostApi.updateEmail", + messageChannelSuffix] + binaryMessenger:binaryMessenger + codec:nullGetFirebaseAuthMessagesCodec()]; + if (api) { + NSCAssert([api respondsToSelector:@selector(updateEmailApp:newEmail:completion:)], + @"FirebaseAuthUserHostApi api (%@) doesn't respond to " + @"@selector(updateEmailApp:newEmail:completion:)", + api); + [channel setMessageHandler:^(id _Nullable message, FlutterReply callback) { + NSArray *args = message; + AuthPigeonFirebaseApp *arg_app = GetNullableObjectAtIndex(args, 0); + NSString *arg_newEmail = GetNullableObjectAtIndex(args, 1); + [api + updateEmailApp:arg_app + newEmail:arg_newEmail + completion:^(InternalUserDetails *_Nullable output, FlutterError *_Nullable error) { + callback(wrapResult(output, error)); + }]; + }]; + } else { + [channel setMessageHandler:nil]; + } + } + { + FlutterBasicMessageChannel *channel = [[FlutterBasicMessageChannel alloc] + initWithName:[NSString + stringWithFormat:@"%@%@", + @"dev.flutter.pigeon.firebase_auth_platform_interface." + @"FirebaseAuthUserHostApi.updatePassword", + messageChannelSuffix] + binaryMessenger:binaryMessenger + codec:nullGetFirebaseAuthMessagesCodec()]; + if (api) { + NSCAssert([api respondsToSelector:@selector(updatePasswordApp:newPassword:completion:)], + @"FirebaseAuthUserHostApi api (%@) doesn't respond to " + @"@selector(updatePasswordApp:newPassword:completion:)", + api); + [channel setMessageHandler:^(id _Nullable message, FlutterReply callback) { + NSArray *args = message; + AuthPigeonFirebaseApp *arg_app = GetNullableObjectAtIndex(args, 0); + NSString *arg_newPassword = GetNullableObjectAtIndex(args, 1); + [api updatePasswordApp:arg_app + newPassword:arg_newPassword + completion:^(InternalUserDetails *_Nullable output, + FlutterError *_Nullable error) { + callback(wrapResult(output, error)); + }]; + }]; + } else { + [channel setMessageHandler:nil]; + } + } + { + FlutterBasicMessageChannel *channel = [[FlutterBasicMessageChannel alloc] + initWithName:[NSString + stringWithFormat:@"%@%@", + @"dev.flutter.pigeon.firebase_auth_platform_interface." + @"FirebaseAuthUserHostApi.updatePhoneNumber", + messageChannelSuffix] + binaryMessenger:binaryMessenger + codec:nullGetFirebaseAuthMessagesCodec()]; + if (api) { + NSCAssert([api respondsToSelector:@selector(updatePhoneNumberApp:input:completion:)], + @"FirebaseAuthUserHostApi api (%@) doesn't respond to " + @"@selector(updatePhoneNumberApp:input:completion:)", + api); + [channel setMessageHandler:^(id _Nullable message, FlutterReply callback) { + NSArray *args = message; + AuthPigeonFirebaseApp *arg_app = GetNullableObjectAtIndex(args, 0); + NSDictionary *arg_input = GetNullableObjectAtIndex(args, 1); + [api updatePhoneNumberApp:arg_app + input:arg_input + completion:^(InternalUserDetails *_Nullable output, + FlutterError *_Nullable error) { + callback(wrapResult(output, error)); + }]; + }]; + } else { + [channel setMessageHandler:nil]; + } + } + { + FlutterBasicMessageChannel *channel = [[FlutterBasicMessageChannel alloc] + initWithName:[NSString + stringWithFormat:@"%@%@", + @"dev.flutter.pigeon.firebase_auth_platform_interface." + @"FirebaseAuthUserHostApi.updateProfile", + messageChannelSuffix] + binaryMessenger:binaryMessenger + codec:nullGetFirebaseAuthMessagesCodec()]; + if (api) { + NSCAssert([api respondsToSelector:@selector(updateProfileApp:profile:completion:)], + @"FirebaseAuthUserHostApi api (%@) doesn't respond to " + @"@selector(updateProfileApp:profile:completion:)", + api); + [channel setMessageHandler:^(id _Nullable message, FlutterReply callback) { + NSArray *args = message; + AuthPigeonFirebaseApp *arg_app = GetNullableObjectAtIndex(args, 0); + InternalUserProfile *arg_profile = GetNullableObjectAtIndex(args, 1); + [api updateProfileApp:arg_app + profile:arg_profile + completion:^(InternalUserDetails *_Nullable output, + FlutterError *_Nullable error) { + callback(wrapResult(output, error)); + }]; + }]; + } else { + [channel setMessageHandler:nil]; + } + } + { + FlutterBasicMessageChannel *channel = [[FlutterBasicMessageChannel alloc] + initWithName:[NSString + stringWithFormat:@"%@%@", + @"dev.flutter.pigeon.firebase_auth_platform_interface." + @"FirebaseAuthUserHostApi.verifyBeforeUpdateEmail", + messageChannelSuffix] + binaryMessenger:binaryMessenger + codec:nullGetFirebaseAuthMessagesCodec()]; + if (api) { + NSCAssert([api respondsToSelector:@selector(verifyBeforeUpdateEmailApp:newEmail: + actionCodeSettings:completion:)], + @"FirebaseAuthUserHostApi api (%@) doesn't respond to " + @"@selector(verifyBeforeUpdateEmailApp:newEmail:actionCodeSettings:completion:)", + api); + [channel setMessageHandler:^(id _Nullable message, FlutterReply callback) { + NSArray *args = message; + AuthPigeonFirebaseApp *arg_app = GetNullableObjectAtIndex(args, 0); + NSString *arg_newEmail = GetNullableObjectAtIndex(args, 1); + InternalActionCodeSettings *arg_actionCodeSettings = GetNullableObjectAtIndex(args, 2); + [api verifyBeforeUpdateEmailApp:arg_app + newEmail:arg_newEmail + actionCodeSettings:arg_actionCodeSettings + completion:^(FlutterError *_Nullable error) { + callback(wrapResult(nil, error)); + }]; + }]; + } else { + [channel setMessageHandler:nil]; + } + } +} +void SetUpMultiFactorUserHostApi(id binaryMessenger, + NSObject *api) { + SetUpMultiFactorUserHostApiWithSuffix(binaryMessenger, api, @""); +} + +void SetUpMultiFactorUserHostApiWithSuffix(id binaryMessenger, + NSObject *api, + NSString *messageChannelSuffix) { + messageChannelSuffix = messageChannelSuffix.length > 0 + ? [NSString stringWithFormat:@".%@", messageChannelSuffix] + : @""; + { + FlutterBasicMessageChannel *channel = [[FlutterBasicMessageChannel alloc] + initWithName:[NSString stringWithFormat:@"%@%@", + @"dev.flutter.pigeon.firebase_auth_platform_" + @"interface.MultiFactorUserHostApi.enrollPhone", + messageChannelSuffix] + binaryMessenger:binaryMessenger + codec:nullGetFirebaseAuthMessagesCodec()]; + if (api) { + NSCAssert( + [api respondsToSelector:@selector(enrollPhoneApp:assertion:displayName:completion:)], + @"MultiFactorUserHostApi api (%@) doesn't respond to " + @"@selector(enrollPhoneApp:assertion:displayName:completion:)", + api); + [channel setMessageHandler:^(id _Nullable message, FlutterReply callback) { + NSArray *args = message; + AuthPigeonFirebaseApp *arg_app = GetNullableObjectAtIndex(args, 0); + InternalPhoneMultiFactorAssertion *arg_assertion = GetNullableObjectAtIndex(args, 1); + NSString *arg_displayName = GetNullableObjectAtIndex(args, 2); + [api enrollPhoneApp:arg_app + assertion:arg_assertion + displayName:arg_displayName + completion:^(FlutterError *_Nullable error) { + callback(wrapResult(nil, error)); + }]; + }]; + } else { + [channel setMessageHandler:nil]; + } + } + { + FlutterBasicMessageChannel *channel = [[FlutterBasicMessageChannel alloc] + initWithName:[NSString stringWithFormat:@"%@%@", + @"dev.flutter.pigeon.firebase_auth_platform_" + @"interface.MultiFactorUserHostApi.enrollTotp", + messageChannelSuffix] + binaryMessenger:binaryMessenger + codec:nullGetFirebaseAuthMessagesCodec()]; + if (api) { + NSCAssert( + [api respondsToSelector:@selector(enrollTotpApp:assertionId:displayName:completion:)], + @"MultiFactorUserHostApi api (%@) doesn't respond to " + @"@selector(enrollTotpApp:assertionId:displayName:completion:)", + api); + [channel setMessageHandler:^(id _Nullable message, FlutterReply callback) { + NSArray *args = message; + AuthPigeonFirebaseApp *arg_app = GetNullableObjectAtIndex(args, 0); + NSString *arg_assertionId = GetNullableObjectAtIndex(args, 1); + NSString *arg_displayName = GetNullableObjectAtIndex(args, 2); + [api enrollTotpApp:arg_app + assertionId:arg_assertionId + displayName:arg_displayName + completion:^(FlutterError *_Nullable error) { + callback(wrapResult(nil, error)); + }]; + }]; + } else { + [channel setMessageHandler:nil]; + } + } + { + FlutterBasicMessageChannel *channel = [[FlutterBasicMessageChannel alloc] + initWithName:[NSString stringWithFormat:@"%@%@", + @"dev.flutter.pigeon.firebase_auth_platform_" + @"interface.MultiFactorUserHostApi.getSession", + messageChannelSuffix] + binaryMessenger:binaryMessenger + codec:nullGetFirebaseAuthMessagesCodec()]; + if (api) { + NSCAssert([api respondsToSelector:@selector(getSessionApp:completion:)], + @"MultiFactorUserHostApi api (%@) doesn't respond to " + @"@selector(getSessionApp:completion:)", + api); + [channel setMessageHandler:^(id _Nullable message, FlutterReply callback) { + NSArray *args = message; + AuthPigeonFirebaseApp *arg_app = GetNullableObjectAtIndex(args, 0); + [api getSessionApp:arg_app + completion:^(InternalMultiFactorSession *_Nullable output, + FlutterError *_Nullable error) { + callback(wrapResult(output, error)); + }]; + }]; + } else { + [channel setMessageHandler:nil]; + } + } + { + FlutterBasicMessageChannel *channel = [[FlutterBasicMessageChannel alloc] + initWithName:[NSString stringWithFormat:@"%@%@", + @"dev.flutter.pigeon.firebase_auth_platform_" + @"interface.MultiFactorUserHostApi.unenroll", + messageChannelSuffix] + binaryMessenger:binaryMessenger + codec:nullGetFirebaseAuthMessagesCodec()]; + if (api) { + NSCAssert([api respondsToSelector:@selector(unenrollApp:factorUid:completion:)], + @"MultiFactorUserHostApi api (%@) doesn't respond to " + @"@selector(unenrollApp:factorUid:completion:)", + api); + [channel setMessageHandler:^(id _Nullable message, FlutterReply callback) { + NSArray *args = message; + AuthPigeonFirebaseApp *arg_app = GetNullableObjectAtIndex(args, 0); + NSString *arg_factorUid = GetNullableObjectAtIndex(args, 1); + [api unenrollApp:arg_app + factorUid:arg_factorUid + completion:^(FlutterError *_Nullable error) { + callback(wrapResult(nil, error)); + }]; + }]; + } else { + [channel setMessageHandler:nil]; + } + } + { + FlutterBasicMessageChannel *channel = [[FlutterBasicMessageChannel alloc] + initWithName:[NSString + stringWithFormat:@"%@%@", + @"dev.flutter.pigeon.firebase_auth_platform_interface." + @"MultiFactorUserHostApi.getEnrolledFactors", + messageChannelSuffix] + binaryMessenger:binaryMessenger + codec:nullGetFirebaseAuthMessagesCodec()]; + if (api) { + NSCAssert([api respondsToSelector:@selector(getEnrolledFactorsApp:completion:)], + @"MultiFactorUserHostApi api (%@) doesn't respond to " + @"@selector(getEnrolledFactorsApp:completion:)", + api); + [channel setMessageHandler:^(id _Nullable message, FlutterReply callback) { + NSArray *args = message; + AuthPigeonFirebaseApp *arg_app = GetNullableObjectAtIndex(args, 0); + [api getEnrolledFactorsApp:arg_app + completion:^(NSArray *_Nullable output, + FlutterError *_Nullable error) { + callback(wrapResult(output, error)); + }]; + }]; + } else { + [channel setMessageHandler:nil]; + } + } +} +void SetUpMultiFactoResolverHostApi(id binaryMessenger, + NSObject *api) { + SetUpMultiFactoResolverHostApiWithSuffix(binaryMessenger, api, @""); +} + +void SetUpMultiFactoResolverHostApiWithSuffix(id binaryMessenger, + NSObject *api, + NSString *messageChannelSuffix) { + messageChannelSuffix = messageChannelSuffix.length > 0 + ? [NSString stringWithFormat:@".%@", messageChannelSuffix] + : @""; + { + FlutterBasicMessageChannel *channel = [[FlutterBasicMessageChannel alloc] + initWithName:[NSString + stringWithFormat:@"%@%@", + @"dev.flutter.pigeon.firebase_auth_platform_interface." + @"MultiFactoResolverHostApi.resolveSignIn", + messageChannelSuffix] + binaryMessenger:binaryMessenger + codec:nullGetFirebaseAuthMessagesCodec()]; + if (api) { + NSCAssert([api respondsToSelector: + @selector(resolveSignInResolverId:assertion:totpAssertionId:completion:)], + @"MultiFactoResolverHostApi api (%@) doesn't respond to " + @"@selector(resolveSignInResolverId:assertion:totpAssertionId:completion:)", + api); + [channel setMessageHandler:^(id _Nullable message, FlutterReply callback) { + NSArray *args = message; + NSString *arg_resolverId = GetNullableObjectAtIndex(args, 0); + InternalPhoneMultiFactorAssertion *arg_assertion = GetNullableObjectAtIndex(args, 1); + NSString *arg_totpAssertionId = GetNullableObjectAtIndex(args, 2); + [api resolveSignInResolverId:arg_resolverId + assertion:arg_assertion + totpAssertionId:arg_totpAssertionId + completion:^(InternalUserCredential *_Nullable output, + FlutterError *_Nullable error) { + callback(wrapResult(output, error)); + }]; + }]; + } else { + [channel setMessageHandler:nil]; + } + } +} +void SetUpMultiFactorTotpHostApi(id binaryMessenger, + NSObject *api) { + SetUpMultiFactorTotpHostApiWithSuffix(binaryMessenger, api, @""); +} + +void SetUpMultiFactorTotpHostApiWithSuffix(id binaryMessenger, + NSObject *api, + NSString *messageChannelSuffix) { + messageChannelSuffix = messageChannelSuffix.length > 0 + ? [NSString stringWithFormat:@".%@", messageChannelSuffix] + : @""; + { + FlutterBasicMessageChannel *channel = [[FlutterBasicMessageChannel alloc] + initWithName:[NSString + stringWithFormat:@"%@%@", + @"dev.flutter.pigeon.firebase_auth_platform_interface." + @"MultiFactorTotpHostApi.generateSecret", + messageChannelSuffix] + binaryMessenger:binaryMessenger + codec:nullGetFirebaseAuthMessagesCodec()]; + if (api) { + NSCAssert([api respondsToSelector:@selector(generateSecretSessionId:completion:)], + @"MultiFactorTotpHostApi api (%@) doesn't respond to " + @"@selector(generateSecretSessionId:completion:)", + api); + [channel setMessageHandler:^(id _Nullable message, FlutterReply callback) { + NSArray *args = message; + NSString *arg_sessionId = GetNullableObjectAtIndex(args, 0); + [api generateSecretSessionId:arg_sessionId + completion:^(InternalTotpSecret *_Nullable output, + FlutterError *_Nullable error) { + callback(wrapResult(output, error)); + }]; + }]; + } else { + [channel setMessageHandler:nil]; + } + } + { + FlutterBasicMessageChannel *channel = [[FlutterBasicMessageChannel alloc] + initWithName:[NSString + stringWithFormat:@"%@%@", + @"dev.flutter.pigeon.firebase_auth_platform_interface." + @"MultiFactorTotpHostApi.getAssertionForEnrollment", + messageChannelSuffix] + binaryMessenger:binaryMessenger + codec:nullGetFirebaseAuthMessagesCodec()]; + if (api) { + NSCAssert([api respondsToSelector: + @selector(getAssertionForEnrollmentSecretKey:oneTimePassword:completion:)], + @"MultiFactorTotpHostApi api (%@) doesn't respond to " + @"@selector(getAssertionForEnrollmentSecretKey:oneTimePassword:completion:)", + api); + [channel setMessageHandler:^(id _Nullable message, FlutterReply callback) { + NSArray *args = message; + NSString *arg_secretKey = GetNullableObjectAtIndex(args, 0); + NSString *arg_oneTimePassword = GetNullableObjectAtIndex(args, 1); + [api getAssertionForEnrollmentSecretKey:arg_secretKey + oneTimePassword:arg_oneTimePassword + completion:^(NSString *_Nullable output, + FlutterError *_Nullable error) { + callback(wrapResult(output, error)); + }]; + }]; + } else { + [channel setMessageHandler:nil]; + } + } + { + FlutterBasicMessageChannel *channel = [[FlutterBasicMessageChannel alloc] + initWithName:[NSString + stringWithFormat:@"%@%@", + @"dev.flutter.pigeon.firebase_auth_platform_interface." + @"MultiFactorTotpHostApi.getAssertionForSignIn", + messageChannelSuffix] + binaryMessenger:binaryMessenger + codec:nullGetFirebaseAuthMessagesCodec()]; + if (api) { + NSCAssert([api respondsToSelector: + @selector(getAssertionForSignInEnrollmentId:oneTimePassword:completion:)], + @"MultiFactorTotpHostApi api (%@) doesn't respond to " + @"@selector(getAssertionForSignInEnrollmentId:oneTimePassword:completion:)", + api); + [channel setMessageHandler:^(id _Nullable message, FlutterReply callback) { + NSArray *args = message; + NSString *arg_enrollmentId = GetNullableObjectAtIndex(args, 0); + NSString *arg_oneTimePassword = GetNullableObjectAtIndex(args, 1); + [api getAssertionForSignInEnrollmentId:arg_enrollmentId + oneTimePassword:arg_oneTimePassword + completion:^(NSString *_Nullable output, + FlutterError *_Nullable error) { + callback(wrapResult(output, error)); + }]; + }]; + } else { + [channel setMessageHandler:nil]; + } + } +} +void SetUpMultiFactorTotpSecretHostApi(id binaryMessenger, + NSObject *api) { + SetUpMultiFactorTotpSecretHostApiWithSuffix(binaryMessenger, api, @""); +} + +void SetUpMultiFactorTotpSecretHostApiWithSuffix(id binaryMessenger, + NSObject *api, + NSString *messageChannelSuffix) { + messageChannelSuffix = messageChannelSuffix.length > 0 + ? [NSString stringWithFormat:@".%@", messageChannelSuffix] + : @""; + { + FlutterBasicMessageChannel *channel = [[FlutterBasicMessageChannel alloc] + initWithName:[NSString + stringWithFormat:@"%@%@", + @"dev.flutter.pigeon.firebase_auth_platform_interface." + @"MultiFactorTotpSecretHostApi.generateQrCodeUrl", + messageChannelSuffix] + binaryMessenger:binaryMessenger + codec:nullGetFirebaseAuthMessagesCodec()]; + if (api) { + NSCAssert( + [api respondsToSelector:@selector( + generateQrCodeUrlSecretKey:accountName:issuer:completion:)], + @"MultiFactorTotpSecretHostApi api (%@) doesn't respond to " + @"@selector(generateQrCodeUrlSecretKey:accountName:issuer:completion:)", + api); + [channel setMessageHandler:^(id _Nullable message, FlutterReply callback) { + NSArray *args = message; + NSString *arg_secretKey = GetNullableObjectAtIndex(args, 0); + NSString *arg_accountName = GetNullableObjectAtIndex(args, 1); + NSString *arg_issuer = GetNullableObjectAtIndex(args, 2); + [api generateQrCodeUrlSecretKey:arg_secretKey + accountName:arg_accountName + issuer:arg_issuer + completion:^(NSString *_Nullable output, + FlutterError *_Nullable error) { + callback(wrapResult(output, error)); + }]; + }]; + } else { + [channel setMessageHandler:nil]; + } + } + { + FlutterBasicMessageChannel *channel = [[FlutterBasicMessageChannel alloc] + initWithName:[NSString + stringWithFormat:@"%@%@", + @"dev.flutter.pigeon.firebase_auth_platform_interface." + @"MultiFactorTotpSecretHostApi.openInOtpApp", + messageChannelSuffix] + binaryMessenger:binaryMessenger + codec:nullGetFirebaseAuthMessagesCodec()]; + if (api) { + NSCAssert([api respondsToSelector:@selector(openInOtpAppSecretKey:qrCodeUrl:completion:)], + @"MultiFactorTotpSecretHostApi api (%@) doesn't respond to " + @"@selector(openInOtpAppSecretKey:qrCodeUrl:completion:)", + api); + [channel setMessageHandler:^(id _Nullable message, FlutterReply callback) { + NSArray *args = message; + NSString *arg_secretKey = GetNullableObjectAtIndex(args, 0); + NSString *arg_qrCodeUrl = GetNullableObjectAtIndex(args, 1); + [api openInOtpAppSecretKey:arg_secretKey + qrCodeUrl:arg_qrCodeUrl + completion:^(FlutterError *_Nullable error) { + callback(wrapResult(nil, error)); + }]; + }]; + } else { + [channel setMessageHandler:nil]; + } + } +} +void SetUpGenerateInterfaces(id binaryMessenger, + NSObject *api) { + SetUpGenerateInterfacesWithSuffix(binaryMessenger, api, @""); +} + +void SetUpGenerateInterfacesWithSuffix(id binaryMessenger, + NSObject *api, + NSString *messageChannelSuffix) { + messageChannelSuffix = messageChannelSuffix.length > 0 + ? [NSString stringWithFormat:@".%@", messageChannelSuffix] + : @""; + { + FlutterBasicMessageChannel *channel = [[FlutterBasicMessageChannel alloc] + initWithName:[NSString stringWithFormat:@"%@%@", + @"dev.flutter.pigeon.firebase_auth_platform_" + @"interface.GenerateInterfaces.pigeonInterface", + messageChannelSuffix] + binaryMessenger:binaryMessenger + codec:nullGetFirebaseAuthMessagesCodec()]; + if (api) { + NSCAssert( + [api respondsToSelector:@selector(pigeonInterfaceInfo:error:)], + @"GenerateInterfaces api (%@) doesn't respond to @selector(pigeonInterfaceInfo:error:)", + api); + [channel setMessageHandler:^(id _Nullable message, FlutterReply callback) { + NSArray *args = message; + InternalMultiFactorInfo *arg_info = GetNullableObjectAtIndex(args, 0); + FlutterError *error; + [api pigeonInterfaceInfo:arg_info error:&error]; + callback(wrapResult(nil, error)); + }]; + } else { + [channel setMessageHandler:nil]; + } + } +} diff --git a/mih_ui/android/build/ios/SourcePackages/firebase_auth-6.5.4/macos/firebase_auth/Sources/firebase_auth/include/Private/FLTAuthStateChannelStreamHandler.h b/mih_ui/android/build/ios/SourcePackages/firebase_auth-6.5.4/macos/firebase_auth/Sources/firebase_auth/include/Private/FLTAuthStateChannelStreamHandler.h new file mode 100644 index 00000000..7b7efae7 --- /dev/null +++ b/mih_ui/android/build/ios/SourcePackages/firebase_auth-6.5.4/macos/firebase_auth/Sources/firebase_auth/include/Private/FLTAuthStateChannelStreamHandler.h @@ -0,0 +1,26 @@ +// Copyright 2021 The Chromium Authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +#import + +#if TARGET_OS_OSX +#import +#else +#import +#endif + +#import +#import "../Public/CustomPigeonHeader.h" + +@class FIRAuth; + +NS_ASSUME_NONNULL_BEGIN + +@interface FLTAuthStateChannelStreamHandler : NSObject + +- (instancetype)initWithAuth:(FIRAuth *)auth; + +@end + +NS_ASSUME_NONNULL_END diff --git a/mih_ui/android/build/ios/SourcePackages/firebase_auth-6.5.4/macos/firebase_auth/Sources/firebase_auth/include/Private/FLTIdTokenChannelStreamHandler.h b/mih_ui/android/build/ios/SourcePackages/firebase_auth-6.5.4/macos/firebase_auth/Sources/firebase_auth/include/Private/FLTIdTokenChannelStreamHandler.h new file mode 100644 index 00000000..c1660499 --- /dev/null +++ b/mih_ui/android/build/ios/SourcePackages/firebase_auth-6.5.4/macos/firebase_auth/Sources/firebase_auth/include/Private/FLTIdTokenChannelStreamHandler.h @@ -0,0 +1,27 @@ +// Copyright 2021 The Chromium Authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +#import + +#if TARGET_OS_OSX +#import +#else +#import +#endif + +#import "../Public/CustomPigeonHeader.h" + +#import + +@class FIRAuth; + +NS_ASSUME_NONNULL_BEGIN + +@interface FLTIdTokenChannelStreamHandler : NSObject + +- (instancetype)initWithAuth:(FIRAuth *)auth; + +@end + +NS_ASSUME_NONNULL_END diff --git a/mih_ui/android/build/ios/SourcePackages/firebase_auth-6.5.4/macos/firebase_auth/Sources/firebase_auth/include/Private/FLTPhoneNumberVerificationStreamHandler.h b/mih_ui/android/build/ios/SourcePackages/firebase_auth-6.5.4/macos/firebase_auth/Sources/firebase_auth/include/Private/FLTPhoneNumberVerificationStreamHandler.h new file mode 100644 index 00000000..53e5f28c --- /dev/null +++ b/mih_ui/android/build/ios/SourcePackages/firebase_auth-6.5.4/macos/firebase_auth/Sources/firebase_auth/include/Private/FLTPhoneNumberVerificationStreamHandler.h @@ -0,0 +1,36 @@ +// Copyright 2021 The Chromium Authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +#import + +#if TARGET_OS_OSX +#import +#else +#import +#endif + +#import "../Public/firebase_auth_messages.g.h" + +#import + +@class FIRAuth; +@class FIRMultiFactorSession; +@class FIRPhoneMultiFactorInfo; + +NS_ASSUME_NONNULL_BEGIN + +@interface FLTPhoneNumberVerificationStreamHandler : NSObject + +#if TARGET_OS_OSX +- (instancetype)initWithAuth:(FIRAuth *)auth arguments:(NSDictionary *)arguments; +#else +- (instancetype)initWithAuth:(FIRAuth *)auth + request:(InternalVerifyPhoneNumberRequest *)request + session:(FIRMultiFactorSession *)session + factorInfo:(FIRPhoneMultiFactorInfo *)factorInfo; +#endif + +@end + +NS_ASSUME_NONNULL_END diff --git a/mih_ui/android/build/ios/SourcePackages/firebase_auth-6.5.4/macos/firebase_auth/Sources/firebase_auth/include/Private/PigeonParser.h b/mih_ui/android/build/ios/SourcePackages/firebase_auth-6.5.4/macos/firebase_auth/Sources/firebase_auth/include/Private/PigeonParser.h new file mode 100644 index 00000000..b500fd2c --- /dev/null +++ b/mih_ui/android/build/ios/SourcePackages/firebase_auth-6.5.4/macos/firebase_auth/Sources/firebase_auth/include/Private/PigeonParser.h @@ -0,0 +1,33 @@ +/* + * Copyright 2023, the Chromium project authors. Please see the AUTHORS file + * for details. All rights reserved. Use of this source code is governed by a + * BSD-style license that can be found in the LICENSE file. + */ + +#import +#import "../Public/firebase_auth_messages.g.h" + +@class FIRAuthDataResult; +@class FIRUser; +@class FIRActionCodeSettings; +@class FIRAuthTokenResult; +@class FIRTOTPSecret; +@class FIRAuthCredential; + +@interface PigeonParser : NSObject + ++ (NSArray *_Nonnull)getManualList:(nonnull InternalUserDetails *)userDetails; ++ (InternalUserCredential *_Nullable) + getPigeonUserCredentialFromAuthResult:(nonnull FIRAuthDataResult *)authResult + authorizationCode:(nullable NSString *)authorizationCode; ++ (InternalUserDetails *_Nullable)getPigeonDetails:(nonnull FIRUser *)user; ++ (InternalUserInfo *_Nullable)getPigeonUserInfo:(nonnull FIRUser *)user; ++ (FIRActionCodeSettings *_Nullable)parseActionCodeSettings: + (nullable InternalActionCodeSettings *)settings; ++ (InternalUserCredential *_Nullable)getPigeonUserCredentialFromFIRUser:(nonnull FIRUser *)user; ++ (InternalIdTokenResult *_Nonnull)parseIdTokenResult:(nonnull FIRAuthTokenResult *)tokenResult; ++ (InternalTotpSecret *_Nonnull)getPigeonTotpSecret:(nonnull FIRTOTPSecret *)secret; ++ (InternalAuthCredential *_Nullable)getPigeonAuthCredential: + (FIRAuthCredential *_Nullable)authCredentialToken + token:(NSNumber *_Nullable)token; +@end diff --git a/mih_ui/android/build/ios/SourcePackages/firebase_auth-6.5.4/macos/firebase_auth/Sources/firebase_auth/include/Public/CustomPigeonHeader.h b/mih_ui/android/build/ios/SourcePackages/firebase_auth-6.5.4/macos/firebase_auth/Sources/firebase_auth/include/Public/CustomPigeonHeader.h new file mode 100644 index 00000000..d32a6b45 --- /dev/null +++ b/mih_ui/android/build/ios/SourcePackages/firebase_auth-6.5.4/macos/firebase_auth/Sources/firebase_auth/include/Public/CustomPigeonHeader.h @@ -0,0 +1,16 @@ +// Copyright 2021 The Chromium Authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. +#import "firebase_auth_messages.g.h" + +@interface InternalMultiFactorInfo (Map) +- (NSDictionary *)toList; +@end + +@interface InternalUserDetails (Map) +- (NSDictionary *)toList; +@end + +@interface InternalUserInfo (Map) +- (NSDictionary *)toList; +@end diff --git a/mih_ui/android/build/ios/SourcePackages/firebase_auth-6.5.4/macos/firebase_auth/Sources/firebase_auth/include/Public/FLTFirebaseAuthPlugin.h b/mih_ui/android/build/ios/SourcePackages/firebase_auth-6.5.4/macos/firebase_auth/Sources/firebase_auth/include/Public/FLTFirebaseAuthPlugin.h new file mode 100644 index 00000000..53e20eca --- /dev/null +++ b/mih_ui/android/build/ios/SourcePackages/firebase_auth-6.5.4/macos/firebase_auth/Sources/firebase_auth/include/Public/FLTFirebaseAuthPlugin.h @@ -0,0 +1,45 @@ +// Copyright 2020 The Chromium Authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +#import + +#if TARGET_OS_OSX +#import +#else +#import +#endif + +#import +#import +#if __has_include() +#import +#else +#import +#endif +#import "firebase_auth_messages.g.h" + +#if !TARGET_OS_OSX +@protocol FlutterSceneLifeCycleDelegate; +#endif + +@interface FLTFirebaseAuthPlugin + : FLTFirebasePlugin ) + , + FlutterSceneLifeCycleDelegate +#endif +#endif + > + ++ (FlutterError *)convertToFlutterError:(NSError *)error; +@end diff --git a/mih_ui/android/build/ios/SourcePackages/firebase_auth-6.5.4/macos/firebase_auth/Sources/firebase_auth/include/Public/firebase_auth_messages.g.h b/mih_ui/android/build/ios/SourcePackages/firebase_auth-6.5.4/macos/firebase_auth/Sources/firebase_auth/include/Public/firebase_auth_messages.g.h new file mode 100644 index 00000000..f83da7e3 --- /dev/null +++ b/mih_ui/android/build/ios/SourcePackages/firebase_auth-6.5.4/macos/firebase_auth/Sources/firebase_auth/include/Public/firebase_auth_messages.g.h @@ -0,0 +1,571 @@ +// Copyright 2023, the Chromium project authors. Please see the AUTHORS file +// for details. All rights reserved. Use of this source code is governed by a +// BSD-style license that can be found in the LICENSE file. +// Autogenerated from Pigeon (v26.3.4), do not edit directly. +// See also: https://pub.dev/packages/pigeon + +@import Foundation; + +@protocol FlutterBinaryMessenger; +@protocol FlutterMessageCodec; +@class FlutterError; +@class FlutterStandardTypedData; + +NS_ASSUME_NONNULL_BEGIN + +/// The type of operation that generated the action code from calling +/// [checkActionCode]. +typedef NS_ENUM(NSUInteger, ActionCodeInfoOperation) { + /// Unknown operation. + ActionCodeInfoOperationUnknown = 0, + /// Password reset code generated via [sendPasswordResetEmail]. + ActionCodeInfoOperationPasswordReset = 1, + /// Email verification code generated via [User.sendEmailVerification]. + ActionCodeInfoOperationVerifyEmail = 2, + /// Email change revocation code generated via [User.updateEmail]. + ActionCodeInfoOperationRecoverEmail = 3, + /// Email sign in code generated via [sendSignInLinkToEmail]. + ActionCodeInfoOperationEmailSignIn = 4, + /// Verify and change email code generated via [User.verifyBeforeUpdateEmail]. + ActionCodeInfoOperationVerifyAndChangeEmail = 5, + /// Action code for reverting second factor addition. + ActionCodeInfoOperationRevertSecondFactorAddition = 6, +}; + +/// Wrapper for ActionCodeInfoOperation to allow for nullability. +@interface ActionCodeInfoOperationBox : NSObject +@property(nonatomic, assign) ActionCodeInfoOperation value; +- (instancetype)initWithValue:(ActionCodeInfoOperation)value; +@end + +@class InternalMultiFactorSession; +@class InternalPhoneMultiFactorAssertion; +@class InternalMultiFactorInfo; +@class AuthPigeonFirebaseApp; +@class InternalActionCodeInfoData; +@class InternalActionCodeInfo; +@class InternalAdditionalUserInfo; +@class InternalAuthCredential; +@class InternalUserInfo; +@class InternalUserDetails; +@class InternalUserCredential; +@class InternalAuthCredentialInput; +@class InternalActionCodeSettings; +@class InternalFirebaseAuthSettings; +@class InternalSignInProvider; +@class InternalVerifyPhoneNumberRequest; +@class InternalIdTokenResult; +@class InternalUserProfile; +@class InternalTotpSecret; + +@interface InternalMultiFactorSession : NSObject +/// `init` unavailable to enforce nonnull fields, see the `make` class method. +- (instancetype)init NS_UNAVAILABLE; ++ (instancetype)makeWithId:(NSString *)id; +@property(nonatomic, copy) NSString *id; +@end + +@interface InternalPhoneMultiFactorAssertion : NSObject +/// `init` unavailable to enforce nonnull fields, see the `make` class method. +- (instancetype)init NS_UNAVAILABLE; ++ (instancetype)makeWithVerificationId:(NSString *)verificationId + verificationCode:(NSString *)verificationCode; +@property(nonatomic, copy) NSString *verificationId; +@property(nonatomic, copy) NSString *verificationCode; +@end + +@interface InternalMultiFactorInfo : NSObject +/// `init` unavailable to enforce nonnull fields, see the `make` class method. +- (instancetype)init NS_UNAVAILABLE; ++ (instancetype)makeWithDisplayName:(nullable NSString *)displayName + enrollmentTimestamp:(double)enrollmentTimestamp + factorId:(nullable NSString *)factorId + uid:(NSString *)uid + phoneNumber:(nullable NSString *)phoneNumber; +@property(nonatomic, copy, nullable) NSString *displayName; +@property(nonatomic, assign) double enrollmentTimestamp; +@property(nonatomic, copy, nullable) NSString *factorId; +@property(nonatomic, copy) NSString *uid; +@property(nonatomic, copy, nullable) NSString *phoneNumber; +@end + +@interface AuthPigeonFirebaseApp : NSObject +/// `init` unavailable to enforce nonnull fields, see the `make` class method. +- (instancetype)init NS_UNAVAILABLE; ++ (instancetype)makeWithAppName:(NSString *)appName + tenantId:(nullable NSString *)tenantId + customAuthDomain:(nullable NSString *)customAuthDomain; +@property(nonatomic, copy) NSString *appName; +@property(nonatomic, copy, nullable) NSString *tenantId; +@property(nonatomic, copy, nullable) NSString *customAuthDomain; +@end + +@interface InternalActionCodeInfoData : NSObject ++ (instancetype)makeWithEmail:(nullable NSString *)email + previousEmail:(nullable NSString *)previousEmail; +@property(nonatomic, copy, nullable) NSString *email; +@property(nonatomic, copy, nullable) NSString *previousEmail; +@end + +@interface InternalActionCodeInfo : NSObject +/// `init` unavailable to enforce nonnull fields, see the `make` class method. +- (instancetype)init NS_UNAVAILABLE; ++ (instancetype)makeWithOperation:(ActionCodeInfoOperation)operation + data:(InternalActionCodeInfoData *)data; +@property(nonatomic, assign) ActionCodeInfoOperation operation; +@property(nonatomic, strong) InternalActionCodeInfoData *data; +@end + +@interface InternalAdditionalUserInfo : NSObject +/// `init` unavailable to enforce nonnull fields, see the `make` class method. +- (instancetype)init NS_UNAVAILABLE; ++ (instancetype)makeWithIsNewUser:(BOOL)isNewUser + providerId:(nullable NSString *)providerId + username:(nullable NSString *)username + authorizationCode:(nullable NSString *)authorizationCode + profile:(nullable NSDictionary *)profile; +@property(nonatomic, assign) BOOL isNewUser; +@property(nonatomic, copy, nullable) NSString *providerId; +@property(nonatomic, copy, nullable) NSString *username; +@property(nonatomic, copy, nullable) NSString *authorizationCode; +@property(nonatomic, copy, nullable) NSDictionary *profile; +@end + +@interface InternalAuthCredential : NSObject +/// `init` unavailable to enforce nonnull fields, see the `make` class method. +- (instancetype)init NS_UNAVAILABLE; ++ (instancetype)makeWithProviderId:(NSString *)providerId + signInMethod:(NSString *)signInMethod + nativeId:(NSInteger)nativeId + accessToken:(nullable NSString *)accessToken; +@property(nonatomic, copy) NSString *providerId; +@property(nonatomic, copy) NSString *signInMethod; +@property(nonatomic, assign) NSInteger nativeId; +@property(nonatomic, copy, nullable) NSString *accessToken; +@end + +@interface InternalUserInfo : NSObject +/// `init` unavailable to enforce nonnull fields, see the `make` class method. +- (instancetype)init NS_UNAVAILABLE; ++ (instancetype)makeWithUid:(NSString *)uid + email:(nullable NSString *)email + displayName:(nullable NSString *)displayName + photoUrl:(nullable NSString *)photoUrl + phoneNumber:(nullable NSString *)phoneNumber + isAnonymous:(BOOL)isAnonymous + isEmailVerified:(BOOL)isEmailVerified + providerId:(nullable NSString *)providerId + tenantId:(nullable NSString *)tenantId + refreshToken:(nullable NSString *)refreshToken + creationTimestamp:(nullable NSNumber *)creationTimestamp + lastSignInTimestamp:(nullable NSNumber *)lastSignInTimestamp; +@property(nonatomic, copy) NSString *uid; +@property(nonatomic, copy, nullable) NSString *email; +@property(nonatomic, copy, nullable) NSString *displayName; +@property(nonatomic, copy, nullable) NSString *photoUrl; +@property(nonatomic, copy, nullable) NSString *phoneNumber; +@property(nonatomic, assign) BOOL isAnonymous; +@property(nonatomic, assign) BOOL isEmailVerified; +@property(nonatomic, copy, nullable) NSString *providerId; +@property(nonatomic, copy, nullable) NSString *tenantId; +@property(nonatomic, copy, nullable) NSString *refreshToken; +@property(nonatomic, strong, nullable) NSNumber *creationTimestamp; +@property(nonatomic, strong, nullable) NSNumber *lastSignInTimestamp; +@end + +@interface InternalUserDetails : NSObject +/// `init` unavailable to enforce nonnull fields, see the `make` class method. +- (instancetype)init NS_UNAVAILABLE; ++ (instancetype)makeWithUserInfo:(InternalUserInfo *)userInfo + providerData:(NSArray *> *)providerData; +@property(nonatomic, strong) InternalUserInfo *userInfo; +@property(nonatomic, copy) NSArray *> *providerData; +@end + +@interface InternalUserCredential : NSObject ++ (instancetype)makeWithUser:(nullable InternalUserDetails *)user + additionalUserInfo:(nullable InternalAdditionalUserInfo *)additionalUserInfo + credential:(nullable InternalAuthCredential *)credential; +@property(nonatomic, strong, nullable) InternalUserDetails *user; +@property(nonatomic, strong, nullable) InternalAdditionalUserInfo *additionalUserInfo; +@property(nonatomic, strong, nullable) InternalAuthCredential *credential; +@end + +@interface InternalAuthCredentialInput : NSObject +/// `init` unavailable to enforce nonnull fields, see the `make` class method. +- (instancetype)init NS_UNAVAILABLE; ++ (instancetype)makeWithProviderId:(NSString *)providerId + signInMethod:(NSString *)signInMethod + token:(nullable NSString *)token + accessToken:(nullable NSString *)accessToken; +@property(nonatomic, copy) NSString *providerId; +@property(nonatomic, copy) NSString *signInMethod; +@property(nonatomic, copy, nullable) NSString *token; +@property(nonatomic, copy, nullable) NSString *accessToken; +@end + +@interface InternalActionCodeSettings : NSObject +/// `init` unavailable to enforce nonnull fields, see the `make` class method. +- (instancetype)init NS_UNAVAILABLE; ++ (instancetype)makeWithUrl:(NSString *)url + dynamicLinkDomain:(nullable NSString *)dynamicLinkDomain + handleCodeInApp:(BOOL)handleCodeInApp + iOSBundleId:(nullable NSString *)iOSBundleId + androidPackageName:(nullable NSString *)androidPackageName + androidInstallApp:(BOOL)androidInstallApp + androidMinimumVersion:(nullable NSString *)androidMinimumVersion + linkDomain:(nullable NSString *)linkDomain; +@property(nonatomic, copy) NSString *url; +@property(nonatomic, copy, nullable) NSString *dynamicLinkDomain; +@property(nonatomic, assign) BOOL handleCodeInApp; +@property(nonatomic, copy, nullable) NSString *iOSBundleId; +@property(nonatomic, copy, nullable) NSString *androidPackageName; +@property(nonatomic, assign) BOOL androidInstallApp; +@property(nonatomic, copy, nullable) NSString *androidMinimumVersion; +@property(nonatomic, copy, nullable) NSString *linkDomain; +@end + +@interface InternalFirebaseAuthSettings : NSObject +/// `init` unavailable to enforce nonnull fields, see the `make` class method. +- (instancetype)init NS_UNAVAILABLE; ++ (instancetype)makeWithAppVerificationDisabledForTesting:(BOOL)appVerificationDisabledForTesting + userAccessGroup:(nullable NSString *)userAccessGroup + phoneNumber:(nullable NSString *)phoneNumber + smsCode:(nullable NSString *)smsCode + forceRecaptchaFlow:(nullable NSNumber *)forceRecaptchaFlow; +@property(nonatomic, assign) BOOL appVerificationDisabledForTesting; +@property(nonatomic, copy, nullable) NSString *userAccessGroup; +@property(nonatomic, copy, nullable) NSString *phoneNumber; +@property(nonatomic, copy, nullable) NSString *smsCode; +@property(nonatomic, strong, nullable) NSNumber *forceRecaptchaFlow; +@end + +@interface InternalSignInProvider : NSObject +/// `init` unavailable to enforce nonnull fields, see the `make` class method. +- (instancetype)init NS_UNAVAILABLE; ++ (instancetype)makeWithProviderId:(NSString *)providerId + scopes:(nullable NSArray *)scopes + customParameters: + (nullable NSDictionary *)customParameters; +@property(nonatomic, copy) NSString *providerId; +@property(nonatomic, copy, nullable) NSArray *scopes; +@property(nonatomic, copy, nullable) NSDictionary *customParameters; +@end + +@interface InternalVerifyPhoneNumberRequest : NSObject +/// `init` unavailable to enforce nonnull fields, see the `make` class method. +- (instancetype)init NS_UNAVAILABLE; ++ (instancetype)makeWithPhoneNumber:(nullable NSString *)phoneNumber + timeout:(NSInteger)timeout + forceResendingToken:(nullable NSNumber *)forceResendingToken + autoRetrievedSmsCodeForTesting:(nullable NSString *)autoRetrievedSmsCodeForTesting + multiFactorInfoId:(nullable NSString *)multiFactorInfoId + multiFactorSessionId:(nullable NSString *)multiFactorSessionId; +@property(nonatomic, copy, nullable) NSString *phoneNumber; +@property(nonatomic, assign) NSInteger timeout; +@property(nonatomic, strong, nullable) NSNumber *forceResendingToken; +@property(nonatomic, copy, nullable) NSString *autoRetrievedSmsCodeForTesting; +@property(nonatomic, copy, nullable) NSString *multiFactorInfoId; +@property(nonatomic, copy, nullable) NSString *multiFactorSessionId; +@end + +@interface InternalIdTokenResult : NSObject ++ (instancetype)makeWithToken:(nullable NSString *)token + expirationTimestamp:(nullable NSNumber *)expirationTimestamp + authTimestamp:(nullable NSNumber *)authTimestamp + issuedAtTimestamp:(nullable NSNumber *)issuedAtTimestamp + signInProvider:(nullable NSString *)signInProvider + claims:(nullable NSDictionary *)claims + signInSecondFactor:(nullable NSString *)signInSecondFactor; +@property(nonatomic, copy, nullable) NSString *token; +@property(nonatomic, strong, nullable) NSNumber *expirationTimestamp; +@property(nonatomic, strong, nullable) NSNumber *authTimestamp; +@property(nonatomic, strong, nullable) NSNumber *issuedAtTimestamp; +@property(nonatomic, copy, nullable) NSString *signInProvider; +@property(nonatomic, copy, nullable) NSDictionary *claims; +@property(nonatomic, copy, nullable) NSString *signInSecondFactor; +@end + +@interface InternalUserProfile : NSObject +/// `init` unavailable to enforce nonnull fields, see the `make` class method. +- (instancetype)init NS_UNAVAILABLE; ++ (instancetype)makeWithDisplayName:(nullable NSString *)displayName + photoUrl:(nullable NSString *)photoUrl + displayNameChanged:(BOOL)displayNameChanged + photoUrlChanged:(BOOL)photoUrlChanged; +@property(nonatomic, copy, nullable) NSString *displayName; +@property(nonatomic, copy, nullable) NSString *photoUrl; +@property(nonatomic, assign) BOOL displayNameChanged; +@property(nonatomic, assign) BOOL photoUrlChanged; +@end + +@interface InternalTotpSecret : NSObject +/// `init` unavailable to enforce nonnull fields, see the `make` class method. +- (instancetype)init NS_UNAVAILABLE; ++ (instancetype)makeWithCodeIntervalSeconds:(nullable NSNumber *)codeIntervalSeconds + codeLength:(nullable NSNumber *)codeLength + enrollmentCompletionDeadline:(nullable NSNumber *)enrollmentCompletionDeadline + hashingAlgorithm:(nullable NSString *)hashingAlgorithm + secretKey:(NSString *)secretKey; +@property(nonatomic, strong, nullable) NSNumber *codeIntervalSeconds; +@property(nonatomic, strong, nullable) NSNumber *codeLength; +@property(nonatomic, strong, nullable) NSNumber *enrollmentCompletionDeadline; +@property(nonatomic, copy, nullable) NSString *hashingAlgorithm; +@property(nonatomic, copy) NSString *secretKey; +@end + +/// The codec used by all APIs. +NSObject *nullGetFirebaseAuthMessagesCodec(void); + +@protocol FirebaseAuthHostApi +- (void)registerIdTokenListenerApp:(AuthPigeonFirebaseApp *)app + completion: + (void (^)(NSString *_Nullable, FlutterError *_Nullable))completion; +- (void)registerAuthStateListenerApp:(AuthPigeonFirebaseApp *)app + completion: + (void (^)(NSString *_Nullable, FlutterError *_Nullable))completion; +- (void)useEmulatorApp:(AuthPigeonFirebaseApp *)app + host:(NSString *)host + port:(NSInteger)port + completion:(void (^)(FlutterError *_Nullable))completion; +- (void)applyActionCodeApp:(AuthPigeonFirebaseApp *)app + code:(NSString *)code + completion:(void (^)(FlutterError *_Nullable))completion; +- (void)checkActionCodeApp:(AuthPigeonFirebaseApp *)app + code:(NSString *)code + completion:(void (^)(InternalActionCodeInfo *_Nullable, + FlutterError *_Nullable))completion; +- (void)confirmPasswordResetApp:(AuthPigeonFirebaseApp *)app + code:(NSString *)code + newPassword:(NSString *)newPassword + completion:(void (^)(FlutterError *_Nullable))completion; +- (void)createUserWithEmailAndPasswordApp:(AuthPigeonFirebaseApp *)app + email:(NSString *)email + password:(NSString *)password + completion:(void (^)(InternalUserCredential *_Nullable, + FlutterError *_Nullable))completion; +- (void)signInAnonymouslyApp:(AuthPigeonFirebaseApp *)app + completion:(void (^)(InternalUserCredential *_Nullable, + FlutterError *_Nullable))completion; +- (void)signInWithCredentialApp:(AuthPigeonFirebaseApp *)app + input:(NSDictionary *)input + completion:(void (^)(InternalUserCredential *_Nullable, + FlutterError *_Nullable))completion; +- (void)signInWithCustomTokenApp:(AuthPigeonFirebaseApp *)app + token:(NSString *)token + completion:(void (^)(InternalUserCredential *_Nullable, + FlutterError *_Nullable))completion; +- (void)signInWithEmailAndPasswordApp:(AuthPigeonFirebaseApp *)app + email:(NSString *)email + password:(NSString *)password + completion:(void (^)(InternalUserCredential *_Nullable, + FlutterError *_Nullable))completion; +- (void)signInWithEmailLinkApp:(AuthPigeonFirebaseApp *)app + email:(NSString *)email + emailLink:(NSString *)emailLink + completion:(void (^)(InternalUserCredential *_Nullable, + FlutterError *_Nullable))completion; +- (void)signInWithProviderApp:(AuthPigeonFirebaseApp *)app + signInProvider:(InternalSignInProvider *)signInProvider + completion:(void (^)(InternalUserCredential *_Nullable, + FlutterError *_Nullable))completion; +- (void)signOutApp:(AuthPigeonFirebaseApp *)app + completion:(void (^)(FlutterError *_Nullable))completion; +- (void)fetchSignInMethodsForEmailApp:(AuthPigeonFirebaseApp *)app + email:(NSString *)email + completion:(void (^)(NSArray *_Nullable, + FlutterError *_Nullable))completion; +- (void)sendPasswordResetEmailApp:(AuthPigeonFirebaseApp *)app + email:(NSString *)email + actionCodeSettings:(nullable InternalActionCodeSettings *)actionCodeSettings + completion:(void (^)(FlutterError *_Nullable))completion; +- (void)sendSignInLinkToEmailApp:(AuthPigeonFirebaseApp *)app + email:(NSString *)email + actionCodeSettings:(InternalActionCodeSettings *)actionCodeSettings + completion:(void (^)(FlutterError *_Nullable))completion; +- (void)setLanguageCodeApp:(AuthPigeonFirebaseApp *)app + languageCode:(nullable NSString *)languageCode + completion:(void (^)(NSString *_Nullable, FlutterError *_Nullable))completion; +- (void)setSettingsApp:(AuthPigeonFirebaseApp *)app + settings:(InternalFirebaseAuthSettings *)settings + completion:(void (^)(FlutterError *_Nullable))completion; +- (void)verifyPasswordResetCodeApp:(AuthPigeonFirebaseApp *)app + code:(NSString *)code + completion: + (void (^)(NSString *_Nullable, FlutterError *_Nullable))completion; +- (void)verifyPhoneNumberApp:(AuthPigeonFirebaseApp *)app + request:(InternalVerifyPhoneNumberRequest *)request + completion:(void (^)(NSString *_Nullable, FlutterError *_Nullable))completion; +- (void)revokeTokenWithAuthorizationCodeApp:(AuthPigeonFirebaseApp *)app + authorizationCode:(NSString *)authorizationCode + completion:(void (^)(FlutterError *_Nullable))completion; +- (void)revokeAccessTokenApp:(AuthPigeonFirebaseApp *)app + accessToken:(NSString *)accessToken + completion:(void (^)(FlutterError *_Nullable))completion; +- (void)initializeRecaptchaConfigApp:(AuthPigeonFirebaseApp *)app + completion:(void (^)(FlutterError *_Nullable))completion; +@end + +extern void SetUpFirebaseAuthHostApi(id binaryMessenger, + NSObject *_Nullable api); + +extern void SetUpFirebaseAuthHostApiWithSuffix(id binaryMessenger, + NSObject *_Nullable api, + NSString *messageChannelSuffix); + +@protocol FirebaseAuthUserHostApi +- (void)deleteApp:(AuthPigeonFirebaseApp *)app + completion:(void (^)(FlutterError *_Nullable))completion; +- (void)getIdTokenApp:(AuthPigeonFirebaseApp *)app + forceRefresh:(BOOL)forceRefresh + completion: + (void (^)(InternalIdTokenResult *_Nullable, FlutterError *_Nullable))completion; +- (void)linkWithCredentialApp:(AuthPigeonFirebaseApp *)app + input:(NSDictionary *)input + completion:(void (^)(InternalUserCredential *_Nullable, + FlutterError *_Nullable))completion; +- (void)linkWithProviderApp:(AuthPigeonFirebaseApp *)app + signInProvider:(InternalSignInProvider *)signInProvider + completion:(void (^)(InternalUserCredential *_Nullable, + FlutterError *_Nullable))completion; +- (void)reauthenticateWithCredentialApp:(AuthPigeonFirebaseApp *)app + input:(NSDictionary *)input + completion:(void (^)(InternalUserCredential *_Nullable, + FlutterError *_Nullable))completion; +- (void)reauthenticateWithProviderApp:(AuthPigeonFirebaseApp *)app + signInProvider:(InternalSignInProvider *)signInProvider + completion:(void (^)(InternalUserCredential *_Nullable, + FlutterError *_Nullable))completion; +- (void)reloadApp:(AuthPigeonFirebaseApp *)app + completion:(void (^)(InternalUserDetails *_Nullable, FlutterError *_Nullable))completion; +- (void)sendEmailVerificationApp:(AuthPigeonFirebaseApp *)app + actionCodeSettings:(nullable InternalActionCodeSettings *)actionCodeSettings + completion:(void (^)(FlutterError *_Nullable))completion; +- (void)unlinkApp:(AuthPigeonFirebaseApp *)app + providerId:(NSString *)providerId + completion:(void (^)(InternalUserCredential *_Nullable, FlutterError *_Nullable))completion; +- (void)updateEmailApp:(AuthPigeonFirebaseApp *)app + newEmail:(NSString *)newEmail + completion: + (void (^)(InternalUserDetails *_Nullable, FlutterError *_Nullable))completion; +- (void)updatePasswordApp:(AuthPigeonFirebaseApp *)app + newPassword:(NSString *)newPassword + completion: + (void (^)(InternalUserDetails *_Nullable, FlutterError *_Nullable))completion; +- (void)updatePhoneNumberApp:(AuthPigeonFirebaseApp *)app + input:(NSDictionary *)input + completion: + (void (^)(InternalUserDetails *_Nullable, FlutterError *_Nullable))completion; +- (void)updateProfileApp:(AuthPigeonFirebaseApp *)app + profile:(InternalUserProfile *)profile + completion: + (void (^)(InternalUserDetails *_Nullable, FlutterError *_Nullable))completion; +- (void)verifyBeforeUpdateEmailApp:(AuthPigeonFirebaseApp *)app + newEmail:(NSString *)newEmail + actionCodeSettings:(nullable InternalActionCodeSettings *)actionCodeSettings + completion:(void (^)(FlutterError *_Nullable))completion; +@end + +extern void SetUpFirebaseAuthUserHostApi(id binaryMessenger, + NSObject *_Nullable api); + +extern void SetUpFirebaseAuthUserHostApiWithSuffix(id binaryMessenger, + NSObject *_Nullable api, + NSString *messageChannelSuffix); + +@protocol MultiFactorUserHostApi +- (void)enrollPhoneApp:(AuthPigeonFirebaseApp *)app + assertion:(InternalPhoneMultiFactorAssertion *)assertion + displayName:(nullable NSString *)displayName + completion:(void (^)(FlutterError *_Nullable))completion; +- (void)enrollTotpApp:(AuthPigeonFirebaseApp *)app + assertionId:(NSString *)assertionId + displayName:(nullable NSString *)displayName + completion:(void (^)(FlutterError *_Nullable))completion; +- (void)getSessionApp:(AuthPigeonFirebaseApp *)app + completion: + (void (^)(InternalMultiFactorSession *_Nullable, FlutterError *_Nullable))completion; +- (void)unenrollApp:(AuthPigeonFirebaseApp *)app + factorUid:(NSString *)factorUid + completion:(void (^)(FlutterError *_Nullable))completion; +- (void)getEnrolledFactorsApp:(AuthPigeonFirebaseApp *)app + completion:(void (^)(NSArray *_Nullable, + FlutterError *_Nullable))completion; +@end + +extern void SetUpMultiFactorUserHostApi(id binaryMessenger, + NSObject *_Nullable api); + +extern void SetUpMultiFactorUserHostApiWithSuffix(id binaryMessenger, + NSObject *_Nullable api, + NSString *messageChannelSuffix); + +@protocol MultiFactoResolverHostApi +- (void)resolveSignInResolverId:(NSString *)resolverId + assertion:(nullable InternalPhoneMultiFactorAssertion *)assertion + totpAssertionId:(nullable NSString *)totpAssertionId + completion:(void (^)(InternalUserCredential *_Nullable, + FlutterError *_Nullable))completion; +@end + +extern void SetUpMultiFactoResolverHostApi(id binaryMessenger, + NSObject *_Nullable api); + +extern void SetUpMultiFactoResolverHostApiWithSuffix( + id binaryMessenger, NSObject *_Nullable api, + NSString *messageChannelSuffix); + +@protocol MultiFactorTotpHostApi +- (void)generateSecretSessionId:(NSString *)sessionId + completion:(void (^)(InternalTotpSecret *_Nullable, + FlutterError *_Nullable))completion; +- (void)getAssertionForEnrollmentSecretKey:(NSString *)secretKey + oneTimePassword:(NSString *)oneTimePassword + completion:(void (^)(NSString *_Nullable, + FlutterError *_Nullable))completion; +- (void)getAssertionForSignInEnrollmentId:(NSString *)enrollmentId + oneTimePassword:(NSString *)oneTimePassword + completion:(void (^)(NSString *_Nullable, + FlutterError *_Nullable))completion; +@end + +extern void SetUpMultiFactorTotpHostApi(id binaryMessenger, + NSObject *_Nullable api); + +extern void SetUpMultiFactorTotpHostApiWithSuffix(id binaryMessenger, + NSObject *_Nullable api, + NSString *messageChannelSuffix); + +@protocol MultiFactorTotpSecretHostApi +- (void)generateQrCodeUrlSecretKey:(NSString *)secretKey + accountName:(nullable NSString *)accountName + issuer:(nullable NSString *)issuer + completion: + (void (^)(NSString *_Nullable, FlutterError *_Nullable))completion; +- (void)openInOtpAppSecretKey:(NSString *)secretKey + qrCodeUrl:(NSString *)qrCodeUrl + completion:(void (^)(FlutterError *_Nullable))completion; +@end + +extern void SetUpMultiFactorTotpSecretHostApi( + id binaryMessenger, + NSObject *_Nullable api); + +extern void SetUpMultiFactorTotpSecretHostApiWithSuffix( + id binaryMessenger, + NSObject *_Nullable api, NSString *messageChannelSuffix); + +/// Only used to generate the object interface that are use outside of the Pigeon interface +@protocol GenerateInterfaces +- (void)pigeonInterfaceInfo:(InternalMultiFactorInfo *)info + error:(FlutterError *_Nullable *_Nonnull)error; +@end + +extern void SetUpGenerateInterfaces(id binaryMessenger, + NSObject *_Nullable api); + +extern void SetUpGenerateInterfacesWithSuffix(id binaryMessenger, + NSObject *_Nullable api, + NSString *messageChannelSuffix); + +NS_ASSUME_NONNULL_END diff --git a/mih_ui/android/build/ios/SourcePackages/firebase_auth-6.5.4/pubspec.yaml b/mih_ui/android/build/ios/SourcePackages/firebase_auth-6.5.4/pubspec.yaml new file mode 100755 index 00000000..ed5194bd --- /dev/null +++ b/mih_ui/android/build/ios/SourcePackages/firebase_auth-6.5.4/pubspec.yaml @@ -0,0 +1,52 @@ +name: firebase_auth +description: Flutter plugin for Firebase Auth, enabling + authentication using passwords, phone numbers and identity providers + like Google, Facebook and Twitter. +homepage: https://firebase.google.com/docs/auth +repository: https://github.com/firebase/flutterfire/tree/main/packages/firebase_auth/firebase_auth +version: 6.5.4 +resolution: workspace +topics: + - firebase + - authentication + - identity + - sign-in + - sign-up + +false_secrets: + - example/** + +environment: + sdk: '^3.6.0' + flutter: '>=3.16.0' + +dependencies: + firebase_auth_platform_interface: ^9.0.3 + firebase_auth_web: ^6.2.3 + firebase_core: ^4.11.0 + firebase_core_platform_interface: ^7.1.0 + flutter: + sdk: flutter + meta: ^1.8.0 +dev_dependencies: + async: ^2.5.0 + flutter_test: + sdk: flutter + mockito: ^5.0.0 + plugin_platform_interface: ^2.1.3 + +flutter: + plugin: + platforms: + android: + package: io.flutter.plugins.firebase.auth + pluginClass: FlutterFirebaseAuthPlugin + ios: + pluginClass: FLTFirebaseAuthPlugin + macos: + pluginClass: FLTFirebaseAuthPlugin + web: + default_package: firebase_auth_web + windows: + pluginClass: FirebaseAuthPluginCApi + diff --git a/mih_ui/android/build/ios/SourcePackages/firebase_auth-6.5.4/test/firebase_auth_test.dart b/mih_ui/android/build/ios/SourcePackages/firebase_auth-6.5.4/test/firebase_auth_test.dart new file mode 100644 index 00000000..5e570b0b --- /dev/null +++ b/mih_ui/android/build/ios/SourcePackages/firebase_auth-6.5.4/test/firebase_auth_test.dart @@ -0,0 +1,1382 @@ +// ignore_for_file: require_trailing_commas +// Copyright 2020, the Chromium project authors. Please see the AUTHORS file +// for details. All rights reserved. Use of this source code is governed by a +// BSD-style license that can be found in the LICENSE file. + +import 'dart:async'; + +import 'package:async/async.dart'; +import 'package:firebase_auth/firebase_auth.dart'; +import 'package:firebase_auth_platform_interface/firebase_auth_platform_interface.dart'; +import 'package:firebase_auth_platform_interface/src/method_channel/method_channel_firebase_auth.dart'; +import 'package:firebase_core/firebase_core.dart'; +import 'package:flutter/foundation.dart'; +import 'package:flutter_test/flutter_test.dart'; +import 'package:mockito/mockito.dart'; +import 'package:plugin_platform_interface/plugin_platform_interface.dart'; + +import './mock.dart'; + +void main() { + setupFirebaseAuthMocks(); + + late FirebaseAuth auth; + + const String kMockActionCode = '12345'; + const String kMockEmail = 'test@example.com'; + const String kMockPassword = 'passw0rd'; + const String kMockIdToken = '12345'; + const String kMockRawNonce = 'abcde12345'; + const String kMockAccessToken = '67890'; + const String kMockGithubToken = 'github'; + const String kMockCustomToken = '12345'; + const String kMockPhoneNumber = '5555555555'; + const String kMockVerificationId = '12345'; + const String kMockSmsCode = '123456'; + const String kMockLanguage = 'en'; + const String kMockOobCode = 'oobcode'; + const String kMockAuthToken = '12460'; + const String kMockURL = 'http://www.example.com'; + const String kMockHost = 'www.example.com'; + const String kMockValidPassword = + 'Password123!'; // For password policy impl testing + const String kMockInvalidPassword = 'Pa1!'; + const String kMockInvalidPassword2 = 'password123!'; + const String kMockInvalidPassword3 = 'PASSWORD123!'; + const String kMockInvalidPassword4 = 'password!'; + const String kMockInvalidPassword5 = 'Password123'; + const Map kMockPasswordPolicy = { + 'customStrengthOptions': { + 'minPasswordLength': 6, + 'maxPasswordLength': 12, + 'containsLowercaseCharacter': true, + 'containsUppercaseCharacter': true, + 'containsNumericCharacter': true, + 'containsNonAlphanumericCharacter': true, + }, + 'allowedNonAlphanumericCharacters': ['!'], + 'schemaVersion': 1, + 'enforcement': 'OFF', + }; + final PasswordPolicy kMockPasswordPolicyObject = + PasswordPolicy(kMockPasswordPolicy); + const int kMockPort = 31337; + + final TestAuthProvider testAuthProvider = TestAuthProvider(); + final int kMockCreationTimestamp = + DateTime.now().subtract(const Duration(days: 2)).millisecondsSinceEpoch; + final int kMockLastSignInTimestamp = + DateTime.now().subtract(const Duration(days: 1)).millisecondsSinceEpoch; + + final kMockUser = InternalUserDetails( + userInfo: InternalUserInfo( + uid: '12345', + displayName: 'displayName', + creationTimestamp: kMockCreationTimestamp, + lastSignInTimestamp: kMockLastSignInTimestamp, + isAnonymous: true, + isEmailVerified: false, + ), + providerData: [ + { + 'providerId': 'firebase', + 'uid': '12345', + 'displayName': 'Flutter Test User', + 'photoUrl': 'http://www.example.com/', + 'email': 'test@example.com', + } + ], + ); + + late MockUserPlatform mockUserPlatform; + late MockUserCredentialPlatform mockUserCredPlatform; + late MockConfirmationResultPlatform mockConfirmationResultPlatform; + late MockRecaptchaVerifier mockVerifier; + late AdditionalUserInfo mockAdditionalUserInfo; + late EmailAuthCredential mockCredential; + + MockFirebaseAuth mockAuthPlatform = MockFirebaseAuth(); + + group('$FirebaseAuth', () { + InternalUserDetails user; + // used to generate a unique application name for each test + var testCount = 0; + + setUp(() async { + FirebaseAuthPlatform.instance = mockAuthPlatform = MockFirebaseAuth(); + + // Each test uses a unique FirebaseApp instance to avoid sharing state + final app = await Firebase.initializeApp( + name: '$testCount', + options: const FirebaseOptions( + apiKey: '', + appId: '', + messagingSenderId: '', + projectId: '', + ), + ); + + auth = FirebaseAuth.instanceFor(app: app); + user = kMockUser; + + mockUserPlatform = MockUserPlatform( + mockAuthPlatform, TestMultiFactorPlatform(mockAuthPlatform), user); + mockConfirmationResultPlatform = MockConfirmationResultPlatform(); + mockAdditionalUserInfo = AdditionalUserInfo( + isNewUser: false, + username: 'flutterUser', + providerId: 'testProvider', + profile: {'foo': 'bar'}, + ); + mockCredential = EmailAuthProvider.credential( + email: 'test', + password: 'test', + ) as EmailAuthCredential; + mockUserCredPlatform = MockUserCredentialPlatform( + FirebaseAuthPlatform.instance, + mockAdditionalUserInfo, + mockCredential, + mockUserPlatform, + ); + mockVerifier = MockRecaptchaVerifier(); + + when(mockAuthPlatform.signInAnonymously()) + .thenAnswer((_) async => mockUserCredPlatform); + + when(mockAuthPlatform.signInWithCredential(any)).thenAnswer( + (_) => Future.value(mockUserCredPlatform)); + + when(mockAuthPlatform.currentUser).thenReturn(mockUserPlatform); + + when(mockAuthPlatform.instanceFor( + app: anyNamed('app'), + pluginConstants: anyNamed('pluginConstants'), + )).thenAnswer((_) => mockUserPlatform); + + when(mockAuthPlatform.delegateFor( + app: anyNamed('app'), + )).thenAnswer((_) => mockAuthPlatform); + + when(mockAuthPlatform.setInitialValues( + currentUser: anyNamed('currentUser'), + languageCode: anyNamed('languageCode'), + )).thenAnswer((_) => mockAuthPlatform); + + when(mockAuthPlatform.createUserWithEmailAndPassword(any, any)) + .thenAnswer((_) async => mockUserCredPlatform); + + when(mockAuthPlatform.getRedirectResult()) + .thenAnswer((_) async => mockUserCredPlatform); + + when(mockAuthPlatform.signInWithCustomToken(any)) + .thenAnswer((_) async => mockUserCredPlatform); + + when(mockAuthPlatform.signInWithEmailAndPassword(any, any)) + .thenAnswer((_) async => mockUserCredPlatform); + + when(mockAuthPlatform.signInWithEmailLink(any, any)) + .thenAnswer((_) async => mockUserCredPlatform); + + when(mockAuthPlatform.signInWithPhoneNumber(any, any)) + .thenAnswer((_) async => mockConfirmationResultPlatform); + + when(mockVerifier.delegate).thenReturn(mockVerifier.mockDelegate); + + when(mockAuthPlatform.signInWithPopup(any)) + .thenAnswer((_) async => mockUserCredPlatform); + + when(mockAuthPlatform.signInWithRedirect(any)) + .thenAnswer((_) async => mockUserCredPlatform); + + when(mockAuthPlatform.authStateChanges()).thenAnswer((_) => + Stream.fromIterable([mockUserPlatform])); + + when(mockAuthPlatform.idTokenChanges()).thenAnswer((_) => + Stream.fromIterable([mockUserPlatform])); + + when(mockAuthPlatform.userChanges()).thenAnswer((_) => + Stream.fromIterable([mockUserPlatform])); + + TestDefaultBinaryMessengerBinding.instance.defaultBinaryMessenger + .setMockMethodCallHandler(MethodChannelFirebaseAuth.channel, + (call) async { + return {'user': user}; + }); + }); + + // incremented after tests completed, in case a test may want to use this + // value for an assertion (toString) + tearDown(() => testCount++); + + setUp(() async { + user = kMockUser; + await auth.signInAnonymously(); + }); + + group('emulator', () { + test('useAuthEmulator() should call delegate method', () async { + // Necessary as we otherwise get a "null is not a Future" error + when(mockAuthPlatform.useAuthEmulator(kMockHost, kMockPort)) + .thenAnswer((i) async {}); + await auth.useAuthEmulator(kMockHost, kMockPort); + verify(mockAuthPlatform.useAuthEmulator(kMockHost, kMockPort)); + }); + }); + + group('currentUser', () { + test('get currentUser', () { + User? user = auth.currentUser; + verify(mockAuthPlatform.currentUser); + expect(user, isA()); + }); + }); + + test('creates a fresh instance after app delete and reinitialize', + () async { + final appName = 'delete-reinit-$testCount'; + const options = FirebaseOptions( + apiKey: 'apiKey', + appId: 'appId', + messagingSenderId: 'messagingSenderId', + projectId: 'projectId', + ); + final app = await Firebase.initializeApp( + name: appName, + options: options, + ); + final auth1 = FirebaseAuth.instanceFor(app: app); + + expect(app.getService(), same(auth1)); + + await app.delete(); + + final app2 = await Firebase.initializeApp( + name: appName, + options: options, + ); + addTearDown(app2.delete); + + final auth2 = FirebaseAuth.instanceFor(app: app2); + + expect(auth2, isNot(same(auth1))); + expect(auth2.app, app2); + expect(app2.getService(), same(auth2)); + }); + + group('tenantId', () { + test('set tenantId should call delegate method', () async { + // Each test uses a unique FirebaseApp instance to avoid sharing state + final app = await Firebase.initializeApp( + name: 'tenantIdTest', + options: const FirebaseOptions( + apiKey: 'apiKey', + appId: 'appId', + messagingSenderId: 'messagingSenderId', + projectId: 'projectId')); + + FirebaseAuthPlatform.instance = + FakeFirebaseAuthPlatform(tenantId: 'foo'); + auth = FirebaseAuth.instanceFor(app: app); + + expect(auth.tenantId, 'foo'); + + auth.tenantId = 'bar'; + + expect(auth.tenantId, 'bar'); + expect(FirebaseAuthPlatform.instance.tenantId, 'bar'); + }); + }); + + group('customAuthDomain', () { + test('set customAuthDomain should call delegate method', () async { + // Each test uses a unique FirebaseApp instance to avoid sharing state + final app = await Firebase.initializeApp( + name: 'customAuthDomainTest', + options: const FirebaseOptions( + apiKey: 'apiKey', + appId: 'appId', + messagingSenderId: 'messagingSenderId', + projectId: 'projectId')); + + FirebaseAuthPlatform.instance = + FakeFirebaseAuthPlatform(customAuthDomain: 'foo'); + auth = FirebaseAuth.instanceFor(app: app); + + expect(auth.customAuthDomain, 'foo'); + if (defaultTargetPlatform == TargetPlatform.windows || kIsWeb) { + try { + auth.customAuthDomain = 'bar'; + } on UnimplementedError catch (e) { + expect(e.message, contains('Cannot set auth domain')); + } + } else { + auth.customAuthDomain = 'bar'; + + expect(auth.customAuthDomain, 'bar'); + expect(FirebaseAuthPlatform.instance.customAuthDomain, 'bar'); + } + }); + }); + + group('languageCode', () { + test('.languageCode should call delegate method', () { + auth.languageCode; + verify(mockAuthPlatform.languageCode); + }); + + test('setLanguageCode() should call delegate method', () async { + // Necessary as we otherwise get a "null is not a Future" error + when(mockAuthPlatform.setLanguageCode(any)).thenAnswer((i) async {}); + + await auth.setLanguageCode(kMockLanguage); + verify(mockAuthPlatform.setLanguageCode(kMockLanguage)); + }); + }); + + group('checkActionCode()', () { + test('should call delegate method', () async { + // Necessary as we otherwise get a "null is not a Future" error + when(mockAuthPlatform.checkActionCode(any)).thenAnswer( + (i) async => ActionCodeInfo( + data: ActionCodeInfoData(email: null, previousEmail: null), + operation: ActionCodeInfoOperation.unknown, + ), + ); + + await auth.checkActionCode(kMockActionCode); + verify(mockAuthPlatform.checkActionCode(kMockActionCode)); + }); + }); + + group('confirmPasswordReset()', () { + test('should call delegate method', () async { + // Necessary as we otherwise get a "null is not a Future" error + when(mockAuthPlatform.confirmPasswordReset(any, any)) + .thenAnswer((i) async {}); + + await auth.confirmPasswordReset( + code: kMockActionCode, + newPassword: kMockPassword, + ); + verify(mockAuthPlatform.confirmPasswordReset( + kMockActionCode, kMockPassword)); + }); + }); + + group('createUserWithEmailAndPassword()', () { + test('should call delegate method', () async { + // Necessary as we otherwise get a "null is not a Future" error + when(mockAuthPlatform.createUserWithEmailAndPassword(any, any)) + .thenAnswer((i) async => EmptyUserCredentialPlatform()); + + await auth.createUserWithEmailAndPassword( + email: kMockEmail, + password: kMockPassword, + ); + + verify(mockAuthPlatform.createUserWithEmailAndPassword( + kMockEmail, + kMockPassword, + )); + }); + }); + + group('getRedirectResult()', () { + test('should call delegate method', () async { + // Necessary as we otherwise get a "null is not a Future" error + when(mockAuthPlatform.getRedirectResult()) + .thenAnswer((i) async => EmptyUserCredentialPlatform()); + + await auth.getRedirectResult(); + verify(mockAuthPlatform.getRedirectResult()); + }); + }); + + group('isSignInWithEmailLink()', () { + test('should call delegate method', () async { + // Necessary as we otherwise get a "null is not a Future" error + when(mockAuthPlatform.isSignInWithEmailLink(any)) + .thenAnswer((i) => false); + + auth.isSignInWithEmailLink(kMockURL); + verify(mockAuthPlatform.isSignInWithEmailLink(kMockURL)); + }); + }); + + group('authStateChanges()', () { + test('should stream changes', () async { + final StreamQueue changes = + StreamQueue(auth.authStateChanges()); + expect(await changes.next, isA()); + }); + }); + + group('idTokenChanges()', () { + test('should stream changes', () async { + final StreamQueue changes = + StreamQueue(auth.idTokenChanges()); + expect(await changes.next, isA()); + }); + }); + + group('userChanges()', () { + test('should stream changes', () async { + final StreamQueue changes = + StreamQueue(auth.userChanges()); + expect(await changes.next, isA()); + }); + }); + + group('sendPasswordResetEmail()', () { + test('should call delegate method', () async { + // Necessary as we otherwise get a "null is not a Future" error + when(mockAuthPlatform.sendPasswordResetEmail(any)) + .thenAnswer((i) async {}); + + await auth.sendPasswordResetEmail(email: kMockEmail); + verify(mockAuthPlatform.sendPasswordResetEmail(kMockEmail)); + }); + }); + + group('sendPasswordResetEmail()', () { + test('should call delegate method', () async { + // Necessary as we otherwise get a "null is not a Future" error + when(mockAuthPlatform.sendPasswordResetEmail(any)) + .thenAnswer((i) async {}); + + await auth.sendPasswordResetEmail(email: kMockEmail); + verify(mockAuthPlatform.sendPasswordResetEmail(kMockEmail)); + }); + }); + + group('sendSignInLinkToEmail()', () { + test('should throw if actionCodeSettings.handleCodeInApp is not true', + () async { + // Necessary as we otherwise get a "null is not a Future" error + when(mockAuthPlatform.sendSignInLinkToEmail(any, any)) + .thenAnswer((i) async {}); + + final ActionCodeSettings kMockActionCodeSettingsNull = + ActionCodeSettings(url: kMockURL); + final ActionCodeSettings kMockActionCodeSettingsFalse = + ActionCodeSettings(url: kMockURL); + + // when handleCodeInApp is null + expect( + () => auth.sendSignInLinkToEmail( + email: kMockEmail, + actionCodeSettings: kMockActionCodeSettingsNull), + throwsArgumentError, + ); + // when handleCodeInApp is false + expect( + () => auth.sendSignInLinkToEmail( + email: kMockEmail, + actionCodeSettings: kMockActionCodeSettingsFalse), + throwsArgumentError, + ); + }); + + test('should call delegate method', () async { + // Necessary as we otherwise get a "null is not a Future" error + when(mockAuthPlatform.sendSignInLinkToEmail(any, any)) + .thenAnswer((i) async {}); + + final ActionCodeSettings kMockActionCodeSettingsValid = + ActionCodeSettings(url: kMockURL, handleCodeInApp: true); + + await auth.sendSignInLinkToEmail( + email: kMockEmail, + actionCodeSettings: kMockActionCodeSettingsValid, + ); + + verify(mockAuthPlatform.sendSignInLinkToEmail( + kMockEmail, + kMockActionCodeSettingsValid, + )); + }); + }); + + group('setSettings()', () { + test('should call delegate method', () async { + // Necessary as we otherwise get a "null is not a Future" error + when(mockAuthPlatform.setSettings( + appVerificationDisabledForTesting: any, + phoneNumber: any, + smsCode: any, + forceRecaptchaFlow: any, + userAccessGroup: any, + )).thenAnswer((i) async {}); + + String phoneNumber = '123456'; + String smsCode = '1234'; + bool forceRecaptchaFlow = true; + bool appVerificationDisabledForTesting = true; + String userAccessGroup = 'group-id'; + + await auth.setSettings( + appVerificationDisabledForTesting: appVerificationDisabledForTesting, + phoneNumber: phoneNumber, + smsCode: smsCode, + forceRecaptchaFlow: forceRecaptchaFlow, + userAccessGroup: userAccessGroup, + ); + + verify( + mockAuthPlatform.setSettings( + appVerificationDisabledForTesting: + appVerificationDisabledForTesting, + phoneNumber: phoneNumber, + smsCode: smsCode, + forceRecaptchaFlow: forceRecaptchaFlow, + userAccessGroup: userAccessGroup, + ), + ); + }); + }); + + group('setPersistence()', () { + test('should call delegate method', () async { + // Necessary as we otherwise get a "null is not a Future" error + when(mockAuthPlatform.setPersistence(any)).thenAnswer((i) async {}); + + await auth.setPersistence(Persistence.LOCAL); + verify(mockAuthPlatform.setPersistence(Persistence.LOCAL)); + }); + }); + + group('signInAnonymously()', () { + test('should call delegate method', () async { + // Necessary as we otherwise get a "null is not a Future" error + when(mockAuthPlatform.signInAnonymously()) + .thenAnswer((i) async => EmptyUserCredentialPlatform()); + + await auth.signInAnonymously(); + verify(mockAuthPlatform.signInAnonymously()); + }); + }); + + group('signInWithCredential()', () { + test('GithubAuthProvider signInWithCredential', () async { + final AuthCredential credential = + GithubAuthProvider.credential(kMockGithubToken); + await auth.signInWithCredential(credential); + final captured = + verify(mockAuthPlatform.signInWithCredential(captureAny)) + .captured + .single; + expect(captured, isA()); + expect(captured.providerId, equals('github.com')); + expect(captured.accessToken, equals(kMockGithubToken)); + }); + + test('EmailAuthProvider (withLink) signInWithCredential', () async { + final AuthCredential credential = EmailAuthProvider.credentialWithLink( + email: 'test@example.com', + emailLink: '', + ); + await auth.signInWithCredential(credential); + final EmailAuthCredential captured = + verify(mockAuthPlatform.signInWithCredential(captureAny)) + .captured + .single; + expect(captured.providerId, equals('password')); + expect(captured.email, equals('test@example.com')); + expect(captured.emailLink, + equals('')); + }); + + test('TwitterAuthProvider signInWithCredential', () async { + final AuthCredential credential = TwitterAuthProvider.credential( + accessToken: kMockIdToken, + secret: kMockAccessToken, + ); + await auth.signInWithCredential(credential); + final captured = + verify(mockAuthPlatform.signInWithCredential(captureAny)) + .captured + .single; + expect(captured, isA()); + expect(captured.providerId, equals('twitter.com')); + expect(captured.accessToken, equals(kMockIdToken)); + expect(captured.secret, equals(kMockAccessToken)); + }); + + test('GoogleAuthProvider signInWithCredential', () async { + final credential = GoogleAuthProvider.credential( + idToken: kMockIdToken, + accessToken: kMockAccessToken, + ); + await auth.signInWithCredential(credential); + final captured = + verify(mockAuthPlatform.signInWithCredential(captureAny)) + .captured + .single; + expect(captured, isA()); + expect(captured.providerId, equals('google.com')); + expect(captured.idToken, equals(kMockIdToken)); + expect(captured.accessToken, equals(kMockAccessToken)); + }); + + test('OAuthProvider signInWithCredential for Apple', () async { + OAuthProvider oAuthProvider = OAuthProvider('apple.com'); + final AuthCredential credential = oAuthProvider.credential( + idToken: kMockIdToken, + accessToken: kMockAccessToken, + ); + await auth.signInWithCredential(credential); + final captured = + verify(mockAuthPlatform.signInWithCredential(captureAny)) + .captured + .single; + expect(captured.providerId, equals('apple.com')); + expect(captured.idToken, equals(kMockIdToken)); + expect(captured.accessToken, equals(kMockAccessToken)); + expect(captured.rawNonce, equals(null)); + }); + + test('OAuthProvider signInWithCredential for Apple with rawNonce', + () async { + OAuthProvider oAuthProvider = OAuthProvider('apple.com'); + final AuthCredential credential = oAuthProvider.credential( + idToken: kMockIdToken, + rawNonce: kMockRawNonce, + accessToken: kMockAccessToken, + ); + await auth.signInWithCredential(credential); + final captured = + verify(mockAuthPlatform.signInWithCredential(captureAny)) + .captured + .single; + expect(captured.providerId, equals('apple.com')); + expect(captured.idToken, equals(kMockIdToken)); + expect(captured.rawNonce, equals(kMockRawNonce)); + expect(captured.accessToken, equals(kMockAccessToken)); + }); + + test( + 'OAuthProvider signInWithCredential for Apple with rawNonce (empty accessToken)', + () async { + OAuthProvider oAuthProvider = OAuthProvider('apple.com'); + final AuthCredential credential = oAuthProvider.credential( + idToken: kMockIdToken, + rawNonce: kMockRawNonce, + ); + await auth.signInWithCredential(credential); + final captured = + verify(mockAuthPlatform.signInWithCredential(captureAny)) + .captured + .single; + expect(captured.providerId, equals('apple.com')); + expect(captured.idToken, equals(kMockIdToken)); + expect(captured.rawNonce, equals(kMockRawNonce)); + expect(captured.accessToken, equals(null)); + }); + + test('PhoneAuthProvider signInWithCredential', () async { + final PhoneAuthCredential credential = PhoneAuthProvider.credential( + verificationId: kMockVerificationId, + smsCode: kMockSmsCode, + ); + await auth.signInWithCredential(credential); + final PhoneAuthCredential captured = + verify(mockAuthPlatform.signInWithCredential(captureAny)) + .captured + .single; + expect(captured.providerId, equals('phone')); + expect(captured.verificationId, equals(kMockVerificationId)); + expect(captured.smsCode, equals(kMockSmsCode)); + }); + + test('FacebookAuthProvider signInWithCredential', () async { + final AuthCredential credential = + FacebookAuthProvider.credential(kMockAccessToken); + await auth.signInWithCredential(credential); + final captured = + verify(mockAuthPlatform.signInWithCredential(captureAny)) + .captured + .single; + expect(captured, isA()); + expect(captured.providerId, equals('facebook.com')); + expect(captured.accessToken, equals(kMockAccessToken)); + }); + }); + + group('signInWithCustomToken()', () { + test('should call delegate method', () async { + await auth.signInWithCustomToken(kMockCustomToken); + verify(mockAuthPlatform.signInWithCustomToken(kMockCustomToken)); + }); + }); + + group('signInWithEmailAndPassword()', () { + test('should call delegate method', () async { + await auth.signInWithEmailAndPassword( + email: kMockEmail, password: kMockPassword); + verify(mockAuthPlatform.signInWithEmailAndPassword( + kMockEmail, kMockPassword)); + }); + }); + + group('signInWithEmailLink()', () { + test('should call delegate method', () async { + await auth.signInWithEmailLink(email: kMockEmail, emailLink: kMockURL); + verify(mockAuthPlatform.signInWithEmailLink(kMockEmail, kMockURL)); + }); + }); + + group('signInWithPhoneNumber()', () { + test('should call delegate method', () async { + await auth.signInWithPhoneNumber(kMockPhoneNumber, mockVerifier); + verify(mockAuthPlatform.signInWithPhoneNumber(kMockPhoneNumber, any)); + }); + }); + + group('signInWithPopup()', () { + test('should call delegate method', () async { + await auth.signInWithPopup(testAuthProvider); + verify(mockAuthPlatform.signInWithPopup(testAuthProvider)); + }); + }); + + group('signInWithRedirect()', () { + test('should call delegate method', () async { + await auth.signInWithRedirect(testAuthProvider); + verify(mockAuthPlatform.signInWithRedirect(testAuthProvider)); + }); + }); + + group('signOut()', () { + test('should call delegate method', () async { + // Necessary as we otherwise get a "null is not a Future" error + when(mockAuthPlatform.signOut()).thenAnswer((i) async {}); + + await auth.signOut(); + verify(mockAuthPlatform.signOut()); + }); + }); + + group('verifyPasswordResetCode()', () { + test('should call delegate method', () async { + // Necessary as we otherwise get a "null is not a Future" error + when(mockAuthPlatform.verifyPasswordResetCode(any)) + .thenAnswer((i) async => ''); + + await auth.verifyPasswordResetCode(kMockOobCode); + verify(mockAuthPlatform.verifyPasswordResetCode(kMockOobCode)); + }); + }); + + group('verifyPhoneNumber()', () { + test('should call delegate method', () async { + // Necessary as we otherwise get a "null is not a Future" error + when(mockAuthPlatform.verifyPhoneNumber( + autoRetrievedSmsCodeForTesting: + anyNamed('autoRetrievedSmsCodeForTesting'), + codeAutoRetrievalTimeout: anyNamed('codeAutoRetrievalTimeout'), + codeSent: anyNamed('codeSent'), + forceResendingToken: anyNamed('forceResendingToken'), + phoneNumber: anyNamed('phoneNumber'), + timeout: anyNamed('timeout'), + verificationCompleted: anyNamed('verificationCompleted'), + verificationFailed: anyNamed('verificationFailed'), + )).thenAnswer((i) async {}); + + final PhoneVerificationCompleted verificationCompleted = + (PhoneAuthCredential phoneAuthCredential) {}; + final PhoneVerificationFailed verificationFailed = + (FirebaseAuthException authException) {}; + final PhoneCodeSent codeSent = + (String verificationId, [int? forceResendingToken]) async {}; + final PhoneCodeAutoRetrievalTimeout autoRetrievalTimeout = + (String verificationId) {}; + + await auth.verifyPhoneNumber( + phoneNumber: kMockPhoneNumber, + verificationCompleted: verificationCompleted, + verificationFailed: verificationFailed, + codeSent: codeSent, + codeAutoRetrievalTimeout: autoRetrievalTimeout, + ); + + verify( + mockAuthPlatform.verifyPhoneNumber( + phoneNumber: kMockPhoneNumber, + verificationCompleted: verificationCompleted, + verificationFailed: verificationFailed, + codeSent: codeSent, + codeAutoRetrievalTimeout: autoRetrievalTimeout, + ), + ); + }); + }); + + group('revokeAccessToken()', () { + test('should call delegate method', () async { + // Necessary as we otherwise get a "null is not a Future" error + when(mockAuthPlatform.revokeAccessToken(kMockAuthToken)) + .thenAnswer((i) async {}); + + await auth.revokeAccessToken(kMockAuthToken); + verify(mockAuthPlatform.revokeAccessToken(kMockAuthToken)); + }); + }); + + group('passwordPolicy', () { + test('passwordPolicy should be initialized with correct parameters', + () async { + PasswordPolicyImpl passwordPolicy = + PasswordPolicyImpl(kMockPasswordPolicyObject); + expect(passwordPolicy.policy, equals(kMockPasswordPolicyObject)); + }); + + PasswordPolicyImpl passwordPolicy = + PasswordPolicyImpl(kMockPasswordPolicyObject); + + test('should return true for valid password', () async { + final PasswordValidationStatus status = + passwordPolicy.isPasswordValid(kMockValidPassword); + expect(status.isValid, isTrue); + }); + + test('should return false for invalid password that is too short', + () async { + final PasswordValidationStatus status = + passwordPolicy.isPasswordValid(kMockInvalidPassword); + expect(status.isValid, isFalse); + }); + + test( + 'should return false for invalid password with no capital characters', + () async { + final PasswordValidationStatus status = + passwordPolicy.isPasswordValid(kMockInvalidPassword2); + expect(status.isValid, isFalse); + }); + + test( + 'should return false for invalid password with no lowercase characters', + () async { + final PasswordValidationStatus status = + passwordPolicy.isPasswordValid(kMockInvalidPassword3); + expect(status.isValid, isFalse); + }); + + test('should return false for invalid password with no numbers', + () async { + final PasswordValidationStatus status = + passwordPolicy.isPasswordValid(kMockInvalidPassword4); + expect(status.isValid, isFalse); + }); + + test('should return false for invalid password with no symbols', + () async { + final PasswordValidationStatus status = + passwordPolicy.isPasswordValid(kMockInvalidPassword5); + expect(status.isValid, isFalse); + }); + }); + + test('toString()', () async { + expect( + auth.toString(), + equals('FirebaseAuth(app: $testCount)'), + ); + }); + }); +} + +class MockFirebaseAuth extends Mock + with MockPlatformInterfaceMixin + implements TestFirebaseAuthPlatform { + @override + Stream userChanges() { + return super.noSuchMethod( + Invocation.method(#userChanges, []), + returnValue: const Stream.empty(), + returnValueForMissingStub: const Stream.empty(), + ); + } + + @override + Stream idTokenChanges() { + return super.noSuchMethod( + Invocation.method(#idTokenChanges, []), + returnValue: const Stream.empty(), + returnValueForMissingStub: const Stream.empty(), + ); + } + + @override + Stream authStateChanges() { + return super.noSuchMethod( + Invocation.method(#authStateChanges, []), + returnValue: const Stream.empty(), + returnValueForMissingStub: const Stream.empty(), + ); + } + + @override + FirebaseAuthPlatform delegateFor( + {FirebaseApp? app, Persistence? persistence}) { + return super.noSuchMethod( + Invocation.method(#delegateFor, [], {#app: app}), + returnValue: TestFirebaseAuthPlatform(), + returnValueForMissingStub: TestFirebaseAuthPlatform(), + ); + } + + @override + Future createUserWithEmailAndPassword( + String? email, + String? password, + ) { + return super.noSuchMethod( + Invocation.method(#createUserWithEmailAndPassword, [email, password]), + returnValue: neverEndingFuture(), + returnValueForMissingStub: neverEndingFuture(), + ); + } + + @override + Future signInWithPhoneNumber( + String? phoneNumber, + RecaptchaVerifierFactoryPlatform? applicationVerifier, + ) { + return super.noSuchMethod( + Invocation.method( + #signInWithPhoneNumber, + [phoneNumber, applicationVerifier], + ), + returnValue: neverEndingFuture(), + returnValueForMissingStub: + neverEndingFuture(), + ); + } + + @override + Future signInWithCredential( + AuthCredential? credential, + ) { + return super.noSuchMethod( + Invocation.method(#signInWithCredential, [credential]), + returnValue: neverEndingFuture(), + returnValueForMissingStub: neverEndingFuture(), + ); + } + + @override + Future signInWithCustomToken(String? token) { + return super.noSuchMethod( + Invocation.method(#signInWithCustomToken, [token]), + returnValue: neverEndingFuture(), + returnValueForMissingStub: neverEndingFuture(), + ); + } + + @override + Future signInWithEmailAndPassword( + String? email, + String? password, + ) { + return super.noSuchMethod( + Invocation.method(#signInWithEmailAndPassword, [email, password]), + returnValue: neverEndingFuture(), + returnValueForMissingStub: neverEndingFuture(), + ); + } + + @override + Future signInWithPopup(AuthProvider? provider) { + return super.noSuchMethod( + Invocation.method(#signInWithPopup, [provider]), + returnValue: neverEndingFuture(), + returnValueForMissingStub: neverEndingFuture(), + ); + } + + @override + Future signInWithEmailLink( + String? email, + String? emailLink, + ) { + return super.noSuchMethod( + Invocation.method(#signInWithEmailLink, [email, emailLink]), + returnValue: neverEndingFuture(), + returnValueForMissingStub: neverEndingFuture(), + ); + } + + @override + Future signInWithRedirect(AuthProvider? provider) { + return super.noSuchMethod( + Invocation.method(#signInWithRedirect, [provider]), + returnValue: neverEndingFuture(), + returnValueForMissingStub: neverEndingFuture(), + ); + } + + @override + Future signInAnonymously() { + return super.noSuchMethod( + Invocation.method(#signInAnonymously, []), + returnValue: neverEndingFuture(), + returnValueForMissingStub: neverEndingFuture(), + ); + } + + @override + FirebaseAuthPlatform setInitialValues({ + InternalUserDetails? currentUser, + String? languageCode, + }) { + return super.noSuchMethod( + Invocation.method(#signInAnonymously, [], { + #currentUser: currentUser, + #languageCode: languageCode, + }), + returnValue: TestFirebaseAuthPlatform(), + returnValueForMissingStub: TestFirebaseAuthPlatform(), + ); + } + + @override + Future getRedirectResult() { + return super.noSuchMethod( + Invocation.method(#getRedirectResult, []), + returnValue: neverEndingFuture(), + returnValueForMissingStub: neverEndingFuture(), + ); + } + + @override + Future setLanguageCode(String? languageCode) { + return super.noSuchMethod( + Invocation.method(#setLanguageCode, [languageCode]), + returnValue: neverEndingFuture(), + returnValueForMissingStub: neverEndingFuture(), + ); + } + + @override + Future useAuthEmulator(String host, int port) { + return super.noSuchMethod( + Invocation.method(#useEmulator, [host, port]), + returnValue: neverEndingFuture(), + returnValueForMissingStub: neverEndingFuture(), + ); + } + + @override + Future checkActionCode(String? code) { + return super.noSuchMethod( + Invocation.method(#checkActionCode, [code]), + returnValue: neverEndingFuture(), + returnValueForMissingStub: neverEndingFuture(), + ); + } + + @override + Future confirmPasswordReset(String? code, String? newPassword) { + return super.noSuchMethod( + Invocation.method(#confirmPasswordReset, [code, newPassword]), + returnValue: neverEndingFuture(), + returnValueForMissingStub: neverEndingFuture(), + ); + } + + @override + bool isSignInWithEmailLink(String? emailLink) { + return super.noSuchMethod( + Invocation.method(#isSignInWithEmailLink, [emailLink]), + returnValue: false, + returnValueForMissingStub: false, + ); + } + + @override + Future sendPasswordResetEmail( + String? email, [ + ActionCodeSettings? actionCodeSettings, + ]) { + return super.noSuchMethod( + Invocation.method(#sendPasswordResetEmail, [email, actionCodeSettings]), + returnValue: neverEndingFuture(), + returnValueForMissingStub: neverEndingFuture(), + ); + } + + @override + Future sendSignInLinkToEmail( + String? email, + ActionCodeSettings? actionCodeSettings, + ) { + return super.noSuchMethod( + Invocation.method(#sendSignInLinkToEmail, [email, actionCodeSettings]), + returnValue: neverEndingFuture(), + returnValueForMissingStub: neverEndingFuture(), + ); + } + + @override + Future setSettings({ + bool? appVerificationDisabledForTesting, + String? userAccessGroup, + String? phoneNumber, + String? smsCode, + bool? forceRecaptchaFlow, + }) { + return super.noSuchMethod( + Invocation.method(#setSettings, [ + appVerificationDisabledForTesting, + userAccessGroup, + phoneNumber, + smsCode, + forceRecaptchaFlow, + ]), + returnValue: neverEndingFuture(), + returnValueForMissingStub: neverEndingFuture(), + ); + } + + @override + Future setPersistence(Persistence? persistence) { + return super.noSuchMethod( + Invocation.method(#setPersistence, [persistence]), + returnValue: neverEndingFuture(), + returnValueForMissingStub: neverEndingFuture(), + ); + } + + @override + Future signOut() { + return super.noSuchMethod( + Invocation.method(#signOut, [signOut]), + returnValue: neverEndingFuture(), + returnValueForMissingStub: neverEndingFuture(), + ); + } + + @override + Future verifyPasswordResetCode(String? code) { + return super.noSuchMethod( + Invocation.method(#verifyPasswordResetCode, [code]), + returnValue: neverEndingFuture(), + returnValueForMissingStub: neverEndingFuture(), + ); + } + + @override + Future verifyPhoneNumber({ + String? phoneNumber, + PhoneMultiFactorInfo? multiFactorInfo, + MultiFactorSession? multiFactorSession, + Object? verificationCompleted, + Object? verificationFailed, + Object? codeSent, + Object? codeAutoRetrievalTimeout, + Duration? timeout = const Duration(seconds: 30), + int? forceResendingToken, + String? autoRetrievedSmsCodeForTesting, + }) { + return super.noSuchMethod( + Invocation.method(#verifyPhoneNumber, [], { + #phoneNumber: phoneNumber, + #verificationCompleted: verificationCompleted, + #verificationFailed: verificationFailed, + #codeSent: codeSent, + #codeAutoRetrievalTimeout: codeAutoRetrievalTimeout, + #timeout: timeout, + #forceResendingToken: forceResendingToken, + #autoRetrievedSmsCodeForTesting: autoRetrievedSmsCodeForTesting, + }), + returnValue: neverEndingFuture(), + returnValueForMissingStub: neverEndingFuture(), + ); + } + + @override + Future revokeAccessToken(String accessToken) { + return super.noSuchMethod( + Invocation.method(#revokeAccessToken, [accessToken]), + returnValue: neverEndingFuture(), + returnValueForMissingStub: neverEndingFuture(), + ); + } +} + +class FakeFirebaseAuthPlatform extends Fake + with MockPlatformInterfaceMixin + implements FirebaseAuthPlatform { + FakeFirebaseAuthPlatform({this.tenantId, this.customAuthDomain}); + + @override + String? tenantId; + + @override + String? customAuthDomain; + + @override + FirebaseAuthPlatform delegateFor( + {required FirebaseApp app, Persistence? persistence}) { + return this; + } + + @override + FirebaseAuthPlatform setInitialValues({ + InternalUserDetails? currentUser, + String? languageCode, + }) { + return this; + } +} + +class MockUserPlatform extends Mock + with MockPlatformInterfaceMixin + implements TestUserPlatform { + MockUserPlatform(FirebaseAuthPlatform auth, MultiFactorPlatform multiFactor, + InternalUserDetails _user) { + TestUserPlatform(auth, multiFactor, _user); + } +} + +class MockUserCredentialPlatform extends Mock + with MockPlatformInterfaceMixin + implements TestUserCredentialPlatform { + MockUserCredentialPlatform( + FirebaseAuthPlatform auth, + AdditionalUserInfo additionalUserInfo, + AuthCredential credential, + UserPlatform userPlatform, + ) { + TestUserCredentialPlatform( + auth, + additionalUserInfo, + credential, + userPlatform, + ); + } +} + +class MockConfirmationResultPlatform extends Mock + with MockPlatformInterfaceMixin + implements TestConfirmationResultPlatform { + MockConfirmationResultPlatform() { + TestConfirmationResultPlatform(); + } +} + +class TestConfirmationResultPlatform extends ConfirmationResultPlatform { + TestConfirmationResultPlatform() : super('TEST'); +} + +class TestFirebaseAuthPlatform extends FirebaseAuthPlatform { + TestFirebaseAuthPlatform() : super(); + + void instanceFor({ + FirebaseApp? app, + Map? pluginConstants, + }) {} + + @override + FirebaseAuthPlatform delegateFor( + {FirebaseApp? app, Persistence? persistence}) { + return this; + } + + @override + FirebaseAuthPlatform setInitialValues({ + InternalUserDetails? currentUser, + String? languageCode, + }) { + return this; + } +} + +class MockRecaptchaVerifier extends Mock + with MockPlatformInterfaceMixin + implements TestRecaptchaVerifier { + MockRecaptchaVerifier() { + TestRecaptchaVerifier(); + } + + RecaptchaVerifierFactoryPlatform get mockDelegate { + return MockRecaptchaVerifierFactoryPlatform(); + } + + @override + RecaptchaVerifierFactoryPlatform get delegate { + return super.noSuchMethod( + Invocation.getter(#delegate), + returnValue: MockRecaptchaVerifierFactoryPlatform(), + returnValueForMissingStub: MockRecaptchaVerifierFactoryPlatform(), + ); + } +} + +class MockRecaptchaVerifierFactoryPlatform extends Mock + with MockPlatformInterfaceMixin + implements TestRecaptchaVerifierFactoryPlatform { + MockRecaptchaVerifierFactoryPlatform() { + TestRecaptchaVerifierFactoryPlatform(); + } +} + +class TestRecaptchaVerifier implements RecaptchaVerifier { + TestRecaptchaVerifier() : super(); + + @override + void clear() {} + + @override + RecaptchaVerifierFactoryPlatform get delegate => + TestRecaptchaVerifierFactoryPlatform(); + + @override + Future render() { + throw UnimplementedError(); + } + + @override + String get type => throw UnimplementedError(); + + @override + Future verify() { + throw UnimplementedError(); + } +} + +class TestRecaptchaVerifierFactoryPlatform + extends RecaptchaVerifierFactoryPlatform {} + +class TestAuthProvider extends AuthProvider { + TestAuthProvider() : super('TEST'); +} + +class TestUserPlatform extends UserPlatform { + TestUserPlatform(FirebaseAuthPlatform auth, MultiFactorPlatform multiFactor, + InternalUserDetails data) + : super(auth, multiFactor, data); +} + +class TestMultiFactorPlatform extends MultiFactorPlatform { + TestMultiFactorPlatform(FirebaseAuthPlatform auth) : super(auth); +} + +class TestUserCredentialPlatform extends UserCredentialPlatform { + TestUserCredentialPlatform( + FirebaseAuthPlatform auth, + AdditionalUserInfo additionalUserInfo, + AuthCredential credential, + UserPlatform userPlatform, + ) : super( + auth: auth, + additionalUserInfo: additionalUserInfo, + credential: credential, + user: userPlatform, + ); +} + +class EmptyUserCredentialPlatform extends UserCredentialPlatform { + EmptyUserCredentialPlatform() : super(auth: FirebaseAuthPlatform.instance); +} diff --git a/mih_ui/android/build/ios/SourcePackages/firebase_auth-6.5.4/test/mock.dart b/mih_ui/android/build/ios/SourcePackages/firebase_auth-6.5.4/test/mock.dart new file mode 100644 index 00000000..6dc416fb --- /dev/null +++ b/mih_ui/android/build/ios/SourcePackages/firebase_auth-6.5.4/test/mock.dart @@ -0,0 +1,40 @@ +// Copyright 2020 The Chromium Authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +import 'package:firebase_core_platform_interface/test.dart'; +import 'package:flutter/services.dart'; +import 'package:flutter_test/flutter_test.dart'; + +typedef Callback = void Function(MethodCall call); + +void setupFirebaseAuthMocks([Callback? customHandlers]) { + TestWidgetsFlutterBinding.ensureInitialized(); + + setupFirebaseCoreMocks(); + TestFirebaseAppHostApi.setUp(MockFirebaseAppHostApi()); +} + +Future neverEndingFuture() async { + // ignore: literal_only_boolean_expressions + while (true) { + await Future.delayed(const Duration(minutes: 5)); + } +} + +class MockFirebaseAppHostApi implements TestFirebaseAppHostApi { + @override + Future delete(String appName) async {} + + @override + Future setAutomaticDataCollectionEnabled( + String appName, + bool enabled, + ) async {} + + @override + Future setAutomaticResourceManagementEnabled( + String appName, + bool enabled, + ) async {} +} diff --git a/mih_ui/android/build/ios/SourcePackages/firebase_auth-6.5.4/test/user_test.dart b/mih_ui/android/build/ios/SourcePackages/firebase_auth-6.5.4/test/user_test.dart new file mode 100644 index 00000000..967be866 --- /dev/null +++ b/mih_ui/android/build/ios/SourcePackages/firebase_auth-6.5.4/test/user_test.dart @@ -0,0 +1,571 @@ +// ignore_for_file: require_trailing_commas +// Copyright 2020, the Chromium project authors. Please see the AUTHORS file +// for details. All rights reserved. Use of this source code is governed by a +// BSD-style license that can be found in the LICENSE file. + +import 'package:firebase_auth/firebase_auth.dart'; +import 'package:firebase_auth_platform_interface/firebase_auth_platform_interface.dart'; +import 'package:firebase_auth_platform_interface/src/method_channel/method_channel_firebase_auth.dart'; +import 'package:firebase_core/firebase_core.dart'; +import 'package:flutter_test/flutter_test.dart'; +import 'package:mockito/mockito.dart'; +// import 'package:mockito/annotations.dart'; +import 'package:plugin_platform_interface/plugin_platform_interface.dart'; + +// import './user_test.mocks.dart'; +import './mock.dart'; +import 'firebase_auth_test.dart'; + +Map kMockUser1 = { + 'isAnonymous': true, + 'emailVerified': false, + 'displayName': 'displayName', +}; + +// @GenerateMocks([], customMocks: [ +// MockSpec(as: #MockFirebaseAuthPlatform), +// MockSpec(as: #MockUserPlatform), +// ]) +void main() { + setupFirebaseAuthMocks(); + + late FirebaseAuth auth; + + final kMockIdTokenResult = InternalIdTokenResult( + token: '12345', + expirationTimestamp: 123456, + authTimestamp: 1234567, + issuedAtTimestamp: 12345678, + signInProvider: 'password', + claims: { + 'claim1': 'value1', + }, + ); + + final int kMockCreationTimestamp = + DateTime.now().subtract(const Duration(days: 2)).millisecondsSinceEpoch; + final int kMockLastSignInTimestamp = + DateTime.now().subtract(const Duration(days: 1)).millisecondsSinceEpoch; + + final kMockUser = InternalUserDetails( + userInfo: InternalUserInfo( + uid: '12345', + displayName: 'displayName', + creationTimestamp: kMockCreationTimestamp, + lastSignInTimestamp: kMockLastSignInTimestamp, + isAnonymous: true, + isEmailVerified: false, + ), + providerData: [ + { + 'providerId': 'firebase', + 'uid': '12345', + 'displayName': 'Flutter Test User', + 'photoUrl': null, + 'email': 'test@example.com', + 'isAnonymous': true, + 'isEmailVerified': false, + } + ], + ); + late MockUserPlatform mockUserPlatform; + late MockUserCredentialPlatform mockUserCredPlatform; + + AdditionalUserInfo mockAdditionalInfo = AdditionalUserInfo( + isNewUser: false, + username: 'flutterUser', + providerId: 'testProvider', + profile: {'foo': 'bar'}, + ); + + EmailAuthCredential mockCredential = + EmailAuthProvider.credential(email: 'test', password: 'test') + as EmailAuthCredential; + + var mockAuthPlatform = MockFirebaseAuth(); + + group('$User', () { + late InternalUserDetails user; + + // used to generate a unique application name for each test + var testCount = 0; + + setUp(() async { + FirebaseAuthPlatform.instance = mockAuthPlatform = MockFirebaseAuth(); + + // Each test uses a unique FirebaseApp instance to avoid sharing state + final app = await Firebase.initializeApp( + name: '$testCount', + options: const FirebaseOptions( + apiKey: '', + appId: '', + messagingSenderId: '', + projectId: '', + ), + ); + + auth = FirebaseAuth.instanceFor(app: app); + + user = kMockUser; + + mockUserPlatform = MockUserPlatform(mockAuthPlatform, user); + + mockUserCredPlatform = MockUserCredentialPlatform( + FirebaseAuthPlatform.instance, + mockAdditionalInfo, + mockCredential, + mockUserPlatform, + ); + + when(mockAuthPlatform.signInAnonymously()).thenAnswer( + (_) => Future.value(mockUserCredPlatform)); + + when(mockAuthPlatform.currentUser).thenReturn(mockUserPlatform); + + when(mockAuthPlatform.delegateFor( + app: anyNamed('app'), + )).thenAnswer((_) => mockAuthPlatform); + + when(mockAuthPlatform.setInitialValues( + currentUser: anyNamed('currentUser'), + languageCode: anyNamed('languageCode'), + )).thenAnswer((_) => mockAuthPlatform); + + TestDefaultBinaryMessengerBinding.instance.defaultBinaryMessenger + .setMockMethodCallHandler(MethodChannelFirebaseAuth.channel, + (call) async { + switch (call.method) { + default: + return {'user': user}; + } + }); + }); + + tearDown(() => testCount++); + + setUp(() async { + user = kMockUser; + await auth.signInAnonymously(); + }); + + test('delete()', () async { + // Necessary as we otherwise get a "null is not a Future" error + when(mockUserPlatform.delete()).thenAnswer((i) async {}); + + await auth.currentUser!.delete(); + + verify(mockUserPlatform.delete()); + }); + + test('getIdToken()', () async { + // Necessary as we otherwise get a "null is not a Future" error + when(mockUserPlatform.getIdToken(any)).thenAnswer((_) async => 'token'); + + final token = await auth.currentUser!.getIdToken(true); + + verify(mockUserPlatform.getIdToken(true)); + expect(token, isA()); + }); + + test('getIdTokenResult()', () async { + when(mockUserPlatform.getIdTokenResult(any)) + .thenAnswer((_) async => IdTokenResult(kMockIdTokenResult)); + + final idTokenResult = await auth.currentUser!.getIdTokenResult(true); + + verify(mockUserPlatform.getIdTokenResult(true)); + expect(idTokenResult, isA()); + }); + + group('linkWithCredential()', () { + setUp(() { + when(mockUserPlatform.linkWithCredential(any)) + .thenAnswer((_) async => mockUserCredPlatform); + }); + + test('should call linkWithCredential()', () async { + String newEmail = 'new@email.com'; + EmailAuthCredential credential = + EmailAuthProvider.credential(email: newEmail, password: 'test') + as EmailAuthCredential; + + await auth.currentUser!.linkWithCredential(credential); + + verify(mockUserPlatform.linkWithCredential(credential)); + }); + }); + + group('reauthenticateWithCredential()', () { + setUp(() { + when(mockUserPlatform.reauthenticateWithCredential(any)) + .thenAnswer((_) => Future.value(mockUserCredPlatform)); + }); + test('should call reauthenticateWithCredential()', () async { + String newEmail = 'new@email.com'; + EmailAuthCredential credential = + EmailAuthProvider.credential(email: newEmail, password: 'test') + as EmailAuthCredential; + + await auth.currentUser!.reauthenticateWithCredential(credential); + + verify(mockUserPlatform.reauthenticateWithCredential(credential)); + }); + }); + + test('reload()', () async { + // Necessary as we otherwise get a "null is not a Future" error + when(mockUserPlatform.reload()).thenAnswer((i) async {}); + + await auth.currentUser!.reload(); + + verify(mockUserPlatform.reload()); + }); + + test('sendEmailVerification()', () async { + // Necessary as we otherwise get a "null is not a Future" error + when(mockUserPlatform.sendEmailVerification(any)) + .thenAnswer((i) async {}); + + final ActionCodeSettings actionCodeSettings = + ActionCodeSettings(url: 'test'); + + await auth.currentUser!.sendEmailVerification(actionCodeSettings); + + verify(mockUserPlatform.sendEmailVerification(actionCodeSettings)); + }); + + group('unlink()', () { + setUp(() { + when(mockUserPlatform.unlink(any)) + .thenAnswer((_) => Future.value(mockUserPlatform)); + }); + test('should call unlink()', () async { + const String providerId = 'providerId'; + + await auth.currentUser!.unlink(providerId); + + verify(mockUserPlatform.unlink(providerId)); + }); + }); + + group('updatePassword()', () { + test('should call updatePassword()', () async { + // Necessary as we otherwise get a "null is not a Future" error + when(mockUserPlatform.updatePassword(any)).thenAnswer((i) async {}); + + const String newPassword = 'newPassword'; + + await auth.currentUser!.updatePassword(newPassword); + + verify(mockUserPlatform.updatePassword(newPassword)); + }); + }); + group('updatePhoneNumber()', () { + test('should call updatePhoneNumber()', () async { + // Necessary as we otherwise get a "null is not a Future" error + when(mockUserPlatform.updatePhoneNumber(any)).thenAnswer((i) async {}); + + PhoneAuthCredential phoneAuthCredential = PhoneAuthProvider.credential( + verificationId: 'test', + smsCode: 'test', + ); + + await auth.currentUser!.updatePhoneNumber(phoneAuthCredential); + + verify(mockUserPlatform.updatePhoneNumber(phoneAuthCredential)); + }); + }); + + test('updateProfile()', () async { + // Necessary as we otherwise get a "null is not a Future" error + when(mockUserPlatform.updateProfile(any)).thenAnswer((i) async {}); + + const String displayName = 'updatedName'; + const String photoURL = 'testUrl'; + Map data = { + 'displayName': displayName, + 'photoURL': photoURL + }; + + await auth.currentUser! + // ignore: deprecated_member_use_from_same_package + .updateProfile(displayName: displayName, photoURL: photoURL); + + verify(mockUserPlatform.updateProfile(data)); + }); + + group('verifyBeforeUpdateEmail()', () { + test('should call verifyBeforeUpdateEmail()', () async { + // Necessary as we otherwise get a "null is not a Future" error + when(mockUserPlatform.verifyBeforeUpdateEmail(any, any)) + .thenAnswer((i) async {}); + + const newEmail = 'new@email.com'; + ActionCodeSettings actionCodeSettings = ActionCodeSettings(url: 'test'); + + await auth.currentUser! + .verifyBeforeUpdateEmail(newEmail, actionCodeSettings); + + verify(mockUserPlatform.verifyBeforeUpdateEmail( + newEmail, actionCodeSettings)); + }); + }); + + test('toString()', () async { + when(mockAuthPlatform.currentUser).thenReturn(TestUserPlatform( + mockAuthPlatform, TestMultiFactorPlatform(mockAuthPlatform), user)); + + const userInfo = 'UserInfo(' + 'displayName: Flutter Test User, ' + 'email: test@example.com, ' + 'phoneNumber: null, ' + 'photoURL: null, ' + 'providerId: firebase, ' + 'uid: 12345)'; + + final userMetadata = 'UserMetadata(' + 'creationTime: ${DateTime.fromMillisecondsSinceEpoch(kMockCreationTimestamp, isUtc: true)}, ' + 'lastSignInTime: ${DateTime.fromMillisecondsSinceEpoch(kMockLastSignInTimestamp, isUtc: true)})'; + + expect( + auth.currentUser.toString(), + 'User(' + 'displayName: displayName, ' + 'email: null, ' + 'isEmailVerified: false, ' + 'isAnonymous: true, ' + 'metadata: $userMetadata, ' + 'phoneNumber: null, ' + 'photoURL: null, ' + 'providerData, ' + '[$userInfo], ' + 'refreshToken: null, ' + 'tenantId: null, ' + 'uid: 12345)', + ); + }); + }); +} + +class MockFirebaseAuthPlatformBase = TestFirebaseAuthPlatform + with MockPlatformInterfaceMixin; + +class MockUserPlatformBase = TestUserPlatform with MockPlatformInterfaceMixin; + +class MockFirebaseAuth extends Mock + with MockPlatformInterfaceMixin + implements TestFirebaseAuthPlatform { + @override + Future signInAnonymously() { + return super.noSuchMethod( + Invocation.method(#signInAnonymously, const []), + returnValue: neverEndingFuture(), + returnValueForMissingStub: neverEndingFuture(), + ); + } + + @override + FirebaseAuthPlatform delegateFor( + {FirebaseApp? app, Persistence? persistence}) { + return super.noSuchMethod( + Invocation.method(#delegateFor, const [], {#app: app}), + returnValue: TestFirebaseAuthPlatform(), + returnValueForMissingStub: TestFirebaseAuthPlatform(), + ); + } + + @override + FirebaseAuthPlatform setInitialValues({ + InternalUserDetails? currentUser, + String? languageCode, + }) { + return super.noSuchMethod( + Invocation.method(#setInitialValues, const [], { + #currentUser: currentUser, + #languageCode: languageCode, + }), + returnValue: TestFirebaseAuthPlatform(), + returnValueForMissingStub: TestFirebaseAuthPlatform(), + ); + } +} + +class MockUserPlatform extends Mock + with MockPlatformInterfaceMixin + implements TestUserPlatform { + MockUserPlatform(FirebaseAuthPlatform auth, InternalUserDetails _user) { + TestUserPlatform(auth, TestMultiFactorPlatform(auth), _user); + } + + @override + Future delete() { + return super.noSuchMethod( + Invocation.method(#delete, []), + returnValue: neverEndingFuture(), + returnValueForMissingStub: neverEndingFuture(), + ); + } + + @override + Future reload() { + return super.noSuchMethod( + Invocation.method(#reload, []), + returnValue: neverEndingFuture(), + returnValueForMissingStub: neverEndingFuture(), + ); + } + + @override + Future getIdToken(bool? forceRefresh) { + return super.noSuchMethod( + Invocation.method(#getIdToken, [forceRefresh]), + returnValue: neverEndingFuture(), + returnValueForMissingStub: neverEndingFuture(), + ); + } + + @override + Future unlink(String? providerId) { + return super.noSuchMethod( + Invocation.method(#unlink, [providerId]), + returnValue: neverEndingFuture(), + returnValueForMissingStub: neverEndingFuture(), + ); + } + + @override + Future getIdTokenResult(bool? forceRefresh) { + return super.noSuchMethod( + Invocation.method(#getIdTokenResult, [forceRefresh]), + returnValue: neverEndingFuture(), + returnValueForMissingStub: neverEndingFuture(), + ); + } + + @override + Future reauthenticateWithCredential( + AuthCredential? credential, + ) { + return super.noSuchMethod( + Invocation.method(#reauthenticateWithCredential, [credential]), + returnValue: neverEndingFuture(), + returnValueForMissingStub: neverEndingFuture(), + ); + } + + @override + Future linkWithCredential( + AuthCredential? credential, + ) { + return super.noSuchMethod( + Invocation.method(#linkWithCredential, [credential]), + returnValue: neverEndingFuture(), + returnValueForMissingStub: neverEndingFuture(), + ); + } + + @override + Future sendEmailVerification(ActionCodeSettings? actionCodeSettings) { + return super.noSuchMethod( + Invocation.method(#sendEmailVerification, [actionCodeSettings]), + returnValue: neverEndingFuture(), + returnValueForMissingStub: neverEndingFuture(), + ); + } + + @override + Future updatePassword(String? newPassword) { + return super.noSuchMethod( + Invocation.method(#updatePassword, [newPassword]), + returnValue: neverEndingFuture(), + returnValueForMissingStub: neverEndingFuture(), + ); + } + + @override + Future updatePhoneNumber(PhoneAuthCredential? phoneCredential) { + return super.noSuchMethod( + Invocation.method(#updatePhoneNumber, [phoneCredential]), + returnValue: neverEndingFuture(), + returnValueForMissingStub: neverEndingFuture(), + ); + } + + @override + Future updateProfile(Map? profile) { + return super.noSuchMethod( + Invocation.method(#updateProfile, [profile]), + returnValue: neverEndingFuture(), + returnValueForMissingStub: neverEndingFuture(), + ); + } + + @override + Future verifyBeforeUpdateEmail( + String? newEmail, [ + ActionCodeSettings? actionCodeSettings, + ]) { + return super.noSuchMethod( + Invocation.method(#verifyBeforeUpdateEmail, [ + newEmail, + actionCodeSettings, + ]), + returnValue: neverEndingFuture(), + returnValueForMissingStub: neverEndingFuture(), + ); + } +} + +class MockUserCredentialPlatform extends Mock + with MockPlatformInterfaceMixin + implements TestUserCredentialPlatform { + MockUserCredentialPlatform( + FirebaseAuthPlatform auth, + AdditionalUserInfo additionalUserInfo, + AuthCredential credential, + UserPlatform userPlatform, + ) { + TestUserCredentialPlatform( + auth, + additionalUserInfo, + credential, + userPlatform, + ); + } +} + +class TestFirebaseAuthPlatform extends FirebaseAuthPlatform { + TestFirebaseAuthPlatform() : super(); + + @override + FirebaseAuthPlatform delegateFor( + {FirebaseApp? app, Persistence? persistence}) => + this; + + @override + FirebaseAuthPlatform setInitialValues({ + InternalUserDetails? currentUser, + String? languageCode, + }) { + return this; + } +} + +class TestUserPlatform extends UserPlatform { + TestUserPlatform(FirebaseAuthPlatform auth, MultiFactorPlatform multiFactor, + InternalUserDetails data) + : super(auth, multiFactor, data); +} + +class TestUserCredentialPlatform extends UserCredentialPlatform { + TestUserCredentialPlatform( + FirebaseAuthPlatform auth, + AdditionalUserInfo additionalUserInfo, + AuthCredential credential, + UserPlatform userPlatform, + ) : super( + auth: auth, + additionalUserInfo: additionalUserInfo, + credential: credential, + user: userPlatform); +} diff --git a/mih_ui/android/build/ios/SourcePackages/firebase_auth-6.5.4/windows/CMakeLists.txt b/mih_ui/android/build/ios/SourcePackages/firebase_auth-6.5.4/windows/CMakeLists.txt new file mode 100644 index 00000000..74c8f9ab --- /dev/null +++ b/mih_ui/android/build/ios/SourcePackages/firebase_auth-6.5.4/windows/CMakeLists.txt @@ -0,0 +1,123 @@ +# The Flutter tooling requires that developers have a version of Visual Studio +# installed that includes CMake 3.14 or later. You should not increase this +# version, as doing so will cause the plugin to fail to compile for some +# customers of the plugin. +cmake_minimum_required(VERSION 3.14) + +# Project-level configuration. +set(PROJECT_NAME "firebase_auth") +project(${PROJECT_NAME} LANGUAGES CXX) + +# This value is used when generating builds using this plugin, so it must +# not be changed +set(PLUGIN_NAME "firebase_auth_plugin") + +# Any new source files that you add to the plugin should be added here. +list(APPEND PLUGIN_SOURCES + "firebase_auth_plugin.cpp" + "firebase_auth_plugin.h" + "messages.g.cpp" + "messages.g.h" +) + +# Read version from pubspec.yaml +file(STRINGS "../pubspec.yaml" pubspec_content) +foreach(line ${pubspec_content}) + string(FIND ${line} "version: " has_version) + + if("${has_version}" STREQUAL "0") + string(FIND ${line} ": " version_start_pos) + math(EXPR version_start_pos "${version_start_pos} + 2") + string(LENGTH ${line} version_end_pos) + math(EXPR len "${version_end_pos} - ${version_start_pos}") + string(SUBSTRING ${line} ${version_start_pos} ${len} PLUGIN_VERSION) + break() + endif() +endforeach(line) + +configure_file(plugin_version.h.in ${CMAKE_BINARY_DIR}/generated/firebase_auth/plugin_version.h) +include_directories(${CMAKE_BINARY_DIR}/generated/) + +# Define the plugin library target. Its name must not be changed (see comment +# on PLUGIN_NAME above). +add_library(${PLUGIN_NAME} STATIC + "include/firebase_auth/firebase_auth_plugin_c_api.h" + "firebase_auth_plugin_c_api.cpp" + ${PLUGIN_SOURCES} + ${CMAKE_BINARY_DIR}/generated/firebase_auth/plugin_version.h +) + +# Apply a standard set of build settings that are configured in the +# application-level CMakeLists.txt. This can be removed for plugins that want +# full control over build settings. +apply_standard_settings(${PLUGIN_NAME}) + +# Symbols are hidden by default to reduce the chance of accidental conflicts +# between plugins. This should not be removed; any symbols that should be +# exported should be explicitly exported with the FLUTTER_PLUGIN_EXPORT macro. +set_target_properties(${PLUGIN_NAME} PROPERTIES + CXX_VISIBILITY_PRESET hidden) +target_compile_definitions(${PLUGIN_NAME} PUBLIC FLUTTER_PLUGIN_IMPL) +# Enable firebase-cpp-sdk's platform logging api. +target_compile_definitions(${PLUGIN_NAME} PRIVATE -DINTERNAL_EXPERIMENTAL=1) + +# Source include directories and library dependencies. Add any plugin-specific +# dependencies here. +set(MSVC_RUNTIME_MODE MD) +set(firebase_libs firebase_core_plugin firebase_auth) +target_link_libraries(${PLUGIN_NAME} PRIVATE "${firebase_libs}") + +target_include_directories(${PLUGIN_NAME} INTERFACE + "${CMAKE_CURRENT_SOURCE_DIR}/include") +target_link_libraries(${PLUGIN_NAME} PUBLIC flutter flutter_wrapper_plugin) + +# List of absolute paths to libraries that should be bundled with the plugin. +# This list could contain prebuilt libraries, or libraries created by an +# external build triggered from this build file. +set(firebase_auth_bundled_libraries + "" + PARENT_SCOPE +) + +# === Tests === +# These unit tests can be run from a terminal after building the example, or +# from Visual Studio after opening the generated solution file. + +# Only enable test builds when building the example (which sets this variable) +# so that plugin clients aren't building the tests. +if (${include_${PROJECT_NAME}_tests}) +set(TEST_RUNNER "${PROJECT_NAME}_test") +enable_testing() + +# Add the Google Test dependency. +include(FetchContent) +FetchContent_Declare( + googletest + URL https://github.com/google/googletest/archive/release-1.11.0.zip +) +# Prevent overriding the parent project's compiler/linker settings +set(gtest_force_shared_crt ON CACHE BOOL "" FORCE) +# Disable install commands for gtest so it doesn't end up in the bundle. +set(INSTALL_GTEST OFF CACHE BOOL "Disable installation of googletest" FORCE) +FetchContent_MakeAvailable(googletest) + +# The plugin's C API is not very useful for unit testing, so build the sources +# directly into the test binary rather than using the DLL. +add_executable(${TEST_RUNNER} + test/firebase_auth_plugin_test.cpp + ${PLUGIN_SOURCES} +) +apply_standard_settings(${TEST_RUNNER}) +target_include_directories(${TEST_RUNNER} PRIVATE "${CMAKE_CURRENT_SOURCE_DIR}") +target_link_libraries(${TEST_RUNNER} PRIVATE flutter_wrapper_plugin) +target_link_libraries(${TEST_RUNNER} PRIVATE gtest_main gmock) +# flutter_wrapper_plugin has link dependencies on the Flutter DLL. +add_custom_command(TARGET ${TEST_RUNNER} POST_BUILD + COMMAND ${CMAKE_COMMAND} -E copy_if_different + "${FLUTTER_LIBRARY}" $ +) + +# Enable automatic test discovery. +include(GoogleTest) +gtest_discover_tests(${TEST_RUNNER}) +endif() diff --git a/mih_ui/android/build/ios/SourcePackages/firebase_auth-6.5.4/windows/firebase_auth_plugin.cpp b/mih_ui/android/build/ios/SourcePackages/firebase_auth-6.5.4/windows/firebase_auth_plugin.cpp new file mode 100644 index 00000000..a931dac2 --- /dev/null +++ b/mih_ui/android/build/ios/SourcePackages/firebase_auth-6.5.4/windows/firebase_auth_plugin.cpp @@ -0,0 +1,1341 @@ +// Copyright 2023, the Chromium project authors. Please see the AUTHORS file +// for details. All rights reserved. Use of this source code is governed by a +// BSD-style license that can be found in the LICENSE file. + +#include "firebase_auth_plugin.h" + +// This must be included before many other Windows headers. +#include + +#include +#include + +#include "firebase/app.h" +#include "firebase/auth.h" +#include "firebase/future.h" +#include "firebase/log.h" +#include "firebase/util.h" +#include "firebase/variant.h" +#include "firebase_auth/plugin_version.h" +#include "firebase_core/firebase_core_plugin_c_api.h" +#include "messages.g.h" + +// For getPlatformVersion; remove unless needed for your plugin implementation. +#include +#include +#include +#include +#include + +#include +#include +#include +#include +#include +#include +#include +#include +#include + +using ::firebase::App; +using ::firebase::auth::Auth; + +namespace firebase_auth_windows { + +static std::string kLibraryName = "flutter-fire-auth"; +flutter::BinaryMessenger* FirebaseAuthPlugin::binaryMessenger = nullptr; + +// static +void FirebaseAuthPlugin::RegisterWithRegistrar( + flutter::PluginRegistrarWindows* registrar) { + auto plugin = std::make_unique(); + + FirebaseAuthHostApi::SetUp(registrar->messenger(), plugin.get()); + FirebaseAuthUserHostApi::SetUp(registrar->messenger(), plugin.get()); + + RegisterFlutterFirebasePlugin("plugins.flutter.io/firebase_auth", + plugin.get()); + + registrar->AddPlugin(std::move(plugin)); + + binaryMessenger = registrar->messenger(); + + // Register for platform logging + App::RegisterLibrary(kLibraryName.c_str(), getPluginVersion().c_str(), + nullptr); +} + +FirebaseAuthPlugin::FirebaseAuthPlugin() { + firebase::SetLogLevel(firebase::kLogLevelVerbose); +} + +FirebaseAuthPlugin::~FirebaseAuthPlugin() = default; + +Auth* GetAuthFromPigeon(const AuthPigeonFirebaseApp& pigeonApp) { + App* app = App::GetInstance(pigeonApp.app_name().c_str()); + + Auth* auth = Auth::GetAuth(app); + + return auth; +} + +InternalUserCredential ParseAuthResult( + const firebase::auth::AuthResult* authResult) { + InternalUserCredential result = InternalUserCredential(); + result.set_user(FirebaseAuthPlugin::ParseUserDetails(authResult->user)); + result.set_additional_user_info(FirebaseAuthPlugin::ParseAdditionalUserInfo( + authResult->additional_user_info)); + return result; +} + +using flutter::EncodableMap; +using flutter::EncodableValue; + +flutter::EncodableMap +firebase_auth_windows::FirebaseAuthPlugin::ConvertToEncodableMap( + const std::map& originalMap) { + EncodableMap convertedMap; + for (const auto& kv : originalMap) { + EncodableValue key = ConvertToEncodableValue( + kv.first); // convert std::string to EncodableValue + EncodableValue value = ConvertToEncodableValue( + kv.second); // convert FieldValue to EncodableValue + convertedMap[key] = value; // insert into the new map + } + return convertedMap; +} + +flutter::EncodableValue +firebase_auth_windows::FirebaseAuthPlugin::ConvertToEncodableValue( + const firebase::Variant& variant) { + switch (variant.type()) { + case firebase::Variant::kTypeNull: + return EncodableValue(); + case firebase::Variant::kTypeInt64: + return EncodableValue(variant.int64_value()); + case firebase::Variant::kTypeDouble: + return EncodableValue(variant.double_value()); + case firebase::Variant::kTypeBool: + return EncodableValue(variant.bool_value()); + case firebase::Variant::kTypeStaticString: + return EncodableValue(variant.string_value()); + case firebase::Variant::kTypeMutableString: + return EncodableValue(variant.mutable_string()); + case firebase::Variant::kTypeMap: + return FirebaseAuthPlugin::ConvertToEncodableMap(variant.map()); + case firebase::Variant::kTypeStaticBlob: + return EncodableValue(flutter::CustomEncodableValue(variant.blob_data())); + case firebase::Variant::kTypeMutableBlob: + return EncodableValue( + flutter::CustomEncodableValue(variant.mutable_blob_data())); + default: + return EncodableValue(); + } +} + +InternalAdditionalUserInfo FirebaseAuthPlugin::ParseAdditionalUserInfo( + const firebase::auth::AdditionalUserInfo additionalUserInfo) { + // Cannot know if the user is new or not with current API + InternalAdditionalUserInfo result = InternalAdditionalUserInfo(false); + result.set_profile(ConvertToEncodableMap(additionalUserInfo.profile)); + result.set_provider_id(additionalUserInfo.provider_id); + result.set_username(additionalUserInfo.user_name); + return result; +} + +InternalUserDetails FirebaseAuthPlugin::ParseUserDetails( + const firebase::auth::User user) { + InternalUserDetails result = + InternalUserDetails(FirebaseAuthPlugin::ParseUserInfo(&user), + FirebaseAuthPlugin::ParseProviderData(&user)); + + return result; +} + +InternalUserInfo FirebaseAuthPlugin::ParseUserInfo( + const firebase::auth::User* user) { + InternalUserInfo result = InternalUserInfo(user->uid(), user->is_anonymous(), + user->is_email_verified()); + result.set_display_name(user->display_name()); + result.set_email(user->email()); + result.set_phone_number(user->phone_number()); + result.set_photo_url(user->photo_url()); + result.set_provider_id(user->provider_id()); + result.set_uid(user->uid()); + result.set_creation_timestamp(user->metadata().creation_timestamp); + result.set_last_sign_in_timestamp(user->metadata().last_sign_in_timestamp); + + return result; +} + +flutter::EncodableList FirebaseAuthPlugin::ParseProviderData( + const firebase::auth::User* user) { + flutter::EncodableList output; + + for (firebase::auth::UserInfoInterface userInfo : user->provider_data()) { + output.push_back(FirebaseAuthPlugin::ParseUserInfoToMap(&userInfo)); + } + + return flutter::EncodableList(output); +} + +flutter::EncodableValue FirebaseAuthPlugin::ParseUserInfoToMap( + firebase::auth::UserInfoInterface* userInfo) { + return flutter::EncodableValue(flutter::EncodableMap{ + {flutter::EncodableValue("displayName"), + flutter::EncodableValue(userInfo->display_name())}, + {flutter::EncodableValue("email"), + flutter::EncodableValue(userInfo->email())}, + {flutter::EncodableValue("isEmailVerified"), + flutter::EncodableValue(true)}, + {flutter::EncodableValue("phoneNumber"), + flutter::EncodableValue(userInfo->phone_number())}, + {flutter::EncodableValue("photoUrl"), + flutter::EncodableValue(userInfo->photo_url())}, + {flutter::EncodableValue("uid"), + flutter::EncodableValue(userInfo->uid().empty() ? std::string("") + : userInfo->uid())}, + {flutter::EncodableValue("providerId"), + flutter::EncodableValue(userInfo->provider_id())}, + {flutter::EncodableValue("isAnonymous"), + flutter::EncodableValue(false)}}); +} + +std::string FirebaseAuthPlugin::GetAuthErrorCode(AuthError authError) { + switch (authError) { + case firebase::auth::kAuthErrorInvalidCustomToken: + return "invalid-custom-token"; + case firebase::auth::kAuthErrorCustomTokenMismatch: + return "custom-token-mismatch"; + case firebase::auth::kAuthErrorInvalidEmail: + return "invalid-email"; + case firebase::auth::kAuthErrorInvalidCredential: + return "invalid-credential"; + case firebase::auth::kAuthErrorUserDisabled: + return "user-disabled"; + case firebase::auth::kAuthErrorEmailAlreadyInUse: + return "email-already-in-use"; + case firebase::auth::kAuthErrorWrongPassword: + return "wrong-password"; + case firebase::auth::kAuthErrorTooManyRequests: + return "too-many-requests"; + case firebase::auth::kAuthErrorAccountExistsWithDifferentCredentials: + return "account-exists-with-different-credentials"; + case firebase::auth::kAuthErrorRequiresRecentLogin: + return "requires-recent-login"; + case firebase::auth::kAuthErrorProviderAlreadyLinked: + return "provider-already-linked"; + case firebase::auth::kAuthErrorNoSuchProvider: + return "no-such-provider"; + case firebase::auth::kAuthErrorInvalidUserToken: + return "invalid-user-token"; + case firebase::auth::kAuthErrorUserTokenExpired: + return "user-token-expired"; + case firebase::auth::kAuthErrorUserNotFound: + return "user-not-found"; + case firebase::auth::kAuthErrorInvalidApiKey: + return "invalid-api-key"; + case firebase::auth::kAuthErrorCredentialAlreadyInUse: + return "credential-already-in-use"; + case firebase::auth::kAuthErrorOperationNotAllowed: + return "operation-not-allowed"; + case firebase::auth::kAuthErrorWeakPassword: + return "weak-password"; + case firebase::auth::kAuthErrorAppNotAuthorized: + return "app-not-authorized"; + case firebase::auth::kAuthErrorExpiredActionCode: + return "expired-action-code"; + case firebase::auth::kAuthErrorInvalidActionCode: + return "invalid-action-code"; + case firebase::auth::kAuthErrorInvalidMessagePayload: + return "invalid-message-payload"; + case firebase::auth::kAuthErrorInvalidSender: + return "invalid-sender"; + case firebase::auth::kAuthErrorInvalidRecipientEmail: + return "invalid-recipient-email"; + case firebase::auth::kAuthErrorUnauthorizedDomain: + return "unauthorized-domain"; + case firebase::auth::kAuthErrorInvalidContinueUri: + return "invalid-continue-uri"; + case firebase::auth::kAuthErrorMissingContinueUri: + return "missing-continue-uri"; + case firebase::auth::kAuthErrorMissingEmail: + return "missing-email"; + case firebase::auth::kAuthErrorMissingPhoneNumber: + return "missing-phone-number"; + case firebase::auth::kAuthErrorInvalidPhoneNumber: + return "invalid-phone-number"; + case firebase::auth::kAuthErrorMissingVerificationCode: + return "missing-verification-code"; + case firebase::auth::kAuthErrorInvalidVerificationCode: + return "invalid-verification-code"; + case firebase::auth::kAuthErrorMissingVerificationId: + return "missing-verification-id"; + case firebase::auth::kAuthErrorInvalidVerificationId: + return "invalid-verification-id"; + case firebase::auth::kAuthErrorSessionExpired: + return "session-expired"; + case firebase::auth::kAuthErrorQuotaExceeded: + return "quota-exceeded"; + case firebase::auth::kAuthErrorMissingAppCredential: + return "missing-app-credential"; + case firebase::auth::kAuthErrorInvalidAppCredential: + return "invalid-app-credential"; + case firebase::auth::kAuthErrorMissingClientIdentifier: + return "missing-client-identifier"; + case firebase::auth::kAuthErrorTenantIdMismatch: + return "tenant-id-mismatch"; + case firebase::auth::kAuthErrorUnsupportedTenantOperation: + return "unsupported-tenant-operation"; + case firebase::auth::kAuthErrorUserMismatch: + return "user-mismatch"; + case firebase::auth::kAuthErrorNetworkRequestFailed: + return "network-request-failed"; + case firebase::auth::kAuthErrorNoSignedInUser: + return "no-signed-in-user"; + case firebase::auth::kAuthErrorCancelled: + return "cancelled"; + + default: + return "unknown-error"; + } +} + +FlutterError FirebaseAuthPlugin::ParseError( + const firebase::FutureBase& completed_future) { + const AuthError errorCode = + static_cast(completed_future.error()); + + return FlutterError(FirebaseAuthPlugin::GetAuthErrorCode(errorCode), + completed_future.error_message()); +} + +std::string const kFLTFirebaseAuthChannelName = "firebase_auth_plugin"; + +class FlutterIdTokenListener : public firebase::auth::IdTokenListener { + public: + void SetEventSink( + std::unique_ptr> event_sink) { + event_sink_ = std::move(event_sink); + } + + void OnIdTokenChanged(Auth* auth) override { + // Generate your ID Token + firebase::auth::User user = auth->current_user(); + InternalUserDetails userDetails = + FirebaseAuthPlugin::ParseUserDetails(user); + + using flutter::EncodableList; + using flutter::EncodableMap; + using flutter::EncodableValue; + + if (event_sink_) { + if (user.is_valid()) { + EncodableList userDetailsList = EncodableList(); + userDetailsList.push_back(userDetails.user_info().ToEncodableList()); + userDetailsList.push_back(userDetails.provider_data()); + event_sink_->Success(EncodableValue( + EncodableMap{{EncodableValue("user"), userDetailsList}})); + } else { + event_sink_->Success(EncodableValue(EncodableMap{ + {EncodableValue("user"), EncodableValue(std::monostate{})}})); + } + } + } + + private: + std::unique_ptr> event_sink_; +}; + +class IdTokenStreamHandler + : public flutter::StreamHandler { + public: + IdTokenStreamHandler(Auth* auth) { + listener_ = nullptr; + auth_ = auth; + } + + std::unique_ptr> + OnListenInternal( + const flutter::EncodableValue* arguments, + std::unique_ptr>&& events) + override { + listener_ = new FlutterIdTokenListener(); + listener_->SetEventSink(std::move(events)); + auth_->AddIdTokenListener(listener_); + return nullptr; + } + + std::unique_ptr> + OnCancelInternal(const flutter::EncodableValue* arguments) override { + auth_->RemoveIdTokenListener(listener_); + listener_->SetEventSink(nullptr); + listener_ = nullptr; + return nullptr; + } + + private: + FlutterIdTokenListener* listener_; + firebase::auth::Auth* auth_; +}; + +void FirebaseAuthPlugin::RegisterIdTokenListener( + const AuthPigeonFirebaseApp& app, + std::function reply)> result) { + firebase::auth::Auth* firebaseAuth = GetAuthFromPigeon(app); + + std::string name = + kFLTFirebaseAuthChannelName + "/id-token/" + app.app_name(); + + auto id_token_handler = std::make_unique(firebaseAuth); + + flutter::EventChannel channel( + binaryMessenger, name, &flutter::StandardMethodCodec::GetInstance()); + + channel.SetStreamHandler(std::move(id_token_handler)); + + result(ErrorOr(std::string(name))); +} + +class FlutterAuthStateListener : public firebase::auth::AuthStateListener { + public: + void SetEventSink( + std::unique_ptr> event_sink) { + event_sink_ = std::move(event_sink); + } + + void OnAuthStateChanged(Auth* auth) override { + // Generate your ID Token + firebase::auth::User user = auth->current_user(); + InternalUserDetails userDetails = + FirebaseAuthPlugin::ParseUserDetails(user); + + using flutter::EncodableList; + using flutter::EncodableMap; + using flutter::EncodableValue; + + if (event_sink_) { + if (user.is_valid()) { + EncodableList userDetailsList = EncodableList(); + userDetailsList.push_back(userDetails.user_info().ToEncodableList()); + userDetailsList.push_back(userDetails.provider_data()); + + event_sink_->Success(EncodableValue( + EncodableMap{{EncodableValue("user"), userDetailsList}})); + } else { + event_sink_->Success(EncodableValue(EncodableMap{ + {EncodableValue("user"), EncodableValue(std::monostate{})}})); + } + } + } + + private: + std::unique_ptr> event_sink_; +}; + +class AuthStateStreamHandler + : public flutter::StreamHandler { + public: + AuthStateStreamHandler(Auth* auth) { + listener_ = nullptr; + auth_ = auth; + } + + std::unique_ptr> + OnListenInternal( + const flutter::EncodableValue* arguments, + std::unique_ptr>&& events) + override { + listener_ = new FlutterAuthStateListener(); + listener_->SetEventSink(std::move(events)); + + auth_->AddAuthStateListener(listener_); + + return nullptr; + } + + std::unique_ptr> + OnCancelInternal(const flutter::EncodableValue* arguments) override { + auth_->RemoveAuthStateListener(listener_); + + listener_->SetEventSink(nullptr); + listener_ = nullptr; + return nullptr; + } + + private: + FlutterAuthStateListener* listener_; + firebase::auth::Auth* auth_; +}; + +void FirebaseAuthPlugin::RegisterAuthStateListener( + const AuthPigeonFirebaseApp& app, + std::function reply)> result) { + firebase::auth::Auth* firebaseAuth = GetAuthFromPigeon(app); + + std::string name = + kFLTFirebaseAuthChannelName + "/auth-state/" + app.app_name(); + + auto auth_state_handler = + std::make_unique(firebaseAuth); + + flutter::EventChannel channel( + binaryMessenger, name, &flutter::StandardMethodCodec::GetInstance()); + + channel.SetStreamHandler(std::move(auth_state_handler)); + + result(ErrorOr(std::string(name))); +} + +void FirebaseAuthPlugin::UseEmulator( + const AuthPigeonFirebaseApp& app, const std::string& host, int64_t port, + std::function reply)> result) { + firebase::auth::Auth* firebaseAuth = GetAuthFromPigeon(app); + firebaseAuth->UseEmulator(host, static_cast(port)); + result(std::nullopt); +} + +void FirebaseAuthPlugin::ApplyActionCode( + const AuthPigeonFirebaseApp& app, const std::string& code, + std::function reply)> result) { + result(FlutterError("unimplemented", + "ApplyActionCode is not available on this platform yet.", + nullptr)); +} + +void FirebaseAuthPlugin::CheckActionCode( + const AuthPigeonFirebaseApp& app, const std::string& code, + std::function reply)> result) { + result(FlutterError("unimplemented", + "CheckActionCode is not available on this platform yet.", + nullptr)); +} + +void FirebaseAuthPlugin::ConfirmPasswordReset( + const AuthPigeonFirebaseApp& app, const std::string& code, + const std::string& new_password, + std::function reply)> result) { + result(FlutterError( + "unimplemented", + "ConfirmPasswordReset is not available on this platform yet.", nullptr)); +} + +void FirebaseAuthPlugin::CreateUserWithEmailAndPassword( + const AuthPigeonFirebaseApp& app, const std::string& email, + const std::string& password, + std::function reply)> result) { + firebase::auth::Auth* firebaseAuth = GetAuthFromPigeon(app); + + firebase::Future createUserFuture = + firebaseAuth->CreateUserWithEmailAndPassword(email.c_str(), + password.c_str()); + + createUserFuture.OnCompletion( + [result](const firebase::Future& + completed_future) { + // We are probably in a different thread right now. + if (completed_future.error() == 0) { + InternalUserCredential credential = + ParseAuthResult(completed_future.result()); + result(credential); + } else { + result(FirebaseAuthPlugin::ParseError(completed_future)); + } + }); +} + +void FirebaseAuthPlugin::SignInAnonymously( + const AuthPigeonFirebaseApp& app, + std::function reply)> result) { + firebase::auth::Auth* firebaseAuth = GetAuthFromPigeon(app); + + firebase::Future signInFuture = + firebaseAuth->SignInAnonymously(); + + signInFuture.OnCompletion( + [result](const firebase::Future& + completed_future) { + // We are probably in a different thread right now. + if (completed_future.error() == 0) { + InternalUserCredential credential = + ParseAuthResult(completed_future.result()); + result(credential); + } else { + result(FirebaseAuthPlugin::ParseError(completed_future)); + } + }); +} + +// Provider type keys. +std::string const kSignInMethodPassword = "password"; +std::string const kSignInMethodEmailLink = "emailLink"; +std::string const kSignInMethodFacebook = "facebook.com"; +std::string const kSignInMethodGoogle = "google.com"; +std::string const kSignInMethodTwitter = "twitter.com"; +std::string const kSignInMethodGithub = "github.com"; +std::string const kSignInMethodApple = "apple.com"; +std::string const kSignInMethodPhone = "phone"; +std::string const kSignInMethodOAuth = "oauth"; + +// Credential argument keys. +std::string const kArgumentCredential = "credential"; +std::string const kArgumentProviderId = "providerId"; +std::string const kArgumentProviderScope = "scopes"; +std::string const kArgumentProviderCustomParameters = "customParameters"; +std::string const kArgumentSignInMethod = "signInMethod"; +std::string const kArgumentSecret = "secret"; +std::string const kArgumentIdToken = "idToken"; +std::string const kArgumentAccessToken = "accessToken"; +std::string const kArgumentRawNonce = "rawNonce"; +std::string const kArgumentEmail = "email"; +std::string const kArgumentCode = "code"; +std::string const kArgumentNewEmail = "newEmail"; +std::string const kArgumentEmailLink = kSignInMethodEmailLink; +std::string const kArgumentToken = "token"; +std::string const kArgumentVerificationId = "verificationId"; +std::string const kArgumentSmsCode = "smsCode"; +std::string const kArgumentActionCodeSettings = "actionCodeSettings"; + +// Emulating NSDictionary +typedef std::unordered_map Dictionary; + +firebase::auth::Credential getCredentialFromArguments( + flutter::EncodableMap arguments, const AuthPigeonFirebaseApp& app) { + std::string signInMethod = + std::get(arguments[kArgumentSignInMethod]); + + // Password Auth + if (signInMethod == kSignInMethodPassword) { + std::string email = std::get(arguments[kArgumentEmail]); + std::string secret = std::get(arguments[kArgumentSecret]); + return firebase::auth::EmailAuthProvider::GetCredential(email.c_str(), + secret.c_str()); + } + + // Email Link Auth + if (signInMethod == kSignInMethodEmailLink) { + // Firebase C++ SDK doesn't have email link authentication as of my + // knowledge cutoff in September 2021 + std::cout << "Email link authentication is not supported in Firebase C++ " + "SDK as of September 2021.\n"; + return firebase::auth::Credential(); + } + + // Lambda function to extract an optional string from the arguments map. This + // allows us to pass nullptr if no value exists + auto getStringOpt = + [&](const std::string& key) -> std::optional { + auto it = arguments.find(key); + if (it != arguments.end() && + std::holds_alternative(it->second)) { + return std::get(it->second); + } + return std::nullopt; + }; + + std::optional idToken = getStringOpt(kArgumentIdToken); + std::optional accessToken = getStringOpt(kArgumentAccessToken); + + // Facebook Auth + if (signInMethod == kSignInMethodFacebook) { + return firebase::auth::FacebookAuthProvider::GetCredential( + accessToken.value().c_str()); + } + + // Google Auth + if (signInMethod == kSignInMethodGoogle) { + // Both accessToken and idToken arguments can be null. You can use one or + // the other + return firebase::auth::GoogleAuthProvider::GetCredential( + idToken ? idToken.value().c_str() : nullptr, + accessToken ? accessToken.value().c_str() : nullptr); + } + + // Twitter Auth + if (signInMethod == kSignInMethodTwitter) { + std::string secret = std::get(arguments[kArgumentSecret]); + return firebase::auth::TwitterAuthProvider::GetCredential( + idToken.value().c_str(), secret.c_str()); + } + + // GitHub Auth + if (signInMethod == kSignInMethodGithub) { + return firebase::auth::GitHubAuthProvider::GetCredential( + accessToken.value().c_str()); + } + + // OAuth + if (signInMethod == kSignInMethodOAuth) { + std::string providerId = + std::get(arguments[kArgumentProviderId]); + std::optional rawNonce = getStringOpt(kArgumentRawNonce); + // If rawNonce provided use corresponding credential builder + // e.g. AppleID auth through the webView + if (rawNonce) { + return firebase::auth::OAuthProvider::GetCredential( + providerId.c_str(), idToken.value().c_str(), rawNonce.value().c_str(), + accessToken ? accessToken.value().c_str() : nullptr); + } else { + return firebase::auth::OAuthProvider::GetCredential( + providerId.c_str(), idToken.value().c_str(), + accessToken.value().c_str()); + } + } + + // If no known auth method matched + printf( + "Support for an auth provider with identifier '%s' is not implemented.\n", + signInMethod.c_str()); + return firebase::auth::Credential(); +} + +void FirebaseAuthPlugin::SignInWithCredential( + const AuthPigeonFirebaseApp& app, const flutter::EncodableMap& input, + std::function reply)> result) { + firebase::auth::Auth* firebaseAuth = GetAuthFromPigeon(app); + + firebase::Future signInFuture = + firebaseAuth->SignInWithCredential( + getCredentialFromArguments(input, app)); + + signInFuture.OnCompletion( + [result](const firebase::Future& completed_future) { + if (completed_future.error() == 0) { + // TODO: not the right return type from C++ SDK + InternalUserInfo credential = + ParseUserInfo(completed_future.result()); + InternalUserCredential userCredential = InternalUserCredential(); + InternalUserDetails user = + InternalUserDetails(credential, flutter::EncodableList()); + userCredential.set_user(user); + result(userCredential); + } else { + result(FirebaseAuthPlugin::ParseError(completed_future)); + } + }); +} + +void FirebaseAuthPlugin::SignInWithCustomToken( + const AuthPigeonFirebaseApp& app, const std::string& token, + std::function reply)> result) { + firebase::auth::Auth* firebaseAuth = GetAuthFromPigeon(app); + + firebase::Future signInFuture = + firebaseAuth->SignInWithCustomToken(token.c_str()); + + signInFuture.OnCompletion( + [result](const firebase::Future& + completed_future) { + // We are probably in a different thread right now. + if (completed_future.error() == 0) { + InternalUserCredential credential = + ParseAuthResult(completed_future.result()); + result(credential); + } else { + result(FirebaseAuthPlugin::ParseError(completed_future)); + } + }); +} + +void FirebaseAuthPlugin::SignInWithEmailAndPassword( + const AuthPigeonFirebaseApp& app, const std::string& email, + const std::string& password, + std::function reply)> result) { + firebase::auth::Auth* firebaseAuth = GetAuthFromPigeon(app); + + firebase::Future signInFuture = + firebaseAuth->SignInWithEmailAndPassword(email.c_str(), password.c_str()); + + signInFuture.OnCompletion( + [result](const firebase::Future& + completed_future) { + // We are probably in a different thread right now. + if (completed_future.error() == 0) { + InternalUserCredential credential = + ParseAuthResult(completed_future.result()); + result(credential); + } else { + result(FirebaseAuthPlugin::ParseError(completed_future)); + } + }); +} + +void FirebaseAuthPlugin::SignInWithEmailLink( + const AuthPigeonFirebaseApp& app, const std::string& email, + const std::string& email_link, + std::function reply)> result) { + result(FlutterError( + "unimplemented", + "SignInWithEmailLink is not available on this platform yet.", nullptr)); +} + +std::vector TransformEncodableList( + const flutter::EncodableList& encodable_list) { + std::vector transformed_list; + + for (const auto& value : encodable_list) { + if (std::holds_alternative(value)) { + transformed_list.push_back(std::get(value)); + } + } + + return transformed_list; +} + +std::map TransformEncodableMap( + const flutter::EncodableMap& encodable_map) { + std::map transformed_map; + + for (const auto& pair : encodable_map) { + if (std::holds_alternative(pair.first) && + std::holds_alternative(pair.second)) { + transformed_map[std::get(pair.first)] = + std::get(pair.second); + } + } + + return transformed_map; +} + +firebase::auth::FederatedOAuthProvider getProviderFromArguments( + const InternalSignInProvider& sign_in_provider) { + firebase::auth::FederatedOAuthProviderData federatedOAuthProviderData = + firebase::auth::FederatedOAuthProviderData( + sign_in_provider.provider_id().c_str(), + TransformEncodableList(*sign_in_provider.scopes()), + TransformEncodableMap(*sign_in_provider.custom_parameters())); + firebase::auth::FederatedOAuthProvider federatedAuthProvider = + firebase::auth::FederatedOAuthProvider(federatedOAuthProviderData); + + return federatedAuthProvider; +} + +void FirebaseAuthPlugin::SignInWithProvider( + const AuthPigeonFirebaseApp& app, + const InternalSignInProvider& sign_in_provider, + std::function reply)> result) { + firebase::auth::Auth* firebaseAuth = GetAuthFromPigeon(app); + + firebase::Future signInFuture = + firebaseAuth->SignInWithProvider( + &getProviderFromArguments(sign_in_provider)); + + signInFuture.OnCompletion( + [result](const firebase::Future& + completed_future) { + // We are probably in a different thread right now. + if (completed_future.error() == 0) { + InternalUserCredential credential = + ParseAuthResult(completed_future.result()); + result(credential); + } else { + result(FirebaseAuthPlugin::ParseError(completed_future)); + } + }); +} + +void FirebaseAuthPlugin::SignOut( + const AuthPigeonFirebaseApp& app, + std::function reply)> result) { + firebase::auth::Auth* firebaseAuth = GetAuthFromPigeon(app); + + firebaseAuth->SignOut(); + + result(std::nullopt); +} + +flutter::EncodableList TransformStringList( + const std::vector& string_list) { + flutter::EncodableList encodable_list; + + for (const auto& value : string_list) { + encodable_list.push_back(value); + } + + return encodable_list; +} + +void FirebaseAuthPlugin::FetchSignInMethodsForEmail( + const AuthPigeonFirebaseApp& app, const std::string& email, + std::function reply)> result) { + firebase::auth::Auth* firebaseAuth = GetAuthFromPigeon(app); + + firebase::Future signInFuture = + firebaseAuth->FetchProvidersForEmail(email.c_str()); + + signInFuture.OnCompletion( + [result]( + const firebase::Future& + completed_future) { + // We are probably in a different thread right now. + if (completed_future.error() == 0) { + result(TransformStringList(completed_future.result()->providers)); + } else { + result(FirebaseAuthPlugin::ParseError(completed_future)); + } + }); +} + +void FirebaseAuthPlugin::SendPasswordResetEmail( + const AuthPigeonFirebaseApp& app, const std::string& email, + const InternalActionCodeSettings* action_code_settings, + std::function reply)> result) { + firebase::auth::Auth* firebaseAuth = GetAuthFromPigeon(app); + + firebase::Future signInFuture = + firebaseAuth->SendPasswordResetEmail(email.c_str()); + + signInFuture.OnCompletion( + [result](const firebase::Future& completed_future) { + // We are probably in a different thread right now. + if (completed_future.error() == 0) { + result(std::nullopt); + } else { + result(FirebaseAuthPlugin::ParseError(completed_future)); + } + }); +} + +void FirebaseAuthPlugin::SendSignInLinkToEmail( + const AuthPigeonFirebaseApp& app, const std::string& email, + const InternalActionCodeSettings& action_code_settings, + std::function reply)> result) { + result(FlutterError( + "unimplemented", + "SendSignInLinkToEmail is not available on this platform yet.", nullptr)); +} + +void FirebaseAuthPlugin::SetLanguageCode( + const AuthPigeonFirebaseApp& app, const std::string* language_code, + std::function reply)> result) { + firebase::auth::Auth* firebaseAuth = GetAuthFromPigeon(app); + + if (language_code == nullptr) { + firebaseAuth->UseAppLanguage(); + result(firebaseAuth->language_code()); + return; + } + + firebaseAuth->set_language_code(language_code->c_str()); + + result(*language_code); +} + +void FirebaseAuthPlugin::SetSettings( + const AuthPigeonFirebaseApp& app, + const InternalFirebaseAuthSettings& settings, + std::function reply)> result) { + result(FlutterError("unimplemented", + "SetSettings is not available on this platform yet.", + nullptr)); +} + +void FirebaseAuthPlugin::VerifyPasswordResetCode( + const AuthPigeonFirebaseApp& app, const std::string& code, + std::function reply)> result) { + result(FlutterError( + "unimplemented", + "VerifyPasswordResetCode is not available on this platform yet.", + nullptr)); +} + +void FirebaseAuthPlugin::VerifyPhoneNumber( + const AuthPigeonFirebaseApp& app, + const InternalVerifyPhoneNumberRequest& request, + std::function reply)> result) { + result(FlutterError( + "unimplemented", + "VerifyPhoneNumber is not available on this platform yet.", nullptr)); +} + +void FirebaseAuthPlugin::Delete( + const AuthPigeonFirebaseApp& app, + std::function reply)> result) { + firebase::auth::Auth* firebaseAuth = GetAuthFromPigeon(app); + firebase::auth::User user = firebaseAuth->current_user(); + + firebase::Future future = user.Delete(); + + future.OnCompletion([result](const firebase::Future& completed_future) { + // We are probably in a different thread right now. + if (completed_future.error() == 0) { + result(std::nullopt); + } else { + result(FirebaseAuthPlugin::ParseError(completed_future)); + } + }); +} + +void FirebaseAuthPlugin::GetIdToken( + const AuthPigeonFirebaseApp& app, bool force_refresh, + std::function reply)> result) { + firebase::auth::Auth* firebaseAuth = GetAuthFromPigeon(app); + firebase::auth::User user = firebaseAuth->current_user(); + + firebase::Future future = user.GetToken(force_refresh); + + future.OnCompletion( + [result](const firebase::Future& completed_future) { + // We are probably in a different thread right now. + if (completed_future.error() == 0) { + InternalIdTokenResult token_result; + std::string_view sv(*completed_future.result()); + token_result.set_token(sv); + result(token_result); + } else { + result(FirebaseAuthPlugin::ParseError(completed_future)); + } + }); +} + +void FirebaseAuthPlugin::LinkWithCredential( + const AuthPigeonFirebaseApp& app, const flutter::EncodableMap& input, + std::function reply)> result) { + firebase::auth::Auth* firebaseAuth = GetAuthFromPigeon(app); + firebase::auth::User user = firebaseAuth->current_user(); + + firebase::Future future = + user.LinkWithCredential(getCredentialFromArguments(input, app)); + + future.OnCompletion( + [result](const firebase::Future& + completed_future) { + // We are probably in a different thread right now. + if (completed_future.error() == 0) { + InternalUserCredential credential = + ParseAuthResult(completed_future.result()); + result(credential); + } else { + result(FirebaseAuthPlugin::ParseError(completed_future)); + } + }); +} + +void FirebaseAuthPlugin::LinkWithProvider( + const AuthPigeonFirebaseApp& app, + const InternalSignInProvider& sign_in_provider, + std::function reply)> result) { + firebase::auth::Auth* firebaseAuth = GetAuthFromPigeon(app); + firebase::auth::User user = firebaseAuth->current_user(); + + firebase::Future future = + user.LinkWithProvider(&getProviderFromArguments(sign_in_provider)); + + future.OnCompletion( + [result](const firebase::Future& + completed_future) { + // We are probably in a different thread right now. + if (completed_future.error() == 0) { + InternalUserCredential credential = + ParseAuthResult(completed_future.result()); + result(credential); + } else { + result(FirebaseAuthPlugin::ParseError(completed_future)); + } + }); +} + +void FirebaseAuthPlugin::ReauthenticateWithCredential( + const AuthPigeonFirebaseApp& app, const flutter::EncodableMap& input, + std::function reply)> result) { + firebase::auth::Auth* firebaseAuth = GetAuthFromPigeon(app); + firebase::auth::User user = firebaseAuth->current_user(); + + firebase::Future future = + user.Reauthenticate(getCredentialFromArguments(input, app)); + + future.OnCompletion([result](const firebase::Future& completed_future) { + // We are probably in a different thread right now. + if (completed_future.error() == 0) { + // TODO: wrong return type + } else { + result(FirebaseAuthPlugin::ParseError(completed_future)); + } + }); +} + +void FirebaseAuthPlugin::ReauthenticateWithProvider( + const AuthPigeonFirebaseApp& app, + const InternalSignInProvider& sign_in_provider, + std::function reply)> result) { + firebase::auth::Auth* firebaseAuth = GetAuthFromPigeon(app); + firebase::auth::User user = firebaseAuth->current_user(); + + firebase::Future future = + user.ReauthenticateWithProvider( + &getProviderFromArguments(sign_in_provider)); + + future.OnCompletion( + [result](const firebase::Future& + completed_future) { + // We are probably in a different thread right now. + if (completed_future.error() == 0) { + InternalUserCredential credential = + ParseAuthResult(completed_future.result()); + result(credential); + } else { + result(FirebaseAuthPlugin::ParseError(completed_future)); + } + }); +} + +void FirebaseAuthPlugin::Reload( + const AuthPigeonFirebaseApp& app, + std::function reply)> result) { + firebase::auth::Auth* firebaseAuth = GetAuthFromPigeon(app); + firebase::auth::User user = firebaseAuth->current_user(); + + firebase::Future future = user.Reload(); + + future.OnCompletion([result, firebaseAuth]( + const firebase::Future& completed_future) { + // We are probably in a different thread right now. + if (completed_future.error() == 0) { + InternalUserDetails user = ParseUserDetails(firebaseAuth->current_user()); + result(user); + } else { + result(FirebaseAuthPlugin::ParseError(completed_future)); + } + }); +} + +void FirebaseAuthPlugin::SendEmailVerification( + const AuthPigeonFirebaseApp& app, + const InternalActionCodeSettings* action_code_settings, + std::function reply)> result) { + firebase::auth::Auth* firebaseAuth = GetAuthFromPigeon(app); + firebase::auth::User user = firebaseAuth->current_user(); + + firebase::Future future = user.SendEmailVerification(); + + future.OnCompletion([result](const firebase::Future& completed_future) { + // We are probably in a different thread right now. + if (completed_future.error() == 0) { + result(std::nullopt); + } else { + result(FirebaseAuthPlugin::ParseError(completed_future)); + } + }); +} + +void FirebaseAuthPlugin::Unlink( + const AuthPigeonFirebaseApp& app, const std::string& provider_id, + std::function reply)> result) { + firebase::auth::Auth* firebaseAuth = GetAuthFromPigeon(app); + firebase::auth::User user = firebaseAuth->current_user(); + + firebase::Future future = + user.Unlink(provider_id.c_str()); + + future.OnCompletion( + [result](const firebase::Future& + completed_future) { + // We are probably in a different thread right now. + if (completed_future.error() == 0) { + InternalUserCredential credential = + ParseAuthResult(completed_future.result()); + result(credential); + } else { + result(FirebaseAuthPlugin::ParseError(completed_future)); + } + }); +} + +void FirebaseAuthPlugin::UpdateEmail( + const AuthPigeonFirebaseApp& app, const std::string& new_email, + std::function reply)> result) { + firebase::auth::Auth* firebaseAuth = GetAuthFromPigeon(app); + firebase::auth::User user = firebaseAuth->current_user(); + + firebase::Future future = + user.SendEmailVerificationBeforeUpdatingEmail(new_email.c_str()); + + future.OnCompletion([result, firebaseAuth]( + const firebase::Future& completed_future) { + // We are probably in a different thread right now. + if (completed_future.error() == 0) { + InternalUserDetails user = ParseUserDetails(firebaseAuth->current_user()); + result(user); + } else { + result(FirebaseAuthPlugin::ParseError(completed_future)); + } + }); +} + +void FirebaseAuthPlugin::UpdatePassword( + const AuthPigeonFirebaseApp& app, const std::string& new_password, + std::function reply)> result) { + firebase::auth::Auth* firebaseAuth = GetAuthFromPigeon(app); + firebase::auth::User user = firebaseAuth->current_user(); + + firebase::Future future = user.UpdatePassword(new_password.c_str()); + + future.OnCompletion([result, firebaseAuth]( + const firebase::Future& completed_future) { + // We are probably in a different thread right now. + if (completed_future.error() == 0) { + InternalUserDetails user = ParseUserDetails(firebaseAuth->current_user()); + result(user); + } else { + result(FirebaseAuthPlugin::ParseError(completed_future)); + } + }); +} + +firebase::auth::PhoneAuthCredential getPhoneCredentialFromArguments( + flutter::EncodableMap arguments, const AuthPigeonFirebaseApp& app) { + std::string signInMethod = + std::get(arguments[kArgumentSignInMethod]); + + if (signInMethod == kSignInMethodPhone) { + std::string verificationId = + std::get(arguments[kArgumentVerificationId]); + std::string smsCode = std::get(arguments[kArgumentSmsCode]); + + // TODO: we cannot construct a PhoneAuthCredential from the verificationId + return firebase::auth::PhoneAuthCredential::PhoneAuthCredential(); + } + // If no known auth method matched + printf( + "Support for an auth provider with identifier '%s' is not " + "implemented.\n", + signInMethod.c_str()); + throw; +} + +void FirebaseAuthPlugin::UpdatePhoneNumber( + const AuthPigeonFirebaseApp& app, const flutter::EncodableMap& input, + std::function reply)> result) { + firebase::auth::Auth* firebaseAuth = GetAuthFromPigeon(app); + firebase::auth::User user = firebaseAuth->current_user(); + + firebase::Future future = + user.UpdatePhoneNumberCredential( + getPhoneCredentialFromArguments(input, app)); + + future.OnCompletion( + [result](const firebase::Future& completed_future) { + // We are probably in a different thread right now. + if (completed_future.error() == 0) { + InternalUserDetails user = + ParseUserDetails(*completed_future.result()); + result(user); + } else { + result(FirebaseAuthPlugin::ParseError(completed_future)); + } + }); +} + +void FirebaseAuthPlugin::UpdateProfile( + const AuthPigeonFirebaseApp& app, const InternalUserProfile& profile, + std::function reply)> result) { + firebase::auth::Auth* firebaseAuth = GetAuthFromPigeon(app); + firebase::auth::User user = firebaseAuth->current_user(); + + firebase::auth::User::UserProfile userProfile; + + if (profile.display_name_changed()) { + userProfile.display_name = profile.display_name()->c_str(); + } + if (profile.photo_url_changed()) { + userProfile.photo_url = profile.photo_url()->c_str(); + } + + firebase::Future future = user.UpdateUserProfile(userProfile); + + future.OnCompletion([result, firebaseAuth]( + const firebase::Future& completed_future) { + // We are probably in a different thread right now. + if (completed_future.error() == 0) { + InternalUserDetails user = ParseUserDetails(firebaseAuth->current_user()); + result(user); + } else { + result(FirebaseAuthPlugin::ParseError(completed_future)); + } + }); +} + +void FirebaseAuthPlugin::VerifyBeforeUpdateEmail( + const AuthPigeonFirebaseApp& app, const std::string& new_email, + const InternalActionCodeSettings* action_code_settings, + std::function reply)> result) { + firebase::auth::Auth* firebaseAuth = GetAuthFromPigeon(app); + firebase::auth::User user = firebaseAuth->current_user(); + + if (action_code_settings != nullptr) { + printf( + "Firebase C++ SDK does not support using `ActionCodeSettings` for " + "`verifyBeforeUpdateEmail()` API currently"); + } + + firebase::Future future = + user.SendEmailVerificationBeforeUpdatingEmail(new_email.c_str()); + + future.OnCompletion( + [result, firebaseAuth](const firebase::Future& completed_future) { + if (completed_future.error() == 0) { + result(std::nullopt); + } else { + result(FirebaseAuthPlugin::ParseError(completed_future)); + } + }); +} + +void FirebaseAuthPlugin::RevokeTokenWithAuthorizationCode( + const AuthPigeonFirebaseApp& app, const std::string& authorization_code, + std::function reply)> result) { + result(FlutterError( + "unimplemented", + "RevokeTokenWithAuthorizationCode is not available on this platform yet.", + nullptr)); +} + +void FirebaseAuthPlugin::RevokeAccessToken( + const AuthPigeonFirebaseApp& app, const std::string& access_token, + std::function reply)> result) { + result(FlutterError("unimplemented", + "RevokeAccessToken is not available on this platform.", + nullptr)); +} + +void FirebaseAuthPlugin::InitializeRecaptchaConfig( + const AuthPigeonFirebaseApp& app, + std::function reply)> result) { + result(FlutterError( + "unimplemented", + "InitializeRecaptchaConfig is not available on this platform yet.", + nullptr)); +} + +flutter::EncodableMap FirebaseAuthPlugin::GetPluginConstantsForFirebaseApp( + const firebase::App& app) { + flutter::EncodableMap constants; + + Auth* auth = Auth::GetAuth(const_cast(&app)); + firebase::auth::User user = auth->current_user(); + + if (user.is_valid()) { + InternalUserDetails userDetails = ParseUserDetails(user); + flutter::EncodableList userDetailsList; + userDetailsList.push_back( + flutter::EncodableValue(userDetails.user_info().ToEncodableList())); + userDetailsList.push_back( + flutter::EncodableValue(userDetails.provider_data())); + constants[flutter::EncodableValue("APP_CURRENT_USER")] = + flutter::EncodableValue(userDetailsList); + } + + std::string lang = auth->language_code(); + if (!lang.empty()) { + constants[flutter::EncodableValue("APP_LANGUAGE_CODE")] = + flutter::EncodableValue(lang); + } + + return constants; +} + +void FirebaseAuthPlugin::DidReinitializeFirebaseCore() { + // No-op for now. Could be used to reset cached auth instances. +} + +} // namespace firebase_auth_windows diff --git a/mih_ui/android/build/ios/SourcePackages/firebase_auth-6.5.4/windows/firebase_auth_plugin.h b/mih_ui/android/build/ios/SourcePackages/firebase_auth-6.5.4/windows/firebase_auth_plugin.h new file mode 100644 index 00000000..575e201f --- /dev/null +++ b/mih_ui/android/build/ios/SourcePackages/firebase_auth-6.5.4/windows/firebase_auth_plugin.h @@ -0,0 +1,218 @@ +/* + * Copyright 2023, the Chromium project authors. Please see the AUTHORS file + * for details. All rights reserved. Use of this source code is governed by a + * BSD-style license that can be found in the LICENSE file. + */ + +#ifndef FLUTTER_PLUGIN_FIREBASE_AUTH_PLUGIN_H_ +#define FLUTTER_PLUGIN_FIREBASE_AUTH_PLUGIN_H_ + +#include +#include + +#include + +#include "firebase/app.h" +#include "firebase/auth.h" +#include "firebase/auth/types.h" +#include "firebase/future.h" +#include "firebase_core/flutter_firebase_plugin.h" +#include "messages.g.h" + +using firebase::auth::AuthError; + +namespace firebase_auth_windows { + +class FirebaseAuthPlugin : public flutter::Plugin, + public FirebaseAuthHostApi, + public FirebaseAuthUserHostApi, + public FlutterFirebasePlugin { + public: + static void RegisterWithRegistrar(flutter::PluginRegistrarWindows* registrar); + + FirebaseAuthPlugin(); + + virtual ~FirebaseAuthPlugin(); + + // Disallow copy and assign. + FirebaseAuthPlugin(const FirebaseAuthPlugin&) = delete; + FirebaseAuthPlugin& operator=(const FirebaseAuthPlugin&) = delete; + + // Parser functions + static std::string GetAuthErrorCode(AuthError authError); + static FlutterError ParseError(const firebase::FutureBase& future); + + static InternalUserDetails ParseUserDetails(const firebase::auth::User user); + static InternalAdditionalUserInfo ParseAdditionalUserInfo( + const firebase::auth::AdditionalUserInfo user); + static flutter::EncodableMap ConvertToEncodableMap( + const std::map& originalMap); + static flutter::EncodableValue ConvertToEncodableValue( + const firebase::Variant& variant); + static InternalUserInfo ParseUserInfo(const firebase::auth::User* user); + static flutter::EncodableList ParseProviderData( + const firebase::auth::User* user); + static flutter::EncodableValue ParseUserInfoToMap( + firebase::auth::UserInfoInterface* userInfo); + + // FirebaseAuthHostApi methods. + virtual void RegisterIdTokenListener( + const AuthPigeonFirebaseApp& app, + std::function reply)> result) override; + virtual void RegisterAuthStateListener( + const AuthPigeonFirebaseApp& app, + std::function reply)> result) override; + virtual void UseEmulator( + const AuthPigeonFirebaseApp& app, const std::string& host, int64_t port, + std::function reply)> result) override; + virtual void ApplyActionCode( + const AuthPigeonFirebaseApp& app, const std::string& code, + std::function reply)> result) override; + virtual void CheckActionCode( + const AuthPigeonFirebaseApp& app, const std::string& code, + std::function reply)> result) + override; + virtual void ConfirmPasswordReset( + const AuthPigeonFirebaseApp& app, const std::string& code, + const std::string& new_password, + std::function reply)> result) override; + virtual void CreateUserWithEmailAndPassword( + const AuthPigeonFirebaseApp& app, const std::string& email, + const std::string& password, + std::function reply)> result) + override; + virtual void SignInAnonymously( + const AuthPigeonFirebaseApp& app, + std::function reply)> result) + override; + virtual void SignInWithCredential( + const AuthPigeonFirebaseApp& app, const flutter::EncodableMap& input, + std::function reply)> result) + override; + virtual void SignInWithCustomToken( + const AuthPigeonFirebaseApp& app, const std::string& token, + std::function reply)> result) + override; + virtual void SignInWithEmailAndPassword( + const AuthPigeonFirebaseApp& app, const std::string& email, + const std::string& password, + std::function reply)> result) + override; + virtual void SignInWithEmailLink( + const AuthPigeonFirebaseApp& app, const std::string& email, + const std::string& email_link, + std::function reply)> result) + override; + virtual void SignInWithProvider( + const AuthPigeonFirebaseApp& app, + const InternalSignInProvider& sign_in_provider, + std::function reply)> result) + override; + virtual void SignOut( + const AuthPigeonFirebaseApp& app, + std::function reply)> result) override; + virtual void FetchSignInMethodsForEmail( + const AuthPigeonFirebaseApp& app, const std::string& email, + std::function reply)> result) + override; + virtual void SendPasswordResetEmail( + const AuthPigeonFirebaseApp& app, const std::string& email, + const InternalActionCodeSettings* action_code_settings, + std::function reply)> result) override; + virtual void SendSignInLinkToEmail( + const AuthPigeonFirebaseApp& app, const std::string& email, + const InternalActionCodeSettings& action_code_settings, + std::function reply)> result) override; + virtual void SetLanguageCode( + const AuthPigeonFirebaseApp& app, const std::string* language_code, + std::function reply)> result) override; + virtual void SetSettings( + const AuthPigeonFirebaseApp& app, + const InternalFirebaseAuthSettings& settings, + std::function reply)> result) override; + virtual void VerifyPasswordResetCode( + const AuthPigeonFirebaseApp& app, const std::string& code, + std::function reply)> result) override; + virtual void VerifyPhoneNumber( + const AuthPigeonFirebaseApp& app, + const InternalVerifyPhoneNumberRequest& request, + std::function reply)> result) override; + + // FirebaseAuthUserHostApi methods. + virtual void Delete( + const AuthPigeonFirebaseApp& app, + std::function reply)> result) override; + virtual void GetIdToken( + const AuthPigeonFirebaseApp& app, bool force_refresh, + std::function reply)> result) + override; + virtual void LinkWithCredential( + const AuthPigeonFirebaseApp& app, const flutter::EncodableMap& input, + std::function reply)> result) + override; + virtual void LinkWithProvider( + const AuthPigeonFirebaseApp& app, + const InternalSignInProvider& sign_in_provider, + std::function reply)> result) + override; + virtual void ReauthenticateWithCredential( + const AuthPigeonFirebaseApp& app, const flutter::EncodableMap& input, + std::function reply)> result) + override; + virtual void ReauthenticateWithProvider( + const AuthPigeonFirebaseApp& app, + const InternalSignInProvider& sign_in_provider, + std::function reply)> result) + override; + virtual void Reload( + const AuthPigeonFirebaseApp& app, + std::function reply)> result) override; + virtual void SendEmailVerification( + const AuthPigeonFirebaseApp& app, + const InternalActionCodeSettings* action_code_settings, + std::function reply)> result) override; + virtual void Unlink(const AuthPigeonFirebaseApp& app, + const std::string& provider_id, + std::function reply)> + result) override; + virtual void UpdateEmail( + const AuthPigeonFirebaseApp& app, const std::string& new_email, + std::function reply)> result) override; + virtual void UpdatePassword( + const AuthPigeonFirebaseApp& app, const std::string& new_password, + std::function reply)> result) override; + virtual void UpdatePhoneNumber( + const AuthPigeonFirebaseApp& app, const flutter::EncodableMap& input, + std::function reply)> result) override; + virtual void UpdateProfile( + const AuthPigeonFirebaseApp& app, const InternalUserProfile& profile, + std::function reply)> result) override; + virtual void VerifyBeforeUpdateEmail( + const AuthPigeonFirebaseApp& app, const std::string& new_email, + const InternalActionCodeSettings* action_code_settings, + std::function reply)> result) override; + + virtual void RevokeTokenWithAuthorizationCode( + const AuthPigeonFirebaseApp& app, const std::string& authorization_code, + std::function reply)> result) override; + + virtual void RevokeAccessToken( + const AuthPigeonFirebaseApp& app, const std::string& access_token, + std::function reply)> result) override; + + virtual void InitializeRecaptchaConfig( + const AuthPigeonFirebaseApp& app, + std::function reply)> result) override; + + // FlutterFirebasePlugin methods. + flutter::EncodableMap GetPluginConstantsForFirebaseApp( + const firebase::App& app) override; + void DidReinitializeFirebaseCore() override; + + private: + static flutter::BinaryMessenger* binaryMessenger; +}; + +} // namespace firebase_auth_windows + +#endif // FLUTTER_PLUGIN_FIREBASE_AUTH_PLUGIN_H_ diff --git a/mih_ui/android/build/ios/SourcePackages/firebase_auth-6.5.4/windows/firebase_auth_plugin_c_api.cpp b/mih_ui/android/build/ios/SourcePackages/firebase_auth-6.5.4/windows/firebase_auth_plugin_c_api.cpp new file mode 100644 index 00000000..03d93038 --- /dev/null +++ b/mih_ui/android/build/ios/SourcePackages/firebase_auth-6.5.4/windows/firebase_auth_plugin_c_api.cpp @@ -0,0 +1,16 @@ +// Copyright 2023, the Chromium project authors. Please see the AUTHORS file +// for details. All rights reserved. Use of this source code is governed by a +// BSD-style license that can be found in the LICENSE file. + +#include "include/firebase_auth/firebase_auth_plugin_c_api.h" + +#include + +#include "firebase_auth_plugin.h" + +void FirebaseAuthPluginCApiRegisterWithRegistrar( + FlutterDesktopPluginRegistrarRef registrar) { + firebase_auth_windows::FirebaseAuthPlugin::RegisterWithRegistrar( + flutter::PluginRegistrarManager::GetInstance() + ->GetRegistrar(registrar)); +} diff --git a/mih_ui/android/build/ios/SourcePackages/firebase_auth-6.5.4/windows/include/firebase_auth/firebase_auth_plugin_c_api.h b/mih_ui/android/build/ios/SourcePackages/firebase_auth-6.5.4/windows/include/firebase_auth/firebase_auth_plugin_c_api.h new file mode 100644 index 00000000..1c73a633 --- /dev/null +++ b/mih_ui/android/build/ios/SourcePackages/firebase_auth-6.5.4/windows/include/firebase_auth/firebase_auth_plugin_c_api.h @@ -0,0 +1,29 @@ +/* + * Copyright 2023, the Chromium project authors. Please see the AUTHORS file + * for details. All rights reserved. Use of this source code is governed by a + * BSD-style license that can be found in the LICENSE file. + */ + +#ifndef FLUTTER_PLUGIN_FIREBASE_AUTH_PLUGIN_C_API_H_ +#define FLUTTER_PLUGIN_FIREBASE_AUTH_PLUGIN_C_API_H_ + +#include + +#ifdef FLUTTER_PLUGIN_IMPL +#define FLUTTER_PLUGIN_EXPORT __declspec(dllexport) +#else +#define FLUTTER_PLUGIN_EXPORT __declspec(dllimport) +#endif + +#if defined(__cplusplus) +extern "C" { +#endif + +FLUTTER_PLUGIN_EXPORT void FirebaseAuthPluginCApiRegisterWithRegistrar( + FlutterDesktopPluginRegistrarRef registrar); + +#if defined(__cplusplus) +} // extern "C" +#endif + +#endif // FLUTTER_PLUGIN_FIREBASE_AUTH_PLUGIN_C_API_H_ diff --git a/mih_ui/android/build/ios/SourcePackages/firebase_auth-6.5.4/windows/messages.g.cpp b/mih_ui/android/build/ios/SourcePackages/firebase_auth-6.5.4/windows/messages.g.cpp new file mode 100644 index 00000000..ea2200e6 --- /dev/null +++ b/mih_ui/android/build/ios/SourcePackages/firebase_auth-6.5.4/windows/messages.g.cpp @@ -0,0 +1,5562 @@ +// Copyright 2023, the Chromium project authors. Please see the AUTHORS file +// for details. All rights reserved. Use of this source code is governed by a +// BSD-style license that can be found in the LICENSE file. +// Autogenerated from Pigeon (v26.3.4), do not edit directly. +// See also: https://pub.dev/packages/pigeon + +#undef _HAS_EXCEPTIONS + +#include "messages.g.h" + +#include +#include +#include +#include + +#include +#include +#include +#include +#include + +namespace firebase_auth_windows { +using ::flutter::BasicMessageChannel; +using ::flutter::CustomEncodableValue; +using ::flutter::EncodableList; +using ::flutter::EncodableMap; +using ::flutter::EncodableValue; + +FlutterError CreateConnectionError(const std::string channel_name) { + return FlutterError( + "channel-error", + "Unable to establish connection on channel: '" + channel_name + "'.", + EncodableValue("")); +} + +namespace { +template +bool PigeonInternalDeepEquals(const T& a, const T& b); + +bool PigeonInternalDeepEquals(const double& a, const double& b); + +template +bool PigeonInternalDeepEquals(const std::vector& a, const std::vector& b); + +template +bool PigeonInternalDeepEquals(const std::map& a, const std::map& b); + +template +bool PigeonInternalDeepEquals(const std::optional& a, + const std::optional& b); + +template +bool PigeonInternalDeepEquals(const std::unique_ptr& a, + const std::unique_ptr& b); + +bool PigeonInternalDeepEquals(const ::flutter::EncodableValue& a, + const ::flutter::EncodableValue& b); + +template +bool PigeonInternalDeepEquals(const T& a, const T& b) { + return a == b; +} + +template +bool PigeonInternalDeepEquals(const std::vector& a, + const std::vector& b) { + if (a.size() != b.size()) { + return false; + } + for (size_t i = 0; i < a.size(); ++i) { + if (!PigeonInternalDeepEquals(a[i], b[i])) { + return false; + } + } + return true; +} + +template +bool PigeonInternalDeepEquals(const std::map& a, + const std::map& b) { + if (a.size() != b.size()) { + return false; + } + for (const auto& kv : a) { + bool found = false; + for (const auto& b_kv : b) { + if (PigeonInternalDeepEquals(kv.first, b_kv.first)) { + if (PigeonInternalDeepEquals(kv.second, b_kv.second)) { + found = true; + break; + } else { + return false; + } + } + } + if (!found) { + return false; + } + } + return true; +} + +bool PigeonInternalDeepEquals(const double& a, const double& b) { + // Normalize -0.0 to 0.0 and handle NaN equality. + return (a == b) || (std::isnan(a) && std::isnan(b)); +} + +template +bool PigeonInternalDeepEquals(const std::optional& a, + const std::optional& b) { + if (!a && !b) { + return true; + } + if (!a || !b) { + return false; + } + return PigeonInternalDeepEquals(*a, *b); +} + +template +bool PigeonInternalDeepEquals(const std::unique_ptr& a, + const std::unique_ptr& b) { + if (a.get() == b.get()) { + return true; + } + if (!a || !b) { + return false; + } + return PigeonInternalDeepEquals(*a, *b); +} + +bool PigeonInternalDeepEquals(const ::flutter::EncodableValue& a, + const ::flutter::EncodableValue& b) { + if (a.index() != b.index()) { + return false; + } + if (const double* da = std::get_if(&a)) { + return PigeonInternalDeepEquals(*da, std::get(b)); + } else if (const ::flutter::EncodableList* la = + std::get_if<::flutter::EncodableList>(&a)) { + return PigeonInternalDeepEquals(*la, std::get<::flutter::EncodableList>(b)); + } else if (const ::flutter::EncodableMap* ma = + std::get_if<::flutter::EncodableMap>(&a)) { + return PigeonInternalDeepEquals(*ma, std::get<::flutter::EncodableMap>(b)); + } + return a == b; +} + +template +size_t PigeonInternalDeepHash(const T& v); + +size_t PigeonInternalDeepHash(const double& v); + +template +size_t PigeonInternalDeepHash(const std::vector& v); + +template +size_t PigeonInternalDeepHash(const std::map& v); + +template +size_t PigeonInternalDeepHash(const std::optional& v); + +template +size_t PigeonInternalDeepHash(const std::unique_ptr& v); + +size_t PigeonInternalDeepHash(const ::flutter::EncodableValue& v); + +template +size_t PigeonInternalDeepHash(const T& v) { + return std::hash()(v); +} + +template +size_t PigeonInternalDeepHash(const std::vector& v) { + size_t result = 1; + for (const auto& item : v) { + result = result * 31 + PigeonInternalDeepHash(item); + } + return result; +} + +template +size_t PigeonInternalDeepHash(const std::map& v) { + size_t result = 0; + for (const auto& kv : v) { + result += ((PigeonInternalDeepHash(kv.first) * 31) ^ + PigeonInternalDeepHash(kv.second)); + } + return result; +} + +size_t PigeonInternalDeepHash(const double& v) { + if (std::isnan(v)) { + // Normalize NaN to a consistent hash. + return std::hash()(std::numeric_limits::quiet_NaN()); + } + if (v == 0.0) { + // Normalize -0.0 to 0.0 so they have the same hash code. + return std::hash()(0.0); + } + return std::hash()(v); +} + +template +size_t PigeonInternalDeepHash(const std::optional& v) { + return v ? PigeonInternalDeepHash(*v) : 0; +} + +template +size_t PigeonInternalDeepHash(const std::unique_ptr& v) { + return v ? PigeonInternalDeepHash(*v) : 0; +} + +size_t PigeonInternalDeepHash(const ::flutter::EncodableValue& v) { + size_t result = v.index(); + if (const double* dv = std::get_if(&v)) { + result = result * 31 + PigeonInternalDeepHash(*dv); + } else if (const ::flutter::EncodableList* lv = + std::get_if<::flutter::EncodableList>(&v)) { + result = result * 31 + PigeonInternalDeepHash(*lv); + } else if (const ::flutter::EncodableMap* mv = + std::get_if<::flutter::EncodableMap>(&v)) { + result = result * 31 + PigeonInternalDeepHash(*mv); + } else { + std::visit( + [&result](const auto& val) { + using T = std::decay_t; + if constexpr (!std::is_same_v && + !std::is_same_v && + !std::is_same_v && + !std::is_same_v && + !std::is_same_v) { + result = result * 31 + PigeonInternalDeepHash(val); + } + }, + v); + } + return result; +} + +} // namespace +// InternalMultiFactorSession + +InternalMultiFactorSession::InternalMultiFactorSession(const std::string& id) + : id_(id) {} + +const std::string& InternalMultiFactorSession::id() const { return id_; } + +void InternalMultiFactorSession::set_id(std::string_view value_arg) { + id_ = value_arg; +} + +EncodableList InternalMultiFactorSession::ToEncodableList() const { + EncodableList list; + list.reserve(1); + list.push_back(EncodableValue(id_)); + return list; +} + +InternalMultiFactorSession InternalMultiFactorSession::FromEncodableList( + const EncodableList& list) { + InternalMultiFactorSession decoded(std::get(list[0])); + return decoded; +} + +bool InternalMultiFactorSession::operator==( + const InternalMultiFactorSession& other) const { + return PigeonInternalDeepEquals(id_, other.id_); +} + +bool InternalMultiFactorSession::operator!=( + const InternalMultiFactorSession& other) const { + return !(*this == other); +} + +size_t InternalMultiFactorSession::Hash() const { + size_t result = 1; + result = result * 31 + PigeonInternalDeepHash(id_); + return result; +} + +size_t PigeonInternalDeepHash(const InternalMultiFactorSession& v) { + return v.Hash(); +} + +// InternalPhoneMultiFactorAssertion + +InternalPhoneMultiFactorAssertion::InternalPhoneMultiFactorAssertion( + const std::string& verification_id, const std::string& verification_code) + : verification_id_(verification_id), + verification_code_(verification_code) {} + +const std::string& InternalPhoneMultiFactorAssertion::verification_id() const { + return verification_id_; +} + +void InternalPhoneMultiFactorAssertion::set_verification_id( + std::string_view value_arg) { + verification_id_ = value_arg; +} + +const std::string& InternalPhoneMultiFactorAssertion::verification_code() + const { + return verification_code_; +} + +void InternalPhoneMultiFactorAssertion::set_verification_code( + std::string_view value_arg) { + verification_code_ = value_arg; +} + +EncodableList InternalPhoneMultiFactorAssertion::ToEncodableList() const { + EncodableList list; + list.reserve(2); + list.push_back(EncodableValue(verification_id_)); + list.push_back(EncodableValue(verification_code_)); + return list; +} + +InternalPhoneMultiFactorAssertion +InternalPhoneMultiFactorAssertion::FromEncodableList( + const EncodableList& list) { + InternalPhoneMultiFactorAssertion decoded(std::get(list[0]), + std::get(list[1])); + return decoded; +} + +bool InternalPhoneMultiFactorAssertion::operator==( + const InternalPhoneMultiFactorAssertion& other) const { + return PigeonInternalDeepEquals(verification_id_, other.verification_id_) && + PigeonInternalDeepEquals(verification_code_, other.verification_code_); +} + +bool InternalPhoneMultiFactorAssertion::operator!=( + const InternalPhoneMultiFactorAssertion& other) const { + return !(*this == other); +} + +size_t InternalPhoneMultiFactorAssertion::Hash() const { + size_t result = 1; + result = result * 31 + PigeonInternalDeepHash(verification_id_); + result = result * 31 + PigeonInternalDeepHash(verification_code_); + return result; +} + +size_t PigeonInternalDeepHash(const InternalPhoneMultiFactorAssertion& v) { + return v.Hash(); +} + +// InternalMultiFactorInfo + +InternalMultiFactorInfo::InternalMultiFactorInfo(double enrollment_timestamp, + const std::string& uid) + : enrollment_timestamp_(enrollment_timestamp), uid_(uid) {} + +InternalMultiFactorInfo::InternalMultiFactorInfo( + const std::string* display_name, double enrollment_timestamp, + const std::string* factor_id, const std::string& uid, + const std::string* phone_number) + : display_name_(display_name ? std::optional(*display_name) + : std::nullopt), + enrollment_timestamp_(enrollment_timestamp), + factor_id_(factor_id ? std::optional(*factor_id) + : std::nullopt), + uid_(uid), + phone_number_(phone_number ? std::optional(*phone_number) + : std::nullopt) {} + +const std::string* InternalMultiFactorInfo::display_name() const { + return display_name_ ? &(*display_name_) : nullptr; +} + +void InternalMultiFactorInfo::set_display_name( + const std::string_view* value_arg) { + display_name_ = + value_arg ? std::optional(*value_arg) : std::nullopt; +} + +void InternalMultiFactorInfo::set_display_name(std::string_view value_arg) { + display_name_ = value_arg; +} + +double InternalMultiFactorInfo::enrollment_timestamp() const { + return enrollment_timestamp_; +} + +void InternalMultiFactorInfo::set_enrollment_timestamp(double value_arg) { + enrollment_timestamp_ = value_arg; +} + +const std::string* InternalMultiFactorInfo::factor_id() const { + return factor_id_ ? &(*factor_id_) : nullptr; +} + +void InternalMultiFactorInfo::set_factor_id(const std::string_view* value_arg) { + factor_id_ = + value_arg ? std::optional(*value_arg) : std::nullopt; +} + +void InternalMultiFactorInfo::set_factor_id(std::string_view value_arg) { + factor_id_ = value_arg; +} + +const std::string& InternalMultiFactorInfo::uid() const { return uid_; } + +void InternalMultiFactorInfo::set_uid(std::string_view value_arg) { + uid_ = value_arg; +} + +const std::string* InternalMultiFactorInfo::phone_number() const { + return phone_number_ ? &(*phone_number_) : nullptr; +} + +void InternalMultiFactorInfo::set_phone_number( + const std::string_view* value_arg) { + phone_number_ = + value_arg ? std::optional(*value_arg) : std::nullopt; +} + +void InternalMultiFactorInfo::set_phone_number(std::string_view value_arg) { + phone_number_ = value_arg; +} + +EncodableList InternalMultiFactorInfo::ToEncodableList() const { + EncodableList list; + list.reserve(5); + list.push_back(display_name_ ? EncodableValue(*display_name_) + : EncodableValue()); + list.push_back(EncodableValue(enrollment_timestamp_)); + list.push_back(factor_id_ ? EncodableValue(*factor_id_) : EncodableValue()); + list.push_back(EncodableValue(uid_)); + list.push_back(phone_number_ ? EncodableValue(*phone_number_) + : EncodableValue()); + return list; +} + +InternalMultiFactorInfo InternalMultiFactorInfo::FromEncodableList( + const EncodableList& list) { + InternalMultiFactorInfo decoded(std::get(list[1]), + std::get(list[3])); + auto& encodable_display_name = list[0]; + if (!encodable_display_name.IsNull()) { + decoded.set_display_name(std::get(encodable_display_name)); + } + auto& encodable_factor_id = list[2]; + if (!encodable_factor_id.IsNull()) { + decoded.set_factor_id(std::get(encodable_factor_id)); + } + auto& encodable_phone_number = list[4]; + if (!encodable_phone_number.IsNull()) { + decoded.set_phone_number(std::get(encodable_phone_number)); + } + return decoded; +} + +bool InternalMultiFactorInfo::operator==( + const InternalMultiFactorInfo& other) const { + return PigeonInternalDeepEquals(display_name_, other.display_name_) && + PigeonInternalDeepEquals(enrollment_timestamp_, + other.enrollment_timestamp_) && + PigeonInternalDeepEquals(factor_id_, other.factor_id_) && + PigeonInternalDeepEquals(uid_, other.uid_) && + PigeonInternalDeepEquals(phone_number_, other.phone_number_); +} + +bool InternalMultiFactorInfo::operator!=( + const InternalMultiFactorInfo& other) const { + return !(*this == other); +} + +size_t InternalMultiFactorInfo::Hash() const { + size_t result = 1; + result = result * 31 + PigeonInternalDeepHash(display_name_); + result = result * 31 + PigeonInternalDeepHash(enrollment_timestamp_); + result = result * 31 + PigeonInternalDeepHash(factor_id_); + result = result * 31 + PigeonInternalDeepHash(uid_); + result = result * 31 + PigeonInternalDeepHash(phone_number_); + return result; +} + +size_t PigeonInternalDeepHash(const InternalMultiFactorInfo& v) { + return v.Hash(); +} + +// AuthPigeonFirebaseApp + +AuthPigeonFirebaseApp::AuthPigeonFirebaseApp(const std::string& app_name) + : app_name_(app_name) {} + +AuthPigeonFirebaseApp::AuthPigeonFirebaseApp( + const std::string& app_name, const std::string* tenant_id, + const std::string* custom_auth_domain) + : app_name_(app_name), + tenant_id_(tenant_id ? std::optional(*tenant_id) + : std::nullopt), + custom_auth_domain_(custom_auth_domain + ? std::optional(*custom_auth_domain) + : std::nullopt) {} + +const std::string& AuthPigeonFirebaseApp::app_name() const { return app_name_; } + +void AuthPigeonFirebaseApp::set_app_name(std::string_view value_arg) { + app_name_ = value_arg; +} + +const std::string* AuthPigeonFirebaseApp::tenant_id() const { + return tenant_id_ ? &(*tenant_id_) : nullptr; +} + +void AuthPigeonFirebaseApp::set_tenant_id(const std::string_view* value_arg) { + tenant_id_ = + value_arg ? std::optional(*value_arg) : std::nullopt; +} + +void AuthPigeonFirebaseApp::set_tenant_id(std::string_view value_arg) { + tenant_id_ = value_arg; +} + +const std::string* AuthPigeonFirebaseApp::custom_auth_domain() const { + return custom_auth_domain_ ? &(*custom_auth_domain_) : nullptr; +} + +void AuthPigeonFirebaseApp::set_custom_auth_domain( + const std::string_view* value_arg) { + custom_auth_domain_ = + value_arg ? std::optional(*value_arg) : std::nullopt; +} + +void AuthPigeonFirebaseApp::set_custom_auth_domain(std::string_view value_arg) { + custom_auth_domain_ = value_arg; +} + +EncodableList AuthPigeonFirebaseApp::ToEncodableList() const { + EncodableList list; + list.reserve(3); + list.push_back(EncodableValue(app_name_)); + list.push_back(tenant_id_ ? EncodableValue(*tenant_id_) : EncodableValue()); + list.push_back(custom_auth_domain_ ? EncodableValue(*custom_auth_domain_) + : EncodableValue()); + return list; +} + +AuthPigeonFirebaseApp AuthPigeonFirebaseApp::FromEncodableList( + const EncodableList& list) { + AuthPigeonFirebaseApp decoded(std::get(list[0])); + auto& encodable_tenant_id = list[1]; + if (!encodable_tenant_id.IsNull()) { + decoded.set_tenant_id(std::get(encodable_tenant_id)); + } + auto& encodable_custom_auth_domain = list[2]; + if (!encodable_custom_auth_domain.IsNull()) { + decoded.set_custom_auth_domain( + std::get(encodable_custom_auth_domain)); + } + return decoded; +} + +bool AuthPigeonFirebaseApp::operator==( + const AuthPigeonFirebaseApp& other) const { + return PigeonInternalDeepEquals(app_name_, other.app_name_) && + PigeonInternalDeepEquals(tenant_id_, other.tenant_id_) && + PigeonInternalDeepEquals(custom_auth_domain_, + other.custom_auth_domain_); +} + +bool AuthPigeonFirebaseApp::operator!=( + const AuthPigeonFirebaseApp& other) const { + return !(*this == other); +} + +size_t AuthPigeonFirebaseApp::Hash() const { + size_t result = 1; + result = result * 31 + PigeonInternalDeepHash(app_name_); + result = result * 31 + PigeonInternalDeepHash(tenant_id_); + result = result * 31 + PigeonInternalDeepHash(custom_auth_domain_); + return result; +} + +size_t PigeonInternalDeepHash(const AuthPigeonFirebaseApp& v) { + return v.Hash(); +} + +// InternalActionCodeInfoData + +InternalActionCodeInfoData::InternalActionCodeInfoData() {} + +InternalActionCodeInfoData::InternalActionCodeInfoData( + const std::string* email, const std::string* previous_email) + : email_(email ? std::optional(*email) : std::nullopt), + previous_email_(previous_email + ? std::optional(*previous_email) + : std::nullopt) {} + +const std::string* InternalActionCodeInfoData::email() const { + return email_ ? &(*email_) : nullptr; +} + +void InternalActionCodeInfoData::set_email(const std::string_view* value_arg) { + email_ = value_arg ? std::optional(*value_arg) : std::nullopt; +} + +void InternalActionCodeInfoData::set_email(std::string_view value_arg) { + email_ = value_arg; +} + +const std::string* InternalActionCodeInfoData::previous_email() const { + return previous_email_ ? &(*previous_email_) : nullptr; +} + +void InternalActionCodeInfoData::set_previous_email( + const std::string_view* value_arg) { + previous_email_ = + value_arg ? std::optional(*value_arg) : std::nullopt; +} + +void InternalActionCodeInfoData::set_previous_email( + std::string_view value_arg) { + previous_email_ = value_arg; +} + +EncodableList InternalActionCodeInfoData::ToEncodableList() const { + EncodableList list; + list.reserve(2); + list.push_back(email_ ? EncodableValue(*email_) : EncodableValue()); + list.push_back(previous_email_ ? EncodableValue(*previous_email_) + : EncodableValue()); + return list; +} + +InternalActionCodeInfoData InternalActionCodeInfoData::FromEncodableList( + const EncodableList& list) { + InternalActionCodeInfoData decoded; + auto& encodable_email = list[0]; + if (!encodable_email.IsNull()) { + decoded.set_email(std::get(encodable_email)); + } + auto& encodable_previous_email = list[1]; + if (!encodable_previous_email.IsNull()) { + decoded.set_previous_email(std::get(encodable_previous_email)); + } + return decoded; +} + +bool InternalActionCodeInfoData::operator==( + const InternalActionCodeInfoData& other) const { + return PigeonInternalDeepEquals(email_, other.email_) && + PigeonInternalDeepEquals(previous_email_, other.previous_email_); +} + +bool InternalActionCodeInfoData::operator!=( + const InternalActionCodeInfoData& other) const { + return !(*this == other); +} + +size_t InternalActionCodeInfoData::Hash() const { + size_t result = 1; + result = result * 31 + PigeonInternalDeepHash(email_); + result = result * 31 + PigeonInternalDeepHash(previous_email_); + return result; +} + +size_t PigeonInternalDeepHash(const InternalActionCodeInfoData& v) { + return v.Hash(); +} + +// InternalActionCodeInfo + +InternalActionCodeInfo::InternalActionCodeInfo( + const ActionCodeInfoOperation& operation, + const InternalActionCodeInfoData& data) + : operation_(operation), + data_(std::make_unique(data)) {} + +InternalActionCodeInfo::InternalActionCodeInfo( + const InternalActionCodeInfo& other) + : operation_(other.operation_), + data_(std::make_unique(*other.data_)) {} + +InternalActionCodeInfo& InternalActionCodeInfo::operator=( + const InternalActionCodeInfo& other) { + operation_ = other.operation_; + data_ = std::make_unique(*other.data_); + return *this; +} + +const ActionCodeInfoOperation& InternalActionCodeInfo::operation() const { + return operation_; +} + +void InternalActionCodeInfo::set_operation( + const ActionCodeInfoOperation& value_arg) { + operation_ = value_arg; +} + +const InternalActionCodeInfoData& InternalActionCodeInfo::data() const { + return *data_; +} + +void InternalActionCodeInfo::set_data( + const InternalActionCodeInfoData& value_arg) { + data_ = std::make_unique(value_arg); +} + +EncodableList InternalActionCodeInfo::ToEncodableList() const { + EncodableList list; + list.reserve(2); + list.push_back(CustomEncodableValue(operation_)); + list.push_back(CustomEncodableValue(*data_)); + return list; +} + +InternalActionCodeInfo InternalActionCodeInfo::FromEncodableList( + const EncodableList& list) { + InternalActionCodeInfo decoded( + std::any_cast( + std::get(list[0])), + std::any_cast( + std::get(list[1]))); + return decoded; +} + +bool InternalActionCodeInfo::operator==( + const InternalActionCodeInfo& other) const { + return PigeonInternalDeepEquals(operation_, other.operation_) && + PigeonInternalDeepEquals(data_, other.data_); +} + +bool InternalActionCodeInfo::operator!=( + const InternalActionCodeInfo& other) const { + return !(*this == other); +} + +size_t InternalActionCodeInfo::Hash() const { + size_t result = 1; + result = result * 31 + PigeonInternalDeepHash(operation_); + result = result * 31 + PigeonInternalDeepHash(data_); + return result; +} + +size_t PigeonInternalDeepHash(const InternalActionCodeInfo& v) { + return v.Hash(); +} + +// InternalAdditionalUserInfo + +InternalAdditionalUserInfo::InternalAdditionalUserInfo(bool is_new_user) + : is_new_user_(is_new_user) {} + +InternalAdditionalUserInfo::InternalAdditionalUserInfo( + bool is_new_user, const std::string* provider_id, + const std::string* username, const std::string* authorization_code, + const EncodableMap* profile) + : is_new_user_(is_new_user), + provider_id_(provider_id ? std::optional(*provider_id) + : std::nullopt), + username_(username ? std::optional(*username) + : std::nullopt), + authorization_code_(authorization_code + ? std::optional(*authorization_code) + : std::nullopt), + profile_(profile ? std::optional(*profile) : std::nullopt) { +} + +bool InternalAdditionalUserInfo::is_new_user() const { return is_new_user_; } + +void InternalAdditionalUserInfo::set_is_new_user(bool value_arg) { + is_new_user_ = value_arg; +} + +const std::string* InternalAdditionalUserInfo::provider_id() const { + return provider_id_ ? &(*provider_id_) : nullptr; +} + +void InternalAdditionalUserInfo::set_provider_id( + const std::string_view* value_arg) { + provider_id_ = + value_arg ? std::optional(*value_arg) : std::nullopt; +} + +void InternalAdditionalUserInfo::set_provider_id(std::string_view value_arg) { + provider_id_ = value_arg; +} + +const std::string* InternalAdditionalUserInfo::username() const { + return username_ ? &(*username_) : nullptr; +} + +void InternalAdditionalUserInfo::set_username( + const std::string_view* value_arg) { + username_ = value_arg ? std::optional(*value_arg) : std::nullopt; +} + +void InternalAdditionalUserInfo::set_username(std::string_view value_arg) { + username_ = value_arg; +} + +const std::string* InternalAdditionalUserInfo::authorization_code() const { + return authorization_code_ ? &(*authorization_code_) : nullptr; +} + +void InternalAdditionalUserInfo::set_authorization_code( + const std::string_view* value_arg) { + authorization_code_ = + value_arg ? std::optional(*value_arg) : std::nullopt; +} + +void InternalAdditionalUserInfo::set_authorization_code( + std::string_view value_arg) { + authorization_code_ = value_arg; +} + +const EncodableMap* InternalAdditionalUserInfo::profile() const { + return profile_ ? &(*profile_) : nullptr; +} + +void InternalAdditionalUserInfo::set_profile(const EncodableMap* value_arg) { + profile_ = value_arg ? std::optional(*value_arg) : std::nullopt; +} + +void InternalAdditionalUserInfo::set_profile(const EncodableMap& value_arg) { + profile_ = value_arg; +} + +EncodableList InternalAdditionalUserInfo::ToEncodableList() const { + EncodableList list; + list.reserve(5); + list.push_back(EncodableValue(is_new_user_)); + list.push_back(provider_id_ ? EncodableValue(*provider_id_) + : EncodableValue()); + list.push_back(username_ ? EncodableValue(*username_) : EncodableValue()); + list.push_back(authorization_code_ ? EncodableValue(*authorization_code_) + : EncodableValue()); + list.push_back(profile_ ? EncodableValue(*profile_) : EncodableValue()); + return list; +} + +InternalAdditionalUserInfo InternalAdditionalUserInfo::FromEncodableList( + const EncodableList& list) { + InternalAdditionalUserInfo decoded(std::get(list[0])); + auto& encodable_provider_id = list[1]; + if (!encodable_provider_id.IsNull()) { + decoded.set_provider_id(std::get(encodable_provider_id)); + } + auto& encodable_username = list[2]; + if (!encodable_username.IsNull()) { + decoded.set_username(std::get(encodable_username)); + } + auto& encodable_authorization_code = list[3]; + if (!encodable_authorization_code.IsNull()) { + decoded.set_authorization_code( + std::get(encodable_authorization_code)); + } + auto& encodable_profile = list[4]; + if (!encodable_profile.IsNull()) { + decoded.set_profile(std::get(encodable_profile)); + } + return decoded; +} + +bool InternalAdditionalUserInfo::operator==( + const InternalAdditionalUserInfo& other) const { + return PigeonInternalDeepEquals(is_new_user_, other.is_new_user_) && + PigeonInternalDeepEquals(provider_id_, other.provider_id_) && + PigeonInternalDeepEquals(username_, other.username_) && + PigeonInternalDeepEquals(authorization_code_, + other.authorization_code_) && + PigeonInternalDeepEquals(profile_, other.profile_); +} + +bool InternalAdditionalUserInfo::operator!=( + const InternalAdditionalUserInfo& other) const { + return !(*this == other); +} + +size_t InternalAdditionalUserInfo::Hash() const { + size_t result = 1; + result = result * 31 + PigeonInternalDeepHash(is_new_user_); + result = result * 31 + PigeonInternalDeepHash(provider_id_); + result = result * 31 + PigeonInternalDeepHash(username_); + result = result * 31 + PigeonInternalDeepHash(authorization_code_); + result = result * 31 + PigeonInternalDeepHash(profile_); + return result; +} + +size_t PigeonInternalDeepHash(const InternalAdditionalUserInfo& v) { + return v.Hash(); +} + +// InternalAuthCredential + +InternalAuthCredential::InternalAuthCredential( + const std::string& provider_id, const std::string& sign_in_method, + int64_t native_id) + : provider_id_(provider_id), + sign_in_method_(sign_in_method), + native_id_(native_id) {} + +InternalAuthCredential::InternalAuthCredential( + const std::string& provider_id, const std::string& sign_in_method, + int64_t native_id, const std::string* access_token) + : provider_id_(provider_id), + sign_in_method_(sign_in_method), + native_id_(native_id), + access_token_(access_token ? std::optional(*access_token) + : std::nullopt) {} + +const std::string& InternalAuthCredential::provider_id() const { + return provider_id_; +} + +void InternalAuthCredential::set_provider_id(std::string_view value_arg) { + provider_id_ = value_arg; +} + +const std::string& InternalAuthCredential::sign_in_method() const { + return sign_in_method_; +} + +void InternalAuthCredential::set_sign_in_method(std::string_view value_arg) { + sign_in_method_ = value_arg; +} + +int64_t InternalAuthCredential::native_id() const { return native_id_; } + +void InternalAuthCredential::set_native_id(int64_t value_arg) { + native_id_ = value_arg; +} + +const std::string* InternalAuthCredential::access_token() const { + return access_token_ ? &(*access_token_) : nullptr; +} + +void InternalAuthCredential::set_access_token( + const std::string_view* value_arg) { + access_token_ = + value_arg ? std::optional(*value_arg) : std::nullopt; +} + +void InternalAuthCredential::set_access_token(std::string_view value_arg) { + access_token_ = value_arg; +} + +EncodableList InternalAuthCredential::ToEncodableList() const { + EncodableList list; + list.reserve(4); + list.push_back(EncodableValue(provider_id_)); + list.push_back(EncodableValue(sign_in_method_)); + list.push_back(EncodableValue(native_id_)); + list.push_back(access_token_ ? EncodableValue(*access_token_) + : EncodableValue()); + return list; +} + +InternalAuthCredential InternalAuthCredential::FromEncodableList( + const EncodableList& list) { + InternalAuthCredential decoded(std::get(list[0]), + std::get(list[1]), + std::get(list[2])); + auto& encodable_access_token = list[3]; + if (!encodable_access_token.IsNull()) { + decoded.set_access_token(std::get(encodable_access_token)); + } + return decoded; +} + +bool InternalAuthCredential::operator==( + const InternalAuthCredential& other) const { + return PigeonInternalDeepEquals(provider_id_, other.provider_id_) && + PigeonInternalDeepEquals(sign_in_method_, other.sign_in_method_) && + PigeonInternalDeepEquals(native_id_, other.native_id_) && + PigeonInternalDeepEquals(access_token_, other.access_token_); +} + +bool InternalAuthCredential::operator!=( + const InternalAuthCredential& other) const { + return !(*this == other); +} + +size_t InternalAuthCredential::Hash() const { + size_t result = 1; + result = result * 31 + PigeonInternalDeepHash(provider_id_); + result = result * 31 + PigeonInternalDeepHash(sign_in_method_); + result = result * 31 + PigeonInternalDeepHash(native_id_); + result = result * 31 + PigeonInternalDeepHash(access_token_); + return result; +} + +size_t PigeonInternalDeepHash(const InternalAuthCredential& v) { + return v.Hash(); +} + +// InternalUserInfo + +InternalUserInfo::InternalUserInfo(const std::string& uid, bool is_anonymous, + bool is_email_verified) + : uid_(uid), + is_anonymous_(is_anonymous), + is_email_verified_(is_email_verified) {} + +InternalUserInfo::InternalUserInfo( + const std::string& uid, const std::string* email, + const std::string* display_name, const std::string* photo_url, + const std::string* phone_number, bool is_anonymous, bool is_email_verified, + const std::string* provider_id, const std::string* tenant_id, + const std::string* refresh_token, const int64_t* creation_timestamp, + const int64_t* last_sign_in_timestamp) + : uid_(uid), + email_(email ? std::optional(*email) : std::nullopt), + display_name_(display_name ? std::optional(*display_name) + : std::nullopt), + photo_url_(photo_url ? std::optional(*photo_url) + : std::nullopt), + phone_number_(phone_number ? std::optional(*phone_number) + : std::nullopt), + is_anonymous_(is_anonymous), + is_email_verified_(is_email_verified), + provider_id_(provider_id ? std::optional(*provider_id) + : std::nullopt), + tenant_id_(tenant_id ? std::optional(*tenant_id) + : std::nullopt), + refresh_token_(refresh_token ? std::optional(*refresh_token) + : std::nullopt), + creation_timestamp_(creation_timestamp + ? std::optional(*creation_timestamp) + : std::nullopt), + last_sign_in_timestamp_( + last_sign_in_timestamp + ? std::optional(*last_sign_in_timestamp) + : std::nullopt) {} + +const std::string& InternalUserInfo::uid() const { return uid_; } + +void InternalUserInfo::set_uid(std::string_view value_arg) { uid_ = value_arg; } + +const std::string* InternalUserInfo::email() const { + return email_ ? &(*email_) : nullptr; +} + +void InternalUserInfo::set_email(const std::string_view* value_arg) { + email_ = value_arg ? std::optional(*value_arg) : std::nullopt; +} + +void InternalUserInfo::set_email(std::string_view value_arg) { + email_ = value_arg; +} + +const std::string* InternalUserInfo::display_name() const { + return display_name_ ? &(*display_name_) : nullptr; +} + +void InternalUserInfo::set_display_name(const std::string_view* value_arg) { + display_name_ = + value_arg ? std::optional(*value_arg) : std::nullopt; +} + +void InternalUserInfo::set_display_name(std::string_view value_arg) { + display_name_ = value_arg; +} + +const std::string* InternalUserInfo::photo_url() const { + return photo_url_ ? &(*photo_url_) : nullptr; +} + +void InternalUserInfo::set_photo_url(const std::string_view* value_arg) { + photo_url_ = + value_arg ? std::optional(*value_arg) : std::nullopt; +} + +void InternalUserInfo::set_photo_url(std::string_view value_arg) { + photo_url_ = value_arg; +} + +const std::string* InternalUserInfo::phone_number() const { + return phone_number_ ? &(*phone_number_) : nullptr; +} + +void InternalUserInfo::set_phone_number(const std::string_view* value_arg) { + phone_number_ = + value_arg ? std::optional(*value_arg) : std::nullopt; +} + +void InternalUserInfo::set_phone_number(std::string_view value_arg) { + phone_number_ = value_arg; +} + +bool InternalUserInfo::is_anonymous() const { return is_anonymous_; } + +void InternalUserInfo::set_is_anonymous(bool value_arg) { + is_anonymous_ = value_arg; +} + +bool InternalUserInfo::is_email_verified() const { return is_email_verified_; } + +void InternalUserInfo::set_is_email_verified(bool value_arg) { + is_email_verified_ = value_arg; +} + +const std::string* InternalUserInfo::provider_id() const { + return provider_id_ ? &(*provider_id_) : nullptr; +} + +void InternalUserInfo::set_provider_id(const std::string_view* value_arg) { + provider_id_ = + value_arg ? std::optional(*value_arg) : std::nullopt; +} + +void InternalUserInfo::set_provider_id(std::string_view value_arg) { + provider_id_ = value_arg; +} + +const std::string* InternalUserInfo::tenant_id() const { + return tenant_id_ ? &(*tenant_id_) : nullptr; +} + +void InternalUserInfo::set_tenant_id(const std::string_view* value_arg) { + tenant_id_ = + value_arg ? std::optional(*value_arg) : std::nullopt; +} + +void InternalUserInfo::set_tenant_id(std::string_view value_arg) { + tenant_id_ = value_arg; +} + +const std::string* InternalUserInfo::refresh_token() const { + return refresh_token_ ? &(*refresh_token_) : nullptr; +} + +void InternalUserInfo::set_refresh_token(const std::string_view* value_arg) { + refresh_token_ = + value_arg ? std::optional(*value_arg) : std::nullopt; +} + +void InternalUserInfo::set_refresh_token(std::string_view value_arg) { + refresh_token_ = value_arg; +} + +const int64_t* InternalUserInfo::creation_timestamp() const { + return creation_timestamp_ ? &(*creation_timestamp_) : nullptr; +} + +void InternalUserInfo::set_creation_timestamp(const int64_t* value_arg) { + creation_timestamp_ = + value_arg ? std::optional(*value_arg) : std::nullopt; +} + +void InternalUserInfo::set_creation_timestamp(int64_t value_arg) { + creation_timestamp_ = value_arg; +} + +const int64_t* InternalUserInfo::last_sign_in_timestamp() const { + return last_sign_in_timestamp_ ? &(*last_sign_in_timestamp_) : nullptr; +} + +void InternalUserInfo::set_last_sign_in_timestamp(const int64_t* value_arg) { + last_sign_in_timestamp_ = + value_arg ? std::optional(*value_arg) : std::nullopt; +} + +void InternalUserInfo::set_last_sign_in_timestamp(int64_t value_arg) { + last_sign_in_timestamp_ = value_arg; +} + +EncodableList InternalUserInfo::ToEncodableList() const { + EncodableList list; + list.reserve(12); + list.push_back(EncodableValue(uid_)); + list.push_back(email_ ? EncodableValue(*email_) : EncodableValue()); + list.push_back(display_name_ ? EncodableValue(*display_name_) + : EncodableValue()); + list.push_back(photo_url_ ? EncodableValue(*photo_url_) : EncodableValue()); + list.push_back(phone_number_ ? EncodableValue(*phone_number_) + : EncodableValue()); + list.push_back(EncodableValue(is_anonymous_)); + list.push_back(EncodableValue(is_email_verified_)); + list.push_back(provider_id_ ? EncodableValue(*provider_id_) + : EncodableValue()); + list.push_back(tenant_id_ ? EncodableValue(*tenant_id_) : EncodableValue()); + list.push_back(refresh_token_ ? EncodableValue(*refresh_token_) + : EncodableValue()); + list.push_back(creation_timestamp_ ? EncodableValue(*creation_timestamp_) + : EncodableValue()); + list.push_back(last_sign_in_timestamp_ + ? EncodableValue(*last_sign_in_timestamp_) + : EncodableValue()); + return list; +} + +InternalUserInfo InternalUserInfo::FromEncodableList( + const EncodableList& list) { + InternalUserInfo decoded(std::get(list[0]), + std::get(list[5]), std::get(list[6])); + auto& encodable_email = list[1]; + if (!encodable_email.IsNull()) { + decoded.set_email(std::get(encodable_email)); + } + auto& encodable_display_name = list[2]; + if (!encodable_display_name.IsNull()) { + decoded.set_display_name(std::get(encodable_display_name)); + } + auto& encodable_photo_url = list[3]; + if (!encodable_photo_url.IsNull()) { + decoded.set_photo_url(std::get(encodable_photo_url)); + } + auto& encodable_phone_number = list[4]; + if (!encodable_phone_number.IsNull()) { + decoded.set_phone_number(std::get(encodable_phone_number)); + } + auto& encodable_provider_id = list[7]; + if (!encodable_provider_id.IsNull()) { + decoded.set_provider_id(std::get(encodable_provider_id)); + } + auto& encodable_tenant_id = list[8]; + if (!encodable_tenant_id.IsNull()) { + decoded.set_tenant_id(std::get(encodable_tenant_id)); + } + auto& encodable_refresh_token = list[9]; + if (!encodable_refresh_token.IsNull()) { + decoded.set_refresh_token(std::get(encodable_refresh_token)); + } + auto& encodable_creation_timestamp = list[10]; + if (!encodable_creation_timestamp.IsNull()) { + decoded.set_creation_timestamp( + std::get(encodable_creation_timestamp)); + } + auto& encodable_last_sign_in_timestamp = list[11]; + if (!encodable_last_sign_in_timestamp.IsNull()) { + decoded.set_last_sign_in_timestamp( + std::get(encodable_last_sign_in_timestamp)); + } + return decoded; +} + +bool InternalUserInfo::operator==(const InternalUserInfo& other) const { + return PigeonInternalDeepEquals(uid_, other.uid_) && + PigeonInternalDeepEquals(email_, other.email_) && + PigeonInternalDeepEquals(display_name_, other.display_name_) && + PigeonInternalDeepEquals(photo_url_, other.photo_url_) && + PigeonInternalDeepEquals(phone_number_, other.phone_number_) && + PigeonInternalDeepEquals(is_anonymous_, other.is_anonymous_) && + PigeonInternalDeepEquals(is_email_verified_, + other.is_email_verified_) && + PigeonInternalDeepEquals(provider_id_, other.provider_id_) && + PigeonInternalDeepEquals(tenant_id_, other.tenant_id_) && + PigeonInternalDeepEquals(refresh_token_, other.refresh_token_) && + PigeonInternalDeepEquals(creation_timestamp_, + other.creation_timestamp_) && + PigeonInternalDeepEquals(last_sign_in_timestamp_, + other.last_sign_in_timestamp_); +} + +bool InternalUserInfo::operator!=(const InternalUserInfo& other) const { + return !(*this == other); +} + +size_t InternalUserInfo::Hash() const { + size_t result = 1; + result = result * 31 + PigeonInternalDeepHash(uid_); + result = result * 31 + PigeonInternalDeepHash(email_); + result = result * 31 + PigeonInternalDeepHash(display_name_); + result = result * 31 + PigeonInternalDeepHash(photo_url_); + result = result * 31 + PigeonInternalDeepHash(phone_number_); + result = result * 31 + PigeonInternalDeepHash(is_anonymous_); + result = result * 31 + PigeonInternalDeepHash(is_email_verified_); + result = result * 31 + PigeonInternalDeepHash(provider_id_); + result = result * 31 + PigeonInternalDeepHash(tenant_id_); + result = result * 31 + PigeonInternalDeepHash(refresh_token_); + result = result * 31 + PigeonInternalDeepHash(creation_timestamp_); + result = result * 31 + PigeonInternalDeepHash(last_sign_in_timestamp_); + return result; +} + +size_t PigeonInternalDeepHash(const InternalUserInfo& v) { return v.Hash(); } + +// InternalUserDetails + +InternalUserDetails::InternalUserDetails(const InternalUserInfo& user_info, + const EncodableList& provider_data) + : user_info_(std::make_unique(user_info)), + provider_data_(provider_data) {} + +InternalUserDetails::InternalUserDetails(const InternalUserDetails& other) + : user_info_(std::make_unique(*other.user_info_)), + provider_data_(other.provider_data_) {} + +InternalUserDetails& InternalUserDetails::operator=( + const InternalUserDetails& other) { + user_info_ = std::make_unique(*other.user_info_); + provider_data_ = other.provider_data_; + return *this; +} + +const InternalUserInfo& InternalUserDetails::user_info() const { + return *user_info_; +} + +void InternalUserDetails::set_user_info(const InternalUserInfo& value_arg) { + user_info_ = std::make_unique(value_arg); +} + +const EncodableList& InternalUserDetails::provider_data() const { + return provider_data_; +} + +void InternalUserDetails::set_provider_data(const EncodableList& value_arg) { + provider_data_ = value_arg; +} + +EncodableList InternalUserDetails::ToEncodableList() const { + EncodableList list; + list.reserve(2); + list.push_back(CustomEncodableValue(*user_info_)); + list.push_back(EncodableValue(provider_data_)); + return list; +} + +InternalUserDetails InternalUserDetails::FromEncodableList( + const EncodableList& list) { + InternalUserDetails decoded(std::any_cast( + std::get(list[0])), + std::get(list[1])); + return decoded; +} + +bool InternalUserDetails::operator==(const InternalUserDetails& other) const { + return PigeonInternalDeepEquals(user_info_, other.user_info_) && + PigeonInternalDeepEquals(provider_data_, other.provider_data_); +} + +bool InternalUserDetails::operator!=(const InternalUserDetails& other) const { + return !(*this == other); +} + +size_t InternalUserDetails::Hash() const { + size_t result = 1; + result = result * 31 + PigeonInternalDeepHash(user_info_); + result = result * 31 + PigeonInternalDeepHash(provider_data_); + return result; +} + +size_t PigeonInternalDeepHash(const InternalUserDetails& v) { return v.Hash(); } + +// InternalUserCredential + +InternalUserCredential::InternalUserCredential() {} + +InternalUserCredential::InternalUserCredential( + const InternalUserDetails* user, + const InternalAdditionalUserInfo* additional_user_info, + const InternalAuthCredential* credential) + : user_(user ? std::make_unique(*user) : nullptr), + additional_user_info_(additional_user_info + ? std::make_unique( + *additional_user_info) + : nullptr), + credential_(credential + ? std::make_unique(*credential) + : nullptr) {} + +InternalUserCredential::InternalUserCredential( + const InternalUserCredential& other) + : user_(other.user_ ? std::make_unique(*other.user_) + : nullptr), + additional_user_info_(other.additional_user_info_ + ? std::make_unique( + *other.additional_user_info_) + : nullptr), + credential_(other.credential_ ? std::make_unique( + *other.credential_) + : nullptr) {} + +InternalUserCredential& InternalUserCredential::operator=( + const InternalUserCredential& other) { + user_ = other.user_ ? std::make_unique(*other.user_) + : nullptr; + additional_user_info_ = other.additional_user_info_ + ? std::make_unique( + *other.additional_user_info_) + : nullptr; + credential_ = + other.credential_ + ? std::make_unique(*other.credential_) + : nullptr; + return *this; +} + +const InternalUserDetails* InternalUserCredential::user() const { + return user_.get(); +} + +void InternalUserCredential::set_user(const InternalUserDetails* value_arg) { + user_ = + value_arg ? std::make_unique(*value_arg) : nullptr; +} + +void InternalUserCredential::set_user(const InternalUserDetails& value_arg) { + user_ = std::make_unique(value_arg); +} + +const InternalAdditionalUserInfo* InternalUserCredential::additional_user_info() + const { + return additional_user_info_.get(); +} + +void InternalUserCredential::set_additional_user_info( + const InternalAdditionalUserInfo* value_arg) { + additional_user_info_ = + value_arg ? std::make_unique(*value_arg) + : nullptr; +} + +void InternalUserCredential::set_additional_user_info( + const InternalAdditionalUserInfo& value_arg) { + additional_user_info_ = + std::make_unique(value_arg); +} + +const InternalAuthCredential* InternalUserCredential::credential() const { + return credential_.get(); +} + +void InternalUserCredential::set_credential( + const InternalAuthCredential* value_arg) { + credential_ = value_arg ? std::make_unique(*value_arg) + : nullptr; +} + +void InternalUserCredential::set_credential( + const InternalAuthCredential& value_arg) { + credential_ = std::make_unique(value_arg); +} + +EncodableList InternalUserCredential::ToEncodableList() const { + EncodableList list; + list.reserve(3); + list.push_back(user_ ? CustomEncodableValue(*user_) : EncodableValue()); + list.push_back(additional_user_info_ + ? CustomEncodableValue(*additional_user_info_) + : EncodableValue()); + list.push_back(credential_ ? CustomEncodableValue(*credential_) + : EncodableValue()); + return list; +} + +InternalUserCredential InternalUserCredential::FromEncodableList( + const EncodableList& list) { + InternalUserCredential decoded; + auto& encodable_user = list[0]; + if (!encodable_user.IsNull()) { + decoded.set_user(std::any_cast( + std::get(encodable_user))); + } + auto& encodable_additional_user_info = list[1]; + if (!encodable_additional_user_info.IsNull()) { + decoded.set_additional_user_info( + std::any_cast( + std::get(encodable_additional_user_info))); + } + auto& encodable_credential = list[2]; + if (!encodable_credential.IsNull()) { + decoded.set_credential(std::any_cast( + std::get(encodable_credential))); + } + return decoded; +} + +bool InternalUserCredential::operator==( + const InternalUserCredential& other) const { + return PigeonInternalDeepEquals(user_, other.user_) && + PigeonInternalDeepEquals(additional_user_info_, + other.additional_user_info_) && + PigeonInternalDeepEquals(credential_, other.credential_); +} + +bool InternalUserCredential::operator!=( + const InternalUserCredential& other) const { + return !(*this == other); +} + +size_t InternalUserCredential::Hash() const { + size_t result = 1; + result = result * 31 + PigeonInternalDeepHash(user_); + result = result * 31 + PigeonInternalDeepHash(additional_user_info_); + result = result * 31 + PigeonInternalDeepHash(credential_); + return result; +} + +size_t PigeonInternalDeepHash(const InternalUserCredential& v) { + return v.Hash(); +} + +// InternalAuthCredentialInput + +InternalAuthCredentialInput::InternalAuthCredentialInput( + const std::string& provider_id, const std::string& sign_in_method) + : provider_id_(provider_id), sign_in_method_(sign_in_method) {} + +InternalAuthCredentialInput::InternalAuthCredentialInput( + const std::string& provider_id, const std::string& sign_in_method, + const std::string* token, const std::string* access_token) + : provider_id_(provider_id), + sign_in_method_(sign_in_method), + token_(token ? std::optional(*token) : std::nullopt), + access_token_(access_token ? std::optional(*access_token) + : std::nullopt) {} + +const std::string& InternalAuthCredentialInput::provider_id() const { + return provider_id_; +} + +void InternalAuthCredentialInput::set_provider_id(std::string_view value_arg) { + provider_id_ = value_arg; +} + +const std::string& InternalAuthCredentialInput::sign_in_method() const { + return sign_in_method_; +} + +void InternalAuthCredentialInput::set_sign_in_method( + std::string_view value_arg) { + sign_in_method_ = value_arg; +} + +const std::string* InternalAuthCredentialInput::token() const { + return token_ ? &(*token_) : nullptr; +} + +void InternalAuthCredentialInput::set_token(const std::string_view* value_arg) { + token_ = value_arg ? std::optional(*value_arg) : std::nullopt; +} + +void InternalAuthCredentialInput::set_token(std::string_view value_arg) { + token_ = value_arg; +} + +const std::string* InternalAuthCredentialInput::access_token() const { + return access_token_ ? &(*access_token_) : nullptr; +} + +void InternalAuthCredentialInput::set_access_token( + const std::string_view* value_arg) { + access_token_ = + value_arg ? std::optional(*value_arg) : std::nullopt; +} + +void InternalAuthCredentialInput::set_access_token(std::string_view value_arg) { + access_token_ = value_arg; +} + +EncodableList InternalAuthCredentialInput::ToEncodableList() const { + EncodableList list; + list.reserve(4); + list.push_back(EncodableValue(provider_id_)); + list.push_back(EncodableValue(sign_in_method_)); + list.push_back(token_ ? EncodableValue(*token_) : EncodableValue()); + list.push_back(access_token_ ? EncodableValue(*access_token_) + : EncodableValue()); + return list; +} + +InternalAuthCredentialInput InternalAuthCredentialInput::FromEncodableList( + const EncodableList& list) { + InternalAuthCredentialInput decoded(std::get(list[0]), + std::get(list[1])); + auto& encodable_token = list[2]; + if (!encodable_token.IsNull()) { + decoded.set_token(std::get(encodable_token)); + } + auto& encodable_access_token = list[3]; + if (!encodable_access_token.IsNull()) { + decoded.set_access_token(std::get(encodable_access_token)); + } + return decoded; +} + +bool InternalAuthCredentialInput::operator==( + const InternalAuthCredentialInput& other) const { + return PigeonInternalDeepEquals(provider_id_, other.provider_id_) && + PigeonInternalDeepEquals(sign_in_method_, other.sign_in_method_) && + PigeonInternalDeepEquals(token_, other.token_) && + PigeonInternalDeepEquals(access_token_, other.access_token_); +} + +bool InternalAuthCredentialInput::operator!=( + const InternalAuthCredentialInput& other) const { + return !(*this == other); +} + +size_t InternalAuthCredentialInput::Hash() const { + size_t result = 1; + result = result * 31 + PigeonInternalDeepHash(provider_id_); + result = result * 31 + PigeonInternalDeepHash(sign_in_method_); + result = result * 31 + PigeonInternalDeepHash(token_); + result = result * 31 + PigeonInternalDeepHash(access_token_); + return result; +} + +size_t PigeonInternalDeepHash(const InternalAuthCredentialInput& v) { + return v.Hash(); +} + +// InternalActionCodeSettings + +InternalActionCodeSettings::InternalActionCodeSettings(const std::string& url, + bool handle_code_in_app, + bool android_install_app) + : url_(url), + handle_code_in_app_(handle_code_in_app), + android_install_app_(android_install_app) {} + +InternalActionCodeSettings::InternalActionCodeSettings( + const std::string& url, const std::string* dynamic_link_domain, + bool handle_code_in_app, const std::string* i_o_s_bundle_id, + const std::string* android_package_name, bool android_install_app, + const std::string* android_minimum_version, const std::string* link_domain) + : url_(url), + dynamic_link_domain_( + dynamic_link_domain ? std::optional(*dynamic_link_domain) + : std::nullopt), + handle_code_in_app_(handle_code_in_app), + i_o_s_bundle_id_(i_o_s_bundle_id + ? std::optional(*i_o_s_bundle_id) + : std::nullopt), + android_package_name_(android_package_name ? std::optional( + *android_package_name) + : std::nullopt), + android_install_app_(android_install_app), + android_minimum_version_( + android_minimum_version + ? std::optional(*android_minimum_version) + : std::nullopt), + link_domain_(link_domain ? std::optional(*link_domain) + : std::nullopt) {} + +const std::string& InternalActionCodeSettings::url() const { return url_; } + +void InternalActionCodeSettings::set_url(std::string_view value_arg) { + url_ = value_arg; +} + +const std::string* InternalActionCodeSettings::dynamic_link_domain() const { + return dynamic_link_domain_ ? &(*dynamic_link_domain_) : nullptr; +} + +void InternalActionCodeSettings::set_dynamic_link_domain( + const std::string_view* value_arg) { + dynamic_link_domain_ = + value_arg ? std::optional(*value_arg) : std::nullopt; +} + +void InternalActionCodeSettings::set_dynamic_link_domain( + std::string_view value_arg) { + dynamic_link_domain_ = value_arg; +} + +bool InternalActionCodeSettings::handle_code_in_app() const { + return handle_code_in_app_; +} + +void InternalActionCodeSettings::set_handle_code_in_app(bool value_arg) { + handle_code_in_app_ = value_arg; +} + +const std::string* InternalActionCodeSettings::i_o_s_bundle_id() const { + return i_o_s_bundle_id_ ? &(*i_o_s_bundle_id_) : nullptr; +} + +void InternalActionCodeSettings::set_i_o_s_bundle_id( + const std::string_view* value_arg) { + i_o_s_bundle_id_ = + value_arg ? std::optional(*value_arg) : std::nullopt; +} + +void InternalActionCodeSettings::set_i_o_s_bundle_id( + std::string_view value_arg) { + i_o_s_bundle_id_ = value_arg; +} + +const std::string* InternalActionCodeSettings::android_package_name() const { + return android_package_name_ ? &(*android_package_name_) : nullptr; +} + +void InternalActionCodeSettings::set_android_package_name( + const std::string_view* value_arg) { + android_package_name_ = + value_arg ? std::optional(*value_arg) : std::nullopt; +} + +void InternalActionCodeSettings::set_android_package_name( + std::string_view value_arg) { + android_package_name_ = value_arg; +} + +bool InternalActionCodeSettings::android_install_app() const { + return android_install_app_; +} + +void InternalActionCodeSettings::set_android_install_app(bool value_arg) { + android_install_app_ = value_arg; +} + +const std::string* InternalActionCodeSettings::android_minimum_version() const { + return android_minimum_version_ ? &(*android_minimum_version_) : nullptr; +} + +void InternalActionCodeSettings::set_android_minimum_version( + const std::string_view* value_arg) { + android_minimum_version_ = + value_arg ? std::optional(*value_arg) : std::nullopt; +} + +void InternalActionCodeSettings::set_android_minimum_version( + std::string_view value_arg) { + android_minimum_version_ = value_arg; +} + +const std::string* InternalActionCodeSettings::link_domain() const { + return link_domain_ ? &(*link_domain_) : nullptr; +} + +void InternalActionCodeSettings::set_link_domain( + const std::string_view* value_arg) { + link_domain_ = + value_arg ? std::optional(*value_arg) : std::nullopt; +} + +void InternalActionCodeSettings::set_link_domain(std::string_view value_arg) { + link_domain_ = value_arg; +} + +EncodableList InternalActionCodeSettings::ToEncodableList() const { + EncodableList list; + list.reserve(8); + list.push_back(EncodableValue(url_)); + list.push_back(dynamic_link_domain_ ? EncodableValue(*dynamic_link_domain_) + : EncodableValue()); + list.push_back(EncodableValue(handle_code_in_app_)); + list.push_back(i_o_s_bundle_id_ ? EncodableValue(*i_o_s_bundle_id_) + : EncodableValue()); + list.push_back(android_package_name_ ? EncodableValue(*android_package_name_) + : EncodableValue()); + list.push_back(EncodableValue(android_install_app_)); + list.push_back(android_minimum_version_ + ? EncodableValue(*android_minimum_version_) + : EncodableValue()); + list.push_back(link_domain_ ? EncodableValue(*link_domain_) + : EncodableValue()); + return list; +} + +InternalActionCodeSettings InternalActionCodeSettings::FromEncodableList( + const EncodableList& list) { + InternalActionCodeSettings decoded(std::get(list[0]), + std::get(list[2]), + std::get(list[5])); + auto& encodable_dynamic_link_domain = list[1]; + if (!encodable_dynamic_link_domain.IsNull()) { + decoded.set_dynamic_link_domain( + std::get(encodable_dynamic_link_domain)); + } + auto& encodable_i_o_s_bundle_id = list[3]; + if (!encodable_i_o_s_bundle_id.IsNull()) { + decoded.set_i_o_s_bundle_id( + std::get(encodable_i_o_s_bundle_id)); + } + auto& encodable_android_package_name = list[4]; + if (!encodable_android_package_name.IsNull()) { + decoded.set_android_package_name( + std::get(encodable_android_package_name)); + } + auto& encodable_android_minimum_version = list[6]; + if (!encodable_android_minimum_version.IsNull()) { + decoded.set_android_minimum_version( + std::get(encodable_android_minimum_version)); + } + auto& encodable_link_domain = list[7]; + if (!encodable_link_domain.IsNull()) { + decoded.set_link_domain(std::get(encodable_link_domain)); + } + return decoded; +} + +bool InternalActionCodeSettings::operator==( + const InternalActionCodeSettings& other) const { + return PigeonInternalDeepEquals(url_, other.url_) && + PigeonInternalDeepEquals(dynamic_link_domain_, + other.dynamic_link_domain_) && + PigeonInternalDeepEquals(handle_code_in_app_, + other.handle_code_in_app_) && + PigeonInternalDeepEquals(i_o_s_bundle_id_, other.i_o_s_bundle_id_) && + PigeonInternalDeepEquals(android_package_name_, + other.android_package_name_) && + PigeonInternalDeepEquals(android_install_app_, + other.android_install_app_) && + PigeonInternalDeepEquals(android_minimum_version_, + other.android_minimum_version_) && + PigeonInternalDeepEquals(link_domain_, other.link_domain_); +} + +bool InternalActionCodeSettings::operator!=( + const InternalActionCodeSettings& other) const { + return !(*this == other); +} + +size_t InternalActionCodeSettings::Hash() const { + size_t result = 1; + result = result * 31 + PigeonInternalDeepHash(url_); + result = result * 31 + PigeonInternalDeepHash(dynamic_link_domain_); + result = result * 31 + PigeonInternalDeepHash(handle_code_in_app_); + result = result * 31 + PigeonInternalDeepHash(i_o_s_bundle_id_); + result = result * 31 + PigeonInternalDeepHash(android_package_name_); + result = result * 31 + PigeonInternalDeepHash(android_install_app_); + result = result * 31 + PigeonInternalDeepHash(android_minimum_version_); + result = result * 31 + PigeonInternalDeepHash(link_domain_); + return result; +} + +size_t PigeonInternalDeepHash(const InternalActionCodeSettings& v) { + return v.Hash(); +} + +// InternalFirebaseAuthSettings + +InternalFirebaseAuthSettings::InternalFirebaseAuthSettings( + bool app_verification_disabled_for_testing) + : app_verification_disabled_for_testing_( + app_verification_disabled_for_testing) {} + +InternalFirebaseAuthSettings::InternalFirebaseAuthSettings( + bool app_verification_disabled_for_testing, + const std::string* user_access_group, const std::string* phone_number, + const std::string* sms_code, const bool* force_recaptcha_flow) + : app_verification_disabled_for_testing_( + app_verification_disabled_for_testing), + user_access_group_(user_access_group + ? std::optional(*user_access_group) + : std::nullopt), + phone_number_(phone_number ? std::optional(*phone_number) + : std::nullopt), + sms_code_(sms_code ? std::optional(*sms_code) + : std::nullopt), + force_recaptcha_flow_(force_recaptcha_flow + ? std::optional(*force_recaptcha_flow) + : std::nullopt) {} + +bool InternalFirebaseAuthSettings::app_verification_disabled_for_testing() + const { + return app_verification_disabled_for_testing_; +} + +void InternalFirebaseAuthSettings::set_app_verification_disabled_for_testing( + bool value_arg) { + app_verification_disabled_for_testing_ = value_arg; +} + +const std::string* InternalFirebaseAuthSettings::user_access_group() const { + return user_access_group_ ? &(*user_access_group_) : nullptr; +} + +void InternalFirebaseAuthSettings::set_user_access_group( + const std::string_view* value_arg) { + user_access_group_ = + value_arg ? std::optional(*value_arg) : std::nullopt; +} + +void InternalFirebaseAuthSettings::set_user_access_group( + std::string_view value_arg) { + user_access_group_ = value_arg; +} + +const std::string* InternalFirebaseAuthSettings::phone_number() const { + return phone_number_ ? &(*phone_number_) : nullptr; +} + +void InternalFirebaseAuthSettings::set_phone_number( + const std::string_view* value_arg) { + phone_number_ = + value_arg ? std::optional(*value_arg) : std::nullopt; +} + +void InternalFirebaseAuthSettings::set_phone_number( + std::string_view value_arg) { + phone_number_ = value_arg; +} + +const std::string* InternalFirebaseAuthSettings::sms_code() const { + return sms_code_ ? &(*sms_code_) : nullptr; +} + +void InternalFirebaseAuthSettings::set_sms_code( + const std::string_view* value_arg) { + sms_code_ = value_arg ? std::optional(*value_arg) : std::nullopt; +} + +void InternalFirebaseAuthSettings::set_sms_code(std::string_view value_arg) { + sms_code_ = value_arg; +} + +const bool* InternalFirebaseAuthSettings::force_recaptcha_flow() const { + return force_recaptcha_flow_ ? &(*force_recaptcha_flow_) : nullptr; +} + +void InternalFirebaseAuthSettings::set_force_recaptcha_flow( + const bool* value_arg) { + force_recaptcha_flow_ = + value_arg ? std::optional(*value_arg) : std::nullopt; +} + +void InternalFirebaseAuthSettings::set_force_recaptcha_flow(bool value_arg) { + force_recaptcha_flow_ = value_arg; +} + +EncodableList InternalFirebaseAuthSettings::ToEncodableList() const { + EncodableList list; + list.reserve(5); + list.push_back(EncodableValue(app_verification_disabled_for_testing_)); + list.push_back(user_access_group_ ? EncodableValue(*user_access_group_) + : EncodableValue()); + list.push_back(phone_number_ ? EncodableValue(*phone_number_) + : EncodableValue()); + list.push_back(sms_code_ ? EncodableValue(*sms_code_) : EncodableValue()); + list.push_back(force_recaptcha_flow_ ? EncodableValue(*force_recaptcha_flow_) + : EncodableValue()); + return list; +} + +InternalFirebaseAuthSettings InternalFirebaseAuthSettings::FromEncodableList( + const EncodableList& list) { + InternalFirebaseAuthSettings decoded(std::get(list[0])); + auto& encodable_user_access_group = list[1]; + if (!encodable_user_access_group.IsNull()) { + decoded.set_user_access_group( + std::get(encodable_user_access_group)); + } + auto& encodable_phone_number = list[2]; + if (!encodable_phone_number.IsNull()) { + decoded.set_phone_number(std::get(encodable_phone_number)); + } + auto& encodable_sms_code = list[3]; + if (!encodable_sms_code.IsNull()) { + decoded.set_sms_code(std::get(encodable_sms_code)); + } + auto& encodable_force_recaptcha_flow = list[4]; + if (!encodable_force_recaptcha_flow.IsNull()) { + decoded.set_force_recaptcha_flow( + std::get(encodable_force_recaptcha_flow)); + } + return decoded; +} + +bool InternalFirebaseAuthSettings::operator==( + const InternalFirebaseAuthSettings& other) const { + return PigeonInternalDeepEquals( + app_verification_disabled_for_testing_, + other.app_verification_disabled_for_testing_) && + PigeonInternalDeepEquals(user_access_group_, + other.user_access_group_) && + PigeonInternalDeepEquals(phone_number_, other.phone_number_) && + PigeonInternalDeepEquals(sms_code_, other.sms_code_) && + PigeonInternalDeepEquals(force_recaptcha_flow_, + other.force_recaptcha_flow_); +} + +bool InternalFirebaseAuthSettings::operator!=( + const InternalFirebaseAuthSettings& other) const { + return !(*this == other); +} + +size_t InternalFirebaseAuthSettings::Hash() const { + size_t result = 1; + result = result * 31 + + PigeonInternalDeepHash(app_verification_disabled_for_testing_); + result = result * 31 + PigeonInternalDeepHash(user_access_group_); + result = result * 31 + PigeonInternalDeepHash(phone_number_); + result = result * 31 + PigeonInternalDeepHash(sms_code_); + result = result * 31 + PigeonInternalDeepHash(force_recaptcha_flow_); + return result; +} + +size_t PigeonInternalDeepHash(const InternalFirebaseAuthSettings& v) { + return v.Hash(); +} + +// InternalSignInProvider + +InternalSignInProvider::InternalSignInProvider(const std::string& provider_id) + : provider_id_(provider_id) {} + +InternalSignInProvider::InternalSignInProvider( + const std::string& provider_id, const EncodableList* scopes, + const EncodableMap* custom_parameters) + : provider_id_(provider_id), + scopes_(scopes ? std::optional(*scopes) : std::nullopt), + custom_parameters_(custom_parameters + ? std::optional(*custom_parameters) + : std::nullopt) {} + +const std::string& InternalSignInProvider::provider_id() const { + return provider_id_; +} + +void InternalSignInProvider::set_provider_id(std::string_view value_arg) { + provider_id_ = value_arg; +} + +const EncodableList* InternalSignInProvider::scopes() const { + return scopes_ ? &(*scopes_) : nullptr; +} + +void InternalSignInProvider::set_scopes(const EncodableList* value_arg) { + scopes_ = value_arg ? std::optional(*value_arg) : std::nullopt; +} + +void InternalSignInProvider::set_scopes(const EncodableList& value_arg) { + scopes_ = value_arg; +} + +const EncodableMap* InternalSignInProvider::custom_parameters() const { + return custom_parameters_ ? &(*custom_parameters_) : nullptr; +} + +void InternalSignInProvider::set_custom_parameters( + const EncodableMap* value_arg) { + custom_parameters_ = + value_arg ? std::optional(*value_arg) : std::nullopt; +} + +void InternalSignInProvider::set_custom_parameters( + const EncodableMap& value_arg) { + custom_parameters_ = value_arg; +} + +EncodableList InternalSignInProvider::ToEncodableList() const { + EncodableList list; + list.reserve(3); + list.push_back(EncodableValue(provider_id_)); + list.push_back(scopes_ ? EncodableValue(*scopes_) : EncodableValue()); + list.push_back(custom_parameters_ ? EncodableValue(*custom_parameters_) + : EncodableValue()); + return list; +} + +InternalSignInProvider InternalSignInProvider::FromEncodableList( + const EncodableList& list) { + InternalSignInProvider decoded(std::get(list[0])); + auto& encodable_scopes = list[1]; + if (!encodable_scopes.IsNull()) { + decoded.set_scopes(std::get(encodable_scopes)); + } + auto& encodable_custom_parameters = list[2]; + if (!encodable_custom_parameters.IsNull()) { + decoded.set_custom_parameters( + std::get(encodable_custom_parameters)); + } + return decoded; +} + +bool InternalSignInProvider::operator==( + const InternalSignInProvider& other) const { + return PigeonInternalDeepEquals(provider_id_, other.provider_id_) && + PigeonInternalDeepEquals(scopes_, other.scopes_) && + PigeonInternalDeepEquals(custom_parameters_, other.custom_parameters_); +} + +bool InternalSignInProvider::operator!=( + const InternalSignInProvider& other) const { + return !(*this == other); +} + +size_t InternalSignInProvider::Hash() const { + size_t result = 1; + result = result * 31 + PigeonInternalDeepHash(provider_id_); + result = result * 31 + PigeonInternalDeepHash(scopes_); + result = result * 31 + PigeonInternalDeepHash(custom_parameters_); + return result; +} + +size_t PigeonInternalDeepHash(const InternalSignInProvider& v) { + return v.Hash(); +} + +// InternalVerifyPhoneNumberRequest + +InternalVerifyPhoneNumberRequest::InternalVerifyPhoneNumberRequest( + int64_t timeout) + : timeout_(timeout) {} + +InternalVerifyPhoneNumberRequest::InternalVerifyPhoneNumberRequest( + const std::string* phone_number, int64_t timeout, + const int64_t* force_resending_token, + const std::string* auto_retrieved_sms_code_for_testing, + const std::string* multi_factor_info_id, + const std::string* multi_factor_session_id) + : phone_number_(phone_number ? std::optional(*phone_number) + : std::nullopt), + timeout_(timeout), + force_resending_token_( + force_resending_token ? std::optional(*force_resending_token) + : std::nullopt), + auto_retrieved_sms_code_for_testing_( + auto_retrieved_sms_code_for_testing + ? std::optional(*auto_retrieved_sms_code_for_testing) + : std::nullopt), + multi_factor_info_id_(multi_factor_info_id ? std::optional( + *multi_factor_info_id) + : std::nullopt), + multi_factor_session_id_( + multi_factor_session_id + ? std::optional(*multi_factor_session_id) + : std::nullopt) {} + +const std::string* InternalVerifyPhoneNumberRequest::phone_number() const { + return phone_number_ ? &(*phone_number_) : nullptr; +} + +void InternalVerifyPhoneNumberRequest::set_phone_number( + const std::string_view* value_arg) { + phone_number_ = + value_arg ? std::optional(*value_arg) : std::nullopt; +} + +void InternalVerifyPhoneNumberRequest::set_phone_number( + std::string_view value_arg) { + phone_number_ = value_arg; +} + +int64_t InternalVerifyPhoneNumberRequest::timeout() const { return timeout_; } + +void InternalVerifyPhoneNumberRequest::set_timeout(int64_t value_arg) { + timeout_ = value_arg; +} + +const int64_t* InternalVerifyPhoneNumberRequest::force_resending_token() const { + return force_resending_token_ ? &(*force_resending_token_) : nullptr; +} + +void InternalVerifyPhoneNumberRequest::set_force_resending_token( + const int64_t* value_arg) { + force_resending_token_ = + value_arg ? std::optional(*value_arg) : std::nullopt; +} + +void InternalVerifyPhoneNumberRequest::set_force_resending_token( + int64_t value_arg) { + force_resending_token_ = value_arg; +} + +const std::string* +InternalVerifyPhoneNumberRequest::auto_retrieved_sms_code_for_testing() const { + return auto_retrieved_sms_code_for_testing_ + ? &(*auto_retrieved_sms_code_for_testing_) + : nullptr; +} + +void InternalVerifyPhoneNumberRequest::set_auto_retrieved_sms_code_for_testing( + const std::string_view* value_arg) { + auto_retrieved_sms_code_for_testing_ = + value_arg ? std::optional(*value_arg) : std::nullopt; +} + +void InternalVerifyPhoneNumberRequest::set_auto_retrieved_sms_code_for_testing( + std::string_view value_arg) { + auto_retrieved_sms_code_for_testing_ = value_arg; +} + +const std::string* InternalVerifyPhoneNumberRequest::multi_factor_info_id() + const { + return multi_factor_info_id_ ? &(*multi_factor_info_id_) : nullptr; +} + +void InternalVerifyPhoneNumberRequest::set_multi_factor_info_id( + const std::string_view* value_arg) { + multi_factor_info_id_ = + value_arg ? std::optional(*value_arg) : std::nullopt; +} + +void InternalVerifyPhoneNumberRequest::set_multi_factor_info_id( + std::string_view value_arg) { + multi_factor_info_id_ = value_arg; +} + +const std::string* InternalVerifyPhoneNumberRequest::multi_factor_session_id() + const { + return multi_factor_session_id_ ? &(*multi_factor_session_id_) : nullptr; +} + +void InternalVerifyPhoneNumberRequest::set_multi_factor_session_id( + const std::string_view* value_arg) { + multi_factor_session_id_ = + value_arg ? std::optional(*value_arg) : std::nullopt; +} + +void InternalVerifyPhoneNumberRequest::set_multi_factor_session_id( + std::string_view value_arg) { + multi_factor_session_id_ = value_arg; +} + +EncodableList InternalVerifyPhoneNumberRequest::ToEncodableList() const { + EncodableList list; + list.reserve(6); + list.push_back(phone_number_ ? EncodableValue(*phone_number_) + : EncodableValue()); + list.push_back(EncodableValue(timeout_)); + list.push_back(force_resending_token_ + ? EncodableValue(*force_resending_token_) + : EncodableValue()); + list.push_back(auto_retrieved_sms_code_for_testing_ + ? EncodableValue(*auto_retrieved_sms_code_for_testing_) + : EncodableValue()); + list.push_back(multi_factor_info_id_ ? EncodableValue(*multi_factor_info_id_) + : EncodableValue()); + list.push_back(multi_factor_session_id_ + ? EncodableValue(*multi_factor_session_id_) + : EncodableValue()); + return list; +} + +InternalVerifyPhoneNumberRequest +InternalVerifyPhoneNumberRequest::FromEncodableList(const EncodableList& list) { + InternalVerifyPhoneNumberRequest decoded(std::get(list[1])); + auto& encodable_phone_number = list[0]; + if (!encodable_phone_number.IsNull()) { + decoded.set_phone_number(std::get(encodable_phone_number)); + } + auto& encodable_force_resending_token = list[2]; + if (!encodable_force_resending_token.IsNull()) { + decoded.set_force_resending_token( + std::get(encodable_force_resending_token)); + } + auto& encodable_auto_retrieved_sms_code_for_testing = list[3]; + if (!encodable_auto_retrieved_sms_code_for_testing.IsNull()) { + decoded.set_auto_retrieved_sms_code_for_testing( + std::get(encodable_auto_retrieved_sms_code_for_testing)); + } + auto& encodable_multi_factor_info_id = list[4]; + if (!encodable_multi_factor_info_id.IsNull()) { + decoded.set_multi_factor_info_id( + std::get(encodable_multi_factor_info_id)); + } + auto& encodable_multi_factor_session_id = list[5]; + if (!encodable_multi_factor_session_id.IsNull()) { + decoded.set_multi_factor_session_id( + std::get(encodable_multi_factor_session_id)); + } + return decoded; +} + +bool InternalVerifyPhoneNumberRequest::operator==( + const InternalVerifyPhoneNumberRequest& other) const { + return PigeonInternalDeepEquals(phone_number_, other.phone_number_) && + PigeonInternalDeepEquals(timeout_, other.timeout_) && + PigeonInternalDeepEquals(force_resending_token_, + other.force_resending_token_) && + PigeonInternalDeepEquals(auto_retrieved_sms_code_for_testing_, + other.auto_retrieved_sms_code_for_testing_) && + PigeonInternalDeepEquals(multi_factor_info_id_, + other.multi_factor_info_id_) && + PigeonInternalDeepEquals(multi_factor_session_id_, + other.multi_factor_session_id_); +} + +bool InternalVerifyPhoneNumberRequest::operator!=( + const InternalVerifyPhoneNumberRequest& other) const { + return !(*this == other); +} + +size_t InternalVerifyPhoneNumberRequest::Hash() const { + size_t result = 1; + result = result * 31 + PigeonInternalDeepHash(phone_number_); + result = result * 31 + PigeonInternalDeepHash(timeout_); + result = result * 31 + PigeonInternalDeepHash(force_resending_token_); + result = result * 31 + + PigeonInternalDeepHash(auto_retrieved_sms_code_for_testing_); + result = result * 31 + PigeonInternalDeepHash(multi_factor_info_id_); + result = result * 31 + PigeonInternalDeepHash(multi_factor_session_id_); + return result; +} + +size_t PigeonInternalDeepHash(const InternalVerifyPhoneNumberRequest& v) { + return v.Hash(); +} + +// InternalIdTokenResult + +InternalIdTokenResult::InternalIdTokenResult() {} + +InternalIdTokenResult::InternalIdTokenResult( + const std::string* token, const int64_t* expiration_timestamp, + const int64_t* auth_timestamp, const int64_t* issued_at_timestamp, + const std::string* sign_in_provider, const EncodableMap* claims, + const std::string* sign_in_second_factor) + : token_(token ? std::optional(*token) : std::nullopt), + expiration_timestamp_(expiration_timestamp + ? std::optional(*expiration_timestamp) + : std::nullopt), + auth_timestamp_(auth_timestamp ? std::optional(*auth_timestamp) + : std::nullopt), + issued_at_timestamp_(issued_at_timestamp + ? std::optional(*issued_at_timestamp) + : std::nullopt), + sign_in_provider_(sign_in_provider + ? std::optional(*sign_in_provider) + : std::nullopt), + claims_(claims ? std::optional(*claims) : std::nullopt), + sign_in_second_factor_(sign_in_second_factor ? std::optional( + *sign_in_second_factor) + : std::nullopt) {} + +const std::string* InternalIdTokenResult::token() const { + return token_ ? &(*token_) : nullptr; +} + +void InternalIdTokenResult::set_token(const std::string_view* value_arg) { + token_ = value_arg ? std::optional(*value_arg) : std::nullopt; +} + +void InternalIdTokenResult::set_token(std::string_view value_arg) { + token_ = value_arg; +} + +const int64_t* InternalIdTokenResult::expiration_timestamp() const { + return expiration_timestamp_ ? &(*expiration_timestamp_) : nullptr; +} + +void InternalIdTokenResult::set_expiration_timestamp(const int64_t* value_arg) { + expiration_timestamp_ = + value_arg ? std::optional(*value_arg) : std::nullopt; +} + +void InternalIdTokenResult::set_expiration_timestamp(int64_t value_arg) { + expiration_timestamp_ = value_arg; +} + +const int64_t* InternalIdTokenResult::auth_timestamp() const { + return auth_timestamp_ ? &(*auth_timestamp_) : nullptr; +} + +void InternalIdTokenResult::set_auth_timestamp(const int64_t* value_arg) { + auth_timestamp_ = + value_arg ? std::optional(*value_arg) : std::nullopt; +} + +void InternalIdTokenResult::set_auth_timestamp(int64_t value_arg) { + auth_timestamp_ = value_arg; +} + +const int64_t* InternalIdTokenResult::issued_at_timestamp() const { + return issued_at_timestamp_ ? &(*issued_at_timestamp_) : nullptr; +} + +void InternalIdTokenResult::set_issued_at_timestamp(const int64_t* value_arg) { + issued_at_timestamp_ = + value_arg ? std::optional(*value_arg) : std::nullopt; +} + +void InternalIdTokenResult::set_issued_at_timestamp(int64_t value_arg) { + issued_at_timestamp_ = value_arg; +} + +const std::string* InternalIdTokenResult::sign_in_provider() const { + return sign_in_provider_ ? &(*sign_in_provider_) : nullptr; +} + +void InternalIdTokenResult::set_sign_in_provider( + const std::string_view* value_arg) { + sign_in_provider_ = + value_arg ? std::optional(*value_arg) : std::nullopt; +} + +void InternalIdTokenResult::set_sign_in_provider(std::string_view value_arg) { + sign_in_provider_ = value_arg; +} + +const EncodableMap* InternalIdTokenResult::claims() const { + return claims_ ? &(*claims_) : nullptr; +} + +void InternalIdTokenResult::set_claims(const EncodableMap* value_arg) { + claims_ = value_arg ? std::optional(*value_arg) : std::nullopt; +} + +void InternalIdTokenResult::set_claims(const EncodableMap& value_arg) { + claims_ = value_arg; +} + +const std::string* InternalIdTokenResult::sign_in_second_factor() const { + return sign_in_second_factor_ ? &(*sign_in_second_factor_) : nullptr; +} + +void InternalIdTokenResult::set_sign_in_second_factor( + const std::string_view* value_arg) { + sign_in_second_factor_ = + value_arg ? std::optional(*value_arg) : std::nullopt; +} + +void InternalIdTokenResult::set_sign_in_second_factor( + std::string_view value_arg) { + sign_in_second_factor_ = value_arg; +} + +EncodableList InternalIdTokenResult::ToEncodableList() const { + EncodableList list; + list.reserve(7); + list.push_back(token_ ? EncodableValue(*token_) : EncodableValue()); + list.push_back(expiration_timestamp_ ? EncodableValue(*expiration_timestamp_) + : EncodableValue()); + list.push_back(auth_timestamp_ ? EncodableValue(*auth_timestamp_) + : EncodableValue()); + list.push_back(issued_at_timestamp_ ? EncodableValue(*issued_at_timestamp_) + : EncodableValue()); + list.push_back(sign_in_provider_ ? EncodableValue(*sign_in_provider_) + : EncodableValue()); + list.push_back(claims_ ? EncodableValue(*claims_) : EncodableValue()); + list.push_back(sign_in_second_factor_ + ? EncodableValue(*sign_in_second_factor_) + : EncodableValue()); + return list; +} + +InternalIdTokenResult InternalIdTokenResult::FromEncodableList( + const EncodableList& list) { + InternalIdTokenResult decoded; + auto& encodable_token = list[0]; + if (!encodable_token.IsNull()) { + decoded.set_token(std::get(encodable_token)); + } + auto& encodable_expiration_timestamp = list[1]; + if (!encodable_expiration_timestamp.IsNull()) { + decoded.set_expiration_timestamp( + std::get(encodable_expiration_timestamp)); + } + auto& encodable_auth_timestamp = list[2]; + if (!encodable_auth_timestamp.IsNull()) { + decoded.set_auth_timestamp(std::get(encodable_auth_timestamp)); + } + auto& encodable_issued_at_timestamp = list[3]; + if (!encodable_issued_at_timestamp.IsNull()) { + decoded.set_issued_at_timestamp( + std::get(encodable_issued_at_timestamp)); + } + auto& encodable_sign_in_provider = list[4]; + if (!encodable_sign_in_provider.IsNull()) { + decoded.set_sign_in_provider( + std::get(encodable_sign_in_provider)); + } + auto& encodable_claims = list[5]; + if (!encodable_claims.IsNull()) { + decoded.set_claims(std::get(encodable_claims)); + } + auto& encodable_sign_in_second_factor = list[6]; + if (!encodable_sign_in_second_factor.IsNull()) { + decoded.set_sign_in_second_factor( + std::get(encodable_sign_in_second_factor)); + } + return decoded; +} + +bool InternalIdTokenResult::operator==( + const InternalIdTokenResult& other) const { + return PigeonInternalDeepEquals(token_, other.token_) && + PigeonInternalDeepEquals(expiration_timestamp_, + other.expiration_timestamp_) && + PigeonInternalDeepEquals(auth_timestamp_, other.auth_timestamp_) && + PigeonInternalDeepEquals(issued_at_timestamp_, + other.issued_at_timestamp_) && + PigeonInternalDeepEquals(sign_in_provider_, other.sign_in_provider_) && + PigeonInternalDeepEquals(claims_, other.claims_) && + PigeonInternalDeepEquals(sign_in_second_factor_, + other.sign_in_second_factor_); +} + +bool InternalIdTokenResult::operator!=( + const InternalIdTokenResult& other) const { + return !(*this == other); +} + +size_t InternalIdTokenResult::Hash() const { + size_t result = 1; + result = result * 31 + PigeonInternalDeepHash(token_); + result = result * 31 + PigeonInternalDeepHash(expiration_timestamp_); + result = result * 31 + PigeonInternalDeepHash(auth_timestamp_); + result = result * 31 + PigeonInternalDeepHash(issued_at_timestamp_); + result = result * 31 + PigeonInternalDeepHash(sign_in_provider_); + result = result * 31 + PigeonInternalDeepHash(claims_); + result = result * 31 + PigeonInternalDeepHash(sign_in_second_factor_); + return result; +} + +size_t PigeonInternalDeepHash(const InternalIdTokenResult& v) { + return v.Hash(); +} + +// InternalUserProfile + +InternalUserProfile::InternalUserProfile(bool display_name_changed, + bool photo_url_changed) + : display_name_changed_(display_name_changed), + photo_url_changed_(photo_url_changed) {} + +InternalUserProfile::InternalUserProfile(const std::string* display_name, + const std::string* photo_url, + bool display_name_changed, + bool photo_url_changed) + : display_name_(display_name ? std::optional(*display_name) + : std::nullopt), + photo_url_(photo_url ? std::optional(*photo_url) + : std::nullopt), + display_name_changed_(display_name_changed), + photo_url_changed_(photo_url_changed) {} + +const std::string* InternalUserProfile::display_name() const { + return display_name_ ? &(*display_name_) : nullptr; +} + +void InternalUserProfile::set_display_name(const std::string_view* value_arg) { + display_name_ = + value_arg ? std::optional(*value_arg) : std::nullopt; +} + +void InternalUserProfile::set_display_name(std::string_view value_arg) { + display_name_ = value_arg; +} + +const std::string* InternalUserProfile::photo_url() const { + return photo_url_ ? &(*photo_url_) : nullptr; +} + +void InternalUserProfile::set_photo_url(const std::string_view* value_arg) { + photo_url_ = + value_arg ? std::optional(*value_arg) : std::nullopt; +} + +void InternalUserProfile::set_photo_url(std::string_view value_arg) { + photo_url_ = value_arg; +} + +bool InternalUserProfile::display_name_changed() const { + return display_name_changed_; +} + +void InternalUserProfile::set_display_name_changed(bool value_arg) { + display_name_changed_ = value_arg; +} + +bool InternalUserProfile::photo_url_changed() const { + return photo_url_changed_; +} + +void InternalUserProfile::set_photo_url_changed(bool value_arg) { + photo_url_changed_ = value_arg; +} + +EncodableList InternalUserProfile::ToEncodableList() const { + EncodableList list; + list.reserve(4); + list.push_back(display_name_ ? EncodableValue(*display_name_) + : EncodableValue()); + list.push_back(photo_url_ ? EncodableValue(*photo_url_) : EncodableValue()); + list.push_back(EncodableValue(display_name_changed_)); + list.push_back(EncodableValue(photo_url_changed_)); + return list; +} + +InternalUserProfile InternalUserProfile::FromEncodableList( + const EncodableList& list) { + InternalUserProfile decoded(std::get(list[2]), std::get(list[3])); + auto& encodable_display_name = list[0]; + if (!encodable_display_name.IsNull()) { + decoded.set_display_name(std::get(encodable_display_name)); + } + auto& encodable_photo_url = list[1]; + if (!encodable_photo_url.IsNull()) { + decoded.set_photo_url(std::get(encodable_photo_url)); + } + return decoded; +} + +bool InternalUserProfile::operator==(const InternalUserProfile& other) const { + return PigeonInternalDeepEquals(display_name_, other.display_name_) && + PigeonInternalDeepEquals(photo_url_, other.photo_url_) && + PigeonInternalDeepEquals(display_name_changed_, + other.display_name_changed_) && + PigeonInternalDeepEquals(photo_url_changed_, other.photo_url_changed_); +} + +bool InternalUserProfile::operator!=(const InternalUserProfile& other) const { + return !(*this == other); +} + +size_t InternalUserProfile::Hash() const { + size_t result = 1; + result = result * 31 + PigeonInternalDeepHash(display_name_); + result = result * 31 + PigeonInternalDeepHash(photo_url_); + result = result * 31 + PigeonInternalDeepHash(display_name_changed_); + result = result * 31 + PigeonInternalDeepHash(photo_url_changed_); + return result; +} + +size_t PigeonInternalDeepHash(const InternalUserProfile& v) { return v.Hash(); } + +// InternalTotpSecret + +InternalTotpSecret::InternalTotpSecret(const std::string& secret_key) + : secret_key_(secret_key) {} + +InternalTotpSecret::InternalTotpSecret( + const int64_t* code_interval_seconds, const int64_t* code_length, + const int64_t* enrollment_completion_deadline, + const std::string* hashing_algorithm, const std::string& secret_key) + : code_interval_seconds_( + code_interval_seconds ? std::optional(*code_interval_seconds) + : std::nullopt), + code_length_(code_length ? std::optional(*code_length) + : std::nullopt), + enrollment_completion_deadline_( + enrollment_completion_deadline + ? std::optional(*enrollment_completion_deadline) + : std::nullopt), + hashing_algorithm_(hashing_algorithm + ? std::optional(*hashing_algorithm) + : std::nullopt), + secret_key_(secret_key) {} + +const int64_t* InternalTotpSecret::code_interval_seconds() const { + return code_interval_seconds_ ? &(*code_interval_seconds_) : nullptr; +} + +void InternalTotpSecret::set_code_interval_seconds(const int64_t* value_arg) { + code_interval_seconds_ = + value_arg ? std::optional(*value_arg) : std::nullopt; +} + +void InternalTotpSecret::set_code_interval_seconds(int64_t value_arg) { + code_interval_seconds_ = value_arg; +} + +const int64_t* InternalTotpSecret::code_length() const { + return code_length_ ? &(*code_length_) : nullptr; +} + +void InternalTotpSecret::set_code_length(const int64_t* value_arg) { + code_length_ = value_arg ? std::optional(*value_arg) : std::nullopt; +} + +void InternalTotpSecret::set_code_length(int64_t value_arg) { + code_length_ = value_arg; +} + +const int64_t* InternalTotpSecret::enrollment_completion_deadline() const { + return enrollment_completion_deadline_ ? &(*enrollment_completion_deadline_) + : nullptr; +} + +void InternalTotpSecret::set_enrollment_completion_deadline( + const int64_t* value_arg) { + enrollment_completion_deadline_ = + value_arg ? std::optional(*value_arg) : std::nullopt; +} + +void InternalTotpSecret::set_enrollment_completion_deadline(int64_t value_arg) { + enrollment_completion_deadline_ = value_arg; +} + +const std::string* InternalTotpSecret::hashing_algorithm() const { + return hashing_algorithm_ ? &(*hashing_algorithm_) : nullptr; +} + +void InternalTotpSecret::set_hashing_algorithm( + const std::string_view* value_arg) { + hashing_algorithm_ = + value_arg ? std::optional(*value_arg) : std::nullopt; +} + +void InternalTotpSecret::set_hashing_algorithm(std::string_view value_arg) { + hashing_algorithm_ = value_arg; +} + +const std::string& InternalTotpSecret::secret_key() const { + return secret_key_; +} + +void InternalTotpSecret::set_secret_key(std::string_view value_arg) { + secret_key_ = value_arg; +} + +EncodableList InternalTotpSecret::ToEncodableList() const { + EncodableList list; + list.reserve(5); + list.push_back(code_interval_seconds_ + ? EncodableValue(*code_interval_seconds_) + : EncodableValue()); + list.push_back(code_length_ ? EncodableValue(*code_length_) + : EncodableValue()); + list.push_back(enrollment_completion_deadline_ + ? EncodableValue(*enrollment_completion_deadline_) + : EncodableValue()); + list.push_back(hashing_algorithm_ ? EncodableValue(*hashing_algorithm_) + : EncodableValue()); + list.push_back(EncodableValue(secret_key_)); + return list; +} + +InternalTotpSecret InternalTotpSecret::FromEncodableList( + const EncodableList& list) { + InternalTotpSecret decoded(std::get(list[4])); + auto& encodable_code_interval_seconds = list[0]; + if (!encodable_code_interval_seconds.IsNull()) { + decoded.set_code_interval_seconds( + std::get(encodable_code_interval_seconds)); + } + auto& encodable_code_length = list[1]; + if (!encodable_code_length.IsNull()) { + decoded.set_code_length(std::get(encodable_code_length)); + } + auto& encodable_enrollment_completion_deadline = list[2]; + if (!encodable_enrollment_completion_deadline.IsNull()) { + decoded.set_enrollment_completion_deadline( + std::get(encodable_enrollment_completion_deadline)); + } + auto& encodable_hashing_algorithm = list[3]; + if (!encodable_hashing_algorithm.IsNull()) { + decoded.set_hashing_algorithm( + std::get(encodable_hashing_algorithm)); + } + return decoded; +} + +bool InternalTotpSecret::operator==(const InternalTotpSecret& other) const { + return PigeonInternalDeepEquals(code_interval_seconds_, + other.code_interval_seconds_) && + PigeonInternalDeepEquals(code_length_, other.code_length_) && + PigeonInternalDeepEquals(enrollment_completion_deadline_, + other.enrollment_completion_deadline_) && + PigeonInternalDeepEquals(hashing_algorithm_, + other.hashing_algorithm_) && + PigeonInternalDeepEquals(secret_key_, other.secret_key_); +} + +bool InternalTotpSecret::operator!=(const InternalTotpSecret& other) const { + return !(*this == other); +} + +size_t InternalTotpSecret::Hash() const { + size_t result = 1; + result = result * 31 + PigeonInternalDeepHash(code_interval_seconds_); + result = result * 31 + PigeonInternalDeepHash(code_length_); + result = + result * 31 + PigeonInternalDeepHash(enrollment_completion_deadline_); + result = result * 31 + PigeonInternalDeepHash(hashing_algorithm_); + result = result * 31 + PigeonInternalDeepHash(secret_key_); + return result; +} + +size_t PigeonInternalDeepHash(const InternalTotpSecret& v) { return v.Hash(); } + +PigeonInternalCodecSerializer::PigeonInternalCodecSerializer() {} + +EncodableValue PigeonInternalCodecSerializer::ReadValueOfType( + uint8_t type, ::flutter::ByteStreamReader* stream) const { + switch (type) { + case 129: { + const auto& encodable_enum_arg = ReadValue(stream); + const int64_t enum_arg_value = + encodable_enum_arg.IsNull() ? 0 : encodable_enum_arg.LongValue(); + return encodable_enum_arg.IsNull() + ? EncodableValue() + : CustomEncodableValue( + static_cast(enum_arg_value)); + } + case 130: { + return CustomEncodableValue(InternalMultiFactorSession::FromEncodableList( + std::get(ReadValue(stream)))); + } + case 131: { + return CustomEncodableValue( + InternalPhoneMultiFactorAssertion::FromEncodableList( + std::get(ReadValue(stream)))); + } + case 132: { + return CustomEncodableValue(InternalMultiFactorInfo::FromEncodableList( + std::get(ReadValue(stream)))); + } + case 133: { + return CustomEncodableValue(AuthPigeonFirebaseApp::FromEncodableList( + std::get(ReadValue(stream)))); + } + case 134: { + return CustomEncodableValue(InternalActionCodeInfoData::FromEncodableList( + std::get(ReadValue(stream)))); + } + case 135: { + return CustomEncodableValue(InternalActionCodeInfo::FromEncodableList( + std::get(ReadValue(stream)))); + } + case 136: { + return CustomEncodableValue(InternalAdditionalUserInfo::FromEncodableList( + std::get(ReadValue(stream)))); + } + case 137: { + return CustomEncodableValue(InternalAuthCredential::FromEncodableList( + std::get(ReadValue(stream)))); + } + case 138: { + return CustomEncodableValue(InternalUserInfo::FromEncodableList( + std::get(ReadValue(stream)))); + } + case 139: { + return CustomEncodableValue(InternalUserDetails::FromEncodableList( + std::get(ReadValue(stream)))); + } + case 140: { + return CustomEncodableValue(InternalUserCredential::FromEncodableList( + std::get(ReadValue(stream)))); + } + case 141: { + return CustomEncodableValue( + InternalAuthCredentialInput::FromEncodableList( + std::get(ReadValue(stream)))); + } + case 142: { + return CustomEncodableValue(InternalActionCodeSettings::FromEncodableList( + std::get(ReadValue(stream)))); + } + case 143: { + return CustomEncodableValue( + InternalFirebaseAuthSettings::FromEncodableList( + std::get(ReadValue(stream)))); + } + case 144: { + return CustomEncodableValue(InternalSignInProvider::FromEncodableList( + std::get(ReadValue(stream)))); + } + case 145: { + return CustomEncodableValue( + InternalVerifyPhoneNumberRequest::FromEncodableList( + std::get(ReadValue(stream)))); + } + case 146: { + return CustomEncodableValue(InternalIdTokenResult::FromEncodableList( + std::get(ReadValue(stream)))); + } + case 147: { + return CustomEncodableValue(InternalUserProfile::FromEncodableList( + std::get(ReadValue(stream)))); + } + case 148: { + return CustomEncodableValue(InternalTotpSecret::FromEncodableList( + std::get(ReadValue(stream)))); + } + default: + return ::flutter::StandardCodecSerializer::ReadValueOfType(type, stream); + } +} + +void PigeonInternalCodecSerializer::WriteValue( + const EncodableValue& value, ::flutter::ByteStreamWriter* stream) const { + if (const CustomEncodableValue* custom_value = + std::get_if(&value)) { + if (custom_value->type() == typeid(ActionCodeInfoOperation)) { + stream->WriteByte(129); + WriteValue(EncodableValue(static_cast( + std::any_cast(*custom_value))), + stream); + return; + } + if (custom_value->type() == typeid(InternalMultiFactorSession)) { + stream->WriteByte(130); + WriteValue(EncodableValue( + std::any_cast(*custom_value) + .ToEncodableList()), + stream); + return; + } + if (custom_value->type() == typeid(InternalPhoneMultiFactorAssertion)) { + stream->WriteByte(131); + WriteValue( + EncodableValue( + std::any_cast(*custom_value) + .ToEncodableList()), + stream); + return; + } + if (custom_value->type() == typeid(InternalMultiFactorInfo)) { + stream->WriteByte(132); + WriteValue( + EncodableValue(std::any_cast(*custom_value) + .ToEncodableList()), + stream); + return; + } + if (custom_value->type() == typeid(AuthPigeonFirebaseApp)) { + stream->WriteByte(133); + WriteValue( + EncodableValue(std::any_cast(*custom_value) + .ToEncodableList()), + stream); + return; + } + if (custom_value->type() == typeid(InternalActionCodeInfoData)) { + stream->WriteByte(134); + WriteValue(EncodableValue( + std::any_cast(*custom_value) + .ToEncodableList()), + stream); + return; + } + if (custom_value->type() == typeid(InternalActionCodeInfo)) { + stream->WriteByte(135); + WriteValue( + EncodableValue(std::any_cast(*custom_value) + .ToEncodableList()), + stream); + return; + } + if (custom_value->type() == typeid(InternalAdditionalUserInfo)) { + stream->WriteByte(136); + WriteValue(EncodableValue( + std::any_cast(*custom_value) + .ToEncodableList()), + stream); + return; + } + if (custom_value->type() == typeid(InternalAuthCredential)) { + stream->WriteByte(137); + WriteValue( + EncodableValue(std::any_cast(*custom_value) + .ToEncodableList()), + stream); + return; + } + if (custom_value->type() == typeid(InternalUserInfo)) { + stream->WriteByte(138); + WriteValue( + EncodableValue( + std::any_cast(*custom_value).ToEncodableList()), + stream); + return; + } + if (custom_value->type() == typeid(InternalUserDetails)) { + stream->WriteByte(139); + WriteValue( + EncodableValue(std::any_cast(*custom_value) + .ToEncodableList()), + stream); + return; + } + if (custom_value->type() == typeid(InternalUserCredential)) { + stream->WriteByte(140); + WriteValue( + EncodableValue(std::any_cast(*custom_value) + .ToEncodableList()), + stream); + return; + } + if (custom_value->type() == typeid(InternalAuthCredentialInput)) { + stream->WriteByte(141); + WriteValue(EncodableValue( + std::any_cast(*custom_value) + .ToEncodableList()), + stream); + return; + } + if (custom_value->type() == typeid(InternalActionCodeSettings)) { + stream->WriteByte(142); + WriteValue(EncodableValue( + std::any_cast(*custom_value) + .ToEncodableList()), + stream); + return; + } + if (custom_value->type() == typeid(InternalFirebaseAuthSettings)) { + stream->WriteByte(143); + WriteValue(EncodableValue( + std::any_cast(*custom_value) + .ToEncodableList()), + stream); + return; + } + if (custom_value->type() == typeid(InternalSignInProvider)) { + stream->WriteByte(144); + WriteValue( + EncodableValue(std::any_cast(*custom_value) + .ToEncodableList()), + stream); + return; + } + if (custom_value->type() == typeid(InternalVerifyPhoneNumberRequest)) { + stream->WriteByte(145); + WriteValue(EncodableValue(std::any_cast( + *custom_value) + .ToEncodableList()), + stream); + return; + } + if (custom_value->type() == typeid(InternalIdTokenResult)) { + stream->WriteByte(146); + WriteValue( + EncodableValue(std::any_cast(*custom_value) + .ToEncodableList()), + stream); + return; + } + if (custom_value->type() == typeid(InternalUserProfile)) { + stream->WriteByte(147); + WriteValue( + EncodableValue(std::any_cast(*custom_value) + .ToEncodableList()), + stream); + return; + } + if (custom_value->type() == typeid(InternalTotpSecret)) { + stream->WriteByte(148); + WriteValue(EncodableValue(std::any_cast(*custom_value) + .ToEncodableList()), + stream); + return; + } + } + ::flutter::StandardCodecSerializer::WriteValue(value, stream); +} + +/// The codec used by FirebaseAuthHostApi. +const ::flutter::StandardMessageCodec& FirebaseAuthHostApi::GetCodec() { + return ::flutter::StandardMessageCodec::GetInstance( + &PigeonInternalCodecSerializer::GetInstance()); +} + +// Sets up an instance of `FirebaseAuthHostApi` to handle messages through the +// `binary_messenger`. +void FirebaseAuthHostApi::SetUp(::flutter::BinaryMessenger* binary_messenger, + FirebaseAuthHostApi* api) { + FirebaseAuthHostApi::SetUp(binary_messenger, api, ""); +} + +void FirebaseAuthHostApi::SetUp(::flutter::BinaryMessenger* binary_messenger, + FirebaseAuthHostApi* api, + const std::string& message_channel_suffix) { + const std::string prepended_suffix = + message_channel_suffix.length() > 0 + ? std::string(".") + message_channel_suffix + : ""; + { + BasicMessageChannel<> channel( + binary_messenger, + "dev.flutter.pigeon.firebase_auth_platform_interface." + "FirebaseAuthHostApi.registerIdTokenListener" + + prepended_suffix, + &GetCodec()); + if (api != nullptr) { + channel.SetMessageHandler( + [api](const EncodableValue& message, + const ::flutter::MessageReply& reply) { + try { + const auto& args = std::get(message); + const auto& encodable_app_arg = args.at(0); + if (encodable_app_arg.IsNull()) { + reply(WrapError("app_arg unexpectedly null.")); + return; + } + const auto& app_arg = std::any_cast( + std::get(encodable_app_arg)); + api->RegisterIdTokenListener( + app_arg, [reply](ErrorOr&& output) { + if (output.has_error()) { + reply(WrapError(output.error())); + return; + } + EncodableList wrapped; + wrapped.push_back( + EncodableValue(std::move(output).TakeValue())); + reply(EncodableValue(std::move(wrapped))); + }); + } catch (const std::exception& exception) { + reply(WrapError(exception.what())); + } + }); + } else { + channel.SetMessageHandler(nullptr); + } + } + { + BasicMessageChannel<> channel( + binary_messenger, + "dev.flutter.pigeon.firebase_auth_platform_interface." + "FirebaseAuthHostApi.registerAuthStateListener" + + prepended_suffix, + &GetCodec()); + if (api != nullptr) { + channel.SetMessageHandler( + [api](const EncodableValue& message, + const ::flutter::MessageReply& reply) { + try { + const auto& args = std::get(message); + const auto& encodable_app_arg = args.at(0); + if (encodable_app_arg.IsNull()) { + reply(WrapError("app_arg unexpectedly null.")); + return; + } + const auto& app_arg = std::any_cast( + std::get(encodable_app_arg)); + api->RegisterAuthStateListener( + app_arg, [reply](ErrorOr&& output) { + if (output.has_error()) { + reply(WrapError(output.error())); + return; + } + EncodableList wrapped; + wrapped.push_back( + EncodableValue(std::move(output).TakeValue())); + reply(EncodableValue(std::move(wrapped))); + }); + } catch (const std::exception& exception) { + reply(WrapError(exception.what())); + } + }); + } else { + channel.SetMessageHandler(nullptr); + } + } + { + BasicMessageChannel<> channel(binary_messenger, + "dev.flutter.pigeon.firebase_auth_platform_" + "interface.FirebaseAuthHostApi.useEmulator" + + prepended_suffix, + &GetCodec()); + if (api != nullptr) { + channel.SetMessageHandler( + [api](const EncodableValue& message, + const ::flutter::MessageReply& reply) { + try { + const auto& args = std::get(message); + const auto& encodable_app_arg = args.at(0); + if (encodable_app_arg.IsNull()) { + reply(WrapError("app_arg unexpectedly null.")); + return; + } + const auto& app_arg = std::any_cast( + std::get(encodable_app_arg)); + const auto& encodable_host_arg = args.at(1); + if (encodable_host_arg.IsNull()) { + reply(WrapError("host_arg unexpectedly null.")); + return; + } + const auto& host_arg = std::get(encodable_host_arg); + const auto& encodable_port_arg = args.at(2); + if (encodable_port_arg.IsNull()) { + reply(WrapError("port_arg unexpectedly null.")); + return; + } + const int64_t port_arg = encodable_port_arg.LongValue(); + api->UseEmulator(app_arg, host_arg, port_arg, + [reply](std::optional&& output) { + if (output.has_value()) { + reply(WrapError(output.value())); + return; + } + EncodableList wrapped; + wrapped.push_back(EncodableValue()); + reply(EncodableValue(std::move(wrapped))); + }); + } catch (const std::exception& exception) { + reply(WrapError(exception.what())); + } + }); + } else { + channel.SetMessageHandler(nullptr); + } + } + { + BasicMessageChannel<> channel( + binary_messenger, + "dev.flutter.pigeon.firebase_auth_platform_interface." + "FirebaseAuthHostApi.applyActionCode" + + prepended_suffix, + &GetCodec()); + if (api != nullptr) { + channel.SetMessageHandler( + [api](const EncodableValue& message, + const ::flutter::MessageReply& reply) { + try { + const auto& args = std::get(message); + const auto& encodable_app_arg = args.at(0); + if (encodable_app_arg.IsNull()) { + reply(WrapError("app_arg unexpectedly null.")); + return; + } + const auto& app_arg = std::any_cast( + std::get(encodable_app_arg)); + const auto& encodable_code_arg = args.at(1); + if (encodable_code_arg.IsNull()) { + reply(WrapError("code_arg unexpectedly null.")); + return; + } + const auto& code_arg = std::get(encodable_code_arg); + api->ApplyActionCode( + app_arg, code_arg, + [reply](std::optional&& output) { + if (output.has_value()) { + reply(WrapError(output.value())); + return; + } + EncodableList wrapped; + wrapped.push_back(EncodableValue()); + reply(EncodableValue(std::move(wrapped))); + }); + } catch (const std::exception& exception) { + reply(WrapError(exception.what())); + } + }); + } else { + channel.SetMessageHandler(nullptr); + } + } + { + BasicMessageChannel<> channel( + binary_messenger, + "dev.flutter.pigeon.firebase_auth_platform_interface." + "FirebaseAuthHostApi.checkActionCode" + + prepended_suffix, + &GetCodec()); + if (api != nullptr) { + channel.SetMessageHandler( + [api](const EncodableValue& message, + const ::flutter::MessageReply& reply) { + try { + const auto& args = std::get(message); + const auto& encodable_app_arg = args.at(0); + if (encodable_app_arg.IsNull()) { + reply(WrapError("app_arg unexpectedly null.")); + return; + } + const auto& app_arg = std::any_cast( + std::get(encodable_app_arg)); + const auto& encodable_code_arg = args.at(1); + if (encodable_code_arg.IsNull()) { + reply(WrapError("code_arg unexpectedly null.")); + return; + } + const auto& code_arg = std::get(encodable_code_arg); + api->CheckActionCode( + app_arg, code_arg, + [reply](ErrorOr&& output) { + if (output.has_error()) { + reply(WrapError(output.error())); + return; + } + EncodableList wrapped; + wrapped.push_back( + CustomEncodableValue(std::move(output).TakeValue())); + reply(EncodableValue(std::move(wrapped))); + }); + } catch (const std::exception& exception) { + reply(WrapError(exception.what())); + } + }); + } else { + channel.SetMessageHandler(nullptr); + } + } + { + BasicMessageChannel<> channel( + binary_messenger, + "dev.flutter.pigeon.firebase_auth_platform_interface." + "FirebaseAuthHostApi.confirmPasswordReset" + + prepended_suffix, + &GetCodec()); + if (api != nullptr) { + channel.SetMessageHandler( + [api](const EncodableValue& message, + const ::flutter::MessageReply& reply) { + try { + const auto& args = std::get(message); + const auto& encodable_app_arg = args.at(0); + if (encodable_app_arg.IsNull()) { + reply(WrapError("app_arg unexpectedly null.")); + return; + } + const auto& app_arg = std::any_cast( + std::get(encodable_app_arg)); + const auto& encodable_code_arg = args.at(1); + if (encodable_code_arg.IsNull()) { + reply(WrapError("code_arg unexpectedly null.")); + return; + } + const auto& code_arg = std::get(encodable_code_arg); + const auto& encodable_new_password_arg = args.at(2); + if (encodable_new_password_arg.IsNull()) { + reply(WrapError("new_password_arg unexpectedly null.")); + return; + } + const auto& new_password_arg = + std::get(encodable_new_password_arg); + api->ConfirmPasswordReset( + app_arg, code_arg, new_password_arg, + [reply](std::optional&& output) { + if (output.has_value()) { + reply(WrapError(output.value())); + return; + } + EncodableList wrapped; + wrapped.push_back(EncodableValue()); + reply(EncodableValue(std::move(wrapped))); + }); + } catch (const std::exception& exception) { + reply(WrapError(exception.what())); + } + }); + } else { + channel.SetMessageHandler(nullptr); + } + } + { + BasicMessageChannel<> channel( + binary_messenger, + "dev.flutter.pigeon.firebase_auth_platform_interface." + "FirebaseAuthHostApi.createUserWithEmailAndPassword" + + prepended_suffix, + &GetCodec()); + if (api != nullptr) { + channel.SetMessageHandler( + [api](const EncodableValue& message, + const ::flutter::MessageReply& reply) { + try { + const auto& args = std::get(message); + const auto& encodable_app_arg = args.at(0); + if (encodable_app_arg.IsNull()) { + reply(WrapError("app_arg unexpectedly null.")); + return; + } + const auto& app_arg = std::any_cast( + std::get(encodable_app_arg)); + const auto& encodable_email_arg = args.at(1); + if (encodable_email_arg.IsNull()) { + reply(WrapError("email_arg unexpectedly null.")); + return; + } + const auto& email_arg = + std::get(encodable_email_arg); + const auto& encodable_password_arg = args.at(2); + if (encodable_password_arg.IsNull()) { + reply(WrapError("password_arg unexpectedly null.")); + return; + } + const auto& password_arg = + std::get(encodable_password_arg); + api->CreateUserWithEmailAndPassword( + app_arg, email_arg, password_arg, + [reply](ErrorOr&& output) { + if (output.has_error()) { + reply(WrapError(output.error())); + return; + } + EncodableList wrapped; + wrapped.push_back( + CustomEncodableValue(std::move(output).TakeValue())); + reply(EncodableValue(std::move(wrapped))); + }); + } catch (const std::exception& exception) { + reply(WrapError(exception.what())); + } + }); + } else { + channel.SetMessageHandler(nullptr); + } + } + { + BasicMessageChannel<> channel( + binary_messenger, + "dev.flutter.pigeon.firebase_auth_platform_interface." + "FirebaseAuthHostApi.signInAnonymously" + + prepended_suffix, + &GetCodec()); + if (api != nullptr) { + channel.SetMessageHandler( + [api](const EncodableValue& message, + const ::flutter::MessageReply& reply) { + try { + const auto& args = std::get(message); + const auto& encodable_app_arg = args.at(0); + if (encodable_app_arg.IsNull()) { + reply(WrapError("app_arg unexpectedly null.")); + return; + } + const auto& app_arg = std::any_cast( + std::get(encodable_app_arg)); + api->SignInAnonymously( + app_arg, [reply](ErrorOr&& output) { + if (output.has_error()) { + reply(WrapError(output.error())); + return; + } + EncodableList wrapped; + wrapped.push_back( + CustomEncodableValue(std::move(output).TakeValue())); + reply(EncodableValue(std::move(wrapped))); + }); + } catch (const std::exception& exception) { + reply(WrapError(exception.what())); + } + }); + } else { + channel.SetMessageHandler(nullptr); + } + } + { + BasicMessageChannel<> channel( + binary_messenger, + "dev.flutter.pigeon.firebase_auth_platform_interface." + "FirebaseAuthHostApi.signInWithCredential" + + prepended_suffix, + &GetCodec()); + if (api != nullptr) { + channel.SetMessageHandler( + [api](const EncodableValue& message, + const ::flutter::MessageReply& reply) { + try { + const auto& args = std::get(message); + const auto& encodable_app_arg = args.at(0); + if (encodable_app_arg.IsNull()) { + reply(WrapError("app_arg unexpectedly null.")); + return; + } + const auto& app_arg = std::any_cast( + std::get(encodable_app_arg)); + const auto& encodable_input_arg = args.at(1); + if (encodable_input_arg.IsNull()) { + reply(WrapError("input_arg unexpectedly null.")); + return; + } + const auto& input_arg = + std::get(encodable_input_arg); + api->SignInWithCredential( + app_arg, input_arg, + [reply](ErrorOr&& output) { + if (output.has_error()) { + reply(WrapError(output.error())); + return; + } + EncodableList wrapped; + wrapped.push_back( + CustomEncodableValue(std::move(output).TakeValue())); + reply(EncodableValue(std::move(wrapped))); + }); + } catch (const std::exception& exception) { + reply(WrapError(exception.what())); + } + }); + } else { + channel.SetMessageHandler(nullptr); + } + } + { + BasicMessageChannel<> channel( + binary_messenger, + "dev.flutter.pigeon.firebase_auth_platform_interface." + "FirebaseAuthHostApi.signInWithCustomToken" + + prepended_suffix, + &GetCodec()); + if (api != nullptr) { + channel.SetMessageHandler( + [api](const EncodableValue& message, + const ::flutter::MessageReply& reply) { + try { + const auto& args = std::get(message); + const auto& encodable_app_arg = args.at(0); + if (encodable_app_arg.IsNull()) { + reply(WrapError("app_arg unexpectedly null.")); + return; + } + const auto& app_arg = std::any_cast( + std::get(encodable_app_arg)); + const auto& encodable_token_arg = args.at(1); + if (encodable_token_arg.IsNull()) { + reply(WrapError("token_arg unexpectedly null.")); + return; + } + const auto& token_arg = + std::get(encodable_token_arg); + api->SignInWithCustomToken( + app_arg, token_arg, + [reply](ErrorOr&& output) { + if (output.has_error()) { + reply(WrapError(output.error())); + return; + } + EncodableList wrapped; + wrapped.push_back( + CustomEncodableValue(std::move(output).TakeValue())); + reply(EncodableValue(std::move(wrapped))); + }); + } catch (const std::exception& exception) { + reply(WrapError(exception.what())); + } + }); + } else { + channel.SetMessageHandler(nullptr); + } + } + { + BasicMessageChannel<> channel( + binary_messenger, + "dev.flutter.pigeon.firebase_auth_platform_interface." + "FirebaseAuthHostApi.signInWithEmailAndPassword" + + prepended_suffix, + &GetCodec()); + if (api != nullptr) { + channel.SetMessageHandler( + [api](const EncodableValue& message, + const ::flutter::MessageReply& reply) { + try { + const auto& args = std::get(message); + const auto& encodable_app_arg = args.at(0); + if (encodable_app_arg.IsNull()) { + reply(WrapError("app_arg unexpectedly null.")); + return; + } + const auto& app_arg = std::any_cast( + std::get(encodable_app_arg)); + const auto& encodable_email_arg = args.at(1); + if (encodable_email_arg.IsNull()) { + reply(WrapError("email_arg unexpectedly null.")); + return; + } + const auto& email_arg = + std::get(encodable_email_arg); + const auto& encodable_password_arg = args.at(2); + if (encodable_password_arg.IsNull()) { + reply(WrapError("password_arg unexpectedly null.")); + return; + } + const auto& password_arg = + std::get(encodable_password_arg); + api->SignInWithEmailAndPassword( + app_arg, email_arg, password_arg, + [reply](ErrorOr&& output) { + if (output.has_error()) { + reply(WrapError(output.error())); + return; + } + EncodableList wrapped; + wrapped.push_back( + CustomEncodableValue(std::move(output).TakeValue())); + reply(EncodableValue(std::move(wrapped))); + }); + } catch (const std::exception& exception) { + reply(WrapError(exception.what())); + } + }); + } else { + channel.SetMessageHandler(nullptr); + } + } + { + BasicMessageChannel<> channel( + binary_messenger, + "dev.flutter.pigeon.firebase_auth_platform_interface." + "FirebaseAuthHostApi.signInWithEmailLink" + + prepended_suffix, + &GetCodec()); + if (api != nullptr) { + channel.SetMessageHandler( + [api](const EncodableValue& message, + const ::flutter::MessageReply& reply) { + try { + const auto& args = std::get(message); + const auto& encodable_app_arg = args.at(0); + if (encodable_app_arg.IsNull()) { + reply(WrapError("app_arg unexpectedly null.")); + return; + } + const auto& app_arg = std::any_cast( + std::get(encodable_app_arg)); + const auto& encodable_email_arg = args.at(1); + if (encodable_email_arg.IsNull()) { + reply(WrapError("email_arg unexpectedly null.")); + return; + } + const auto& email_arg = + std::get(encodable_email_arg); + const auto& encodable_email_link_arg = args.at(2); + if (encodable_email_link_arg.IsNull()) { + reply(WrapError("email_link_arg unexpectedly null.")); + return; + } + const auto& email_link_arg = + std::get(encodable_email_link_arg); + api->SignInWithEmailLink( + app_arg, email_arg, email_link_arg, + [reply](ErrorOr&& output) { + if (output.has_error()) { + reply(WrapError(output.error())); + return; + } + EncodableList wrapped; + wrapped.push_back( + CustomEncodableValue(std::move(output).TakeValue())); + reply(EncodableValue(std::move(wrapped))); + }); + } catch (const std::exception& exception) { + reply(WrapError(exception.what())); + } + }); + } else { + channel.SetMessageHandler(nullptr); + } + } + { + BasicMessageChannel<> channel( + binary_messenger, + "dev.flutter.pigeon.firebase_auth_platform_interface." + "FirebaseAuthHostApi.signInWithProvider" + + prepended_suffix, + &GetCodec()); + if (api != nullptr) { + channel.SetMessageHandler( + [api](const EncodableValue& message, + const ::flutter::MessageReply& reply) { + try { + const auto& args = std::get(message); + const auto& encodable_app_arg = args.at(0); + if (encodable_app_arg.IsNull()) { + reply(WrapError("app_arg unexpectedly null.")); + return; + } + const auto& app_arg = std::any_cast( + std::get(encodable_app_arg)); + const auto& encodable_sign_in_provider_arg = args.at(1); + if (encodable_sign_in_provider_arg.IsNull()) { + reply(WrapError("sign_in_provider_arg unexpectedly null.")); + return; + } + const auto& sign_in_provider_arg = + std::any_cast( + std::get( + encodable_sign_in_provider_arg)); + api->SignInWithProvider( + app_arg, sign_in_provider_arg, + [reply](ErrorOr&& output) { + if (output.has_error()) { + reply(WrapError(output.error())); + return; + } + EncodableList wrapped; + wrapped.push_back( + CustomEncodableValue(std::move(output).TakeValue())); + reply(EncodableValue(std::move(wrapped))); + }); + } catch (const std::exception& exception) { + reply(WrapError(exception.what())); + } + }); + } else { + channel.SetMessageHandler(nullptr); + } + } + { + BasicMessageChannel<> channel(binary_messenger, + "dev.flutter.pigeon.firebase_auth_platform_" + "interface.FirebaseAuthHostApi.signOut" + + prepended_suffix, + &GetCodec()); + if (api != nullptr) { + channel.SetMessageHandler( + [api](const EncodableValue& message, + const ::flutter::MessageReply& reply) { + try { + const auto& args = std::get(message); + const auto& encodable_app_arg = args.at(0); + if (encodable_app_arg.IsNull()) { + reply(WrapError("app_arg unexpectedly null.")); + return; + } + const auto& app_arg = std::any_cast( + std::get(encodable_app_arg)); + api->SignOut(app_arg, + [reply](std::optional&& output) { + if (output.has_value()) { + reply(WrapError(output.value())); + return; + } + EncodableList wrapped; + wrapped.push_back(EncodableValue()); + reply(EncodableValue(std::move(wrapped))); + }); + } catch (const std::exception& exception) { + reply(WrapError(exception.what())); + } + }); + } else { + channel.SetMessageHandler(nullptr); + } + } + { + BasicMessageChannel<> channel( + binary_messenger, + "dev.flutter.pigeon.firebase_auth_platform_interface." + "FirebaseAuthHostApi.fetchSignInMethodsForEmail" + + prepended_suffix, + &GetCodec()); + if (api != nullptr) { + channel.SetMessageHandler( + [api](const EncodableValue& message, + const ::flutter::MessageReply& reply) { + try { + const auto& args = std::get(message); + const auto& encodable_app_arg = args.at(0); + if (encodable_app_arg.IsNull()) { + reply(WrapError("app_arg unexpectedly null.")); + return; + } + const auto& app_arg = std::any_cast( + std::get(encodable_app_arg)); + const auto& encodable_email_arg = args.at(1); + if (encodable_email_arg.IsNull()) { + reply(WrapError("email_arg unexpectedly null.")); + return; + } + const auto& email_arg = + std::get(encodable_email_arg); + api->FetchSignInMethodsForEmail( + app_arg, email_arg, [reply](ErrorOr&& output) { + if (output.has_error()) { + reply(WrapError(output.error())); + return; + } + EncodableList wrapped; + wrapped.push_back( + EncodableValue(std::move(output).TakeValue())); + reply(EncodableValue(std::move(wrapped))); + }); + } catch (const std::exception& exception) { + reply(WrapError(exception.what())); + } + }); + } else { + channel.SetMessageHandler(nullptr); + } + } + { + BasicMessageChannel<> channel( + binary_messenger, + "dev.flutter.pigeon.firebase_auth_platform_interface." + "FirebaseAuthHostApi.sendPasswordResetEmail" + + prepended_suffix, + &GetCodec()); + if (api != nullptr) { + channel.SetMessageHandler( + [api](const EncodableValue& message, + const ::flutter::MessageReply& reply) { + try { + const auto& args = std::get(message); + const auto& encodable_app_arg = args.at(0); + if (encodable_app_arg.IsNull()) { + reply(WrapError("app_arg unexpectedly null.")); + return; + } + const auto& app_arg = std::any_cast( + std::get(encodable_app_arg)); + const auto& encodable_email_arg = args.at(1); + if (encodable_email_arg.IsNull()) { + reply(WrapError("email_arg unexpectedly null.")); + return; + } + const auto& email_arg = + std::get(encodable_email_arg); + const auto& encodable_action_code_settings_arg = args.at(2); + const auto* action_code_settings_arg = + encodable_action_code_settings_arg.IsNull() + ? nullptr + : &(std::any_cast( + std::get( + encodable_action_code_settings_arg))); + api->SendPasswordResetEmail( + app_arg, email_arg, action_code_settings_arg, + [reply](std::optional&& output) { + if (output.has_value()) { + reply(WrapError(output.value())); + return; + } + EncodableList wrapped; + wrapped.push_back(EncodableValue()); + reply(EncodableValue(std::move(wrapped))); + }); + } catch (const std::exception& exception) { + reply(WrapError(exception.what())); + } + }); + } else { + channel.SetMessageHandler(nullptr); + } + } + { + BasicMessageChannel<> channel( + binary_messenger, + "dev.flutter.pigeon.firebase_auth_platform_interface." + "FirebaseAuthHostApi.sendSignInLinkToEmail" + + prepended_suffix, + &GetCodec()); + if (api != nullptr) { + channel.SetMessageHandler( + [api](const EncodableValue& message, + const ::flutter::MessageReply& reply) { + try { + const auto& args = std::get(message); + const auto& encodable_app_arg = args.at(0); + if (encodable_app_arg.IsNull()) { + reply(WrapError("app_arg unexpectedly null.")); + return; + } + const auto& app_arg = std::any_cast( + std::get(encodable_app_arg)); + const auto& encodable_email_arg = args.at(1); + if (encodable_email_arg.IsNull()) { + reply(WrapError("email_arg unexpectedly null.")); + return; + } + const auto& email_arg = + std::get(encodable_email_arg); + const auto& encodable_action_code_settings_arg = args.at(2); + if (encodable_action_code_settings_arg.IsNull()) { + reply(WrapError("action_code_settings_arg unexpectedly null.")); + return; + } + const auto& action_code_settings_arg = + std::any_cast( + std::get( + encodable_action_code_settings_arg)); + api->SendSignInLinkToEmail( + app_arg, email_arg, action_code_settings_arg, + [reply](std::optional&& output) { + if (output.has_value()) { + reply(WrapError(output.value())); + return; + } + EncodableList wrapped; + wrapped.push_back(EncodableValue()); + reply(EncodableValue(std::move(wrapped))); + }); + } catch (const std::exception& exception) { + reply(WrapError(exception.what())); + } + }); + } else { + channel.SetMessageHandler(nullptr); + } + } + { + BasicMessageChannel<> channel( + binary_messenger, + "dev.flutter.pigeon.firebase_auth_platform_interface." + "FirebaseAuthHostApi.setLanguageCode" + + prepended_suffix, + &GetCodec()); + if (api != nullptr) { + channel.SetMessageHandler( + [api](const EncodableValue& message, + const ::flutter::MessageReply& reply) { + try { + const auto& args = std::get(message); + const auto& encodable_app_arg = args.at(0); + if (encodable_app_arg.IsNull()) { + reply(WrapError("app_arg unexpectedly null.")); + return; + } + const auto& app_arg = std::any_cast( + std::get(encodable_app_arg)); + const auto& encodable_language_code_arg = args.at(1); + const auto* language_code_arg = + std::get_if(&encodable_language_code_arg); + api->SetLanguageCode(app_arg, language_code_arg, + [reply](ErrorOr&& output) { + if (output.has_error()) { + reply(WrapError(output.error())); + return; + } + EncodableList wrapped; + wrapped.push_back(EncodableValue( + std::move(output).TakeValue())); + reply(EncodableValue(std::move(wrapped))); + }); + } catch (const std::exception& exception) { + reply(WrapError(exception.what())); + } + }); + } else { + channel.SetMessageHandler(nullptr); + } + } + { + BasicMessageChannel<> channel(binary_messenger, + "dev.flutter.pigeon.firebase_auth_platform_" + "interface.FirebaseAuthHostApi.setSettings" + + prepended_suffix, + &GetCodec()); + if (api != nullptr) { + channel.SetMessageHandler( + [api](const EncodableValue& message, + const ::flutter::MessageReply& reply) { + try { + const auto& args = std::get(message); + const auto& encodable_app_arg = args.at(0); + if (encodable_app_arg.IsNull()) { + reply(WrapError("app_arg unexpectedly null.")); + return; + } + const auto& app_arg = std::any_cast( + std::get(encodable_app_arg)); + const auto& encodable_settings_arg = args.at(1); + if (encodable_settings_arg.IsNull()) { + reply(WrapError("settings_arg unexpectedly null.")); + return; + } + const auto& settings_arg = + std::any_cast( + std::get(encodable_settings_arg)); + api->SetSettings(app_arg, settings_arg, + [reply](std::optional&& output) { + if (output.has_value()) { + reply(WrapError(output.value())); + return; + } + EncodableList wrapped; + wrapped.push_back(EncodableValue()); + reply(EncodableValue(std::move(wrapped))); + }); + } catch (const std::exception& exception) { + reply(WrapError(exception.what())); + } + }); + } else { + channel.SetMessageHandler(nullptr); + } + } + { + BasicMessageChannel<> channel( + binary_messenger, + "dev.flutter.pigeon.firebase_auth_platform_interface." + "FirebaseAuthHostApi.verifyPasswordResetCode" + + prepended_suffix, + &GetCodec()); + if (api != nullptr) { + channel.SetMessageHandler( + [api](const EncodableValue& message, + const ::flutter::MessageReply& reply) { + try { + const auto& args = std::get(message); + const auto& encodable_app_arg = args.at(0); + if (encodable_app_arg.IsNull()) { + reply(WrapError("app_arg unexpectedly null.")); + return; + } + const auto& app_arg = std::any_cast( + std::get(encodable_app_arg)); + const auto& encodable_code_arg = args.at(1); + if (encodable_code_arg.IsNull()) { + reply(WrapError("code_arg unexpectedly null.")); + return; + } + const auto& code_arg = std::get(encodable_code_arg); + api->VerifyPasswordResetCode( + app_arg, code_arg, [reply](ErrorOr&& output) { + if (output.has_error()) { + reply(WrapError(output.error())); + return; + } + EncodableList wrapped; + wrapped.push_back( + EncodableValue(std::move(output).TakeValue())); + reply(EncodableValue(std::move(wrapped))); + }); + } catch (const std::exception& exception) { + reply(WrapError(exception.what())); + } + }); + } else { + channel.SetMessageHandler(nullptr); + } + } + { + BasicMessageChannel<> channel( + binary_messenger, + "dev.flutter.pigeon.firebase_auth_platform_interface." + "FirebaseAuthHostApi.verifyPhoneNumber" + + prepended_suffix, + &GetCodec()); + if (api != nullptr) { + channel.SetMessageHandler( + [api](const EncodableValue& message, + const ::flutter::MessageReply& reply) { + try { + const auto& args = std::get(message); + const auto& encodable_app_arg = args.at(0); + if (encodable_app_arg.IsNull()) { + reply(WrapError("app_arg unexpectedly null.")); + return; + } + const auto& app_arg = std::any_cast( + std::get(encodable_app_arg)); + const auto& encodable_request_arg = args.at(1); + if (encodable_request_arg.IsNull()) { + reply(WrapError("request_arg unexpectedly null.")); + return; + } + const auto& request_arg = + std::any_cast( + std::get(encodable_request_arg)); + api->VerifyPhoneNumber( + app_arg, request_arg, [reply](ErrorOr&& output) { + if (output.has_error()) { + reply(WrapError(output.error())); + return; + } + EncodableList wrapped; + wrapped.push_back( + EncodableValue(std::move(output).TakeValue())); + reply(EncodableValue(std::move(wrapped))); + }); + } catch (const std::exception& exception) { + reply(WrapError(exception.what())); + } + }); + } else { + channel.SetMessageHandler(nullptr); + } + } + { + BasicMessageChannel<> channel( + binary_messenger, + "dev.flutter.pigeon.firebase_auth_platform_interface." + "FirebaseAuthHostApi.revokeTokenWithAuthorizationCode" + + prepended_suffix, + &GetCodec()); + if (api != nullptr) { + channel.SetMessageHandler( + [api](const EncodableValue& message, + const ::flutter::MessageReply& reply) { + try { + const auto& args = std::get(message); + const auto& encodable_app_arg = args.at(0); + if (encodable_app_arg.IsNull()) { + reply(WrapError("app_arg unexpectedly null.")); + return; + } + const auto& app_arg = std::any_cast( + std::get(encodable_app_arg)); + const auto& encodable_authorization_code_arg = args.at(1); + if (encodable_authorization_code_arg.IsNull()) { + reply(WrapError("authorization_code_arg unexpectedly null.")); + return; + } + const auto& authorization_code_arg = + std::get(encodable_authorization_code_arg); + api->RevokeTokenWithAuthorizationCode( + app_arg, authorization_code_arg, + [reply](std::optional&& output) { + if (output.has_value()) { + reply(WrapError(output.value())); + return; + } + EncodableList wrapped; + wrapped.push_back(EncodableValue()); + reply(EncodableValue(std::move(wrapped))); + }); + } catch (const std::exception& exception) { + reply(WrapError(exception.what())); + } + }); + } else { + channel.SetMessageHandler(nullptr); + } + } + { + BasicMessageChannel<> channel( + binary_messenger, + "dev.flutter.pigeon.firebase_auth_platform_interface." + "FirebaseAuthHostApi.revokeAccessToken" + + prepended_suffix, + &GetCodec()); + if (api != nullptr) { + channel.SetMessageHandler( + [api](const EncodableValue& message, + const ::flutter::MessageReply& reply) { + try { + const auto& args = std::get(message); + const auto& encodable_app_arg = args.at(0); + if (encodable_app_arg.IsNull()) { + reply(WrapError("app_arg unexpectedly null.")); + return; + } + const auto& app_arg = std::any_cast( + std::get(encodable_app_arg)); + const auto& encodable_access_token_arg = args.at(1); + if (encodable_access_token_arg.IsNull()) { + reply(WrapError("access_token_arg unexpectedly null.")); + return; + } + const auto& access_token_arg = + std::get(encodable_access_token_arg); + api->RevokeAccessToken( + app_arg, access_token_arg, + [reply](std::optional&& output) { + if (output.has_value()) { + reply(WrapError(output.value())); + return; + } + EncodableList wrapped; + wrapped.push_back(EncodableValue()); + reply(EncodableValue(std::move(wrapped))); + }); + } catch (const std::exception& exception) { + reply(WrapError(exception.what())); + } + }); + } else { + channel.SetMessageHandler(nullptr); + } + } + { + BasicMessageChannel<> channel( + binary_messenger, + "dev.flutter.pigeon.firebase_auth_platform_interface." + "FirebaseAuthHostApi.initializeRecaptchaConfig" + + prepended_suffix, + &GetCodec()); + if (api != nullptr) { + channel.SetMessageHandler( + [api](const EncodableValue& message, + const ::flutter::MessageReply& reply) { + try { + const auto& args = std::get(message); + const auto& encodable_app_arg = args.at(0); + if (encodable_app_arg.IsNull()) { + reply(WrapError("app_arg unexpectedly null.")); + return; + } + const auto& app_arg = std::any_cast( + std::get(encodable_app_arg)); + api->InitializeRecaptchaConfig( + app_arg, [reply](std::optional&& output) { + if (output.has_value()) { + reply(WrapError(output.value())); + return; + } + EncodableList wrapped; + wrapped.push_back(EncodableValue()); + reply(EncodableValue(std::move(wrapped))); + }); + } catch (const std::exception& exception) { + reply(WrapError(exception.what())); + } + }); + } else { + channel.SetMessageHandler(nullptr); + } + } +} + +EncodableValue FirebaseAuthHostApi::WrapError(std::string_view error_message) { + return EncodableValue( + EncodableList{EncodableValue(std::string(error_message)), + EncodableValue("Error"), EncodableValue()}); +} + +EncodableValue FirebaseAuthHostApi::WrapError(const FlutterError& error) { + return EncodableValue(EncodableList{EncodableValue(error.code()), + EncodableValue(error.message()), + error.details()}); +} + +/// The codec used by FirebaseAuthUserHostApi. +const ::flutter::StandardMessageCodec& FirebaseAuthUserHostApi::GetCodec() { + return ::flutter::StandardMessageCodec::GetInstance( + &PigeonInternalCodecSerializer::GetInstance()); +} + +// Sets up an instance of `FirebaseAuthUserHostApi` to handle messages through +// the `binary_messenger`. +void FirebaseAuthUserHostApi::SetUp( + ::flutter::BinaryMessenger* binary_messenger, + FirebaseAuthUserHostApi* api) { + FirebaseAuthUserHostApi::SetUp(binary_messenger, api, ""); +} + +void FirebaseAuthUserHostApi::SetUp( + ::flutter::BinaryMessenger* binary_messenger, FirebaseAuthUserHostApi* api, + const std::string& message_channel_suffix) { + const std::string prepended_suffix = + message_channel_suffix.length() > 0 + ? std::string(".") + message_channel_suffix + : ""; + { + BasicMessageChannel<> channel(binary_messenger, + "dev.flutter.pigeon.firebase_auth_platform_" + "interface.FirebaseAuthUserHostApi.delete" + + prepended_suffix, + &GetCodec()); + if (api != nullptr) { + channel.SetMessageHandler( + [api](const EncodableValue& message, + const ::flutter::MessageReply& reply) { + try { + const auto& args = std::get(message); + const auto& encodable_app_arg = args.at(0); + if (encodable_app_arg.IsNull()) { + reply(WrapError("app_arg unexpectedly null.")); + return; + } + const auto& app_arg = std::any_cast( + std::get(encodable_app_arg)); + api->Delete(app_arg, + [reply](std::optional&& output) { + if (output.has_value()) { + reply(WrapError(output.value())); + return; + } + EncodableList wrapped; + wrapped.push_back(EncodableValue()); + reply(EncodableValue(std::move(wrapped))); + }); + } catch (const std::exception& exception) { + reply(WrapError(exception.what())); + } + }); + } else { + channel.SetMessageHandler(nullptr); + } + } + { + BasicMessageChannel<> channel( + binary_messenger, + "dev.flutter.pigeon.firebase_auth_platform_interface." + "FirebaseAuthUserHostApi.getIdToken" + + prepended_suffix, + &GetCodec()); + if (api != nullptr) { + channel.SetMessageHandler( + [api](const EncodableValue& message, + const ::flutter::MessageReply& reply) { + try { + const auto& args = std::get(message); + const auto& encodable_app_arg = args.at(0); + if (encodable_app_arg.IsNull()) { + reply(WrapError("app_arg unexpectedly null.")); + return; + } + const auto& app_arg = std::any_cast( + std::get(encodable_app_arg)); + const auto& encodable_force_refresh_arg = args.at(1); + if (encodable_force_refresh_arg.IsNull()) { + reply(WrapError("force_refresh_arg unexpectedly null.")); + return; + } + const auto& force_refresh_arg = + std::get(encodable_force_refresh_arg); + api->GetIdToken(app_arg, force_refresh_arg, + [reply](ErrorOr&& output) { + if (output.has_error()) { + reply(WrapError(output.error())); + return; + } + EncodableList wrapped; + wrapped.push_back(CustomEncodableValue( + std::move(output).TakeValue())); + reply(EncodableValue(std::move(wrapped))); + }); + } catch (const std::exception& exception) { + reply(WrapError(exception.what())); + } + }); + } else { + channel.SetMessageHandler(nullptr); + } + } + { + BasicMessageChannel<> channel( + binary_messenger, + "dev.flutter.pigeon.firebase_auth_platform_interface." + "FirebaseAuthUserHostApi.linkWithCredential" + + prepended_suffix, + &GetCodec()); + if (api != nullptr) { + channel.SetMessageHandler( + [api](const EncodableValue& message, + const ::flutter::MessageReply& reply) { + try { + const auto& args = std::get(message); + const auto& encodable_app_arg = args.at(0); + if (encodable_app_arg.IsNull()) { + reply(WrapError("app_arg unexpectedly null.")); + return; + } + const auto& app_arg = std::any_cast( + std::get(encodable_app_arg)); + const auto& encodable_input_arg = args.at(1); + if (encodable_input_arg.IsNull()) { + reply(WrapError("input_arg unexpectedly null.")); + return; + } + const auto& input_arg = + std::get(encodable_input_arg); + api->LinkWithCredential( + app_arg, input_arg, + [reply](ErrorOr&& output) { + if (output.has_error()) { + reply(WrapError(output.error())); + return; + } + EncodableList wrapped; + wrapped.push_back( + CustomEncodableValue(std::move(output).TakeValue())); + reply(EncodableValue(std::move(wrapped))); + }); + } catch (const std::exception& exception) { + reply(WrapError(exception.what())); + } + }); + } else { + channel.SetMessageHandler(nullptr); + } + } + { + BasicMessageChannel<> channel( + binary_messenger, + "dev.flutter.pigeon.firebase_auth_platform_interface." + "FirebaseAuthUserHostApi.linkWithProvider" + + prepended_suffix, + &GetCodec()); + if (api != nullptr) { + channel.SetMessageHandler( + [api](const EncodableValue& message, + const ::flutter::MessageReply& reply) { + try { + const auto& args = std::get(message); + const auto& encodable_app_arg = args.at(0); + if (encodable_app_arg.IsNull()) { + reply(WrapError("app_arg unexpectedly null.")); + return; + } + const auto& app_arg = std::any_cast( + std::get(encodable_app_arg)); + const auto& encodable_sign_in_provider_arg = args.at(1); + if (encodable_sign_in_provider_arg.IsNull()) { + reply(WrapError("sign_in_provider_arg unexpectedly null.")); + return; + } + const auto& sign_in_provider_arg = + std::any_cast( + std::get( + encodable_sign_in_provider_arg)); + api->LinkWithProvider( + app_arg, sign_in_provider_arg, + [reply](ErrorOr&& output) { + if (output.has_error()) { + reply(WrapError(output.error())); + return; + } + EncodableList wrapped; + wrapped.push_back( + CustomEncodableValue(std::move(output).TakeValue())); + reply(EncodableValue(std::move(wrapped))); + }); + } catch (const std::exception& exception) { + reply(WrapError(exception.what())); + } + }); + } else { + channel.SetMessageHandler(nullptr); + } + } + { + BasicMessageChannel<> channel( + binary_messenger, + "dev.flutter.pigeon.firebase_auth_platform_interface." + "FirebaseAuthUserHostApi.reauthenticateWithCredential" + + prepended_suffix, + &GetCodec()); + if (api != nullptr) { + channel.SetMessageHandler( + [api](const EncodableValue& message, + const ::flutter::MessageReply& reply) { + try { + const auto& args = std::get(message); + const auto& encodable_app_arg = args.at(0); + if (encodable_app_arg.IsNull()) { + reply(WrapError("app_arg unexpectedly null.")); + return; + } + const auto& app_arg = std::any_cast( + std::get(encodable_app_arg)); + const auto& encodable_input_arg = args.at(1); + if (encodable_input_arg.IsNull()) { + reply(WrapError("input_arg unexpectedly null.")); + return; + } + const auto& input_arg = + std::get(encodable_input_arg); + api->ReauthenticateWithCredential( + app_arg, input_arg, + [reply](ErrorOr&& output) { + if (output.has_error()) { + reply(WrapError(output.error())); + return; + } + EncodableList wrapped; + wrapped.push_back( + CustomEncodableValue(std::move(output).TakeValue())); + reply(EncodableValue(std::move(wrapped))); + }); + } catch (const std::exception& exception) { + reply(WrapError(exception.what())); + } + }); + } else { + channel.SetMessageHandler(nullptr); + } + } + { + BasicMessageChannel<> channel( + binary_messenger, + "dev.flutter.pigeon.firebase_auth_platform_interface." + "FirebaseAuthUserHostApi.reauthenticateWithProvider" + + prepended_suffix, + &GetCodec()); + if (api != nullptr) { + channel.SetMessageHandler( + [api](const EncodableValue& message, + const ::flutter::MessageReply& reply) { + try { + const auto& args = std::get(message); + const auto& encodable_app_arg = args.at(0); + if (encodable_app_arg.IsNull()) { + reply(WrapError("app_arg unexpectedly null.")); + return; + } + const auto& app_arg = std::any_cast( + std::get(encodable_app_arg)); + const auto& encodable_sign_in_provider_arg = args.at(1); + if (encodable_sign_in_provider_arg.IsNull()) { + reply(WrapError("sign_in_provider_arg unexpectedly null.")); + return; + } + const auto& sign_in_provider_arg = + std::any_cast( + std::get( + encodable_sign_in_provider_arg)); + api->ReauthenticateWithProvider( + app_arg, sign_in_provider_arg, + [reply](ErrorOr&& output) { + if (output.has_error()) { + reply(WrapError(output.error())); + return; + } + EncodableList wrapped; + wrapped.push_back( + CustomEncodableValue(std::move(output).TakeValue())); + reply(EncodableValue(std::move(wrapped))); + }); + } catch (const std::exception& exception) { + reply(WrapError(exception.what())); + } + }); + } else { + channel.SetMessageHandler(nullptr); + } + } + { + BasicMessageChannel<> channel(binary_messenger, + "dev.flutter.pigeon.firebase_auth_platform_" + "interface.FirebaseAuthUserHostApi.reload" + + prepended_suffix, + &GetCodec()); + if (api != nullptr) { + channel.SetMessageHandler( + [api](const EncodableValue& message, + const ::flutter::MessageReply& reply) { + try { + const auto& args = std::get(message); + const auto& encodable_app_arg = args.at(0); + if (encodable_app_arg.IsNull()) { + reply(WrapError("app_arg unexpectedly null.")); + return; + } + const auto& app_arg = std::any_cast( + std::get(encodable_app_arg)); + api->Reload( + app_arg, [reply](ErrorOr&& output) { + if (output.has_error()) { + reply(WrapError(output.error())); + return; + } + EncodableList wrapped; + wrapped.push_back( + CustomEncodableValue(std::move(output).TakeValue())); + reply(EncodableValue(std::move(wrapped))); + }); + } catch (const std::exception& exception) { + reply(WrapError(exception.what())); + } + }); + } else { + channel.SetMessageHandler(nullptr); + } + } + { + BasicMessageChannel<> channel( + binary_messenger, + "dev.flutter.pigeon.firebase_auth_platform_interface." + "FirebaseAuthUserHostApi.sendEmailVerification" + + prepended_suffix, + &GetCodec()); + if (api != nullptr) { + channel.SetMessageHandler( + [api](const EncodableValue& message, + const ::flutter::MessageReply& reply) { + try { + const auto& args = std::get(message); + const auto& encodable_app_arg = args.at(0); + if (encodable_app_arg.IsNull()) { + reply(WrapError("app_arg unexpectedly null.")); + return; + } + const auto& app_arg = std::any_cast( + std::get(encodable_app_arg)); + const auto& encodable_action_code_settings_arg = args.at(1); + const auto* action_code_settings_arg = + encodable_action_code_settings_arg.IsNull() + ? nullptr + : &(std::any_cast( + std::get( + encodable_action_code_settings_arg))); + api->SendEmailVerification( + app_arg, action_code_settings_arg, + [reply](std::optional&& output) { + if (output.has_value()) { + reply(WrapError(output.value())); + return; + } + EncodableList wrapped; + wrapped.push_back(EncodableValue()); + reply(EncodableValue(std::move(wrapped))); + }); + } catch (const std::exception& exception) { + reply(WrapError(exception.what())); + } + }); + } else { + channel.SetMessageHandler(nullptr); + } + } + { + BasicMessageChannel<> channel(binary_messenger, + "dev.flutter.pigeon.firebase_auth_platform_" + "interface.FirebaseAuthUserHostApi.unlink" + + prepended_suffix, + &GetCodec()); + if (api != nullptr) { + channel.SetMessageHandler( + [api](const EncodableValue& message, + const ::flutter::MessageReply& reply) { + try { + const auto& args = std::get(message); + const auto& encodable_app_arg = args.at(0); + if (encodable_app_arg.IsNull()) { + reply(WrapError("app_arg unexpectedly null.")); + return; + } + const auto& app_arg = std::any_cast( + std::get(encodable_app_arg)); + const auto& encodable_provider_id_arg = args.at(1); + if (encodable_provider_id_arg.IsNull()) { + reply(WrapError("provider_id_arg unexpectedly null.")); + return; + } + const auto& provider_id_arg = + std::get(encodable_provider_id_arg); + api->Unlink(app_arg, provider_id_arg, + [reply](ErrorOr&& output) { + if (output.has_error()) { + reply(WrapError(output.error())); + return; + } + EncodableList wrapped; + wrapped.push_back(CustomEncodableValue( + std::move(output).TakeValue())); + reply(EncodableValue(std::move(wrapped))); + }); + } catch (const std::exception& exception) { + reply(WrapError(exception.what())); + } + }); + } else { + channel.SetMessageHandler(nullptr); + } + } + { + BasicMessageChannel<> channel( + binary_messenger, + "dev.flutter.pigeon.firebase_auth_platform_interface." + "FirebaseAuthUserHostApi.updateEmail" + + prepended_suffix, + &GetCodec()); + if (api != nullptr) { + channel.SetMessageHandler( + [api](const EncodableValue& message, + const ::flutter::MessageReply& reply) { + try { + const auto& args = std::get(message); + const auto& encodable_app_arg = args.at(0); + if (encodable_app_arg.IsNull()) { + reply(WrapError("app_arg unexpectedly null.")); + return; + } + const auto& app_arg = std::any_cast( + std::get(encodable_app_arg)); + const auto& encodable_new_email_arg = args.at(1); + if (encodable_new_email_arg.IsNull()) { + reply(WrapError("new_email_arg unexpectedly null.")); + return; + } + const auto& new_email_arg = + std::get(encodable_new_email_arg); + api->UpdateEmail(app_arg, new_email_arg, + [reply](ErrorOr&& output) { + if (output.has_error()) { + reply(WrapError(output.error())); + return; + } + EncodableList wrapped; + wrapped.push_back(CustomEncodableValue( + std::move(output).TakeValue())); + reply(EncodableValue(std::move(wrapped))); + }); + } catch (const std::exception& exception) { + reply(WrapError(exception.what())); + } + }); + } else { + channel.SetMessageHandler(nullptr); + } + } + { + BasicMessageChannel<> channel( + binary_messenger, + "dev.flutter.pigeon.firebase_auth_platform_interface." + "FirebaseAuthUserHostApi.updatePassword" + + prepended_suffix, + &GetCodec()); + if (api != nullptr) { + channel.SetMessageHandler( + [api](const EncodableValue& message, + const ::flutter::MessageReply& reply) { + try { + const auto& args = std::get(message); + const auto& encodable_app_arg = args.at(0); + if (encodable_app_arg.IsNull()) { + reply(WrapError("app_arg unexpectedly null.")); + return; + } + const auto& app_arg = std::any_cast( + std::get(encodable_app_arg)); + const auto& encodable_new_password_arg = args.at(1); + if (encodable_new_password_arg.IsNull()) { + reply(WrapError("new_password_arg unexpectedly null.")); + return; + } + const auto& new_password_arg = + std::get(encodable_new_password_arg); + api->UpdatePassword( + app_arg, new_password_arg, + [reply](ErrorOr&& output) { + if (output.has_error()) { + reply(WrapError(output.error())); + return; + } + EncodableList wrapped; + wrapped.push_back( + CustomEncodableValue(std::move(output).TakeValue())); + reply(EncodableValue(std::move(wrapped))); + }); + } catch (const std::exception& exception) { + reply(WrapError(exception.what())); + } + }); + } else { + channel.SetMessageHandler(nullptr); + } + } + { + BasicMessageChannel<> channel( + binary_messenger, + "dev.flutter.pigeon.firebase_auth_platform_interface." + "FirebaseAuthUserHostApi.updatePhoneNumber" + + prepended_suffix, + &GetCodec()); + if (api != nullptr) { + channel.SetMessageHandler( + [api](const EncodableValue& message, + const ::flutter::MessageReply& reply) { + try { + const auto& args = std::get(message); + const auto& encodable_app_arg = args.at(0); + if (encodable_app_arg.IsNull()) { + reply(WrapError("app_arg unexpectedly null.")); + return; + } + const auto& app_arg = std::any_cast( + std::get(encodable_app_arg)); + const auto& encodable_input_arg = args.at(1); + if (encodable_input_arg.IsNull()) { + reply(WrapError("input_arg unexpectedly null.")); + return; + } + const auto& input_arg = + std::get(encodable_input_arg); + api->UpdatePhoneNumber( + app_arg, input_arg, + [reply](ErrorOr&& output) { + if (output.has_error()) { + reply(WrapError(output.error())); + return; + } + EncodableList wrapped; + wrapped.push_back( + CustomEncodableValue(std::move(output).TakeValue())); + reply(EncodableValue(std::move(wrapped))); + }); + } catch (const std::exception& exception) { + reply(WrapError(exception.what())); + } + }); + } else { + channel.SetMessageHandler(nullptr); + } + } + { + BasicMessageChannel<> channel( + binary_messenger, + "dev.flutter.pigeon.firebase_auth_platform_interface." + "FirebaseAuthUserHostApi.updateProfile" + + prepended_suffix, + &GetCodec()); + if (api != nullptr) { + channel.SetMessageHandler( + [api](const EncodableValue& message, + const ::flutter::MessageReply& reply) { + try { + const auto& args = std::get(message); + const auto& encodable_app_arg = args.at(0); + if (encodable_app_arg.IsNull()) { + reply(WrapError("app_arg unexpectedly null.")); + return; + } + const auto& app_arg = std::any_cast( + std::get(encodable_app_arg)); + const auto& encodable_profile_arg = args.at(1); + if (encodable_profile_arg.IsNull()) { + reply(WrapError("profile_arg unexpectedly null.")); + return; + } + const auto& profile_arg = + std::any_cast( + std::get(encodable_profile_arg)); + api->UpdateProfile( + app_arg, profile_arg, + [reply](ErrorOr&& output) { + if (output.has_error()) { + reply(WrapError(output.error())); + return; + } + EncodableList wrapped; + wrapped.push_back( + CustomEncodableValue(std::move(output).TakeValue())); + reply(EncodableValue(std::move(wrapped))); + }); + } catch (const std::exception& exception) { + reply(WrapError(exception.what())); + } + }); + } else { + channel.SetMessageHandler(nullptr); + } + } + { + BasicMessageChannel<> channel( + binary_messenger, + "dev.flutter.pigeon.firebase_auth_platform_interface." + "FirebaseAuthUserHostApi.verifyBeforeUpdateEmail" + + prepended_suffix, + &GetCodec()); + if (api != nullptr) { + channel.SetMessageHandler( + [api](const EncodableValue& message, + const ::flutter::MessageReply& reply) { + try { + const auto& args = std::get(message); + const auto& encodable_app_arg = args.at(0); + if (encodable_app_arg.IsNull()) { + reply(WrapError("app_arg unexpectedly null.")); + return; + } + const auto& app_arg = std::any_cast( + std::get(encodable_app_arg)); + const auto& encodable_new_email_arg = args.at(1); + if (encodable_new_email_arg.IsNull()) { + reply(WrapError("new_email_arg unexpectedly null.")); + return; + } + const auto& new_email_arg = + std::get(encodable_new_email_arg); + const auto& encodable_action_code_settings_arg = args.at(2); + const auto* action_code_settings_arg = + encodable_action_code_settings_arg.IsNull() + ? nullptr + : &(std::any_cast( + std::get( + encodable_action_code_settings_arg))); + api->VerifyBeforeUpdateEmail( + app_arg, new_email_arg, action_code_settings_arg, + [reply](std::optional&& output) { + if (output.has_value()) { + reply(WrapError(output.value())); + return; + } + EncodableList wrapped; + wrapped.push_back(EncodableValue()); + reply(EncodableValue(std::move(wrapped))); + }); + } catch (const std::exception& exception) { + reply(WrapError(exception.what())); + } + }); + } else { + channel.SetMessageHandler(nullptr); + } + } +} + +EncodableValue FirebaseAuthUserHostApi::WrapError( + std::string_view error_message) { + return EncodableValue( + EncodableList{EncodableValue(std::string(error_message)), + EncodableValue("Error"), EncodableValue()}); +} + +EncodableValue FirebaseAuthUserHostApi::WrapError(const FlutterError& error) { + return EncodableValue(EncodableList{EncodableValue(error.code()), + EncodableValue(error.message()), + error.details()}); +} + +/// The codec used by MultiFactorUserHostApi. +const ::flutter::StandardMessageCodec& MultiFactorUserHostApi::GetCodec() { + return ::flutter::StandardMessageCodec::GetInstance( + &PigeonInternalCodecSerializer::GetInstance()); +} + +// Sets up an instance of `MultiFactorUserHostApi` to handle messages through +// the `binary_messenger`. +void MultiFactorUserHostApi::SetUp(::flutter::BinaryMessenger* binary_messenger, + MultiFactorUserHostApi* api) { + MultiFactorUserHostApi::SetUp(binary_messenger, api, ""); +} + +void MultiFactorUserHostApi::SetUp(::flutter::BinaryMessenger* binary_messenger, + MultiFactorUserHostApi* api, + const std::string& message_channel_suffix) { + const std::string prepended_suffix = + message_channel_suffix.length() > 0 + ? std::string(".") + message_channel_suffix + : ""; + { + BasicMessageChannel<> channel( + binary_messenger, + "dev.flutter.pigeon.firebase_auth_platform_interface." + "MultiFactorUserHostApi.enrollPhone" + + prepended_suffix, + &GetCodec()); + if (api != nullptr) { + channel.SetMessageHandler( + [api](const EncodableValue& message, + const ::flutter::MessageReply& reply) { + try { + const auto& args = std::get(message); + const auto& encodable_app_arg = args.at(0); + if (encodable_app_arg.IsNull()) { + reply(WrapError("app_arg unexpectedly null.")); + return; + } + const auto& app_arg = std::any_cast( + std::get(encodable_app_arg)); + const auto& encodable_assertion_arg = args.at(1); + if (encodable_assertion_arg.IsNull()) { + reply(WrapError("assertion_arg unexpectedly null.")); + return; + } + const auto& assertion_arg = + std::any_cast( + std::get(encodable_assertion_arg)); + const auto& encodable_display_name_arg = args.at(2); + const auto* display_name_arg = + std::get_if(&encodable_display_name_arg); + api->EnrollPhone(app_arg, assertion_arg, display_name_arg, + [reply](std::optional&& output) { + if (output.has_value()) { + reply(WrapError(output.value())); + return; + } + EncodableList wrapped; + wrapped.push_back(EncodableValue()); + reply(EncodableValue(std::move(wrapped))); + }); + } catch (const std::exception& exception) { + reply(WrapError(exception.what())); + } + }); + } else { + channel.SetMessageHandler(nullptr); + } + } + { + BasicMessageChannel<> channel( + binary_messenger, + "dev.flutter.pigeon.firebase_auth_platform_interface." + "MultiFactorUserHostApi.enrollTotp" + + prepended_suffix, + &GetCodec()); + if (api != nullptr) { + channel.SetMessageHandler( + [api](const EncodableValue& message, + const ::flutter::MessageReply& reply) { + try { + const auto& args = std::get(message); + const auto& encodable_app_arg = args.at(0); + if (encodable_app_arg.IsNull()) { + reply(WrapError("app_arg unexpectedly null.")); + return; + } + const auto& app_arg = std::any_cast( + std::get(encodable_app_arg)); + const auto& encodable_assertion_id_arg = args.at(1); + if (encodable_assertion_id_arg.IsNull()) { + reply(WrapError("assertion_id_arg unexpectedly null.")); + return; + } + const auto& assertion_id_arg = + std::get(encodable_assertion_id_arg); + const auto& encodable_display_name_arg = args.at(2); + const auto* display_name_arg = + std::get_if(&encodable_display_name_arg); + api->EnrollTotp(app_arg, assertion_id_arg, display_name_arg, + [reply](std::optional&& output) { + if (output.has_value()) { + reply(WrapError(output.value())); + return; + } + EncodableList wrapped; + wrapped.push_back(EncodableValue()); + reply(EncodableValue(std::move(wrapped))); + }); + } catch (const std::exception& exception) { + reply(WrapError(exception.what())); + } + }); + } else { + channel.SetMessageHandler(nullptr); + } + } + { + BasicMessageChannel<> channel( + binary_messenger, + "dev.flutter.pigeon.firebase_auth_platform_interface." + "MultiFactorUserHostApi.getSession" + + prepended_suffix, + &GetCodec()); + if (api != nullptr) { + channel.SetMessageHandler( + [api](const EncodableValue& message, + const ::flutter::MessageReply& reply) { + try { + const auto& args = std::get(message); + const auto& encodable_app_arg = args.at(0); + if (encodable_app_arg.IsNull()) { + reply(WrapError("app_arg unexpectedly null.")); + return; + } + const auto& app_arg = std::any_cast( + std::get(encodable_app_arg)); + api->GetSession( + app_arg, + [reply](ErrorOr&& output) { + if (output.has_error()) { + reply(WrapError(output.error())); + return; + } + EncodableList wrapped; + wrapped.push_back( + CustomEncodableValue(std::move(output).TakeValue())); + reply(EncodableValue(std::move(wrapped))); + }); + } catch (const std::exception& exception) { + reply(WrapError(exception.what())); + } + }); + } else { + channel.SetMessageHandler(nullptr); + } + } + { + BasicMessageChannel<> channel(binary_messenger, + "dev.flutter.pigeon.firebase_auth_platform_" + "interface.MultiFactorUserHostApi.unenroll" + + prepended_suffix, + &GetCodec()); + if (api != nullptr) { + channel.SetMessageHandler( + [api](const EncodableValue& message, + const ::flutter::MessageReply& reply) { + try { + const auto& args = std::get(message); + const auto& encodable_app_arg = args.at(0); + if (encodable_app_arg.IsNull()) { + reply(WrapError("app_arg unexpectedly null.")); + return; + } + const auto& app_arg = std::any_cast( + std::get(encodable_app_arg)); + const auto& encodable_factor_uid_arg = args.at(1); + if (encodable_factor_uid_arg.IsNull()) { + reply(WrapError("factor_uid_arg unexpectedly null.")); + return; + } + const auto& factor_uid_arg = + std::get(encodable_factor_uid_arg); + api->Unenroll(app_arg, factor_uid_arg, + [reply](std::optional&& output) { + if (output.has_value()) { + reply(WrapError(output.value())); + return; + } + EncodableList wrapped; + wrapped.push_back(EncodableValue()); + reply(EncodableValue(std::move(wrapped))); + }); + } catch (const std::exception& exception) { + reply(WrapError(exception.what())); + } + }); + } else { + channel.SetMessageHandler(nullptr); + } + } + { + BasicMessageChannel<> channel( + binary_messenger, + "dev.flutter.pigeon.firebase_auth_platform_interface." + "MultiFactorUserHostApi.getEnrolledFactors" + + prepended_suffix, + &GetCodec()); + if (api != nullptr) { + channel.SetMessageHandler( + [api](const EncodableValue& message, + const ::flutter::MessageReply& reply) { + try { + const auto& args = std::get(message); + const auto& encodable_app_arg = args.at(0); + if (encodable_app_arg.IsNull()) { + reply(WrapError("app_arg unexpectedly null.")); + return; + } + const auto& app_arg = std::any_cast( + std::get(encodable_app_arg)); + api->GetEnrolledFactors( + app_arg, [reply](ErrorOr&& output) { + if (output.has_error()) { + reply(WrapError(output.error())); + return; + } + EncodableList wrapped; + wrapped.push_back( + EncodableValue(std::move(output).TakeValue())); + reply(EncodableValue(std::move(wrapped))); + }); + } catch (const std::exception& exception) { + reply(WrapError(exception.what())); + } + }); + } else { + channel.SetMessageHandler(nullptr); + } + } +} + +EncodableValue MultiFactorUserHostApi::WrapError( + std::string_view error_message) { + return EncodableValue( + EncodableList{EncodableValue(std::string(error_message)), + EncodableValue("Error"), EncodableValue()}); +} + +EncodableValue MultiFactorUserHostApi::WrapError(const FlutterError& error) { + return EncodableValue(EncodableList{EncodableValue(error.code()), + EncodableValue(error.message()), + error.details()}); +} + +/// The codec used by MultiFactoResolverHostApi. +const ::flutter::StandardMessageCodec& MultiFactoResolverHostApi::GetCodec() { + return ::flutter::StandardMessageCodec::GetInstance( + &PigeonInternalCodecSerializer::GetInstance()); +} + +// Sets up an instance of `MultiFactoResolverHostApi` to handle messages through +// the `binary_messenger`. +void MultiFactoResolverHostApi::SetUp( + ::flutter::BinaryMessenger* binary_messenger, + MultiFactoResolverHostApi* api) { + MultiFactoResolverHostApi::SetUp(binary_messenger, api, ""); +} + +void MultiFactoResolverHostApi::SetUp( + ::flutter::BinaryMessenger* binary_messenger, + MultiFactoResolverHostApi* api, const std::string& message_channel_suffix) { + const std::string prepended_suffix = + message_channel_suffix.length() > 0 + ? std::string(".") + message_channel_suffix + : ""; + { + BasicMessageChannel<> channel( + binary_messenger, + "dev.flutter.pigeon.firebase_auth_platform_interface." + "MultiFactoResolverHostApi.resolveSignIn" + + prepended_suffix, + &GetCodec()); + if (api != nullptr) { + channel.SetMessageHandler([api](const EncodableValue& message, + const ::flutter::MessageReply< + EncodableValue>& reply) { + try { + const auto& args = std::get(message); + const auto& encodable_resolver_id_arg = args.at(0); + if (encodable_resolver_id_arg.IsNull()) { + reply(WrapError("resolver_id_arg unexpectedly null.")); + return; + } + const auto& resolver_id_arg = + std::get(encodable_resolver_id_arg); + const auto& encodable_assertion_arg = args.at(1); + const auto* assertion_arg = + encodable_assertion_arg.IsNull() + ? nullptr + : &(std::any_cast( + std::get( + encodable_assertion_arg))); + const auto& encodable_totp_assertion_id_arg = args.at(2); + const auto* totp_assertion_id_arg = + std::get_if(&encodable_totp_assertion_id_arg); + api->ResolveSignIn( + resolver_id_arg, assertion_arg, totp_assertion_id_arg, + [reply](ErrorOr&& output) { + if (output.has_error()) { + reply(WrapError(output.error())); + return; + } + EncodableList wrapped; + wrapped.push_back( + CustomEncodableValue(std::move(output).TakeValue())); + reply(EncodableValue(std::move(wrapped))); + }); + } catch (const std::exception& exception) { + reply(WrapError(exception.what())); + } + }); + } else { + channel.SetMessageHandler(nullptr); + } + } +} + +EncodableValue MultiFactoResolverHostApi::WrapError( + std::string_view error_message) { + return EncodableValue( + EncodableList{EncodableValue(std::string(error_message)), + EncodableValue("Error"), EncodableValue()}); +} + +EncodableValue MultiFactoResolverHostApi::WrapError(const FlutterError& error) { + return EncodableValue(EncodableList{EncodableValue(error.code()), + EncodableValue(error.message()), + error.details()}); +} + +/// The codec used by MultiFactorTotpHostApi. +const ::flutter::StandardMessageCodec& MultiFactorTotpHostApi::GetCodec() { + return ::flutter::StandardMessageCodec::GetInstance( + &PigeonInternalCodecSerializer::GetInstance()); +} + +// Sets up an instance of `MultiFactorTotpHostApi` to handle messages through +// the `binary_messenger`. +void MultiFactorTotpHostApi::SetUp(::flutter::BinaryMessenger* binary_messenger, + MultiFactorTotpHostApi* api) { + MultiFactorTotpHostApi::SetUp(binary_messenger, api, ""); +} + +void MultiFactorTotpHostApi::SetUp(::flutter::BinaryMessenger* binary_messenger, + MultiFactorTotpHostApi* api, + const std::string& message_channel_suffix) { + const std::string prepended_suffix = + message_channel_suffix.length() > 0 + ? std::string(".") + message_channel_suffix + : ""; + { + BasicMessageChannel<> channel( + binary_messenger, + "dev.flutter.pigeon.firebase_auth_platform_interface." + "MultiFactorTotpHostApi.generateSecret" + + prepended_suffix, + &GetCodec()); + if (api != nullptr) { + channel.SetMessageHandler( + [api](const EncodableValue& message, + const ::flutter::MessageReply& reply) { + try { + const auto& args = std::get(message); + const auto& encodable_session_id_arg = args.at(0); + if (encodable_session_id_arg.IsNull()) { + reply(WrapError("session_id_arg unexpectedly null.")); + return; + } + const auto& session_id_arg = + std::get(encodable_session_id_arg); + api->GenerateSecret( + session_id_arg, + [reply](ErrorOr&& output) { + if (output.has_error()) { + reply(WrapError(output.error())); + return; + } + EncodableList wrapped; + wrapped.push_back( + CustomEncodableValue(std::move(output).TakeValue())); + reply(EncodableValue(std::move(wrapped))); + }); + } catch (const std::exception& exception) { + reply(WrapError(exception.what())); + } + }); + } else { + channel.SetMessageHandler(nullptr); + } + } + { + BasicMessageChannel<> channel( + binary_messenger, + "dev.flutter.pigeon.firebase_auth_platform_interface." + "MultiFactorTotpHostApi.getAssertionForEnrollment" + + prepended_suffix, + &GetCodec()); + if (api != nullptr) { + channel.SetMessageHandler( + [api](const EncodableValue& message, + const ::flutter::MessageReply& reply) { + try { + const auto& args = std::get(message); + const auto& encodable_secret_key_arg = args.at(0); + if (encodable_secret_key_arg.IsNull()) { + reply(WrapError("secret_key_arg unexpectedly null.")); + return; + } + const auto& secret_key_arg = + std::get(encodable_secret_key_arg); + const auto& encodable_one_time_password_arg = args.at(1); + if (encodable_one_time_password_arg.IsNull()) { + reply(WrapError("one_time_password_arg unexpectedly null.")); + return; + } + const auto& one_time_password_arg = + std::get(encodable_one_time_password_arg); + api->GetAssertionForEnrollment( + secret_key_arg, one_time_password_arg, + [reply](ErrorOr&& output) { + if (output.has_error()) { + reply(WrapError(output.error())); + return; + } + EncodableList wrapped; + wrapped.push_back( + EncodableValue(std::move(output).TakeValue())); + reply(EncodableValue(std::move(wrapped))); + }); + } catch (const std::exception& exception) { + reply(WrapError(exception.what())); + } + }); + } else { + channel.SetMessageHandler(nullptr); + } + } + { + BasicMessageChannel<> channel( + binary_messenger, + "dev.flutter.pigeon.firebase_auth_platform_interface." + "MultiFactorTotpHostApi.getAssertionForSignIn" + + prepended_suffix, + &GetCodec()); + if (api != nullptr) { + channel.SetMessageHandler( + [api](const EncodableValue& message, + const ::flutter::MessageReply& reply) { + try { + const auto& args = std::get(message); + const auto& encodable_enrollment_id_arg = args.at(0); + if (encodable_enrollment_id_arg.IsNull()) { + reply(WrapError("enrollment_id_arg unexpectedly null.")); + return; + } + const auto& enrollment_id_arg = + std::get(encodable_enrollment_id_arg); + const auto& encodable_one_time_password_arg = args.at(1); + if (encodable_one_time_password_arg.IsNull()) { + reply(WrapError("one_time_password_arg unexpectedly null.")); + return; + } + const auto& one_time_password_arg = + std::get(encodable_one_time_password_arg); + api->GetAssertionForSignIn( + enrollment_id_arg, one_time_password_arg, + [reply](ErrorOr&& output) { + if (output.has_error()) { + reply(WrapError(output.error())); + return; + } + EncodableList wrapped; + wrapped.push_back( + EncodableValue(std::move(output).TakeValue())); + reply(EncodableValue(std::move(wrapped))); + }); + } catch (const std::exception& exception) { + reply(WrapError(exception.what())); + } + }); + } else { + channel.SetMessageHandler(nullptr); + } + } +} + +EncodableValue MultiFactorTotpHostApi::WrapError( + std::string_view error_message) { + return EncodableValue( + EncodableList{EncodableValue(std::string(error_message)), + EncodableValue("Error"), EncodableValue()}); +} + +EncodableValue MultiFactorTotpHostApi::WrapError(const FlutterError& error) { + return EncodableValue(EncodableList{EncodableValue(error.code()), + EncodableValue(error.message()), + error.details()}); +} + +/// The codec used by MultiFactorTotpSecretHostApi. +const ::flutter::StandardMessageCodec& +MultiFactorTotpSecretHostApi::GetCodec() { + return ::flutter::StandardMessageCodec::GetInstance( + &PigeonInternalCodecSerializer::GetInstance()); +} + +// Sets up an instance of `MultiFactorTotpSecretHostApi` to handle messages +// through the `binary_messenger`. +void MultiFactorTotpSecretHostApi::SetUp( + ::flutter::BinaryMessenger* binary_messenger, + MultiFactorTotpSecretHostApi* api) { + MultiFactorTotpSecretHostApi::SetUp(binary_messenger, api, ""); +} + +void MultiFactorTotpSecretHostApi::SetUp( + ::flutter::BinaryMessenger* binary_messenger, + MultiFactorTotpSecretHostApi* api, + const std::string& message_channel_suffix) { + const std::string prepended_suffix = + message_channel_suffix.length() > 0 + ? std::string(".") + message_channel_suffix + : ""; + { + BasicMessageChannel<> channel( + binary_messenger, + "dev.flutter.pigeon.firebase_auth_platform_interface." + "MultiFactorTotpSecretHostApi.generateQrCodeUrl" + + prepended_suffix, + &GetCodec()); + if (api != nullptr) { + channel.SetMessageHandler( + [api](const EncodableValue& message, + const ::flutter::MessageReply& reply) { + try { + const auto& args = std::get(message); + const auto& encodable_secret_key_arg = args.at(0); + if (encodable_secret_key_arg.IsNull()) { + reply(WrapError("secret_key_arg unexpectedly null.")); + return; + } + const auto& secret_key_arg = + std::get(encodable_secret_key_arg); + const auto& encodable_account_name_arg = args.at(1); + const auto* account_name_arg = + std::get_if(&encodable_account_name_arg); + const auto& encodable_issuer_arg = args.at(2); + const auto* issuer_arg = + std::get_if(&encodable_issuer_arg); + api->GenerateQrCodeUrl( + secret_key_arg, account_name_arg, issuer_arg, + [reply](ErrorOr&& output) { + if (output.has_error()) { + reply(WrapError(output.error())); + return; + } + EncodableList wrapped; + wrapped.push_back( + EncodableValue(std::move(output).TakeValue())); + reply(EncodableValue(std::move(wrapped))); + }); + } catch (const std::exception& exception) { + reply(WrapError(exception.what())); + } + }); + } else { + channel.SetMessageHandler(nullptr); + } + } + { + BasicMessageChannel<> channel( + binary_messenger, + "dev.flutter.pigeon.firebase_auth_platform_interface." + "MultiFactorTotpSecretHostApi.openInOtpApp" + + prepended_suffix, + &GetCodec()); + if (api != nullptr) { + channel.SetMessageHandler( + [api](const EncodableValue& message, + const ::flutter::MessageReply& reply) { + try { + const auto& args = std::get(message); + const auto& encodable_secret_key_arg = args.at(0); + if (encodable_secret_key_arg.IsNull()) { + reply(WrapError("secret_key_arg unexpectedly null.")); + return; + } + const auto& secret_key_arg = + std::get(encodable_secret_key_arg); + const auto& encodable_qr_code_url_arg = args.at(1); + if (encodable_qr_code_url_arg.IsNull()) { + reply(WrapError("qr_code_url_arg unexpectedly null.")); + return; + } + const auto& qr_code_url_arg = + std::get(encodable_qr_code_url_arg); + api->OpenInOtpApp(secret_key_arg, qr_code_url_arg, + [reply](std::optional&& output) { + if (output.has_value()) { + reply(WrapError(output.value())); + return; + } + EncodableList wrapped; + wrapped.push_back(EncodableValue()); + reply(EncodableValue(std::move(wrapped))); + }); + } catch (const std::exception& exception) { + reply(WrapError(exception.what())); + } + }); + } else { + channel.SetMessageHandler(nullptr); + } + } +} + +EncodableValue MultiFactorTotpSecretHostApi::WrapError( + std::string_view error_message) { + return EncodableValue( + EncodableList{EncodableValue(std::string(error_message)), + EncodableValue("Error"), EncodableValue()}); +} + +EncodableValue MultiFactorTotpSecretHostApi::WrapError( + const FlutterError& error) { + return EncodableValue(EncodableList{EncodableValue(error.code()), + EncodableValue(error.message()), + error.details()}); +} + +/// The codec used by GenerateInterfaces. +const ::flutter::StandardMessageCodec& GenerateInterfaces::GetCodec() { + return ::flutter::StandardMessageCodec::GetInstance( + &PigeonInternalCodecSerializer::GetInstance()); +} + +// Sets up an instance of `GenerateInterfaces` to handle messages through the +// `binary_messenger`. +void GenerateInterfaces::SetUp(::flutter::BinaryMessenger* binary_messenger, + GenerateInterfaces* api) { + GenerateInterfaces::SetUp(binary_messenger, api, ""); +} + +void GenerateInterfaces::SetUp(::flutter::BinaryMessenger* binary_messenger, + GenerateInterfaces* api, + const std::string& message_channel_suffix) { + const std::string prepended_suffix = + message_channel_suffix.length() > 0 + ? std::string(".") + message_channel_suffix + : ""; + { + BasicMessageChannel<> channel( + binary_messenger, + "dev.flutter.pigeon.firebase_auth_platform_interface." + "GenerateInterfaces.pigeonInterface" + + prepended_suffix, + &GetCodec()); + if (api != nullptr) { + channel.SetMessageHandler( + [api](const EncodableValue& message, + const ::flutter::MessageReply& reply) { + try { + const auto& args = std::get(message); + const auto& encodable_info_arg = args.at(0); + if (encodable_info_arg.IsNull()) { + reply(WrapError("info_arg unexpectedly null.")); + return; + } + const auto& info_arg = + std::any_cast( + std::get(encodable_info_arg)); + std::optional output = + api->PigeonInterface(info_arg); + if (output.has_value()) { + reply(WrapError(output.value())); + return; + } + EncodableList wrapped; + wrapped.push_back(EncodableValue()); + reply(EncodableValue(std::move(wrapped))); + } catch (const std::exception& exception) { + reply(WrapError(exception.what())); + } + }); + } else { + channel.SetMessageHandler(nullptr); + } + } +} + +EncodableValue GenerateInterfaces::WrapError(std::string_view error_message) { + return EncodableValue( + EncodableList{EncodableValue(std::string(error_message)), + EncodableValue("Error"), EncodableValue()}); +} + +EncodableValue GenerateInterfaces::WrapError(const FlutterError& error) { + return EncodableValue(EncodableList{EncodableValue(error.code()), + EncodableValue(error.message()), + error.details()}); +} + +} // namespace firebase_auth_windows diff --git a/mih_ui/android/build/ios/SourcePackages/firebase_auth-6.5.4/windows/messages.g.h b/mih_ui/android/build/ios/SourcePackages/firebase_auth-6.5.4/windows/messages.g.h new file mode 100644 index 00000000..e1e1af02 --- /dev/null +++ b/mih_ui/android/build/ios/SourcePackages/firebase_auth-6.5.4/windows/messages.g.h @@ -0,0 +1,1531 @@ +// Copyright 2023, the Chromium project authors. Please see the AUTHORS file +// for details. All rights reserved. Use of this source code is governed by a +// BSD-style license that can be found in the LICENSE file. +// Autogenerated from Pigeon (v26.3.4), do not edit directly. +// See also: https://pub.dev/packages/pigeon + +#ifndef PIGEON_MESSAGES_G_H_ +#define PIGEON_MESSAGES_G_H_ +#include +#include +#include +#include + +#include +#include +#include + +namespace firebase_auth_windows { + +// Generated class from Pigeon. + +class FlutterError { + public: + explicit FlutterError(const std::string& code) : code_(code) {} + explicit FlutterError(const std::string& code, const std::string& message) + : code_(code), message_(message) {} + explicit FlutterError(const std::string& code, const std::string& message, + const ::flutter::EncodableValue& details) + : code_(code), message_(message), details_(details) {} + + const std::string& code() const { return code_; } + const std::string& message() const { return message_; } + const ::flutter::EncodableValue& details() const { return details_; } + + private: + std::string code_; + std::string message_; + ::flutter::EncodableValue details_; +}; + +template +class ErrorOr { + public: + ErrorOr(const T& rhs) : v_(rhs) {} + ErrorOr(const T&& rhs) : v_(std::move(rhs)) {} + ErrorOr(const FlutterError& rhs) : v_(rhs) {} + ErrorOr(const FlutterError&& rhs) : v_(std::move(rhs)) {} + + bool has_error() const { return std::holds_alternative(v_); } + const T& value() const { return std::get(v_); }; + const FlutterError& error() const { return std::get(v_); }; + + private: + friend class FirebaseAuthHostApi; + friend class FirebaseAuthUserHostApi; + friend class MultiFactorUserHostApi; + friend class MultiFactoResolverHostApi; + friend class MultiFactorTotpHostApi; + friend class MultiFactorTotpSecretHostApi; + friend class GenerateInterfaces; + ErrorOr() = default; + T TakeValue() && { return std::get(std::move(v_)); } + + std::variant v_; +}; + +// The type of operation that generated the action code from calling +// [checkActionCode]. +enum class ActionCodeInfoOperation { + // Unknown operation. + kUnknown = 0, + // Password reset code generated via [sendPasswordResetEmail]. + kPasswordReset = 1, + // Email verification code generated via [User.sendEmailVerification]. + kVerifyEmail = 2, + // Email change revocation code generated via [User.updateEmail]. + kRecoverEmail = 3, + // Email sign in code generated via [sendSignInLinkToEmail]. + kEmailSignIn = 4, + // Verify and change email code generated via [User.verifyBeforeUpdateEmail]. + kVerifyAndChangeEmail = 5, + // Action code for reverting second factor addition. + kRevertSecondFactorAddition = 6 +}; + +// Generated class from Pigeon that represents data sent in messages. +class InternalMultiFactorSession { + public: + // Constructs an object setting all fields. + explicit InternalMultiFactorSession(const std::string& id); + + const std::string& id() const; + void set_id(std::string_view value_arg); + + bool operator==(const InternalMultiFactorSession& other) const; + bool operator!=(const InternalMultiFactorSession& other) const; + /// Returns a hash code value for the object. This method is supported for the + /// benefit of hash tables. + size_t Hash() const; + + private: + static InternalMultiFactorSession FromEncodableList( + const ::flutter::EncodableList& list); + + public: + ::flutter::EncodableList ToEncodableList() const; + + private: + friend class FirebaseAuthHostApi; + friend class FirebaseAuthUserHostApi; + friend class MultiFactorUserHostApi; + friend class MultiFactoResolverHostApi; + friend class MultiFactorTotpHostApi; + friend class MultiFactorTotpSecretHostApi; + friend class GenerateInterfaces; + friend class PigeonInternalCodecSerializer; + std::string id_; +}; + +// Generated class from Pigeon that represents data sent in messages. +class InternalPhoneMultiFactorAssertion { + public: + // Constructs an object setting all fields. + explicit InternalPhoneMultiFactorAssertion( + const std::string& verification_id, const std::string& verification_code); + + const std::string& verification_id() const; + void set_verification_id(std::string_view value_arg); + + const std::string& verification_code() const; + void set_verification_code(std::string_view value_arg); + + bool operator==(const InternalPhoneMultiFactorAssertion& other) const; + bool operator!=(const InternalPhoneMultiFactorAssertion& other) const; + /// Returns a hash code value for the object. This method is supported for the + /// benefit of hash tables. + size_t Hash() const; + + private: + static InternalPhoneMultiFactorAssertion FromEncodableList( + const ::flutter::EncodableList& list); + + public: + ::flutter::EncodableList ToEncodableList() const; + + private: + friend class FirebaseAuthHostApi; + friend class FirebaseAuthUserHostApi; + friend class MultiFactorUserHostApi; + friend class MultiFactoResolverHostApi; + friend class MultiFactorTotpHostApi; + friend class MultiFactorTotpSecretHostApi; + friend class GenerateInterfaces; + friend class PigeonInternalCodecSerializer; + std::string verification_id_; + std::string verification_code_; +}; + +// Generated class from Pigeon that represents data sent in messages. +class InternalMultiFactorInfo { + public: + // Constructs an object setting all non-nullable fields. + explicit InternalMultiFactorInfo(double enrollment_timestamp, + const std::string& uid); + + // Constructs an object setting all fields. + explicit InternalMultiFactorInfo(const std::string* display_name, + double enrollment_timestamp, + const std::string* factor_id, + const std::string& uid, + const std::string* phone_number); + + const std::string* display_name() const; + void set_display_name(const std::string_view* value_arg); + void set_display_name(std::string_view value_arg); + + double enrollment_timestamp() const; + void set_enrollment_timestamp(double value_arg); + + const std::string* factor_id() const; + void set_factor_id(const std::string_view* value_arg); + void set_factor_id(std::string_view value_arg); + + const std::string& uid() const; + void set_uid(std::string_view value_arg); + + const std::string* phone_number() const; + void set_phone_number(const std::string_view* value_arg); + void set_phone_number(std::string_view value_arg); + + bool operator==(const InternalMultiFactorInfo& other) const; + bool operator!=(const InternalMultiFactorInfo& other) const; + /// Returns a hash code value for the object. This method is supported for the + /// benefit of hash tables. + size_t Hash() const; + + private: + static InternalMultiFactorInfo FromEncodableList( + const ::flutter::EncodableList& list); + + public: + ::flutter::EncodableList ToEncodableList() const; + + private: + friend class FirebaseAuthHostApi; + friend class FirebaseAuthUserHostApi; + friend class MultiFactorUserHostApi; + friend class MultiFactoResolverHostApi; + friend class MultiFactorTotpHostApi; + friend class MultiFactorTotpSecretHostApi; + friend class GenerateInterfaces; + friend class PigeonInternalCodecSerializer; + std::optional display_name_; + double enrollment_timestamp_; + std::optional factor_id_; + std::string uid_; + std::optional phone_number_; +}; + +// Generated class from Pigeon that represents data sent in messages. +class AuthPigeonFirebaseApp { + public: + // Constructs an object setting all non-nullable fields. + explicit AuthPigeonFirebaseApp(const std::string& app_name); + + // Constructs an object setting all fields. + explicit AuthPigeonFirebaseApp(const std::string& app_name, + const std::string* tenant_id, + const std::string* custom_auth_domain); + + const std::string& app_name() const; + void set_app_name(std::string_view value_arg); + + const std::string* tenant_id() const; + void set_tenant_id(const std::string_view* value_arg); + void set_tenant_id(std::string_view value_arg); + + const std::string* custom_auth_domain() const; + void set_custom_auth_domain(const std::string_view* value_arg); + void set_custom_auth_domain(std::string_view value_arg); + + bool operator==(const AuthPigeonFirebaseApp& other) const; + bool operator!=(const AuthPigeonFirebaseApp& other) const; + /// Returns a hash code value for the object. This method is supported for the + /// benefit of hash tables. + size_t Hash() const; + + private: + static AuthPigeonFirebaseApp FromEncodableList( + const ::flutter::EncodableList& list); + + public: + ::flutter::EncodableList ToEncodableList() const; + + private: + friend class FirebaseAuthHostApi; + friend class FirebaseAuthUserHostApi; + friend class MultiFactorUserHostApi; + friend class MultiFactoResolverHostApi; + friend class MultiFactorTotpHostApi; + friend class MultiFactorTotpSecretHostApi; + friend class GenerateInterfaces; + friend class PigeonInternalCodecSerializer; + std::string app_name_; + std::optional tenant_id_; + std::optional custom_auth_domain_; +}; + +// Generated class from Pigeon that represents data sent in messages. +class InternalActionCodeInfoData { + public: + // Constructs an object setting all non-nullable fields. + InternalActionCodeInfoData(); + + // Constructs an object setting all fields. + explicit InternalActionCodeInfoData(const std::string* email, + const std::string* previous_email); + + const std::string* email() const; + void set_email(const std::string_view* value_arg); + void set_email(std::string_view value_arg); + + const std::string* previous_email() const; + void set_previous_email(const std::string_view* value_arg); + void set_previous_email(std::string_view value_arg); + + bool operator==(const InternalActionCodeInfoData& other) const; + bool operator!=(const InternalActionCodeInfoData& other) const; + /// Returns a hash code value for the object. This method is supported for the + /// benefit of hash tables. + size_t Hash() const; + + private: + static InternalActionCodeInfoData FromEncodableList( + const ::flutter::EncodableList& list); + + public: + ::flutter::EncodableList ToEncodableList() const; + + private: + friend class InternalActionCodeInfo; + friend class FirebaseAuthHostApi; + friend class FirebaseAuthUserHostApi; + friend class MultiFactorUserHostApi; + friend class MultiFactoResolverHostApi; + friend class MultiFactorTotpHostApi; + friend class MultiFactorTotpSecretHostApi; + friend class GenerateInterfaces; + friend class PigeonInternalCodecSerializer; + std::optional email_; + std::optional previous_email_; +}; + +// Generated class from Pigeon that represents data sent in messages. +class InternalActionCodeInfo { + public: + // Constructs an object setting all fields. + explicit InternalActionCodeInfo(const ActionCodeInfoOperation& operation, + const InternalActionCodeInfoData& data); + + ~InternalActionCodeInfo() = default; + InternalActionCodeInfo(const InternalActionCodeInfo& other); + InternalActionCodeInfo& operator=(const InternalActionCodeInfo& other); + InternalActionCodeInfo(InternalActionCodeInfo&& other) = default; + InternalActionCodeInfo& operator=(InternalActionCodeInfo&& other) noexcept = + default; + const ActionCodeInfoOperation& operation() const; + void set_operation(const ActionCodeInfoOperation& value_arg); + + const InternalActionCodeInfoData& data() const; + void set_data(const InternalActionCodeInfoData& value_arg); + + bool operator==(const InternalActionCodeInfo& other) const; + bool operator!=(const InternalActionCodeInfo& other) const; + /// Returns a hash code value for the object. This method is supported for the + /// benefit of hash tables. + size_t Hash() const; + + private: + static InternalActionCodeInfo FromEncodableList( + const ::flutter::EncodableList& list); + + public: + ::flutter::EncodableList ToEncodableList() const; + + private: + friend class FirebaseAuthHostApi; + friend class FirebaseAuthUserHostApi; + friend class MultiFactorUserHostApi; + friend class MultiFactoResolverHostApi; + friend class MultiFactorTotpHostApi; + friend class MultiFactorTotpSecretHostApi; + friend class GenerateInterfaces; + friend class PigeonInternalCodecSerializer; + ActionCodeInfoOperation operation_; + std::unique_ptr data_; +}; + +// Generated class from Pigeon that represents data sent in messages. +class InternalAdditionalUserInfo { + public: + // Constructs an object setting all non-nullable fields. + explicit InternalAdditionalUserInfo(bool is_new_user); + + // Constructs an object setting all fields. + explicit InternalAdditionalUserInfo(bool is_new_user, + const std::string* provider_id, + const std::string* username, + const std::string* authorization_code, + const ::flutter::EncodableMap* profile); + + bool is_new_user() const; + void set_is_new_user(bool value_arg); + + const std::string* provider_id() const; + void set_provider_id(const std::string_view* value_arg); + void set_provider_id(std::string_view value_arg); + + const std::string* username() const; + void set_username(const std::string_view* value_arg); + void set_username(std::string_view value_arg); + + const std::string* authorization_code() const; + void set_authorization_code(const std::string_view* value_arg); + void set_authorization_code(std::string_view value_arg); + + const ::flutter::EncodableMap* profile() const; + void set_profile(const ::flutter::EncodableMap* value_arg); + void set_profile(const ::flutter::EncodableMap& value_arg); + + bool operator==(const InternalAdditionalUserInfo& other) const; + bool operator!=(const InternalAdditionalUserInfo& other) const; + /// Returns a hash code value for the object. This method is supported for the + /// benefit of hash tables. + size_t Hash() const; + + private: + static InternalAdditionalUserInfo FromEncodableList( + const ::flutter::EncodableList& list); + + public: + ::flutter::EncodableList ToEncodableList() const; + + private: + friend class InternalUserCredential; + friend class FirebaseAuthHostApi; + friend class FirebaseAuthUserHostApi; + friend class MultiFactorUserHostApi; + friend class MultiFactoResolverHostApi; + friend class MultiFactorTotpHostApi; + friend class MultiFactorTotpSecretHostApi; + friend class GenerateInterfaces; + friend class PigeonInternalCodecSerializer; + bool is_new_user_; + std::optional provider_id_; + std::optional username_; + std::optional authorization_code_; + std::optional<::flutter::EncodableMap> profile_; +}; + +// Generated class from Pigeon that represents data sent in messages. +class InternalAuthCredential { + public: + // Constructs an object setting all non-nullable fields. + explicit InternalAuthCredential(const std::string& provider_id, + const std::string& sign_in_method, + int64_t native_id); + + // Constructs an object setting all fields. + explicit InternalAuthCredential(const std::string& provider_id, + const std::string& sign_in_method, + int64_t native_id, + const std::string* access_token); + + const std::string& provider_id() const; + void set_provider_id(std::string_view value_arg); + + const std::string& sign_in_method() const; + void set_sign_in_method(std::string_view value_arg); + + int64_t native_id() const; + void set_native_id(int64_t value_arg); + + const std::string* access_token() const; + void set_access_token(const std::string_view* value_arg); + void set_access_token(std::string_view value_arg); + + bool operator==(const InternalAuthCredential& other) const; + bool operator!=(const InternalAuthCredential& other) const; + /// Returns a hash code value for the object. This method is supported for the + /// benefit of hash tables. + size_t Hash() const; + + private: + static InternalAuthCredential FromEncodableList( + const ::flutter::EncodableList& list); + + public: + ::flutter::EncodableList ToEncodableList() const; + + private: + friend class InternalUserCredential; + friend class FirebaseAuthHostApi; + friend class FirebaseAuthUserHostApi; + friend class MultiFactorUserHostApi; + friend class MultiFactoResolverHostApi; + friend class MultiFactorTotpHostApi; + friend class MultiFactorTotpSecretHostApi; + friend class GenerateInterfaces; + friend class PigeonInternalCodecSerializer; + std::string provider_id_; + std::string sign_in_method_; + int64_t native_id_; + std::optional access_token_; +}; + +// Generated class from Pigeon that represents data sent in messages. +class InternalUserInfo { + public: + // Constructs an object setting all non-nullable fields. + explicit InternalUserInfo(const std::string& uid, bool is_anonymous, + bool is_email_verified); + + // Constructs an object setting all fields. + explicit InternalUserInfo( + const std::string& uid, const std::string* email, + const std::string* display_name, const std::string* photo_url, + const std::string* phone_number, bool is_anonymous, + bool is_email_verified, const std::string* provider_id, + const std::string* tenant_id, const std::string* refresh_token, + const int64_t* creation_timestamp, const int64_t* last_sign_in_timestamp); + + const std::string& uid() const; + void set_uid(std::string_view value_arg); + + const std::string* email() const; + void set_email(const std::string_view* value_arg); + void set_email(std::string_view value_arg); + + const std::string* display_name() const; + void set_display_name(const std::string_view* value_arg); + void set_display_name(std::string_view value_arg); + + const std::string* photo_url() const; + void set_photo_url(const std::string_view* value_arg); + void set_photo_url(std::string_view value_arg); + + const std::string* phone_number() const; + void set_phone_number(const std::string_view* value_arg); + void set_phone_number(std::string_view value_arg); + + bool is_anonymous() const; + void set_is_anonymous(bool value_arg); + + bool is_email_verified() const; + void set_is_email_verified(bool value_arg); + + const std::string* provider_id() const; + void set_provider_id(const std::string_view* value_arg); + void set_provider_id(std::string_view value_arg); + + const std::string* tenant_id() const; + void set_tenant_id(const std::string_view* value_arg); + void set_tenant_id(std::string_view value_arg); + + const std::string* refresh_token() const; + void set_refresh_token(const std::string_view* value_arg); + void set_refresh_token(std::string_view value_arg); + + const int64_t* creation_timestamp() const; + void set_creation_timestamp(const int64_t* value_arg); + void set_creation_timestamp(int64_t value_arg); + + const int64_t* last_sign_in_timestamp() const; + void set_last_sign_in_timestamp(const int64_t* value_arg); + void set_last_sign_in_timestamp(int64_t value_arg); + + bool operator==(const InternalUserInfo& other) const; + bool operator!=(const InternalUserInfo& other) const; + /// Returns a hash code value for the object. This method is supported for the + /// benefit of hash tables. + size_t Hash() const; + + private: + static InternalUserInfo FromEncodableList( + const ::flutter::EncodableList& list); + + public: + ::flutter::EncodableList ToEncodableList() const; + + private: + friend class InternalUserDetails; + friend class FirebaseAuthHostApi; + friend class FirebaseAuthUserHostApi; + friend class MultiFactorUserHostApi; + friend class MultiFactoResolverHostApi; + friend class MultiFactorTotpHostApi; + friend class MultiFactorTotpSecretHostApi; + friend class GenerateInterfaces; + friend class PigeonInternalCodecSerializer; + std::string uid_; + std::optional email_; + std::optional display_name_; + std::optional photo_url_; + std::optional phone_number_; + bool is_anonymous_; + bool is_email_verified_; + std::optional provider_id_; + std::optional tenant_id_; + std::optional refresh_token_; + std::optional creation_timestamp_; + std::optional last_sign_in_timestamp_; +}; + +// Generated class from Pigeon that represents data sent in messages. +class InternalUserDetails { + public: + // Constructs an object setting all fields. + explicit InternalUserDetails(const InternalUserInfo& user_info, + const ::flutter::EncodableList& provider_data); + + ~InternalUserDetails() = default; + InternalUserDetails(const InternalUserDetails& other); + InternalUserDetails& operator=(const InternalUserDetails& other); + InternalUserDetails(InternalUserDetails&& other) = default; + InternalUserDetails& operator=(InternalUserDetails&& other) noexcept = + default; + const InternalUserInfo& user_info() const; + void set_user_info(const InternalUserInfo& value_arg); + + const ::flutter::EncodableList& provider_data() const; + void set_provider_data(const ::flutter::EncodableList& value_arg); + + bool operator==(const InternalUserDetails& other) const; + bool operator!=(const InternalUserDetails& other) const; + /// Returns a hash code value for the object. This method is supported for the + /// benefit of hash tables. + size_t Hash() const; + + private: + static InternalUserDetails FromEncodableList( + const ::flutter::EncodableList& list); + + public: + ::flutter::EncodableList ToEncodableList() const; + + private: + friend class InternalUserCredential; + friend class FirebaseAuthHostApi; + friend class FirebaseAuthUserHostApi; + friend class MultiFactorUserHostApi; + friend class MultiFactoResolverHostApi; + friend class MultiFactorTotpHostApi; + friend class MultiFactorTotpSecretHostApi; + friend class GenerateInterfaces; + friend class PigeonInternalCodecSerializer; + std::unique_ptr user_info_; + ::flutter::EncodableList provider_data_; +}; + +// Generated class from Pigeon that represents data sent in messages. +class InternalUserCredential { + public: + // Constructs an object setting all non-nullable fields. + InternalUserCredential(); + + // Constructs an object setting all fields. + explicit InternalUserCredential( + const InternalUserDetails* user, + const InternalAdditionalUserInfo* additional_user_info, + const InternalAuthCredential* credential); + + ~InternalUserCredential() = default; + InternalUserCredential(const InternalUserCredential& other); + InternalUserCredential& operator=(const InternalUserCredential& other); + InternalUserCredential(InternalUserCredential&& other) = default; + InternalUserCredential& operator=(InternalUserCredential&& other) noexcept = + default; + const InternalUserDetails* user() const; + void set_user(const InternalUserDetails* value_arg); + void set_user(const InternalUserDetails& value_arg); + + const InternalAdditionalUserInfo* additional_user_info() const; + void set_additional_user_info(const InternalAdditionalUserInfo* value_arg); + void set_additional_user_info(const InternalAdditionalUserInfo& value_arg); + + const InternalAuthCredential* credential() const; + void set_credential(const InternalAuthCredential* value_arg); + void set_credential(const InternalAuthCredential& value_arg); + + bool operator==(const InternalUserCredential& other) const; + bool operator!=(const InternalUserCredential& other) const; + /// Returns a hash code value for the object. This method is supported for the + /// benefit of hash tables. + size_t Hash() const; + + private: + static InternalUserCredential FromEncodableList( + const ::flutter::EncodableList& list); + + public: + ::flutter::EncodableList ToEncodableList() const; + + private: + friend class FirebaseAuthHostApi; + friend class FirebaseAuthUserHostApi; + friend class MultiFactorUserHostApi; + friend class MultiFactoResolverHostApi; + friend class MultiFactorTotpHostApi; + friend class MultiFactorTotpSecretHostApi; + friend class GenerateInterfaces; + friend class PigeonInternalCodecSerializer; + std::unique_ptr user_; + std::unique_ptr additional_user_info_; + std::unique_ptr credential_; +}; + +// Generated class from Pigeon that represents data sent in messages. +class InternalAuthCredentialInput { + public: + // Constructs an object setting all non-nullable fields. + explicit InternalAuthCredentialInput(const std::string& provider_id, + const std::string& sign_in_method); + + // Constructs an object setting all fields. + explicit InternalAuthCredentialInput(const std::string& provider_id, + const std::string& sign_in_method, + const std::string* token, + const std::string* access_token); + + const std::string& provider_id() const; + void set_provider_id(std::string_view value_arg); + + const std::string& sign_in_method() const; + void set_sign_in_method(std::string_view value_arg); + + const std::string* token() const; + void set_token(const std::string_view* value_arg); + void set_token(std::string_view value_arg); + + const std::string* access_token() const; + void set_access_token(const std::string_view* value_arg); + void set_access_token(std::string_view value_arg); + + bool operator==(const InternalAuthCredentialInput& other) const; + bool operator!=(const InternalAuthCredentialInput& other) const; + /// Returns a hash code value for the object. This method is supported for the + /// benefit of hash tables. + size_t Hash() const; + + private: + static InternalAuthCredentialInput FromEncodableList( + const ::flutter::EncodableList& list); + + public: + ::flutter::EncodableList ToEncodableList() const; + + private: + friend class FirebaseAuthHostApi; + friend class FirebaseAuthUserHostApi; + friend class MultiFactorUserHostApi; + friend class MultiFactoResolverHostApi; + friend class MultiFactorTotpHostApi; + friend class MultiFactorTotpSecretHostApi; + friend class GenerateInterfaces; + friend class PigeonInternalCodecSerializer; + std::string provider_id_; + std::string sign_in_method_; + std::optional token_; + std::optional access_token_; +}; + +// Generated class from Pigeon that represents data sent in messages. +class InternalActionCodeSettings { + public: + // Constructs an object setting all non-nullable fields. + explicit InternalActionCodeSettings(const std::string& url, + bool handle_code_in_app, + bool android_install_app); + + // Constructs an object setting all fields. + explicit InternalActionCodeSettings( + const std::string& url, const std::string* dynamic_link_domain, + bool handle_code_in_app, const std::string* i_o_s_bundle_id, + const std::string* android_package_name, bool android_install_app, + const std::string* android_minimum_version, + const std::string* link_domain); + + const std::string& url() const; + void set_url(std::string_view value_arg); + + const std::string* dynamic_link_domain() const; + void set_dynamic_link_domain(const std::string_view* value_arg); + void set_dynamic_link_domain(std::string_view value_arg); + + bool handle_code_in_app() const; + void set_handle_code_in_app(bool value_arg); + + const std::string* i_o_s_bundle_id() const; + void set_i_o_s_bundle_id(const std::string_view* value_arg); + void set_i_o_s_bundle_id(std::string_view value_arg); + + const std::string* android_package_name() const; + void set_android_package_name(const std::string_view* value_arg); + void set_android_package_name(std::string_view value_arg); + + bool android_install_app() const; + void set_android_install_app(bool value_arg); + + const std::string* android_minimum_version() const; + void set_android_minimum_version(const std::string_view* value_arg); + void set_android_minimum_version(std::string_view value_arg); + + const std::string* link_domain() const; + void set_link_domain(const std::string_view* value_arg); + void set_link_domain(std::string_view value_arg); + + bool operator==(const InternalActionCodeSettings& other) const; + bool operator!=(const InternalActionCodeSettings& other) const; + /// Returns a hash code value for the object. This method is supported for the + /// benefit of hash tables. + size_t Hash() const; + + private: + static InternalActionCodeSettings FromEncodableList( + const ::flutter::EncodableList& list); + + public: + ::flutter::EncodableList ToEncodableList() const; + + private: + friend class FirebaseAuthHostApi; + friend class FirebaseAuthUserHostApi; + friend class MultiFactorUserHostApi; + friend class MultiFactoResolverHostApi; + friend class MultiFactorTotpHostApi; + friend class MultiFactorTotpSecretHostApi; + friend class GenerateInterfaces; + friend class PigeonInternalCodecSerializer; + std::string url_; + std::optional dynamic_link_domain_; + bool handle_code_in_app_; + std::optional i_o_s_bundle_id_; + std::optional android_package_name_; + bool android_install_app_; + std::optional android_minimum_version_; + std::optional link_domain_; +}; + +// Generated class from Pigeon that represents data sent in messages. +class InternalFirebaseAuthSettings { + public: + // Constructs an object setting all non-nullable fields. + explicit InternalFirebaseAuthSettings( + bool app_verification_disabled_for_testing); + + // Constructs an object setting all fields. + explicit InternalFirebaseAuthSettings( + bool app_verification_disabled_for_testing, + const std::string* user_access_group, const std::string* phone_number, + const std::string* sms_code, const bool* force_recaptcha_flow); + + bool app_verification_disabled_for_testing() const; + void set_app_verification_disabled_for_testing(bool value_arg); + + const std::string* user_access_group() const; + void set_user_access_group(const std::string_view* value_arg); + void set_user_access_group(std::string_view value_arg); + + const std::string* phone_number() const; + void set_phone_number(const std::string_view* value_arg); + void set_phone_number(std::string_view value_arg); + + const std::string* sms_code() const; + void set_sms_code(const std::string_view* value_arg); + void set_sms_code(std::string_view value_arg); + + const bool* force_recaptcha_flow() const; + void set_force_recaptcha_flow(const bool* value_arg); + void set_force_recaptcha_flow(bool value_arg); + + bool operator==(const InternalFirebaseAuthSettings& other) const; + bool operator!=(const InternalFirebaseAuthSettings& other) const; + /// Returns a hash code value for the object. This method is supported for the + /// benefit of hash tables. + size_t Hash() const; + + private: + static InternalFirebaseAuthSettings FromEncodableList( + const ::flutter::EncodableList& list); + + public: + ::flutter::EncodableList ToEncodableList() const; + + private: + friend class FirebaseAuthHostApi; + friend class FirebaseAuthUserHostApi; + friend class MultiFactorUserHostApi; + friend class MultiFactoResolverHostApi; + friend class MultiFactorTotpHostApi; + friend class MultiFactorTotpSecretHostApi; + friend class GenerateInterfaces; + friend class PigeonInternalCodecSerializer; + bool app_verification_disabled_for_testing_; + std::optional user_access_group_; + std::optional phone_number_; + std::optional sms_code_; + std::optional force_recaptcha_flow_; +}; + +// Generated class from Pigeon that represents data sent in messages. +class InternalSignInProvider { + public: + // Constructs an object setting all non-nullable fields. + explicit InternalSignInProvider(const std::string& provider_id); + + // Constructs an object setting all fields. + explicit InternalSignInProvider( + const std::string& provider_id, const ::flutter::EncodableList* scopes, + const ::flutter::EncodableMap* custom_parameters); + + const std::string& provider_id() const; + void set_provider_id(std::string_view value_arg); + + const ::flutter::EncodableList* scopes() const; + void set_scopes(const ::flutter::EncodableList* value_arg); + void set_scopes(const ::flutter::EncodableList& value_arg); + + const ::flutter::EncodableMap* custom_parameters() const; + void set_custom_parameters(const ::flutter::EncodableMap* value_arg); + void set_custom_parameters(const ::flutter::EncodableMap& value_arg); + + bool operator==(const InternalSignInProvider& other) const; + bool operator!=(const InternalSignInProvider& other) const; + /// Returns a hash code value for the object. This method is supported for the + /// benefit of hash tables. + size_t Hash() const; + + private: + static InternalSignInProvider FromEncodableList( + const ::flutter::EncodableList& list); + + public: + ::flutter::EncodableList ToEncodableList() const; + + private: + friend class FirebaseAuthHostApi; + friend class FirebaseAuthUserHostApi; + friend class MultiFactorUserHostApi; + friend class MultiFactoResolverHostApi; + friend class MultiFactorTotpHostApi; + friend class MultiFactorTotpSecretHostApi; + friend class GenerateInterfaces; + friend class PigeonInternalCodecSerializer; + std::string provider_id_; + std::optional<::flutter::EncodableList> scopes_; + std::optional<::flutter::EncodableMap> custom_parameters_; +}; + +// Generated class from Pigeon that represents data sent in messages. +class InternalVerifyPhoneNumberRequest { + public: + // Constructs an object setting all non-nullable fields. + explicit InternalVerifyPhoneNumberRequest(int64_t timeout); + + // Constructs an object setting all fields. + explicit InternalVerifyPhoneNumberRequest( + const std::string* phone_number, int64_t timeout, + const int64_t* force_resending_token, + const std::string* auto_retrieved_sms_code_for_testing, + const std::string* multi_factor_info_id, + const std::string* multi_factor_session_id); + + const std::string* phone_number() const; + void set_phone_number(const std::string_view* value_arg); + void set_phone_number(std::string_view value_arg); + + int64_t timeout() const; + void set_timeout(int64_t value_arg); + + const int64_t* force_resending_token() const; + void set_force_resending_token(const int64_t* value_arg); + void set_force_resending_token(int64_t value_arg); + + const std::string* auto_retrieved_sms_code_for_testing() const; + void set_auto_retrieved_sms_code_for_testing( + const std::string_view* value_arg); + void set_auto_retrieved_sms_code_for_testing(std::string_view value_arg); + + const std::string* multi_factor_info_id() const; + void set_multi_factor_info_id(const std::string_view* value_arg); + void set_multi_factor_info_id(std::string_view value_arg); + + const std::string* multi_factor_session_id() const; + void set_multi_factor_session_id(const std::string_view* value_arg); + void set_multi_factor_session_id(std::string_view value_arg); + + bool operator==(const InternalVerifyPhoneNumberRequest& other) const; + bool operator!=(const InternalVerifyPhoneNumberRequest& other) const; + /// Returns a hash code value for the object. This method is supported for the + /// benefit of hash tables. + size_t Hash() const; + + private: + static InternalVerifyPhoneNumberRequest FromEncodableList( + const ::flutter::EncodableList& list); + + public: + ::flutter::EncodableList ToEncodableList() const; + + private: + friend class FirebaseAuthHostApi; + friend class FirebaseAuthUserHostApi; + friend class MultiFactorUserHostApi; + friend class MultiFactoResolverHostApi; + friend class MultiFactorTotpHostApi; + friend class MultiFactorTotpSecretHostApi; + friend class GenerateInterfaces; + friend class PigeonInternalCodecSerializer; + std::optional phone_number_; + int64_t timeout_; + std::optional force_resending_token_; + std::optional auto_retrieved_sms_code_for_testing_; + std::optional multi_factor_info_id_; + std::optional multi_factor_session_id_; +}; + +// Generated class from Pigeon that represents data sent in messages. +class InternalIdTokenResult { + public: + // Constructs an object setting all non-nullable fields. + InternalIdTokenResult(); + + // Constructs an object setting all fields. + explicit InternalIdTokenResult(const std::string* token, + const int64_t* expiration_timestamp, + const int64_t* auth_timestamp, + const int64_t* issued_at_timestamp, + const std::string* sign_in_provider, + const ::flutter::EncodableMap* claims, + const std::string* sign_in_second_factor); + + const std::string* token() const; + void set_token(const std::string_view* value_arg); + void set_token(std::string_view value_arg); + + const int64_t* expiration_timestamp() const; + void set_expiration_timestamp(const int64_t* value_arg); + void set_expiration_timestamp(int64_t value_arg); + + const int64_t* auth_timestamp() const; + void set_auth_timestamp(const int64_t* value_arg); + void set_auth_timestamp(int64_t value_arg); + + const int64_t* issued_at_timestamp() const; + void set_issued_at_timestamp(const int64_t* value_arg); + void set_issued_at_timestamp(int64_t value_arg); + + const std::string* sign_in_provider() const; + void set_sign_in_provider(const std::string_view* value_arg); + void set_sign_in_provider(std::string_view value_arg); + + const ::flutter::EncodableMap* claims() const; + void set_claims(const ::flutter::EncodableMap* value_arg); + void set_claims(const ::flutter::EncodableMap& value_arg); + + const std::string* sign_in_second_factor() const; + void set_sign_in_second_factor(const std::string_view* value_arg); + void set_sign_in_second_factor(std::string_view value_arg); + + bool operator==(const InternalIdTokenResult& other) const; + bool operator!=(const InternalIdTokenResult& other) const; + /// Returns a hash code value for the object. This method is supported for the + /// benefit of hash tables. + size_t Hash() const; + + private: + static InternalIdTokenResult FromEncodableList( + const ::flutter::EncodableList& list); + + public: + ::flutter::EncodableList ToEncodableList() const; + + private: + friend class FirebaseAuthHostApi; + friend class FirebaseAuthUserHostApi; + friend class MultiFactorUserHostApi; + friend class MultiFactoResolverHostApi; + friend class MultiFactorTotpHostApi; + friend class MultiFactorTotpSecretHostApi; + friend class GenerateInterfaces; + friend class PigeonInternalCodecSerializer; + std::optional token_; + std::optional expiration_timestamp_; + std::optional auth_timestamp_; + std::optional issued_at_timestamp_; + std::optional sign_in_provider_; + std::optional<::flutter::EncodableMap> claims_; + std::optional sign_in_second_factor_; +}; + +// Generated class from Pigeon that represents data sent in messages. +class InternalUserProfile { + public: + // Constructs an object setting all non-nullable fields. + explicit InternalUserProfile(bool display_name_changed, + bool photo_url_changed); + + // Constructs an object setting all fields. + explicit InternalUserProfile(const std::string* display_name, + const std::string* photo_url, + bool display_name_changed, + bool photo_url_changed); + + const std::string* display_name() const; + void set_display_name(const std::string_view* value_arg); + void set_display_name(std::string_view value_arg); + + const std::string* photo_url() const; + void set_photo_url(const std::string_view* value_arg); + void set_photo_url(std::string_view value_arg); + + bool display_name_changed() const; + void set_display_name_changed(bool value_arg); + + bool photo_url_changed() const; + void set_photo_url_changed(bool value_arg); + + bool operator==(const InternalUserProfile& other) const; + bool operator!=(const InternalUserProfile& other) const; + /// Returns a hash code value for the object. This method is supported for the + /// benefit of hash tables. + size_t Hash() const; + + private: + static InternalUserProfile FromEncodableList( + const ::flutter::EncodableList& list); + + public: + ::flutter::EncodableList ToEncodableList() const; + + private: + friend class FirebaseAuthHostApi; + friend class FirebaseAuthUserHostApi; + friend class MultiFactorUserHostApi; + friend class MultiFactoResolverHostApi; + friend class MultiFactorTotpHostApi; + friend class MultiFactorTotpSecretHostApi; + friend class GenerateInterfaces; + friend class PigeonInternalCodecSerializer; + std::optional display_name_; + std::optional photo_url_; + bool display_name_changed_; + bool photo_url_changed_; +}; + +// Generated class from Pigeon that represents data sent in messages. +class InternalTotpSecret { + public: + // Constructs an object setting all non-nullable fields. + explicit InternalTotpSecret(const std::string& secret_key); + + // Constructs an object setting all fields. + explicit InternalTotpSecret(const int64_t* code_interval_seconds, + const int64_t* code_length, + const int64_t* enrollment_completion_deadline, + const std::string* hashing_algorithm, + const std::string& secret_key); + + const int64_t* code_interval_seconds() const; + void set_code_interval_seconds(const int64_t* value_arg); + void set_code_interval_seconds(int64_t value_arg); + + const int64_t* code_length() const; + void set_code_length(const int64_t* value_arg); + void set_code_length(int64_t value_arg); + + const int64_t* enrollment_completion_deadline() const; + void set_enrollment_completion_deadline(const int64_t* value_arg); + void set_enrollment_completion_deadline(int64_t value_arg); + + const std::string* hashing_algorithm() const; + void set_hashing_algorithm(const std::string_view* value_arg); + void set_hashing_algorithm(std::string_view value_arg); + + const std::string& secret_key() const; + void set_secret_key(std::string_view value_arg); + + bool operator==(const InternalTotpSecret& other) const; + bool operator!=(const InternalTotpSecret& other) const; + /// Returns a hash code value for the object. This method is supported for the + /// benefit of hash tables. + size_t Hash() const; + + private: + static InternalTotpSecret FromEncodableList( + const ::flutter::EncodableList& list); + + public: + ::flutter::EncodableList ToEncodableList() const; + + private: + friend class FirebaseAuthHostApi; + friend class FirebaseAuthUserHostApi; + friend class MultiFactorUserHostApi; + friend class MultiFactoResolverHostApi; + friend class MultiFactorTotpHostApi; + friend class MultiFactorTotpSecretHostApi; + friend class GenerateInterfaces; + friend class PigeonInternalCodecSerializer; + std::optional code_interval_seconds_; + std::optional code_length_; + std::optional enrollment_completion_deadline_; + std::optional hashing_algorithm_; + std::string secret_key_; +}; + +class PigeonInternalCodecSerializer + : public ::flutter::StandardCodecSerializer { + public: + PigeonInternalCodecSerializer(); + inline static PigeonInternalCodecSerializer& GetInstance() { + static PigeonInternalCodecSerializer sInstance; + return sInstance; + } + + void WriteValue(const ::flutter::EncodableValue& value, + ::flutter::ByteStreamWriter* stream) const override; + + protected: + ::flutter::EncodableValue ReadValueOfType( + uint8_t type, ::flutter::ByteStreamReader* stream) const override; +}; + +// Generated interface from Pigeon that represents a handler of messages from +// Flutter. +class FirebaseAuthHostApi { + public: + FirebaseAuthHostApi(const FirebaseAuthHostApi&) = delete; + FirebaseAuthHostApi& operator=(const FirebaseAuthHostApi&) = delete; + virtual ~FirebaseAuthHostApi() {} + virtual void RegisterIdTokenListener( + const AuthPigeonFirebaseApp& app, + std::function reply)> result) = 0; + virtual void RegisterAuthStateListener( + const AuthPigeonFirebaseApp& app, + std::function reply)> result) = 0; + virtual void UseEmulator( + const AuthPigeonFirebaseApp& app, const std::string& host, int64_t port, + std::function reply)> result) = 0; + virtual void ApplyActionCode( + const AuthPigeonFirebaseApp& app, const std::string& code, + std::function reply)> result) = 0; + virtual void CheckActionCode( + const AuthPigeonFirebaseApp& app, const std::string& code, + std::function reply)> result) = 0; + virtual void ConfirmPasswordReset( + const AuthPigeonFirebaseApp& app, const std::string& code, + const std::string& new_password, + std::function reply)> result) = 0; + virtual void CreateUserWithEmailAndPassword( + const AuthPigeonFirebaseApp& app, const std::string& email, + const std::string& password, + std::function reply)> result) = 0; + virtual void SignInAnonymously( + const AuthPigeonFirebaseApp& app, + std::function reply)> result) = 0; + virtual void SignInWithCredential( + const AuthPigeonFirebaseApp& app, const ::flutter::EncodableMap& input, + std::function reply)> result) = 0; + virtual void SignInWithCustomToken( + const AuthPigeonFirebaseApp& app, const std::string& token, + std::function reply)> result) = 0; + virtual void SignInWithEmailAndPassword( + const AuthPigeonFirebaseApp& app, const std::string& email, + const std::string& password, + std::function reply)> result) = 0; + virtual void SignInWithEmailLink( + const AuthPigeonFirebaseApp& app, const std::string& email, + const std::string& email_link, + std::function reply)> result) = 0; + virtual void SignInWithProvider( + const AuthPigeonFirebaseApp& app, + const InternalSignInProvider& sign_in_provider, + std::function reply)> result) = 0; + virtual void SignOut( + const AuthPigeonFirebaseApp& app, + std::function reply)> result) = 0; + virtual void FetchSignInMethodsForEmail( + const AuthPigeonFirebaseApp& app, const std::string& email, + std::function reply)> result) = 0; + virtual void SendPasswordResetEmail( + const AuthPigeonFirebaseApp& app, const std::string& email, + const InternalActionCodeSettings* action_code_settings, + std::function reply)> result) = 0; + virtual void SendSignInLinkToEmail( + const AuthPigeonFirebaseApp& app, const std::string& email, + const InternalActionCodeSettings& action_code_settings, + std::function reply)> result) = 0; + virtual void SetLanguageCode( + const AuthPigeonFirebaseApp& app, const std::string* language_code, + std::function reply)> result) = 0; + virtual void SetSettings( + const AuthPigeonFirebaseApp& app, + const InternalFirebaseAuthSettings& settings, + std::function reply)> result) = 0; + virtual void VerifyPasswordResetCode( + const AuthPigeonFirebaseApp& app, const std::string& code, + std::function reply)> result) = 0; + virtual void VerifyPhoneNumber( + const AuthPigeonFirebaseApp& app, + const InternalVerifyPhoneNumberRequest& request, + std::function reply)> result) = 0; + virtual void RevokeTokenWithAuthorizationCode( + const AuthPigeonFirebaseApp& app, const std::string& authorization_code, + std::function reply)> result) = 0; + virtual void RevokeAccessToken( + const AuthPigeonFirebaseApp& app, const std::string& access_token, + std::function reply)> result) = 0; + virtual void InitializeRecaptchaConfig( + const AuthPigeonFirebaseApp& app, + std::function reply)> result) = 0; + + // The codec used by FirebaseAuthHostApi. + static const ::flutter::StandardMessageCodec& GetCodec(); + // Sets up an instance of `FirebaseAuthHostApi` to handle messages through the + // `binary_messenger`. + static void SetUp(::flutter::BinaryMessenger* binary_messenger, + FirebaseAuthHostApi* api); + static void SetUp(::flutter::BinaryMessenger* binary_messenger, + FirebaseAuthHostApi* api, + const std::string& message_channel_suffix); + static ::flutter::EncodableValue WrapError(std::string_view error_message); + static ::flutter::EncodableValue WrapError(const FlutterError& error); + + protected: + FirebaseAuthHostApi() = default; +}; +// Generated interface from Pigeon that represents a handler of messages from +// Flutter. +class FirebaseAuthUserHostApi { + public: + FirebaseAuthUserHostApi(const FirebaseAuthUserHostApi&) = delete; + FirebaseAuthUserHostApi& operator=(const FirebaseAuthUserHostApi&) = delete; + virtual ~FirebaseAuthUserHostApi() {} + virtual void Delete( + const AuthPigeonFirebaseApp& app, + std::function reply)> result) = 0; + virtual void GetIdToken( + const AuthPigeonFirebaseApp& app, bool force_refresh, + std::function reply)> result) = 0; + virtual void LinkWithCredential( + const AuthPigeonFirebaseApp& app, const ::flutter::EncodableMap& input, + std::function reply)> result) = 0; + virtual void LinkWithProvider( + const AuthPigeonFirebaseApp& app, + const InternalSignInProvider& sign_in_provider, + std::function reply)> result) = 0; + virtual void ReauthenticateWithCredential( + const AuthPigeonFirebaseApp& app, const ::flutter::EncodableMap& input, + std::function reply)> result) = 0; + virtual void ReauthenticateWithProvider( + const AuthPigeonFirebaseApp& app, + const InternalSignInProvider& sign_in_provider, + std::function reply)> result) = 0; + virtual void Reload( + const AuthPigeonFirebaseApp& app, + std::function reply)> result) = 0; + virtual void SendEmailVerification( + const AuthPigeonFirebaseApp& app, + const InternalActionCodeSettings* action_code_settings, + std::function reply)> result) = 0; + virtual void Unlink( + const AuthPigeonFirebaseApp& app, const std::string& provider_id, + std::function reply)> result) = 0; + virtual void UpdateEmail( + const AuthPigeonFirebaseApp& app, const std::string& new_email, + std::function reply)> result) = 0; + virtual void UpdatePassword( + const AuthPigeonFirebaseApp& app, const std::string& new_password, + std::function reply)> result) = 0; + virtual void UpdatePhoneNumber( + const AuthPigeonFirebaseApp& app, const ::flutter::EncodableMap& input, + std::function reply)> result) = 0; + virtual void UpdateProfile( + const AuthPigeonFirebaseApp& app, const InternalUserProfile& profile, + std::function reply)> result) = 0; + virtual void VerifyBeforeUpdateEmail( + const AuthPigeonFirebaseApp& app, const std::string& new_email, + const InternalActionCodeSettings* action_code_settings, + std::function reply)> result) = 0; + + // The codec used by FirebaseAuthUserHostApi. + static const ::flutter::StandardMessageCodec& GetCodec(); + // Sets up an instance of `FirebaseAuthUserHostApi` to handle messages through + // the `binary_messenger`. + static void SetUp(::flutter::BinaryMessenger* binary_messenger, + FirebaseAuthUserHostApi* api); + static void SetUp(::flutter::BinaryMessenger* binary_messenger, + FirebaseAuthUserHostApi* api, + const std::string& message_channel_suffix); + static ::flutter::EncodableValue WrapError(std::string_view error_message); + static ::flutter::EncodableValue WrapError(const FlutterError& error); + + protected: + FirebaseAuthUserHostApi() = default; +}; +// Generated interface from Pigeon that represents a handler of messages from +// Flutter. +class MultiFactorUserHostApi { + public: + MultiFactorUserHostApi(const MultiFactorUserHostApi&) = delete; + MultiFactorUserHostApi& operator=(const MultiFactorUserHostApi&) = delete; + virtual ~MultiFactorUserHostApi() {} + virtual void EnrollPhone( + const AuthPigeonFirebaseApp& app, + const InternalPhoneMultiFactorAssertion& assertion, + const std::string* display_name, + std::function reply)> result) = 0; + virtual void EnrollTotp( + const AuthPigeonFirebaseApp& app, const std::string& assertion_id, + const std::string* display_name, + std::function reply)> result) = 0; + virtual void GetSession( + const AuthPigeonFirebaseApp& app, + std::function reply)> + result) = 0; + virtual void Unenroll( + const AuthPigeonFirebaseApp& app, const std::string& factor_uid, + std::function reply)> result) = 0; + virtual void GetEnrolledFactors( + const AuthPigeonFirebaseApp& app, + std::function reply)> result) = 0; + + // The codec used by MultiFactorUserHostApi. + static const ::flutter::StandardMessageCodec& GetCodec(); + // Sets up an instance of `MultiFactorUserHostApi` to handle messages through + // the `binary_messenger`. + static void SetUp(::flutter::BinaryMessenger* binary_messenger, + MultiFactorUserHostApi* api); + static void SetUp(::flutter::BinaryMessenger* binary_messenger, + MultiFactorUserHostApi* api, + const std::string& message_channel_suffix); + static ::flutter::EncodableValue WrapError(std::string_view error_message); + static ::flutter::EncodableValue WrapError(const FlutterError& error); + + protected: + MultiFactorUserHostApi() = default; +}; +// Generated interface from Pigeon that represents a handler of messages from +// Flutter. +class MultiFactoResolverHostApi { + public: + MultiFactoResolverHostApi(const MultiFactoResolverHostApi&) = delete; + MultiFactoResolverHostApi& operator=(const MultiFactoResolverHostApi&) = + delete; + virtual ~MultiFactoResolverHostApi() {} + virtual void ResolveSignIn( + const std::string& resolver_id, + const InternalPhoneMultiFactorAssertion* assertion, + const std::string* totp_assertion_id, + std::function reply)> result) = 0; + + // The codec used by MultiFactoResolverHostApi. + static const ::flutter::StandardMessageCodec& GetCodec(); + // Sets up an instance of `MultiFactoResolverHostApi` to handle messages + // through the `binary_messenger`. + static void SetUp(::flutter::BinaryMessenger* binary_messenger, + MultiFactoResolverHostApi* api); + static void SetUp(::flutter::BinaryMessenger* binary_messenger, + MultiFactoResolverHostApi* api, + const std::string& message_channel_suffix); + static ::flutter::EncodableValue WrapError(std::string_view error_message); + static ::flutter::EncodableValue WrapError(const FlutterError& error); + + protected: + MultiFactoResolverHostApi() = default; +}; +// Generated interface from Pigeon that represents a handler of messages from +// Flutter. +class MultiFactorTotpHostApi { + public: + MultiFactorTotpHostApi(const MultiFactorTotpHostApi&) = delete; + MultiFactorTotpHostApi& operator=(const MultiFactorTotpHostApi&) = delete; + virtual ~MultiFactorTotpHostApi() {} + virtual void GenerateSecret( + const std::string& session_id, + std::function reply)> result) = 0; + virtual void GetAssertionForEnrollment( + const std::string& secret_key, const std::string& one_time_password, + std::function reply)> result) = 0; + virtual void GetAssertionForSignIn( + const std::string& enrollment_id, const std::string& one_time_password, + std::function reply)> result) = 0; + + // The codec used by MultiFactorTotpHostApi. + static const ::flutter::StandardMessageCodec& GetCodec(); + // Sets up an instance of `MultiFactorTotpHostApi` to handle messages through + // the `binary_messenger`. + static void SetUp(::flutter::BinaryMessenger* binary_messenger, + MultiFactorTotpHostApi* api); + static void SetUp(::flutter::BinaryMessenger* binary_messenger, + MultiFactorTotpHostApi* api, + const std::string& message_channel_suffix); + static ::flutter::EncodableValue WrapError(std::string_view error_message); + static ::flutter::EncodableValue WrapError(const FlutterError& error); + + protected: + MultiFactorTotpHostApi() = default; +}; +// Generated interface from Pigeon that represents a handler of messages from +// Flutter. +class MultiFactorTotpSecretHostApi { + public: + MultiFactorTotpSecretHostApi(const MultiFactorTotpSecretHostApi&) = delete; + MultiFactorTotpSecretHostApi& operator=(const MultiFactorTotpSecretHostApi&) = + delete; + virtual ~MultiFactorTotpSecretHostApi() {} + virtual void GenerateQrCodeUrl( + const std::string& secret_key, const std::string* account_name, + const std::string* issuer, + std::function reply)> result) = 0; + virtual void OpenInOtpApp( + const std::string& secret_key, const std::string& qr_code_url, + std::function reply)> result) = 0; + + // The codec used by MultiFactorTotpSecretHostApi. + static const ::flutter::StandardMessageCodec& GetCodec(); + // Sets up an instance of `MultiFactorTotpSecretHostApi` to handle messages + // through the `binary_messenger`. + static void SetUp(::flutter::BinaryMessenger* binary_messenger, + MultiFactorTotpSecretHostApi* api); + static void SetUp(::flutter::BinaryMessenger* binary_messenger, + MultiFactorTotpSecretHostApi* api, + const std::string& message_channel_suffix); + static ::flutter::EncodableValue WrapError(std::string_view error_message); + static ::flutter::EncodableValue WrapError(const FlutterError& error); + + protected: + MultiFactorTotpSecretHostApi() = default; +}; +// Only used to generate the object interface that are use outside of the Pigeon +// interface +// +// Generated interface from Pigeon that represents a handler of messages from +// Flutter. +class GenerateInterfaces { + public: + GenerateInterfaces(const GenerateInterfaces&) = delete; + GenerateInterfaces& operator=(const GenerateInterfaces&) = delete; + virtual ~GenerateInterfaces() {} + virtual std::optional PigeonInterface( + const InternalMultiFactorInfo& info) = 0; + + // The codec used by GenerateInterfaces. + static const ::flutter::StandardMessageCodec& GetCodec(); + // Sets up an instance of `GenerateInterfaces` to handle messages through the + // `binary_messenger`. + static void SetUp(::flutter::BinaryMessenger* binary_messenger, + GenerateInterfaces* api); + static void SetUp(::flutter::BinaryMessenger* binary_messenger, + GenerateInterfaces* api, + const std::string& message_channel_suffix); + static ::flutter::EncodableValue WrapError(std::string_view error_message); + static ::flutter::EncodableValue WrapError(const FlutterError& error); + + protected: + GenerateInterfaces() = default; +}; +} // namespace firebase_auth_windows +#endif // PIGEON_MESSAGES_G_H_ diff --git a/mih_ui/android/build/ios/SourcePackages/firebase_auth-6.5.4/windows/plugin_version.h.in b/mih_ui/android/build/ios/SourcePackages/firebase_auth-6.5.4/windows/plugin_version.h.in new file mode 100644 index 00000000..3a8915c4 --- /dev/null +++ b/mih_ui/android/build/ios/SourcePackages/firebase_auth-6.5.4/windows/plugin_version.h.in @@ -0,0 +1,13 @@ +// Copyright 2023, the Chromium project authors. Please see the AUTHORS file +// for details. All rights reserved. Use of this source code is governed by a +// BSD-style license that can be found in the LICENSE file. + +#ifndef PLUGIN_VERSION_CONFIG_H +#define PLUGIN_VERSION_CONFIG_H + +namespace firebase_auth_windows { + +std::string getPluginVersion() { return "@PLUGIN_VERSION@"; } +} // namespace firebase_auth_windows + +#endif // PLUGIN_VERSION_CONFIG_H diff --git a/mih_ui/android/build/ios/SourcePackages/firebase_auth-6.5.4/windows/test/firebase_auth_plugin_test.cpp b/mih_ui/android/build/ios/SourcePackages/firebase_auth-6.5.4/windows/test/firebase_auth_plugin_test.cpp new file mode 100644 index 00000000..7c8110cf --- /dev/null +++ b/mih_ui/android/build/ios/SourcePackages/firebase_auth-6.5.4/windows/test/firebase_auth_plugin_test.cpp @@ -0,0 +1,47 @@ +// Copyright 2023, the Chromium project authors. Please see the AUTHORS file +// for details. All rights reserved. Use of this source code is governed by a +// BSD-style license that can be found in the LICENSE file. + +#include "firebase_auth_plugin.h" + +#include +#include +#include +#include +#include + +#include +#include +#include + +namespace firebase_auth { +namespace test { + +namespace { + +using flutter::EncodableMap; +using flutter::EncodableValue; +using flutter::MethodCall; +using flutter::MethodResultFunctions; + +} // namespace + +TEST(FirebaseAuthPlugin, GetPlatformVersion) { + FirebaseAuthPlugin plugin; + // Save the reply value from the success callback. + std::string result_string; + plugin.HandleMethodCall( + MethodCall("getPlatformVersion", std::make_unique()), + std::make_unique>( + [&result_string](const EncodableValue* result) { + result_string = std::get(*result); + }, + nullptr, nullptr)); + + // Since the exact string varies by host, just ensure that it's a string + // with the expected format. + EXPECT_TRUE(result_string.rfind("Windows ", 0) == 0); +} + +} // namespace test +} // namespace firebase_auth diff --git a/mih_ui/android/build/ios/SourcePackages/google_mobile_ads-8.0.0/CHANGELOG.md b/mih_ui/android/build/ios/SourcePackages/google_mobile_ads-8.0.0/CHANGELOG.md new file mode 100644 index 00000000..20a205f9 --- /dev/null +++ b/mih_ui/android/build/ios/SourcePackages/google_mobile_ads-8.0.0/CHANGELOG.md @@ -0,0 +1,695 @@ +## 8.0.0 +* Updates minimum Flutter SDK to 3.38.1 +* Updates Dart SDK low bound to 3.10.0. +* Adds Swift Package Manager Support for the plugin. [PR 1395](https://github.com/googleads/googleads-mobile-flutter/pull/1395) +* Adds `isCollapsible` API. [FR 1294](https://github.com/googleads/googleads-mobile-flutter/issues/1294) +* Renamed method name to avoid possible name collision. [FR 1394](https://github.com/googleads/googleads-mobile-flutter/issues/1394) +* Migrated to use UISceneDelegate protocol. [Issue 1391](https://github.com/googleads/googleads-mobile-flutter/issues/1391) +* New to Anchored adaptive banner ads: + * The following APIs have been deprecated for their replacement: + * The `getCurrentOrientationAnchoredAdaptiveBannerAdSize` function is deprecated. Instead, use the `getLargeAnchoredAdaptiveBannerAdSize` function. + * The `getAnchoredAdaptiveBannerAdSize` function is deprecated. Instead, use the `getLargeAnchoredAdaptiveBannerAdSizeWithOrientation` function. +* Updates GMA [Android](https://developers.google.com/admob/android/rel-notes) dependency to 25.1.0 +* Updates GMA [iOS](https://developers.google.com/admob/ios/rel-notes) dependency to 13.2.0 +* Uses latest UMP SDK: + * [Android](https://developers.google.com/admob/android/privacy/release-notes) UMP SDK version 4.0.0. + * [iOS](https://developers.google.com/admob/ios/privacy/download#release_notes) UMP SDK version 3.1.0. + +## 7.0.0 +* Added character limits expected for Native Ad Templates. Issues [1243](https://github.com/googleads/googleads-mobile-flutter/issues/1243) and [1332](https://github.com/googleads/googleads-mobile-flutter/issues/1332) +* Fixed padding for Native Ads small template. [Issue 1357](https://github.com/googleads/googleads-mobile-flutter/issues/1357) +* Updated to use Gradle plugin 9.2.1 [Issue 1361](https://github.com/googleads/googleads-mobile-flutter/issues/1361) +* Updates dependencies. [Issue 1366](https://github.com/googleads/googleads-mobile-flutter/issues/1366) +* Updates GMA [Android](https://developers.google.com/admob/android/rel-notes) dependency to 24.9.0 +* Updates GMA [iOS](https://developers.google.com/admob/ios/rel-notes) dependency to 12.14.0 +* Uses latest UMP SDK: + * [Android](https://developers.google.com/admob/android/privacy/release-notes) UMP SDK version 4.0.0. + * [iOS](https://developers.google.com/admob/ios/privacy/download#release_notes) UMP SDK version 3.1.0. + +## 6.0.0 +* Updates minimum Flutter SDK to 3.27.0 +* Updates Dart SDK low bound to 3.6.0. +* Fixes AdMessageCodec deprecated API issue: https://github.com/googleads/googleads-mobile-flutter/issues/1242 +* Adds a new API (`isMounted`) to support recycling ad banners +* Updates GMA [Android](https://developers.google.com/admob/android/rel-notes) dependency to 24.1.0 +* Updates GMA [iOS](https://developers.google.com/admob/ios/rel-notes) dependency to 12.2.0 +* Uses latest UMP SDK: + * [Android](https://developers.google.com/admob/android/privacy/release-notes) UMP SDK version 3.2.0. + * [iOS](https://developers.google.com/admob/ios/privacy/download#release_notes) UMP SDK version 3.0.0. + +## 5.3.1 +* Fixes dart SDK low bound building issues: https://github.com/googleads/googleads-mobile-flutter/issues/1234 + +## 5.3.0 +* Updated WebView Flutter Android dependency +* Adds support for the new Debug Geography enums for the UMP SDK: + * [Android](https://developers.google.com/admob/android/privacy/release-notes) UMP SDK version 3.1.0. + * [iOS](https://developers.google.com/admob/ios/privacy/download#release_notes) UMP SDK version 2.7.0. +* Updates GMA [iOS](https://developers.google.com/admob/ios/rel-notes) dependency to 11.13.0 +* Updates GMA [Android](https://developers.google.com/admob/android/rel-notes) dependency to 23.6.0 + +## 5.2.0 +* Removed use of rootViewController for iOS GMA SDK which solved issues like + https://github.com/googleads/googleads-mobile-flutter/issues/1146 and https://github.com/googleads/googleads-mobile-flutter/issues/700. +* Android GMA SDK is now initialized on a background thread. +* Updates GMA [iOS](https://developers.google.com/admob/ios/rel-notes) dependency to 11.10.0 +* Updates GMA [Android](https://developers.google.com/admob/android/rel-notes) dependency to 23.4.0 + +## 5.1.0 +* Adds support for APIs from the [Android](https://developers.google.com/admob/android/privacy/release-notes) UMP SDK version 2.2.0. +* Adds support for APIs from the [iOS](https://developers.google.com/admob/ios/privacy/download#release_notes) UMP SDK version 2.4.0. + +## 5.0.0 +* Adds `MediationExtras` class to include parameters when using mediation through the implementation of `FlutterMediationExtras` in Android and `FlutterMediationExtras` in iOS. +* Deprecates `MediationNetworkExtrasProvider` and `FLTMediationNetworkExtrasProvider`. +* Removed the `orientation` parameter for the AppOpen Ad format. +* Bumps minimum Android SDK version to 21. +* Updates GMA iOS dependency to 11.2.0 +* Updates GMA Android dependency to 23.0.0 + +## 4.0.0 +* The minimum supported Flutter version is now 3.7.0. +* Removes `visibility_detector` as a dependency, and the workaround added in + https://github.com/googleads/googleads-mobile-flutter/pull/610. +* Adds null checks for Ad Ids for Android in + https://github.com/googleads/googleads-mobile-flutter/pull/967 +* Updated Android dependencies in https://github.com/googleads/googleads-mobile-flutter/pull/843 +* Updates GMA iOS dependency to 10.11.0 +* Updates GMA Android dependency to 22.5.0 + +## 3.1.0 +* Updates GMA iOS dependency to 10.9.0 +* Adds explicit UMP SDK 2.1.0 dependency for Android. +* Fixes https://github.com/googleads/googleads-mobile-flutter/issues/735 + +## 3.0.0 +* Adds support for `MobileAds.registerWebView()`. This API supports in-app ad monetization for + `WebView`s. You can read more in the [android](https://developers.google.com/admob/android/webview) + or [iOS](https://developers.google.com/admob/ios/webview) documentation. + This plugin now depends on [webview_flutter](https://pub.dev/packages/webview_flutter), + [webview_flutter_wkwebview](https://pub.dev/packages/webview_flutter_wkwebview), and + [webview_flutter_android](https://pub.dev/packages/webview_flutter_android) +* Updates Android GMA dependency to 22.0.0 and iOS dependency to 10.4.0 +* Fixes https://github.com/googleads/googleads-mobile-flutter/issues/700 +* Updates minimum supported Xcode version to 14.1. + +## 2.4.0 +* Adds support for native templates, which are predefined layouts for native ads. + * `NativeAd` has a new optional parameter, `nativeTemplateStyle` of type `NativeTemplateStyle`. + If provided, the plugin will inflate and style a platform native ad view for you, instead of + requiring you to write and register a NativeAdFactory (android) or FLTNativeAdFactory (iOS). +* Adds a new flag, AdWidget.optOutOfVisibilityDetectorWorkaround. Setting this to true + lets you opt out of the fix added for https://github.com/googleads/googleads-mobile-flutter/issues/580, + which was resolved in Flutter 3.7.0. + +## 2.3.0 +* Updates GMA iOS dependency to 9.13 +* Updates GMA Android dependency to 21.3.0 +* Updates request agent string based on metadata in AndroidManifest.xml or Info.plist + +## 2.2.0 +* Updates GMA iOS dependency to 9.11.0. This fixes dependency issues in apps that + also depend on the latest version of Firebase: https://github.com/googleads/googleads-mobile-flutter/issues/673 +* Adds the field `responseExtras` to `ResponseInfo`. See `ResponseInfo` docs: + * https://developers.google.com/admob/flutter/response-info + * https://developers.google.com/ad-manager/mobile-ads-sdk/flutter/response-info +* Fixes a crash introduced in 2.1.0, [issue #675](https://github.com/googleads/googleads-mobile-flutter/issues/675) + +## 2.1.0 +* Updates GMA dependencies to 21.2.0 (Android) and 9.10.0 (iOS): +* Adds `loadedAdapterResponseInfo` to `ResponseInfo` and the following fields to + `AdapterResponseInfo`: + * adSourceID + * adSourceInstanceId + * adSourceInstanceName + * adSourceName +* Fixes [close button issue on iOS](https://github.com/googleads/googleads-mobile-flutter/issues/191) +## 2.0.1 +* Bug fix for [issue 580](https://github.com/googleads/googleads-mobile-flutter/issues/580). + Adds a workaround on Android to wait for the ad widget to become visible + before attaching the platform view. + +## 2.0.0 +* Updates GMA Android dependency to 21.0.0 and iOS to 9.6.0 +* Removes `credentials` from `AdapterResponseInfo`, which is replaced with + `adUnitMapping`. +* Removes `serverSideVerificationOptions` from `RewardedAd.load()` and + `RewardedInterstitialAd.load()`, replacing them with setters + `RewardedAd.setServerSideVerificationOptions()` and + `RewardedInterstitialAd.setServerSideVerificationOptions()`. This lets you + update the ssv after the ad is loaded. +* Removes static `testAdUnitId` parameters. See the + [Admob](https://developers.google.com/admob/flutter/test-ads) and + [AdManager](https://developers.google.com/ad-manager/mobile-ads-sdk/flutter/test-ads) + documentation for up to date test ad units. +* Removes `NativeAdListener.onNativeAdClicked`. You should use `onAdClicked` + instead, which present on all ad listeners. +* Removes `AdRequest.location` + +## 1.3.0 +* Adds support for programmatically opening the debug options menu using`MobileAds.openDebugMenu(String adUnitId)` +* Adds support for Ad inspector APIs. See the [AdMob](https://developers.google.com/admob/flutter/ad-inspector) + and [Ad Manager](https://developers.google.com/ad-manager/mobile-ads-sdk/flutter/ad-inspector) + sites for integration guides. +* Adds support for User Messaging Platform. See the [AdMob](https://developers.google.com/admob/flutter/eu-consent) + and [Ad Manager](https://developers.google.com/ad-manager/mobile-ads-sdk/flutter/eu-consent) + sites for integration guides. + +## 1.2.0 +* Set new minimum height for `FluidAdWidget`. + This is required after Flutter v2.11.0-0.1.pre because Android platform views + that have no size don't load. +* Update GMA Android dependency to 20.6.0 and iOS to 8.13.0. + * [Android release notes](https://developers.google.com/admob/android/rel-notes) + * [iOS release notes](https://developers.google.com/admob/ios/rel-notes) +* Deprecate `AdapterResponseInfo.credentials` in favor of `adUnitMapping` +* Deprecates `LocationParams` in `AdRequest` and `AdManagerAdRequest`. + +## 1.1.0 +* Adds support for [Rewarded Interstitial](https://support.google.com/admob/answer/9884467) (beta) ad format. +* Adds support for `onAdClicked` events to all ad formats. `NativeAdListener.onNativeAdClicked` is now deprecated. + * `FullScreenContentCallback` and `AdWithViewListeners` now have an `onAdClicked` event. +## 1.0.1 + +* Fix for [Issue 449](https://github.com/googleads/googleads-mobile-flutter/issues/449). + In `LocationParams`, time is now treated as an optional parameter on Android. +* Fix for [Issue 447](https://github.com/googleads/googleads-mobile-flutter/issues/447), + which affected mediation networks that require an Activity to be initialized on Android. + +## 1.0.0 + +* Mediation is now supported in beta. + * There are new APIs to support passing network extras to mediation adapters: + * [MediationNetworkExtrasProvider](https://github.com/googleads/googleads-mobile-flutter/blob/master/packages/google_mobile_ads/android/src/main/java/io/flutter/plugins/googlemobileads/MediationNetworkExtrasProvider.java) + on Android and [FLTMediationNetworkExtrasProvider](https://github.com/googleads/googleads-mobile-flutter/blob/master/packages/google_mobile_ads/ios/Classes/FLTConstants.h) on iOS + * See the mediation example app [README](https://github.com/googleads/googleads-mobile-flutter/blob/master/packages/mediation_example/README.md) + for more details on how to use these APIs. + +* Fix for Android 12 issue [#330](https://github.com/googleads/googleads-mobile-flutter/issues/330) + * This will break compilation on android if you do not already set `compileSdkVersion` to `31`, or override the WorkManager dependency to < 2.7.0: + ``` + dependencies { + implementation('androidx.work:work-runtime') { + version { + strictly '2.6.0' + } + } + } + ``` +* Fixes issue [#404](https://github.com/googleads/googleads-mobile-flutter/issues/404) + * Adds a new dart class, `AppStateEventNotifier`. You should subscribe to `AppStateEventNotifier.appStateStream` + instead of using `WidgetsBindingObserver` to listen to app foreground/background events. + * See the app open [example app](https://github.com/googleads/googleads-mobile-flutter/tree/master/packages/app_open_example) for a reference + on how to use the new API. + +* Adds a new parameter `extras` to `AdRequest` and `AdManagerAdRequest`. + * This can be used to pass additional signals to the AdMob adapter, such as + [CCPA](https://developers.google.com/admob/android/ccpa) signals. + * For example, to notify Google that [RDP](https://developers.google.com/admob/android/ccpa#rdp_signal) + should be enabled when constructing an ad request: + ```dart + AdRequest request = AdRequest(extras: {'rdp': '1'}); + ``` + +## 0.13.6 + +* Partial fix for [#265](https://github.com/googleads/googleads-mobile-flutter/issues/265). + * The partial fix allows you to load ads from a cached flutter engine in the add to app scenario, + but it only works the first time the engine is attached to an activity. + * Support for reusing the engine in another activity after the first one is destroyed is blocked + by this Flutter issue which affects all platform views: https://github.com/flutter/flutter/issues/88880. +* Adds support for getRequestConfiguration API + * [Android API reference](https://developers.google.com/android/reference/com/google/android/gms/ads/MobileAds#public-static-requestconfiguration-getrequestconfiguration) + * [iOS API reference](https://developers.google.com/admob/ios/api/reference/Classes/GADMobileAds#requestconfiguration) +* Adds support for Fluid Ad Size (Ad Manager only) + * Fluid ads dynamically adjust their height based on their width. To help display them we've added a new + ad container, `FluidAdManagerBannerAd`, and a new widget `FluidAdWidget`. + * You can see the [fluid_example.dart](https://github.com/googleads/googleads-mobile-flutter/blob/master/packages/google_mobile_ads/example/lib/fluid_example.dart) for a reference of how to load and display a fluid ad. + * [Android API reference](https://developers.google.com/ad-manager/mobile-ads-sdk/android/native/styles#fluid_size) + * [iOS API reference](https://developers.google.com/ad-manager/mobile-ads-sdk/ios/native/native-styles#fluid_size) +* Adds `AdSize.getCurrentOrientationAnchoredAdaptiveBannerAdSize()` to support getting an `AnchoredAdaptiveBannerAdSize` in the current orientation. + * Previously the user had to specify an orientation (portrait / landscape) to create an AnchoredAdaptiveBannerAdSize. It has been made optional with this version. SDK will determine the current orientation of the device and return an appropriate AdSize. + * More information on anchored adaptive banners can be found here: + * [Admob android](https://developers.google.com/admob/android/banner/anchored-adaptive) + * [Admob iOS](https://developers.google.com/admob/ios/banner/anchored-adaptive) + * [Ad manager android](https://developers.google.com/ad-manager/mobile-ads-sdk/android/banner/anchored-adaptive) + * [Ad manager iOS](https://developers.google.com/ad-manager/mobile-ads-sdk/ios/banner/anchored-adaptive) +* Adds support for inline adaptive banner ads. + * Inline adaptive banner ads are meant to be used in scrollable content. They are of variable height and can be as tall as the device screen. + They differ from Fluid ads in that they only resize once when the ad is loaded. + You can see the [inline_adaptive_example.dart](https://github.com/googleads/googleads-mobile-flutter/blob/master/packages/google_mobile_ads/example/lib/inline_adaptive_example.dart) for a reference of how to load and display + inline adaptive banners. + * More information on inline adaptive banners can be found here: + * [Admob android](https://developers.google.com/admob/android/banner/inline-adaptive) + * [Admob iOS](https://developers.google.com/admob/ios/banner/inline-adaptive) + * [Ad manager android](https://developers.google.com/ad-manager/mobile-ads-sdk/android/banner/inline-adaptive) + * [Ad manager iOS](https://developers.google.com/ad-manager/mobile-ads-sdk/ios/banner/inline-adaptive) +* Fix for [#369](https://github.com/googleads/googleads-mobile-flutter/issues/369) + * Fixes setting the app volume in android (doesn't affect iOS). +* Adds support for setting location in `AdRequest` and `AdManagerAdRequest`. + * Both `AdRequest` and `AdManagerAdRequest` have a new param, `location`. + * Location data is not used to target Google Ads, but may be used by 3rd party ad networks. + * See other packages for getting the location. For example, https://pub.dev/packages/location. +* Adds `publisherProvidedId` to `AdManagerAdRequest` to support [publisher provided ids](https://support.google.com/admanager/answer/2880055). + +## 0.13.5 + +* Adds support for app open. + * Implementation guidance can be found [here](https://developers.google.com/admob/flutter/app-open). + * As a reference please also see the [example app](https://github.com/googleads/googleads-mobile-flutter/tree/master/packages/app_open_example). + * Best practices can be found [here](https://support.google.com/admob/answer/9341964?hl=en). + +## 0.13.4 + +* Adds support for muting and setting the volume level of the app. +* Visit the following links for more information: + * https://developers.google.com/admob/android/global-settings#video_ad_volume_control + * https://developers.google.com/android/reference/com/google/android/gms/ads/MobileAds#public-static-void-setappvolume-float-volume +* Adds support for setting immersive mode for Rewarded and Interstitial Ads in Android. +* Visit the following links for more information: + * https://developers.google.com/android/reference/com/google/android/gms/ads/interstitial/InterstitialAd?hl=en#setImmersiveMode(boolean) + * https://developers.google.com/android/reference/com/google/android/gms/ads/rewarded/RewardedAd#setImmersiveMode(boolean) +* Adds support for disableSDKCrashReporting in iOS; disableMediationInitialization and getVersionString in both the platforms. + * https://developers.google.com/admob/ios/api/reference/Classes/GADMobileAds#-disablesdkcrashreporting + * iOS (disableMediationInitialization): https://developers.google.com/admob/ios/api/reference/Classes/GADMobileAds#-disablemediationinitialization + * Android (disableMediationAdapterInitialization): https://developers.google.com/android/reference/com/google/android/gms/ads/MobileAds#public-static-void-disablemediationadapterinitialization-context-context + * https://developers.google.com/android/reference/com/google/android/gms/ads/MobileAds#getVersionString() + +## 0.13.3 + +* Adds support for NativeAdOptions. More documentation also available for [Android](https://developers.google.com/admob/android/native/options) and [iOS](https://developers.google.com/admob/ios/native/options) + +## 0.13.2+1 + +* Fixes [Issue #130](https://github.com/googleads/googleads-mobile-flutter/issues/130) + +## 0.13.2 + +* Fixes a crash where [PlatformView.getView() returns null](https://github.com/googleads/googleads-mobile-flutter/issues/46) +* Fixes memory leaks on Android. +* Fixes a [crash on iOS](https://github.com/googleads/googleads-mobile-flutter/issues/138). +* Marks smart banner sizes as deprecated. Instead you should use adaptive banners. + +## 0.13.1 + +* Adds support for the paid event callback. + +## 0.13.0 + +* Updates GMA Android and iOS dependencies to 20.1.0 and 8.5.0, respectively. +* Renames APIs that use the `Publisher` prefix to `AdManager`. +* Rewarded and Interstitial ads now provide static `load` methods and a new `FullScreenContentCallback` for full screen events. +* Native ads use [GADNativeAdView](https://developers.google.com/ad-manager/mobile-ads-sdk/ios/api/reference/Classes/GADNativeAdView) for iOS +and [NativeAdView](https://developers.google.com/android/reference/com/google/android/gms/ads/nativead/NativeAdView) on Android. +* Adds support for [ResponseInfo](https://developers.google.com/admob/android/response-info). +* Adds support for [same app key](https://developers.google.com/admob/ios/ios14#same_app_key) on iOS. +* Removes `testDevices` from `AdRequest`. Use `MobileAds.updateRequestConfiguration` to set test device ids. +* Removes `Ad.isLoaded()`. Instead you should use the `onAdLoaded` callback to track whether an ad is loaded. +* Removes need to call `Ad.dispose()` for Rewarded and Interstitial ads when they fail to load. + +## 0.12.2+1 + +* Fix anchored adaptive banner message corruption error. +* Update example app with better practices and adaptive banner. + +## 0.12.2 + +* Add support for anchored adaptive banners. + +## 0.12.1+1 + +* Fixes a [crash with Swift based native ads](https://github.com/googleads/googleads-mobile-flutter/issues/121) + +## 0.12.1 + +* Rewarded ads now take an optional `ServerSideVerification`, to support [custom data in rewarded ads](https://developers.google.com/admob/ios/rewarded-video-ssv#custom_data). + +## 0.12.0 + +* Migrated to null safety. Minimum Dart SDK version is bumped to 2.12.0. + +## 0.11.0+4 + +* Fixes a [bug](https://github.com/googleads/googleads-mobile-flutter/issues/47) where state is not properly cleaned up on hot restart. +* Update README and example app to appropriately dispose ads. + +## 0.11.0+3 + +* Fixes an [Android crash](https://github.com/googleads/googleads-mobile-flutter/issues/46) when reusing Native and Banner Ad objects. +* Fixes [iOS memory leaks](https://github.com/googleads/googleads-mobile-flutter/issues/69). +* Adds a section on Ad Manager to the README. +* Updates iOS setup in the README to include SKAdNetwork. + +## 0.11.0+2 + +* Set min Android version to `19`. +* Fixes bug that displayed "This AdWidget is already in the Widget tree". +* Update minimum gradle version. +* Add references to the [codelab](https://codelabs.developers.google.com/codelabs/admob-inline-ads-in-flutter#0) in the README. + +## 0.11.0+1 + +* Improve AdRequest documentation and fix README heading. + +## 0.11.0 +Open beta release of the Google Mobile Ads Flutter plugin. +Please see the [README](https://github.com/googleads/googleads-mobile-flutter/blob/master/README.md) for updated integration steps. + +* Package and file names have been renamed from `firebase_admob` to `google_mobile_ads`. + +* Removes support for legacy plugin APIs. + +* Removes Firebase dependencies. + +* Adds support for `RequestConfiguration` targeting APIs. + +* Adds support for Ad Manager key values, via the new `Publisher` ad containers. +See `PublisherBannerAd` and similar classes. + +* Shows warning if an `Ad` object is reused without being disposed. + +* Removes support for V1 embedding. + +* Add version to request agent. + +## 0.10.0 + +* Old Plugin API has been moved to `lib/firebase_admob_legacy.dart`. To keep using the old API change +`import 'package:firebase_admob/firebase_admob.dart';` to +`import 'package:firebase_admob/firebase_admob_legacy.dart';`. + +* Updated `RewardedAd` to the latest API. Instantiating and displaying a `RewardedAd` is now similar +to`InterstitialAd`. See README for more info. A simple example is shown below. +```dart +final RewardedAd myRewardedAd = RewardedAd( + adUnitId: RewardedAd.testAdUnitId, + request: AdRequest(), + listener: AdListener( + onAdLoaded: (Ad ad) => (ad as RewardedAd).show(), + ), +); +myRewardedAd.load(); +``` + +* Replacement of `MobileAdEvent` callbacks with improved `AdListener`. +```dart +BannerAd( + listener: (MobileAdEvent event) { + print("BannerAd event $event"); + }, +); +``` + +can be replaced by: + +```dart +BannerAd( + listener: AdListener( + onAdLoaded: (Ad ad) => print('$BannerAd loaded.'), + onAdFailedToLoad: (Ad ad) => print('$BannerAd failed to load.'), + ), +); +``` + +* `MobileAdTargeting` has been renamed to `AdRequest` to keep consistent with SDK. +* `MobileAd` has been renamed to `Ad`. + +* Fix smart banners on iOS. + - `AdSize.smartBanner` is for Android only. + - `AdSize.smartBannerPortrait` and `AdSize.smartBannerLandscape` are only for iOS. + - Use `Adsize.getSmartBanner(Orientation)` to get the correct value depending on platform. The + orientation can be retrieved using a `BuildContext`: +```dart +Orientation currentOrientation = MediaQuery.of(context).orientation; +``` + +* Removal of `show()` for `BannerAd` and `NativeAd` since they can now be displayed within a widget +tree. +* Showing of `InterstitialAd` and `RewardedAd` should now wait for `AdListener.onAdLoaded` callback +before calling `show()` as best practice: + +```dart +InterstitialAd( + adUnitId: InterstitialAd.testAdUnitId, + targetingInfo: targetingInfo, + listener: (MobileAdEvent event) { + print("InterstitialAd event $event"); + }, +) + ..load() + ..show(); +``` + +can be replaced by: + +```dart +final InterstatialAd interstitial = InterstatialAd( + adUnitId: InterstatialAd.testAdUnitId, + request: AdRequest(), + listener: AdListener( + onAdLoaded: (Ad ad) => (ad as InterstatialAd).show(), + ), +)..load(); +``` + +* `Ad.load()` no longer returns a boolean that only confirms the method was called successfully. + +## 0.9.3+4 + +* Bump Dart version requirement. + +## 0.9.3+3 + +* Provide a default `MobileAdTargetingInfo` for `RewardedVideoAd.load()`. `RewardedVideoAd.load()` +would inadvertently cause a crash if `MobileAdTargetingInfo` was excluded. + +## 0.9.3+2 + +* Fixed bug related to simultaneous ad loading behavior on iOS. + +## 0.9.3+1 + +* Modified README to reflect supporting Native Ads. + +## 0.9.3 + +* Support Native Ads on iOS. + +## 0.9.2+1 + +* Added note about required Google Service config files. + +## 0.9.2 + +* Add basic Native Ads support for Android. + +## 0.9.1+3 + +* Replace deprecated `getFlutterEngine` call on Android. + +## 0.9.1+2 + +* Make the pedantic dev_dependency explicit. + +## 0.9.1+1 + +* Enable custom parameters for rewarded video server-side verification callbacks. + +## 0.9.1 + +* Support v2 embedding. This will remain compatible with the original embedding and won't require + app migration. + +## 0.9.0+10 + +* Remove the deprecated `author:` field from pubspec.yaml +* Migrate the plugin to the pubspec platforms manifest. +* Bump the minimum Flutter version to 1.10.0. + +## 0.9.0+9 + +* Updated README instructions for contributing for consistency with other Flutterfire plugins. + +## 0.9.0+8 + +* Remove AndroidX warning. + +## 0.9.0+7 + +* Update Android gradle plugin, gradle, and Admob versions. +* Improvements to the Android implementation, fixing warnings about a possible null pointer exception. +* Fixed an issue where an advertisement could incorrectly remain displayed when transitioning to another screen. + +## 0.9.0+6 + +* Remove duplicate example from documentation. + +## 0.9.0+5 + +* Update documentation to reflect new repository location. + +## 0.9.0+4 + +* Add the ability to horizontally adjust the ads banner location by specifying a pixel offset from the centre. + +## 0.9.0+3 + +* Update google-services Android gradle plugin to 4.3.0 in documentation and examples. + +## 0.9.0+2 + +* On Android, no longer crashes when registering the plugin if no activity is available. + +## 0.9.0+1 + +* Add missing template type parameter to `invokeMethod` calls. +* Bump minimum Flutter version to 1.5.0. + +## 0.9.0 + +* Update Android dependencies to latest. + +## 0.8.0+4 + +* Update documentation to add AdMob App ID in Info.plist +* Add iOS AdMob App ID in Info.plist in example project + +## 0.8.0+3 + +* Log messages about automatic configuration of the default app are now less confusing. + +## 0.8.0+2 + +* Remove categories. + +## 0.8.0+1 + +* Log a more detailed warning at build time about the previous AndroidX + migration. + +## 0.8.0 + +* **Breaking change**. Migrate from the deprecated original Android Support + Library to AndroidX. This shouldn't result in any functional changes, but it + requires any Android apps using this plugin to [also + migrate](https://developer.android.com/jetpack/androidx/migrate) if they're + using the original support library. + +## 0.7.0 + +* Mark Dart code as deprecated where the newer version AdMob deprecates features (Birthday, Gender, and Family targeting). +* Update gradle dependencies. +* Add documentation for new AndroidManifest requirements. + +## 0.6.1+1 + +* Bump Android dependencies to latest. +* __THIS WAS AN UNINTENTIONAL BREAKING CHANGE__. Users should consume 0.6.1 instead if they need the old API, or 0.7.0 for the bumped version. +* Guide how to fix crash with admob version 17.0.0 in README + +## 0.6.1 + +* listener on MobileAd shouldn't be final. +* Ad listeners can to be set in or out of Ad initialization. + +## 0.6.0 + +* Add nonPersonalizedAds option to MobileAdTargetingInfo + +## 0.5.7 + +* Bumped mockito dependency to pick up Dart 2 support. + +## 0.5.6 + +* Bump Android and Firebase dependency versions. + +## 0.5.5 + +* Updated Gradle tooling to match Android Studio 3.1.2. + +## 0.5.4+1 + +* Graduate to beta. + +## 0.5.4 + +* Fixed a bug that was causing rewarded video failure event to be called on the wrong listener. + +## 0.5.3 + +* Updated Google Play Services dependencies to version 15.0.0. +* Added handling of rewarded video completion event. + +## 0.5.2 + +* Simplified podspec for Cocoapods 1.5.0, avoiding link issues in app archives. + +## 0.5.1 + +* Fixed Dart 2 type errors. + +## 0.5.0 + +* **Breaking change**. The BannerAd constructor now requires an AdSize + parameter. BannerAds can be created with AdSize.smartBanner, or one of + the other predefined AdSize values. Previously BannerAds were always + defined with the smartBanner size. + +## 0.4.0 + +* **Breaking change**. Set SDK constraints to match the Flutter beta release. + +## 0.3.2 + +* Fixed Dart 2 type errors. + +## 0.3.1 + +* Enabled use in Swift projects. + +## 0.3.0 + +* Added support for rewarded video ads. +* **Breaking change**. The properties and parameters named "unitId" in BannerAd + and InterstitialAd have been renamed to "adUnitId" to better match AdMob's + documentation and UI. + +## 0.2.3 + +* Simplified and upgraded Android project template to Android SDK 27. +* Updated package description. + +## 0.2.2 + +* Added platform-specific App IDs and ad unit IDs to example. +* Separated load and show functionality for interstitials in example. + +## 0.2.1 + +* Use safe area layout to place ad in iOS 11 + +## 0.2.0 + +* **Breaking change**. MobileAd TargetingInfo requestAgent is now hardcoded to 'flutter-alpha'. + +## 0.1.0 + +* **Breaking change**. Upgraded to Gradle 4.1 and Android Studio Gradle plugin + 3.0.1. Older Flutter projects need to upgrade their Gradle setup as well in + order to use this version of the plugin. Instructions can be found + [here](https://github.com/flutter/flutter/wiki/Updating-Flutter-projects-to-Gradle-4.1-and-Android-Studio-Gradle-plugin-3.0.1). +* Relaxed GMS dependency to [11.4.0,12.0[ + +## 0.0.3 + +* Add FLT prefix to iOS types +* Change GMS dependency to 11.4.+ + +## 0.0.2 + +* Change GMS dependency to 11.+ + +## 0.0.1 + +* Initial Release: not ready for production use diff --git a/mih_ui/android/build/ios/SourcePackages/google_mobile_ads-8.0.0/LICENSE b/mih_ui/android/build/ios/SourcePackages/google_mobile_ads-8.0.0/LICENSE new file mode 100644 index 00000000..d6456956 --- /dev/null +++ b/mih_ui/android/build/ios/SourcePackages/google_mobile_ads-8.0.0/LICENSE @@ -0,0 +1,202 @@ + + Apache License + Version 2.0, January 2004 + http://www.apache.org/licenses/ + + TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION + + 1. Definitions. + + "License" shall mean the terms and conditions for use, reproduction, + and distribution as defined by Sections 1 through 9 of this document. + + "Licensor" shall mean the copyright owner or entity authorized by + the copyright owner that is granting the License. + + "Legal Entity" shall mean the union of the acting entity and all + other entities that control, are controlled by, or are under common + control with that entity. For the purposes of this definition, + "control" means (i) the power, direct or indirect, to cause the + direction or management of such entity, whether by contract or + otherwise, or (ii) ownership of fifty percent (50%) or more of the + outstanding shares, or (iii) beneficial ownership of such entity. + + "You" (or "Your") shall mean an individual or Legal Entity + exercising permissions granted by this License. + + "Source" form shall mean the preferred form for making modifications, + including but not limited to software source code, documentation + source, and configuration files. + + "Object" form shall mean any form resulting from mechanical + transformation or translation of a Source form, including but + not limited to compiled object code, generated documentation, + and conversions to other media types. + + "Work" shall mean the work of authorship, whether in Source or + Object form, made available under the License, as indicated by a + copyright notice that is included in or attached to the work + (an example is provided in the Appendix below). + + "Derivative Works" shall mean any work, whether in Source or Object + form, that is based on (or derived from) the Work and for which the + editorial revisions, annotations, elaborations, or other modifications + represent, as a whole, an original work of authorship. For the purposes + of this License, Derivative Works shall not include works that remain + separable from, or merely link (or bind by name) to the interfaces of, + the Work and Derivative Works thereof. + + "Contribution" shall mean any work of authorship, including + the original version of the Work and any modifications or additions + to that Work or Derivative Works thereof, that is intentionally + submitted to Licensor for inclusion in the Work by the copyright owner + or by an individual or Legal Entity authorized to submit on behalf of + the copyright owner. For the purposes of this definition, "submitted" + means any form of electronic, verbal, or written communication sent + to the Licensor or its representatives, including but not limited to + communication on electronic mailing lists, source code control systems, + and issue tracking systems that are managed by, or on behalf of, the + Licensor for the purpose of discussing and improving the Work, but + excluding communication that is conspicuously marked or otherwise + designated in writing by the copyright owner as "Not a Contribution." + + "Contributor" shall mean Licensor and any individual or Legal Entity + on behalf of whom a Contribution has been received by Licensor and + subsequently incorporated within the Work. + + 2. Grant of Copyright License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + copyright license to reproduce, prepare Derivative Works of, + publicly display, publicly perform, sublicense, and distribute the + Work and such Derivative Works in Source or Object form. + + 3. Grant of Patent License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + (except as stated in this section) patent license to make, have made, + use, offer to sell, sell, import, and otherwise transfer the Work, + where such license applies only to those patent claims licensable + by such Contributor that are necessarily infringed by their + Contribution(s) alone or by combination of their Contribution(s) + with the Work to which such Contribution(s) was submitted. If You + institute patent litigation against any entity (including a + cross-claim or counterclaim in a lawsuit) alleging that the Work + or a Contribution incorporated within the Work constitutes direct + or contributory patent infringement, then any patent licenses + granted to You under this License for that Work shall terminate + as of the date such litigation is filed. + + 4. Redistribution. You may reproduce and distribute copies of the + Work or Derivative Works thereof in any medium, with or without + modifications, and in Source or Object form, provided that You + meet the following conditions: + + (a) You must give any other recipients of the Work or + Derivative Works a copy of this License; and + + (b) You must cause any modified files to carry prominent notices + stating that You changed the files; and + + (c) You must retain, in the Source form of any Derivative Works + that You distribute, all copyright, patent, trademark, and + attribution notices from the Source form of the Work, + excluding those notices that do not pertain to any part of + the Derivative Works; and + + (d) If the Work includes a "NOTICE" text file as part of its + distribution, then any Derivative Works that You distribute must + include a readable copy of the attribution notices contained + within such NOTICE file, excluding those notices that do not + pertain to any part of the Derivative Works, in at least one + of the following places: within a NOTICE text file distributed + as part of the Derivative Works; within the Source form or + documentation, if provided along with the Derivative Works; or, + within a display generated by the Derivative Works, if and + wherever such third-party notices normally appear. The contents + of the NOTICE file are for informational purposes only and + do not modify the License. You may add Your own attribution + notices within Derivative Works that You distribute, alongside + or as an addendum to the NOTICE text from the Work, provided + that such additional attribution notices cannot be construed + as modifying the License. + + You may add Your own copyright statement to Your modifications and + may provide additional or different license terms and conditions + for use, reproduction, or distribution of Your modifications, or + for any such Derivative Works as a whole, provided Your use, + reproduction, and distribution of the Work otherwise complies with + the conditions stated in this License. + + 5. Submission of Contributions. Unless You explicitly state otherwise, + any Contribution intentionally submitted for inclusion in the Work + by You to the Licensor shall be under the terms and conditions of + this License, without any additional terms or conditions. + Notwithstanding the above, nothing herein shall supersede or modify + the terms of any separate license agreement you may have executed + with Licensor regarding such Contributions. + + 6. Trademarks. This License does not grant permission to use the trade + names, trademarks, service marks, or product names of the Licensor, + except as required for reasonable and customary use in describing the + origin of the Work and reproducing the content of the NOTICE file. + + 7. Disclaimer of Warranty. Unless required by applicable law or + agreed to in writing, Licensor provides the Work (and each + Contributor provides its Contributions) on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or + implied, including, without limitation, any warranties or conditions + of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A + PARTICULAR PURPOSE. You are solely responsible for determining the + appropriateness of using or redistributing the Work and assume any + risks associated with Your exercise of permissions under this License. + + 8. Limitation of Liability. In no event and under no legal theory, + whether in tort (including negligence), contract, or otherwise, + unless required by applicable law (such as deliberate and grossly + negligent acts) or agreed to in writing, shall any Contributor be + liable to You for damages, including any direct, indirect, special, + incidental, or consequential damages of any character arising as a + result of this License or out of the use or inability to use the + Work (including but not limited to damages for loss of goodwill, + work stoppage, computer failure or malfunction, or any and all + other commercial damages or losses), even if such Contributor + has been advised of the possibility of such damages. + + 9. Accepting Warranty or Additional Liability. While redistributing + the Work or Derivative Works thereof, You may choose to offer, + and charge a fee for, acceptance of support, warranty, indemnity, + or other liability obligations and/or rights consistent with this + License. However, in accepting such obligations, You may act only + on Your own behalf and on Your sole responsibility, not on behalf + of any other Contributor, and only if You agree to indemnify, + defend, and hold each Contributor harmless for any liability + incurred by, or claims asserted against, such Contributor by reason + of your accepting any such warranty or additional liability. + + END OF TERMS AND CONDITIONS + + APPENDIX: How to apply the Apache License to your work. + + To apply the Apache License to your work, attach the following + boilerplate notice, with the fields enclosed by brackets "[]" + replaced with your own identifying information. (Don't include + the brackets!) The text should be enclosed in the appropriate + comment syntax for the file format. We also recommend that a + file or class name and description of purpose be included on the + same "printed page" as the copyright notice for easier + identification within third-party archives. + + Copyright [yyyy] [name of copyright owner] + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. diff --git a/mih_ui/android/build/ios/SourcePackages/google_mobile_ads-8.0.0/README.md b/mih_ui/android/build/ios/SourcePackages/google_mobile_ads-8.0.0/README.md new file mode 100644 index 00000000..622eb3c9 --- /dev/null +++ b/mih_ui/android/build/ios/SourcePackages/google_mobile_ads-8.0.0/README.md @@ -0,0 +1,33 @@ +# Google Mobile Ads for Flutter + +[![google_mobile_ads](https://github.com/googleads/googleads-mobile-flutter/actions/workflows/google_mobile_ads.yaml/badge.svg)](https://github.com/googleads/googleads-mobile-flutter/actions/workflows/google_mobile_ads.yaml) + +This repository contains the source code for the Google Mobile Ads Flutter +plugin, which enables publishers to monetize [Flutter](https://flutter.dev/) +apps using the Google Mobile Ads SDK. + +## Documentation + +For instructions on how to use the plugin, please refer to the developer guides +for [AdMob](https://developers.google.com/admob/flutter/quick-start) and +[Ad Manager](https://developers.google.com/ad-manager/mobile-ads-sdk/flutter/quick-start). + +## Downloads + +See [pub.dev](https://pub.dev/packages/google_mobile_ads/versions) for the +latest releases of the plugin. + +## Suggesting improvements + +To file bugs, make feature requests, or to suggest other improvements, please +use [github's issue tracker](https://github.com/googleads/googleads-mobile-flutter/issues). + + +## Other resources + +* [AdMob help center](https://support.google.com/admob/?hl=en#topic=7383088) +* [Ad Manager help center](https://support.google.com/admanager/?hl=en#topic=7505988) + +## License + +[Apache 2.0 License](https://www.apache.org/licenses/LICENSE-2.0) \ No newline at end of file diff --git a/mih_ui/android/build/ios/SourcePackages/google_mobile_ads-8.0.0/android/build.gradle b/mih_ui/android/build/ios/SourcePackages/google_mobile_ads-8.0.0/android/build.gradle new file mode 100644 index 00000000..14c700f9 --- /dev/null +++ b/mih_ui/android/build/ios/SourcePackages/google_mobile_ads-8.0.0/android/build.gradle @@ -0,0 +1,77 @@ +group 'io.flutter.plugins.googlemobileads' +version '8.0.0' + +buildscript { + ext { + agp_version = '8.13.1' + } + repositories { + google() + mavenCentral() + } + + dependencies { + classpath "com.android.tools.build:gradle:$agp_version" + } +} + +rootProject.allprojects { + repositories { + google() + mavenCentral() + } +} + +apply plugin: 'com.android.library' + +android { + compileSdk 36 + + if (project.android.hasProperty('namespace')) { + namespace 'io.flutter.plugins.googlemobileads' + } + + defaultConfig { + minSdk 24 + } + lintOptions { + disable 'InvalidPackage' + } + dependencies { + api 'com.google.android.gms:play-services-ads:25.1.0' + implementation 'com.google.android.ump:user-messaging-platform:4.0.0' + implementation 'androidx.constraintlayout:constraintlayout:2.2.1' + implementation 'androidx.lifecycle:lifecycle-process:2.10.0' + implementation 'com.google.errorprone:error_prone_annotations:2.48.0' + testImplementation 'junit:junit:4.13.2' + testImplementation 'org.hamcrest:hamcrest:3.0' + testImplementation 'org.mockito:mockito-core:5.23.0' + testImplementation 'org.robolectric:robolectric:4.16.1' + testImplementation 'androidx.test:core:1.7.0' + } + testOptions { + unitTests { + includeAndroidResources = true + } + } +} + +afterEvaluate { + def containsEmbeddingDependencies = configurations.any { configuration -> + configuration.dependencies.any { dependency -> + dependency.group == 'io.flutter' && + dependency.name.startsWith('flutter_embedding') && + (dependency instanceof ModuleDependency && dependency.isTransitive()) + } + } + if (!containsEmbeddingDependencies) { + android { + dependencies { + def lifecycle_version = "1.1.1" + compileOnly "android.arch.lifecycle:runtime:$lifecycle_version" + compileOnly "android.arch.lifecycle:common:$lifecycle_version" + compileOnly "android.arch.lifecycle:common-java8:$lifecycle_version" + } + } + } +} diff --git a/mih_ui/android/build/ios/SourcePackages/google_mobile_ads-8.0.0/android/gradle.properties b/mih_ui/android/build/ios/SourcePackages/google_mobile_ads-8.0.0/android/gradle.properties new file mode 100644 index 00000000..94e8c9d9 --- /dev/null +++ b/mih_ui/android/build/ios/SourcePackages/google_mobile_ads-8.0.0/android/gradle.properties @@ -0,0 +1,15 @@ +## For more details on how to configure your build environment visit +# http://www.gradle.org/docs/current/userguide/build_environment.html +# +# Specifies the JVM arguments used for the daemon process. +# The setting is particularly useful for tweaking memory settings. +# Default value: -Xmx1024m -XX:MaxPermSize=256m +# org.gradle.jvmargs=-Xmx2048m -XX:MaxPermSize=512m -XX:+HeapDumpOnOutOfMemoryError -Dfile.encoding=UTF-8 +# +# When configured, Gradle will run in incubating parallel mode. +# This option should only be used with decoupled projects. More details, visit +# http://www.gradle.org/docs/current/userguide/multi_project_builds.html#sec:decoupled_projects +# org.gradle.parallel=true +#Fri Aug 06 00:15:03 EDT 2021 +android.useAndroidX=true +android.enableJetifier=true diff --git a/mih_ui/android/build/ios/SourcePackages/google_mobile_ads-8.0.0/android/gradle/gradle-daemon-jvm.properties b/mih_ui/android/build/ios/SourcePackages/google_mobile_ads-8.0.0/android/gradle/gradle-daemon-jvm.properties new file mode 100644 index 00000000..6c1139ec --- /dev/null +++ b/mih_ui/android/build/ios/SourcePackages/google_mobile_ads-8.0.0/android/gradle/gradle-daemon-jvm.properties @@ -0,0 +1,12 @@ +#This file is generated by updateDaemonJvm +toolchainUrl.FREE_BSD.AARCH64=https\://api.foojay.io/disco/v3.0/ids/ec7520a1e057cd116f9544c42142a16b/redirect +toolchainUrl.FREE_BSD.X86_64=https\://api.foojay.io/disco/v3.0/ids/4c4f879899012ff0a8b2e2117df03b0e/redirect +toolchainUrl.LINUX.AARCH64=https\://api.foojay.io/disco/v3.0/ids/ec7520a1e057cd116f9544c42142a16b/redirect +toolchainUrl.LINUX.X86_64=https\://api.foojay.io/disco/v3.0/ids/4c4f879899012ff0a8b2e2117df03b0e/redirect +toolchainUrl.MAC_OS.AARCH64=https\://api.foojay.io/disco/v3.0/ids/73bcfb608d1fde9fb62e462f834a3299/redirect +toolchainUrl.MAC_OS.X86_64=https\://api.foojay.io/disco/v3.0/ids/846ee0d876d26a26f37aa1ce8de73224/redirect +toolchainUrl.UNIX.AARCH64=https\://api.foojay.io/disco/v3.0/ids/ec7520a1e057cd116f9544c42142a16b/redirect +toolchainUrl.UNIX.X86_64=https\://api.foojay.io/disco/v3.0/ids/4c4f879899012ff0a8b2e2117df03b0e/redirect +toolchainUrl.WINDOWS.AARCH64=https\://api.foojay.io/disco/v3.0/ids/9482ddec596298c84656d31d16652665/redirect +toolchainUrl.WINDOWS.X86_64=https\://api.foojay.io/disco/v3.0/ids/39701d92e1756bb2f141eb67cd4c660e/redirect +toolchainVersion=21 diff --git a/mih_ui/android/build/ios/SourcePackages/google_mobile_ads-8.0.0/android/gradle/wrapper/gradle-wrapper.properties b/mih_ui/android/build/ios/SourcePackages/google_mobile_ads-8.0.0/android/gradle/wrapper/gradle-wrapper.properties new file mode 100644 index 00000000..c5856afb --- /dev/null +++ b/mih_ui/android/build/ios/SourcePackages/google_mobile_ads-8.0.0/android/gradle/wrapper/gradle-wrapper.properties @@ -0,0 +1,6 @@ +#Thu Dec 04 10:45:11 PST 2025 +distributionBase=GRADLE_USER_HOME +distributionPath=wrapper/dists +distributionUrl=https\://services.gradle.org/distributions/gradle-9.2.1-bin.zip +zipStoreBase=GRADLE_USER_HOME +zipStorePath=wrapper/dists diff --git a/mih_ui/android/build/ios/SourcePackages/google_mobile_ads-8.0.0/android/settings.gradle b/mih_ui/android/build/ios/SourcePackages/google_mobile_ads-8.0.0/android/settings.gradle new file mode 100644 index 00000000..84685e36 --- /dev/null +++ b/mih_ui/android/build/ios/SourcePackages/google_mobile_ads-8.0.0/android/settings.gradle @@ -0,0 +1 @@ +rootProject.name = 'google_mobile_ads' diff --git a/mih_ui/android/build/ios/SourcePackages/google_mobile_ads-8.0.0/android/src/main/AndroidManifest.xml b/mih_ui/android/build/ios/SourcePackages/google_mobile_ads-8.0.0/android/src/main/AndroidManifest.xml new file mode 100644 index 00000000..eaa5574a --- /dev/null +++ b/mih_ui/android/build/ios/SourcePackages/google_mobile_ads-8.0.0/android/src/main/AndroidManifest.xml @@ -0,0 +1,9 @@ + + + + + + diff --git a/mih_ui/android/build/ios/SourcePackages/google_mobile_ads-8.0.0/android/src/main/java/com/google/android/ads/nativetemplates/NativeTemplateStyle.java b/mih_ui/android/build/ios/SourcePackages/google_mobile_ads-8.0.0/android/src/main/java/com/google/android/ads/nativetemplates/NativeTemplateStyle.java new file mode 100644 index 00000000..91ababe9 --- /dev/null +++ b/mih_ui/android/build/ios/SourcePackages/google_mobile_ads-8.0.0/android/src/main/java/com/google/android/ads/nativetemplates/NativeTemplateStyle.java @@ -0,0 +1,272 @@ +// Copyright 2019 Google LLC +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +package com.google.android.ads.nativetemplates; + +import android.graphics.Typeface; +import android.graphics.drawable.ColorDrawable; +import androidx.annotation.Nullable; +import com.google.errorprone.annotations.CanIgnoreReturnValue; + +/** A class containing the optional styling options for the Native Template. */ +public final class NativeTemplateStyle { + + // Call to action typeface. + private Typeface callToActionTextTypeface; + + // Size of call to action text. + private float callToActionTextSize; + + // Call to action typeface color in the form 0xAARRGGBB. + @Nullable private Integer callToActionTypefaceColor; + + // Call to action background color. + private ColorDrawable callToActionBackgroundColor; + + // All templates have a primary text area which is populated by the native ad's headline. + + // Primary text typeface. + private Typeface primaryTextTypeface; + + // Size of primary text. + private float primaryTextSize; + + // Primary text typeface color in the form 0xAARRGGBB. + @Nullable private Integer primaryTextTypefaceColor; + + // Primary text background color. + private ColorDrawable primaryTextBackgroundColor; + + // The typeface, typeface color, and background color for the second row of text in the template. + // All templates have a secondary text area which is populated either by the body of the ad or + // by the rating of the app. + + // Secondary text typeface. + private Typeface secondaryTextTypeface; + + // Size of secondary text. + private float secondaryTextSize; + + // Secondary text typeface color in the form 0xAARRGGBB. + @Nullable private Integer secondaryTextTypefaceColor; + + // Secondary text background color. + private ColorDrawable secondaryTextBackgroundColor; + + // The typeface, typeface color, and background color for the third row of text in the template. + // The third row is used to display store name or the default tertiary text. + + // Tertiary text typeface. + private Typeface tertiaryTextTypeface; + + // Size of tertiary text. + private float tertiaryTextSize; + + // Tertiary text typeface color in the form 0xAARRGGBB. + @Nullable private Integer tertiaryTextTypefaceColor; + + // Tertiary text background color. + private ColorDrawable tertiaryTextBackgroundColor; + + // The background color for the bulk of the ad. + private ColorDrawable mainBackgroundColor; + + public Typeface getCallToActionTextTypeface() { + return callToActionTextTypeface; + } + + public float getCallToActionTextSize() { + return callToActionTextSize; + } + + @Nullable + public Integer getCallToActionTypefaceColor() { + return callToActionTypefaceColor; + } + + public ColorDrawable getCallToActionBackgroundColor() { + return callToActionBackgroundColor; + } + + public Typeface getPrimaryTextTypeface() { + return primaryTextTypeface; + } + + public float getPrimaryTextSize() { + return primaryTextSize; + } + + @Nullable + public Integer getPrimaryTextTypefaceColor() { + return primaryTextTypefaceColor; + } + + public ColorDrawable getPrimaryTextBackgroundColor() { + return primaryTextBackgroundColor; + } + + public Typeface getSecondaryTextTypeface() { + return secondaryTextTypeface; + } + + public float getSecondaryTextSize() { + return secondaryTextSize; + } + + @Nullable + public Integer getSecondaryTextTypefaceColor() { + return secondaryTextTypefaceColor; + } + + public ColorDrawable getSecondaryTextBackgroundColor() { + return secondaryTextBackgroundColor; + } + + public Typeface getTertiaryTextTypeface() { + return tertiaryTextTypeface; + } + + public float getTertiaryTextSize() { + return tertiaryTextSize; + } + + @Nullable + public Integer getTertiaryTextTypefaceColor() { + return tertiaryTextTypefaceColor; + } + + public ColorDrawable getTertiaryTextBackgroundColor() { + return tertiaryTextBackgroundColor; + } + + public ColorDrawable getMainBackgroundColor() { + return mainBackgroundColor; + } + + /** A class that provides helper methods to build a style object. */ + public static final class Builder { + + private NativeTemplateStyle styles; + + public Builder() { + this.styles = new NativeTemplateStyle(); + } + + @CanIgnoreReturnValue + public Builder withCallToActionTextTypeface(Typeface callToActionTextTypeface) { + this.styles.callToActionTextTypeface = callToActionTextTypeface; + return this; + } + + @CanIgnoreReturnValue + public Builder withCallToActionTextSize(float callToActionTextSize) { + this.styles.callToActionTextSize = callToActionTextSize; + return this; + } + + @CanIgnoreReturnValue + public Builder withCallToActionTypefaceColor(int callToActionTypefaceColor) { + this.styles.callToActionTypefaceColor = callToActionTypefaceColor; + return this; + } + + @CanIgnoreReturnValue + public Builder withCallToActionBackgroundColor(ColorDrawable callToActionBackgroundColor) { + this.styles.callToActionBackgroundColor = callToActionBackgroundColor; + return this; + } + + @CanIgnoreReturnValue + public Builder withPrimaryTextTypeface(Typeface primaryTextTypeface) { + this.styles.primaryTextTypeface = primaryTextTypeface; + return this; + } + + @CanIgnoreReturnValue + public Builder withPrimaryTextSize(float primaryTextSize) { + this.styles.primaryTextSize = primaryTextSize; + return this; + } + + @CanIgnoreReturnValue + public Builder withPrimaryTextTypefaceColor(int primaryTextTypefaceColor) { + this.styles.primaryTextTypefaceColor = primaryTextTypefaceColor; + return this; + } + + @CanIgnoreReturnValue + public Builder withPrimaryTextBackgroundColor(ColorDrawable primaryTextBackgroundColor) { + this.styles.primaryTextBackgroundColor = primaryTextBackgroundColor; + return this; + } + + @CanIgnoreReturnValue + public Builder withSecondaryTextTypeface(Typeface secondaryTextTypeface) { + this.styles.secondaryTextTypeface = secondaryTextTypeface; + return this; + } + + @CanIgnoreReturnValue + public Builder withSecondaryTextSize(float secondaryTextSize) { + this.styles.secondaryTextSize = secondaryTextSize; + return this; + } + + @CanIgnoreReturnValue + public Builder withSecondaryTextTypefaceColor(int secondaryTextTypefaceColor) { + this.styles.secondaryTextTypefaceColor = secondaryTextTypefaceColor; + return this; + } + + @CanIgnoreReturnValue + public Builder withSecondaryTextBackgroundColor(ColorDrawable secondaryTextBackgroundColor) { + this.styles.secondaryTextBackgroundColor = secondaryTextBackgroundColor; + return this; + } + + @CanIgnoreReturnValue + public Builder withTertiaryTextTypeface(Typeface tertiaryTextTypeface) { + this.styles.tertiaryTextTypeface = tertiaryTextTypeface; + return this; + } + + @CanIgnoreReturnValue + public Builder withTertiaryTextSize(float tertiaryTextSize) { + this.styles.tertiaryTextSize = tertiaryTextSize; + return this; + } + + @CanIgnoreReturnValue + public Builder withTertiaryTextTypefaceColor(int tertiaryTextTypefaceColor) { + this.styles.tertiaryTextTypefaceColor = tertiaryTextTypefaceColor; + return this; + } + + @CanIgnoreReturnValue + public Builder withTertiaryTextBackgroundColor(ColorDrawable tertiaryTextBackgroundColor) { + this.styles.tertiaryTextBackgroundColor = tertiaryTextBackgroundColor; + return this; + } + + @CanIgnoreReturnValue + public Builder withMainBackgroundColor(ColorDrawable mainBackgroundColor) { + this.styles.mainBackgroundColor = mainBackgroundColor; + return this; + } + + public NativeTemplateStyle build() { + return styles; + } + } +} diff --git a/mih_ui/android/build/ios/SourcePackages/google_mobile_ads-8.0.0/android/src/main/java/com/google/android/ads/nativetemplates/TemplateView.java b/mih_ui/android/build/ios/SourcePackages/google_mobile_ads-8.0.0/android/src/main/java/com/google/android/ads/nativetemplates/TemplateView.java new file mode 100644 index 00000000..8ee7f145 --- /dev/null +++ b/mih_ui/android/build/ios/SourcePackages/google_mobile_ads-8.0.0/android/src/main/java/com/google/android/ads/nativetemplates/TemplateView.java @@ -0,0 +1,295 @@ +// Copyright 2019 Google LLC +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +package com.google.android.ads.nativetemplates; + +import android.content.Context; +import android.content.res.TypedArray; +import android.graphics.Typeface; +import android.graphics.drawable.Drawable; +import android.text.TextUtils; +import android.util.AttributeSet; +import android.view.LayoutInflater; +import android.widget.Button; +import android.widget.FrameLayout; +import android.widget.ImageView; +import android.widget.RatingBar; +import android.widget.TextView; +import androidx.annotation.Nullable; +import androidx.constraintlayout.widget.ConstraintLayout; +import com.google.android.gms.ads.nativead.MediaView; +import com.google.android.gms.ads.nativead.NativeAd; +import com.google.android.gms.ads.nativead.NativeAdView; +import io.flutter.plugins.googlemobileads.R; + +/** Base class for a template view. */ +public final class TemplateView extends FrameLayout { + + private int templateType; + private NativeTemplateStyle styles; + private NativeAd nativeAd; + private NativeAdView nativeAdView; + + private TextView primaryView; + private TextView secondaryView; + private RatingBar ratingBar; + private TextView tertiaryView; + private ImageView iconView; + private MediaView mediaView; + private Button callToActionView; + private ConstraintLayout background; + + private static final String MEDIUM_TEMPLATE = "medium_template"; + private static final String SMALL_TEMPLATE = "small_template"; + + public TemplateView(Context context) { + super(context); + } + + public TemplateView(Context context, @Nullable AttributeSet attrs) { + super(context, attrs); + initView(context, attrs); + } + + public TemplateView(Context context, @Nullable AttributeSet attrs, int defStyleAttr) { + super(context, attrs, defStyleAttr); + initView(context, attrs); + } + + public TemplateView(Context context, AttributeSet attrs, int defStyleAttr, int defStyleRes) { + super(context, attrs, defStyleAttr, defStyleRes); + initView(context, attrs); + } + + public void setStyles(NativeTemplateStyle styles) { + this.styles = styles; + this.applyStyles(); + } + + public NativeAdView getNativeAdView() { + return nativeAdView; + } + + private void applyStyles() { + + Drawable mainBackground = styles.getMainBackgroundColor(); + if (mainBackground != null) { + background.setBackground(mainBackground); + if (primaryView != null) { + primaryView.setBackground(mainBackground); + } + if (secondaryView != null) { + secondaryView.setBackground(mainBackground); + } + if (tertiaryView != null) { + tertiaryView.setBackground(mainBackground); + } + } + + Typeface primary = styles.getPrimaryTextTypeface(); + if (primary != null && primaryView != null) { + primaryView.setTypeface(primary); + } + + Typeface secondary = styles.getSecondaryTextTypeface(); + if (secondary != null && secondaryView != null) { + secondaryView.setTypeface(secondary); + } + + Typeface tertiary = styles.getTertiaryTextTypeface(); + if (tertiary != null && tertiaryView != null) { + tertiaryView.setTypeface(tertiary); + } + + Typeface ctaTypeface = styles.getCallToActionTextTypeface(); + if (ctaTypeface != null && callToActionView != null) { + callToActionView.setTypeface(ctaTypeface); + } + + if (styles.getPrimaryTextTypefaceColor() != null && primaryView != null) { + primaryView.setTextColor(styles.getPrimaryTextTypefaceColor()); + } + + if (styles.getSecondaryTextTypefaceColor() != null && secondaryView != null) { + secondaryView.setTextColor(styles.getSecondaryTextTypefaceColor()); + } + + if (styles.getTertiaryTextTypefaceColor() != null && tertiaryView != null) { + tertiaryView.setTextColor(styles.getTertiaryTextTypefaceColor()); + } + + if (styles.getCallToActionTypefaceColor() != null && callToActionView != null) { + callToActionView.setTextColor(styles.getCallToActionTypefaceColor()); + } + + float ctaTextSize = styles.getCallToActionTextSize(); + if (ctaTextSize > 0 && callToActionView != null) { + callToActionView.setTextSize(ctaTextSize); + } + + float primaryTextSize = styles.getPrimaryTextSize(); + if (primaryTextSize > 0 && primaryView != null) { + primaryView.setTextSize(primaryTextSize); + } + + float secondaryTextSize = styles.getSecondaryTextSize(); + if (secondaryTextSize > 0 && secondaryView != null) { + secondaryView.setTextSize(secondaryTextSize); + } + + float tertiaryTextSize = styles.getTertiaryTextSize(); + if (tertiaryTextSize > 0 && tertiaryView != null) { + tertiaryView.setTextSize(tertiaryTextSize); + } + + Drawable ctaBackground = styles.getCallToActionBackgroundColor(); + if (ctaBackground != null && callToActionView != null) { + callToActionView.setBackground(ctaBackground); + } + + Drawable primaryBackground = styles.getPrimaryTextBackgroundColor(); + if (primaryBackground != null && primaryView != null) { + primaryView.setBackground(primaryBackground); + } + + Drawable secondaryBackground = styles.getSecondaryTextBackgroundColor(); + if (secondaryBackground != null && secondaryView != null) { + secondaryView.setBackground(secondaryBackground); + } + + Drawable tertiaryBackground = styles.getTertiaryTextBackgroundColor(); + if (tertiaryBackground != null && tertiaryView != null) { + tertiaryView.setBackground(tertiaryBackground); + } + + invalidate(); + requestLayout(); + } + + private boolean adHasOnlyStore(NativeAd nativeAd) { + String store = nativeAd.getStore(); + String advertiser = nativeAd.getAdvertiser(); + return !TextUtils.isEmpty(store) && TextUtils.isEmpty(advertiser); + } + + public void setNativeAd(NativeAd nativeAd) { + this.nativeAd = nativeAd; + + String store = nativeAd.getStore(); + String advertiser = nativeAd.getAdvertiser(); + String headline = nativeAd.getHeadline(); + String body = nativeAd.getBody(); + String cta = nativeAd.getCallToAction(); + Double starRating = nativeAd.getStarRating(); + NativeAd.Image icon = nativeAd.getIcon(); + + String secondaryText; + + nativeAdView.setCallToActionView(callToActionView); + nativeAdView.setHeadlineView(primaryView); + nativeAdView.setMediaView(mediaView); + secondaryView.setVisibility(VISIBLE); + if (adHasOnlyStore(nativeAd)) { + nativeAdView.setStoreView(secondaryView); + secondaryText = store; + } else if (!TextUtils.isEmpty(advertiser)) { + nativeAdView.setAdvertiserView(secondaryView); + secondaryText = advertiser; + } else { + secondaryText = ""; + } + + primaryView.setText(headline); + callToActionView.setText(cta); + + // Set the secondary view to be the star rating if available. + if (starRating != null && starRating > 0) { + secondaryView.setVisibility(GONE); + ratingBar.setVisibility(VISIBLE); + ratingBar.setRating(starRating.floatValue()); + + nativeAdView.setStarRatingView(ratingBar); + } else { + secondaryView.setText(secondaryText); + secondaryView.setVisibility(VISIBLE); + ratingBar.setVisibility(GONE); + } + + if (icon != null) { + iconView.setVisibility(VISIBLE); + iconView.setImageDrawable(icon.getDrawable()); + } else { + iconView.setVisibility(GONE); + } + + if (tertiaryView != null) { + tertiaryView.setText(body); + nativeAdView.setBodyView(tertiaryView); + } + + nativeAdView.setNativeAd(nativeAd); + } + + /** + * To prevent memory leaks, make sure to destroy your ad when you don't need it anymore. This + * method does not destroy the template view. + * https://developers.google.com/admob/android/native-unified#destroy_ad + */ + public void destroyNativeAd() { + nativeAd.destroy(); + } + + public String getTemplateTypeName() { + if (templateType == R.layout.gnt_medium_template_view) { + return MEDIUM_TEMPLATE; + } else if (templateType == R.layout.gnt_small_template_view) { + return SMALL_TEMPLATE; + } + return ""; + } + + private void initView(Context context, AttributeSet attributeSet) { + + TypedArray attributes = + context.getTheme().obtainStyledAttributes(attributeSet, R.styleable.TemplateView, 0, 0); + + try { + templateType = + attributes.getResourceId( + R.styleable.TemplateView_gnt_template_type, R.layout.gnt_medium_template_view); + } finally { + attributes.recycle(); + } + LayoutInflater inflater = + (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE); + inflater.inflate(templateType, this); + } + + @Override + public void onFinishInflate() { + super.onFinishInflate(); + nativeAdView = (NativeAdView) findViewById(R.id.native_ad_view); + primaryView = (TextView) findViewById(R.id.primary); + secondaryView = (TextView) findViewById(R.id.secondary); + tertiaryView = (TextView) findViewById(R.id.body); + + ratingBar = (RatingBar) findViewById(R.id.rating_bar); + ratingBar.setEnabled(false); + + callToActionView = (Button) findViewById(R.id.cta); + iconView = (ImageView) findViewById(R.id.icon); + mediaView = (MediaView) findViewById(R.id.media_view); + background = (ConstraintLayout) findViewById(R.id.background); + } +} diff --git a/mih_ui/android/build/ios/SourcePackages/google_mobile_ads-8.0.0/android/src/main/java/io/flutter/plugins/googlemobileads/AdInstanceManager.java b/mih_ui/android/build/ios/SourcePackages/google_mobile_ads-8.0.0/android/src/main/java/io/flutter/plugins/googlemobileads/AdInstanceManager.java new file mode 100644 index 00000000..3adc88b2 --- /dev/null +++ b/mih_ui/android/build/ios/SourcePackages/google_mobile_ads-8.0.0/android/src/main/java/io/flutter/plugins/googlemobileads/AdInstanceManager.java @@ -0,0 +1,245 @@ +// Copyright 2021 Google LLC +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// https://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +package io.flutter.plugins.googlemobileads; + +import android.app.Activity; +import android.os.Handler; +import android.os.Looper; +import androidx.annotation.NonNull; +import androidx.annotation.Nullable; +import com.google.android.gms.ads.AdError; +import com.google.android.gms.ads.ResponseInfo; +import io.flutter.plugin.common.MethodChannel; +import io.flutter.plugins.googlemobileads.FlutterAd.FlutterAdError; +import io.flutter.plugins.googlemobileads.FlutterAd.FlutterResponseInfo; +import java.util.HashMap; +import java.util.Map; + +/** + * Maintains reference to ad instances for the {@link + * io.flutter.plugins.googlemobileads.GoogleMobileAdsPlugin}. + * + *

When an Ad is loaded from Dart, an equivalent ad object is created and maintained here to + * provide access until the ad is disposed. + */ +class AdInstanceManager { + @Nullable private Activity activity; + + @NonNull private final Map ads; + @NonNull private final MethodChannel channel; + + /** + * Initializes the ad instance manager. We only need a method channel to start loading ads, but an + * activity must be present in order to attach any ads to the view hierarchy. + */ + AdInstanceManager(@NonNull MethodChannel channel) { + this.channel = channel; + this.ads = new HashMap<>(); + } + + void setActivity(@Nullable Activity activity) { + this.activity = activity; + } + + @Nullable + Activity getActivity() { + return activity; + } + + @Nullable + FlutterAd adForId(int id) { + return ads.get(id); + } + + @Nullable + Integer adIdFor(@NonNull FlutterAd ad) { + for (Integer adId : ads.keySet()) { + if (ads.get(adId) == ad) { + return adId; + } + } + return null; + } + + void trackAd(@NonNull FlutterAd ad, int adId) { + if (ads.get(adId) != null) { + throw new IllegalArgumentException( + String.format("Ad for following adId already exists: %d", adId)); + } + ads.put(adId, ad); + } + + void disposeAd(int adId) { + if (!ads.containsKey(adId)) { + return; + } + FlutterAd ad = ads.get(adId); + if (ad != null) { + ad.dispose(); + } + ads.remove(adId); + } + + void disposeAllAds() { + for (Map.Entry entry : ads.entrySet()) { + if (entry.getValue() != null) { + entry.getValue().dispose(); + } + } + ads.clear(); + } + + void onAdLoaded(int adId, @Nullable ResponseInfo responseInfo) { + Map arguments = new HashMap<>(); + arguments.put("adId", adId); + arguments.put("eventName", "onAdLoaded"); + FlutterResponseInfo flutterResponseInfo = + (responseInfo == null) ? null : new FlutterResponseInfo(responseInfo); + arguments.put("responseInfo", flutterResponseInfo); + invokeOnAdEvent(arguments); + } + + void onAdFailedToLoad(int adId, @NonNull FlutterAd.FlutterLoadAdError error) { + Map arguments = new HashMap<>(); + arguments.put("adId", adId); + arguments.put("eventName", "onAdFailedToLoad"); + arguments.put("loadAdError", error); + invokeOnAdEvent(arguments); + } + + void onAppEvent(int adId, @NonNull String name, @NonNull String data) { + Map arguments = new HashMap<>(); + arguments.put("adId", adId); + arguments.put("eventName", "onAppEvent"); + arguments.put("name", name); + arguments.put("data", data); + invokeOnAdEvent(arguments); + } + + void onAdImpression(int id) { + Map arguments = new HashMap<>(); + arguments.put("adId", id); + arguments.put("eventName", "onAdImpression"); + invokeOnAdEvent(arguments); + } + + void onAdClicked(int id) { + Map arguments = new HashMap<>(); + arguments.put("adId", id); + arguments.put("eventName", "onAdClicked"); + invokeOnAdEvent(arguments); + } + + void onAdOpened(int adId) { + Map arguments = new HashMap<>(); + arguments.put("adId", adId); + arguments.put("eventName", "onAdOpened"); + invokeOnAdEvent(arguments); + } + + void onAdClosed(int adId) { + Map arguments = new HashMap<>(); + arguments.put("adId", adId); + arguments.put("eventName", "onAdClosed"); + invokeOnAdEvent(arguments); + } + + void onRewardedAdUserEarnedReward(int adId, @NonNull FlutterRewardedAd.FlutterRewardItem reward) { + final Map arguments = new HashMap<>(); + arguments.put("adId", adId); + arguments.put("eventName", "onRewardedAdUserEarnedReward"); + arguments.put("rewardItem", reward); + invokeOnAdEvent(arguments); + } + + void onRewardedInterstitialAdUserEarnedReward( + int adId, @NonNull FlutterRewardedAd.FlutterRewardItem reward) { + final Map arguments = new HashMap<>(); + arguments.put("adId", adId); + arguments.put("eventName", "onRewardedInterstitialAdUserEarnedReward"); + arguments.put("rewardItem", reward); + invokeOnAdEvent(arguments); + } + + void onPaidEvent(@NonNull FlutterAd ad, @NonNull FlutterAdValue adValue) { + final Map arguments = new HashMap<>(); + arguments.put("adId", adIdFor(ad)); + arguments.put("eventName", "onPaidEvent"); + arguments.put("valueMicros", adValue.valueMicros); + arguments.put("precision", adValue.precisionType); + arguments.put("currencyCode", adValue.currencyCode); + invokeOnAdEvent(arguments); + } + + void onFailedToShowFullScreenContent(int adId, @NonNull AdError error) { + final Map arguments = new HashMap<>(); + arguments.put("adId", adId); + arguments.put("eventName", "onFailedToShowFullScreenContent"); + arguments.put("error", new FlutterAdError(error)); + invokeOnAdEvent(arguments); + } + + void onAdShowedFullScreenContent(int adId) { + final Map arguments = new HashMap<>(); + arguments.put("adId", adId); + arguments.put("eventName", "onAdShowedFullScreenContent"); + invokeOnAdEvent(arguments); + } + + void onAdDismissedFullScreenContent(int adId) { + final Map arguments = new HashMap<>(); + arguments.put("adId", adId); + arguments.put("eventName", "onAdDismissedFullScreenContent"); + invokeOnAdEvent(arguments); + } + + void onAdMetadataChanged(int adId) { + final Map arguments = new HashMap<>(); + arguments.put("adId", adId); + arguments.put("eventName", "onAdMetadataChanged"); + invokeOnAdEvent(arguments); + } + + void onFluidAdHeightChanged(int adId, int height) { + final Map arguments = new HashMap<>(); + arguments.put("adId", adId); + arguments.put("eventName", "onFluidAdHeightChanged"); + arguments.put("height", height); + invokeOnAdEvent(arguments); + } + + boolean showAdWithId(int id) { + final FlutterAd.FlutterOverlayAd ad = (FlutterAd.FlutterOverlayAd) adForId(id); + + if (ad == null) { + return false; + } + + ad.show(); + return true; + } + + /** Invoke the method channel using the UI thread. Otherwise the message gets silently dropped. */ + private void invokeOnAdEvent(final Map arguments) { + new Handler(Looper.getMainLooper()) + .post( + new Runnable() { + @Override + public void run() { + channel.invokeMethod("onAdEvent", arguments); + } + }); + } +} diff --git a/mih_ui/android/build/ios/SourcePackages/google_mobile_ads-8.0.0/android/src/main/java/io/flutter/plugins/googlemobileads/AdMessageCodec.java b/mih_ui/android/build/ios/SourcePackages/google_mobile_ads-8.0.0/android/src/main/java/io/flutter/plugins/googlemobileads/AdMessageCodec.java new file mode 100644 index 00000000..68c23891 --- /dev/null +++ b/mih_ui/android/build/ios/SourcePackages/google_mobile_ads-8.0.0/android/src/main/java/io/flutter/plugins/googlemobileads/AdMessageCodec.java @@ -0,0 +1,484 @@ +// Copyright 2021 Google LLC +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// https://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License.c language governing permissions and +// limitations under the License. + +package io.flutter.plugins.googlemobileads; + +import android.content.Context; +import android.graphics.Color; +import android.graphics.drawable.ColorDrawable; +import android.util.Log; +import androidx.annotation.NonNull; +import androidx.annotation.Nullable; +import androidx.annotation.VisibleForTesting; +import com.google.android.gms.ads.RequestConfiguration; +import io.flutter.plugin.common.StandardMessageCodec; +import io.flutter.plugins.googlemobileads.FlutterAd.FlutterAdError; +import io.flutter.plugins.googlemobileads.FlutterAd.FlutterAdapterResponseInfo; +import io.flutter.plugins.googlemobileads.FlutterAd.FlutterResponseInfo; +import io.flutter.plugins.googlemobileads.FlutterAdSize.InlineAdaptiveBannerAdSize; +import io.flutter.plugins.googlemobileads.nativetemplates.FlutterNativeTemplateFontStyle; +import io.flutter.plugins.googlemobileads.nativetemplates.FlutterNativeTemplateStyle; +import io.flutter.plugins.googlemobileads.nativetemplates.FlutterNativeTemplateTextStyle; +import io.flutter.plugins.googlemobileads.nativetemplates.FlutterNativeTemplateType; +import java.lang.reflect.InvocationTargetException; +import java.io.ByteArrayOutputStream; +import java.lang.reflect.InvocationTargetException; +import java.nio.ByteBuffer; +import java.util.List; +import java.util.Map; + +/** + * Encodes and decodes values by reading from a ByteBuffer and writing to a ByteArrayOutputStream. + */ +class AdMessageCodec extends StandardMessageCodec { + // The type values below must be consistent for each platform. + private static final byte VALUE_AD_SIZE = (byte) 128; + private static final byte VALUE_AD_REQUEST = (byte) 129; + private static final byte VALUE_FLUID_AD_SIZE = (byte) 130; + private static final byte VALUE_REWARD_ITEM = (byte) 132; + private static final byte VALUE_LOAD_AD_ERROR = (byte) 133; + private static final byte VALUE_ADMANAGER_AD_REQUEST = (byte) 134; + private static final byte VALUE_INITIALIZATION_STATE = (byte) 135; + private static final byte VALUE_ADAPTER_STATUS = (byte) 136; + private static final byte VALUE_INITIALIZATION_STATUS = (byte) 137; + private static final byte VALUE_SERVER_SIDE_VERIFICATION_OPTIONS = (byte) 138; + private static final byte VALUE_AD_ERROR = (byte) 139; + private static final byte VALUE_RESPONSE_INFO = (byte) 140; + private static final byte VALUE_ADAPTER_RESPONSE_INFO = (byte) 141; + private static final byte VALUE_ANCHORED_ADAPTIVE_BANNER_AD_SIZE = (byte) 142; + private static final byte VALUE_SMART_BANNER_AD_SIZE = (byte) 143; + private static final byte VALUE_NATIVE_AD_OPTIONS = (byte) 144; + private static final byte VALUE_VIDEO_OPTIONS = (byte) 145; + private static final byte VALUE_INLINE_ADAPTIVE_BANNER_AD_SIZE = (byte) 146; + private static final byte VALUE_REQUEST_CONFIGURATION_PARAMS = (byte) 148; + private static final byte VALUE_NATIVE_TEMPLATE_STYLE = (byte) 149; + private static final byte VALUE_NATIVE_TEMPLATE_TEXT_STYLE = (byte) 150; + private static final byte VALUE_NATIVE_TEMPLATE_FONT_STYLE = (byte) 151; + private static final byte VALUE_NATIVE_TEMPLATE_TYPE = (byte) 152; + private static final byte VALUE_COLOR = (byte) 153; + private static final byte VALUE_MEDIATION_EXTRAS = (byte) 154; + + @NonNull Context context; + @NonNull final FlutterAdSize.AdSizeFactory adSizeFactory; + + @SuppressWarnings("deprecation") // Keeping for compatibility + @Nullable + private MediationNetworkExtrasProvider mediationNetworkExtrasProvider; + + @NonNull private final FlutterRequestAgentProvider requestAgentProvider; + + AdMessageCodec( + @NonNull Context context, @NonNull FlutterRequestAgentProvider requestAgentProvider) { + this.context = context; + this.adSizeFactory = new FlutterAdSize.AdSizeFactory(); + this.requestAgentProvider = requestAgentProvider; + } + + @VisibleForTesting + AdMessageCodec( + @NonNull Context context, + @NonNull FlutterAdSize.AdSizeFactory adSizeFactory, + @NonNull FlutterRequestAgentProvider requestAgentProvider) { + this.context = context; + this.adSizeFactory = adSizeFactory; + this.requestAgentProvider = requestAgentProvider; + } + + void setContext(@NonNull Context context) { + this.context = context; + } + + @SuppressWarnings("deprecation") // Keeping for compatibility + void setMediationNetworkExtrasProvider( + @Nullable MediationNetworkExtrasProvider mediationNetworkExtrasProvider) { + this.mediationNetworkExtrasProvider = mediationNetworkExtrasProvider; + } + + @Override + protected void writeValue(ByteArrayOutputStream stream, Object value) { + if (value instanceof FlutterAdSize) { + writeAdSize(stream, (FlutterAdSize) value); + } else if (value instanceof FlutterAdManagerAdRequest) { + stream.write(VALUE_ADMANAGER_AD_REQUEST); + final FlutterAdManagerAdRequest request = (FlutterAdManagerAdRequest) value; + writeValue(stream, request.getKeywords()); + writeValue(stream, request.getContentUrl()); + writeValue(stream, request.getCustomTargeting()); + writeValue(stream, request.getCustomTargetingLists()); + writeValue(stream, request.getNonPersonalizedAds()); + writeValue(stream, request.getNeighboringContentUrls()); + writeValue(stream, request.getHttpTimeoutMillis()); + writeValue(stream, request.getPublisherProvidedId()); + writeValue(stream, request.getMediationExtrasIdentifier()); + writeValue(stream, request.getAdMobExtras()); + writeValue(stream, request.getMediationExtras()); + } else if (value instanceof FlutterAdRequest) { + stream.write(VALUE_AD_REQUEST); + final FlutterAdRequest request = (FlutterAdRequest) value; + writeValue(stream, request.getKeywords()); + writeValue(stream, request.getContentUrl()); + writeValue(stream, request.getNonPersonalizedAds()); + writeValue(stream, request.getNeighboringContentUrls()); + writeValue(stream, request.getHttpTimeoutMillis()); + writeValue(stream, request.getMediationExtrasIdentifier()); + writeValue(stream, request.getAdMobExtras()); + writeValue(stream, request.getMediationExtras()); + } else if (value instanceof FlutterMediationExtras) { + stream.write(VALUE_MEDIATION_EXTRAS); + final FlutterMediationExtras mediationExtras = (FlutterMediationExtras) value; + String className = mediationExtras.getClass().getCanonicalName(); + writeValue(stream, className); + writeValue(stream, mediationExtras.extras); + } else if (value instanceof FlutterRewardedAd.FlutterRewardItem) { + stream.write(VALUE_REWARD_ITEM); + final FlutterRewardedAd.FlutterRewardItem item = (FlutterRewardedAd.FlutterRewardItem) value; + writeValue(stream, item.amount); + writeValue(stream, item.type); + } else if (value instanceof FlutterAdapterResponseInfo) { + stream.write(VALUE_ADAPTER_RESPONSE_INFO); + final FlutterAdapterResponseInfo responseInfo = (FlutterAdapterResponseInfo) value; + writeValue(stream, responseInfo.getAdapterClassName()); + writeValue(stream, responseInfo.getLatencyMillis()); + writeValue(stream, responseInfo.getDescription()); + writeValue(stream, responseInfo.getAdUnitMapping()); + writeValue(stream, responseInfo.getError()); + writeValue(stream, responseInfo.getAdSourceName()); + writeValue(stream, responseInfo.getAdSourceId()); + writeValue(stream, responseInfo.getAdSourceInstanceName()); + writeValue(stream, responseInfo.getAdSourceInstanceId()); + } else if (value instanceof FlutterResponseInfo) { + stream.write(VALUE_RESPONSE_INFO); + final FlutterResponseInfo responseInfo = (FlutterResponseInfo) value; + writeValue(stream, responseInfo.getResponseId()); + writeValue(stream, responseInfo.getMediationAdapterClassName()); + writeValue(stream, responseInfo.getAdapterResponses()); + writeValue(stream, responseInfo.getLoadedAdapterResponseInfo()); + writeValue(stream, responseInfo.getResponseExtras()); + } else if (value instanceof FlutterAd.FlutterLoadAdError) { + stream.write(VALUE_LOAD_AD_ERROR); + final FlutterAd.FlutterLoadAdError error = (FlutterAd.FlutterLoadAdError) value; + writeValue(stream, error.code); + writeValue(stream, error.domain); + writeValue(stream, error.message); + writeValue(stream, error.responseInfo); + } else if (value instanceof FlutterAdError) { + stream.write(VALUE_AD_ERROR); + final FlutterAdError error = (FlutterAdError) value; + writeValue(stream, error.code); + writeValue(stream, error.domain); + writeValue(stream, error.message); + } else if (value instanceof FlutterAdapterStatus.AdapterInitializationState) { + stream.write(VALUE_INITIALIZATION_STATE); + final FlutterAdapterStatus.AdapterInitializationState state = + (FlutterAdapterStatus.AdapterInitializationState) value; + switch (state) { + case NOT_READY: + writeValue(stream, "notReady"); + return; + case READY: + writeValue(stream, "ready"); + return; + } + final String message = String.format("Unable to handle state: %s", state); + throw new IllegalArgumentException(message); + } else if (value instanceof FlutterAdapterStatus) { + stream.write(VALUE_ADAPTER_STATUS); + final FlutterAdapterStatus status = (FlutterAdapterStatus) value; + writeValue(stream, status.state); + writeValue(stream, status.description); + writeValue(stream, status.latency); + } else if (value instanceof FlutterInitializationStatus) { + stream.write(VALUE_INITIALIZATION_STATUS); + final FlutterInitializationStatus status = (FlutterInitializationStatus) value; + writeValue(stream, status.adapterStatuses); + } else if (value instanceof FlutterServerSideVerificationOptions) { + stream.write(VALUE_SERVER_SIDE_VERIFICATION_OPTIONS); + FlutterServerSideVerificationOptions options = (FlutterServerSideVerificationOptions) value; + writeValue(stream, options.getUserId()); + writeValue(stream, options.getCustomData()); + } else if (value instanceof FlutterNativeAdOptions) { + stream.write(VALUE_NATIVE_AD_OPTIONS); + FlutterNativeAdOptions options = (FlutterNativeAdOptions) value; + writeValue(stream, options.adChoicesPlacement); + writeValue(stream, options.mediaAspectRatio); + writeValue(stream, options.videoOptions); + writeValue(stream, options.requestCustomMuteThisAd); + writeValue(stream, options.shouldRequestMultipleImages); + writeValue(stream, options.shouldReturnUrlsForImageAssets); + } else if (value instanceof RequestConfiguration) { + stream.write(VALUE_REQUEST_CONFIGURATION_PARAMS); + RequestConfiguration params = (RequestConfiguration) value; + writeValue(stream, params.getMaxAdContentRating()); + writeValue(stream, params.getTagForChildDirectedTreatment()); + writeValue(stream, params.getTagForUnderAgeOfConsent()); + writeValue(stream, params.getTestDeviceIds()); + } else if (value instanceof FlutterVideoOptions) { + stream.write(VALUE_VIDEO_OPTIONS); + FlutterVideoOptions options = (FlutterVideoOptions) value; + writeValue(stream, options.clickToExpandRequested); + writeValue(stream, options.customControlsRequested); + writeValue(stream, options.startMuted); + } else if (value instanceof FlutterNativeTemplateStyle) { + stream.write(VALUE_NATIVE_TEMPLATE_STYLE); + FlutterNativeTemplateStyle nativeTemplateStyle = (FlutterNativeTemplateStyle) value; + writeValue(stream, nativeTemplateStyle.getTemplateType()); + writeValue(stream, nativeTemplateStyle.getMainBackgroundColor()); + writeValue(stream, nativeTemplateStyle.getCallToActionStyle()); + writeValue(stream, nativeTemplateStyle.getPrimaryTextStyle()); + writeValue(stream, nativeTemplateStyle.getSecondaryTextStyle()); + writeValue(stream, nativeTemplateStyle.getTertiaryTextStyle()); + } else if (value instanceof FlutterNativeTemplateFontStyle) { + stream.write(VALUE_NATIVE_TEMPLATE_FONT_STYLE); + writeValue(stream, ((FlutterNativeTemplateFontStyle) value).ordinal()); + } else if (value instanceof FlutterNativeTemplateType) { + stream.write(VALUE_NATIVE_TEMPLATE_TYPE); + writeValue(stream, ((FlutterNativeTemplateType) value).ordinal()); + } else if (value instanceof FlutterNativeTemplateTextStyle) { + stream.write(VALUE_NATIVE_TEMPLATE_TEXT_STYLE); + FlutterNativeTemplateTextStyle textStyle = (FlutterNativeTemplateTextStyle) value; + writeValue(stream, textStyle.getTextColor()); + writeValue(stream, textStyle.getBackgroundColor()); + writeValue(stream, textStyle.getFontStyle()); + writeValue(stream, textStyle.getSize()); + } else if (value instanceof ColorDrawable) { + stream.write(VALUE_COLOR); + int colorValue = ((ColorDrawable) value).getColor(); + writeValue(stream, Color.alpha(colorValue)); + writeValue(stream, Color.red(colorValue)); + writeValue(stream, Color.green(colorValue)); + writeValue(stream, Color.blue(colorValue)); + } else { + super.writeValue(stream, value); + } + } + + @SuppressWarnings("unchecked") + @Override + protected Object readValueOfType(byte type, ByteBuffer buffer) { + switch (type) { + case VALUE_INLINE_ADAPTIVE_BANNER_AD_SIZE: + { + final Integer width = (Integer) readValueOfType(buffer.get(), buffer); + final Integer height = (Integer) readValueOfType(buffer.get(), buffer); + final Integer orientation = (Integer) readValueOfType(buffer.get(), buffer); + return new FlutterAdSize.InlineAdaptiveBannerAdSize( + adSizeFactory, context, width, orientation, height); + } + case VALUE_ANCHORED_ADAPTIVE_BANNER_AD_SIZE: + final String orientation = (String) readValueOfType(buffer.get(), buffer); + final Integer width = (Integer) readValueOfType(buffer.get(), buffer); + return new FlutterAdSize.AnchoredAdaptiveBannerAdSize( + context, adSizeFactory, orientation, width, /* isLarge = */ false); + case VALUE_SMART_BANNER_AD_SIZE: + return new FlutterAdSize.SmartBannerAdSize(); + case VALUE_AD_SIZE: + return new FlutterAdSize( + (Integer) readValueOfType(buffer.get(), buffer), + (Integer) readValueOfType(buffer.get(), buffer)); + case VALUE_FLUID_AD_SIZE: + return new FlutterAdSize.FluidAdSize(); + case VALUE_AD_REQUEST: + return new FlutterAdRequest.Builder() + .setKeywords((List) readValueOfType(buffer.get(), buffer)) + .setContentUrl((String) readValueOfType(buffer.get(), buffer)) + .setNonPersonalizedAds(booleanValueOf(readValueOfType(buffer.get(), buffer))) + .setNeighboringContentUrls((List) readValueOfType(buffer.get(), buffer)) + .setHttpTimeoutMillis((Integer) readValueOfType(buffer.get(), buffer)) + .setMediationNetworkExtrasIdentifier((String) readValueOfType(buffer.get(), buffer)) + .setMediationNetworkExtrasProvider(mediationNetworkExtrasProvider) + .setAdMobExtras((Map) readValueOfType(buffer.get(), buffer)) + .setRequestAgent(requestAgentProvider.getRequestAgent()) + .setMediationExtras( + (List) readValueOfType(buffer.get(), buffer)) + .build(); + case VALUE_MEDIATION_EXTRAS: + String className = (String) readValueOfType(buffer.get(), buffer); + Map extras = (Map) readValueOfType(buffer.get(), buffer); + try { + assert className != null; + Class cls = Class.forName(className); + FlutterMediationExtras flutterExtras = (FlutterMediationExtras) cls.getDeclaredConstructor() + .newInstance(); + flutterExtras.setMediationExtras(extras); + return flutterExtras; + } catch (ClassNotFoundException e) { + Log.e("FlutterMediationExtras", "Class not found: " + className); + } catch (NoSuchMethodException e) { + Log.e("FlutterMediationExtras", "No such method found: " + className + ".getDeclaredConstructor()"); + } catch (InvocationTargetException e) { + Log.e("FlutterMediationExtras", "Invocation Target Exception for: " + className); + } catch (IllegalAccessException e) { + Log.e("FlutterMediationExtras", "Illegal Access to " + className); + } catch (InstantiationException e) { + Log.e("FlutterMediationExtras", "Unable to instantiate class " + className); + } + return null; + case VALUE_REWARD_ITEM: + return new FlutterRewardedAd.FlutterRewardItem( + (Integer) readValueOfType(buffer.get(), buffer), + (String) readValueOfType(buffer.get(), buffer)); + case VALUE_ADAPTER_RESPONSE_INFO: + return new FlutterAdapterResponseInfo( + (String) readValueOfType(buffer.get(), buffer), + (long) readValueOfType(buffer.get(), buffer), + (String) readValueOfType(buffer.get(), buffer), + (Map) readValueOfType(buffer.get(), buffer), + (FlutterAdError) readValueOfType(buffer.get(), buffer), + (String) readValueOfType(buffer.get(), buffer), + (String) readValueOfType(buffer.get(), buffer), + (String) readValueOfType(buffer.get(), buffer), + (String) readValueOfType(buffer.get(), buffer)); + case VALUE_RESPONSE_INFO: + return new FlutterResponseInfo( + (String) readValueOfType(buffer.get(), buffer), + (String) readValueOfType(buffer.get(), buffer), + (List) readValueOfType(buffer.get(), buffer), + (FlutterAdapterResponseInfo) readValueOfType(buffer.get(), buffer), + (Map) readValueOfType(buffer.get(), buffer)); + case VALUE_LOAD_AD_ERROR: + return new FlutterAd.FlutterLoadAdError( + (Integer) readValueOfType(buffer.get(), buffer), + (String) readValueOfType(buffer.get(), buffer), + (String) readValueOfType(buffer.get(), buffer), + (FlutterResponseInfo) readValueOfType(buffer.get(), buffer)); + case VALUE_AD_ERROR: + return new FlutterAdError( + (Integer) readValueOfType(buffer.get(), buffer), + (String) readValueOfType(buffer.get(), buffer), + (String) readValueOfType(buffer.get(), buffer)); + case VALUE_ADMANAGER_AD_REQUEST: + FlutterAdManagerAdRequest.Builder builder = new FlutterAdManagerAdRequest.Builder(); + builder.setKeywords((List) readValueOfType(buffer.get(), buffer)); + builder.setContentUrl((String) readValueOfType(buffer.get(), buffer)); + builder.setCustomTargeting((Map) readValueOfType(buffer.get(), buffer)); + builder.setCustomTargetingLists( + (Map>) readValueOfType(buffer.get(), buffer)); + builder.setNonPersonalizedAds((Boolean) readValueOfType(buffer.get(), buffer)); + builder.setNeighboringContentUrls((List) readValueOfType(buffer.get(), buffer)); + builder.setHttpTimeoutMillis((Integer) readValueOfType(buffer.get(), buffer)); + builder.setPublisherProvidedId((String) readValueOfType(buffer.get(), buffer)); + builder.setMediationNetworkExtrasIdentifier((String) readValueOfType(buffer.get(), buffer)); + builder.setMediationNetworkExtrasProvider(mediationNetworkExtrasProvider); + builder.setAdMobExtras((Map) readValueOfType(buffer.get(), buffer)); + builder.setRequestAgent(requestAgentProvider.getRequestAgent()); + builder.setMediationExtras( + (List) readValueOfType(buffer.get(), buffer)); + return builder.build(); + case VALUE_INITIALIZATION_STATE: + final String state = (String) readValueOfType(buffer.get(), buffer); + switch (state) { + case "notReady": + return FlutterAdapterStatus.AdapterInitializationState.NOT_READY; + case "ready": + return FlutterAdapterStatus.AdapterInitializationState.READY; + default: + final String message = String.format("Unable to handle state: %s", state); + throw new IllegalArgumentException(message); + } + case VALUE_ADAPTER_STATUS: + return new FlutterAdapterStatus( + (FlutterAdapterStatus.AdapterInitializationState) readValueOfType(buffer.get(), buffer), + (String) readValueOfType(buffer.get(), buffer), + (Number) readValueOfType(buffer.get(), buffer)); + case VALUE_INITIALIZATION_STATUS: + return new FlutterInitializationStatus( + (Map) readValueOfType(buffer.get(), buffer)); + case VALUE_SERVER_SIDE_VERIFICATION_OPTIONS: + return new FlutterServerSideVerificationOptions( + (String) readValueOfType(buffer.get(), buffer), + (String) readValueOfType(buffer.get(), buffer)); + case VALUE_NATIVE_AD_OPTIONS: + return new FlutterNativeAdOptions( + (Integer) readValueOfType(buffer.get(), buffer), + (Integer) readValueOfType(buffer.get(), buffer), + (FlutterVideoOptions) readValueOfType(buffer.get(), buffer), + (Boolean) readValueOfType(buffer.get(), buffer), + (Boolean) readValueOfType(buffer.get(), buffer), + (Boolean) readValueOfType(buffer.get(), buffer)); + case VALUE_VIDEO_OPTIONS: + return new FlutterVideoOptions( + (Boolean) readValueOfType(buffer.get(), buffer), + (Boolean) readValueOfType(buffer.get(), buffer), + (Boolean) readValueOfType(buffer.get(), buffer)); + case VALUE_REQUEST_CONFIGURATION_PARAMS: + RequestConfiguration.Builder rcb = new RequestConfiguration.Builder(); + rcb.setMaxAdContentRating((String) readValueOfType(buffer.get(), buffer)); + rcb.setTagForChildDirectedTreatment((Integer) readValueOfType(buffer.get(), buffer)); + rcb.setTagForUnderAgeOfConsent((Integer) readValueOfType(buffer.get(), buffer)); + rcb.setTestDeviceIds((List) readValueOfType(buffer.get(), buffer)); + return rcb.build(); + case VALUE_NATIVE_TEMPLATE_STYLE: + return new FlutterNativeTemplateStyle( + (FlutterNativeTemplateType) readValueOfType(buffer.get(), buffer), + (ColorDrawable) readValueOfType(buffer.get(), buffer), + (FlutterNativeTemplateTextStyle) readValueOfType(buffer.get(), buffer), + (FlutterNativeTemplateTextStyle) readValueOfType(buffer.get(), buffer), + (FlutterNativeTemplateTextStyle) readValueOfType(buffer.get(), buffer), + (FlutterNativeTemplateTextStyle) readValueOfType(buffer.get(), buffer)); + case VALUE_NATIVE_TEMPLATE_TEXT_STYLE: + return new FlutterNativeTemplateTextStyle( + (ColorDrawable) readValueOfType(buffer.get(), buffer), + (ColorDrawable) readValueOfType(buffer.get(), buffer), + (FlutterNativeTemplateFontStyle) readValueOfType(buffer.get(), buffer), + ((Double) readValueOfType(buffer.get(), buffer))); + case VALUE_NATIVE_TEMPLATE_FONT_STYLE: + return FlutterNativeTemplateFontStyle.fromIntValue( + (Integer) readValueOfType(buffer.get(), buffer)); + case VALUE_NATIVE_TEMPLATE_TYPE: + return FlutterNativeTemplateType.fromIntValue( + (Integer) readValueOfType(buffer.get(), buffer)); + case VALUE_COLOR: + final Integer alpha = (Integer) readValueOfType(buffer.get(), buffer); + final Integer red = (Integer) readValueOfType(buffer.get(), buffer); + final Integer green = (Integer) readValueOfType(buffer.get(), buffer); + final Integer blue = (Integer) readValueOfType(buffer.get(), buffer); + return new ColorDrawable(Color.argb(alpha, red, green, blue)); + default: + return super.readValueOfType(type, buffer); + } + } + + protected void writeAdSize(ByteArrayOutputStream stream, FlutterAdSize value) { + if (value instanceof FlutterAdSize.InlineAdaptiveBannerAdSize) { + final InlineAdaptiveBannerAdSize size = (InlineAdaptiveBannerAdSize) value; + stream.write(VALUE_INLINE_ADAPTIVE_BANNER_AD_SIZE); + writeValue(stream, size.width); + writeValue(stream, size.maxHeight); + writeValue(stream, size.orientation); + } else if (value instanceof FlutterAdSize.AnchoredAdaptiveBannerAdSize) { + stream.write(VALUE_ANCHORED_ADAPTIVE_BANNER_AD_SIZE); + final FlutterAdSize.AnchoredAdaptiveBannerAdSize size = + (FlutterAdSize.AnchoredAdaptiveBannerAdSize) value; + writeValue(stream, size.orientation); + writeValue(stream, size.width); + } else if (value instanceof FlutterAdSize.SmartBannerAdSize) { + stream.write(VALUE_SMART_BANNER_AD_SIZE); + } else if (value instanceof FlutterAdSize.FluidAdSize) { + stream.write(VALUE_FLUID_AD_SIZE); + } else { + stream.write(VALUE_AD_SIZE); + writeValue(stream, value.width); + writeValue(stream, value.height); + } + } + + @Nullable + private static Boolean booleanValueOf(@Nullable Object object) { + if (object == null) { + return null; + } + return (Boolean) object; + } +} diff --git a/mih_ui/android/build/ios/SourcePackages/google_mobile_ads-8.0.0/android/src/main/java/io/flutter/plugins/googlemobileads/AppStateNotifier.java b/mih_ui/android/build/ios/SourcePackages/google_mobile_ads-8.0.0/android/src/main/java/io/flutter/plugins/googlemobileads/AppStateNotifier.java new file mode 100644 index 00000000..3e6bffb9 --- /dev/null +++ b/mih_ui/android/build/ios/SourcePackages/google_mobile_ads-8.0.0/android/src/main/java/io/flutter/plugins/googlemobileads/AppStateNotifier.java @@ -0,0 +1,94 @@ +// Copyright 2021 Google LLC +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// https://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +package io.flutter.plugins.googlemobileads; + +import androidx.annotation.NonNull; +import androidx.annotation.Nullable; +import androidx.lifecycle.Lifecycle.Event; +import androidx.lifecycle.LifecycleEventObserver; +import androidx.lifecycle.LifecycleOwner; +import androidx.lifecycle.ProcessLifecycleOwner; +import io.flutter.plugin.common.BinaryMessenger; +import io.flutter.plugin.common.EventChannel; +import io.flutter.plugin.common.EventChannel.EventSink; +import io.flutter.plugin.common.EventChannel.StreamHandler; +import io.flutter.plugin.common.MethodCall; +import io.flutter.plugin.common.MethodChannel; +import io.flutter.plugin.common.MethodChannel.MethodCallHandler; +import io.flutter.plugin.common.MethodChannel.Result; + +/** Listens to changes in app foreground/background and forwards events to Flutter. */ +final class AppStateNotifier implements LifecycleEventObserver, MethodCallHandler, StreamHandler { + + private static final String METHOD_CHANNEL_NAME = + "plugins.flutter.io/google_mobile_ads/app_state_method"; + private static final String EVENT_CHANNEL_NAME = + "plugins.flutter.io/google_mobile_ads/app_state_event"; + + @NonNull private final MethodChannel methodChannel; + @NonNull private final EventChannel eventChannel; + + @Nullable private EventSink events; + + AppStateNotifier(BinaryMessenger binaryMessenger) { + methodChannel = new MethodChannel(binaryMessenger, METHOD_CHANNEL_NAME); + methodChannel.setMethodCallHandler(this); + eventChannel = new EventChannel(binaryMessenger, EVENT_CHANNEL_NAME); + eventChannel.setStreamHandler(this); + } + + /** Starts listening for app lifecycle changes. */ + void start() { + ProcessLifecycleOwner.get().getLifecycle().addObserver(this); + } + + /** Stops listening for app lifecycle changes. */ + void stop() { + ProcessLifecycleOwner.get().getLifecycle().removeObserver(this); + } + + @Override + public void onMethodCall(@NonNull MethodCall call, @NonNull Result result) { + switch (call.method) { + case "start": + start(); + break; + case "stop": + stop(); + break; + default: + result.notImplemented(); + } + } + + @Override + public void onStateChanged(@NonNull LifecycleOwner source, @NonNull Event event) { + if (event == Event.ON_START && events != null) { + events.success("foreground"); + } else if (event == Event.ON_STOP && events != null) { + events.success("background"); + } + } + + @Override + public void onListen(Object arguments, EventSink events) { + this.events = events; + } + + @Override + public void onCancel(Object arguments) { + this.events = null; + } +} diff --git a/mih_ui/android/build/ios/SourcePackages/google_mobile_ads-8.0.0/android/src/main/java/io/flutter/plugins/googlemobileads/BannerAdCreator.java b/mih_ui/android/build/ios/SourcePackages/google_mobile_ads-8.0.0/android/src/main/java/io/flutter/plugins/googlemobileads/BannerAdCreator.java new file mode 100644 index 00000000..618eb183 --- /dev/null +++ b/mih_ui/android/build/ios/SourcePackages/google_mobile_ads-8.0.0/android/src/main/java/io/flutter/plugins/googlemobileads/BannerAdCreator.java @@ -0,0 +1,40 @@ +// Copyright 2021 Google LLC +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// https://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +package io.flutter.plugins.googlemobileads; + +import android.content.Context; +import androidx.annotation.NonNull; +import com.google.android.gms.ads.AdView; +import com.google.android.gms.ads.admanager.AdManagerAdView; + +/** Creates AdView and AdManagerAdViews for banner ads. */ +public class BannerAdCreator { + + @NonNull private final Context context; + + public BannerAdCreator(@NonNull Context context) { + this.context = context; + } + + /** Create a new {@link AdManagerAdView}. */ + public AdManagerAdView createAdManagerAdView() { + return new AdManagerAdView(context); + } + + /** Create a new {@link AdView}. */ + public AdView createAdView() { + return new AdView(context); + } +} diff --git a/mih_ui/android/build/ios/SourcePackages/google_mobile_ads-8.0.0/android/src/main/java/io/flutter/plugins/googlemobileads/Constants.java b/mih_ui/android/build/ios/SourcePackages/google_mobile_ads-8.0.0/android/src/main/java/io/flutter/plugins/googlemobileads/Constants.java new file mode 100644 index 00000000..ab28b206 --- /dev/null +++ b/mih_ui/android/build/ios/SourcePackages/google_mobile_ads-8.0.0/android/src/main/java/io/flutter/plugins/googlemobileads/Constants.java @@ -0,0 +1,27 @@ +// Copyright 2021 Google LLC +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// https://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +package io.flutter.plugins.googlemobileads; + +/** Constants used in the plugin. */ +public class Constants { + /** Version request agent. Should be bumped alongside plugin versions. */ + public static final String REQUEST_AGENT_PREFIX_VERSIONED = "Flutter-GMA-8.0.0"; + /** Prefix for news template */ + public static final String REQUEST_AGENT_NEWS_TEMPLATE_PREFIX = "News"; + + public static final String REQUEST_AGENT_GAME_TEMPLATE_PREFIX = "Game"; + + static final String ERROR_CODE_UNEXPECTED_AD_TYPE = "unexpected_ad_type"; +} diff --git a/mih_ui/android/build/ios/SourcePackages/google_mobile_ads-8.0.0/android/src/main/java/io/flutter/plugins/googlemobileads/FluidAdManagerBannerAd.java b/mih_ui/android/build/ios/SourcePackages/google_mobile_ads-8.0.0/android/src/main/java/io/flutter/plugins/googlemobileads/FluidAdManagerBannerAd.java new file mode 100644 index 00000000..35dadd63 --- /dev/null +++ b/mih_ui/android/build/ios/SourcePackages/google_mobile_ads-8.0.0/android/src/main/java/io/flutter/plugins/googlemobileads/FluidAdManagerBannerAd.java @@ -0,0 +1,125 @@ +// Copyright 2021 Google LLC +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// https://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +package io.flutter.plugins.googlemobileads; + +import android.util.Log; +import android.view.View; +import android.view.View.OnLayoutChangeListener; +import android.view.ViewGroup; +import android.widget.ScrollView; +import androidx.annotation.NonNull; +import androidx.annotation.Nullable; +import androidx.annotation.VisibleForTesting; +import com.google.android.gms.ads.AdSize; +import io.flutter.plugin.platform.PlatformView; +import java.util.Collections; + +/** A subclass of {@link FlutterAdManagerBannerAd} specifically for fluid ad size. */ +final class FluidAdManagerBannerAd extends FlutterAdManagerBannerAd { + + private static final String TAG = "FluidAdManagerBannerAd"; + + @Nullable private ViewGroup containerView; + + private int height = -1; + + FluidAdManagerBannerAd( + int adId, + @NonNull AdInstanceManager manager, + @NonNull String adUnitId, + @NonNull FlutterAdManagerAdRequest request, + @NonNull BannerAdCreator bannerAdCreator) { + super( + adId, + manager, + adUnitId, + Collections.singletonList(new FlutterAdSize(AdSize.FLUID)), + request, + bannerAdCreator); + } + + @Override + public void onAdLoaded() { + if (adView != null) { + adView.addOnLayoutChangeListener( + new OnLayoutChangeListener() { + @Override + public void onLayoutChange( + View v, + int left, + int top, + int right, + int bottom, + int oldLeft, + int oldTop, + int oldRight, + int oldBottom) { + // Forward the new height to its container. + int newHeight = v.getMeasuredHeight(); + if (newHeight != height) { + manager.onFluidAdHeightChanged(adId, newHeight); + } + height = newHeight; + } + }); + manager.onAdLoaded(adId, adView.getResponseInfo()); + } + } + + @Nullable + @Override + PlatformView getPlatformView() { + if (adView == null) { + return null; + } + if (containerView != null) { + return new FlutterPlatformView(containerView); + } + // Place the ad view inside a scroll view. This allows the height of the ad view to overflow + // its container so we can calculate the height and send it back to flutter. + ScrollView scrollView = createContainerView(); + if (scrollView == null) { + return null; + } + scrollView.setClipChildren(false); + scrollView.setVerticalScrollBarEnabled(false); + scrollView.setHorizontalScrollBarEnabled(false); + containerView = scrollView; + containerView.addView(adView); + return new FlutterPlatformView(adView); + } + + @Nullable + @VisibleForTesting + ScrollView createContainerView() { + if (manager.getActivity() == null) { + Log.e(TAG, "Tried to create container view before plugin is attached to an activity."); + return null; + } + return new ScrollView(manager.getActivity()); + } + + @Override + void dispose() { + if (adView != null) { + adView.destroy(); + adView = null; + } + if (containerView != null) { + containerView.removeAllViews(); + containerView = null; + } + } +} diff --git a/mih_ui/android/build/ios/SourcePackages/google_mobile_ads-8.0.0/android/src/main/java/io/flutter/plugins/googlemobileads/FlutterAd.java b/mih_ui/android/build/ios/SourcePackages/google_mobile_ads-8.0.0/android/src/main/java/io/flutter/plugins/googlemobileads/FlutterAd.java new file mode 100644 index 00000000..9730b514 --- /dev/null +++ b/mih_ui/android/build/ios/SourcePackages/google_mobile_ads-8.0.0/android/src/main/java/io/flutter/plugins/googlemobileads/FlutterAd.java @@ -0,0 +1,388 @@ +// Copyright 2021 Google LLC +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// https://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +package io.flutter.plugins.googlemobileads; + +import androidx.annotation.NonNull; +import androidx.annotation.Nullable; +import com.google.android.gms.ads.AdError; +import com.google.android.gms.ads.AdapterResponseInfo; +import com.google.android.gms.ads.LoadAdError; +import com.google.android.gms.ads.ResponseInfo; +import io.flutter.plugin.platform.PlatformView; +import java.util.ArrayList; +import java.util.HashMap; +import java.util.List; +import java.util.Map; +import java.util.Objects; + +abstract class FlutterAd { + + protected final int adId; + + FlutterAd(int adId) { + this.adId = adId; + } + + /** A {@link FlutterAd} that is overlaid on top of a running application. */ + abstract static class FlutterOverlayAd extends FlutterAd { + abstract void show(); + + abstract void setImmersiveMode(boolean immersiveModeEnabled); + + FlutterOverlayAd(int adId) { + super(adId); + } + } + + /** A wrapper around {@link ResponseInfo}. */ + static class FlutterResponseInfo { + + @Nullable private final String responseId; + @Nullable private final String mediationAdapterClassName; + @NonNull private final List adapterResponses; + @Nullable private final FlutterAdapterResponseInfo loadedAdapterResponseInfo; + @NonNull private final Map responseExtras; + + FlutterResponseInfo(@NonNull ResponseInfo responseInfo) { + this.responseId = responseInfo.getResponseId(); + this.mediationAdapterClassName = responseInfo.getMediationAdapterClassName(); + final List adapterResponseInfos = new ArrayList<>(); + for (AdapterResponseInfo adapterInfo : responseInfo.getAdapterResponses()) { + adapterResponseInfos.add(new FlutterAdapterResponseInfo(adapterInfo)); + } + this.adapterResponses = adapterResponseInfos; + if (responseInfo.getLoadedAdapterResponseInfo() != null) { + this.loadedAdapterResponseInfo = + new FlutterAdapterResponseInfo(responseInfo.getLoadedAdapterResponseInfo()); + } else { + this.loadedAdapterResponseInfo = null; + } + Map extras = new HashMap<>(); + if (responseInfo.getResponseExtras() != null) { + for (String key : responseInfo.getResponseExtras().keySet()) { + String value = responseInfo.getResponseExtras().getString(key); + extras.put(key, value); + } + } + + this.responseExtras = extras; + } + + FlutterResponseInfo( + @Nullable String responseId, + @Nullable String mediationAdapterClassName, + @NonNull List adapterResponseInfos, + @Nullable FlutterAdapterResponseInfo loadedAdapterResponseInfo, + @NonNull Map responseExtras) { + this.responseId = responseId; + this.mediationAdapterClassName = mediationAdapterClassName; + this.adapterResponses = adapterResponseInfos; + this.loadedAdapterResponseInfo = loadedAdapterResponseInfo; + this.responseExtras = responseExtras; + } + + @Nullable + String getResponseId() { + return responseId; + } + + @Nullable + String getMediationAdapterClassName() { + return mediationAdapterClassName; + } + + @NonNull + List getAdapterResponses() { + return adapterResponses; + } + + @Nullable + FlutterAdapterResponseInfo getLoadedAdapterResponseInfo() { + return loadedAdapterResponseInfo; + } + + @NonNull + Map getResponseExtras() { + return responseExtras; + } + + @Override + public boolean equals(@Nullable Object obj) { + if (obj == this) { + return true; + } else if (!(obj instanceof FlutterResponseInfo)) { + return false; + } + + FlutterResponseInfo that = (FlutterResponseInfo) obj; + return Objects.equals(responseId, that.responseId) + && Objects.equals(mediationAdapterClassName, that.mediationAdapterClassName) + && Objects.equals(adapterResponses, that.adapterResponses) + && Objects.equals(loadedAdapterResponseInfo, that.loadedAdapterResponseInfo); + } + + @Override + public int hashCode() { + return Objects.hash( + responseId, mediationAdapterClassName, adapterResponses, loadedAdapterResponseInfo); + } + } + + /** A wrapper for {@link AdapterResponseInfo}. */ + static class FlutterAdapterResponseInfo { + + @NonNull private final String adapterClassName; + private final long latencyMillis; + @NonNull private final String description; + @NonNull private final Map adUnitMapping; + @Nullable private FlutterAdError error; + @NonNull private final String adSourceName; + @NonNull private final String adSourceId; + @NonNull private final String adSourceInstanceName; + @NonNull private final String adSourceInstanceId; + + FlutterAdapterResponseInfo(@NonNull AdapterResponseInfo responseInfo) { + this.adapterClassName = responseInfo.getAdapterClassName(); + this.latencyMillis = responseInfo.getLatencyMillis(); + this.description = responseInfo.toString(); + if (responseInfo.getCredentials() != null) { + this.adUnitMapping = new HashMap<>(); + for (String key : responseInfo.getCredentials().keySet()) { + adUnitMapping.put(key, responseInfo.getCredentials().getString(key)); + } + } else { + adUnitMapping = new HashMap<>(); + } + if (responseInfo.getAdError() != null) { + this.error = new FlutterAdError(responseInfo.getAdError()); + } + adSourceName = responseInfo.getAdSourceName(); + adSourceId = responseInfo.getAdSourceId(); + adSourceInstanceName = responseInfo.getAdSourceInstanceName(); + adSourceInstanceId = responseInfo.getAdSourceInstanceId(); + } + + FlutterAdapterResponseInfo( + @NonNull String adapterClassName, + long latencyMillis, + @NonNull String description, + @NonNull Map adUnitMapping, + @Nullable FlutterAdError error, + @NonNull String adSourceName, + @NonNull String adSourceId, + @NonNull String adSourceInstanceName, + @NonNull String adSourceInstanceId) { + this.adapterClassName = adapterClassName; + this.latencyMillis = latencyMillis; + this.description = description; + this.adUnitMapping = adUnitMapping; + this.error = error; + this.adSourceName = adSourceName; + this.adSourceId = adSourceId; + this.adSourceInstanceName = adSourceInstanceName; + this.adSourceInstanceId = adSourceInstanceId; + } + + @NonNull + public String getAdapterClassName() { + return adapterClassName; + } + + public long getLatencyMillis() { + return latencyMillis; + } + + @NonNull + public String getDescription() { + return description; + } + + @NonNull + public Map getAdUnitMapping() { + return adUnitMapping; + } + + @Nullable + public FlutterAdError getError() { + return error; + } + + @NonNull + public String getAdSourceName() { + return adSourceName; + } + + @NonNull + public String getAdSourceId() { + return adSourceId; + } + + @NonNull + public String getAdSourceInstanceName() { + return adSourceInstanceName; + } + + @NonNull + public String getAdSourceInstanceId() { + return adSourceInstanceId; + } + + @Override + public boolean equals(@Nullable Object obj) { + if (obj == this) { + return true; + } else if (!(obj instanceof FlutterAdapterResponseInfo)) { + return false; + } + + final FlutterAdapterResponseInfo that = (FlutterAdapterResponseInfo) obj; + return Objects.equals(adapterClassName, that.adapterClassName) + && latencyMillis == that.latencyMillis + && Objects.equals(description, that.description) + && Objects.equals(error, that.error) + && Objects.equals(adUnitMapping, that.adUnitMapping) + && Objects.equals(adSourceName, that.adSourceName) + && Objects.equals(adSourceId, that.adSourceId) + && Objects.equals(adSourceInstanceName, that.adSourceInstanceName) + && Objects.equals(adSourceInstanceId, that.adSourceInstanceId); + } + + @Override + public int hashCode() { + return Objects.hash( + adapterClassName, + latencyMillis, + description, + error, + adSourceName, + adSourceId, + adSourceInstanceName, + adSourceInstanceId); + } + } + + /** Wrapper for {@link AdError}. */ + static class FlutterAdError { + final int code; + @NonNull final String domain; + @NonNull final String message; + + FlutterAdError(@NonNull AdError error) { + code = error.getCode(); + domain = error.getDomain(); + message = error.getMessage(); + } + + FlutterAdError(int code, @NonNull String domain, @NonNull String message) { + this.code = code; + this.domain = domain; + this.message = message; + } + + @Override + public boolean equals(Object object) { + if (this == object) { + return true; + } else if (!(object instanceof FlutterAdError)) { + return false; + } + + final FlutterAdError that = (FlutterAdError) object; + + if (code != that.code) { + return false; + } else if (!domain.equals(that.domain)) { + return false; + } + return message.equals(that.message); + } + + @Override + public int hashCode() { + return Objects.hash(code, domain, message); + } + } + + /** Wrapper for {@link LoadAdError}. */ + static class FlutterLoadAdError { + final int code; + @NonNull final String domain; + @NonNull final String message; + @Nullable FlutterResponseInfo responseInfo; + + FlutterLoadAdError(@NonNull LoadAdError error) { + code = error.getCode(); + domain = error.getDomain(); + message = error.getMessage(); + + if (error.getResponseInfo() != null) { + responseInfo = new FlutterResponseInfo(error.getResponseInfo()); + } + } + + FlutterLoadAdError( + int code, + @NonNull String domain, + @NonNull String message, + @Nullable FlutterResponseInfo responseInfo) { + this.code = code; + this.domain = domain; + this.message = message; + this.responseInfo = responseInfo; + } + + @Override + public boolean equals(Object object) { + if (this == object) { + return true; + } else if (!(object instanceof FlutterLoadAdError)) { + return false; + } + + final FlutterLoadAdError that = (FlutterLoadAdError) object; + + if (code != that.code) { + return false; + } else if (!domain.equals(that.domain)) { + return false; + } else if (!Objects.equals(responseInfo, that.responseInfo)) { + return false; + } + return message.equals(that.message); + } + + @Override + public int hashCode() { + return Objects.hash(code, domain, message, responseInfo); + } + } + + abstract void load(); + + /** + * Gets the PlatformView for the ad. Default behavior is to return null. Should be overridden by + * ads with platform views, such as banner and native ads. + */ + @Nullable + PlatformView getPlatformView() { + return null; + }; + + /** + * Invoked when dispose() is called on the corresponding Flutter ad object. This perform any + * necessary cleanup. + */ + abstract void dispose(); +} diff --git a/mih_ui/android/build/ios/SourcePackages/google_mobile_ads-8.0.0/android/src/main/java/io/flutter/plugins/googlemobileads/FlutterAdListener.java b/mih_ui/android/build/ios/SourcePackages/google_mobile_ads-8.0.0/android/src/main/java/io/flutter/plugins/googlemobileads/FlutterAdListener.java new file mode 100644 index 00000000..8f29ee43 --- /dev/null +++ b/mih_ui/android/build/ios/SourcePackages/google_mobile_ads-8.0.0/android/src/main/java/io/flutter/plugins/googlemobileads/FlutterAdListener.java @@ -0,0 +1,112 @@ +// Copyright 2021 Google LLC +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// https://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. +package io.flutter.plugins.googlemobileads; + +import androidx.annotation.NonNull; +import com.google.android.gms.ads.AdListener; +import com.google.android.gms.ads.LoadAdError; +import com.google.android.gms.ads.nativead.NativeAd; +import com.google.android.gms.ads.nativead.NativeAd.OnNativeAdLoadedListener; +import java.lang.ref.WeakReference; + +/** Callback type to notify when an ad successfully loads. */ +interface FlutterAdLoadedListener { + void onAdLoaded(); +} + +class FlutterAdListener extends AdListener { + protected final int adId; + @NonNull protected final AdInstanceManager manager; + + FlutterAdListener(int adId, @NonNull AdInstanceManager manager) { + this.adId = adId; + this.manager = manager; + } + + @Override + public void onAdClosed() { + manager.onAdClosed(adId); + } + + @Override + public void onAdFailedToLoad(LoadAdError loadAdError) { + manager.onAdFailedToLoad(adId, new FlutterAd.FlutterLoadAdError(loadAdError)); + } + + @Override + public void onAdOpened() { + manager.onAdOpened(adId); + } + + @Override + public void onAdImpression() { + manager.onAdImpression(adId); + } + + @Override + public void onAdClicked() { + manager.onAdClicked(adId); + } +} + +/** + * Ad listener for banner ads. Does not override onAdClicked(), since that is only for native ads. + */ +class FlutterBannerAdListener extends FlutterAdListener { + + @NonNull final WeakReference adLoadedListenerWeakReference; + + FlutterBannerAdListener( + int adId, @NonNull AdInstanceManager manager, FlutterAdLoadedListener adLoadedListener) { + super(adId, manager); + adLoadedListenerWeakReference = new WeakReference<>(adLoadedListener); + } + + @Override + public void onAdLoaded() { + if (adLoadedListenerWeakReference.get() != null) { + adLoadedListenerWeakReference.get().onAdLoaded(); + } + } +} + +/** Listener for native ads. */ +class FlutterNativeAdListener extends FlutterAdListener { + + FlutterNativeAdListener(int adId, AdInstanceManager manager) { + super(adId, manager); + } + + @Override + public void onAdLoaded() { + // Do nothing. Loaded event is handled from FlutterNativeAdLoadedListener. + } +} + +/** {@link OnNativeAdLoadedListener} for native ads. */ +class FlutterNativeAdLoadedListener implements OnNativeAdLoadedListener { + + private final WeakReference nativeAdWeakReference; + + FlutterNativeAdLoadedListener(FlutterNativeAd flutterNativeAd) { + nativeAdWeakReference = new WeakReference<>(flutterNativeAd); + } + + @Override + public void onNativeAdLoaded(@NonNull NativeAd nativeAd) { + if (nativeAdWeakReference.get() != null) { + nativeAdWeakReference.get().onNativeAdLoaded(nativeAd); + } + } +} diff --git a/mih_ui/android/build/ios/SourcePackages/google_mobile_ads-8.0.0/android/src/main/java/io/flutter/plugins/googlemobileads/FlutterAdLoader.java b/mih_ui/android/build/ios/SourcePackages/google_mobile_ads-8.0.0/android/src/main/java/io/flutter/plugins/googlemobileads/FlutterAdLoader.java new file mode 100644 index 00000000..0e864e7d --- /dev/null +++ b/mih_ui/android/build/ios/SourcePackages/google_mobile_ads-8.0.0/android/src/main/java/io/flutter/plugins/googlemobileads/FlutterAdLoader.java @@ -0,0 +1,140 @@ +// Copyright 2021 Google LLC +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// https://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +package io.flutter.plugins.googlemobileads; + +import android.content.Context; +import androidx.annotation.NonNull; +import com.google.android.gms.ads.AdListener; +import com.google.android.gms.ads.AdLoader; +import com.google.android.gms.ads.AdRequest; +import com.google.android.gms.ads.admanager.AdManagerAdRequest; +import com.google.android.gms.ads.admanager.AdManagerInterstitialAd; +import com.google.android.gms.ads.admanager.AdManagerInterstitialAdLoadCallback; +import com.google.android.gms.ads.appopen.AppOpenAd; +import com.google.android.gms.ads.appopen.AppOpenAd.AppOpenAdLoadCallback; +import com.google.android.gms.ads.interstitial.InterstitialAd; +import com.google.android.gms.ads.interstitial.InterstitialAdLoadCallback; +import com.google.android.gms.ads.nativead.NativeAd.OnNativeAdLoadedListener; +import com.google.android.gms.ads.nativead.NativeAdOptions; +import com.google.android.gms.ads.rewarded.RewardedAd; +import com.google.android.gms.ads.rewarded.RewardedAdLoadCallback; +import com.google.android.gms.ads.rewardedinterstitial.RewardedInterstitialAd; +import com.google.android.gms.ads.rewardedinterstitial.RewardedInterstitialAdLoadCallback; + +/** + * A wrapper around load methods in GMA. This exists mainly to make the Android code more testable. + */ +public class FlutterAdLoader { + + @NonNull private final Context context; + + public FlutterAdLoader(@NonNull Context context) { + this.context = context; + } + + /** Load an app open ad. */ + public void loadAppOpen( + @NonNull String adUnitId, + @NonNull AdRequest adRequest, + @NonNull AppOpenAdLoadCallback loadCallback) { + AppOpenAd.load(context, adUnitId, adRequest, loadCallback); + } + + /** Load an ad manager app open ad. */ + public void loadAdManagerAppOpen( + @NonNull String adUnitId, + @NonNull AdManagerAdRequest adRequest, + @NonNull AppOpenAdLoadCallback loadCallback) { + AppOpenAd.load(context, adUnitId, adRequest, loadCallback); + } + + /** Load an interstitial ad. */ + public void loadInterstitial( + @NonNull String adUnitId, + @NonNull AdRequest adRequest, + @NonNull InterstitialAdLoadCallback loadCallback) { + InterstitialAd.load(context, adUnitId, adRequest, loadCallback); + } + + /** Load an ad manager interstitial ad. */ + public void loadAdManagerInterstitial( + @NonNull String adUnitId, + @NonNull AdManagerAdRequest adRequest, + @NonNull AdManagerInterstitialAdLoadCallback loadCallback) { + AdManagerInterstitialAd.load(context, adUnitId, adRequest, loadCallback); + } + + /** Load a rewarded ad. */ + public void loadRewarded( + @NonNull String adUnitId, + @NonNull AdRequest adRequest, + @NonNull RewardedAdLoadCallback loadCallback) { + RewardedAd.load(context, adUnitId, adRequest, loadCallback); + } + + /** Load a rewarded interstitial ad. */ + public void loadRewardedInterstitial( + @NonNull String adUnitId, + @NonNull AdRequest adRequest, + @NonNull RewardedInterstitialAdLoadCallback loadCallback) { + RewardedInterstitialAd.load(context, adUnitId, adRequest, loadCallback); + } + + /** Load an ad manager rewarded ad. */ + public void loadAdManagerRewarded( + @NonNull String adUnitId, + @NonNull AdManagerAdRequest adRequest, + @NonNull RewardedAdLoadCallback loadCallback) { + RewardedAd.load(context, adUnitId, adRequest, loadCallback); + } + + /** Load an ad manager rewarded interstitial ad. */ + public void loadAdManagerRewardedInterstitial( + @NonNull String adUnitId, + @NonNull AdManagerAdRequest adRequest, + @NonNull RewardedInterstitialAdLoadCallback loadCallback) { + RewardedInterstitialAd.load(context, adUnitId, adRequest, loadCallback); + } + + /** Load a native ad. */ + public void loadNativeAd( + @NonNull String adUnitId, + @NonNull OnNativeAdLoadedListener onNativeAdLoadedListener, + @NonNull NativeAdOptions nativeAdOptions, + @NonNull AdListener adListener, + @NonNull AdRequest adRequest) { + new AdLoader.Builder(context, adUnitId) + .forNativeAd(onNativeAdLoadedListener) + .withNativeAdOptions(nativeAdOptions) + .withAdListener(adListener) + .build() + .loadAd(adRequest); + } + + /** Load an ad manager native ad. */ + public void loadAdManagerNativeAd( + @NonNull String adUnitId, + @NonNull OnNativeAdLoadedListener onNativeAdLoadedListener, + @NonNull NativeAdOptions nativeAdOptions, + @NonNull AdListener adListener, + @NonNull AdManagerAdRequest adManagerAdRequest) { + new AdLoader.Builder(context, adUnitId) + .forNativeAd(onNativeAdLoadedListener) + .withNativeAdOptions(nativeAdOptions) + .withAdListener(adListener) + .build() + .loadAd(adManagerAdRequest); + } +} diff --git a/mih_ui/android/build/ios/SourcePackages/google_mobile_ads-8.0.0/android/src/main/java/io/flutter/plugins/googlemobileads/FlutterAdManagerAdRequest.java b/mih_ui/android/build/ios/SourcePackages/google_mobile_ads-8.0.0/android/src/main/java/io/flutter/plugins/googlemobileads/FlutterAdManagerAdRequest.java new file mode 100644 index 00000000..2ae5f99f --- /dev/null +++ b/mih_ui/android/build/ios/SourcePackages/google_mobile_ads-8.0.0/android/src/main/java/io/flutter/plugins/googlemobileads/FlutterAdManagerAdRequest.java @@ -0,0 +1,163 @@ +// Copyright 2021 Google LLC +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// https://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +package io.flutter.plugins.googlemobileads; + +import androidx.annotation.NonNull; +import androidx.annotation.Nullable; +import com.google.android.gms.ads.admanager.AdManagerAdRequest; +import com.google.errorprone.annotations.CanIgnoreReturnValue; +import java.util.List; +import java.util.Map; +import java.util.Objects; + +/** + * Instantiates and serializes {@link com.google.android.gms.ads.admanager.AdManagerAdRequest} for + * the Google Mobile Ads Plugin. + */ +class FlutterAdManagerAdRequest extends FlutterAdRequest { + + @Nullable private final Map customTargeting; + @Nullable private final Map> customTargetingLists; + @Nullable private final String publisherProvidedId; + + static class Builder extends FlutterAdRequest.Builder { + + @Nullable private Map customTargeting; + @Nullable private Map> customTargetingLists; + @Nullable private String publisherProvidedId; + + @CanIgnoreReturnValue + public Builder setCustomTargeting(@Nullable Map customTargeting) { + this.customTargeting = customTargeting; + return this; + } + + @CanIgnoreReturnValue + public Builder setCustomTargetingLists( + @Nullable Map> customTargetingLists) { + this.customTargetingLists = customTargetingLists; + return this; + } + + @CanIgnoreReturnValue + public Builder setPublisherProvidedId(@Nullable String publisherProvidedId) { + this.publisherProvidedId = publisherProvidedId; + return this; + } + + @Override + FlutterAdManagerAdRequest build() { + return new FlutterAdManagerAdRequest( + getKeywords(), + getContentUrl(), + customTargeting, + customTargetingLists, + getNonPersonalizedAds(), + getNeighboringContentUrls(), + getHttpTimeoutMillis(), + publisherProvidedId, + getMediationExtrasIdentifier(), + getMediationNetworkExtrasProvider(), + getAdMobExtras(), + getRequestAgent(), + getMediationExtras()); + } + } + + @SuppressWarnings("deprecation") // Keeping for compatibility + private FlutterAdManagerAdRequest( + @Nullable List keywords, + @Nullable String contentUrl, + @Nullable Map customTargeting, + @Nullable Map> customTargetingLists, + @Nullable Boolean nonPersonalizedAds, + @Nullable List neighboringContentUrls, + @Nullable Integer httpTimeoutMillis, + @Nullable String publisherProvidedId, + @Nullable String mediationExtrasIdentifier, + @Nullable MediationNetworkExtrasProvider mediationNetworkExtrasProvider, + @Nullable Map adMobExtras, + @NonNull String requestAgent, + @Nullable List mediationExtras) { + super( + keywords, + contentUrl, + nonPersonalizedAds, + neighboringContentUrls, + httpTimeoutMillis, + mediationExtrasIdentifier, + mediationNetworkExtrasProvider, + adMobExtras, + requestAgent, + mediationExtras); + this.customTargeting = customTargeting; + this.customTargetingLists = customTargetingLists; + this.publisherProvidedId = publisherProvidedId; + } + + AdManagerAdRequest asAdManagerAdRequest(String adUnitId) { + final AdManagerAdRequest.Builder builder = new AdManagerAdRequest.Builder(); + updateAdRequestBuilder(builder, adUnitId); + + if (customTargeting != null) { + for (final Map.Entry entry : customTargeting.entrySet()) { + builder.addCustomTargeting(entry.getKey(), entry.getValue()); + } + } + if (customTargetingLists != null) { + for (final Map.Entry> entry : customTargetingLists.entrySet()) { + builder.addCustomTargeting(entry.getKey(), entry.getValue()); + } + } + if (publisherProvidedId != null) { + builder.setPublisherProvidedId(publisherProvidedId); + } + return builder.build(); + } + + @Nullable + protected Map getCustomTargeting() { + return customTargeting; + } + + @Nullable + protected Map> getCustomTargetingLists() { + return customTargetingLists; + } + + @Nullable + protected String getPublisherProvidedId() { + return publisherProvidedId; + } + + @Override + public boolean equals(Object o) { + if (this == o) { + return true; + } else if (!(o instanceof FlutterAdManagerAdRequest)) { + return false; + } + + FlutterAdManagerAdRequest request = (FlutterAdManagerAdRequest) o; + return super.equals(o) + && Objects.equals(customTargeting, request.customTargeting) + && Objects.equals(customTargetingLists, request.customTargetingLists); + } + + @Override + public int hashCode() { + return Objects.hash(super.hashCode(), customTargeting, customTargetingLists); + } +} diff --git a/mih_ui/android/build/ios/SourcePackages/google_mobile_ads-8.0.0/android/src/main/java/io/flutter/plugins/googlemobileads/FlutterAdManagerBannerAd.java b/mih_ui/android/build/ios/SourcePackages/google_mobile_ads-8.0.0/android/src/main/java/io/flutter/plugins/googlemobileads/FlutterAdManagerBannerAd.java new file mode 100644 index 00000000..c07168eb --- /dev/null +++ b/mih_ui/android/build/ios/SourcePackages/google_mobile_ads-8.0.0/android/src/main/java/io/flutter/plugins/googlemobileads/FlutterAdManagerBannerAd.java @@ -0,0 +1,131 @@ +// Copyright 2021 Google LLC +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// https://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +package io.flutter.plugins.googlemobileads; + +import static android.view.ViewGroup.LayoutParams.MATCH_PARENT; +import static android.view.ViewGroup.LayoutParams.WRAP_CONTENT; + +import android.view.ViewGroup.LayoutParams; +import androidx.annotation.NonNull; +import androidx.annotation.Nullable; +import com.google.android.gms.ads.AdSize; +import com.google.android.gms.ads.admanager.AdManagerAdView; +import com.google.android.gms.ads.admanager.AppEventListener; +import io.flutter.plugin.platform.PlatformView; +import io.flutter.util.Preconditions; +import java.util.List; + +/** + * Wrapper around {@link com.google.android.gms.ads.admanager.AdManagerAdView} for the Google Mobile + * Ads Plugin. + */ +class FlutterAdManagerBannerAd extends FlutterAd implements FlutterAdLoadedListener { + + @NonNull protected final AdInstanceManager manager; + @NonNull private final String adUnitId; + @NonNull private final List sizes; + @NonNull private final FlutterAdManagerAdRequest request; + @NonNull private final BannerAdCreator bannerAdCreator; + @Nullable protected AdManagerAdView adView; + + /** + * Constructs a `FlutterAdManagerBannerAd`. + * + *

Call `load()` to instantiate the `AdView` and load the `AdRequest`. `getView()` will return + * null only until `load` is called. + */ + public FlutterAdManagerBannerAd( + int adId, + @NonNull AdInstanceManager manager, + @NonNull String adUnitId, + @NonNull List sizes, + @NonNull FlutterAdManagerAdRequest request, + @NonNull BannerAdCreator bannerAdCreator) { + super(adId); + Preconditions.checkNotNull(manager); + Preconditions.checkNotNull(adUnitId); + Preconditions.checkNotNull(sizes); + Preconditions.checkNotNull(request); + this.manager = manager; + this.adUnitId = adUnitId; + this.sizes = sizes; + this.request = request; + this.bannerAdCreator = bannerAdCreator; + } + + @Override + void load() { + adView = bannerAdCreator.createAdManagerAdView(); + if (this instanceof FluidAdManagerBannerAd) { + adView.setLayoutParams(new LayoutParams(MATCH_PARENT, WRAP_CONTENT)); + } + adView.setAdUnitId(adUnitId); + adView.setAppEventListener( + new AppEventListener() { + @Override + public void onAppEvent(String name, String data) { + manager.onAppEvent(adId, name, data); + } + }); + + final AdSize[] allSizes = new AdSize[sizes.size()]; + for (int i = 0; i < sizes.size(); i++) { + allSizes[i] = sizes.get(i).getAdSize(); + } + adView.setAdSizes(allSizes); + adView.setAdListener(new FlutterBannerAdListener(adId, manager, this)); + adView.loadAd(request.asAdManagerAdRequest(adUnitId)); + } + + @Override + public void onAdLoaded() { + if (adView != null) { + manager.onAdLoaded(adId, adView.getResponseInfo()); + } + } + + @Nullable + @Override + PlatformView getPlatformView() { + if (adView == null) { + return null; + } + return new FlutterPlatformView(adView); + } + + @Override + void dispose() { + if (adView != null) { + adView.destroy(); + adView = null; + } + } + + @Nullable + FlutterAdSize getAdSize() { + if (adView == null || adView.getAdSize() == null) { + return null; + } + return new FlutterAdSize(adView.getAdSize()); + } + + boolean isCollapsible() { + if (adView == null) { + return false; + } + + return adView.isCollapsible(); + } +} diff --git a/mih_ui/android/build/ios/SourcePackages/google_mobile_ads-8.0.0/android/src/main/java/io/flutter/plugins/googlemobileads/FlutterAdManagerInterstitialAd.java b/mih_ui/android/build/ios/SourcePackages/google_mobile_ads-8.0.0/android/src/main/java/io/flutter/plugins/googlemobileads/FlutterAdManagerInterstitialAd.java new file mode 100644 index 00000000..66607fc8 --- /dev/null +++ b/mih_ui/android/build/ios/SourcePackages/google_mobile_ads-8.0.0/android/src/main/java/io/flutter/plugins/googlemobileads/FlutterAdManagerInterstitialAd.java @@ -0,0 +1,143 @@ +// Copyright 2021 Google LLC +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// https://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +package io.flutter.plugins.googlemobileads; + +import android.util.Log; +import androidx.annotation.NonNull; +import androidx.annotation.Nullable; +import com.google.android.gms.ads.LoadAdError; +import com.google.android.gms.ads.admanager.AdManagerInterstitialAd; +import com.google.android.gms.ads.admanager.AdManagerInterstitialAdLoadCallback; +import com.google.android.gms.ads.admanager.AppEventListener; +import java.lang.ref.WeakReference; + +/** + * Wrapper around {@link com.google.android.gms.ads.admanager.AdManagerInterstitialAd} for the + * Google Mobile Ads Plugin. + */ +class FlutterAdManagerInterstitialAd extends FlutterAd.FlutterOverlayAd { + private static final String TAG = "FltGAMInterstitialAd"; + + @NonNull private final AdInstanceManager manager; + @NonNull private final String adUnitId; + @NonNull private final FlutterAdManagerAdRequest request; + @Nullable private AdManagerInterstitialAd ad; + @NonNull private final FlutterAdLoader flutterAdLoader; + + /** + * Constructs a `FlutterAdManagerInterstitialAd`. + * + *

Call `load()` to instantiate the `AdView` and load the `AdRequest`. `getView()` will return + * null only until `load` is called. + */ + public FlutterAdManagerInterstitialAd( + int adId, + @NonNull AdInstanceManager manager, + @NonNull String adUnitId, + @NonNull FlutterAdManagerAdRequest request, + @NonNull FlutterAdLoader flutterAdLoader) { + super(adId); + this.manager = manager; + this.adUnitId = adUnitId; + this.request = request; + this.flutterAdLoader = flutterAdLoader; + } + + @Override + void load() { + flutterAdLoader.loadAdManagerInterstitial( + adUnitId, + request.asAdManagerAdRequest(adUnitId), + new DelegatingAdManagerInterstitialAdCallbacks(this)); + } + + void onAdLoaded(AdManagerInterstitialAd ad) { + this.ad = ad; + ad.setAppEventListener(new DelegatingAdManagerInterstitialAdCallbacks(this)); + ad.setOnPaidEventListener(new FlutterPaidEventListener(manager, this)); + manager.onAdLoaded(adId, ad.getResponseInfo()); + } + + void onAdFailedToLoad(LoadAdError loadAdError) { + manager.onAdFailedToLoad(adId, new FlutterLoadAdError(loadAdError)); + } + + void onAppEvent(@NonNull String name, @NonNull String data) { + manager.onAppEvent(adId, name, data); + } + + @Override + public void show() { + if (ad == null) { + Log.e(TAG, "The interstitial wasn't loaded yet."); + return; + } + if (manager.getActivity() == null) { + Log.e(TAG, "Tried to show interstitial before activity was bound to the plugin."); + return; + } + ad.setFullScreenContentCallback(new FlutterFullScreenContentCallback(manager, adId)); + ad.show(manager.getActivity()); + } + + @Override + public void setImmersiveMode(boolean immersiveModeEnabled) { + if (ad == null) { + Log.e(TAG, "The interstitial wasn't loaded yet."); + return; + } + ad.setImmersiveMode(immersiveModeEnabled); + } + + @Override + void dispose() { + ad = null; + } + + /** + * This class delegates various rewarded ad callbacks to FlutterAdManagerInterstitialAd. Maintains + * a weak reference to avoid memory leaks. + */ + private static final class DelegatingAdManagerInterstitialAdCallbacks + extends AdManagerInterstitialAdLoadCallback implements AppEventListener { + + private final WeakReference delegate; + + DelegatingAdManagerInterstitialAdCallbacks(FlutterAdManagerInterstitialAd delegate) { + this.delegate = new WeakReference<>(delegate); + } + + @Override + public void onAdLoaded(@NonNull AdManagerInterstitialAd interstitialAd) { + if (delegate.get() != null) { + delegate.get().onAdLoaded(interstitialAd); + } + } + + @Override + public void onAdFailedToLoad(@NonNull LoadAdError loadAdError) { + if (delegate.get() != null) { + delegate.get().onAdFailedToLoad(loadAdError); + } + } + + @Override + public void onAppEvent(@NonNull String name, @NonNull String data) { + if (delegate.get() != null) { + delegate.get().onAppEvent(name, data); + } + } + } +} diff --git a/mih_ui/android/build/ios/SourcePackages/google_mobile_ads-8.0.0/android/src/main/java/io/flutter/plugins/googlemobileads/FlutterAdRequest.java b/mih_ui/android/build/ios/SourcePackages/google_mobile_ads-8.0.0/android/src/main/java/io/flutter/plugins/googlemobileads/FlutterAdRequest.java new file mode 100644 index 00000000..e1c65877 --- /dev/null +++ b/mih_ui/android/build/ios/SourcePackages/google_mobile_ads-8.0.0/android/src/main/java/io/flutter/plugins/googlemobileads/FlutterAdRequest.java @@ -0,0 +1,359 @@ +// Copyright 2021 Google LLC +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// https://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +package io.flutter.plugins.googlemobileads; + +import android.os.Bundle; +import android.util.Pair; +import androidx.annotation.NonNull; +import androidx.annotation.Nullable; +import com.google.ads.mediation.admob.AdMobAdapter; +import com.google.android.gms.ads.AbstractAdRequestBuilder; +import com.google.android.gms.ads.AdRequest; +import com.google.android.gms.ads.mediation.MediationExtrasReceiver; +import com.google.errorprone.annotations.CanIgnoreReturnValue; +import java.util.HashMap; +import java.util.List; +import java.util.Map; +import java.util.Map.Entry; +import java.util.Objects; + +class FlutterAdRequest { + @Nullable private final List keywords; + @Nullable private final String contentUrl; + @Nullable private final Boolean nonPersonalizedAds; + @Nullable private final List neighboringContentUrls; + @Nullable private final Integer httpTimeoutMillis; + @Nullable private final String mediationExtrasIdentifier; + + @SuppressWarnings("deprecation") // Keeping for compatibility + @Nullable + private final MediationNetworkExtrasProvider mediationNetworkExtrasProvider; + + @Nullable private final Map adMobExtras; + @NonNull private final String requestAgent; + @Nullable private final List mediationExtras; + + protected static class Builder { + @Nullable private List keywords; + @Nullable private String contentUrl; + @Nullable private Boolean nonPersonalizedAds; + @Nullable private List neighboringContentUrls; + @Nullable private Integer httpTimeoutMillis; + @Nullable private String mediationExtrasIdentifier; + + @SuppressWarnings("deprecation") // Keeping for compatibility + @Nullable + private MediationNetworkExtrasProvider mediationNetworkExtrasProvider; + + @Nullable private Map adMobExtras; + @NonNull private String requestAgent; + + @Nullable private List mediationExtras; + + @CanIgnoreReturnValue + Builder setRequestAgent(String requestAgent) { + this.requestAgent = requestAgent; + return this; + } + + @CanIgnoreReturnValue + Builder setKeywords(@Nullable List keywords) { + this.keywords = keywords; + return this; + } + + @CanIgnoreReturnValue + Builder setContentUrl(@Nullable String contentUrl) { + this.contentUrl = contentUrl; + return this; + } + + @CanIgnoreReturnValue + Builder setNonPersonalizedAds(@Nullable Boolean nonPersonalizedAds) { + this.nonPersonalizedAds = nonPersonalizedAds; + return this; + } + + @CanIgnoreReturnValue + Builder setNeighboringContentUrls(@Nullable List neighboringContentUrls) { + this.neighboringContentUrls = neighboringContentUrls; + return this; + } + + @CanIgnoreReturnValue + Builder setHttpTimeoutMillis(@Nullable Integer httpTimeoutMillis) { + this.httpTimeoutMillis = httpTimeoutMillis; + return this; + } + + @CanIgnoreReturnValue + Builder setMediationNetworkExtrasIdentifier(@Nullable String mediationExtrasIdentifier) { + this.mediationExtrasIdentifier = mediationExtrasIdentifier; + return this; + } + + @CanIgnoreReturnValue + @SuppressWarnings("deprecation") // Keeping for compatibility + Builder setMediationNetworkExtrasProvider( + @Nullable MediationNetworkExtrasProvider mediationNetworkExtrasProvider) { + this.mediationNetworkExtrasProvider = mediationNetworkExtrasProvider; + return this; + } + + @CanIgnoreReturnValue + Builder setAdMobExtras(@Nullable Map adMobExtras) { + this.adMobExtras = adMobExtras; + return this; + } + + @CanIgnoreReturnValue + Builder setMediationExtras(@Nullable List mediationExtras) { + this.mediationExtras = mediationExtras; + return this; + } + + @Nullable + protected List getKeywords() { + return keywords; + } + + @Nullable + protected String getContentUrl() { + return contentUrl; + } + + @Nullable + protected Boolean getNonPersonalizedAds() { + return nonPersonalizedAds; + } + + @Nullable + protected List getNeighboringContentUrls() { + return neighboringContentUrls; + } + + @Nullable + protected Integer getHttpTimeoutMillis() { + return httpTimeoutMillis; + } + + @Nullable + protected String getMediationExtrasIdentifier() { + return mediationExtrasIdentifier; + } + + @SuppressWarnings("deprecation") // Keeping for compatibility + @Nullable + protected MediationNetworkExtrasProvider getMediationNetworkExtrasProvider() { + return mediationNetworkExtrasProvider; + } + + @Nullable + protected Map getAdMobExtras() { + return adMobExtras; + } + + @NonNull + protected String getRequestAgent() { + return requestAgent; + } + + @Nullable + protected List getMediationExtras() { + return mediationExtras; + } + + FlutterAdRequest build() { + return new FlutterAdRequest( + keywords, + contentUrl, + nonPersonalizedAds, + neighboringContentUrls, + httpTimeoutMillis, + mediationExtrasIdentifier, + mediationNetworkExtrasProvider, + adMobExtras, + requestAgent, + mediationExtras); + } + } + + @SuppressWarnings("deprecation") // Keeping for compatibility + protected FlutterAdRequest( + @Nullable List keywords, + @Nullable String contentUrl, + @Nullable Boolean nonPersonalizedAds, + @Nullable List neighboringContentUrls, + @Nullable Integer httpTimeoutMillis, + @Nullable String mediationExtrasIdentifier, + @Nullable MediationNetworkExtrasProvider mediationNetworkExtrasProvider, + @Nullable Map adMobExtras, + String requestAgent, + @Nullable List mediationExtras) { + this.keywords = keywords; + this.contentUrl = contentUrl; + this.nonPersonalizedAds = nonPersonalizedAds; + this.neighboringContentUrls = neighboringContentUrls; + this.httpTimeoutMillis = httpTimeoutMillis; + this.mediationExtrasIdentifier = mediationExtrasIdentifier; + this.mediationNetworkExtrasProvider = mediationNetworkExtrasProvider; + this.adMobExtras = adMobExtras; + this.requestAgent = requestAgent; + this.mediationExtras = mediationExtras; + } + + /** Adds network extras to the ad request builder, if any. */ + private > void addNetworkExtras( + AbstractAdRequestBuilder builder, String adUnitId) { + Map, Bundle> networkExtras = new HashMap<>(); + if (mediationExtras != null) { + for (FlutterMediationExtras flutterExtras : mediationExtras) { + Pair, Bundle> pair = + flutterExtras.getMediationExtras(); + networkExtras.put(pair.first, pair.second); + } + } else if (mediationNetworkExtrasProvider != null) { + Map, Bundle> providedExtras = + mediationNetworkExtrasProvider.getMediationExtras(adUnitId, mediationExtrasIdentifier); + networkExtras.putAll(providedExtras); + } + + if (adMobExtras != null && !adMobExtras.isEmpty()) { + Bundle adMobBundle = new Bundle(); + for (Map.Entry extra : adMobExtras.entrySet()) { + adMobBundle.putString(extra.getKey(), extra.getValue()); + } + networkExtras.put(AdMobAdapter.class, adMobBundle); + } + + if (nonPersonalizedAds != null && nonPersonalizedAds) { + Bundle adMobBundle = networkExtras.get(AdMobAdapter.class); + if (adMobBundle == null) { + adMobBundle = new Bundle(); + } + adMobBundle.putString("npa", "1"); + networkExtras.put(AdMobAdapter.class, adMobBundle); + } + + for (Entry, Bundle> entry : networkExtras.entrySet()) { + builder.addNetworkExtrasBundle(entry.getKey(), entry.getValue()); + } + } + + /** Updates the {@link AdRequest.Builder} with the properties in this {@link FlutterAdRequest}. */ + protected > + AbstractAdRequestBuilder updateAdRequestBuilder( + AbstractAdRequestBuilder builder, String adUnitId) { + if (keywords != null) { + for (final String keyword : keywords) { + builder.addKeyword(keyword); + } + } + if (contentUrl != null) { + builder.setContentUrl(contentUrl); + } + addNetworkExtras(builder, adUnitId); + if (neighboringContentUrls != null) { + builder.setNeighboringContentUrls(neighboringContentUrls); + } + if (httpTimeoutMillis != null) { + builder.setHttpTimeoutMillis(httpTimeoutMillis); + } + builder.setRequestAgent(requestAgent); + return builder; + } + + AdRequest asAdRequest(String adUnitId) { + return ((AdRequest.Builder) updateAdRequestBuilder(new AdRequest.Builder(), adUnitId)).build(); + } + + @Nullable + protected List getKeywords() { + return keywords; + } + + @Nullable + protected String getContentUrl() { + return contentUrl; + } + + @Nullable + protected Boolean getNonPersonalizedAds() { + return nonPersonalizedAds; + } + + @Nullable + protected List getNeighboringContentUrls() { + return neighboringContentUrls; + } + + @Nullable + protected Integer getHttpTimeoutMillis() { + return httpTimeoutMillis; + } + + @Nullable + protected String getMediationExtrasIdentifier() { + return mediationExtrasIdentifier; + } + + @Nullable + protected Map getAdMobExtras() { + return adMobExtras; + } + + @NonNull + protected String getRequestAgent() { + return requestAgent; + } + + @Nullable + protected List getMediationExtras() { + return mediationExtras; + } + + @Override + public boolean equals(Object o) { + if (this == o) { + return true; + } else if (!(o instanceof FlutterAdRequest)) { + return false; + } + + FlutterAdRequest request = (FlutterAdRequest) o; + return Objects.equals(keywords, request.keywords) + && Objects.equals(contentUrl, request.contentUrl) + && Objects.equals(nonPersonalizedAds, request.nonPersonalizedAds) + && Objects.equals(neighboringContentUrls, request.neighboringContentUrls) + && Objects.equals(httpTimeoutMillis, request.httpTimeoutMillis) + && Objects.equals(mediationExtrasIdentifier, request.mediationExtrasIdentifier) + && Objects.equals(mediationNetworkExtrasProvider, request.mediationNetworkExtrasProvider) + && Objects.equals(adMobExtras, request.adMobExtras) + && Objects.equals(mediationExtras, request.mediationExtras); + } + + @Override + public int hashCode() { + return Objects.hash( + keywords, + contentUrl, + nonPersonalizedAds, + neighboringContentUrls, + httpTimeoutMillis, + mediationExtrasIdentifier, + mediationNetworkExtrasProvider, + mediationExtras); + } +} diff --git a/mih_ui/android/build/ios/SourcePackages/google_mobile_ads-8.0.0/android/src/main/java/io/flutter/plugins/googlemobileads/FlutterAdSize.java b/mih_ui/android/build/ios/SourcePackages/google_mobile_ads-8.0.0/android/src/main/java/io/flutter/plugins/googlemobileads/FlutterAdSize.java new file mode 100644 index 00000000..d08ffa90 --- /dev/null +++ b/mih_ui/android/build/ios/SourcePackages/google_mobile_ads-8.0.0/android/src/main/java/io/flutter/plugins/googlemobileads/FlutterAdSize.java @@ -0,0 +1,200 @@ +// Copyright 2021 Google LLC +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// https://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +package io.flutter.plugins.googlemobileads; + +import android.content.Context; +import androidx.annotation.NonNull; +import androidx.annotation.Nullable; +import com.google.android.gms.ads.AdSize; + +class FlutterAdSize { + @NonNull final AdSize size; + final int width; + final int height; + + /** Wrapper around static methods for {@link com.google.android.gms.ads.AdSize}. */ + static class AdSizeFactory { + + @SuppressWarnings("deprecation") + AdSize getPortraitAnchoredAdaptiveBannerAdSize(Context context, int width) { + return AdSize.getPortraitAnchoredAdaptiveBannerAdSize(context, width); + } + + @SuppressWarnings("deprecation") + AdSize getLandscapeAnchoredAdaptiveBannerAdSize(Context context, int width) { + return AdSize.getLandscapeAnchoredAdaptiveBannerAdSize(context, width); + } + + @SuppressWarnings("deprecation") + AdSize getCurrentOrientationAnchoredAdaptiveBannerAdSize(Context context, int width) { + return AdSize.getCurrentOrientationAnchoredAdaptiveBannerAdSize(context, width); + } + + AdSize getLargePortraitAnchoredAdaptiveBannerAdSize(Context context, int width) { + return AdSize.getLargePortraitAnchoredAdaptiveBannerAdSize(context, width); + } + + AdSize getLargeLandscapeAnchoredAdaptiveBannerAdSize(Context context, int width) { + return AdSize.getLargeLandscapeAnchoredAdaptiveBannerAdSize(context, width); + } + + AdSize getLargeAnchoredAdaptiveBannerAdSize(Context context, int width) { + return AdSize.getLargeAnchoredAdaptiveBannerAdSize(context, width); + } + + AdSize getCurrentOrientationInlineAdaptiveBannerAdSize(Context context, int width) { + return AdSize.getCurrentOrientationInlineAdaptiveBannerAdSize(context, width); + } + + AdSize getLandscapeInlineAdaptiveBannerAdSize(Context context, int width) { + return AdSize.getLandscapeInlineAdaptiveBannerAdSize(context, width); + } + + AdSize getPortraitInlineAdaptiveBannerAdSize(Context context, int width) { + return AdSize.getPortraitInlineAdaptiveBannerAdSize(context, width); + } + + AdSize getInlineAdaptiveBannerAdSize(int width, int maxHeight) { + return AdSize.getInlineAdaptiveBannerAdSize(width, maxHeight); + } + } + + static class AnchoredAdaptiveBannerAdSize extends FlutterAdSize { + final String orientation; + + @NonNull + private static AdSize getAdSize( + @NonNull Context context, + @NonNull AdSizeFactory factory, + @Nullable String orientation, + int width, + boolean isLarge) { + if (orientation == null) { + if (isLarge) { + return factory.getLargeAnchoredAdaptiveBannerAdSize(context, width); + } + return factory.getCurrentOrientationAnchoredAdaptiveBannerAdSize(context, width); + } else if (orientation.equals("portrait")) { + if (isLarge) { + return factory.getLargePortraitAnchoredAdaptiveBannerAdSize(context, width); + } + return factory.getPortraitAnchoredAdaptiveBannerAdSize(context, width); + } else if (orientation.equals("landscape")) { + if (isLarge) { + return factory.getLargeLandscapeAnchoredAdaptiveBannerAdSize(context, width); + } + return factory.getLandscapeAnchoredAdaptiveBannerAdSize(context, width); + } else { + throw new IllegalArgumentException("Unexpected value for orientation: " + orientation); + } + } + + AnchoredAdaptiveBannerAdSize( + @NonNull Context context, + @NonNull AdSizeFactory factory, + @Nullable String orientation, + int width, + boolean isLarge) { + super(getAdSize(context, factory, orientation, width, isLarge)); + this.orientation = orientation; + } + } + + static class SmartBannerAdSize extends FlutterAdSize { + + @SuppressWarnings("deprecation") // Smart banner is already deprecated in Dart. + SmartBannerAdSize() { + super(AdSize.SMART_BANNER); + } + } + + static class FluidAdSize extends FlutterAdSize { + + FluidAdSize() { + super(AdSize.FLUID); + } + } + + static class InlineAdaptiveBannerAdSize extends FlutterAdSize { + + @Nullable final Integer orientation; + @Nullable final Integer maxHeight; + + private static AdSize getAdSize( + @NonNull AdSizeFactory adSizeFactory, + @NonNull Context context, + int width, + @Nullable Integer orientation, + @Nullable Integer maxHeight) { + if (orientation != null) { + return orientation == 0 + ? adSizeFactory.getPortraitInlineAdaptiveBannerAdSize(context, width) + : adSizeFactory.getLandscapeInlineAdaptiveBannerAdSize(context, width); + } else if (maxHeight != null) { + return adSizeFactory.getInlineAdaptiveBannerAdSize(width, maxHeight); + } else { + return adSizeFactory.getCurrentOrientationInlineAdaptiveBannerAdSize(context, width); + } + } + + InlineAdaptiveBannerAdSize( + @NonNull AdSizeFactory adSizeFactory, + @NonNull Context context, + int width, + @Nullable Integer orientation, + @Nullable Integer maxHeight) { + super(getAdSize(adSizeFactory, context, width, orientation, maxHeight)); + this.orientation = orientation; + this.maxHeight = maxHeight; + } + } + + FlutterAdSize(int width, int height) { + this(new AdSize(width, height)); + } + + FlutterAdSize(@NonNull AdSize size) { + this.size = size; + this.width = size.getWidth(); + this.height = size.getHeight(); + } + + @Override + public boolean equals(Object o) { + if (this == o) { + return true; + } else if (!(o instanceof FlutterAdSize)) { + return false; + } + + final FlutterAdSize that = (FlutterAdSize) o; + + if (width != that.width) { + return false; + } + return height == that.height; + } + + @Override + public int hashCode() { + int result = width; + result = 31 * result + height; + return result; + } + + public AdSize getAdSize() { + return size; + } +} diff --git a/mih_ui/android/build/ios/SourcePackages/google_mobile_ads-8.0.0/android/src/main/java/io/flutter/plugins/googlemobileads/FlutterAdValue.java b/mih_ui/android/build/ios/SourcePackages/google_mobile_ads-8.0.0/android/src/main/java/io/flutter/plugins/googlemobileads/FlutterAdValue.java new file mode 100644 index 00000000..52c639ad --- /dev/null +++ b/mih_ui/android/build/ios/SourcePackages/google_mobile_ads-8.0.0/android/src/main/java/io/flutter/plugins/googlemobileads/FlutterAdValue.java @@ -0,0 +1,30 @@ +// Copyright 2021 Google LLC +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// https://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +package io.flutter.plugins.googlemobileads; + +import androidx.annotation.NonNull; + +/** A wrapper for {@link com.google.android.gms.ads.AdValue}. */ +public class FlutterAdValue { + final int precisionType; + @NonNull final String currencyCode; + final long valueMicros; + + public FlutterAdValue(int precisionType, @NonNull String currencyCode, long valueMicros) { + this.precisionType = precisionType; + this.currencyCode = currencyCode; + this.valueMicros = valueMicros; + } +} diff --git a/mih_ui/android/build/ios/SourcePackages/google_mobile_ads-8.0.0/android/src/main/java/io/flutter/plugins/googlemobileads/FlutterAdapterStatus.java b/mih_ui/android/build/ios/SourcePackages/google_mobile_ads-8.0.0/android/src/main/java/io/flutter/plugins/googlemobileads/FlutterAdapterStatus.java new file mode 100644 index 00000000..3ddbd4c0 --- /dev/null +++ b/mih_ui/android/build/ios/SourcePackages/google_mobile_ads-8.0.0/android/src/main/java/io/flutter/plugins/googlemobileads/FlutterAdapterStatus.java @@ -0,0 +1,88 @@ +// Copyright 2021 Google LLC +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// https://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. +package io.flutter.plugins.googlemobileads; + +import androidx.annotation.NonNull; +import com.google.android.gms.ads.initialization.AdapterStatus; + +/** + * Wrapper around {@link com.google.android.gms.ads.initialization.AdapterStatus} for the Flutter + * Google Mobile Ads Plugin. + */ +class FlutterAdapterStatus { + @NonNull final AdapterInitializationState state; + @NonNull final String description; + @NonNull final Number latency; + + /** + * Represents {@link com.google.android.gms.ads.initialization.AdapterStatus.State} for the + * Flutter Google Mobile Ads Plugin. + */ + enum AdapterInitializationState { + NOT_READY, + READY + } + + FlutterAdapterStatus( + @NonNull AdapterInitializationState state, + @NonNull String description, + @NonNull Number latency) { + this.state = state; + this.description = description; + this.latency = latency; + } + + FlutterAdapterStatus(@NonNull AdapterStatus status) { + switch (status.getInitializationState()) { + case NOT_READY: + this.state = AdapterInitializationState.NOT_READY; + break; + case READY: + this.state = AdapterInitializationState.READY; + break; + default: + final String message = + String.format("Unable to handle state: %s", status.getInitializationState()); + throw new IllegalArgumentException(message); + } + + this.description = status.getDescription(); + this.latency = status.getLatency(); + } + + @Override + public boolean equals(Object o) { + if (this == o) { + return true; + } else if (!(o instanceof FlutterAdapterStatus)) { + return false; + } + + final FlutterAdapterStatus that = (FlutterAdapterStatus) o; + if (state != that.state) { + return false; + } else if (!description.equals(that.description)) { + return false; + } + return latency.equals(that.latency); + } + + @Override + public int hashCode() { + int result = state.hashCode(); + result = 31 * result + description.hashCode(); + result = 31 * result + latency.hashCode(); + return result; + } +} diff --git a/mih_ui/android/build/ios/SourcePackages/google_mobile_ads-8.0.0/android/src/main/java/io/flutter/plugins/googlemobileads/FlutterAppOpenAd.java b/mih_ui/android/build/ios/SourcePackages/google_mobile_ads-8.0.0/android/src/main/java/io/flutter/plugins/googlemobileads/FlutterAppOpenAd.java new file mode 100644 index 00000000..28e468f9 --- /dev/null +++ b/mih_ui/android/build/ios/SourcePackages/google_mobile_ads-8.0.0/android/src/main/java/io/flutter/plugins/googlemobileads/FlutterAppOpenAd.java @@ -0,0 +1,130 @@ +// Copyright 2021 Google LLC +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// https://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +package io.flutter.plugins.googlemobileads; + +import android.util.Log; +import androidx.annotation.NonNull; +import androidx.annotation.Nullable; +import com.google.android.gms.ads.LoadAdError; +import com.google.android.gms.ads.appopen.AppOpenAd; +import com.google.android.gms.ads.appopen.AppOpenAd.AppOpenAdLoadCallback; +import io.flutter.util.Preconditions; +import java.lang.ref.WeakReference; + +/** A wrapper for {@link com.google.android.gms.ads.appopen.AppOpenAd}. */ +class FlutterAppOpenAd extends FlutterAd.FlutterOverlayAd { + + private static final String TAG = "FlutterAppOpenAd"; + + @NonNull private final AdInstanceManager manager; + @NonNull private final String adUnitId; + @Nullable private final FlutterAdRequest request; + @Nullable private final FlutterAdManagerAdRequest adManagerAdRequest; + @Nullable private AppOpenAd ad; + @NonNull private final FlutterAdLoader flutterAdLoader; + + FlutterAppOpenAd( + int adId, + @NonNull AdInstanceManager manager, + @NonNull String adUnitId, + @Nullable FlutterAdRequest request, + @Nullable FlutterAdManagerAdRequest adManagerAdRequest, + @NonNull FlutterAdLoader flutterAdLoader) { + super(adId); + Preconditions.checkState( + request != null || adManagerAdRequest != null, + "One of request and adManagerAdRequest must be non-null."); + this.manager = manager; + this.adUnitId = adUnitId; + this.request = request; + this.adManagerAdRequest = adManagerAdRequest; + this.flutterAdLoader = flutterAdLoader; + } + + @Override + void load() { + if (request != null) { + flutterAdLoader.loadAppOpen( + adUnitId, request.asAdRequest(adUnitId), new DelegatingAppOpenAdLoadCallback(this)); + } else if (adManagerAdRequest != null) { + flutterAdLoader.loadAdManagerAppOpen( + adUnitId, + adManagerAdRequest.asAdManagerAdRequest(adUnitId), + new DelegatingAppOpenAdLoadCallback(this)); + } + } + + private void onAdLoaded(@NonNull AppOpenAd ad) { + this.ad = ad; + ad.setOnPaidEventListener(new FlutterPaidEventListener(manager, this)); + manager.onAdLoaded(adId, ad.getResponseInfo()); + } + + private void onAdFailedToLoad(@NonNull LoadAdError loadAdError) { + manager.onAdFailedToLoad(adId, new FlutterLoadAdError(loadAdError)); + } + + @Override + void show() { + if (ad == null) { + Log.w(TAG, "Tried to show app open ad before it was loaded"); + return; + } + if (manager.getActivity() == null) { + Log.e(TAG, "Tried to show app open ad before activity was bound to the plugin."); + return; + } + ad.setFullScreenContentCallback(new FlutterFullScreenContentCallback(manager, adId)); + ad.show(manager.getActivity()); + } + + @Override + void setImmersiveMode(boolean immersiveModeEnabled) { + if (ad == null) { + Log.w(TAG, "Tried to set immersive mode on app open ad before it was loaded"); + return; + } + ad.setImmersiveMode(immersiveModeEnabled); + } + + @Override + void dispose() { + ad = null; + } + + /** An AppOpenAdLoadCallback that just forwards events to a delegate. */ + private static final class DelegatingAppOpenAdLoadCallback extends AppOpenAdLoadCallback { + + private final WeakReference delegate; + + DelegatingAppOpenAdLoadCallback(FlutterAppOpenAd delegate) { + this.delegate = new WeakReference<>(delegate); + } + + @Override + public void onAdLoaded(@NonNull AppOpenAd appOpenAd) { + if (delegate.get() != null) { + delegate.get().onAdLoaded(appOpenAd); + } + } + + @Override + public void onAdFailedToLoad(@NonNull LoadAdError loadAdError) { + if (delegate.get() != null) { + delegate.get().onAdFailedToLoad(loadAdError); + } + } + } +} diff --git a/mih_ui/android/build/ios/SourcePackages/google_mobile_ads-8.0.0/android/src/main/java/io/flutter/plugins/googlemobileads/FlutterBannerAd.java b/mih_ui/android/build/ios/SourcePackages/google_mobile_ads-8.0.0/android/src/main/java/io/flutter/plugins/googlemobileads/FlutterBannerAd.java new file mode 100644 index 00000000..ce4e1870 --- /dev/null +++ b/mih_ui/android/build/ios/SourcePackages/google_mobile_ads-8.0.0/android/src/main/java/io/flutter/plugins/googlemobileads/FlutterBannerAd.java @@ -0,0 +1,102 @@ +// Copyright 2021 Google LLC +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// https://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +package io.flutter.plugins.googlemobileads; + +import androidx.annotation.NonNull; +import androidx.annotation.Nullable; +import com.google.android.gms.ads.AdView; +import io.flutter.plugin.platform.PlatformView; +import io.flutter.util.Preconditions; + +/** A wrapper for {@link AdView}. */ +class FlutterBannerAd extends FlutterAd implements FlutterAdLoadedListener { + + @NonNull private final AdInstanceManager manager; + @NonNull private final String adUnitId; + @NonNull private final FlutterAdSize size; + @NonNull private final FlutterAdRequest request; + @NonNull private final BannerAdCreator bannerAdCreator; + @Nullable private AdView adView; + + /** Constructs the FlutterBannerAd. */ + public FlutterBannerAd( + int adId, + @NonNull AdInstanceManager manager, + @NonNull String adUnitId, + @NonNull FlutterAdRequest request, + @NonNull FlutterAdSize size, + @NonNull BannerAdCreator bannerAdCreator) { + super(adId); + Preconditions.checkNotNull(manager); + Preconditions.checkNotNull(adUnitId); + Preconditions.checkNotNull(request); + Preconditions.checkNotNull(size); + this.manager = manager; + this.adUnitId = adUnitId; + this.request = request; + this.size = size; + this.bannerAdCreator = bannerAdCreator; + } + + @Override + public void onAdLoaded() { + if (adView != null) { + manager.onAdLoaded(adId, adView.getResponseInfo()); + } + } + + @Override + void load() { + adView = bannerAdCreator.createAdView(); + adView.setAdUnitId(adUnitId); + adView.setAdSize(size.getAdSize()); + adView.setOnPaidEventListener(new FlutterPaidEventListener(manager, this)); + adView.setAdListener(new FlutterBannerAdListener(adId, manager, this)); + adView.loadAd(request.asAdRequest(adUnitId)); + } + + @Nullable + @Override + public PlatformView getPlatformView() { + if (adView == null) { + return null; + } + return new FlutterPlatformView(adView); + } + + @Override + void dispose() { + if (adView != null) { + adView.destroy(); + adView = null; + } + } + + @Nullable + FlutterAdSize getAdSize() { + if (adView == null || adView.getAdSize() == null) { + return null; + } + return new FlutterAdSize(adView.getAdSize()); + } + + boolean isCollapsible() { + if (adView == null) { + return false; + } + + return adView.isCollapsible(); + } +} diff --git a/mih_ui/android/build/ios/SourcePackages/google_mobile_ads-8.0.0/android/src/main/java/io/flutter/plugins/googlemobileads/FlutterDestroyableAd.java b/mih_ui/android/build/ios/SourcePackages/google_mobile_ads-8.0.0/android/src/main/java/io/flutter/plugins/googlemobileads/FlutterDestroyableAd.java new file mode 100644 index 00000000..c1d9be8d --- /dev/null +++ b/mih_ui/android/build/ios/SourcePackages/google_mobile_ads-8.0.0/android/src/main/java/io/flutter/plugins/googlemobileads/FlutterDestroyableAd.java @@ -0,0 +1,22 @@ +// Copyright 2021 Google LLC +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// https://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +package io.flutter.plugins.googlemobileads; + +/** Interface for a destroyable ad. */ +public interface FlutterDestroyableAd { + + /** Destroy any ads and free up references. */ + void destroy(); +} diff --git a/mih_ui/android/build/ios/SourcePackages/google_mobile_ads-8.0.0/android/src/main/java/io/flutter/plugins/googlemobileads/FlutterFullScreenContentCallback.java b/mih_ui/android/build/ios/SourcePackages/google_mobile_ads-8.0.0/android/src/main/java/io/flutter/plugins/googlemobileads/FlutterFullScreenContentCallback.java new file mode 100644 index 00000000..3359853e --- /dev/null +++ b/mih_ui/android/build/ios/SourcePackages/google_mobile_ads-8.0.0/android/src/main/java/io/flutter/plugins/googlemobileads/FlutterFullScreenContentCallback.java @@ -0,0 +1,60 @@ +// Copyright 2021 Google LLC +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// https://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +package io.flutter.plugins.googlemobileads; + +import androidx.annotation.NonNull; +import com.google.android.gms.ads.AdError; +import com.google.android.gms.ads.FullScreenContentCallback; + +/** + * Flutter implementation of {@link FullScreenContentCallback}. Forwards events to + * AdInstanceManager. + */ +class FlutterFullScreenContentCallback extends FullScreenContentCallback { + + @NonNull protected final AdInstanceManager manager; + + @NonNull protected final int adId; + + public FlutterFullScreenContentCallback(@NonNull AdInstanceManager manager, int adId) { + this.manager = manager; + this.adId = adId; + } + + @Override + public void onAdFailedToShowFullScreenContent(@NonNull AdError adError) { + manager.onFailedToShowFullScreenContent(adId, adError); + } + + @Override + public void onAdShowedFullScreenContent() { + manager.onAdShowedFullScreenContent(adId); + } + + @Override + public void onAdDismissedFullScreenContent() { + manager.onAdDismissedFullScreenContent(adId); + } + + @Override + public void onAdImpression() { + manager.onAdImpression(adId); + } + + @Override + public void onAdClicked() { + manager.onAdClicked(adId); + } +} diff --git a/mih_ui/android/build/ios/SourcePackages/google_mobile_ads-8.0.0/android/src/main/java/io/flutter/plugins/googlemobileads/FlutterInitializationStatus.java b/mih_ui/android/build/ios/SourcePackages/google_mobile_ads-8.0.0/android/src/main/java/io/flutter/plugins/googlemobileads/FlutterInitializationStatus.java new file mode 100644 index 00000000..d4a07107 --- /dev/null +++ b/mih_ui/android/build/ios/SourcePackages/google_mobile_ads-8.0.0/android/src/main/java/io/flutter/plugins/googlemobileads/FlutterInitializationStatus.java @@ -0,0 +1,44 @@ +// Copyright 2021 Google LLC +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// https://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +package io.flutter.plugins.googlemobileads; + +import androidx.annotation.NonNull; +import com.google.android.gms.ads.initialization.AdapterStatus; +import com.google.android.gms.ads.initialization.InitializationStatus; +import java.util.HashMap; +import java.util.Map; + +/** + * Wrapper around {@link com.google.android.gms.ads.initialization.InitializationStatus} for the + * Flutter Google Mobile Ads Plugin. + */ +class FlutterInitializationStatus { + @NonNull final Map adapterStatuses; + + FlutterInitializationStatus(@NonNull Map adapterStatuses) { + this.adapterStatuses = adapterStatuses; + } + + FlutterInitializationStatus(@NonNull InitializationStatus initializationStatus) { + final HashMap newStatusMap = new HashMap<>(); + final Map adapterStatusMap = initializationStatus.getAdapterStatusMap(); + + for (Map.Entry status : adapterStatusMap.entrySet()) { + newStatusMap.put(status.getKey(), new FlutterAdapterStatus(status.getValue())); + } + + this.adapterStatuses = newStatusMap; + } +} diff --git a/mih_ui/android/build/ios/SourcePackages/google_mobile_ads-8.0.0/android/src/main/java/io/flutter/plugins/googlemobileads/FlutterInterstitialAd.java b/mih_ui/android/build/ios/SourcePackages/google_mobile_ads-8.0.0/android/src/main/java/io/flutter/plugins/googlemobileads/FlutterInterstitialAd.java new file mode 100644 index 00000000..675278a1 --- /dev/null +++ b/mih_ui/android/build/ios/SourcePackages/google_mobile_ads-8.0.0/android/src/main/java/io/flutter/plugins/googlemobileads/FlutterInterstitialAd.java @@ -0,0 +1,119 @@ +// Copyright 2021 Google LLC +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// https://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +package io.flutter.plugins.googlemobileads; + +import android.util.Log; +import androidx.annotation.NonNull; +import androidx.annotation.Nullable; +import com.google.android.gms.ads.LoadAdError; +import com.google.android.gms.ads.interstitial.InterstitialAd; +import com.google.android.gms.ads.interstitial.InterstitialAdLoadCallback; +import java.lang.ref.WeakReference; + +class FlutterInterstitialAd extends FlutterAd.FlutterOverlayAd { + private static final String TAG = "FlutterInterstitialAd"; + + @NonNull private final AdInstanceManager manager; + @NonNull private final String adUnitId; + @NonNull private final FlutterAdRequest request; + @Nullable private InterstitialAd ad; + @NonNull private final FlutterAdLoader flutterAdLoader; + + public FlutterInterstitialAd( + int adId, + @NonNull AdInstanceManager manager, + @NonNull String adUnitId, + @NonNull FlutterAdRequest request, + @NonNull FlutterAdLoader flutterAdLoader) { + super(adId); + this.manager = manager; + this.adUnitId = adUnitId; + this.request = request; + this.flutterAdLoader = flutterAdLoader; + } + + @Override + void load() { + if (manager != null && adUnitId != null && request != null) { + flutterAdLoader.loadInterstitial( + adUnitId, request.asAdRequest(adUnitId), new DelegatingInterstitialAdLoadCallback(this)); + } + } + + void onAdLoaded(InterstitialAd ad) { + this.ad = ad; + ad.setOnPaidEventListener(new FlutterPaidEventListener(manager, this)); + manager.onAdLoaded(adId, ad.getResponseInfo()); + } + + void onAdFailedToLoad(LoadAdError loadAdError) { + manager.onAdFailedToLoad(adId, new FlutterAd.FlutterLoadAdError(loadAdError)); + } + + @Override + void dispose() { + ad = null; + } + + @Override + public void show() { + if (ad == null) { + Log.e(TAG, "Error showing interstitial - the interstitial ad wasn't loaded yet."); + return; + } + if (manager.getActivity() == null) { + Log.e(TAG, "Tried to show interstitial before activity was bound to the plugin."); + return; + } + ad.setFullScreenContentCallback(new FlutterFullScreenContentCallback(manager, adId)); + ad.show(manager.getActivity()); + } + + @Override + public void setImmersiveMode(boolean immersiveModeEnabled) { + if (ad == null) { + Log.e( + TAG, + "Error setting immersive mode in interstitial ad - the interstitial ad wasn't loaded yet."); + return; + } + ad.setImmersiveMode(immersiveModeEnabled); + } + + /** An InterstitialAdLoadCallback that just forwards events to a delegate. */ + private static final class DelegatingInterstitialAdLoadCallback + extends InterstitialAdLoadCallback { + + private final WeakReference delegate; + + DelegatingInterstitialAdLoadCallback(FlutterInterstitialAd delegate) { + this.delegate = new WeakReference<>(delegate); + } + + @Override + public void onAdLoaded(@NonNull InterstitialAd interstitialAd) { + if (delegate.get() != null) { + delegate.get().onAdLoaded(interstitialAd); + } + } + + @Override + public void onAdFailedToLoad(@NonNull LoadAdError loadAdError) { + if (delegate.get() != null) { + delegate.get().onAdFailedToLoad(loadAdError); + } + } + } +} diff --git a/mih_ui/android/build/ios/SourcePackages/google_mobile_ads-8.0.0/android/src/main/java/io/flutter/plugins/googlemobileads/FlutterMediationExtras.java b/mih_ui/android/build/ios/SourcePackages/google_mobile_ads-8.0.0/android/src/main/java/io/flutter/plugins/googlemobileads/FlutterMediationExtras.java new file mode 100644 index 00000000..21612988 --- /dev/null +++ b/mih_ui/android/build/ios/SourcePackages/google_mobile_ads-8.0.0/android/src/main/java/io/flutter/plugins/googlemobileads/FlutterMediationExtras.java @@ -0,0 +1,68 @@ +// Copyright 2024 Google LLC +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// https://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +package io.flutter.plugins.googlemobileads; + +import android.os.Bundle; +import android.util.Pair; +import com.google.android.gms.ads.mediation.MediationExtrasReceiver; +import java.util.Map; +import java.util.Objects; + +/** + * Mediation Adapters that require extra parameters provide implementations of this interface to + * further be sent to the {@link com.google.android.gms.ads.AdRequest} + * + *

Implementation will receive the Map of Extras via the {@link + * FlutterMediationExtras#setMediationExtras} which the implementation must store and later parse to + * the proper pair of Class and Bundle values returned by {@link + * FlutterMediationExtras#getMediationExtras()} + */ +public abstract class FlutterMediationExtras { + Map extras; + /** + * Called when the {@link FlutterAdRequest} is parsed into an {@link + * com.google.android.gms.ads.AdRequest}. + * + * @return The parsed values to be sent to the {@link + * com.google.android.gms.ads.AdRequest.Builder#addNetworkExtrasBundle} + */ + public abstract Pair, Bundle> getMediationExtras(); + + /** + * Pair of key-values to be stored and later be parsed into a {@link Bundle}. + * + * @param extras Received from the dart layer through the MediationExtras class. + */ + public void setMediationExtras(Map extras) { + this.extras = extras; + } + + @Override + public boolean equals(Object o) { + if (this == o) { + return true; + } else if (!(o instanceof FlutterMediationExtras)) { + return false; + } + + FlutterMediationExtras mediationExtras = (FlutterMediationExtras) o; + return Objects.equals(extras, mediationExtras.extras); + } + + @Override + public int hashCode() { + return Objects.hash(extras); + } +} diff --git a/mih_ui/android/build/ios/SourcePackages/google_mobile_ads-8.0.0/android/src/main/java/io/flutter/plugins/googlemobileads/FlutterMobileAdsWrapper.java b/mih_ui/android/build/ios/SourcePackages/google_mobile_ads-8.0.0/android/src/main/java/io/flutter/plugins/googlemobileads/FlutterMobileAdsWrapper.java new file mode 100644 index 00000000..83f0f783 --- /dev/null +++ b/mih_ui/android/build/ios/SourcePackages/google_mobile_ads-8.0.0/android/src/main/java/io/flutter/plugins/googlemobileads/FlutterMobileAdsWrapper.java @@ -0,0 +1,93 @@ +// Copyright 2021 Google LLC +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// https://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +package io.flutter.plugins.googlemobileads; + +import android.content.Context; +import android.os.Build; +import android.util.Log; +import android.webkit.WebView; +import androidx.annotation.NonNull; +import com.google.android.gms.ads.MobileAds; +import com.google.android.gms.ads.OnAdInspectorClosedListener; +import com.google.android.gms.ads.RequestConfiguration; +import com.google.android.gms.ads.initialization.OnInitializationCompleteListener; +import io.flutter.embedding.engine.FlutterEngine; +import io.flutter.plugins.webviewflutter.WebViewFlutterAndroidExternalApi; + +/** A wrapper around static methods in {@link com.google.android.gms.ads.MobileAds}. */ +public class FlutterMobileAdsWrapper { + + private static final String TAG = "FlutterMobileAdsWrapper"; + + public FlutterMobileAdsWrapper() {} + + /** Initializes the sdk. */ + public void initialize( + @NonNull Context context, @NonNull OnInitializationCompleteListener listener) { + new Thread( + new Runnable() { + @Override + public void run() { + MobileAds.initialize(context, listener); + } + }) + .start(); + } + + /** Wrapper for setAppMuted. */ + public void setAppMuted(boolean muted) { + MobileAds.setAppMuted(muted); + } + + /** Wrapper for setAppVolume. */ + public void setAppVolume(double volume) { + MobileAds.setAppVolume((float) volume); + } + + /** Wrapper for disableMediationInitialization. */ + public void disableMediationInitialization(@NonNull Context context) { + MobileAds.disableMediationAdapterInitialization(context); + } + + /** Wrapper for getVersionString. */ + public String getVersionString() { + return MobileAds.getVersion().toString(); + } + + /** Wrapper for getRequestConfiguration. */ + public RequestConfiguration getRequestConfiguration() { + return MobileAds.getRequestConfiguration(); + } + + /** Wrapper for openDebugMenu. */ + public void openDebugMenu(Context context, String adUnitId) { + MobileAds.openDebugMenu(context, adUnitId); + } + + /** Open the ad inspector. */ + public void openAdInspector(Context context, OnAdInspectorClosedListener listener) { + MobileAds.openAdInspector(context, listener); + } + + /** Register the webView for monetization. */ + public void registerWebView(int webViewId, FlutterEngine flutterEngine) { + WebView webView = WebViewFlutterAndroidExternalApi.getWebView(flutterEngine, webViewId); + if (webView == null) { + Log.w(TAG, "MobileAds.registerWebView unable to find webView with id: " + webViewId); + } else { + MobileAds.registerWebView(webView); + } + } +} diff --git a/mih_ui/android/build/ios/SourcePackages/google_mobile_ads-8.0.0/android/src/main/java/io/flutter/plugins/googlemobileads/FlutterNativeAd.java b/mih_ui/android/build/ios/SourcePackages/google_mobile_ads-8.0.0/android/src/main/java/io/flutter/plugins/googlemobileads/FlutterNativeAd.java new file mode 100644 index 00000000..8230b1dd --- /dev/null +++ b/mih_ui/android/build/ios/SourcePackages/google_mobile_ads-8.0.0/android/src/main/java/io/flutter/plugins/googlemobileads/FlutterNativeAd.java @@ -0,0 +1,273 @@ +// Copyright 2021 Google LLC +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// https://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +package io.flutter.plugins.googlemobileads; + +import android.content.Context; +import android.util.Log; +import androidx.annotation.NonNull; +import androidx.annotation.Nullable; +import com.google.android.ads.nativetemplates.TemplateView; +import com.google.android.gms.ads.AdListener; +import com.google.android.gms.ads.admanager.AdManagerAdRequest; +import com.google.android.gms.ads.nativead.NativeAd; +import com.google.android.gms.ads.nativead.NativeAd.OnNativeAdLoadedListener; +import com.google.android.gms.ads.nativead.NativeAdOptions; +import com.google.android.gms.ads.nativead.NativeAdView; +import com.google.errorprone.annotations.CanIgnoreReturnValue; +import io.flutter.plugin.platform.PlatformView; +import io.flutter.plugins.googlemobileads.GoogleMobileAdsPlugin.NativeAdFactory; +import io.flutter.plugins.googlemobileads.nativetemplates.FlutterNativeTemplateStyle; +import java.util.Map; + +/** A wrapper for {@link NativeAd}. */ +class FlutterNativeAd extends FlutterAd { + private static final String TAG = "FlutterNativeAd"; + + @NonNull private final AdInstanceManager manager; + @NonNull private final String adUnitId; + @Nullable private final NativeAdFactory adFactory; + @NonNull private final FlutterAdLoader flutterAdLoader; + @Nullable private FlutterAdRequest request; + @Nullable private FlutterAdManagerAdRequest adManagerRequest; + @Nullable private Map customOptions; + @Nullable private NativeAdView nativeAdView; + @Nullable private final FlutterNativeAdOptions nativeAdOptions; + @Nullable private final FlutterNativeTemplateStyle nativeTemplateStyle; + @Nullable private TemplateView templateView; + @NonNull private final Context context; + + static class Builder { + @Nullable private AdInstanceManager manager; + @Nullable private String adUnitId; + @Nullable private NativeAdFactory adFactory; + @Nullable private FlutterAdRequest request; + @Nullable private FlutterAdManagerAdRequest adManagerRequest; + @Nullable private Map customOptions; + @Nullable private Integer id; + @Nullable private FlutterNativeAdOptions nativeAdOptions; + @Nullable private FlutterAdLoader flutterAdLoader; + @Nullable private FlutterNativeTemplateStyle nativeTemplateStyle; + @NonNull private final Context context; + + Builder(Context context) { + this.context = context; + } + + @CanIgnoreReturnValue + public Builder setAdFactory(@NonNull NativeAdFactory adFactory) { + this.adFactory = adFactory; + return this; + } + + @CanIgnoreReturnValue + public Builder setId(int id) { + this.id = id; + return this; + } + + @CanIgnoreReturnValue + public Builder setCustomOptions(@Nullable Map customOptions) { + this.customOptions = customOptions; + return this; + } + + @CanIgnoreReturnValue + public Builder setManager(@NonNull AdInstanceManager manager) { + this.manager = manager; + return this; + } + + @CanIgnoreReturnValue + public Builder setAdUnitId(@NonNull String adUnitId) { + this.adUnitId = adUnitId; + return this; + } + + @CanIgnoreReturnValue + public Builder setRequest(@NonNull FlutterAdRequest request) { + this.request = request; + return this; + } + + @CanIgnoreReturnValue + public Builder setAdManagerRequest(@NonNull FlutterAdManagerAdRequest request) { + this.adManagerRequest = request; + return this; + } + + @CanIgnoreReturnValue + public Builder setNativeAdOptions(@Nullable FlutterNativeAdOptions nativeAdOptions) { + this.nativeAdOptions = nativeAdOptions; + return this; + } + + @CanIgnoreReturnValue + public Builder setFlutterAdLoader(@NonNull FlutterAdLoader flutterAdLoader) { + this.flutterAdLoader = flutterAdLoader; + return this; + } + + @CanIgnoreReturnValue + public Builder setNativeTemplateStyle( + @Nullable FlutterNativeTemplateStyle nativeTemplateStyle) { + this.nativeTemplateStyle = nativeTemplateStyle; + return this; + } + + FlutterNativeAd build() { + if (manager == null) { + throw new IllegalStateException("AdInstanceManager cannot be null."); + } else if (adUnitId == null) { + throw new IllegalStateException("AdUnitId cannot be null."); + } else if (adFactory == null && nativeTemplateStyle == null) { + throw new IllegalStateException("NativeAdFactory and nativeTemplateStyle cannot be null."); + } else if (request == null && adManagerRequest == null) { + throw new IllegalStateException("adRequest or addManagerRequest must be non-null."); + } + + final FlutterNativeAd nativeAd; + if (request == null) { + nativeAd = + new FlutterNativeAd( + context, + id, + manager, + adUnitId, + adFactory, + adManagerRequest, + flutterAdLoader, + customOptions, + nativeAdOptions, + nativeTemplateStyle); + } else { + nativeAd = + new FlutterNativeAd( + context, + id, + manager, + adUnitId, + adFactory, + request, + flutterAdLoader, + customOptions, + nativeAdOptions, + nativeTemplateStyle); + } + return nativeAd; + } + } + + protected FlutterNativeAd( + @NonNull Context context, + int adId, + @NonNull AdInstanceManager manager, + @NonNull String adUnitId, + @NonNull NativeAdFactory adFactory, + @NonNull FlutterAdRequest request, + @NonNull FlutterAdLoader flutterAdLoader, + @Nullable Map customOptions, + @Nullable FlutterNativeAdOptions nativeAdOptions, + @Nullable FlutterNativeTemplateStyle nativeTemplateStyle) { + super(adId); + this.context = context; + this.manager = manager; + this.adUnitId = adUnitId; + this.adFactory = adFactory; + this.request = request; + this.flutterAdLoader = flutterAdLoader; + this.customOptions = customOptions; + this.nativeAdOptions = nativeAdOptions; + this.nativeTemplateStyle = nativeTemplateStyle; + } + + protected FlutterNativeAd( + @NonNull Context context, + int adId, + @NonNull AdInstanceManager manager, + @NonNull String adUnitId, + @NonNull NativeAdFactory adFactory, + @NonNull FlutterAdManagerAdRequest adManagerRequest, + @NonNull FlutterAdLoader flutterAdLoader, + @Nullable Map customOptions, + @Nullable FlutterNativeAdOptions nativeAdOptions, + @Nullable FlutterNativeTemplateStyle nativeTemplateStyle) { + super(adId); + this.context = context; + this.manager = manager; + this.adUnitId = adUnitId; + this.adFactory = adFactory; + this.adManagerRequest = adManagerRequest; + this.flutterAdLoader = flutterAdLoader; + this.customOptions = customOptions; + this.nativeAdOptions = nativeAdOptions; + this.nativeTemplateStyle = nativeTemplateStyle; + } + + @Override + void load() { + final OnNativeAdLoadedListener loadedListener = new FlutterNativeAdLoadedListener(this); + final AdListener adListener = new FlutterNativeAdListener(adId, manager); + // Note we delegate loading the ad to FlutterAdLoader mainly for testing purposes. + // As of 20.0.0 of GMA, mockito is unable to mock AdLoader. + final NativeAdOptions options = + this.nativeAdOptions == null + ? new NativeAdOptions.Builder().build() + : nativeAdOptions.asNativeAdOptions(); + if (request != null) { + flutterAdLoader.loadNativeAd( + adUnitId, loadedListener, options, adListener, request.asAdRequest(adUnitId)); + } else if (adManagerRequest != null) { + AdManagerAdRequest adManagerAdRequest = adManagerRequest.asAdManagerAdRequest(adUnitId); + flutterAdLoader.loadAdManagerNativeAd( + adUnitId, loadedListener, options, adListener, adManagerAdRequest); + } else { + Log.e(TAG, "A null or invalid ad request was provided."); + } + } + + @Override + @Nullable + public PlatformView getPlatformView() { + if (nativeAdView != null) { + return new FlutterPlatformView(nativeAdView); + } else if (templateView != null) { + return new FlutterPlatformView(templateView); + } + return null; + } + + void onNativeAdLoaded(@NonNull NativeAd nativeAd) { + if (nativeTemplateStyle != null) { + templateView = nativeTemplateStyle.asTemplateView(context); + templateView.setNativeAd(nativeAd); + } else { + nativeAdView = adFactory.createNativeAd(nativeAd, customOptions); + } + nativeAd.setOnPaidEventListener(new FlutterPaidEventListener(manager, this)); + manager.onAdLoaded(adId, nativeAd.getResponseInfo()); + } + + @Override + void dispose() { + if (nativeAdView != null) { + nativeAdView.destroy(); + nativeAdView = null; + } + if (templateView != null) { + templateView.destroyNativeAd(); + templateView = null; + } + } +} diff --git a/mih_ui/android/build/ios/SourcePackages/google_mobile_ads-8.0.0/android/src/main/java/io/flutter/plugins/googlemobileads/FlutterNativeAdOptions.java b/mih_ui/android/build/ios/SourcePackages/google_mobile_ads-8.0.0/android/src/main/java/io/flutter/plugins/googlemobileads/FlutterNativeAdOptions.java new file mode 100644 index 00000000..fe2bb775 --- /dev/null +++ b/mih_ui/android/build/ios/SourcePackages/google_mobile_ads-8.0.0/android/src/main/java/io/flutter/plugins/googlemobileads/FlutterNativeAdOptions.java @@ -0,0 +1,68 @@ +// Copyright 2021 Google LLC +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// https://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License.c language governing permissions and +// limitations under the License. + +package io.flutter.plugins.googlemobileads; + +import androidx.annotation.Nullable; +import com.google.android.gms.ads.nativead.NativeAdOptions; + +/** A wrapper for {@link com.google.android.gms.ads.nativead.NativeAdOptions}. */ +class FlutterNativeAdOptions { + + @Nullable final Integer adChoicesPlacement; + @Nullable final Integer mediaAspectRatio; + @Nullable final FlutterVideoOptions videoOptions; + @Nullable final Boolean requestCustomMuteThisAd; + @Nullable final Boolean shouldRequestMultipleImages; + @Nullable final Boolean shouldReturnUrlsForImageAssets; + + FlutterNativeAdOptions( + @Nullable Integer adChoicesPlacement, + @Nullable Integer mediaAspectRatio, + @Nullable FlutterVideoOptions videoOptions, + @Nullable Boolean requestCustomMuteThisAd, + @Nullable Boolean shouldRequestMultipleImages, + @Nullable Boolean shouldReturnUrlsForImageAssets) { + this.adChoicesPlacement = adChoicesPlacement; + this.mediaAspectRatio = mediaAspectRatio; + this.videoOptions = videoOptions; + this.requestCustomMuteThisAd = requestCustomMuteThisAd; + this.shouldRequestMultipleImages = shouldRequestMultipleImages; + this.shouldReturnUrlsForImageAssets = shouldReturnUrlsForImageAssets; + } + + NativeAdOptions asNativeAdOptions() { + NativeAdOptions.Builder builder = new NativeAdOptions.Builder(); + if (adChoicesPlacement != null) { + builder.setAdChoicesPlacement(adChoicesPlacement); + } + if (mediaAspectRatio != null) { + builder.setMediaAspectRatio(mediaAspectRatio); + } + if (videoOptions != null) { + builder.setVideoOptions(videoOptions.asVideoOptions()); + } + if (requestCustomMuteThisAd != null) { + builder.setRequestCustomMuteThisAd(requestCustomMuteThisAd); + } + if (shouldRequestMultipleImages != null) { + builder.setRequestMultipleImages(shouldRequestMultipleImages); + } + if (shouldReturnUrlsForImageAssets != null) { + builder.setReturnUrlsForImageAssets(shouldReturnUrlsForImageAssets); + } + return builder.build(); + } +} diff --git a/mih_ui/android/build/ios/SourcePackages/google_mobile_ads-8.0.0/android/src/main/java/io/flutter/plugins/googlemobileads/FlutterPaidEventListener.java b/mih_ui/android/build/ios/SourcePackages/google_mobile_ads-8.0.0/android/src/main/java/io/flutter/plugins/googlemobileads/FlutterPaidEventListener.java new file mode 100644 index 00000000..01ec96dd --- /dev/null +++ b/mih_ui/android/build/ios/SourcePackages/google_mobile_ads-8.0.0/android/src/main/java/io/flutter/plugins/googlemobileads/FlutterPaidEventListener.java @@ -0,0 +1,38 @@ +// Copyright 2021 Google LLC +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// https://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +package io.flutter.plugins.googlemobileads; + +import androidx.annotation.NonNull; +import com.google.android.gms.ads.AdValue; +import com.google.android.gms.ads.OnPaidEventListener; + +/** Implementation of {@link OnPaidEventListener} that sends events to {@link AdInstanceManager}. */ +public class FlutterPaidEventListener implements OnPaidEventListener { + @NonNull private final AdInstanceManager manager; + @NonNull private final FlutterAd ad; + + FlutterPaidEventListener(@NonNull AdInstanceManager manager, @NonNull FlutterAd ad) { + this.manager = manager; + this.ad = ad; + } + + @Override + public void onPaidEvent(AdValue adValue) { + FlutterAdValue value = + new FlutterAdValue( + adValue.getPrecisionType(), adValue.getCurrencyCode(), adValue.getValueMicros()); + manager.onPaidEvent(ad, value); + } +} diff --git a/mih_ui/android/build/ios/SourcePackages/google_mobile_ads-8.0.0/android/src/main/java/io/flutter/plugins/googlemobileads/FlutterPlatformView.java b/mih_ui/android/build/ios/SourcePackages/google_mobile_ads-8.0.0/android/src/main/java/io/flutter/plugins/googlemobileads/FlutterPlatformView.java new file mode 100644 index 00000000..75ba3940 --- /dev/null +++ b/mih_ui/android/build/ios/SourcePackages/google_mobile_ads-8.0.0/android/src/main/java/io/flutter/plugins/googlemobileads/FlutterPlatformView.java @@ -0,0 +1,40 @@ +// Copyright 2021 Google LLC +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// https://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +package io.flutter.plugins.googlemobileads; + +import android.view.View; +import androidx.annotation.NonNull; +import androidx.annotation.Nullable; +import io.flutter.plugin.platform.PlatformView; + +/** A simple PlatformView that wraps a View and sets its reference to null on dispose(). */ +class FlutterPlatformView implements PlatformView { + + @Nullable private View view; + + FlutterPlatformView(@NonNull View view) { + this.view = view; + } + + @Override + public View getView() { + return view; + } + + @Override + public void dispose() { + this.view = null; + } +} diff --git a/mih_ui/android/build/ios/SourcePackages/google_mobile_ads-8.0.0/android/src/main/java/io/flutter/plugins/googlemobileads/FlutterRequestAgentProvider.java b/mih_ui/android/build/ios/SourcePackages/google_mobile_ads-8.0.0/android/src/main/java/io/flutter/plugins/googlemobileads/FlutterRequestAgentProvider.java new file mode 100644 index 00000000..1322df6d --- /dev/null +++ b/mih_ui/android/build/ios/SourcePackages/google_mobile_ads-8.0.0/android/src/main/java/io/flutter/plugins/googlemobileads/FlutterRequestAgentProvider.java @@ -0,0 +1,71 @@ +package io.flutter.plugins.googlemobileads; + +import android.content.Context; +import android.content.pm.ApplicationInfo; +import android.content.pm.PackageManager; +import android.content.pm.PackageManager.NameNotFoundException; +import android.os.Build; +import android.os.Bundle; +import androidx.annotation.Nullable; + +/** Class that helps detect whether the news or game template is being used. */ +class FlutterRequestAgentProvider { + + static final String GAME_VERSION_KEY = + "io.flutter.plugins.googlemobileads.FLUTTER_GAME_TEMPLATE_VERSION"; + static final String NEWS_VERSION_KEY = + "io.flutter.plugins.googlemobileads.FLUTTER_NEWS_TEMPLATE_VERSION"; + + @Nullable private String newsTemplateVersion; + @Nullable private String gameTemplateVersion; + + FlutterRequestAgentProvider(Context context) { + processGameAndNewsTemplateVersions(context); + } + + private void processGameAndNewsTemplateVersions(Context context) { + try { + ApplicationInfo info; + if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.TIRAMISU) { + info = + context + .getApplicationContext() + .getPackageManager() + .getApplicationInfo( + context.getPackageName(), + PackageManager.ApplicationInfoFlags.of(PackageManager.GET_META_DATA)); + } else { + info = + context + .getApplicationContext() + .getPackageManager() + .getApplicationInfo(context.getPackageName(), PackageManager.GET_META_DATA); + } + Bundle metaData = info.metaData; + if (metaData != null) { + gameTemplateVersion = info.metaData.getString(GAME_VERSION_KEY); + newsTemplateVersion = info.metaData.getString(NEWS_VERSION_KEY); + } + } catch (NameNotFoundException | ClassCastException e) { + // Do nothing + } + } + + String getRequestAgent() { + StringBuilder sb = new StringBuilder(); + sb.append(Constants.REQUEST_AGENT_PREFIX_VERSIONED); + if (newsTemplateVersion != null) { + sb.append("_"); + sb.append(Constants.REQUEST_AGENT_NEWS_TEMPLATE_PREFIX); + sb.append("-"); + sb.append(newsTemplateVersion); + } + if (gameTemplateVersion != null) { + sb.append("_"); + sb.append(Constants.REQUEST_AGENT_GAME_TEMPLATE_PREFIX); + sb.append("-"); + sb.append(gameTemplateVersion); + } + return sb.toString(); + } +} diff --git a/mih_ui/android/build/ios/SourcePackages/google_mobile_ads-8.0.0/android/src/main/java/io/flutter/plugins/googlemobileads/FlutterRewardedAd.java b/mih_ui/android/build/ios/SourcePackages/google_mobile_ads-8.0.0/android/src/main/java/io/flutter/plugins/googlemobileads/FlutterRewardedAd.java new file mode 100644 index 00000000..ee4719e7 --- /dev/null +++ b/mih_ui/android/build/ios/SourcePackages/google_mobile_ads-8.0.0/android/src/main/java/io/flutter/plugins/googlemobileads/FlutterRewardedAd.java @@ -0,0 +1,213 @@ +// Copyright 2021 Google LLC +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// https://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +package io.flutter.plugins.googlemobileads; + +import android.util.Log; +import androidx.annotation.NonNull; +import androidx.annotation.Nullable; +import com.google.android.gms.ads.LoadAdError; +import com.google.android.gms.ads.OnUserEarnedRewardListener; +import com.google.android.gms.ads.rewarded.OnAdMetadataChangedListener; +import com.google.android.gms.ads.rewarded.RewardItem; +import com.google.android.gms.ads.rewarded.RewardedAd; +import com.google.android.gms.ads.rewarded.RewardedAdLoadCallback; +import java.lang.ref.WeakReference; + +/** A wrapper for {@link RewardedAd}. */ +class FlutterRewardedAd extends FlutterAd.FlutterOverlayAd { + private static final String TAG = "FlutterRewardedAd"; + + @NonNull private final AdInstanceManager manager; + @NonNull private final String adUnitId; + @NonNull private final FlutterAdLoader flutterAdLoader; + @Nullable private final FlutterAdRequest request; + @Nullable private final FlutterAdManagerAdRequest adManagerRequest; + @Nullable RewardedAd rewardedAd; + + /** A wrapper for {@link RewardItem}. */ + static class FlutterRewardItem { + @NonNull final Integer amount; + @NonNull final String type; + + FlutterRewardItem(@NonNull Integer amount, @NonNull String type) { + this.amount = amount; + this.type = type; + } + + @Override + public boolean equals(Object other) { + if (this == other) { + return true; + } else if (!(other instanceof FlutterRewardItem)) { + return false; + } + + final FlutterRewardItem that = (FlutterRewardItem) other; + if (!amount.equals(that.amount)) { + return false; + } + return type.equals(that.type); + } + + @Override + public int hashCode() { + int result = amount.hashCode(); + result = 31 * result + type.hashCode(); + return result; + } + } + + /** Constructor for AdMob Ad Request. */ + public FlutterRewardedAd( + int adId, + @NonNull AdInstanceManager manager, + @NonNull String adUnitId, + @NonNull FlutterAdRequest request, + @NonNull FlutterAdLoader flutterAdLoader) { + super(adId); + this.manager = manager; + this.adUnitId = adUnitId; + this.request = request; + this.adManagerRequest = null; + this.flutterAdLoader = flutterAdLoader; + } + + /** Constructor for Ad Manager Ad request. */ + public FlutterRewardedAd( + int adId, + @NonNull AdInstanceManager manager, + @NonNull String adUnitId, + @NonNull FlutterAdManagerAdRequest adManagerRequest, + @NonNull FlutterAdLoader flutterAdLoader) { + super(adId); + this.manager = manager; + this.adUnitId = adUnitId; + this.adManagerRequest = adManagerRequest; + this.request = null; + this.flutterAdLoader = flutterAdLoader; + } + + @Override + void load() { + final RewardedAdLoadCallback adLoadCallback = new DelegatingRewardedCallback(this); + if (request != null) { + flutterAdLoader.loadRewarded(adUnitId, request.asAdRequest(adUnitId), adLoadCallback); + } else if (adManagerRequest != null) { + flutterAdLoader.loadAdManagerRewarded( + adUnitId, adManagerRequest.asAdManagerAdRequest(adUnitId), adLoadCallback); + } else { + Log.e(TAG, "A null or invalid ad request was provided."); + } + } + + void onAdLoaded(@NonNull RewardedAd rewardedAd) { + FlutterRewardedAd.this.rewardedAd = rewardedAd; + rewardedAd.setOnPaidEventListener(new FlutterPaidEventListener(manager, this)); + manager.onAdLoaded(adId, rewardedAd.getResponseInfo()); + } + + void onAdFailedToLoad(@NonNull LoadAdError loadAdError) { + manager.onAdFailedToLoad(adId, new FlutterLoadAdError(loadAdError)); + } + + @Override + public void show() { + if (rewardedAd == null) { + Log.e(TAG, "Error showing rewarded - the rewarded ad wasn't loaded yet."); + return; + } + if (manager.getActivity() == null) { + Log.e(TAG, "Tried to show rewarded ad before activity was bound to the plugin."); + return; + } + rewardedAd.setFullScreenContentCallback(new FlutterFullScreenContentCallback(manager, adId)); + rewardedAd.setOnAdMetadataChangedListener(new DelegatingRewardedCallback(this)); + rewardedAd.show(manager.getActivity(), new DelegatingRewardedCallback(this)); + } + + @Override + public void setImmersiveMode(boolean immersiveModeEnabled) { + if (rewardedAd == null) { + Log.e( + TAG, "Error setting immersive mode in rewarded ad - the rewarded ad wasn't loaded yet."); + return; + } + rewardedAd.setImmersiveMode(immersiveModeEnabled); + } + + void onAdMetadataChanged() { + manager.onAdMetadataChanged(adId); + } + + void onUserEarnedReward(@NonNull RewardItem rewardItem) { + manager.onRewardedAdUserEarnedReward( + adId, new FlutterRewardItem(rewardItem.getAmount(), rewardItem.getType())); + } + + @Override + void dispose() { + rewardedAd = null; + } + + public void setServerSideVerificationOptions(FlutterServerSideVerificationOptions options) { + if (rewardedAd != null) { + rewardedAd.setServerSideVerificationOptions(options.asServerSideVerificationOptions()); + } else { + Log.e(TAG, "RewardedAd is null in setServerSideVerificationOptions"); + } + } + + /** + * This class delegates various rewarded ad callbacks to FlutterRewardedAd. Maintains a weak + * reference to avoid memory leaks. + */ + private static final class DelegatingRewardedCallback extends RewardedAdLoadCallback + implements OnAdMetadataChangedListener, OnUserEarnedRewardListener { + + private final WeakReference delegate; + + DelegatingRewardedCallback(FlutterRewardedAd delegate) { + this.delegate = new WeakReference<>(delegate); + } + + @Override + public void onAdLoaded(@NonNull RewardedAd rewardedAd) { + if (delegate.get() != null) { + delegate.get().onAdLoaded(rewardedAd); + } + } + + @Override + public void onAdFailedToLoad(@NonNull LoadAdError loadAdError) { + if (delegate.get() != null) { + delegate.get().onAdFailedToLoad(loadAdError); + } + } + + @Override + public void onUserEarnedReward(@NonNull RewardItem rewardItem) { + if (delegate.get() != null) { + delegate.get().onUserEarnedReward(rewardItem); + } + } + + @Override + public void onAdMetadataChanged() { + if (delegate.get() != null) { + delegate.get().onAdMetadataChanged(); + } + } + } +} diff --git a/mih_ui/android/build/ios/SourcePackages/google_mobile_ads-8.0.0/android/src/main/java/io/flutter/plugins/googlemobileads/FlutterRewardedInterstitialAd.java b/mih_ui/android/build/ios/SourcePackages/google_mobile_ads-8.0.0/android/src/main/java/io/flutter/plugins/googlemobileads/FlutterRewardedInterstitialAd.java new file mode 100644 index 00000000..1ed36c6f --- /dev/null +++ b/mih_ui/android/build/ios/SourcePackages/google_mobile_ads-8.0.0/android/src/main/java/io/flutter/plugins/googlemobileads/FlutterRewardedInterstitialAd.java @@ -0,0 +1,187 @@ +// Copyright 2021 Google LLC +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// https://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +package io.flutter.plugins.googlemobileads; + +import android.util.Log; +import androidx.annotation.NonNull; +import androidx.annotation.Nullable; +import com.google.android.gms.ads.LoadAdError; +import com.google.android.gms.ads.OnUserEarnedRewardListener; +import com.google.android.gms.ads.rewarded.OnAdMetadataChangedListener; +import com.google.android.gms.ads.rewarded.RewardItem; +import com.google.android.gms.ads.rewardedinterstitial.RewardedInterstitialAd; +import com.google.android.gms.ads.rewardedinterstitial.RewardedInterstitialAdLoadCallback; +import io.flutter.plugins.googlemobileads.FlutterRewardedAd.FlutterRewardItem; +import java.lang.ref.WeakReference; + +/** A wrapper for {@link RewardedInterstitialAd}. */ +class FlutterRewardedInterstitialAd extends FlutterAd.FlutterOverlayAd { + private static final String TAG = "FlutterRIAd"; + + @NonNull private final AdInstanceManager manager; + @NonNull private final String adUnitId; + @NonNull private final FlutterAdLoader flutterAdLoader; + @Nullable private final FlutterAdRequest request; + @Nullable private final FlutterAdManagerAdRequest adManagerRequest; + @Nullable RewardedInterstitialAd rewardedInterstitialAd; + + /** Constructor for AdMob Ad Request. */ + public FlutterRewardedInterstitialAd( + int adId, + @NonNull AdInstanceManager manager, + @NonNull String adUnitId, + @NonNull FlutterAdRequest request, + @NonNull FlutterAdLoader flutterAdLoader) { + super(adId); + this.manager = manager; + this.adUnitId = adUnitId; + this.request = request; + this.adManagerRequest = null; + this.flutterAdLoader = flutterAdLoader; + } + + /** Constructor for Ad Manager Ad request. */ + public FlutterRewardedInterstitialAd( + int adId, + @NonNull AdInstanceManager manager, + @NonNull String adUnitId, + @NonNull FlutterAdManagerAdRequest adManagerRequest, + @NonNull FlutterAdLoader flutterAdLoader) { + super(adId); + this.manager = manager; + this.adUnitId = adUnitId; + this.adManagerRequest = adManagerRequest; + this.request = null; + this.flutterAdLoader = flutterAdLoader; + } + + @Override + void load() { + final RewardedInterstitialAdLoadCallback adLoadCallback = new DelegatingRewardedCallback(this); + if (request != null) { + flutterAdLoader.loadRewardedInterstitial( + adUnitId, request.asAdRequest(adUnitId), adLoadCallback); + } else if (adManagerRequest != null) { + flutterAdLoader.loadAdManagerRewardedInterstitial( + adUnitId, adManagerRequest.asAdManagerAdRequest(adUnitId), adLoadCallback); + } else { + Log.e(TAG, "A null or invalid ad request was provided."); + } + } + + void onAdLoaded(@NonNull RewardedInterstitialAd rewardedInterstitialAd) { + FlutterRewardedInterstitialAd.this.rewardedInterstitialAd = rewardedInterstitialAd; + rewardedInterstitialAd.setOnPaidEventListener(new FlutterPaidEventListener(manager, this)); + manager.onAdLoaded(adId, rewardedInterstitialAd.getResponseInfo()); + } + + void onAdFailedToLoad(@NonNull LoadAdError loadAdError) { + manager.onAdFailedToLoad(adId, new FlutterLoadAdError(loadAdError)); + } + + @Override + public void show() { + if (rewardedInterstitialAd == null) { + Log.e( + TAG, + "Error showing rewarded interstitial - the rewarded interstitial ad wasn't loaded yet."); + return; + } + if (manager.getActivity() == null) { + Log.e(TAG, "Tried to show rewarded interstitial ad before activity was bound to the plugin."); + return; + } + rewardedInterstitialAd.setFullScreenContentCallback( + new FlutterFullScreenContentCallback(manager, adId)); + rewardedInterstitialAd.setOnAdMetadataChangedListener(new DelegatingRewardedCallback(this)); + rewardedInterstitialAd.show(manager.getActivity(), new DelegatingRewardedCallback(this)); + } + + @Override + public void setImmersiveMode(boolean immersiveModeEnabled) { + if (rewardedInterstitialAd == null) { + Log.e( + TAG, + "Error setting immersive mode in rewarded interstitial ad - the rewarded interstitial ad wasn't loaded yet."); + return; + } + rewardedInterstitialAd.setImmersiveMode(immersiveModeEnabled); + } + + void onAdMetadataChanged() { + manager.onAdMetadataChanged(adId); + } + + void onUserEarnedReward(@NonNull RewardItem rewardItem) { + manager.onRewardedAdUserEarnedReward( + adId, new FlutterRewardItem(rewardItem.getAmount(), rewardItem.getType())); + } + + @Override + void dispose() { + rewardedInterstitialAd = null; + } + + public void setServerSideVerificationOptions(FlutterServerSideVerificationOptions options) { + if (rewardedInterstitialAd != null) { + rewardedInterstitialAd.setServerSideVerificationOptions( + options.asServerSideVerificationOptions()); + } else { + Log.e(TAG, "RewardedInterstitialAd is null in setServerSideVerificationOptions"); + } + } + + /** + * This class delegates various rewarded interstitial ad callbacks to + * FlutterRewardedInterstitialAd. Maintains a weak reference to avoid memory leaks. + */ + private static final class DelegatingRewardedCallback extends RewardedInterstitialAdLoadCallback + implements OnAdMetadataChangedListener, OnUserEarnedRewardListener { + + private final WeakReference delegate; + + DelegatingRewardedCallback(FlutterRewardedInterstitialAd delegate) { + this.delegate = new WeakReference<>(delegate); + } + + @Override + public void onAdLoaded(@NonNull RewardedInterstitialAd rewardedInterstitialAd) { + if (delegate.get() != null) { + delegate.get().onAdLoaded(rewardedInterstitialAd); + } + } + + @Override + public void onAdFailedToLoad(@NonNull LoadAdError loadAdError) { + if (delegate.get() != null) { + delegate.get().onAdFailedToLoad(loadAdError); + } + } + + @Override + public void onUserEarnedReward(@NonNull RewardItem rewardItem) { + if (delegate.get() != null) { + delegate.get().onUserEarnedReward(rewardItem); + } + } + + @Override + public void onAdMetadataChanged() { + if (delegate.get() != null) { + delegate.get().onAdMetadataChanged(); + } + } + } +} diff --git a/mih_ui/android/build/ios/SourcePackages/google_mobile_ads-8.0.0/android/src/main/java/io/flutter/plugins/googlemobileads/FlutterServerSideVerificationOptions.java b/mih_ui/android/build/ios/SourcePackages/google_mobile_ads-8.0.0/android/src/main/java/io/flutter/plugins/googlemobileads/FlutterServerSideVerificationOptions.java new file mode 100644 index 00000000..cc9a03d5 --- /dev/null +++ b/mih_ui/android/build/ios/SourcePackages/google_mobile_ads-8.0.0/android/src/main/java/io/flutter/plugins/googlemobileads/FlutterServerSideVerificationOptions.java @@ -0,0 +1,57 @@ +package io.flutter.plugins.googlemobileads; + +import androidx.annotation.Nullable; +import com.google.android.gms.ads.rewarded.ServerSideVerificationOptions; +import java.util.Objects; + +/** A wrapper for {@link ServerSideVerificationOptions}. */ +class FlutterServerSideVerificationOptions { + + @Nullable private final String userId; + @Nullable private final String customData; + + public FlutterServerSideVerificationOptions( + @Nullable String userId, @Nullable String customData) { + this.userId = userId; + this.customData = customData; + } + + @Nullable + public String getUserId() { + return userId; + } + + @Nullable + public String getCustomData() { + return customData; + } + + /** Gets an equivalent {@link ServerSideVerificationOptions}. */ + public ServerSideVerificationOptions asServerSideVerificationOptions() { + ServerSideVerificationOptions.Builder builder = new ServerSideVerificationOptions.Builder(); + if (userId != null) { + builder.setUserId(userId); + } + if (customData != null) { + builder.setCustomData(customData); + } + return builder.build(); + } + + @Override + public boolean equals(@Nullable Object obj) { + if (this == obj) { + return true; + } + if (!(obj instanceof FlutterServerSideVerificationOptions)) { + return false; + } + FlutterServerSideVerificationOptions other = (FlutterServerSideVerificationOptions) obj; + return Objects.equals(other.userId, userId) && Objects.equals(other.customData, customData); + } + + @Override + public int hashCode() { + return Objects.hash(userId, customData); + } +} diff --git a/mih_ui/android/build/ios/SourcePackages/google_mobile_ads-8.0.0/android/src/main/java/io/flutter/plugins/googlemobileads/FlutterVideoOptions.java b/mih_ui/android/build/ios/SourcePackages/google_mobile_ads-8.0.0/android/src/main/java/io/flutter/plugins/googlemobileads/FlutterVideoOptions.java new file mode 100644 index 00000000..25a29e6b --- /dev/null +++ b/mih_ui/android/build/ios/SourcePackages/google_mobile_ads-8.0.0/android/src/main/java/io/flutter/plugins/googlemobileads/FlutterVideoOptions.java @@ -0,0 +1,49 @@ +// Copyright 2021 Google LLC +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// https://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License.c language governing permissions and +// limitations under the License. + +package io.flutter.plugins.googlemobileads; + +import androidx.annotation.Nullable; +import com.google.android.gms.ads.VideoOptions; + +/** A wrapper for {@link com.google.android.gms.ads.VideoOptions}. */ +class FlutterVideoOptions { + @Nullable final Boolean clickToExpandRequested; + @Nullable final Boolean customControlsRequested; + @Nullable final Boolean startMuted; + + FlutterVideoOptions( + @Nullable Boolean clickToExpandRequested, + @Nullable Boolean customControlsRequested, + @Nullable Boolean startMuted) { + this.clickToExpandRequested = clickToExpandRequested; + this.customControlsRequested = customControlsRequested; + this.startMuted = startMuted; + } + + VideoOptions asVideoOptions() { + VideoOptions.Builder builder = new VideoOptions.Builder(); + if (clickToExpandRequested != null) { + builder.setClickToExpandRequested(clickToExpandRequested); + } + if (customControlsRequested != null) { + builder.setCustomControlsRequested(customControlsRequested); + } + if (startMuted != null) { + builder.setStartMuted(startMuted); + } + return builder.build(); + } +} diff --git a/mih_ui/android/build/ios/SourcePackages/google_mobile_ads-8.0.0/android/src/main/java/io/flutter/plugins/googlemobileads/GoogleMobileAdsPlugin.java b/mih_ui/android/build/ios/SourcePackages/google_mobile_ads-8.0.0/android/src/main/java/io/flutter/plugins/googlemobileads/GoogleMobileAdsPlugin.java new file mode 100644 index 00000000..87871b5e --- /dev/null +++ b/mih_ui/android/build/ios/SourcePackages/google_mobile_ads-8.0.0/android/src/main/java/io/flutter/plugins/googlemobileads/GoogleMobileAdsPlugin.java @@ -0,0 +1,724 @@ +// Copyright 2021 Google LLC +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// https://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +package io.flutter.plugins.googlemobileads; + +import android.content.Context; +import android.util.Log; +import androidx.annotation.NonNull; +import androidx.annotation.Nullable; +import androidx.annotation.VisibleForTesting; +import com.google.android.gms.ads.AdInspectorError; +import com.google.android.gms.ads.AdSize; +import com.google.android.gms.ads.MobileAds; +import com.google.android.gms.ads.OnAdInspectorClosedListener; +import com.google.android.gms.ads.RequestConfiguration; +import com.google.android.gms.ads.initialization.InitializationStatus; +import com.google.android.gms.ads.initialization.OnInitializationCompleteListener; +import com.google.android.gms.ads.nativead.NativeAd; +import com.google.android.gms.ads.nativead.NativeAdView; +import io.flutter.embedding.engine.FlutterEngine; +import io.flutter.embedding.engine.plugins.FlutterPlugin; +import io.flutter.embedding.engine.plugins.activity.ActivityAware; +import io.flutter.embedding.engine.plugins.activity.ActivityPluginBinding; +import io.flutter.plugin.common.MethodCall; +import io.flutter.plugin.common.MethodChannel; +import io.flutter.plugin.common.MethodChannel.MethodCallHandler; +import io.flutter.plugin.common.MethodChannel.Result; +import io.flutter.plugin.common.StandardMethodCodec; +import io.flutter.plugins.googlemobileads.FlutterAd.FlutterOverlayAd; +import io.flutter.plugins.googlemobileads.nativetemplates.FlutterNativeTemplateStyle; +import io.flutter.plugins.googlemobileads.usermessagingplatform.UserMessagingPlatformManager; +import java.lang.reflect.Method; +import java.util.HashMap; +import java.util.List; +import java.util.Map; + +/** + * Flutter plugin accessing Google Mobile Ads API. + * + *

Instantiate this in an add to app scenario to gracefully handle activity and context changes. + */ +public class GoogleMobileAdsPlugin implements FlutterPlugin, ActivityAware, MethodCallHandler { + + private static final String TAG = "GoogleMobileAdsPlugin"; + + private static T requireNonNull(T obj) { + if (obj == null) { + throw new IllegalArgumentException(); + } + return obj; + } + + // This is always null when not using v2 embedding. + @Nullable private FlutterPluginBinding pluginBinding; + @Nullable private AdInstanceManager instanceManager; + @Nullable private AdMessageCodec adMessageCodec; + @Nullable private AppStateNotifier appStateNotifier; + @Nullable private UserMessagingPlatformManager userMessagingPlatformManager; + private final Map nativeAdFactories = new HashMap<>(); + + @SuppressWarnings("deprecation") // Keeping for compatibility + @Nullable + private MediationNetworkExtrasProvider mediationNetworkExtrasProvider; + + private final FlutterMobileAdsWrapper flutterMobileAds; + /** + * Public constructor for the plugin. Dependency initialization is handled in lifecycle methods + * below. + */ + public GoogleMobileAdsPlugin() { + this.flutterMobileAds = new FlutterMobileAdsWrapper(); + } + + /** Constructor for testing. */ + @VisibleForTesting + protected GoogleMobileAdsPlugin( + @Nullable FlutterPluginBinding pluginBinding, + @Nullable AdInstanceManager instanceManager, + @NonNull FlutterMobileAdsWrapper flutterMobileAds) { + this.pluginBinding = pluginBinding; + this.instanceManager = instanceManager; + this.flutterMobileAds = flutterMobileAds; + } + + @VisibleForTesting + protected GoogleMobileAdsPlugin(@NonNull AppStateNotifier appStateNotifier) { + this.appStateNotifier = appStateNotifier; + this.flutterMobileAds = new FlutterMobileAdsWrapper(); + } + + /** + * Interface used to display a {@link com.google.android.gms.ads.nativead.NativeAd}. + * + *

Added to a {@link io.flutter.plugins.googlemobileads.GoogleMobileAdsPlugin} and creates + * {@link com.google.android.gms.ads.nativead.NativeAdView}s from Native Ads created in Dart. + */ + public interface NativeAdFactory { + /** + * Creates a {@link com.google.android.gms.ads.nativead.NativeAdView} with a {@link + * com.google.android.gms.ads.nativead.NativeAd}. + * + * @param nativeAd Ad information used to create a {@link + * com.google.android.gms.ads.nativead.NativeAd} + * @param customOptions Used to pass additional custom options to create the {@link + * com.google.android.gms.ads.nativead.NativeAdView}. Nullable. + * @return a {@link com.google.android.gms.ads.nativead.NativeAdView} that is overlaid on top of + * the FlutterView + */ + NativeAdView createNativeAd(NativeAd nativeAd, Map customOptions); + } + + /** + * Registers a {@link io.flutter.plugins.googlemobileads.GoogleMobileAdsPlugin.NativeAdFactory} + * used to create {@link com.google.android.gms.ads.nativead.NativeAdView}s from a Native Ad + * created in Dart. + * + * @param engine maintains access to a GoogleMobileAdsPlugin instance + * @param factoryId a unique identifier for the ad factory. The Native Ad created in Dart includes + * a parameter that refers to this. + * @param nativeAdFactory creates {@link com.google.android.gms.ads.nativead.NativeAdView}s when + * Flutter NativeAds are created + * @return whether the factoryId is unique and the nativeAdFactory was successfully added + */ + public static boolean registerNativeAdFactory( + FlutterEngine engine, String factoryId, NativeAdFactory nativeAdFactory) { + final GoogleMobileAdsPlugin gmaPlugin = + (GoogleMobileAdsPlugin) engine.getPlugins().get(GoogleMobileAdsPlugin.class); + return registerNativeAdFactory(gmaPlugin, factoryId, nativeAdFactory); + } + + /** + * Registers a {@link MediationNetworkExtrasProvider} used to provide network extras to the plugin + * when it creates ad requests. + * + * @param engine The {@link FlutterEngine} which should have an attached instance of this plugin + * @param mediationNetworkExtrasProvider The {@link MediationNetworkExtrasProvider} which will be + * used to provide network extras when ad requests are created + * @return whether {@code mediationNetworkExtrasProvider} was registered to a {@code + * GoogleMobileAdsPlugin} associated with {@code engine} + * @deprecated Use {@link FlutterMediationExtras} instead. + */ + @Deprecated + public static boolean registerMediationNetworkExtrasProvider( + FlutterEngine engine, MediationNetworkExtrasProvider mediationNetworkExtrasProvider) { + final GoogleMobileAdsPlugin gmaPlugin = + (GoogleMobileAdsPlugin) engine.getPlugins().get(GoogleMobileAdsPlugin.class); + if (gmaPlugin == null) { + return false; + } + gmaPlugin.mediationNetworkExtrasProvider = mediationNetworkExtrasProvider; + if (gmaPlugin.adMessageCodec != null) { + gmaPlugin.adMessageCodec.setMediationNetworkExtrasProvider(mediationNetworkExtrasProvider); + } + return true; + } + + /** + * Unregisters any {@link MediationNetworkExtrasProvider} that have been previously registered + * with the plugin using {@code unregisterMediationNetworkExtrasProvider}. + * + * @param engine The {@link FlutterEngine} which should have an attached instance of this plugin + * @deprecated Use {@link FlutterMediationExtras} instead. + */ + @Deprecated + public static void unregisterMediationNetworkExtrasProvider(FlutterEngine engine) { + final GoogleMobileAdsPlugin gmaPlugin = + (GoogleMobileAdsPlugin) engine.getPlugins().get(GoogleMobileAdsPlugin.class); + if (gmaPlugin == null) { + return; + } + + if (gmaPlugin.adMessageCodec != null) { + gmaPlugin.adMessageCodec.setMediationNetworkExtrasProvider(null); + } + gmaPlugin.mediationNetworkExtrasProvider = null; + } + + private static boolean registerNativeAdFactory( + GoogleMobileAdsPlugin plugin, String factoryId, NativeAdFactory nativeAdFactory) { + if (plugin == null) { + final String message = + String.format( + "Could not find a %s instance. The plugin may have not been registered.", + GoogleMobileAdsPlugin.class.getSimpleName()); + throw new IllegalStateException(message); + } + + return plugin.addNativeAdFactory(factoryId, nativeAdFactory); + } + + /** + * Unregisters a {@link io.flutter.plugins.googlemobileads.GoogleMobileAdsPlugin.NativeAdFactory} + * used to create {@link com.google.android.gms.ads.nativead.NativeAdView}s from a Native Ad + * created in Dart. + * + * @param engine maintains access to a GoogleMobileAdsPlugin instance + * @param factoryId a unique identifier for the ad factory. The Native ad created in Dart includes + * a parameter that refers to this + * @return the previous {@link + * io.flutter.plugins.googlemobileads.GoogleMobileAdsPlugin.NativeAdFactory} associated with + * this factoryId, or null if there was none for this factoryId + */ + @Nullable + public static NativeAdFactory unregisterNativeAdFactory(FlutterEngine engine, String factoryId) { + final FlutterPlugin gmaPlugin = engine.getPlugins().get(GoogleMobileAdsPlugin.class); + if (gmaPlugin != null) { + return ((GoogleMobileAdsPlugin) gmaPlugin).removeNativeAdFactory(factoryId); + } + + return null; + } + + private boolean addNativeAdFactory(String factoryId, NativeAdFactory nativeAdFactory) { + if (nativeAdFactories.containsKey(factoryId)) { + final String errorMessage = + String.format( + "A NativeAdFactory with the following factoryId already exists: %s", factoryId); + Log.e(GoogleMobileAdsPlugin.class.getSimpleName(), errorMessage); + return false; + } + + nativeAdFactories.put(factoryId, nativeAdFactory); + return true; + } + + private NativeAdFactory removeNativeAdFactory(String factoryId) { + return nativeAdFactories.remove(factoryId); + } + + @Override + public void onAttachedToEngine(FlutterPluginBinding binding) { + pluginBinding = binding; + adMessageCodec = + new AdMessageCodec( + binding.getApplicationContext(), + new FlutterRequestAgentProvider(binding.getApplicationContext())); + if (mediationNetworkExtrasProvider != null) { + adMessageCodec.setMediationNetworkExtrasProvider(mediationNetworkExtrasProvider); + } + final MethodChannel channel = + new MethodChannel( + binding.getBinaryMessenger(), + "plugins.flutter.io/google_mobile_ads", + new StandardMethodCodec(adMessageCodec)); + channel.setMethodCallHandler(this); + instanceManager = new AdInstanceManager(channel); + binding + .getPlatformViewRegistry() + .registerViewFactory( + "plugins.flutter.io/google_mobile_ads/ad_widget", + new GoogleMobileAdsViewFactory(instanceManager)); + appStateNotifier = new AppStateNotifier(binding.getBinaryMessenger()); + userMessagingPlatformManager = + new UserMessagingPlatformManager( + binding.getBinaryMessenger(), binding.getApplicationContext()); + } + + @Override + public void onDetachedFromEngine(FlutterPluginBinding binding) { + if (appStateNotifier != null) { + appStateNotifier.stop(); + appStateNotifier = null; + } + } + + @Override + public void onAttachedToActivity(ActivityPluginBinding binding) { + if (instanceManager != null) { + instanceManager.setActivity(binding.getActivity()); + } + if (adMessageCodec != null) { + adMessageCodec.setContext(binding.getActivity()); + } + if (userMessagingPlatformManager != null) { + userMessagingPlatformManager.setActivity(binding.getActivity()); + } + } + + @Override + public void onDetachedFromActivityForConfigChanges() { + // Use the application context + if (adMessageCodec != null && pluginBinding != null) { + adMessageCodec.setContext(pluginBinding.getApplicationContext()); + } + if (instanceManager != null) { + instanceManager.setActivity(null); + } + if (userMessagingPlatformManager != null) { + userMessagingPlatformManager.setActivity(null); + } + } + + @Override + public void onReattachedToActivityForConfigChanges(@NonNull ActivityPluginBinding binding) { + if (instanceManager != null) { + instanceManager.setActivity(binding.getActivity()); + } + if (adMessageCodec != null) { + adMessageCodec.setContext(binding.getActivity()); + } + if (userMessagingPlatformManager != null) { + userMessagingPlatformManager.setActivity(binding.getActivity()); + } + } + + @Override + public void onDetachedFromActivity() { + if (adMessageCodec != null && pluginBinding != null) { + adMessageCodec.setContext(pluginBinding.getApplicationContext()); + } + if (instanceManager != null) { + instanceManager.setActivity(null); + } + if (userMessagingPlatformManager != null) { + userMessagingPlatformManager.setActivity(null); + } + } + + @SuppressWarnings("deprecation") + @Override + public void onMethodCall(@NonNull MethodCall call, @NonNull final Result result) { + if (instanceManager == null || pluginBinding == null) { + Log.e(TAG, "method call received before instanceManager initialized: " + call.method); + return; + } + // Use activity as context if available. + Context context = + (instanceManager.getActivity() != null) + ? instanceManager.getActivity() + : pluginBinding.getApplicationContext(); + switch (call.method) { + case "_init": + // Internal init. This is necessary to cleanup state on hot restart. + instanceManager.disposeAllAds(); + result.success(null); + break; + case "MobileAds#initialize": + flutterMobileAds.initialize(context, new FlutterInitializationListener(result)); + break; + case "MobileAds#openAdInspector": + flutterMobileAds.openAdInspector( + context, + new OnAdInspectorClosedListener() { + @Override + public void onAdInspectorClosed(@Nullable AdInspectorError adInspectorError) { + if (adInspectorError != null) { + String errorCode = Integer.toString(adInspectorError.getCode()); + result.error( + errorCode, adInspectorError.getMessage(), adInspectorError.getDomain()); + } else { + result.success(null); + } + } + }); + break; + case "MobileAds#getRequestConfiguration": + result.success(flutterMobileAds.getRequestConfiguration()); + break; + case "MobileAds#updateRequestConfiguration": + RequestConfiguration.Builder builder = MobileAds.getRequestConfiguration().toBuilder(); + String maxAdContentRating = call.argument("maxAdContentRating"); + Integer tagForChildDirectedTreatment = call.argument("tagForChildDirectedTreatment"); + Integer tagForUnderAgeOfConsent = call.argument("tagForUnderAgeOfConsent"); + List testDeviceIds = call.argument("testDeviceIds"); + if (maxAdContentRating != null) { + builder.setMaxAdContentRating(maxAdContentRating); + } + if (tagForChildDirectedTreatment != null) { + builder.setTagForChildDirectedTreatment(tagForChildDirectedTreatment); + } + if (tagForUnderAgeOfConsent != null) { + builder.setTagForUnderAgeOfConsent(tagForUnderAgeOfConsent); + } + if (testDeviceIds != null) { + builder.setTestDeviceIds(testDeviceIds); + } + MobileAds.setRequestConfiguration(builder.build()); + result.success(null); + break; + case "MobileAds#registerWebView": + Integer webViewId = call.argument("webViewId"); + flutterMobileAds.registerWebView(webViewId, pluginBinding.getFlutterEngine()); + result.success(null); + break; + case "loadBannerAd": + final FlutterBannerAd bannerAd = + new FlutterBannerAd( + call.argument("adId"), + instanceManager, + call.argument("adUnitId"), + call.argument("request"), + call.argument("size"), + getBannerAdCreator(context)); + instanceManager.trackAd(bannerAd, call.argument("adId")); + bannerAd.load(); + result.success(null); + break; + case "loadNativeAd": + final String factoryId = call.argument("factoryId"); + final NativeAdFactory factory = nativeAdFactories.get(factoryId); + final FlutterNativeTemplateStyle templateStyle = call.argument("nativeTemplateStyle"); + if (factory == null && templateStyle == null) { + final String message = + String.format("No NativeAdFactory with id: %s or nativeTemplateStyle", factoryId); + result.error("NativeAdError", message, null); + break; + } + + final FlutterNativeAd nativeAd = + new FlutterNativeAd.Builder(context) + .setManager(instanceManager) + .setAdUnitId(call.argument("adUnitId")) + .setAdFactory(factory) + .setRequest(call.argument("request")) + .setAdManagerRequest(call.argument("adManagerRequest")) + .setCustomOptions(call.>argument("customOptions")) + .setId(call.argument("adId")) + .setNativeAdOptions(call.argument("nativeAdOptions")) + .setFlutterAdLoader(new FlutterAdLoader(context)) + .setNativeTemplateStyle( + call.argument("nativeTemplateStyle")) + .build(); + instanceManager.trackAd(nativeAd, call.argument("adId")); + nativeAd.load(); + result.success(null); + break; + case "loadInterstitialAd": + final FlutterInterstitialAd interstitial = + new FlutterInterstitialAd( + call.argument("adId"), + instanceManager, + call.argument("adUnitId"), + call.argument("request"), + new FlutterAdLoader(context)); + instanceManager.trackAd(interstitial, call.argument("adId")); + interstitial.load(); + result.success(null); + break; + case "loadRewardedAd": + final String rewardedAdUnitId = requireNonNull(call.argument("adUnitId")); + final FlutterAdRequest rewardedAdRequest = call.argument("request"); + final FlutterAdManagerAdRequest rewardedAdManagerRequest = + call.argument("adManagerRequest"); + + final FlutterRewardedAd rewardedAd; + if (rewardedAdRequest != null) { + rewardedAd = + new FlutterRewardedAd( + call.argument("adId"), + requireNonNull(instanceManager), + rewardedAdUnitId, + rewardedAdRequest, + new FlutterAdLoader(context)); + } else if (rewardedAdManagerRequest != null) { + rewardedAd = + new FlutterRewardedAd( + call.argument("adId"), + requireNonNull(instanceManager), + rewardedAdUnitId, + rewardedAdManagerRequest, + new FlutterAdLoader(context)); + } else { + result.error("InvalidRequest", "A null or invalid ad request was provided.", null); + break; + } + + instanceManager.trackAd(rewardedAd, requireNonNull(call.argument("adId"))); + rewardedAd.load(); + result.success(null); + break; + case "loadAdManagerBannerAd": + final FlutterAdManagerBannerAd adManagerBannerAd = + new FlutterAdManagerBannerAd( + call.argument("adId"), + instanceManager, + call.argument("adUnitId"), + call.>argument("sizes"), + call.argument("request"), + getBannerAdCreator(context)); + instanceManager.trackAd(adManagerBannerAd, call.argument("adId")); + adManagerBannerAd.load(); + result.success(null); + break; + case "loadFluidAd": + final FluidAdManagerBannerAd fluidAd = + new FluidAdManagerBannerAd( + call.argument("adId"), + instanceManager, + call.argument("adUnitId"), + call.argument("request"), + getBannerAdCreator(context)); + instanceManager.trackAd(fluidAd, call.argument("adId")); + fluidAd.load(); + result.success(null); + break; + case "loadAdManagerInterstitialAd": + final FlutterAdManagerInterstitialAd adManagerInterstitialAd = + new FlutterAdManagerInterstitialAd( + call.argument("adId"), + requireNonNull(instanceManager), + requireNonNull(call.argument("adUnitId")), + call.argument("request"), + new FlutterAdLoader(context)); + instanceManager.trackAd( + adManagerInterstitialAd, requireNonNull(call.argument("adId"))); + adManagerInterstitialAd.load(); + result.success(null); + break; + case "loadRewardedInterstitialAd": + final String rewardedInterstitialAdUnitId = + requireNonNull(call.argument("adUnitId")); + final FlutterAdRequest rewardedInterstitialAdRequest = call.argument("request"); + final FlutterAdManagerAdRequest rewardedInterstitialAdManagerRequest = + call.argument("adManagerRequest"); + + final FlutterRewardedInterstitialAd rewardedInterstitialAd; + if (rewardedInterstitialAdRequest != null) { + rewardedInterstitialAd = + new FlutterRewardedInterstitialAd( + call.argument("adId"), + requireNonNull(instanceManager), + rewardedInterstitialAdUnitId, + rewardedInterstitialAdRequest, + new FlutterAdLoader(context)); + } else if (rewardedInterstitialAdManagerRequest != null) { + rewardedInterstitialAd = + new FlutterRewardedInterstitialAd( + call.argument("adId"), + requireNonNull(instanceManager), + rewardedInterstitialAdUnitId, + rewardedInterstitialAdManagerRequest, + new FlutterAdLoader(context)); + } else { + result.error("InvalidRequest", "A null or invalid ad request was provided.", null); + break; + } + + instanceManager.trackAd( + rewardedInterstitialAd, requireNonNull(call.argument("adId"))); + rewardedInterstitialAd.load(); + result.success(null); + break; + case "loadAppOpenAd": + final FlutterAppOpenAd appOpenAd = + new FlutterAppOpenAd( + call.argument("adId"), + requireNonNull(instanceManager), + requireNonNull(call.argument("adUnitId")), + call.argument("request"), + call.argument("adManagerRequest"), + new FlutterAdLoader(context)); + instanceManager.trackAd(appOpenAd, call.argument("adId")); + appOpenAd.load(); + result.success(null); + break; + case "disposeAd": + instanceManager.disposeAd(call.argument("adId")); + result.success(null); + break; + case "showAdWithoutView": + final boolean adShown = instanceManager.showAdWithId(call.argument("adId")); + if (!adShown) { + result.error("AdShowError", "Ad failed to show.", null); + break; + } + result.success(null); + break; + case "AdSize#getAnchoredAdaptiveBannerAdSize": + final FlutterAdSize.AnchoredAdaptiveBannerAdSize size = + new FlutterAdSize.AnchoredAdaptiveBannerAdSize( + context, + new FlutterAdSize.AdSizeFactory(), + call.argument("orientation"), + call.argument("width"), + /* isLarge = */ false); + if (AdSize.INVALID.equals(size.size)) { + result.success(null); + } else { + result.success(size.height); + } + break; + case "AdSize#getLargeAnchoredAdaptiveBannerAdSize": + final FlutterAdSize.AnchoredAdaptiveBannerAdSize largeSize = + new FlutterAdSize.AnchoredAdaptiveBannerAdSize( + context, + new FlutterAdSize.AdSizeFactory(), + call.argument("orientation"), + call.argument("width"), + /* isLarge = */ true); + if (AdSize.INVALID.equals(largeSize.size)) { + result.success(null); + } else { + result.success(largeSize.height); + } + break; + case "MobileAds#setAppMuted": + flutterMobileAds.setAppMuted(call.argument("muted")); + result.success(null); + break; + case "MobileAds#setAppVolume": + flutterMobileAds.setAppVolume(call.argument("volume")); + result.success(null); + break; + case "setImmersiveMode": + ((FlutterOverlayAd) instanceManager.adForId(call.argument("adId"))) + .setImmersiveMode(call.argument("immersiveModeEnabled")); + result.success(null); + break; + case "MobileAds#disableMediationInitialization": + flutterMobileAds.disableMediationInitialization(context); + result.success(null); + break; + case "MobileAds#getVersionString": + result.success(flutterMobileAds.getVersionString()); + break; + case "MobileAds#openDebugMenu": + String adUnitId = call.argument("adUnitId"); + flutterMobileAds.openDebugMenu(context, adUnitId); + result.success(null); + break; + case "getAdSize": + { + FlutterAd ad = instanceManager.adForId(call.argument("adId")); + if (ad == null) { + // This was called on a dart ad container that hasn't been loaded yet. + result.success(null); + } else if (ad instanceof FlutterBannerAd) { + result.success(((FlutterBannerAd) ad).getAdSize()); + } else if (ad instanceof FlutterAdManagerBannerAd) { + result.success(((FlutterAdManagerBannerAd) ad).getAdSize()); + } else { + result.error( + Constants.ERROR_CODE_UNEXPECTED_AD_TYPE, + "Unexpected ad type for getAdSize: " + ad, + null); + } + break; + } + case "isCollapsible": + { + FlutterAd ad = instanceManager.adForId(call.argument("adId")); + if (ad == null) { + result.success(false); + } else if (ad instanceof FlutterBannerAd) { + result.success(((FlutterBannerAd) ad).isCollapsible()); + } else if (ad instanceof FlutterAdManagerBannerAd) { + result.success(((FlutterAdManagerBannerAd) ad).isCollapsible()); + } else { + result.error( + Constants.ERROR_CODE_UNEXPECTED_AD_TYPE, + "Unexpected ad type for isCollapsible: " + ad, + null); + } + break; + } + case "setServerSideVerificationOptions": + { + FlutterAd ad = instanceManager.adForId(call.argument("adId")); + final FlutterServerSideVerificationOptions options = + call.argument("serverSideVerificationOptions"); + if (ad == null) { + Log.w(TAG, "Error - null ad in setServerSideVerificationOptions"); + } else if (ad instanceof FlutterRewardedAd) { + ((FlutterRewardedAd) ad).setServerSideVerificationOptions(options); + } else if (ad instanceof FlutterRewardedInterstitialAd) { + ((FlutterRewardedInterstitialAd) ad).setServerSideVerificationOptions(options); + } else { + Log.w(TAG, "Error - setServerSideVerificationOptions called on " + "non-rewarded ad"); + } + result.success(null); + break; + } + default: + result.notImplemented(); + } + } + + @VisibleForTesting + BannerAdCreator getBannerAdCreator(@NonNull Context context) { + return new BannerAdCreator(context); + } + + /** An {@link OnInitializationCompleteListener} that invokes result.success() at most once. */ + private static final class FlutterInitializationListener + implements OnInitializationCompleteListener { + + private final Result result; + private boolean isInitializationCompleted; + + private FlutterInitializationListener(@NonNull final Result result) { + this.result = result; + isInitializationCompleted = false; + } + + @Override + public void onInitializationComplete(@NonNull InitializationStatus initializationStatus) { + // Make sure not to invoke this more than once, since Dart will throw an exception if success + // is invoked more than once. See b/193418432. + if (isInitializationCompleted) { + return; + } + try { + Class clazz = Class.forName("com.google.android.gms.ads.MobileAds"); + Method method = clazz.getDeclaredMethod("setPlugin", String.class); + method.setAccessible(true); + method.invoke(null, Constants.REQUEST_AGENT_PREFIX_VERSIONED); + } catch (Exception ignored) { + } + result.success(new FlutterInitializationStatus(initializationStatus)); + isInitializationCompleted = true; + } + } +} diff --git a/mih_ui/android/build/ios/SourcePackages/google_mobile_ads-8.0.0/android/src/main/java/io/flutter/plugins/googlemobileads/GoogleMobileAdsViewFactory.java b/mih_ui/android/build/ios/SourcePackages/google_mobile_ads-8.0.0/android/src/main/java/io/flutter/plugins/googlemobileads/GoogleMobileAdsViewFactory.java new file mode 100644 index 00000000..43d6437f --- /dev/null +++ b/mih_ui/android/build/ios/SourcePackages/google_mobile_ads-8.0.0/android/src/main/java/io/flutter/plugins/googlemobileads/GoogleMobileAdsViewFactory.java @@ -0,0 +1,99 @@ +// Copyright 2021 Google LLC +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// https://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +package io.flutter.plugins.googlemobileads; + +import android.content.Context; +import android.graphics.Color; +import android.view.View; +import android.widget.TextView; +import androidx.annotation.NonNull; +import io.flutter.BuildConfig; +import io.flutter.Log; +import io.flutter.plugin.common.StandardMessageCodec; +import io.flutter.plugin.platform.PlatformView; +import io.flutter.plugin.platform.PlatformViewFactory; +import java.util.Locale; + +/** Displays loaded FlutterAds for an AdInstanceManager */ +final class GoogleMobileAdsViewFactory extends PlatformViewFactory { + @NonNull private final AdInstanceManager manager; + + private static class ErrorTextView implements PlatformView { + private final TextView textView; + + private ErrorTextView(Context context, String message) { + textView = new TextView(context); + textView.setText(message); + textView.setBackgroundColor(Color.RED); + textView.setTextColor(Color.YELLOW); + } + + @Override + public View getView() { + return textView; + } + + @Override + public void dispose() {} + } + + public GoogleMobileAdsViewFactory(@NonNull AdInstanceManager manager) { + super(StandardMessageCodec.INSTANCE); + this.manager = manager; + } + + @Override + public PlatformView create(Context context, int viewId, Object args) { + if (args == null) { + return getErrorView(context, 0); + } + final Integer adId = (Integer) args; + FlutterAd ad = manager.adForId(adId); + if (ad == null || ad.getPlatformView() == null) { + return getErrorView(context, adId); + } + return ad.getPlatformView(); + } + + /** + * Returns an ErrorView with a debug message for debug builds only. Otherwise just returns an + * empty PlatformView. + */ + private static PlatformView getErrorView(@NonNull final Context context, int adId) { + final String message = + String.format( + Locale.getDefault(), + "This ad may have not been loaded or has been disposed. " + + "Ad with the following id could not be found: %d.", + adId); + + if (BuildConfig.DEBUG) { + return new ErrorTextView(context, message); + } else { + Log.e(GoogleMobileAdsViewFactory.class.getSimpleName(), message); + return new PlatformView() { + @Override + public View getView() { + return new View(context); + } + + @Override + public void dispose() { + // Do nothing. + } + }; + } + } +} diff --git a/mih_ui/android/build/ios/SourcePackages/google_mobile_ads-8.0.0/android/src/main/java/io/flutter/plugins/googlemobileads/MediationNetworkExtrasProvider.java b/mih_ui/android/build/ios/SourcePackages/google_mobile_ads-8.0.0/android/src/main/java/io/flutter/plugins/googlemobileads/MediationNetworkExtrasProvider.java new file mode 100644 index 00000000..63d24906 --- /dev/null +++ b/mih_ui/android/build/ios/SourcePackages/google_mobile_ads-8.0.0/android/src/main/java/io/flutter/plugins/googlemobileads/MediationNetworkExtrasProvider.java @@ -0,0 +1,54 @@ +// Copyright 2021 Google LLC +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// https://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +package io.flutter.plugins.googlemobileads; + +import android.os.Bundle; +import androidx.annotation.Nullable; +import com.google.android.gms.ads.mediation.MediationExtrasReceiver; +import io.flutter.embedding.engine.FlutterEngine; +import java.util.Map; + +/** + * Provides network specific parameters when constructing an ad request. + * + *

After you register a {@code MediationNetworkExtrasProvider} using {@link + * GoogleMobileAdsPlugin#registerMediationNetworkExtrasProvider(FlutterEngine, + * MediationNetworkExtrasProvider)}, the plugin will use it to pass extras when constructing ad + * requests. + * + * @deprecated User {@link FlutterMediationExtras} instead. + */ +@Deprecated +public interface MediationNetworkExtrasProvider { + + /** + * Gets mediation extras that should be included for an ad request with the {@code adUnitId} and + * {@code identifier}, as a map from adapter classes to their corresponding extras bundle. You can + * refer to each network's documentation + * to see how to find the corresponding adapter class and create its extras. This will be called + * whenever the plugin creates an ad request. + * + * @param adUnitId The ad unit for the associated ad request. + * @param identifier An optional identifier that comes from the associated dart ad request object. + * This allows for additional control of which extras to include for an ad request, beyond + * just the ad unit. + * @return A map of mediation adapter classes to their extras that should be included in the ad + * request. If {@code null} is returned then no extras are added. + */ + @Nullable + Map, Bundle> getMediationExtras( + String adUnitId, @Nullable String identifier); +} diff --git a/mih_ui/android/build/ios/SourcePackages/google_mobile_ads-8.0.0/android/src/main/java/io/flutter/plugins/googlemobileads/nativetemplates/FlutterNativeTemplateFontStyle.java b/mih_ui/android/build/ios/SourcePackages/google_mobile_ads-8.0.0/android/src/main/java/io/flutter/plugins/googlemobileads/nativetemplates/FlutterNativeTemplateFontStyle.java new file mode 100644 index 00000000..30b353e9 --- /dev/null +++ b/mih_ui/android/build/ios/SourcePackages/google_mobile_ads-8.0.0/android/src/main/java/io/flutter/plugins/googlemobileads/nativetemplates/FlutterNativeTemplateFontStyle.java @@ -0,0 +1,47 @@ +// Copyright 2023 Google LLC +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// https://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +package io.flutter.plugins.googlemobileads.nativetemplates; + +import android.graphics.Typeface; +import android.util.Log; + +public enum FlutterNativeTemplateFontStyle { + NORMAL, + BOLD, + ITALIC, + MONOSPACE; + + public static FlutterNativeTemplateFontStyle fromIntValue(int value) { + if (value >= 0 && value < FlutterNativeTemplateFontStyle.values().length) { + return FlutterNativeTemplateFontStyle.values()[value]; + } + Log.w("NativeTemplateFontStyle", "Invalid index for NativeTemplateFontStyle: " + value); + return NORMAL; + } + + Typeface getTypeface() { + switch (this) { + case NORMAL: + return Typeface.DEFAULT; + case BOLD: + return Typeface.DEFAULT_BOLD; + case ITALIC: + return Typeface.defaultFromStyle(Typeface.ITALIC); + case MONOSPACE: + return Typeface.MONOSPACE; + } + return Typeface.DEFAULT; + } +} diff --git a/mih_ui/android/build/ios/SourcePackages/google_mobile_ads-8.0.0/android/src/main/java/io/flutter/plugins/googlemobileads/nativetemplates/FlutterNativeTemplateStyle.java b/mih_ui/android/build/ios/SourcePackages/google_mobile_ads-8.0.0/android/src/main/java/io/flutter/plugins/googlemobileads/nativetemplates/FlutterNativeTemplateStyle.java new file mode 100644 index 00000000..2d2f39dc --- /dev/null +++ b/mih_ui/android/build/ios/SourcePackages/google_mobile_ads-8.0.0/android/src/main/java/io/flutter/plugins/googlemobileads/nativetemplates/FlutterNativeTemplateStyle.java @@ -0,0 +1,180 @@ +// Copyright 2023 Google LLC +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// https://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +package io.flutter.plugins.googlemobileads.nativetemplates; + +import android.content.Context; +import android.graphics.drawable.ColorDrawable; +import android.view.LayoutInflater; +import androidx.annotation.NonNull; +import androidx.annotation.Nullable; +import com.google.android.ads.nativetemplates.NativeTemplateStyle; +import com.google.android.ads.nativetemplates.TemplateView; +import java.util.Objects; + +public final class FlutterNativeTemplateStyle { + + @NonNull final FlutterNativeTemplateType templateType; + @Nullable final ColorDrawable mainBackgroundColor; + @Nullable final FlutterNativeTemplateTextStyle callToActionStyle; + @Nullable final FlutterNativeTemplateTextStyle primaryTextStyle; + @Nullable final FlutterNativeTemplateTextStyle secondaryTextStyle; + @Nullable final FlutterNativeTemplateTextStyle tertiaryTextStyle; + + public FlutterNativeTemplateStyle( + @NonNull FlutterNativeTemplateType templateType, + @Nullable ColorDrawable mainBackgroundColor, + @Nullable FlutterNativeTemplateTextStyle callToActionStyle, + @Nullable FlutterNativeTemplateTextStyle primaryTextStyle, + @Nullable FlutterNativeTemplateTextStyle secondaryTextStyle, + @Nullable FlutterNativeTemplateTextStyle tertiaryTextStyle) { + this.templateType = templateType; + this.mainBackgroundColor = mainBackgroundColor; + this.callToActionStyle = callToActionStyle; + this.primaryTextStyle = primaryTextStyle; + this.secondaryTextStyle = secondaryTextStyle; + this.tertiaryTextStyle = tertiaryTextStyle; + } + + public NativeTemplateStyle asNativeTemplateStyle() { + NativeTemplateStyle.Builder builder = new NativeTemplateStyle.Builder(); + if (mainBackgroundColor != null) { + builder.withMainBackgroundColor(mainBackgroundColor); + } + if (callToActionStyle != null) { + if (callToActionStyle.getBackgroundColor() != null) { + builder.withCallToActionBackgroundColor(callToActionStyle.getBackgroundColor()); + } + if (callToActionStyle.getTextColor() != null) { + builder.withCallToActionTypefaceColor(callToActionStyle.getTextColor().getColor()); + } + if (callToActionStyle.getFontStyle() != null) { + builder.withCallToActionTextTypeface(callToActionStyle.getFontStyle().getTypeface()); + } + if (callToActionStyle.getSize() != null) { + builder.withCallToActionTextSize(callToActionStyle.getSize()); + } + } + if (primaryTextStyle != null) { + if (primaryTextStyle.getBackgroundColor() != null) { + builder.withPrimaryTextBackgroundColor(primaryTextStyle.getBackgroundColor()); + } + if (primaryTextStyle.getTextColor() != null) { + builder.withPrimaryTextTypefaceColor(primaryTextStyle.getTextColor().getColor()); + } + if (primaryTextStyle.getFontStyle() != null) { + builder.withPrimaryTextTypeface(primaryTextStyle.getFontStyle().getTypeface()); + } + if (primaryTextStyle.getSize() != null) { + builder.withPrimaryTextSize(primaryTextStyle.getSize()); + } + } + if (secondaryTextStyle != null) { + if (secondaryTextStyle.getBackgroundColor() != null) { + builder.withSecondaryTextBackgroundColor(secondaryTextStyle.getBackgroundColor()); + } + if (secondaryTextStyle.getTextColor() != null) { + builder.withSecondaryTextTypefaceColor(secondaryTextStyle.getTextColor().getColor()); + } + if (secondaryTextStyle.getFontStyle() != null) { + builder.withSecondaryTextTypeface(secondaryTextStyle.getFontStyle().getTypeface()); + } + if (secondaryTextStyle.getSize() != null) { + builder.withSecondaryTextSize(secondaryTextStyle.getSize()); + } + } + if (tertiaryTextStyle != null) { + if (tertiaryTextStyle.getBackgroundColor() != null) { + builder.withTertiaryTextBackgroundColor(tertiaryTextStyle.getBackgroundColor()); + } + if (tertiaryTextStyle.getTextColor() != null) { + builder.withTertiaryTextTypefaceColor(tertiaryTextStyle.getTextColor().getColor()); + } + if (tertiaryTextStyle.getFontStyle() != null) { + builder.withTertiaryTextTypeface(tertiaryTextStyle.getFontStyle().getTypeface()); + } + if (tertiaryTextStyle.getSize() != null) { + builder.withTertiaryTextSize(tertiaryTextStyle.getSize()); + } + } + return builder.build(); + } + + public TemplateView asTemplateView(Context context) { + LayoutInflater layoutInflater = + (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE); + TemplateView templateView = + (TemplateView) layoutInflater.inflate(templateType.resourceId(), null); + templateView.setStyles(asNativeTemplateStyle()); + return templateView; + } + + @NonNull + public FlutterNativeTemplateType getTemplateType() { + return templateType; + } + + @Nullable + public ColorDrawable getMainBackgroundColor() { + return mainBackgroundColor; + } + + @Nullable + public FlutterNativeTemplateTextStyle getCallToActionStyle() { + return callToActionStyle; + } + + @Nullable + public FlutterNativeTemplateTextStyle getPrimaryTextStyle() { + return primaryTextStyle; + } + + @Nullable + public FlutterNativeTemplateTextStyle getSecondaryTextStyle() { + return secondaryTextStyle; + } + + @Nullable + public FlutterNativeTemplateTextStyle getTertiaryTextStyle() { + return tertiaryTextStyle; + } + + @Override + public boolean equals(Object o) { + if (this == o) { + return true; + } else if (!(o instanceof FlutterNativeTemplateStyle)) { + return false; + } + + FlutterNativeTemplateStyle other = (FlutterNativeTemplateStyle) o; + return templateType == other.templateType + && ((mainBackgroundColor == null && other.mainBackgroundColor == null) + || mainBackgroundColor.getColor() == other.mainBackgroundColor.getColor()) + && Objects.equals(callToActionStyle, other.callToActionStyle) + && Objects.equals(primaryTextStyle, other.primaryTextStyle) + && Objects.equals(secondaryTextStyle, other.secondaryTextStyle) + && Objects.equals(tertiaryTextStyle, other.tertiaryTextStyle); + } + + @Override + public int hashCode() { + return Objects.hash( + mainBackgroundColor == null ? null : mainBackgroundColor.getColor(), + callToActionStyle, + primaryTextStyle, + secondaryTextStyle, + tertiaryTextStyle); + } +} diff --git a/mih_ui/android/build/ios/SourcePackages/google_mobile_ads-8.0.0/android/src/main/java/io/flutter/plugins/googlemobileads/nativetemplates/FlutterNativeTemplateTextStyle.java b/mih_ui/android/build/ios/SourcePackages/google_mobile_ads-8.0.0/android/src/main/java/io/flutter/plugins/googlemobileads/nativetemplates/FlutterNativeTemplateTextStyle.java new file mode 100644 index 00000000..36a1919a --- /dev/null +++ b/mih_ui/android/build/ios/SourcePackages/google_mobile_ads-8.0.0/android/src/main/java/io/flutter/plugins/googlemobileads/nativetemplates/FlutterNativeTemplateTextStyle.java @@ -0,0 +1,82 @@ +// Copyright 2023 Google LLC +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// https://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +package io.flutter.plugins.googlemobileads.nativetemplates; + +import android.graphics.drawable.ColorDrawable; +import androidx.annotation.Nullable; +import java.util.Objects; + +public final class FlutterNativeTemplateTextStyle { + + @Nullable private final ColorDrawable textColor; + @Nullable private final ColorDrawable backgroundColor; + @Nullable private final FlutterNativeTemplateFontStyle fontStyle; + @Nullable private final Double size; + + public FlutterNativeTemplateTextStyle( + @Nullable ColorDrawable textColor, + @Nullable ColorDrawable backgroundColor, + @Nullable FlutterNativeTemplateFontStyle fontStyle, + @Nullable Double size) { + this.textColor = textColor; + this.backgroundColor = backgroundColor; + this.fontStyle = fontStyle; + this.size = size; + } + + @Nullable + public ColorDrawable getTextColor() { + return textColor; + } + + @Nullable + public ColorDrawable getBackgroundColor() { + return backgroundColor; + } + + @Nullable + public FlutterNativeTemplateFontStyle getFontStyle() { + return fontStyle; + } + + @Nullable + public Float getSize() { + return size == null ? null : size.floatValue(); + } + + @Override + public boolean equals(Object o) { + if (this == o) { + return true; + } else if (!(o instanceof FlutterNativeTemplateTextStyle)) { + return false; + } + + FlutterNativeTemplateTextStyle other = (FlutterNativeTemplateTextStyle) o; + return ((textColor == null && other.textColor == null) + || textColor.getColor() == other.textColor.getColor()) + && ((backgroundColor == null && other.backgroundColor == null) + || backgroundColor.getColor() == other.backgroundColor.getColor()) + && Objects.equals(size, other.size) + && Objects.equals(fontStyle, other.fontStyle); + } + + @Override + public int hashCode() { + Integer textColorValue = textColor == null ? null : textColor.getColor(); + Integer backgroundColorValue = backgroundColor == null ? null : backgroundColor.getColor(); + return Objects.hash(textColorValue, backgroundColorValue, size, fontStyle); + } +} diff --git a/mih_ui/android/build/ios/SourcePackages/google_mobile_ads-8.0.0/android/src/main/java/io/flutter/plugins/googlemobileads/nativetemplates/FlutterNativeTemplateType.java b/mih_ui/android/build/ios/SourcePackages/google_mobile_ads-8.0.0/android/src/main/java/io/flutter/plugins/googlemobileads/nativetemplates/FlutterNativeTemplateType.java new file mode 100644 index 00000000..59d30581 --- /dev/null +++ b/mih_ui/android/build/ios/SourcePackages/google_mobile_ads-8.0.0/android/src/main/java/io/flutter/plugins/googlemobileads/nativetemplates/FlutterNativeTemplateType.java @@ -0,0 +1,41 @@ +// Copyright 2023 Google LLC +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// https://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +package io.flutter.plugins.googlemobileads.nativetemplates; + +import android.util.Log; +import io.flutter.plugins.googlemobileads.R; + +public enum FlutterNativeTemplateType { + SMALL(R.layout.small_template_view_layout), + MEDIUM(R.layout.medium_template_view_layout); + + private final int resourceId; + + FlutterNativeTemplateType(int resourceId) { + this.resourceId = resourceId; + } + + public int resourceId() { + return resourceId; + } + + public static FlutterNativeTemplateType fromIntValue(int value) { + if (value >= 0 && value < FlutterNativeTemplateType.values().length) { + return FlutterNativeTemplateType.values()[value]; + } + Log.w("NativeTemplateType", "Invalid template type index: " + value); + return MEDIUM; + } +} diff --git a/mih_ui/android/build/ios/SourcePackages/google_mobile_ads-8.0.0/android/src/main/java/io/flutter/plugins/googlemobileads/usermessagingplatform/ConsentDebugSettingsWrapper.java b/mih_ui/android/build/ios/SourcePackages/google_mobile_ads-8.0.0/android/src/main/java/io/flutter/plugins/googlemobileads/usermessagingplatform/ConsentDebugSettingsWrapper.java new file mode 100644 index 00000000..4cc57e38 --- /dev/null +++ b/mih_ui/android/build/ios/SourcePackages/google_mobile_ads-8.0.0/android/src/main/java/io/flutter/plugins/googlemobileads/usermessagingplatform/ConsentDebugSettingsWrapper.java @@ -0,0 +1,77 @@ +// Copyright 2022 Google LLC +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// https://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +package io.flutter.plugins.googlemobileads.usermessagingplatform; + +import android.content.Context; +import androidx.annotation.Nullable; +import com.google.android.ump.ConsentDebugSettings; +import java.util.List; +import java.util.Objects; + +/** Wrapper for {@link ConsentDebugSettings}. */ +class ConsentDebugSettingsWrapper { + + @Nullable private final Integer debugGeography; + + @Nullable private final List testIdentifiers; + + ConsentDebugSettingsWrapper( + @Nullable Integer debugGeography, @Nullable List testIdentifiers) { + this.debugGeography = debugGeography; + this.testIdentifiers = testIdentifiers; + } + + @Nullable + Integer getDebugGeography() { + return debugGeography; + } + + @Nullable + List getTestIdentifiers() { + return testIdentifiers; + } + + /** Get the corresponding {@link ConsentDebugSettings}. */ + ConsentDebugSettings getAsConsentDebugSettings(Context context) { + ConsentDebugSettings.Builder builder = new ConsentDebugSettings.Builder(context); + if (debugGeography != null) { + builder.setDebugGeography(debugGeography); + } + if (testIdentifiers != null) { + for (String testIdentifier : testIdentifiers) { + builder.addTestDeviceHashedId(testIdentifier); + } + } + return builder.build(); + } + + @Override + public boolean equals(@Nullable Object obj) { + if (obj == this) { + return true; + } else if (!(obj instanceof ConsentDebugSettingsWrapper)) { + return false; + } + + ConsentDebugSettingsWrapper other = (ConsentDebugSettingsWrapper) obj; + return Objects.equals(debugGeography, other.getDebugGeography()) + && Objects.equals(testIdentifiers, other.getTestIdentifiers()); + } + + @Override + public int hashCode() { + return Objects.hash(debugGeography, testIdentifiers); + } +} diff --git a/mih_ui/android/build/ios/SourcePackages/google_mobile_ads-8.0.0/android/src/main/java/io/flutter/plugins/googlemobileads/usermessagingplatform/ConsentRequestParametersWrapper.java b/mih_ui/android/build/ios/SourcePackages/google_mobile_ads-8.0.0/android/src/main/java/io/flutter/plugins/googlemobileads/usermessagingplatform/ConsentRequestParametersWrapper.java new file mode 100644 index 00000000..20568a64 --- /dev/null +++ b/mih_ui/android/build/ios/SourcePackages/google_mobile_ads-8.0.0/android/src/main/java/io/flutter/plugins/googlemobileads/usermessagingplatform/ConsentRequestParametersWrapper.java @@ -0,0 +1,74 @@ +// Copyright 2022 Google LLC +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// https://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +package io.flutter.plugins.googlemobileads.usermessagingplatform; + +import android.content.Context; +import androidx.annotation.Nullable; +import com.google.android.ump.ConsentRequestParameters; +import java.util.Objects; + +/** Wrapper for {@link ConsentRequestParameters}. */ +class ConsentRequestParametersWrapper { + + @Nullable private final Boolean tfuac; + + @Nullable private final ConsentDebugSettingsWrapper debugSettings; + + ConsentRequestParametersWrapper( + @Nullable Boolean tfuac, @Nullable ConsentDebugSettingsWrapper debugSettings) { + this.tfuac = tfuac; + this.debugSettings = debugSettings; + } + + @Nullable + Boolean getTfuac() { + return tfuac; + } + + @Nullable + ConsentDebugSettingsWrapper getDebugSettings() { + return debugSettings; + } + + /** Get as {@link ConsentRequestParameters}. */ + ConsentRequestParameters getAsConsentRequestParameters(Context context) { + ConsentRequestParameters.Builder builder = new ConsentRequestParameters.Builder(); + if (tfuac != null) { + builder.setTagForUnderAgeOfConsent(tfuac); + } + if (debugSettings != null) { + builder.setConsentDebugSettings(debugSettings.getAsConsentDebugSettings(context)); + } + return builder.build(); + } + + @Override + public boolean equals(@Nullable Object obj) { + if (obj == this) { + return true; + } else if (!(obj instanceof ConsentRequestParametersWrapper)) { + return false; + } + + ConsentRequestParametersWrapper other = (ConsentRequestParametersWrapper) obj; + return Objects.equals(tfuac, other.getTfuac()) + && Objects.equals(debugSettings, other.getDebugSettings()); + } + + @Override + public int hashCode() { + return Objects.hash(tfuac, debugSettings); + } +} diff --git a/mih_ui/android/build/ios/SourcePackages/google_mobile_ads-8.0.0/android/src/main/java/io/flutter/plugins/googlemobileads/usermessagingplatform/UserMessagingCodec.java b/mih_ui/android/build/ios/SourcePackages/google_mobile_ads-8.0.0/android/src/main/java/io/flutter/plugins/googlemobileads/usermessagingplatform/UserMessagingCodec.java new file mode 100644 index 00000000..88aba3e0 --- /dev/null +++ b/mih_ui/android/build/ios/SourcePackages/google_mobile_ads-8.0.0/android/src/main/java/io/flutter/plugins/googlemobileads/usermessagingplatform/UserMessagingCodec.java @@ -0,0 +1,124 @@ +// Copyright 2022 Google LLC +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// https://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +package io.flutter.plugins.googlemobileads.usermessagingplatform; + +import androidx.annotation.NonNull; +import androidx.annotation.Nullable; +import com.google.android.ump.ConsentForm; +import com.google.android.ump.FormError; +import io.flutter.plugin.common.StandardMessageCodec; +import java.io.ByteArrayOutputStream; +import java.nio.ByteBuffer; +import java.util.ArrayList; +import java.util.HashMap; +import java.util.List; +import java.util.Map; + +/** Codec for UMP SDK. */ +public class UserMessagingCodec extends StandardMessageCodec { + + private static final byte VALUE_CONSENT_REQUEST_PARAMETERS = (byte) 129; + private static final byte VALUE_CONSENT_DEBUG_SETTINGS = (byte) 130; + private static final byte VALUE_CONSENT_FORM = (byte) 131; + private static final byte VALUE_FORM_ERROR = (byte) 132; + + private final Map consentFormMap; + + UserMessagingCodec() { + consentFormMap = new HashMap<>(); + } + + @Override + protected void writeValue(@NonNull ByteArrayOutputStream stream, @NonNull Object value) { + if (value instanceof ConsentRequestParametersWrapper) { + stream.write(VALUE_CONSENT_REQUEST_PARAMETERS); + ConsentRequestParametersWrapper params = (ConsentRequestParametersWrapper) value; + writeValue(stream, params.getTfuac()); + writeValue(stream, params.getDebugSettings()); + } else if (value instanceof ConsentDebugSettingsWrapper) { + stream.write(VALUE_CONSENT_DEBUG_SETTINGS); + ConsentDebugSettingsWrapper debugSettings = (ConsentDebugSettingsWrapper) value; + writeValue(stream, debugSettings.getDebugGeography()); + writeValue(stream, debugSettings.getTestIdentifiers()); + } else if (value instanceof ConsentForm) { + stream.write(VALUE_CONSENT_FORM); + writeValue(stream, value.hashCode()); + } else if (value instanceof FormError) { + stream.write(VALUE_FORM_ERROR); + FormError formError = (FormError) value; + writeValue(stream, formError.getErrorCode()); + writeValue(stream, formError.getMessage()); + } else { + super.writeValue(stream, value); + } + } + + @Nullable + private List asList(@Nullable Object maybeList) { + if (maybeList == null) { + return null; + } + List stringList = new ArrayList<>(); + if (maybeList instanceof List) { + List list = (List) maybeList; + for (Object obj : list) { + if (obj instanceof String) { + stringList.add((String) obj); + } + } + } + return stringList; + } + + @Override + protected Object readValueOfType(byte type, @NonNull ByteBuffer buffer) { + switch (type) { + case VALUE_CONSENT_REQUEST_PARAMETERS: + { + Boolean tfuac = (Boolean) readValueOfType(buffer.get(), buffer); + ConsentDebugSettingsWrapper debugSettings = + (ConsentDebugSettingsWrapper) readValueOfType(buffer.get(), buffer); + return new ConsentRequestParametersWrapper(tfuac, debugSettings); + } + case VALUE_CONSENT_DEBUG_SETTINGS: + { + Integer debugGeoInt = (Integer) readValueOfType(buffer.get(), buffer); + List testIdentifiers = asList(readValueOfType(buffer.get(), buffer)); + return new ConsentDebugSettingsWrapper(debugGeoInt, testIdentifiers); + } + case VALUE_CONSENT_FORM: + { + Integer hash = (Integer) readValueOfType(buffer.get(), buffer); + return consentFormMap.get(hash); + } + case VALUE_FORM_ERROR: + { + Integer errorCode = (Integer) readValueOfType(buffer.get(), buffer); + String errorMessage = (String) readValueOfType(buffer.get(), buffer); + return new FormError(errorCode, errorMessage); + } + default: + return super.readValueOfType(type, buffer); + } + } + + void trackConsentForm(ConsentForm form) { + consentFormMap.put(form.hashCode(), form); + } + + void disposeConsentForm(ConsentForm form) { + consentFormMap.remove(form.hashCode()); + } +} diff --git a/mih_ui/android/build/ios/SourcePackages/google_mobile_ads-8.0.0/android/src/main/java/io/flutter/plugins/googlemobileads/usermessagingplatform/UserMessagingPlatformManager.java b/mih_ui/android/build/ios/SourcePackages/google_mobile_ads-8.0.0/android/src/main/java/io/flutter/plugins/googlemobileads/usermessagingplatform/UserMessagingPlatformManager.java new file mode 100644 index 00000000..dde12714 --- /dev/null +++ b/mih_ui/android/build/ios/SourcePackages/google_mobile_ads-8.0.0/android/src/main/java/io/flutter/plugins/googlemobileads/usermessagingplatform/UserMessagingPlatformManager.java @@ -0,0 +1,237 @@ +// Copyright 2022 Google LLC +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// https://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +package io.flutter.plugins.googlemobileads.usermessagingplatform; + +import android.app.Activity; +import android.content.Context; +import android.util.Log; +import androidx.annotation.NonNull; +import androidx.annotation.Nullable; +import androidx.annotation.VisibleForTesting; +import com.google.android.ump.ConsentForm; +import com.google.android.ump.ConsentForm.OnConsentFormDismissedListener; +import com.google.android.ump.ConsentInformation; +import com.google.android.ump.ConsentInformation.OnConsentInfoUpdateFailureListener; +import com.google.android.ump.ConsentInformation.OnConsentInfoUpdateSuccessListener; +import com.google.android.ump.ConsentRequestParameters; +import com.google.android.ump.FormError; +import com.google.android.ump.UserMessagingPlatform; +import com.google.android.ump.UserMessagingPlatform.OnConsentFormLoadFailureListener; +import com.google.android.ump.UserMessagingPlatform.OnConsentFormLoadSuccessListener; +import io.flutter.plugin.common.BinaryMessenger; +import io.flutter.plugin.common.MethodCall; +import io.flutter.plugin.common.MethodChannel; +import io.flutter.plugin.common.MethodChannel.MethodCallHandler; +import io.flutter.plugin.common.MethodChannel.Result; +import io.flutter.plugin.common.StandardMethodCodec; + +/** Manages platform code for UMP SDK. */ +public class UserMessagingPlatformManager implements MethodCallHandler { + + private static final String METHOD_CHANNEL_NAME = "plugins.flutter.io/google_mobile_ads/ump"; + /** Use 0 for error code internal to the Flutter plugin. */ + private static final String INTERNAL_ERROR_CODE = "0"; + + private final UserMessagingCodec userMessagingCodec; + private final MethodChannel methodChannel; + private final Context context; + @Nullable private ConsentInformation consentInformation; + + @Nullable private Activity activity; + + public UserMessagingPlatformManager(BinaryMessenger binaryMessenger, Context context) { + userMessagingCodec = new UserMessagingCodec(); + methodChannel = + new MethodChannel( + binaryMessenger, METHOD_CHANNEL_NAME, new StandardMethodCodec(userMessagingCodec)); + methodChannel.setMethodCallHandler(this); + this.context = context; + } + + @VisibleForTesting + UserMessagingPlatformManager( + BinaryMessenger binaryMessenger, Context context, UserMessagingCodec userMessagingCodec) { + this.userMessagingCodec = userMessagingCodec; + methodChannel = + new MethodChannel( + binaryMessenger, METHOD_CHANNEL_NAME, new StandardMethodCodec(userMessagingCodec)); + methodChannel.setMethodCallHandler(this); + this.context = context; + } + + public void setActivity(@Nullable Activity activity) { + this.activity = activity; + } + + private ConsentInformation getConsentInformation() { + if (consentInformation != null) { + return consentInformation; + } + + consentInformation = UserMessagingPlatform.getConsentInformation(context); + return consentInformation; + } + + @Override + public void onMethodCall(@NonNull MethodCall call, @NonNull final Result result) { + switch (call.method) { + case "ConsentInformation#reset": + { + getConsentInformation().reset(); + result.success(null); + break; + } + case "ConsentInformation#getConsentStatus": + { + result.success(getConsentInformation().getConsentStatus()); + break; + } + case "ConsentInformation#requestConsentInfoUpdate": + { + if (activity == null) { + result.error( + INTERNAL_ERROR_CODE, + "ConsentInformation#requestConsentInfoUpdate called before plugin has been registered to an activity.", + null); + break; + } + ConsentRequestParametersWrapper requestParamsWrapper = call.argument("params"); + ConsentRequestParameters consentRequestParameters = + (requestParamsWrapper == null) + ? new ConsentRequestParameters.Builder().build() + : requestParamsWrapper.getAsConsentRequestParameters(activity); + getConsentInformation() + .requestConsentInfoUpdate( + activity, + consentRequestParameters, + new OnConsentInfoUpdateSuccessListener() { + @Override + public void onConsentInfoUpdateSuccess() { + result.success(null); + } + }, + new OnConsentInfoUpdateFailureListener() { + @Override + public void onConsentInfoUpdateFailure(FormError error) { + result.error( + Integer.toString(error.getErrorCode()), error.getMessage(), null); + } + }); + break; + } + case "ConsentInformation#canRequestAds": + result.success(getConsentInformation().canRequestAds()); + break; + case "ConsentInformation#getPrivacyOptionsRequirementStatus": + switch (getConsentInformation().getPrivacyOptionsRequirementStatus()) { + case NOT_REQUIRED: + result.success(0); + break; + case REQUIRED: + result.success(1); + break; + default: + result.success(2); + } + break; + case "UserMessagingPlatform#loadAndShowConsentFormIfRequired": + if (activity == null) { + result.error( + INTERNAL_ERROR_CODE, + "UserMessagingPlatform#loadAndShowConsentFormIfRequired called before plugin has been registered to an activity.", + null); + break; + } + UserMessagingPlatform.loadAndShowConsentFormIfRequired( + activity, + loadAndShowError -> { + result.success(loadAndShowError); + }); + break; + case "UserMessagingPlatform#loadConsentForm": + UserMessagingPlatform.loadConsentForm( + context, + new OnConsentFormLoadSuccessListener() { + @Override + public void onConsentFormLoadSuccess(ConsentForm consentForm) { + userMessagingCodec.trackConsentForm(consentForm); + result.success(consentForm); + } + }, + new OnConsentFormLoadFailureListener() { + @Override + public void onConsentFormLoadFailure(FormError formError) { + result.error( + Integer.toString(formError.getErrorCode()), formError.getMessage(), null); + } + }); + break; + case "UserMessagingPlatform#showPrivacyOptionsForm": + if (activity == null) { + result.error( + INTERNAL_ERROR_CODE, + "UserMessagingPlatform#showPrivacyOptionsForm called before plugin has been registered to an activity.", + null); + break; + } + UserMessagingPlatform.showPrivacyOptionsForm( + activity, + loadAndShowError -> { + result.success(loadAndShowError); + }); + break; + case "ConsentInformation#isConsentFormAvailable": + { + result.success(getConsentInformation().isConsentFormAvailable()); + break; + } + case "ConsentForm#show": + { + ConsentForm consentForm = call.argument("consentForm"); + if (consentForm == null) { + result.error(INTERNAL_ERROR_CODE, "ConsentForm#show", null); + } else { + consentForm.show( + activity, + new OnConsentFormDismissedListener() { + @Override + public void onConsentFormDismissed(@Nullable FormError formError) { + if (formError != null) { + result.error( + Integer.toString(formError.getErrorCode()), formError.getMessage(), null); + } else { + result.success(null); + } + } + }); + } + break; + } + case "ConsentForm#dispose": + { + ConsentForm consentForm = call.argument("consentForm"); + if (consentForm == null) { + Log.w(INTERNAL_ERROR_CODE, "Called dispose on ad that has been freed"); + } else { + userMessagingCodec.disposeConsentForm(consentForm); + } + result.success(null); + break; + } + default: + result.notImplemented(); + } + } +} diff --git a/mih_ui/android/build/ios/SourcePackages/google_mobile_ads-8.0.0/android/src/main/res/drawable/gnt_outline_shape.xml b/mih_ui/android/build/ios/SourcePackages/google_mobile_ads-8.0.0/android/src/main/res/drawable/gnt_outline_shape.xml new file mode 100644 index 00000000..3c657a12 --- /dev/null +++ b/mih_ui/android/build/ios/SourcePackages/google_mobile_ads-8.0.0/android/src/main/res/drawable/gnt_outline_shape.xml @@ -0,0 +1,6 @@ + + + + + + diff --git a/mih_ui/android/build/ios/SourcePackages/google_mobile_ads-8.0.0/android/src/main/res/drawable/gnt_rounded_corners_shape.xml b/mih_ui/android/build/ios/SourcePackages/google_mobile_ads-8.0.0/android/src/main/res/drawable/gnt_rounded_corners_shape.xml new file mode 100644 index 00000000..d03599b8 --- /dev/null +++ b/mih_ui/android/build/ios/SourcePackages/google_mobile_ads-8.0.0/android/src/main/res/drawable/gnt_rounded_corners_shape.xml @@ -0,0 +1,17 @@ + + + + + + + + + + diff --git a/mih_ui/android/build/ios/SourcePackages/google_mobile_ads-8.0.0/android/src/main/res/layout/gnt_medium_template_view.xml b/mih_ui/android/build/ios/SourcePackages/google_mobile_ads-8.0.0/android/src/main/res/layout/gnt_medium_template_view.xml new file mode 100644 index 00000000..d4184b80 --- /dev/null +++ b/mih_ui/android/build/ios/SourcePackages/google_mobile_ads-8.0.0/android/src/main/res/layout/gnt_medium_template_view.xml @@ -0,0 +1,231 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/mih_ui/android/build/ios/SourcePackages/google_mobile_ads-8.0.0/android/src/main/res/layout/gnt_small_template_view.xml b/mih_ui/android/build/ios/SourcePackages/google_mobile_ads-8.0.0/android/src/main/res/layout/gnt_small_template_view.xml new file mode 100644 index 00000000..189dbef4 --- /dev/null +++ b/mih_ui/android/build/ios/SourcePackages/google_mobile_ads-8.0.0/android/src/main/res/layout/gnt_small_template_view.xml @@ -0,0 +1,189 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/mih_ui/android/build/ios/SourcePackages/google_mobile_ads-8.0.0/android/src/main/res/layout/medium_template_view_layout.xml b/mih_ui/android/build/ios/SourcePackages/google_mobile_ads-8.0.0/android/src/main/res/layout/medium_template_view_layout.xml new file mode 100644 index 00000000..d84dc6ce --- /dev/null +++ b/mih_ui/android/build/ios/SourcePackages/google_mobile_ads-8.0.0/android/src/main/res/layout/medium_template_view_layout.xml @@ -0,0 +1,8 @@ + + diff --git a/mih_ui/android/build/ios/SourcePackages/google_mobile_ads-8.0.0/android/src/main/res/layout/small_template_view_layout.xml b/mih_ui/android/build/ios/SourcePackages/google_mobile_ads-8.0.0/android/src/main/res/layout/small_template_view_layout.xml new file mode 100644 index 00000000..792d1517 --- /dev/null +++ b/mih_ui/android/build/ios/SourcePackages/google_mobile_ads-8.0.0/android/src/main/res/layout/small_template_view_layout.xml @@ -0,0 +1,8 @@ + + diff --git a/mih_ui/android/build/ios/SourcePackages/google_mobile_ads-8.0.0/android/src/main/res/values/attrs.xml b/mih_ui/android/build/ios/SourcePackages/google_mobile_ads-8.0.0/android/src/main/res/values/attrs.xml new file mode 100644 index 00000000..36d477b8 --- /dev/null +++ b/mih_ui/android/build/ios/SourcePackages/google_mobile_ads-8.0.0/android/src/main/res/values/attrs.xml @@ -0,0 +1,7 @@ + + + + + + + diff --git a/mih_ui/android/build/ios/SourcePackages/google_mobile_ads-8.0.0/android/src/main/res/values/colors.xml b/mih_ui/android/build/ios/SourcePackages/google_mobile_ads-8.0.0/android/src/main/res/values/colors.xml new file mode 100644 index 00000000..7cbddaa4 --- /dev/null +++ b/mih_ui/android/build/ios/SourcePackages/google_mobile_ads-8.0.0/android/src/main/res/values/colors.xml @@ -0,0 +1,13 @@ + + + #00F4F4F4 + #00A3A3A3 + #000000 + #FFFFFF + #FF0000 + #00FF00 + #4285f4 + #3A6728 + #808080 + #E0E0E0 + diff --git a/mih_ui/android/build/ios/SourcePackages/google_mobile_ads-8.0.0/android/src/main/res/values/dimens.xml b/mih_ui/android/build/ios/SourcePackages/google_mobile_ads-8.0.0/android/src/main/res/values/dimens.xml new file mode 100644 index 00000000..29ee0585 --- /dev/null +++ b/mih_ui/android/build/ios/SourcePackages/google_mobile_ads-8.0.0/android/src/main/res/values/dimens.xml @@ -0,0 +1,21 @@ + + + 0.4 + 0.25 + 1.0 + 0.2 + 10dp + 5dp + 12sp + 15sp + 25dp + 20dp + 30dp + 0dp + 10dp + 10sp + 30dp + 50dp + 0dp + 0dp + diff --git a/mih_ui/android/build/ios/SourcePackages/google_mobile_ads-8.0.0/android/src/test/java/io/flutter/plugins/googlemobileads/AdMessageCodecTest.java b/mih_ui/android/build/ios/SourcePackages/google_mobile_ads-8.0.0/android/src/test/java/io/flutter/plugins/googlemobileads/AdMessageCodecTest.java new file mode 100644 index 00000000..f1b80ac6 --- /dev/null +++ b/mih_ui/android/build/ios/SourcePackages/google_mobile_ads-8.0.0/android/src/test/java/io/flutter/plugins/googlemobileads/AdMessageCodecTest.java @@ -0,0 +1,547 @@ +// Copyright 2021 Google LLC +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// https://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +package io.flutter.plugins.googlemobileads; + +import static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertFalse; +import static org.junit.Assert.assertNotNull; +import static org.junit.Assert.assertNull; +import static org.junit.Assert.assertTrue; +import static org.mockito.ArgumentMatchers.any; +import static org.mockito.ArgumentMatchers.anyInt; +import static org.mockito.ArgumentMatchers.eq; +import static org.mockito.Mockito.doReturn; +import static org.mockito.Mockito.mock; + +import android.content.Context; +import android.graphics.Color; +import android.graphics.drawable.ColorDrawable; +import android.os.Bundle; +import android.util.Pair; +import com.google.android.gms.ads.AdSize; +import com.google.android.gms.ads.RequestConfiguration; +import com.google.android.gms.ads.mediation.MediationExtrasReceiver; +import io.flutter.plugins.googlemobileads.FlutterAd.FlutterAdapterResponseInfo; +import io.flutter.plugins.googlemobileads.FlutterAd.FlutterResponseInfo; +import io.flutter.plugins.googlemobileads.FlutterAdSize.AdSizeFactory; +import io.flutter.plugins.googlemobileads.FlutterAdSize.AnchoredAdaptiveBannerAdSize; +import io.flutter.plugins.googlemobileads.FlutterAdSize.InlineAdaptiveBannerAdSize; +import io.flutter.plugins.googlemobileads.nativetemplates.FlutterNativeTemplateFontStyle; +import io.flutter.plugins.googlemobileads.nativetemplates.FlutterNativeTemplateStyle; +import io.flutter.plugins.googlemobileads.nativetemplates.FlutterNativeTemplateTextStyle; +import io.flutter.plugins.googlemobileads.nativetemplates.FlutterNativeTemplateType; +import java.nio.ByteBuffer; +import java.util.ArrayList; +import java.util.Arrays; +import java.util.Collections; +import java.util.HashMap; +import java.util.List; +import java.util.Map; +import org.junit.Before; +import org.junit.Test; +import org.junit.runner.RunWith; +import org.robolectric.RobolectricTestRunner; + +/** Tests for {@link AdMessageCodec}. */ +@RunWith(RobolectricTestRunner.class) +public class AdMessageCodecTest { + AdMessageCodec codec; + AdSizeFactory mockAdSizeFactory; + FlutterRequestAgentProvider mockFlutterRequestAgentProvider; + + @Before + public void setup() { + mockAdSizeFactory = mock(AdSizeFactory.class); + mockFlutterRequestAgentProvider = mock(FlutterRequestAgentProvider.class); + codec = + new AdMessageCodec(mock(Context.class), mockAdSizeFactory, mockFlutterRequestAgentProvider); + } + + @Test + public void encodeAdapterInitializationState() { + final ByteBuffer message = + codec.encodeMessage(FlutterAdapterStatus.AdapterInitializationState.NOT_READY); + + assertEquals( + codec.decodeMessage((ByteBuffer) message.position(0)), + FlutterAdapterStatus.AdapterInitializationState.NOT_READY); + } + + @Test + public void encodeAdapterStatus() { + final ByteBuffer message = + codec.encodeMessage( + new FlutterAdapterStatus( + FlutterAdapterStatus.AdapterInitializationState.READY, "desc", 24)); + + final FlutterAdapterStatus result = + (FlutterAdapterStatus) codec.decodeMessage((ByteBuffer) message.position(0)); + assertEquals( + result, + new FlutterAdapterStatus( + FlutterAdapterStatus.AdapterInitializationState.READY, "desc", 24)); + } + + @Test + public void encodeInitializationStatus() { + final ByteBuffer message = + codec.encodeMessage( + new FlutterInitializationStatus( + Collections.singletonMap( + "table", + new FlutterAdapterStatus( + FlutterAdapterStatus.AdapterInitializationState.NOT_READY, + "desc", + 56.66)))); + + final FlutterInitializationStatus initStatus = + (FlutterInitializationStatus) codec.decodeMessage((ByteBuffer) message.position(0)); + assertEquals(initStatus.adapterStatuses.size(), 1); + final FlutterAdapterStatus adapterStatus = initStatus.adapterStatuses.get("table"); + assertEquals( + adapterStatus, + new FlutterAdapterStatus( + FlutterAdapterStatus.AdapterInitializationState.NOT_READY, "desc", 56.66)); + } + + @Test + public void decodeServerSideVerificationOptions() { + FlutterServerSideVerificationOptions options = + new FlutterServerSideVerificationOptions("user-id", "custom-data"); + + ByteBuffer message = codec.encodeMessage(options); + + FlutterServerSideVerificationOptions decodedOptions = + (FlutterServerSideVerificationOptions) + codec.decodeMessage((ByteBuffer) message.position(0)); + assertEquals(decodedOptions, options); + + // With userId = null. + options = new FlutterServerSideVerificationOptions(null, "custom-data"); + message = codec.encodeMessage(options); + decodedOptions = + (FlutterServerSideVerificationOptions) + codec.decodeMessage((ByteBuffer) message.position(0)); + assertEquals(decodedOptions, options); + + // With customData = null. + options = new FlutterServerSideVerificationOptions("user-Id", null); + message = codec.encodeMessage(options); + decodedOptions = + (FlutterServerSideVerificationOptions) + codec.decodeMessage((ByteBuffer) message.position(0)); + assertEquals(decodedOptions, options); + + // With userId and customData = null. + options = new FlutterServerSideVerificationOptions(null, null); + message = codec.encodeMessage(options); + decodedOptions = + (FlutterServerSideVerificationOptions) + codec.decodeMessage((ByteBuffer) message.position(0)); + assertEquals(decodedOptions, options); + } + + @Test + public void encodeAnchoredAdaptiveBannerAdSize() { + AdSize mockAdSize = mock(AdSize.class); + doReturn(mockAdSize) + .when(mockAdSizeFactory) + .getPortraitAnchoredAdaptiveBannerAdSize(any(Context.class), anyInt()); + + doReturn(mockAdSize) + .when(mockAdSizeFactory) + .getLandscapeAnchoredAdaptiveBannerAdSize(any(Context.class), anyInt()); + + doReturn(mockAdSize) + .when(mockAdSizeFactory) + .getCurrentOrientationAnchoredAdaptiveBannerAdSize(any(Context.class), anyInt()); + + final AnchoredAdaptiveBannerAdSize portraitAnchoredAdaptiveAdSize = + new AnchoredAdaptiveBannerAdSize(mock(Context.class), mockAdSizeFactory, "portrait", 23, false); + final ByteBuffer portraitData = codec.encodeMessage(portraitAnchoredAdaptiveAdSize); + + final AnchoredAdaptiveBannerAdSize portraitResult = + (AnchoredAdaptiveBannerAdSize) codec.decodeMessage((ByteBuffer) portraitData.position(0)); + assertEquals(portraitResult.size, mockAdSize); + + final AnchoredAdaptiveBannerAdSize landscapeAnchoredAdaptiveAdSize = + new AnchoredAdaptiveBannerAdSize(mock(Context.class), mockAdSizeFactory, "landscape", 34, false); + final ByteBuffer landscapeData = codec.encodeMessage(landscapeAnchoredAdaptiveAdSize); + + final AnchoredAdaptiveBannerAdSize landscapeResult = + (AnchoredAdaptiveBannerAdSize) codec.decodeMessage((ByteBuffer) landscapeData.position(0)); + assertEquals(landscapeResult.size, mockAdSize); + + final AnchoredAdaptiveBannerAdSize anchoredAdaptiveAdSize = + new AnchoredAdaptiveBannerAdSize(mock(Context.class), mockAdSizeFactory, null, 45, false); + final ByteBuffer data = codec.encodeMessage(anchoredAdaptiveAdSize); + + final AnchoredAdaptiveBannerAdSize result = + (AnchoredAdaptiveBannerAdSize) codec.decodeMessage((ByteBuffer) data.position(0)); + assertEquals(result.size, mockAdSize); + } + + @Test + public void encodeSmartBannerAdSize() { + final ByteBuffer data = codec.encodeMessage(new FlutterAdSize.SmartBannerAdSize()); + + final FlutterAdSize.SmartBannerAdSize result = + (FlutterAdSize.SmartBannerAdSize) codec.decodeMessage((ByteBuffer) data.position(0)); + assertEquals(result.size, AdSize.SMART_BANNER); + } + + @Test + public void encodeFluidAdSize() { + final ByteBuffer data = codec.encodeMessage(new FlutterAdSize.FluidAdSize()); + + final FlutterAdSize.FluidAdSize result = + (FlutterAdSize.FluidAdSize) codec.decodeMessage((ByteBuffer) data.position(0)); + assertEquals(result.size, AdSize.FLUID); + } + + @Test + public void nativeAdOptionsNull() { + final ByteBuffer data = + codec.encodeMessage(new FlutterNativeAdOptions(null, null, null, null, null, null)); + + final FlutterNativeAdOptions result = + (FlutterNativeAdOptions) codec.decodeMessage((ByteBuffer) data.position(0)); + assertNull(result.adChoicesPlacement); + assertNull(result.mediaAspectRatio); + assertNull(result.videoOptions); + assertNull(result.requestCustomMuteThisAd); + assertNull(result.shouldRequestMultipleImages); + assertNull(result.shouldReturnUrlsForImageAssets); + } + + @Test + public void nativeAdOptions() { + FlutterVideoOptions videoOptions = new FlutterVideoOptions(true, false, true); + + final ByteBuffer data = + codec.encodeMessage(new FlutterNativeAdOptions(1, 2, videoOptions, false, true, false)); + + final FlutterNativeAdOptions result = + (FlutterNativeAdOptions) codec.decodeMessage((ByteBuffer) data.position(0)); + assertEquals(result.adChoicesPlacement, (Integer) 1); + assertEquals(result.mediaAspectRatio, (Integer) 2); + assertEquals(result.videoOptions.clickToExpandRequested, true); + assertEquals(result.videoOptions.customControlsRequested, false); + assertEquals(result.videoOptions.startMuted, true); + assertFalse(result.requestCustomMuteThisAd); + assertTrue(result.shouldRequestMultipleImages); + assertFalse(result.shouldReturnUrlsForImageAssets); + } + + @Test + public void color() { + ColorDrawable colorDrawable = new ColorDrawable(Color.argb(3, 2, 3, 4)); + ByteBuffer data = codec.encodeMessage(colorDrawable); + ColorDrawable result = (ColorDrawable) codec.decodeMessage((ByteBuffer) data.position(0)); + assertEquals(result.getColor(), colorDrawable.getColor()); + assertEquals(result.getAlpha(), colorDrawable.getAlpha()); + } + + @Test + public void nativeTemplateType() { + for (FlutterNativeTemplateType type : FlutterNativeTemplateType.values()) { + ByteBuffer data = codec.encodeMessage(type); + FlutterNativeTemplateType result = + (FlutterNativeTemplateType) codec.decodeMessage((ByteBuffer) data.position(0)); + assertEquals(result, type); + } + } + + @Test + public void nativeTemplateFontStyle() { + for (FlutterNativeTemplateFontStyle style : FlutterNativeTemplateFontStyle.values()) { + ByteBuffer data = codec.encodeMessage(style); + FlutterNativeTemplateFontStyle result = + (FlutterNativeTemplateFontStyle) codec.decodeMessage((ByteBuffer) data.position(0)); + assertEquals(result, style); + } + } + + @Test + public void nativeTemplateTextStyle() { + FlutterNativeTemplateTextStyle style = + new FlutterNativeTemplateTextStyle( + new ColorDrawable(Color.RED), + new ColorDrawable(Color.BLUE), + FlutterNativeTemplateFontStyle.BOLD, + 12.); + ByteBuffer data = codec.encodeMessage(style); + FlutterNativeTemplateTextStyle result = + (FlutterNativeTemplateTextStyle) codec.decodeMessage((ByteBuffer) data.position(0)); + assertEquals(result, style); + } + + @Test + public void nativeTemplateTextStyle_nullProperties() { + FlutterNativeTemplateTextStyle style = + new FlutterNativeTemplateTextStyle(null, null, null, null); + ByteBuffer data = codec.encodeMessage(style); + FlutterNativeTemplateTextStyle result = + (FlutterNativeTemplateTextStyle) codec.decodeMessage((ByteBuffer) data.position(0)); + assertEquals(style, result); + } + + @Test + public void nativeTemplateStyle_nullProperties() { + FlutterNativeTemplateStyle style = + new FlutterNativeTemplateStyle( + FlutterNativeTemplateType.MEDIUM, null, null, null, null, null); + + ByteBuffer data = codec.encodeMessage(style); + FlutterNativeTemplateStyle result = + (FlutterNativeTemplateStyle) codec.decodeMessage((ByteBuffer) data.position(0)); + + assertEquals(result, style); + } + + @Test + public void nativeTemplateStyle_definedProperties() { + FlutterNativeTemplateTextStyle ctaStyle = + new FlutterNativeTemplateTextStyle(null, null, null, null); + FlutterNativeTemplateTextStyle primaryStyle = + new FlutterNativeTemplateTextStyle( + new ColorDrawable(Color.YELLOW), + new ColorDrawable(Color.RED), + FlutterNativeTemplateFontStyle.ITALIC, + 24.); + FlutterNativeTemplateTextStyle secondaryStyle = + new FlutterNativeTemplateTextStyle( + new ColorDrawable(Color.BLUE), new ColorDrawable(Color.GREEN), null, 24.); + FlutterNativeTemplateTextStyle tertiaryStyle = + new FlutterNativeTemplateTextStyle( + new ColorDrawable(Color.YELLOW), null, FlutterNativeTemplateFontStyle.ITALIC, null); + + FlutterNativeTemplateStyle style = + new FlutterNativeTemplateStyle( + FlutterNativeTemplateType.MEDIUM, + new ColorDrawable(Color.BLACK), + ctaStyle, + primaryStyle, + secondaryStyle, + tertiaryStyle); + + ByteBuffer data = codec.encodeMessage(style); + FlutterNativeTemplateStyle result = + (FlutterNativeTemplateStyle) codec.decodeMessage((ByteBuffer) data.position(0)); + + assertEquals(result, style); + } + + @Test + public void videoOptionsNull() { + final ByteBuffer data = codec.encodeMessage(new FlutterVideoOptions(null, null, null)); + + final FlutterVideoOptions result = + (FlutterVideoOptions) codec.decodeMessage((ByteBuffer) data.position(0)); + assertNull(result.clickToExpandRequested); + assertNull(result.customControlsRequested); + assertNull(result.startMuted); + } + + public void encodeEmptyFlutterAdRequest() { + FlutterAdRequest adRequest = new FlutterAdRequest.Builder().build(); + final ByteBuffer message = codec.encodeMessage(adRequest); + + final FlutterAdRequest decodedRequest = + (FlutterAdRequest) codec.decodeMessage((ByteBuffer) message.position(0)); + assertEquals(adRequest, decodedRequest); + } + + public void encodeEmptyFlutterAdManagerAdRequest() { + FlutterAdManagerAdRequest adRequest = new FlutterAdManagerAdRequest.Builder().build(); + final ByteBuffer message = codec.encodeMessage(adRequest); + + final FlutterAdManagerAdRequest decodedRequest = + (FlutterAdManagerAdRequest) codec.decodeMessage((ByteBuffer) message.position(0)); + assertEquals(adRequest, decodedRequest); + } + + @Test + public void encodeFlutterAdRequest() { + Map extras = Collections.singletonMap("key", "value"); + List mediationExtras = new ArrayList<>(); + DummyMediationExtras randomExtra = new DummyMediationExtras(); + Map flutterRandomExtra = new HashMap<>(); + flutterRandomExtra.put("TEST_KEY", "TEST_VALUE"); + randomExtra.extras = flutterRandomExtra; + mediationExtras.add(randomExtra); + FlutterAdRequest adRequest = + new FlutterAdRequest.Builder() + .setKeywords(Arrays.asList("1", "2", "3")) + .setContentUrl("contentUrl") + .setNonPersonalizedAds(false) + .setNeighboringContentUrls(Arrays.asList("example.com", "test.com")) + .setHttpTimeoutMillis(1000) + .setMediationNetworkExtrasIdentifier("identifier") + .setAdMobExtras(extras) + .setMediationExtras(mediationExtras) + .build(); + final ByteBuffer message = codec.encodeMessage(adRequest); + + final FlutterAdRequest decodedRequest = + (FlutterAdRequest) codec.decodeMessage((ByteBuffer) message.position(0)); + assert decodedRequest != null; + assertEquals(adRequest, decodedRequest); + assertEquals(flutterRandomExtra, decodedRequest.getMediationExtras().get(0).extras); + } + + @Test + public void encodeFlutterAdManagerAdRequest() { + List mediationExtras = new ArrayList<>(); + DummyMediationExtras randomExtra = new DummyMediationExtras(); + Map flutterRandomExtra = new HashMap<>(); + flutterRandomExtra.put("TEST_KEY", "TEST_VALUE"); + randomExtra.extras = flutterRandomExtra; + mediationExtras.add(randomExtra); + doReturn("mock-request-agent").when(mockFlutterRequestAgentProvider).getRequestAgent(); + FlutterAdManagerAdRequest.Builder builder = new FlutterAdManagerAdRequest.Builder(); + builder.setKeywords(Arrays.asList("1", "2", "3")); + builder.setContentUrl("contentUrl"); + builder.setCustomTargeting(Collections.singletonMap("apple", "banana")); + builder.setCustomTargetingLists( + Collections.singletonMap("cherry", Collections.singletonList("pie"))); + builder.setNonPersonalizedAds(true); + builder.setPublisherProvidedId("pub-provided-id"); + builder.setMediationNetworkExtrasIdentifier("identifier"); + builder.setAdMobExtras(Collections.singletonMap("key", "value")); + builder.setMediationExtras(mediationExtras); + + FlutterAdManagerAdRequest flutterAdManagerAdRequest = builder.build(); + + final ByteBuffer message = codec.encodeMessage(flutterAdManagerAdRequest); + FlutterAdManagerAdRequest decodedAdRequest = + (FlutterAdManagerAdRequest) codec.decodeMessage((ByteBuffer) message.position(0)); + assertEquals(decodedAdRequest, flutterAdManagerAdRequest); + assertEquals(decodedAdRequest.getRequestAgent(), "mock-request-agent"); + assertEquals(flutterRandomExtra, decodedAdRequest.getMediationExtras().get(0).extras); + } + + @Test + public void encodeFlutterAdSize() { + final ByteBuffer message = codec.encodeMessage(new FlutterAdSize(1, 2)); + + assertEquals(codec.decodeMessage((ByteBuffer) message.position(0)), new FlutterAdSize(1, 2)); + } + + @Test + public void encodeFlutterRewardItem() { + final ByteBuffer message = + codec.encodeMessage(new FlutterRewardedAd.FlutterRewardItem(23, "coins")); + + assertEquals( + codec.decodeMessage((ByteBuffer) message.position(0)), + new FlutterRewardedAd.FlutterRewardItem(23, "coins")); + } + + @Test + public void encodeFlutterResponseInfo() { + List adapterResponseInfos = new ArrayList<>(); + Map adUnitMapping = Collections.singletonMap("key", "value"); + adapterResponseInfos.add( + new FlutterAdapterResponseInfo( + "adapter-class", + 9999, + "description", + adUnitMapping, + null, + "adSourceName", + "adSourceId", + "adSourceInstanceName", + "adSourceInstanceId")); + FlutterAdapterResponseInfo loadedAdapterResponseInfo = + new FlutterAdapterResponseInfo( + "loaded-adapter-class", + 1234, + "description", + adUnitMapping, + null, + "adSourceName", + "adSourceId", + "adSourceInstanceName", + "adSourceInstanceId"); + Map responseExtras = Collections.singletonMap("key", "value"); + FlutterResponseInfo info = + new FlutterResponseInfo( + "responseId", + "className", + adapterResponseInfos, + loadedAdapterResponseInfo, + responseExtras); + final ByteBuffer message = + codec.encodeMessage(new FlutterBannerAd.FlutterLoadAdError(1, "domain", "message", info)); + + final FlutterAd.FlutterLoadAdError error = + (FlutterAd.FlutterLoadAdError) codec.decodeMessage((ByteBuffer) message.position(0)); + assertNotNull(error); + assertEquals(error.code, 1); + assertEquals(error.domain, "domain"); + assertEquals(error.message, "message"); + assertEquals(error.responseInfo, info); + } + + public void encodeInlineAdaptiveBanner() { + AdSize adSize = new AdSize(100, 101); + doReturn(adSize) + .when(mockAdSizeFactory) + .getCurrentOrientationInlineAdaptiveBannerAdSize(any(Context.class), eq(100)); + + InlineAdaptiveBannerAdSize size = + new InlineAdaptiveBannerAdSize(mockAdSizeFactory, mock(Context.class), 100, null, null); + final ByteBuffer data = codec.encodeMessage(size); + final InlineAdaptiveBannerAdSize result = + (InlineAdaptiveBannerAdSize) codec.decodeMessage((ByteBuffer) data.position(0)); + + assertEquals(result.width, 100); + assertNull(result.maxHeight); + assertNull(result.orientation); + } + + public void encodeRequestConfiguration() { + RequestConfiguration.Builder requestConfigurationBuilder = new RequestConfiguration.Builder(); + requestConfigurationBuilder.setMaxAdContentRating( + RequestConfiguration.MAX_AD_CONTENT_RATING_MA); + requestConfigurationBuilder.setTagForChildDirectedTreatment( + RequestConfiguration.TAG_FOR_CHILD_DIRECTED_TREATMENT_TRUE); + requestConfigurationBuilder.setTagForUnderAgeOfConsent( + RequestConfiguration.TAG_FOR_UNDER_AGE_OF_CONSENT_FALSE); + requestConfigurationBuilder.setTestDeviceIds(Arrays.asList("test-device-id")); + RequestConfiguration requestConfiguration = requestConfigurationBuilder.build(); + + final ByteBuffer data = codec.encodeMessage(requestConfiguration); + final RequestConfiguration result = + (RequestConfiguration) codec.decodeMessage((ByteBuffer) data.position(0)); + + assertEquals(result.getMaxAdContentRating(), RequestConfiguration.MAX_AD_CONTENT_RATING_MA); + assertEquals( + result.getTagForChildDirectedTreatment(), + RequestConfiguration.TAG_FOR_CHILD_DIRECTED_TREATMENT_TRUE); + assertEquals( + result.getTagForUnderAgeOfConsent(), + RequestConfiguration.TAG_FOR_UNDER_AGE_OF_CONSENT_FALSE); + assertEquals(result.getTestDeviceIds(), Arrays.asList("test-device-id")); + } +} + +class DummyMediationExtras extends FlutterMediationExtras { + @Override + public Pair, Bundle> getMediationExtras() { + return null; + } +} diff --git a/mih_ui/android/build/ios/SourcePackages/google_mobile_ads-8.0.0/android/src/test/java/io/flutter/plugins/googlemobileads/FluidAdManagerBannerAdTest.java b/mih_ui/android/build/ios/SourcePackages/google_mobile_ads-8.0.0/android/src/test/java/io/flutter/plugins/googlemobileads/FluidAdManagerBannerAdTest.java new file mode 100644 index 00000000..de385bdc --- /dev/null +++ b/mih_ui/android/build/ios/SourcePackages/google_mobile_ads-8.0.0/android/src/test/java/io/flutter/plugins/googlemobileads/FluidAdManagerBannerAdTest.java @@ -0,0 +1,202 @@ +// Copyright 2021 Google LLC +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// https://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +package io.flutter.plugins.googlemobileads; + +import static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertNotNull; +import static org.junit.Assert.assertNull; +import static org.mockito.ArgumentMatchers.any; +import static org.mockito.ArgumentMatchers.anyString; +import static org.mockito.ArgumentMatchers.eq; +import static org.mockito.Mockito.doAnswer; +import static org.mockito.Mockito.doReturn; +import static org.mockito.Mockito.mock; +import static org.mockito.Mockito.spy; +import static org.mockito.Mockito.verify; +import static org.mockito.Mockito.when; + +import android.view.View.OnLayoutChangeListener; +import android.view.ViewGroup.LayoutParams; +import android.widget.ScrollView; +import com.google.android.gms.ads.AdListener; +import com.google.android.gms.ads.AdSize; +import com.google.android.gms.ads.LoadAdError; +import com.google.android.gms.ads.ResponseInfo; +import com.google.android.gms.ads.admanager.AdManagerAdRequest; +import com.google.android.gms.ads.admanager.AdManagerAdView; +import com.google.android.gms.ads.admanager.AppEventListener; +import io.flutter.plugin.common.BinaryMessenger; +import io.flutter.plugin.common.MethodChannel; +import io.flutter.plugin.platform.PlatformView; +import io.flutter.plugins.googlemobileads.FlutterAd.FlutterLoadAdError; +import org.junit.Before; +import org.junit.Test; +import org.junit.runner.RunWith; +import org.mockito.ArgumentCaptor; +import org.mockito.invocation.InvocationOnMock; +import org.mockito.stubbing.Answer; +import org.robolectric.RobolectricTestRunner; + +/** Tests for {@link FluidAdManagerBannerAd}. */ +@RunWith(RobolectricTestRunner.class) +public class FluidAdManagerBannerAdTest { + + private AdInstanceManager mockManager; + private AdManagerAdRequest mockAdRequest; + private AdManagerAdView mockAdView; + // The system under test. + private FluidAdManagerBannerAd fluidAd; + + @Before + public void setup() { + // Setup mock dependencies for flutterBannerAd. + BinaryMessenger mockMessenger = mock(BinaryMessenger.class); + mockManager = spy(new AdInstanceManager(mock(MethodChannel.class))); + FlutterAdManagerAdRequest mockFlutterAdRequest = mock(FlutterAdManagerAdRequest.class); + mockAdRequest = mock(AdManagerAdRequest.class); + when(mockFlutterAdRequest.asAdManagerAdRequest(anyString())).thenReturn(mockAdRequest); + BannerAdCreator bannerAdCreator = mock(BannerAdCreator.class); + mockAdView = mock(AdManagerAdView.class); + doReturn(mockAdView).when(bannerAdCreator).createAdManagerAdView(); + fluidAd = + new FluidAdManagerBannerAd(1, mockManager, "testId", mockFlutterAdRequest, bannerAdCreator); + } + + @Test + public void failedToLoad() { + final LoadAdError loadError = mock(LoadAdError.class); + ResponseInfo responseInfo = mock(ResponseInfo.class); + doReturn("id").when(responseInfo).getResponseId(); + doReturn("className").when(responseInfo).getMediationAdapterClassName(); + doReturn(1).when(loadError).getCode(); + doReturn("2").when(loadError).getDomain(); + doReturn("3").when(loadError).getMessage(); + doReturn(null).when(loadError).getResponseInfo(); + doAnswer( + new Answer() { + @Override + public Object answer(InvocationOnMock invocation) throws Throwable { + AdListener listener = invocation.getArgument(0); + listener.onAdFailedToLoad(loadError); + return null; + } + }) + .when(mockAdView) + .setAdListener(any(AdListener.class)); + + fluidAd.load(); + + verify(mockAdView).setLayoutParams(any(LayoutParams.class)); + verify(mockAdView).loadAd(eq(mockAdRequest)); + verify(mockAdView).setAdListener(any(AdListener.class)); + verify(mockAdView).setAppEventListener(any(AppEventListener.class)); + verify(mockAdView).setAdUnitId(eq("testId")); + verify(mockAdView).setAdSizes(AdSize.FLUID); + FlutterLoadAdError expectedError = new FlutterLoadAdError(loadError); + verify(mockManager).onAdFailedToLoad(eq(1), eq(expectedError)); + } + + @Test + public void loadWithListenerCallbacks() { + doAnswer( + new Answer() { + @Override + public Object answer(InvocationOnMock invocation) throws Throwable { + AdListener listener = invocation.getArgument(0); + listener.onAdLoaded(); + listener.onAdImpression(); + listener.onAdClosed(); + listener.onAdOpened(); + listener.onAdClicked(); + return null; + } + }) + .when(mockAdView) + .setAdListener(any(AdListener.class)); + final ResponseInfo responseInfo = mock(ResponseInfo.class); + doReturn(responseInfo).when(mockAdView).getResponseInfo(); + fluidAd.load(); + + verify(mockAdView).setLayoutParams(any(LayoutParams.class)); + verify(mockAdView).loadAd(eq(mockAdRequest)); + verify(mockAdView).setAdListener(any(AdListener.class)); + verify(mockAdView).setAdUnitId(eq("testId")); + verify(mockAdView).setAdSizes(AdSize.FLUID); + verify(mockManager).onAdLoaded(eq(1), eq(responseInfo)); + verify(mockManager).onAdImpression(eq(1)); + verify(mockManager).onAdClosed(eq(1)); + verify(mockManager).onAdOpened(eq(1)); + verify(mockManager).onAdClicked(eq(1)); + + // Verify that ad is correctly put into container view. + FluidAdManagerBannerAd spy = spy(fluidAd); + ScrollView mockContainer = mock(ScrollView.class); + doReturn(mockContainer).when(spy).createContainerView(); + assertEquals(spy.getPlatformView().getView(), mockAdView); + verify(mockContainer).setClipChildren(false); + verify(mockContainer).setVerticalScrollBarEnabled(false); + verify(mockContainer).setHorizontalScrollBarEnabled(false); + + // Height changed callback. + ArgumentCaptor layoutChangeCaptor = + ArgumentCaptor.forClass(OnLayoutChangeListener.class); + verify(mockAdView).addOnLayoutChangeListener(layoutChangeCaptor.capture()); + doReturn(10).when(mockAdView).getMeasuredHeight(); + + layoutChangeCaptor.getValue().onLayoutChange(mockAdView, 0, 0, 10, 10, 0, 0, 0, 0); + verify(mockManager).onFluidAdHeightChanged(eq(1), eq(10)); + } + + @Test + public void appEventListener() { + doAnswer( + new Answer() { + @Override + public Object answer(InvocationOnMock invocation) throws Throwable { + AppEventListener listener = invocation.getArgument(0); + listener.onAppEvent("appEvent", "data"); + return null; + } + }) + .when(mockAdView) + .setAppEventListener(any(AppEventListener.class)); + + fluidAd.load(); + + verify(mockManager).onAppEvent(eq(1), eq("appEvent"), eq("data")); + } + + @Test + public void dispose() { + fluidAd.load(); + + FluidAdManagerBannerAd spy = spy(fluidAd); + ScrollView mockContainer = mock(ScrollView.class); + doReturn(mockContainer).when(spy).createContainerView(); + + assertEquals(spy.getPlatformView().getView(), mockAdView); + PlatformView platformView = spy.getPlatformView(); + assertNotNull(platformView); + + spy.dispose(); + verify(mockAdView).destroy(); + assertNull(spy.getPlatformView()); + // Check that the platform view still retains a reference to the view until + // dispose is called on it. + assertNotNull(platformView.getView()); + platformView.dispose(); + assertNull(platformView.getView()); + } +} diff --git a/mih_ui/android/build/ios/SourcePackages/google_mobile_ads-8.0.0/android/src/test/java/io/flutter/plugins/googlemobileads/FlutterAdManagerAdRequestTest.java b/mih_ui/android/build/ios/SourcePackages/google_mobile_ads-8.0.0/android/src/test/java/io/flutter/plugins/googlemobileads/FlutterAdManagerAdRequestTest.java new file mode 100644 index 00000000..72ced72d --- /dev/null +++ b/mih_ui/android/build/ios/SourcePackages/google_mobile_ads-8.0.0/android/src/test/java/io/flutter/plugins/googlemobileads/FlutterAdManagerAdRequestTest.java @@ -0,0 +1,111 @@ +// Copyright 2021 Google LLC +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// https://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +package io.flutter.plugins.googlemobileads; + +import static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertFalse; +import static org.junit.Assert.assertNull; +import static org.junit.Assert.assertTrue; +import static org.mockito.ArgumentMatchers.eq; +import static org.mockito.Mockito.doReturn; +import static org.mockito.Mockito.mock; + +import android.os.Bundle; +import com.google.ads.mediation.admob.AdMobAdapter; +import com.google.android.gms.ads.admanager.AdManagerAdRequest; +import io.flutter.plugins.googlemobileads.FlutterAdManagerAdRequest.Builder; +import java.util.ArrayList; +import java.util.Collections; +import java.util.List; +import org.junit.Test; +import org.junit.runner.RunWith; +import org.robolectric.RobolectricTestRunner; + +/** Tests for {@link FlutterAdManagerAdRequest}. */ +@RunWith(RobolectricTestRunner.class) +public class FlutterAdManagerAdRequestTest { + + @Test + public void testAsAdRequest_noParams() { + FlutterAdManagerAdRequest flutterAdRequest = new Builder().build(); + AdManagerAdRequest adRequest = flutterAdRequest.asAdManagerAdRequest("test-ad-unit"); + assertNull(adRequest.getContentUrl()); + assertTrue(adRequest.getNeighboringContentUrls().isEmpty()); + assertTrue(adRequest.getKeywords().isEmpty()); + assertTrue(adRequest.getCustomTargeting().isEmpty()); + assertNull(adRequest.getPublisherProvidedId()); + assertNull(adRequest.getNetworkExtrasBundle(AdMobAdapter.class)); + } + + @Test + public void testAsAdRequest_allParams() { + MediationNetworkExtrasProvider provider = mock(MediationNetworkExtrasProvider.class); + Bundle bundle = new Bundle(); + bundle.putString("npa", "0"); + doReturn(Collections.singletonMap(AdMobAdapter.class, bundle)) + .when(provider) + .getMediationExtras(eq("test-ad-unit"), eq("identifier")); + + Builder builder = new Builder(); + builder.setKeywords(Collections.singletonList("keyword")); + builder.setContentUrl("content-url"); + builder.setNeighboringContentUrls(Collections.singletonList("neighbor")); + builder.setHttpTimeoutMillis(100); + builder.setNonPersonalizedAds(true); + builder.setMediationNetworkExtrasIdentifier("identifier"); + builder.setMediationNetworkExtrasProvider(provider); + builder.setCustomTargeting(Collections.singletonMap("targetingKey", "targetingValue")); + List targetingList = new ArrayList<>(); + targetingList.add("targetingValue1"); + targetingList.add("targetingValue2"); + + builder.setCustomTargetingLists(Collections.singletonMap("targetingKey", targetingList)); + builder.setPublisherProvidedId("pubProvidedId"); + builder.build(); + + AdManagerAdRequest adRequest = builder.build().asAdManagerAdRequest("test-ad-unit"); + + assertEquals(adRequest.getKeywords(), Collections.singleton("keyword")); + assertEquals(adRequest.getContentUrl(), "content-url"); + assertEquals(adRequest.getNeighboringContentUrls(), Collections.singletonList("neighbor")); + // Previous value of "npa" should get overridden. + assertEquals(adRequest.getNetworkExtrasBundle(AdMobAdapter.class).get("npa"), "1"); + assertEquals(adRequest.getPublisherProvidedId(), "pubProvidedId"); + assertFalse(adRequest.getCustomTargeting().isEmpty()); + // If custom targeting keys match, the values are overwritten. + assertEquals( + adRequest.getCustomTargeting().get("targetingKey"), "targetingValue1,targetingValue2"); + } + + @Test + public void testAsAdRequestMediationNetworkExtras() { + MediationNetworkExtrasProvider provider = mock(MediationNetworkExtrasProvider.class); + Bundle bundle = new Bundle(); + bundle.putString("key", "value"); + doReturn(Collections.singletonMap(AdMobAdapter.class, bundle)) + .when(provider) + .getMediationExtras(eq("test-ad-unit"), eq("identifier")); + + Builder builder = new Builder(); + builder + .setMediationNetworkExtrasIdentifier("identifier") + .setMediationNetworkExtrasProvider(provider) + .setNonPersonalizedAds(true); + + AdManagerAdRequest adRequest = builder.build().asAdManagerAdRequest("test-ad-unit"); + assertEquals(adRequest.getNetworkExtrasBundle(AdMobAdapter.class).get("key"), "value"); + assertEquals(adRequest.getNetworkExtrasBundle(AdMobAdapter.class).get("npa"), "1"); + } +} diff --git a/mih_ui/android/build/ios/SourcePackages/google_mobile_ads-8.0.0/android/src/test/java/io/flutter/plugins/googlemobileads/FlutterAdManagerBannerAdTest.java b/mih_ui/android/build/ios/SourcePackages/google_mobile_ads-8.0.0/android/src/test/java/io/flutter/plugins/googlemobileads/FlutterAdManagerBannerAdTest.java new file mode 100644 index 00000000..afd4fb9c --- /dev/null +++ b/mih_ui/android/build/ios/SourcePackages/google_mobile_ads-8.0.0/android/src/test/java/io/flutter/plugins/googlemobileads/FlutterAdManagerBannerAdTest.java @@ -0,0 +1,184 @@ +// Copyright 2021 Google LLC +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// https://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +package io.flutter.plugins.googlemobileads; + +import static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertNotNull; +import static org.junit.Assert.assertNull; +import static org.mockito.ArgumentMatchers.any; +import static org.mockito.ArgumentMatchers.anyString; +import static org.mockito.ArgumentMatchers.eq; +import static org.mockito.Mockito.doAnswer; +import static org.mockito.Mockito.doReturn; +import static org.mockito.Mockito.mock; +import static org.mockito.Mockito.spy; +import static org.mockito.Mockito.verify; +import static org.mockito.Mockito.when; + +import android.app.Activity; +import com.google.android.gms.ads.AdListener; +import com.google.android.gms.ads.AdSize; +import com.google.android.gms.ads.LoadAdError; +import com.google.android.gms.ads.ResponseInfo; +import com.google.android.gms.ads.admanager.AdManagerAdRequest; +import com.google.android.gms.ads.admanager.AdManagerAdView; +import com.google.android.gms.ads.admanager.AppEventListener; +import io.flutter.plugin.common.MethodChannel; +import io.flutter.plugin.platform.PlatformView; +import io.flutter.plugins.googlemobileads.FlutterAd.FlutterLoadAdError; +import java.util.ArrayList; +import java.util.List; +import org.junit.Before; +import org.junit.Test; +import org.junit.runner.RunWith; +import org.mockito.invocation.InvocationOnMock; +import org.mockito.stubbing.Answer; +import org.robolectric.RobolectricTestRunner; + +/** Tests for {@link FlutterAdManagerBannerAd}. */ +@RunWith(RobolectricTestRunner.class) +public class FlutterAdManagerBannerAdTest { + + private AdInstanceManager mockManager; + private AdManagerAdRequest mockAdRequest; + private AdSize adSize; + private AdManagerAdView mockAdView; + + // The system under test. + private FlutterAdManagerBannerAd flutterBannerAd; + + @Before + public void setup() { + // Setup mock dependencies for flutterBannerAd. + mockManager = spy(new AdInstanceManager(mock(MethodChannel.class))); + doReturn(mock(Activity.class)).when(mockManager).getActivity(); + FlutterAdManagerAdRequest mockFlutterAdRequest = mock(FlutterAdManagerAdRequest.class); + mockAdRequest = mock(AdManagerAdRequest.class); + FlutterAdSize mockFlutterAdSize = mock(FlutterAdSize.class); + adSize = new AdSize(1, 2); + when(mockFlutterAdRequest.asAdManagerAdRequest(anyString())).thenReturn(mockAdRequest); + when(mockFlutterAdSize.getAdSize()).thenReturn(adSize); + List sizes = new ArrayList<>(); + sizes.add(mockFlutterAdSize); + BannerAdCreator bannerAdCreator = mock(BannerAdCreator.class); + mockAdView = mock(AdManagerAdView.class); + doReturn(mockAdView).when(bannerAdCreator).createAdManagerAdView(); + flutterBannerAd = + new FlutterAdManagerBannerAd( + 1, mockManager, "testId", sizes, mockFlutterAdRequest, bannerAdCreator); + } + + @Test + public void failedToLoad() { + final LoadAdError loadError = mock(LoadAdError.class); + ResponseInfo responseInfo = mock(ResponseInfo.class); + doReturn("id").when(responseInfo).getResponseId(); + doReturn("className").when(responseInfo).getMediationAdapterClassName(); + doReturn(1).when(loadError).getCode(); + doReturn("2").when(loadError).getDomain(); + doReturn("3").when(loadError).getMessage(); + doReturn(null).when(loadError).getResponseInfo(); + doAnswer( + new Answer() { + @Override + public Object answer(InvocationOnMock invocation) throws Throwable { + AdListener listener = invocation.getArgument(0); + listener.onAdFailedToLoad(loadError); + return null; + } + }) + .when(mockAdView) + .setAdListener(any(AdListener.class)); + + flutterBannerAd.load(); + verify(mockAdView).loadAd(eq(mockAdRequest)); + verify(mockAdView).setAdListener(any(AdListener.class)); + verify(mockAdView).setAppEventListener(any(AppEventListener.class)); + verify(mockAdView).setAdUnitId(eq("testId")); + verify(mockAdView).setAdSizes(adSize); + FlutterLoadAdError expectedError = new FlutterLoadAdError(loadError); + verify(mockManager).onAdFailedToLoad(eq(1), eq(expectedError)); + } + + @Test + public void loadWithListenerCallbacks() { + doAnswer( + new Answer() { + @Override + public Object answer(InvocationOnMock invocation) throws Throwable { + AdListener listener = invocation.getArgument(0); + listener.onAdLoaded(); + listener.onAdImpression(); + listener.onAdClosed(); + listener.onAdOpened(); + listener.onAdClicked(); + return null; + } + }) + .when(mockAdView) + .setAdListener(any(AdListener.class)); + final ResponseInfo responseInfo = mock(ResponseInfo.class); + doReturn(responseInfo).when(mockAdView).getResponseInfo(); + flutterBannerAd.load(); + + verify(mockAdView).loadAd(eq(mockAdRequest)); + verify(mockAdView).setAdListener(any(AdListener.class)); + verify(mockAdView).setAdUnitId(eq("testId")); + verify(mockAdView).setAdSizes(adSize); + verify(mockManager).onAdLoaded(eq(1), eq(responseInfo)); + verify(mockManager).onAdImpression(eq(1)); + verify(mockManager).onAdClosed(eq(1)); + verify(mockManager).onAdOpened(eq(1)); + verify(mockManager).onAdClicked(eq(1)); + assertEquals(flutterBannerAd.getPlatformView().getView(), mockAdView); + } + + @Test + public void appEventListener() { + doAnswer( + new Answer() { + @Override + public Object answer(InvocationOnMock invocation) throws Throwable { + AppEventListener listener = invocation.getArgument(0); + listener.onAppEvent("appEvent", "data"); + return null; + } + }) + .when(mockAdView) + .setAppEventListener(any(AppEventListener.class)); + + flutterBannerAd.load(); + + verify(mockManager).onAppEvent(eq(1), eq("appEvent"), eq("data")); + } + + @Test + public void dispose() { + flutterBannerAd.load(); + + assertEquals(flutterBannerAd.getPlatformView().getView(), mockAdView); + PlatformView platformView = flutterBannerAd.getPlatformView(); + assertNotNull(platformView); + + flutterBannerAd.dispose(); + verify(mockAdView).destroy(); + assertNull(flutterBannerAd.getPlatformView()); + // Check that the platform view still retains a reference to the view until + // dispose is called on it. + assertNotNull(platformView.getView()); + platformView.dispose(); + assertNull(platformView.getView()); + } +} diff --git a/mih_ui/android/build/ios/SourcePackages/google_mobile_ads-8.0.0/android/src/test/java/io/flutter/plugins/googlemobileads/FlutterAdManagerInterstitialAdTest.java b/mih_ui/android/build/ios/SourcePackages/google_mobile_ads-8.0.0/android/src/test/java/io/flutter/plugins/googlemobileads/FlutterAdManagerInterstitialAdTest.java new file mode 100644 index 00000000..e6b4cb03 --- /dev/null +++ b/mih_ui/android/build/ios/SourcePackages/google_mobile_ads-8.0.0/android/src/test/java/io/flutter/plugins/googlemobileads/FlutterAdManagerInterstitialAdTest.java @@ -0,0 +1,284 @@ +// Copyright 2021 Google LLC +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// https://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +package io.flutter.plugins.googlemobileads; + +import static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertNull; +import static org.mockito.ArgumentCaptor.forClass; +import static org.mockito.ArgumentMatchers.any; +import static org.mockito.ArgumentMatchers.anyString; +import static org.mockito.ArgumentMatchers.eq; +import static org.mockito.Mockito.doAnswer; +import static org.mockito.Mockito.doReturn; +import static org.mockito.Mockito.mock; +import static org.mockito.Mockito.spy; +import static org.mockito.Mockito.verify; +import static org.mockito.Mockito.when; + +import android.app.Activity; +import com.google.android.gms.ads.AdError; +import com.google.android.gms.ads.AdValue; +import com.google.android.gms.ads.FullScreenContentCallback; +import com.google.android.gms.ads.LoadAdError; +import com.google.android.gms.ads.ResponseInfo; +import com.google.android.gms.ads.admanager.AdManagerAdRequest; +import com.google.android.gms.ads.admanager.AdManagerInterstitialAd; +import com.google.android.gms.ads.admanager.AdManagerInterstitialAdLoadCallback; +import com.google.android.gms.ads.admanager.AppEventListener; +import io.flutter.plugin.common.MethodChannel; +import io.flutter.plugins.googlemobileads.FlutterAd.FlutterLoadAdError; +import org.junit.Before; +import org.junit.Test; +import org.junit.runner.RunWith; +import org.mockito.ArgumentCaptor; +import org.mockito.invocation.InvocationOnMock; +import org.mockito.stubbing.Answer; +import org.robolectric.RobolectricTestRunner; + +/** Tests for {@link FlutterAdManagerInterstitialAd}. */ +@RunWith(RobolectricTestRunner.class) +public class FlutterAdManagerInterstitialAdTest { + + private AdInstanceManager mockManager; + private FlutterAdLoader mockFlutterAdLoader; + private AdManagerAdRequest mockRequest; + // The system under test. + private FlutterAdManagerInterstitialAd flutterAdManagerInterstitialAd; + + @Before + public void setup() { + mockManager = spy(new AdInstanceManager(mock(MethodChannel.class))); + doReturn(mock(Activity.class)).when(mockManager).getActivity(); + final FlutterAdManagerAdRequest mockFlutterRequest = mock(FlutterAdManagerAdRequest.class); + mockRequest = mock(AdManagerAdRequest.class); + mockFlutterAdLoader = mock(FlutterAdLoader.class); + when(mockFlutterRequest.asAdManagerAdRequest(anyString())).thenReturn(mockRequest); + flutterAdManagerInterstitialAd = + new FlutterAdManagerInterstitialAd( + 1, mockManager, "testId", mockFlutterRequest, mockFlutterAdLoader); + } + + @Test + public void loadAdManagerInterstitialAd_failedToLoad() { + final LoadAdError loadAdError = mock(LoadAdError.class); + doReturn(1).when(loadAdError).getCode(); + doReturn("2").when(loadAdError).getDomain(); + doReturn("3").when(loadAdError).getMessage(); + doReturn(null).when(loadAdError).getResponseInfo(); + doAnswer( + new Answer() { + @Override + public Object answer(InvocationOnMock invocation) throws Throwable { + AdManagerInterstitialAdLoadCallback adLoadCallback = invocation.getArgument(2); + // Pass back null for ad + adLoadCallback.onAdFailedToLoad(loadAdError); + return null; + } + }) + .when(mockFlutterAdLoader) + .loadAdManagerInterstitial( + anyString(), + any(AdManagerAdRequest.class), + any(AdManagerInterstitialAdLoadCallback.class)); + + flutterAdManagerInterstitialAd.load(); + + verify(mockFlutterAdLoader) + .loadAdManagerInterstitial( + eq("testId"), eq(mockRequest), any(AdManagerInterstitialAdLoadCallback.class)); + + FlutterLoadAdError flutterLoadAdError = new FlutterLoadAdError(loadAdError); + verify(mockManager).onAdFailedToLoad(eq(1), eq(flutterLoadAdError)); + } + + @Test + public void loadAdManagerInterstitialAd_showSuccess() { + final AdManagerInterstitialAd mockAdManagerAd = mock(AdManagerInterstitialAd.class); + doAnswer( + new Answer() { + @Override + public Object answer(InvocationOnMock invocation) throws Throwable { + AdManagerInterstitialAdLoadCallback adLoadCallback = invocation.getArgument(2); + // Pass back null for ad + adLoadCallback.onAdLoaded(mockAdManagerAd); + return null; + } + }) + .when(mockFlutterAdLoader) + .loadAdManagerInterstitial( + anyString(), + any(AdManagerAdRequest.class), + any(AdManagerInterstitialAdLoadCallback.class)); + + final ResponseInfo responseInfo = mock(ResponseInfo.class); + doReturn(responseInfo).when(mockAdManagerAd).getResponseInfo(); + + final AdValue adValue = mock(AdValue.class); + doReturn(1).when(adValue).getPrecisionType(); + doReturn("Dollars").when(adValue).getCurrencyCode(); + doReturn(1000L).when(adValue).getValueMicros(); + doAnswer( + new Answer() { + @Override + public Object answer(InvocationOnMock invocation) { + FlutterPaidEventListener listener = invocation.getArgument(0); + listener.onPaidEvent(adValue); + return null; + } + }) + .when(mockAdManagerAd) + .setOnPaidEventListener(any(FlutterPaidEventListener.class)); + + flutterAdManagerInterstitialAd.load(); + + verify(mockFlutterAdLoader) + .loadAdManagerInterstitial( + eq("testId"), eq(mockRequest), any(AdManagerInterstitialAdLoadCallback.class)); + + verify(mockManager).onAdLoaded(1, responseInfo); + verify(mockAdManagerAd).setOnPaidEventListener(any(FlutterPaidEventListener.class)); + final ArgumentCaptor adValueCaptor = forClass(FlutterAdValue.class); + verify(mockManager).onPaidEvent(eq(flutterAdManagerInterstitialAd), adValueCaptor.capture()); + assertEquals(adValueCaptor.getValue().currencyCode, "Dollars"); + assertEquals(adValueCaptor.getValue().precisionType, 1); + assertEquals(adValueCaptor.getValue().valueMicros, 1000L); + + // Setup mocks for show(). + doAnswer( + new Answer() { + @Override + public Object answer(InvocationOnMock invocation) throws Throwable { + FullScreenContentCallback callback = invocation.getArgument(0); + callback.onAdShowedFullScreenContent(); + callback.onAdImpression(); + callback.onAdDismissedFullScreenContent(); + callback.onAdClicked(); + return null; + } + }) + .when(mockAdManagerAd) + .setFullScreenContentCallback(any(FullScreenContentCallback.class)); + + flutterAdManagerInterstitialAd.show(); + verify(mockAdManagerAd).setFullScreenContentCallback(any(FullScreenContentCallback.class)); + verify(mockAdManagerAd).show(mockManager.getActivity()); + verify(mockAdManagerAd).setAppEventListener(any(AppEventListener.class)); + verify(mockManager).onAdShowedFullScreenContent(eq(1)); + verify(mockManager).onAdImpression(eq(1)); + verify(mockManager).onAdClicked(eq(1)); + verify(mockManager).onAdDismissedFullScreenContent(eq(1)); + assertNull(flutterAdManagerInterstitialAd.getPlatformView()); + } + + @Test + public void loadAdManagerInterstitialAd_setImmersiveMode() { + final AdManagerInterstitialAd mockAdManagerAd = mock(AdManagerInterstitialAd.class); + doAnswer( + new Answer() { + @Override + public Object answer(InvocationOnMock invocation) throws Throwable { + AdManagerInterstitialAdLoadCallback adLoadCallback = invocation.getArgument(2); + adLoadCallback.onAdLoaded(mockAdManagerAd); + // Pass back null for ad + return null; + } + }) + .when(mockFlutterAdLoader) + .loadAdManagerInterstitial( + anyString(), + any(AdManagerAdRequest.class), + any(AdManagerInterstitialAdLoadCallback.class)); + + flutterAdManagerInterstitialAd.load(); + flutterAdManagerInterstitialAd.setImmersiveMode(true); + verify(mockAdManagerAd).setImmersiveMode(true); + } + + @Test + public void loadAdManagerInterstitialAd_showFailure() { + final AdManagerInterstitialAd mockAdManagerAd = mock(AdManagerInterstitialAd.class); + doAnswer( + new Answer() { + @Override + public Object answer(InvocationOnMock invocation) throws Throwable { + AdManagerInterstitialAdLoadCallback adLoadCallback = invocation.getArgument(2); + // Pass back null for ad + adLoadCallback.onAdLoaded(mockAdManagerAd); + return null; + } + }) + .when(mockFlutterAdLoader) + .loadAdManagerInterstitial( + anyString(), + any(AdManagerAdRequest.class), + any(AdManagerInterstitialAdLoadCallback.class)); + doReturn(mock(ResponseInfo.class)).when(mockAdManagerAd).getResponseInfo(); + flutterAdManagerInterstitialAd.load(); + final AdError adError = new AdError(-1, "test", "error"); + doAnswer( + new Answer() { + @Override + public Object answer(InvocationOnMock invocation) throws Throwable { + FullScreenContentCallback callback = invocation.getArgument(0); + callback.onAdFailedToShowFullScreenContent(adError); + return null; + } + }) + .when(mockAdManagerAd) + .setFullScreenContentCallback(any(FullScreenContentCallback.class)); + + flutterAdManagerInterstitialAd.show(); + verify(mockManager).onFailedToShowFullScreenContent(eq(1), eq(adError)); + } + + @Test + public void loadAdManagerInterstitialAd_appEvent() { + final AdManagerInterstitialAd mockAdManagerAd = mock(AdManagerInterstitialAd.class); + doAnswer( + new Answer() { + @Override + public Object answer(InvocationOnMock invocation) throws Throwable { + AdManagerInterstitialAdLoadCallback adLoadCallback = invocation.getArgument(2); + // Pass back null for ad + adLoadCallback.onAdLoaded(mockAdManagerAd); + return null; + } + }) + .when(mockFlutterAdLoader) + .loadAdManagerInterstitial( + anyString(), + any(AdManagerAdRequest.class), + any(AdManagerInterstitialAdLoadCallback.class)); + + doReturn(mock(ResponseInfo.class)).when(mockAdManagerAd).getResponseInfo(); + + doAnswer( + new Answer() { + @Override + public Object answer(InvocationOnMock invocation) throws Throwable { + AppEventListener listener = invocation.getArgument(0); + listener.onAppEvent("test", "data"); + return null; + } + }) + .when(mockAdManagerAd) + .setAppEventListener(any(AppEventListener.class)); + + flutterAdManagerInterstitialAd.load(); + + verify(mockAdManagerAd).setAppEventListener(any(AppEventListener.class)); + verify(mockManager).onAppEvent(eq(1), eq("test"), eq("data")); + } +} diff --git a/mih_ui/android/build/ios/SourcePackages/google_mobile_ads-8.0.0/android/src/test/java/io/flutter/plugins/googlemobileads/FlutterAdRequestTest.java b/mih_ui/android/build/ios/SourcePackages/google_mobile_ads-8.0.0/android/src/test/java/io/flutter/plugins/googlemobileads/FlutterAdRequestTest.java new file mode 100644 index 00000000..b826b0a3 --- /dev/null +++ b/mih_ui/android/build/ios/SourcePackages/google_mobile_ads-8.0.0/android/src/test/java/io/flutter/plugins/googlemobileads/FlutterAdRequestTest.java @@ -0,0 +1,96 @@ +// Copyright 2021 Google LLC +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// https://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +package io.flutter.plugins.googlemobileads; + +import static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertNull; +import static org.junit.Assert.assertTrue; +import static org.mockito.ArgumentMatchers.eq; +import static org.mockito.Mockito.doReturn; +import static org.mockito.Mockito.mock; + +import android.os.Bundle; +import com.google.ads.mediation.admob.AdMobAdapter; +import com.google.android.gms.ads.AdRequest; +import io.flutter.plugins.googlemobileads.FlutterAdRequest.Builder; +import java.util.Collections; +import org.junit.Test; +import org.junit.runner.RunWith; +import org.robolectric.RobolectricTestRunner; + +/** Tests for {@link FlutterAdRequest}. */ +@RunWith(RobolectricTestRunner.class) +public class FlutterAdRequestTest { + + @Test + public void testAsAdRequest_noParams() { + FlutterAdRequest flutterAdRequest = new Builder().build(); + AdRequest adRequest = flutterAdRequest.asAdRequest("test-ad-unit"); + assertNull(adRequest.getContentUrl()); + assertTrue(adRequest.getNeighboringContentUrls().isEmpty()); + assertTrue(adRequest.getKeywords().isEmpty()); + assertNull(adRequest.getNetworkExtrasBundle(AdMobAdapter.class)); + } + + @Test + public void testAsAdRequest_allParams() { + MediationNetworkExtrasProvider provider = mock(MediationNetworkExtrasProvider.class); + Bundle bundle = new Bundle(); + bundle.putString("npa", "0"); + doReturn(Collections.singletonMap(AdMobAdapter.class, bundle)) + .when(provider) + .getMediationExtras(eq("test-ad-unit"), eq("identifier")); + + FlutterAdRequest flutterAdRequest = + new Builder() + .setKeywords(Collections.singletonList("keyword")) + .setContentUrl("content-url") + .setNeighboringContentUrls(Collections.singletonList("neighbor")) + .setHttpTimeoutMillis(100) + .setNonPersonalizedAds(true) + .setMediationNetworkExtrasIdentifier("identifier") + .setMediationNetworkExtrasProvider(provider) + .build(); + + AdRequest adRequest = flutterAdRequest.asAdRequest("test-ad-unit"); + + assertEquals(adRequest.getKeywords(), Collections.singleton("keyword")); + assertEquals(adRequest.getContentUrl(), "content-url"); + assertEquals(adRequest.getNeighboringContentUrls(), Collections.singletonList("neighbor")); + // Previous value of "npa" should get overridden. + assertEquals(adRequest.getNetworkExtrasBundle(AdMobAdapter.class).get("npa"), "1"); + } + + @Test + public void testAsAdRequestMediationNetworkExtras() { + MediationNetworkExtrasProvider provider = mock(MediationNetworkExtrasProvider.class); + Bundle bundle = new Bundle(); + bundle.putString("key", "value"); + doReturn(Collections.singletonMap(AdMobAdapter.class, bundle)) + .when(provider) + .getMediationExtras(eq("test-ad-unit"), eq("identifier")); + + FlutterAdRequest flutterAdRequest = + new Builder() + .setMediationNetworkExtrasIdentifier("identifier") + .setMediationNetworkExtrasProvider(provider) + .setNonPersonalizedAds(true) + .build(); + + AdRequest adRequest = flutterAdRequest.asAdRequest("test-ad-unit"); + assertEquals(adRequest.getNetworkExtrasBundle(AdMobAdapter.class).get("key"), "value"); + assertEquals(adRequest.getNetworkExtrasBundle(AdMobAdapter.class).get("npa"), "1"); + } +} diff --git a/mih_ui/android/build/ios/SourcePackages/google_mobile_ads-8.0.0/android/src/test/java/io/flutter/plugins/googlemobileads/FlutterAppOpenAdTest.java b/mih_ui/android/build/ios/SourcePackages/google_mobile_ads-8.0.0/android/src/test/java/io/flutter/plugins/googlemobileads/FlutterAppOpenAdTest.java new file mode 100644 index 00000000..6f924dde --- /dev/null +++ b/mih_ui/android/build/ios/SourcePackages/google_mobile_ads-8.0.0/android/src/test/java/io/flutter/plugins/googlemobileads/FlutterAppOpenAdTest.java @@ -0,0 +1,458 @@ +// Copyright 2021 Google LLC +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// https://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +package io.flutter.plugins.googlemobileads; + +import static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertNull; +import static org.mockito.ArgumentCaptor.forClass; +import static org.mockito.ArgumentMatchers.any; +import static org.mockito.ArgumentMatchers.anyString; +import static org.mockito.ArgumentMatchers.eq; +import static org.mockito.Mockito.doAnswer; +import static org.mockito.Mockito.doReturn; +import static org.mockito.Mockito.mock; +import static org.mockito.Mockito.spy; +import static org.mockito.Mockito.verify; +import static org.mockito.Mockito.when; + +import android.app.Activity; +import com.google.android.gms.ads.AdError; +import com.google.android.gms.ads.AdRequest; +import com.google.android.gms.ads.AdValue; +import com.google.android.gms.ads.FullScreenContentCallback; +import com.google.android.gms.ads.LoadAdError; +import com.google.android.gms.ads.ResponseInfo; +import com.google.android.gms.ads.admanager.AdManagerAdRequest; +import com.google.android.gms.ads.appopen.AppOpenAd; +import com.google.android.gms.ads.appopen.AppOpenAd.AppOpenAdLoadCallback; +import io.flutter.plugin.common.MethodChannel; +import io.flutter.plugins.googlemobileads.FlutterAd.FlutterLoadAdError; +import org.junit.Before; +import org.junit.Test; +import org.junit.runner.RunWith; +import org.mockito.ArgumentCaptor; +import org.mockito.invocation.InvocationOnMock; +import org.mockito.stubbing.Answer; +import org.robolectric.RobolectricTestRunner; + +/** Tests for {@link FlutterAppOpenAd}. */ +@RunWith(RobolectricTestRunner.class) +public class FlutterAppOpenAdTest { + + private FlutterAdLoader mockFlutterAdLoader; + private AdInstanceManager mockManager; + private AdManagerAdRequest mockAdManagerAdRequest; + private AdRequest mockAdRequest; + private AppOpenAd mockAd; + + // The system under test. + private FlutterAppOpenAd flutterAppOpenAd; + + @Before + public void setup() { + mockManager = spy(new AdInstanceManager(mock(MethodChannel.class))); + doReturn(mock(Activity.class)).when(mockManager).getActivity(); + mockFlutterAdLoader = mock(FlutterAdLoader.class); + mockAd = mock(AppOpenAd.class); + } + + private void setupAdmobMocks() { + FlutterAdRequest mockFlutterAdRequest = mock(FlutterAdRequest.class); + mockAdRequest = mock(AdRequest.class); + when(mockFlutterAdRequest.asAdRequest(anyString())).thenReturn(mockAdRequest); + flutterAppOpenAd = + new FlutterAppOpenAd( + 1, mockManager, "testId", mockFlutterAdRequest, null, mockFlutterAdLoader); + } + + private void setupAdManagerMocks() { + FlutterAdManagerAdRequest mockAdManagerFlutterRequest = mock(FlutterAdManagerAdRequest.class); + mockAdManagerAdRequest = mock(AdManagerAdRequest.class); + when(mockAdManagerFlutterRequest.asAdManagerAdRequest(anyString())) + .thenReturn(mockAdManagerAdRequest); + flutterAppOpenAd = + new FlutterAppOpenAd( + 1, mockManager, "testId", null, mockAdManagerFlutterRequest, mockFlutterAdLoader); + } + + @Test + public void loadAdManager_failedToLoad() { + setupAdManagerMocks(); + final LoadAdError loadAdError = mock(LoadAdError.class); + doReturn(1).when(loadAdError).getCode(); + doReturn("2").when(loadAdError).getDomain(); + doReturn("3").when(loadAdError).getMessage(); + doReturn(null).when(loadAdError).getResponseInfo(); + doAnswer( + new Answer() { + @Override + public Object answer(InvocationOnMock invocation) throws Throwable { + AppOpenAdLoadCallback adLoadCallback = invocation.getArgument(2); + // Pass back null for ad + adLoadCallback.onAdFailedToLoad(loadAdError); + return null; + } + }) + .when(mockFlutterAdLoader) + .loadAdManagerAppOpen( + anyString(), any(AdManagerAdRequest.class), any(AppOpenAdLoadCallback.class)); + + flutterAppOpenAd.load(); + + verify(mockFlutterAdLoader) + .loadAdManagerAppOpen( + eq("testId"), eq(mockAdManagerAdRequest), any(AppOpenAdLoadCallback.class)); + + FlutterLoadAdError expectedError = new FlutterLoadAdError(loadAdError); + verify(mockManager).onAdFailedToLoad(eq(1), eq(expectedError)); + } + + @Test + public void loadAdmob_failedToLoad() { + setupAdmobMocks(); + final LoadAdError loadAdError = mock(LoadAdError.class); + doReturn(1).when(loadAdError).getCode(); + doReturn("2").when(loadAdError).getDomain(); + doReturn("3").when(loadAdError).getMessage(); + doReturn(null).when(loadAdError).getResponseInfo(); + doAnswer( + new Answer() { + @Override + public Object answer(InvocationOnMock invocation) throws Throwable { + AppOpenAdLoadCallback adLoadCallback = invocation.getArgument(2); + // Pass back null for ad + adLoadCallback.onAdFailedToLoad(loadAdError); + return null; + } + }) + .when(mockFlutterAdLoader) + .loadAppOpen(anyString(), any(AdRequest.class), any(AppOpenAdLoadCallback.class)); + + flutterAppOpenAd.load(); + + verify(mockFlutterAdLoader) + .loadAppOpen(eq("testId"), eq(mockAdRequest), any(AppOpenAdLoadCallback.class)); + + FlutterLoadAdError expectedError = new FlutterLoadAdError(loadAdError); + verify(mockManager).onAdFailedToLoad(eq(1), eq(expectedError)); + } + + @Test + public void loadAdManager_success() { + // Setup mocks for loading. + setupAdManagerMocks(); + + final AppOpenAd mockAd = mock(AppOpenAd.class); + doAnswer( + new Answer() { + @Override + public Object answer(InvocationOnMock invocation) throws Throwable { + AppOpenAdLoadCallback adLoadCallback = invocation.getArgument(2); + // Pass back null for ad + adLoadCallback.onAdLoaded(mockAd); + return null; + } + }) + .when(mockFlutterAdLoader) + .loadAdManagerAppOpen( + anyString(), any(AdManagerAdRequest.class), any(AppOpenAdLoadCallback.class)); + final ResponseInfo responseInfo = mock(ResponseInfo.class); + doReturn(responseInfo).when(mockAd).getResponseInfo(); + + final AdValue adValue = mock(AdValue.class); + doReturn(1).when(adValue).getPrecisionType(); + doReturn("Dollars").when(adValue).getCurrencyCode(); + doReturn(1000L).when(adValue).getValueMicros(); + doAnswer( + new Answer() { + @Override + public Object answer(InvocationOnMock invocation) { + FlutterPaidEventListener listener = invocation.getArgument(0); + listener.onPaidEvent(adValue); + return null; + } + }) + .when(mockAd) + .setOnPaidEventListener(any(FlutterPaidEventListener.class)); + + // Load an ad and verify correct ad loader method is called. + flutterAppOpenAd.load(); + + verify(mockFlutterAdLoader) + .loadAdManagerAppOpen( + eq("testId"), eq(mockAdManagerAdRequest), any(AppOpenAdLoadCallback.class)); + + verify(mockManager).onAdLoaded(eq(1), eq(responseInfo)); + verify(mockAd).setOnPaidEventListener(any(FlutterPaidEventListener.class)); + final ArgumentCaptor adValueCaptor = forClass(FlutterAdValue.class); + verify(mockManager).onPaidEvent(eq(flutterAppOpenAd), adValueCaptor.capture()); + assertEquals(adValueCaptor.getValue().currencyCode, "Dollars"); + assertEquals(adValueCaptor.getValue().precisionType, 1); + assertEquals(adValueCaptor.getValue().valueMicros, 1000L); + } + + @Test + public void loadAdmob_success() { + // Setup mocks for loading. + setupAdmobMocks(); + + final AppOpenAd mockAd = mock(AppOpenAd.class); + doAnswer( + new Answer() { + @Override + public Object answer(InvocationOnMock invocation) throws Throwable { + AppOpenAdLoadCallback adLoadCallback = invocation.getArgument(2); + // Pass back null for ad + adLoadCallback.onAdLoaded(mockAd); + return null; + } + }) + .when(mockFlutterAdLoader) + .loadAppOpen(anyString(), any(AdRequest.class), any(AppOpenAdLoadCallback.class)); + final ResponseInfo responseInfo = mock(ResponseInfo.class); + doReturn(responseInfo).when(mockAd).getResponseInfo(); + + final AdValue adValue = mock(AdValue.class); + doReturn(1).when(adValue).getPrecisionType(); + doReturn("Dollars").when(adValue).getCurrencyCode(); + doReturn(1000L).when(adValue).getValueMicros(); + doAnswer( + new Answer() { + @Override + public Object answer(InvocationOnMock invocation) { + FlutterPaidEventListener listener = invocation.getArgument(0); + listener.onPaidEvent(adValue); + return null; + } + }) + .when(mockAd) + .setOnPaidEventListener(any(FlutterPaidEventListener.class)); + + // Load an ad and verify correct ad loader method is called. + flutterAppOpenAd.load(); + + verify(mockFlutterAdLoader) + .loadAppOpen(eq("testId"), eq(mockAdRequest), any(AppOpenAdLoadCallback.class)); + + verify(mockManager).onAdLoaded(eq(1), eq(responseInfo)); + verify(mockAd).setOnPaidEventListener(any(FlutterPaidEventListener.class)); + final ArgumentCaptor adValueCaptor = forClass(FlutterAdValue.class); + verify(mockManager).onPaidEvent(eq(flutterAppOpenAd), adValueCaptor.capture()); + assertEquals(adValueCaptor.getValue().currencyCode, "Dollars"); + assertEquals(adValueCaptor.getValue().precisionType, 1); + assertEquals(adValueCaptor.getValue().valueMicros, 1000L); + } + + /** Helper for loading an ad manager ad. */ + private void loadAdManagerAd() { + setupAdManagerMocks(); + doAnswer( + new Answer() { + @Override + public Object answer(InvocationOnMock invocation) throws Throwable { + AppOpenAdLoadCallback adLoadCallback = invocation.getArgument(2); + // Pass back null for ad + adLoadCallback.onAdLoaded(mockAd); + return null; + } + }) + .when(mockFlutterAdLoader) + .loadAdManagerAppOpen( + anyString(), any(AdManagerAdRequest.class), any(AppOpenAdLoadCallback.class)); + final ResponseInfo responseInfo = mock(ResponseInfo.class); + doReturn(responseInfo).when(mockAd).getResponseInfo(); + + // Load an ad and verify correct ad loader method is called. + flutterAppOpenAd.load(); + } + + /** Helper for loading an admob ad. */ + private void loadAdmobAd() { + // Setup mocks for loading. + setupAdmobMocks(); + + doAnswer( + new Answer() { + @Override + public Object answer(InvocationOnMock invocation) throws Throwable { + AppOpenAdLoadCallback adLoadCallback = invocation.getArgument(2); + // Pass back null for ad + adLoadCallback.onAdLoaded(mockAd); + return null; + } + }) + .when(mockFlutterAdLoader) + .loadAppOpen(anyString(), any(AdRequest.class), any(AppOpenAdLoadCallback.class)); + final ResponseInfo responseInfo = mock(ResponseInfo.class); + doReturn(responseInfo).when(mockAd).getResponseInfo(); + + flutterAppOpenAd.load(); + } + + @Test + public void loadAdManager_showSuccess() { + loadAdManagerAd(); + + // Setup mocks for show(). + final FullScreenContentCallback[] fullScreenContentCallback = new FullScreenContentCallback[1]; + doAnswer( + new Answer() { + @Override + public Object answer(InvocationOnMock invocation) throws Throwable { + fullScreenContentCallback[0] = invocation.getArgument(0); + return null; + } + }) + .when(mockAd) + .setFullScreenContentCallback(any(FullScreenContentCallback.class)); + + doAnswer( + new Answer() { + @Override + public Object answer(InvocationOnMock invocation) throws Throwable { + FullScreenContentCallback callback = fullScreenContentCallback[0]; + callback.onAdShowedFullScreenContent(); + callback.onAdImpression(); + callback.onAdClicked(); + callback.onAdDismissedFullScreenContent(); + return null; + } + }) + .when(mockAd) + .show(any(Activity.class)); + + // Show the ad and verify callbacks are set up properly. + flutterAppOpenAd.show(); + verify(mockAd).setFullScreenContentCallback(any(FullScreenContentCallback.class)); + verify(mockAd).show(eq(mockManager.getActivity())); + + verify(mockManager).onAdShowedFullScreenContent(eq(1)); + verify(mockManager).onAdImpression(eq(1)); + verify(mockManager).onAdClicked(eq(1)); + verify(mockManager).onAdDismissedFullScreenContent(eq(1)); + + assertNull(flutterAppOpenAd.getPlatformView()); + } + + @Test + public void loadAdmob_showSuccess() { + loadAdmobAd(); + // Setup mocks for show(). + final FullScreenContentCallback[] fullScreenContentCallback = new FullScreenContentCallback[1]; + doAnswer( + new Answer() { + @Override + public Object answer(InvocationOnMock invocation) throws Throwable { + fullScreenContentCallback[0] = invocation.getArgument(0); + return null; + } + }) + .when(mockAd) + .setFullScreenContentCallback(any(FullScreenContentCallback.class)); + + doAnswer( + new Answer() { + @Override + public Object answer(InvocationOnMock invocation) throws Throwable { + FullScreenContentCallback callback = fullScreenContentCallback[0]; + callback.onAdShowedFullScreenContent(); + callback.onAdImpression(); + callback.onAdDismissedFullScreenContent(); + ; + return null; + } + }) + .when(mockAd) + .show(any(Activity.class)); + + // Show the ad and verify callbacks are set up properly. + flutterAppOpenAd.show(); + verify(mockAd).setFullScreenContentCallback(any(FullScreenContentCallback.class)); + verify(mockAd).show(eq(mockManager.getActivity())); + + verify(mockManager).onAdShowedFullScreenContent(eq(1)); + verify(mockManager).onAdImpression(eq(1)); + verify(mockManager).onAdDismissedFullScreenContent(eq(1)); + + assertNull(flutterAppOpenAd.getPlatformView()); + } + + @Test + public void loadAdmob_failToShow() { + loadAdmobAd(); + + // Setup mocks for triggering fail to show callback. + final AdError adError = new AdError(0, "ad", "error"); + doAnswer( + new Answer() { + @Override + public Object answer(InvocationOnMock invocation) throws Throwable { + FullScreenContentCallback callback = invocation.getArgument(0); + callback.onAdFailedToShowFullScreenContent(adError); + return null; + } + }) + .when(mockAd) + .setFullScreenContentCallback(any(FullScreenContentCallback.class)); + + flutterAppOpenAd.show(); + verify(mockAd).setFullScreenContentCallback(any(FullScreenContentCallback.class)); + verify(mockManager).onFailedToShowFullScreenContent(eq(1), eq(adError)); + } + + @Test + public void loadAdManager_failToShow() { + loadAdManagerAd(); + + // Setup mocks for triggering fail to show callback. + final AdError adError = new AdError(0, "ad", "error"); + doAnswer( + new Answer() { + @Override + public Object answer(InvocationOnMock invocation) throws Throwable { + FullScreenContentCallback callback = invocation.getArgument(0); + callback.onAdFailedToShowFullScreenContent(adError); + return null; + } + }) + .when(mockAd) + .setFullScreenContentCallback(any(FullScreenContentCallback.class)); + + flutterAppOpenAd.show(); + verify(mockAd).setFullScreenContentCallback(any(FullScreenContentCallback.class)); + verify(mockManager).onFailedToShowFullScreenContent(eq(1), eq(adError)); + } + + @Test + public void setImmersiveMode() { + setupAdmobMocks(); + final AppOpenAd mockAd = mock(AppOpenAd.class); + doAnswer( + new Answer() { + @Override + public Object answer(InvocationOnMock invocation) throws Throwable { + AppOpenAdLoadCallback adLoadCallback = invocation.getArgument(2); + adLoadCallback.onAdLoaded(mockAd); + // Pass back null for ad + return null; + } + }) + .when(mockFlutterAdLoader) + .loadAppOpen(anyString(), any(AdRequest.class), any(AppOpenAdLoadCallback.class)); + flutterAppOpenAd.load(); + flutterAppOpenAd.setImmersiveMode(false); + verify(mockAd).setImmersiveMode(eq(false)); + } +} diff --git a/mih_ui/android/build/ios/SourcePackages/google_mobile_ads-8.0.0/android/src/test/java/io/flutter/plugins/googlemobileads/FlutterBannerAdTest.java b/mih_ui/android/build/ios/SourcePackages/google_mobile_ads-8.0.0/android/src/test/java/io/flutter/plugins/googlemobileads/FlutterBannerAdTest.java new file mode 100644 index 00000000..ff0c8cd3 --- /dev/null +++ b/mih_ui/android/build/ios/SourcePackages/google_mobile_ads-8.0.0/android/src/test/java/io/flutter/plugins/googlemobileads/FlutterBannerAdTest.java @@ -0,0 +1,182 @@ +// Copyright 2021 Google LLC +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// https://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +package io.flutter.plugins.googlemobileads; + +import static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertNotNull; +import static org.junit.Assert.assertNull; +import static org.mockito.ArgumentCaptor.forClass; +import static org.mockito.ArgumentMatchers.any; +import static org.mockito.ArgumentMatchers.anyString; +import static org.mockito.ArgumentMatchers.eq; +import static org.mockito.Mockito.doAnswer; +import static org.mockito.Mockito.doReturn; +import static org.mockito.Mockito.mock; +import static org.mockito.Mockito.spy; +import static org.mockito.Mockito.verify; +import static org.mockito.Mockito.when; + +import android.app.Activity; +import com.google.android.gms.ads.AdListener; +import com.google.android.gms.ads.AdRequest; +import com.google.android.gms.ads.AdSize; +import com.google.android.gms.ads.AdValue; +import com.google.android.gms.ads.AdView; +import com.google.android.gms.ads.LoadAdError; +import com.google.android.gms.ads.ResponseInfo; +import io.flutter.plugin.common.MethodChannel; +import io.flutter.plugin.platform.PlatformView; +import io.flutter.plugins.googlemobileads.FlutterAd.FlutterLoadAdError; +import org.junit.Before; +import org.junit.Test; +import org.junit.runner.RunWith; +import org.mockito.ArgumentCaptor; +import org.mockito.invocation.InvocationOnMock; +import org.mockito.stubbing.Answer; +import org.robolectric.RobolectricTestRunner; + +/** Tests for {@link FlutterBannerAd}. */ +@RunWith(RobolectricTestRunner.class) +public class FlutterBannerAdTest { + + private AdInstanceManager mockManager; + private AdView mockAdView; + private AdRequest mockAdRequest; + private AdSize adSize; + + // The system under test. + private FlutterBannerAd flutterBannerAd; + + @Before + public void setup() { + mockManager = spy(new AdInstanceManager(mock(MethodChannel.class))); + doReturn(mock(Activity.class)).when(mockManager).getActivity(); + final FlutterAdRequest mockFlutterRequest = mock(FlutterAdRequest.class); + mockAdRequest = mock(AdRequest.class); + final FlutterAdSize mockFlutterAdSize = mock(FlutterAdSize.class); + adSize = new AdSize(1, 2); + when(mockFlutterRequest.asAdRequest(anyString())).thenReturn(mockAdRequest); + when(mockFlutterAdSize.getAdSize()).thenReturn(adSize); + BannerAdCreator bannerAdCreator = mock(BannerAdCreator.class); + mockAdView = mock(AdView.class); + doReturn(mockAdView).when(bannerAdCreator).createAdView(); + flutterBannerAd = + new FlutterBannerAd( + 1, mockManager, "testId", mockFlutterRequest, mockFlutterAdSize, bannerAdCreator); + } + + @Test + public void failedToLoad() { + final LoadAdError loadError = mock(LoadAdError.class); + doReturn(1).when(loadError).getCode(); + doReturn("2").when(loadError).getDomain(); + doReturn("3").when(loadError).getMessage(); + doReturn(null).when(loadError).getResponseInfo(); + doAnswer( + new Answer() { + @Override + public Object answer(InvocationOnMock invocation) throws Throwable { + AdListener listener = invocation.getArgument(0); + listener.onAdFailedToLoad(loadError); + return null; + } + }) + .when(mockAdView) + .setAdListener(any(AdListener.class)); + + flutterBannerAd.load(); + verify(mockAdView).loadAd(eq(mockAdRequest)); + verify(mockAdView).setAdListener(any(AdListener.class)); + verify(mockAdView).setAdUnitId(eq("testId")); + verify(mockAdView).setAdSize(adSize); + FlutterLoadAdError expectedError = new FlutterLoadAdError(loadError); + verify(mockManager).onAdFailedToLoad(eq(1), eq(expectedError)); + } + + @Test + public void loadWithListenerCallbacks() { + doAnswer( + new Answer() { + @Override + public Object answer(InvocationOnMock invocation) throws Throwable { + AdListener listener = invocation.getArgument(0); + listener.onAdLoaded(); + listener.onAdImpression(); + listener.onAdClicked(); + listener.onAdClosed(); + listener.onAdOpened(); + return null; + } + }) + .when(mockAdView) + .setAdListener(any(AdListener.class)); + + final ResponseInfo responseInfo = mock(ResponseInfo.class); + doReturn(responseInfo).when(mockAdView).getResponseInfo(); + + final AdValue adValue = mock(AdValue.class); + doReturn(1).when(adValue).getPrecisionType(); + doReturn("Dollars").when(adValue).getCurrencyCode(); + doReturn(1000L).when(adValue).getValueMicros(); + doAnswer( + new Answer() { + @Override + public Object answer(InvocationOnMock invocation) { + FlutterPaidEventListener listener = invocation.getArgument(0); + listener.onPaidEvent(adValue); + return null; + } + }) + .when(mockAdView) + .setOnPaidEventListener(any(FlutterPaidEventListener.class)); + + flutterBannerAd.load(); + + verify(mockAdView).loadAd(eq(mockAdRequest)); + verify(mockAdView).setAdListener(any(AdListener.class)); + verify(mockAdView).setAdUnitId(eq("testId")); + verify(mockAdView).setAdSize(adSize); + verify(mockManager).onAdLoaded(eq(1), eq(responseInfo)); + verify(mockManager).onAdImpression(eq(1)); + verify(mockManager).onAdClicked(eq(1)); + verify(mockManager).onAdClosed(eq(1)); + verify(mockManager).onAdOpened(eq(1)); + assertEquals(flutterBannerAd.getPlatformView().getView(), mockAdView); + verify(mockAdView).setOnPaidEventListener(any(FlutterPaidEventListener.class)); + final ArgumentCaptor adValueCaptor = forClass(FlutterAdValue.class); + verify(mockManager).onPaidEvent(eq(flutterBannerAd), adValueCaptor.capture()); + assertEquals(adValueCaptor.getValue().currencyCode, "Dollars"); + assertEquals(adValueCaptor.getValue().precisionType, 1); + assertEquals(adValueCaptor.getValue().valueMicros, 1000L); + } + + @Test + public void dispose() { + flutterBannerAd.load(); + + assertEquals(flutterBannerAd.getPlatformView().getView(), mockAdView); + PlatformView platformView = flutterBannerAd.getPlatformView(); + assertNotNull(platformView); + + flutterBannerAd.dispose(); + verify(mockAdView).destroy(); + assertNull(flutterBannerAd.getPlatformView()); + // Check that the platform view still retains a reference to the view until + // dispose is called on it. + assertNotNull(platformView.getView()); + platformView.dispose(); + assertNull(platformView.getView()); + } +} diff --git a/mih_ui/android/build/ios/SourcePackages/google_mobile_ads-8.0.0/android/src/test/java/io/flutter/plugins/googlemobileads/FlutterInterstitialAdTest.java b/mih_ui/android/build/ios/SourcePackages/google_mobile_ads-8.0.0/android/src/test/java/io/flutter/plugins/googlemobileads/FlutterInterstitialAdTest.java new file mode 100644 index 00000000..75e76e17 --- /dev/null +++ b/mih_ui/android/build/ios/SourcePackages/google_mobile_ads-8.0.0/android/src/test/java/io/flutter/plugins/googlemobileads/FlutterInterstitialAdTest.java @@ -0,0 +1,233 @@ +// Copyright 2021 Google LLC +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// https://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +package io.flutter.plugins.googlemobileads; + +import static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertNull; +import static org.mockito.ArgumentCaptor.forClass; +import static org.mockito.ArgumentMatchers.any; +import static org.mockito.ArgumentMatchers.anyString; +import static org.mockito.ArgumentMatchers.eq; +import static org.mockito.Mockito.doAnswer; +import static org.mockito.Mockito.doReturn; +import static org.mockito.Mockito.mock; +import static org.mockito.Mockito.spy; +import static org.mockito.Mockito.verify; +import static org.mockito.Mockito.when; + +import android.app.Activity; +import com.google.android.gms.ads.AdError; +import com.google.android.gms.ads.AdRequest; +import com.google.android.gms.ads.AdValue; +import com.google.android.gms.ads.FullScreenContentCallback; +import com.google.android.gms.ads.LoadAdError; +import com.google.android.gms.ads.ResponseInfo; +import com.google.android.gms.ads.interstitial.InterstitialAd; +import com.google.android.gms.ads.interstitial.InterstitialAdLoadCallback; +import io.flutter.plugin.common.MethodChannel; +import io.flutter.plugins.googlemobileads.FlutterAd.FlutterLoadAdError; +import org.junit.Before; +import org.junit.Test; +import org.junit.runner.RunWith; +import org.mockito.ArgumentCaptor; +import org.mockito.invocation.InvocationOnMock; +import org.mockito.stubbing.Answer; +import org.robolectric.RobolectricTestRunner; + +/** Tests for {@link FlutterInterstitialAd}. */ +@RunWith(RobolectricTestRunner.class) +public class FlutterInterstitialAdTest { + + private AdInstanceManager mockManager; + private FlutterAdLoader mockFlutterAdLoader; + private AdRequest mockAdRequest; + + // The system under test. + private FlutterInterstitialAd flutterInterstitialAd; + + @Before + public void setup() { + mockManager = spy(new AdInstanceManager(mock(MethodChannel.class))); + doReturn(mock(Activity.class)).when(mockManager).getActivity(); + final FlutterAdRequest mockFlutterRequest = mock(FlutterAdRequest.class); + mockAdRequest = mock(AdRequest.class); + mockFlutterAdLoader = mock(FlutterAdLoader.class); + when(mockFlutterRequest.asAdRequest(anyString())).thenReturn(mockAdRequest); + + flutterInterstitialAd = + new FlutterInterstitialAd( + 1, mockManager, "testId", mockFlutterRequest, mockFlutterAdLoader); + } + + @Test + public void loadInterstitialAd_failedToLoad() { + final LoadAdError loadAdError = mock(LoadAdError.class); + ResponseInfo responseInfo = mock(ResponseInfo.class); + doReturn("id").when(responseInfo).getResponseId(); + doReturn("className").when(responseInfo).getMediationAdapterClassName(); + doReturn(1).when(loadAdError).getCode(); + doReturn("2").when(loadAdError).getDomain(); + doReturn("3").when(loadAdError).getMessage(); + doReturn(null).when(loadAdError).getResponseInfo(); + doAnswer( + new Answer() { + @Override + public Object answer(InvocationOnMock invocation) throws Throwable { + InterstitialAdLoadCallback adLoadCallback = invocation.getArgument(2); + // Pass back null for ad + adLoadCallback.onAdFailedToLoad(loadAdError); + return null; + } + }) + .when(mockFlutterAdLoader) + .loadInterstitial(anyString(), any(AdRequest.class), any(InterstitialAdLoadCallback.class)); + + flutterInterstitialAd.load(); + + verify(mockFlutterAdLoader) + .loadInterstitial(eq("testId"), eq(mockAdRequest), any(InterstitialAdLoadCallback.class)); + + FlutterLoadAdError expectedError = new FlutterLoadAdError(loadAdError); + verify(mockManager).onAdFailedToLoad(eq(1), eq(expectedError)); + } + + @Test + public void loadInterstitialAd_showSuccess() { + final InterstitialAd mockAd = mock(InterstitialAd.class); + doAnswer( + new Answer() { + @Override + public Object answer(InvocationOnMock invocation) throws Throwable { + InterstitialAdLoadCallback adLoadCallback = invocation.getArgument(2); + // Pass back null for ad + adLoadCallback.onAdLoaded(mockAd); + return null; + } + }) + .when(mockFlutterAdLoader) + .loadInterstitial(anyString(), any(AdRequest.class), any(InterstitialAdLoadCallback.class)); + final ResponseInfo responseInfo = mock(ResponseInfo.class); + doReturn(responseInfo).when(mockAd).getResponseInfo(); + final AdValue adValue = mock(AdValue.class); + doReturn(1).when(adValue).getPrecisionType(); + doReturn("Dollars").when(adValue).getCurrencyCode(); + doReturn(1000L).when(adValue).getValueMicros(); + doAnswer( + new Answer() { + @Override + public Object answer(InvocationOnMock invocation) { + FlutterPaidEventListener listener = invocation.getArgument(0); + listener.onPaidEvent(adValue); + return null; + } + }) + .when(mockAd) + .setOnPaidEventListener(any(FlutterPaidEventListener.class)); + + flutterInterstitialAd.load(); + + verify(mockFlutterAdLoader) + .loadInterstitial(eq("testId"), eq(mockAdRequest), any(InterstitialAdLoadCallback.class)); + + verify(mockManager).onAdLoaded(eq(1), eq(responseInfo)); + verify(mockAd).setOnPaidEventListener(any(FlutterPaidEventListener.class)); + + final ArgumentCaptor adValueCaptor = forClass(FlutterAdValue.class); + verify(mockManager).onPaidEvent(eq(flutterInterstitialAd), adValueCaptor.capture()); + assertEquals(adValueCaptor.getValue().currencyCode, "Dollars"); + assertEquals(adValueCaptor.getValue().precisionType, 1); + assertEquals(adValueCaptor.getValue().valueMicros, 1000L); + + // Setup mocks for show(). + doAnswer( + new Answer() { + @Override + public Object answer(InvocationOnMock invocation) throws Throwable { + FullScreenContentCallback callback = invocation.getArgument(0); + callback.onAdShowedFullScreenContent(); + callback.onAdImpression(); + callback.onAdClicked(); + callback.onAdDismissedFullScreenContent(); + return null; + } + }) + .when(mockAd) + .setFullScreenContentCallback(any(FullScreenContentCallback.class)); + + flutterInterstitialAd.show(); + verify(mockAd).setFullScreenContentCallback(any(FullScreenContentCallback.class)); + verify(mockAd).show(eq(mockManager.getActivity())); + verify(mockManager).onAdShowedFullScreenContent(eq(1)); + verify(mockManager).onAdDismissedFullScreenContent(eq(1)); + verify(mockManager).onAdImpression(eq(1)); + verify(mockManager).onAdClicked(eq(1)); + assertNull(flutterInterstitialAd.getPlatformView()); + } + + @Test + public void loadInterstitialAd_showFailure() { + final InterstitialAd mockAd = mock(InterstitialAd.class); + doAnswer( + new Answer() { + @Override + public Object answer(InvocationOnMock invocation) throws Throwable { + InterstitialAdLoadCallback adLoadCallback = invocation.getArgument(2); + // Pass back null for ad + adLoadCallback.onAdLoaded(mockAd); + return null; + } + }) + .when(mockFlutterAdLoader) + .loadInterstitial(anyString(), any(AdRequest.class), any(InterstitialAdLoadCallback.class)); + doReturn(mock(ResponseInfo.class)).when(mockAd).getResponseInfo(); + flutterInterstitialAd.load(); + final AdError adError = new AdError(1, "2", "3"); + + doAnswer( + new Answer() { + @Override + public Object answer(InvocationOnMock invocation) throws Throwable { + FullScreenContentCallback callback = invocation.getArgument(0); + callback.onAdFailedToShowFullScreenContent(adError); + return null; + } + }) + .when(mockAd) + .setFullScreenContentCallback(any(FullScreenContentCallback.class)); + + flutterInterstitialAd.show(); + verify(mockManager).onFailedToShowFullScreenContent(eq(1), eq(adError)); + } + + @Test + public void loadInterstitialAd_setImmersiveMode() { + final InterstitialAd mockAd = mock(InterstitialAd.class); + doAnswer( + new Answer() { + @Override + public Object answer(InvocationOnMock invocation) throws Throwable { + InterstitialAdLoadCallback adLoadCallback = invocation.getArgument(2); + adLoadCallback.onAdLoaded(mockAd); + // Pass back null for ad + return null; + } + }) + .when(mockFlutterAdLoader) + .loadInterstitial(anyString(), any(AdRequest.class), any(InterstitialAdLoadCallback.class)); + flutterInterstitialAd.load(); + flutterInterstitialAd.setImmersiveMode(true); + verify(mockAd).setImmersiveMode(true); + } +} diff --git a/mih_ui/android/build/ios/SourcePackages/google_mobile_ads-8.0.0/android/src/test/java/io/flutter/plugins/googlemobileads/FlutterNativeAdOptionsTest.java b/mih_ui/android/build/ios/SourcePackages/google_mobile_ads-8.0.0/android/src/test/java/io/flutter/plugins/googlemobileads/FlutterNativeAdOptionsTest.java new file mode 100644 index 00000000..2afbba27 --- /dev/null +++ b/mih_ui/android/build/ios/SourcePackages/google_mobile_ads-8.0.0/android/src/test/java/io/flutter/plugins/googlemobileads/FlutterNativeAdOptionsTest.java @@ -0,0 +1,64 @@ +// Copyright 2021 Google LLC +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// https://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +package io.flutter.plugins.googlemobileads; + +import static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertFalse; +import static org.junit.Assert.assertTrue; +import static org.mockito.Mockito.doReturn; + +import com.google.android.gms.ads.VideoOptions; +import com.google.android.gms.ads.nativead.NativeAdOptions; +import org.junit.Test; +import org.mockito.Mockito; + +/** Tests for {@link FlutterNativeAdOptions}. */ +public class FlutterNativeAdOptionsTest { + + @Test + public void testAsAdOptions_null() { + FlutterNativeAdOptions flutterNativeAdOptions = + new FlutterNativeAdOptions(null, null, null, null, null, null); + + NativeAdOptions nativeAdOptions = flutterNativeAdOptions.asNativeAdOptions(); + NativeAdOptions defaultOptions = new NativeAdOptions.Builder().build(); + assertEquals(nativeAdOptions.getAdChoicesPlacement(), defaultOptions.getAdChoicesPlacement()); + assertEquals(nativeAdOptions.getMediaAspectRatio(), defaultOptions.getMediaAspectRatio()); + assertEquals(nativeAdOptions.getVideoOptions(), defaultOptions.getVideoOptions()); + assertEquals( + nativeAdOptions.shouldRequestMultipleImages(), + defaultOptions.shouldRequestMultipleImages()); + assertEquals( + nativeAdOptions.shouldReturnUrlsForImageAssets(), + defaultOptions.shouldReturnUrlsForImageAssets()); + } + + @Test + public void testAsAdOptions() { + FlutterVideoOptions mockFlutterVideoOptions = Mockito.mock(FlutterVideoOptions.class); + VideoOptions mockVideoOptions = Mockito.mock(VideoOptions.class); + doReturn(mockVideoOptions).when(mockFlutterVideoOptions).asVideoOptions(); + + FlutterNativeAdOptions flutterNativeAdOptions = + new FlutterNativeAdOptions(1, 2, mockFlutterVideoOptions, true, false, true); + + NativeAdOptions nativeAdOptions = flutterNativeAdOptions.asNativeAdOptions(); + assertEquals(nativeAdOptions.getAdChoicesPlacement(), 1); + assertEquals(nativeAdOptions.getMediaAspectRatio(), 2); + assertFalse(nativeAdOptions.shouldRequestMultipleImages()); + assertTrue(nativeAdOptions.shouldReturnUrlsForImageAssets()); + assertEquals(nativeAdOptions.getVideoOptions(), mockVideoOptions); + } +} diff --git a/mih_ui/android/build/ios/SourcePackages/google_mobile_ads-8.0.0/android/src/test/java/io/flutter/plugins/googlemobileads/FlutterNativeAdTest.java b/mih_ui/android/build/ios/SourcePackages/google_mobile_ads-8.0.0/android/src/test/java/io/flutter/plugins/googlemobileads/FlutterNativeAdTest.java new file mode 100644 index 00000000..58f02338 --- /dev/null +++ b/mih_ui/android/build/ios/SourcePackages/google_mobile_ads-8.0.0/android/src/test/java/io/flutter/plugins/googlemobileads/FlutterNativeAdTest.java @@ -0,0 +1,375 @@ +// Copyright 2021 Google LLC +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// https://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +package io.flutter.plugins.googlemobileads; + +import static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertNotNull; +import static org.junit.Assert.assertNull; +import static org.mockito.ArgumentCaptor.forClass; +import static org.mockito.ArgumentMatchers.any; +import static org.mockito.ArgumentMatchers.anyString; +import static org.mockito.ArgumentMatchers.eq; +import static org.mockito.Mockito.doAnswer; +import static org.mockito.Mockito.doReturn; +import static org.mockito.Mockito.mock; +import static org.mockito.Mockito.never; +import static org.mockito.Mockito.spy; +import static org.mockito.Mockito.verify; +import static org.mockito.Mockito.when; + +import android.app.Activity; +import android.content.Context; +import androidx.test.core.app.ApplicationProvider; +import com.google.android.ads.nativetemplates.TemplateView; +import com.google.android.gms.ads.AdListener; +import com.google.android.gms.ads.AdRequest; +import com.google.android.gms.ads.AdValue; +import com.google.android.gms.ads.LoadAdError; +import com.google.android.gms.ads.ResponseInfo; +import com.google.android.gms.ads.admanager.AdManagerAdRequest; +import com.google.android.gms.ads.nativead.NativeAd; +import com.google.android.gms.ads.nativead.NativeAd.OnNativeAdLoadedListener; +import com.google.android.gms.ads.nativead.NativeAdOptions; +import com.google.android.gms.ads.nativead.NativeAdView; +import io.flutter.plugin.common.MethodChannel; +import io.flutter.plugin.platform.PlatformView; +import io.flutter.plugins.googlemobileads.FlutterAd.FlutterLoadAdError; +import io.flutter.plugins.googlemobileads.GoogleMobileAdsPlugin.NativeAdFactory; +import io.flutter.plugins.googlemobileads.nativetemplates.FlutterNativeTemplateStyle; +import java.util.Map; +import org.junit.Before; +import org.junit.Test; +import org.junit.runner.RunWith; +import org.mockito.ArgumentCaptor; +import org.mockito.invocation.InvocationOnMock; +import org.mockito.stubbing.Answer; +import org.robolectric.RobolectricTestRunner; + +/** Tests for {@link FlutterNativeAd}. */ +@RunWith(RobolectricTestRunner.class) +public class FlutterNativeAdTest { + + private AdInstanceManager testManager; + private final FlutterAdRequest request = new FlutterAdRequest.Builder().build(); + + @Before + public void setup() { + testManager = spy(new AdInstanceManager(mock(MethodChannel.class))); + doReturn(mock(Activity.class)).when(testManager).getActivity(); + } + + @Test + public void loadNativeAdWithAdManagerAdRequest() { + final FlutterAdManagerAdRequest mockFlutterRequest = mock(FlutterAdManagerAdRequest.class); + final AdManagerAdRequest mockRequest = mock(AdManagerAdRequest.class); + when(mockFlutterRequest.asAdManagerAdRequest(anyString())).thenReturn(mockRequest); + FlutterAdLoader mockLoader = mock(FlutterAdLoader.class); + NativeAdFactory mockNativeAdFactory = mock(NativeAdFactory.class); + @SuppressWarnings("unchecked") + Map mockOptions = mock(Map.class); + FlutterNativeAdOptions mockFlutterNativeAdOptions = mock(FlutterNativeAdOptions.class); + NativeAdOptions mockNativeAdOptions = mock(NativeAdOptions.class); + doReturn(mockNativeAdOptions).when(mockFlutterNativeAdOptions).asNativeAdOptions(); + final FlutterNativeAd nativeAd = + new FlutterNativeAd( + ApplicationProvider.getApplicationContext(), + 1, + testManager, + "testId", + mockNativeAdFactory, + mockFlutterRequest, + mockLoader, + mockOptions, + mockFlutterNativeAdOptions, + null); + + final ResponseInfo responseInfo = mock(ResponseInfo.class); + final NativeAd mockNativeAd = mock(NativeAd.class); + doReturn(responseInfo).when(mockNativeAd).getResponseInfo(); + final LoadAdError loadAdError = mock(LoadAdError.class); + doReturn(1).when(loadAdError).getCode(); + doReturn("2").when(loadAdError).getDomain(); + doReturn("3").when(loadAdError).getMessage(); + doReturn(null).when(loadAdError).getResponseInfo(); + doAnswer( + new Answer() { + @Override + public Object answer(InvocationOnMock invocation) { + OnNativeAdLoadedListener adLoadCallback = invocation.getArgument(1); + adLoadCallback.onNativeAdLoaded(mockNativeAd); + + AdListener listener = invocation.getArgument(3); + listener.onAdOpened(); + listener.onAdClosed(); + listener.onAdClicked(); + listener.onAdImpression(); + listener.onAdLoaded(); + listener.onAdFailedToLoad(loadAdError); + return null; + } + }) + .when(mockLoader) + .loadAdManagerNativeAd( + eq("testId"), + any(OnNativeAdLoadedListener.class), + any(NativeAdOptions.class), + any(AdListener.class), + eq(mockRequest)); + + final AdValue adValue = mock(AdValue.class); + doReturn(1).when(adValue).getPrecisionType(); + doReturn("Dollars").when(adValue).getCurrencyCode(); + doReturn(1000L).when(adValue).getValueMicros(); + doAnswer( + new Answer() { + @Override + public Object answer(InvocationOnMock invocation) { + FlutterPaidEventListener listener = invocation.getArgument(0); + listener.onPaidEvent(adValue); + return null; + } + }) + .when(mockNativeAd) + .setOnPaidEventListener(any(FlutterPaidEventListener.class)); + + nativeAd.load(); + verify(mockLoader) + .loadAdManagerNativeAd( + eq("testId"), + any(OnNativeAdLoadedListener.class), + eq(mockNativeAdOptions), + any(AdListener.class), + eq(mockRequest)); + + verify(mockNativeAd).setOnPaidEventListener(any(FlutterPaidEventListener.class)); + + verify(mockNativeAdFactory).createNativeAd(eq(mockNativeAd), eq(mockOptions)); + verify(testManager).onAdOpened(eq(1)); + verify(testManager).onAdClosed(eq(1)); + verify(testManager).onAdClicked(eq(1)); + verify(testManager).onAdImpression(eq(1)); + verify(testManager).onAdLoaded(eq(1), eq(responseInfo)); + FlutterLoadAdError expectedError = new FlutterLoadAdError(loadAdError); + verify(testManager).onAdFailedToLoad(eq(1), eq(expectedError)); + final ArgumentCaptor adValueCaptor = forClass(FlutterAdValue.class); + verify(testManager).onPaidEvent(eq(nativeAd), adValueCaptor.capture()); + assertEquals(adValueCaptor.getValue().currencyCode, "Dollars"); + assertEquals(adValueCaptor.getValue().precisionType, 1); + assertEquals(adValueCaptor.getValue().valueMicros, 1000L); + } + + @Test + public void loadNativeAdWithAdRequest() { + final FlutterAdRequest mockFlutterRequest = mock(FlutterAdRequest.class); + final AdRequest mockRequest = mock(AdRequest.class); + when(mockFlutterRequest.asAdRequest(anyString())).thenReturn(mockRequest); + FlutterAdLoader mockLoader = mock(FlutterAdLoader.class); + NativeAdFactory mockNativeAdFactory = mock(GoogleMobileAdsPlugin.NativeAdFactory.class); + NativeAdView mockNativeAdView = mock(NativeAdView.class); + doReturn(mockNativeAdView) + .when(mockNativeAdFactory) + .createNativeAd(any(NativeAd.class), any(Map.class)); + @SuppressWarnings("unchecked") + Map mockOptions = mock(Map.class); + FlutterNativeAdOptions mockFlutterNativeAdOptions = mock(FlutterNativeAdOptions.class); + NativeAdOptions mockNativeAdOptions = mock(NativeAdOptions.class); + doReturn(mockNativeAdOptions).when(mockFlutterNativeAdOptions).asNativeAdOptions(); + final FlutterNativeAd nativeAd = + new FlutterNativeAd( + ApplicationProvider.getApplicationContext(), + 1, + testManager, + "testId", + mockNativeAdFactory, + mockFlutterRequest, + mockLoader, + mockOptions, + mockFlutterNativeAdOptions, + null); + + final ResponseInfo responseInfo = mock(ResponseInfo.class); + final NativeAd mockNativeAd = mock(NativeAd.class); + doReturn(responseInfo).when(mockNativeAd).getResponseInfo(); + final LoadAdError loadAdError = mock(LoadAdError.class); + doReturn(1).when(loadAdError).getCode(); + doReturn("2").when(loadAdError).getDomain(); + doReturn("3").when(loadAdError).getMessage(); + doReturn(null).when(loadAdError).getResponseInfo(); + + doAnswer( + new Answer() { + @Override + public Object answer(InvocationOnMock invocation) throws Throwable { + OnNativeAdLoadedListener adLoadCallback = invocation.getArgument(1); + adLoadCallback.onNativeAdLoaded(mockNativeAd); + + AdListener listener = invocation.getArgument(3); + listener.onAdOpened(); + listener.onAdClosed(); + listener.onAdClicked(); + listener.onAdImpression(); + listener.onAdLoaded(); + listener.onAdFailedToLoad(loadAdError); + return null; + } + }) + .when(mockLoader) + .loadNativeAd( + eq("testId"), + any(OnNativeAdLoadedListener.class), + any(NativeAdOptions.class), + any(AdListener.class), + eq(mockRequest)); + + nativeAd.load(); + verify(mockLoader) + .loadNativeAd( + eq("testId"), + any(OnNativeAdLoadedListener.class), + eq(mockNativeAdOptions), + any(AdListener.class), + eq(mockRequest)); + + verify(mockNativeAdFactory).createNativeAd(eq(mockNativeAd), eq(mockOptions)); + verify(testManager).onAdLoaded(eq(1), eq(responseInfo)); + verify(testManager).onAdOpened(eq(1)); + verify(testManager).onAdClosed(eq(1)); + verify(testManager).onAdClicked(eq(1)); + verify(testManager).onAdImpression(eq(1)); + FlutterLoadAdError expectedError = new FlutterLoadAdError(loadAdError); + verify(testManager).onAdFailedToLoad(eq(1), eq(expectedError)); + + // Check that platform view is defined. + PlatformView platformView = nativeAd.getPlatformView(); + assertEquals(platformView.getView(), mockNativeAdView); + // getPlatformView() should be null after dispose() is invoked, but the platform view should + // still return the view. + nativeAd.dispose(); + assertNull(nativeAd.getPlatformView()); + assertNotNull(platformView.getView()); + // Platform view's reference to the view isn't cleared until dispose() is invoked on it. + platformView.dispose(); + assertNull(platformView.getView()); + } + + @Test + public void testLoadWithNativeTemplates() { + final FlutterAdRequest mockFlutterRequest = mock(FlutterAdRequest.class); + final AdRequest mockRequest = mock(AdRequest.class); + when(mockFlutterRequest.asAdRequest(anyString())).thenReturn(mockRequest); + FlutterAdLoader mockLoader = mock(FlutterAdLoader.class); + NativeAdFactory mockNativeAdFactory = mock(GoogleMobileAdsPlugin.NativeAdFactory.class); + @SuppressWarnings("unchecked") + Map mockOptions = mock(Map.class); + FlutterNativeAdOptions mockFlutterNativeAdOptions = mock(FlutterNativeAdOptions.class); + NativeAdOptions mockNativeAdOptions = mock(NativeAdOptions.class); + doReturn(mockNativeAdOptions).when(mockFlutterNativeAdOptions).asNativeAdOptions(); + TemplateView mockTemplateView = mock(TemplateView.class); + FlutterNativeTemplateStyle mockStyle = mock(FlutterNativeTemplateStyle.class); + doReturn(mockTemplateView).when(mockStyle).asTemplateView(any()); + + final FlutterNativeAd nativeAd = + new FlutterNativeAd( + ApplicationProvider.getApplicationContext(), + 1, + testManager, + "testId", + mockNativeAdFactory, + mockFlutterRequest, + mockLoader, + mockOptions, + mockFlutterNativeAdOptions, + mockStyle); + + final ResponseInfo responseInfo = mock(ResponseInfo.class); + final NativeAd mockNativeAd = mock(NativeAd.class); + doReturn(responseInfo).when(mockNativeAd).getResponseInfo(); + doAnswer( + new Answer() { + @Override + public Object answer(InvocationOnMock invocation) throws Throwable { + OnNativeAdLoadedListener adLoadCallback = invocation.getArgument(1); + adLoadCallback.onNativeAdLoaded(mockNativeAd); + + AdListener listener = invocation.getArgument(3); + listener.onAdOpened(); + return null; + } + }) + .when(mockLoader) + .loadNativeAd( + eq("testId"), + any(OnNativeAdLoadedListener.class), + any(NativeAdOptions.class), + any(AdListener.class), + eq(mockRequest)); + + nativeAd.load(); + verify(mockLoader) + .loadNativeAd( + eq("testId"), + any(OnNativeAdLoadedListener.class), + eq(mockNativeAdOptions), + any(AdListener.class), + eq(mockRequest)); + + verify(testManager).onAdLoaded(eq(1), eq(responseInfo)); + verify(mockNativeAdFactory, never()).createNativeAd(eq(mockNativeAd), eq(mockOptions)); + verify(mockStyle).asTemplateView(any(Context.class)); + + // Check that platform view is defined and equal to the template view. + PlatformView platformView = nativeAd.getPlatformView(); + assertEquals(platformView.getView(), mockTemplateView); + } + + @Test(expected = IllegalStateException.class) + public void nativeAdBuilderNullManager() { + new FlutterNativeAd.Builder(ApplicationProvider.getApplicationContext()) + .setManager(null) + .setAdUnitId("testId") + .setAdFactory(mock(GoogleMobileAdsPlugin.NativeAdFactory.class)) + .setRequest(request) + .build(); + } + + @Test(expected = IllegalStateException.class) + public void nativeAdBuilderNullAdUnitId() { + new FlutterNativeAd.Builder(ApplicationProvider.getApplicationContext()) + .setManager(testManager) + .setAdUnitId(null) + .setAdFactory(mock(GoogleMobileAdsPlugin.NativeAdFactory.class)) + .setRequest(request) + .build(); + } + + @Test(expected = IllegalStateException.class) + public void nativeAdBuilderNullAdFactory() { + new FlutterNativeAd.Builder(ApplicationProvider.getApplicationContext()) + .setManager(testManager) + .setAdUnitId("testId") + .setAdFactory(null) + .setRequest(request) + .build(); + } + + @Test(expected = IllegalStateException.class) + public void nativeAdBuilderNullRequest() { + new FlutterNativeAd.Builder(ApplicationProvider.getApplicationContext()) + .setManager(testManager) + .setAdUnitId("testId") + .setAdFactory(mock(GoogleMobileAdsPlugin.NativeAdFactory.class)) + .build(); + } +} diff --git a/mih_ui/android/build/ios/SourcePackages/google_mobile_ads-8.0.0/android/src/test/java/io/flutter/plugins/googlemobileads/FlutterRequestAgentProviderTest.java b/mih_ui/android/build/ios/SourcePackages/google_mobile_ads-8.0.0/android/src/test/java/io/flutter/plugins/googlemobileads/FlutterRequestAgentProviderTest.java new file mode 100644 index 00000000..c457f87a --- /dev/null +++ b/mih_ui/android/build/ios/SourcePackages/google_mobile_ads-8.0.0/android/src/test/java/io/flutter/plugins/googlemobileads/FlutterRequestAgentProviderTest.java @@ -0,0 +1,118 @@ +// Copyright 2022 Google LLC +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// https://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +package io.flutter.plugins.googlemobileads; + +import static android.os.Build.VERSION_CODES.S; +import static android.os.Build.VERSION_CODES.TIRAMISU; +import static org.junit.Assert.assertEquals; +import static org.mockito.ArgumentMatchers.any; +import static org.mockito.ArgumentMatchers.eq; +import static org.mockito.Mockito.doReturn; +import static org.mockito.Mockito.mock; + +import android.content.Context; +import android.content.pm.ApplicationInfo; +import android.content.pm.PackageManager; +import android.content.pm.PackageManager.NameNotFoundException; +import android.os.Build; +import android.os.Bundle; +import org.junit.Before; +import org.junit.Test; +import org.junit.runner.RunWith; +import org.robolectric.RobolectricTestRunner; +import org.robolectric.annotation.Config; + +/** Tests {@link FlutterRequestAgentProvider}. */ +@RunWith(RobolectricTestRunner.class) +@Config(sdk = {S, TIRAMISU}) +public class FlutterRequestAgentProviderTest { + + private Context mockContext; + private PackageManager mockPackageManager; + private ApplicationInfo mockApplicationInfo; + private static final String PACKAGE_NAME = "some.test.package"; + private Bundle metaData; + + @Before + public void setUp() throws NameNotFoundException { + mockContext = mock(Context.class); + mockPackageManager = mock(PackageManager.class); + mockApplicationInfo = mock(ApplicationInfo.class); + metaData = new Bundle(); + mockApplicationInfo.metaData = metaData; + doReturn(mockContext).when(mockContext).getApplicationContext(); + doReturn(mockPackageManager).when(mockContext).getPackageManager(); + doReturn(PACKAGE_NAME).when(mockContext).getPackageName(); + if (Build.VERSION.SDK_INT >= TIRAMISU) { + doReturn(mockApplicationInfo) + .when(mockPackageManager) + .getApplicationInfo(eq(PACKAGE_NAME), any()); + } else { + doReturn(mockApplicationInfo) + .when(mockPackageManager) + .getApplicationInfo(eq(PACKAGE_NAME), eq(PackageManager.GET_META_DATA)); + } + } + + @Test + public void testGetRequestAgent_noTemplateMetadata() { + FlutterRequestAgentProvider sut = new FlutterRequestAgentProvider(mockContext); + String requestAgent = sut.getRequestAgent(); + assertEquals(requestAgent, Constants.REQUEST_AGENT_PREFIX_VERSIONED); + } + + @Test + public void testGetRequestAgent_newsTemplateMetadata() { + metaData.putString(FlutterRequestAgentProvider.NEWS_VERSION_KEY, "1.2.54"); + FlutterRequestAgentProvider sut = new FlutterRequestAgentProvider(mockContext); + String requestAgent = sut.getRequestAgent(); + assertEquals( + requestAgent, + Constants.REQUEST_AGENT_PREFIX_VERSIONED + + "_" + + Constants.REQUEST_AGENT_NEWS_TEMPLATE_PREFIX + + "-1.2.54"); + } + + @Test + public void testGetRequestAgent_gameTemplateMetadata() { + metaData.putString(FlutterRequestAgentProvider.GAME_VERSION_KEY, "1.2.54"); + FlutterRequestAgentProvider sut = new FlutterRequestAgentProvider(mockContext); + String requestAgent = sut.getRequestAgent(); + assertEquals( + requestAgent, + Constants.REQUEST_AGENT_PREFIX_VERSIONED + + "_" + + Constants.REQUEST_AGENT_GAME_TEMPLATE_PREFIX + + "-1.2.54"); + } + + @Test + public void testGetRequestAgent_gameAndNewsTemplateMetadata() { + metaData.putString(FlutterRequestAgentProvider.NEWS_VERSION_KEY, "1.2.54"); + metaData.putString(FlutterRequestAgentProvider.GAME_VERSION_KEY, "asdfg"); + FlutterRequestAgentProvider sut = new FlutterRequestAgentProvider(mockContext); + String requestAgent = sut.getRequestAgent(); + assertEquals( + requestAgent, + Constants.REQUEST_AGENT_PREFIX_VERSIONED + + "_" + + Constants.REQUEST_AGENT_NEWS_TEMPLATE_PREFIX + + "-1.2.54" + + "_" + + Constants.REQUEST_AGENT_GAME_TEMPLATE_PREFIX + + "-asdfg"); + } +} diff --git a/mih_ui/android/build/ios/SourcePackages/google_mobile_ads-8.0.0/android/src/test/java/io/flutter/plugins/googlemobileads/FlutterRewardedAdTest.java b/mih_ui/android/build/ios/SourcePackages/google_mobile_ads-8.0.0/android/src/test/java/io/flutter/plugins/googlemobileads/FlutterRewardedAdTest.java new file mode 100644 index 00000000..e1926eb8 --- /dev/null +++ b/mih_ui/android/build/ios/SourcePackages/google_mobile_ads-8.0.0/android/src/test/java/io/flutter/plugins/googlemobileads/FlutterRewardedAdTest.java @@ -0,0 +1,373 @@ +// Copyright 2021 Google LLC +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// https://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +package io.flutter.plugins.googlemobileads; + +import static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertNull; +import static org.mockito.ArgumentCaptor.forClass; +import static org.mockito.ArgumentMatchers.any; +import static org.mockito.ArgumentMatchers.anyString; +import static org.mockito.ArgumentMatchers.eq; +import static org.mockito.Mockito.doAnswer; +import static org.mockito.Mockito.doReturn; +import static org.mockito.Mockito.mock; +import static org.mockito.Mockito.spy; +import static org.mockito.Mockito.verify; +import static org.mockito.Mockito.when; + +import android.app.Activity; +import com.google.android.gms.ads.AdError; +import com.google.android.gms.ads.AdRequest; +import com.google.android.gms.ads.AdValue; +import com.google.android.gms.ads.FullScreenContentCallback; +import com.google.android.gms.ads.LoadAdError; +import com.google.android.gms.ads.OnUserEarnedRewardListener; +import com.google.android.gms.ads.ResponseInfo; +import com.google.android.gms.ads.admanager.AdManagerAdRequest; +import com.google.android.gms.ads.rewarded.OnAdMetadataChangedListener; +import com.google.android.gms.ads.rewarded.RewardItem; +import com.google.android.gms.ads.rewarded.RewardedAd; +import com.google.android.gms.ads.rewarded.RewardedAdLoadCallback; +import com.google.android.gms.ads.rewarded.ServerSideVerificationOptions; +import io.flutter.plugin.common.MethodChannel; +import io.flutter.plugins.googlemobileads.FlutterAd.FlutterLoadAdError; +import io.flutter.plugins.googlemobileads.FlutterRewardedAd.FlutterRewardItem; +import org.junit.Before; +import org.junit.Test; +import org.junit.runner.RunWith; +import org.mockito.ArgumentCaptor; +import org.mockito.invocation.InvocationOnMock; +import org.mockito.stubbing.Answer; +import org.robolectric.RobolectricTestRunner; + +/** Tests for {@link FlutterRewardedAd}. */ +@RunWith(RobolectricTestRunner.class) +public class FlutterRewardedAdTest { + + private FlutterAdLoader mockFlutterAdLoader; + private AdInstanceManager mockManager; + private AdManagerAdRequest mockAdManagerAdRequest; + private AdRequest mockAdRequest; + + // The system under test. + private FlutterRewardedAd flutterRewardedAd; + + @Before + public void setup() { + mockManager = spy(new AdInstanceManager(mock(MethodChannel.class))); + doReturn(mock(Activity.class)).when(mockManager).getActivity(); + mockFlutterAdLoader = mock(FlutterAdLoader.class); + } + + private void setupAdmobMocks() { + FlutterAdRequest mockFlutterAdRequest = mock(FlutterAdRequest.class); + mockAdRequest = mock(AdRequest.class); + when(mockFlutterAdRequest.asAdRequest(anyString())).thenReturn(mockAdRequest); + flutterRewardedAd = + new FlutterRewardedAd(1, mockManager, "testId", mockFlutterAdRequest, mockFlutterAdLoader); + } + + private void setupAdManagerMocks() { + FlutterAdManagerAdRequest mockAdManagerFlutterRequest = mock(FlutterAdManagerAdRequest.class); + mockAdManagerAdRequest = mock(AdManagerAdRequest.class); + when(mockAdManagerFlutterRequest.asAdManagerAdRequest(anyString())) + .thenReturn(mockAdManagerAdRequest); + flutterRewardedAd = + new FlutterRewardedAd( + 1, mockManager, "testId", mockAdManagerFlutterRequest, mockFlutterAdLoader); + } + + @Test + public void loadAdManagerRewardedAd_failedToLoad() { + setupAdManagerMocks(); + final LoadAdError loadAdError = mock(LoadAdError.class); + doReturn(1).when(loadAdError).getCode(); + doReturn("2").when(loadAdError).getDomain(); + doReturn("3").when(loadAdError).getMessage(); + doReturn(null).when(loadAdError).getResponseInfo(); + doAnswer( + new Answer() { + @Override + public Object answer(InvocationOnMock invocation) throws Throwable { + RewardedAdLoadCallback adLoadCallback = invocation.getArgument(2); + // Pass back null for ad + adLoadCallback.onAdFailedToLoad(loadAdError); + return null; + } + }) + .when(mockFlutterAdLoader) + .loadAdManagerRewarded( + anyString(), any(AdManagerAdRequest.class), any(RewardedAdLoadCallback.class)); + + flutterRewardedAd.load(); + + verify(mockFlutterAdLoader) + .loadAdManagerRewarded( + eq("testId"), eq(mockAdManagerAdRequest), any(RewardedAdLoadCallback.class)); + + FlutterLoadAdError expectedError = new FlutterLoadAdError(loadAdError); + verify(mockManager).onAdFailedToLoad(eq(1), eq(expectedError)); + } + + @Test + public void loadAdManagerRewardedAd_showSuccessWithReward() { + setupAdManagerMocks(); + + final RewardedAd mockAd = mock(RewardedAd.class); + doAnswer( + new Answer() { + @Override + public Object answer(InvocationOnMock invocation) throws Throwable { + RewardedAdLoadCallback adLoadCallback = invocation.getArgument(2); + // Pass back null for ad + adLoadCallback.onAdLoaded(mockAd); + return null; + } + }) + .when(mockFlutterAdLoader) + .loadAdManagerRewarded( + anyString(), any(AdManagerAdRequest.class), any(RewardedAdLoadCallback.class)); + final ResponseInfo responseInfo = mock(ResponseInfo.class); + doReturn(responseInfo).when(mockAd).getResponseInfo(); + + final AdValue adValue = mock(AdValue.class); + doReturn(1).when(adValue).getPrecisionType(); + doReturn("Dollars").when(adValue).getCurrencyCode(); + doReturn(1000L).when(adValue).getValueMicros(); + doAnswer( + new Answer() { + @Override + public Object answer(InvocationOnMock invocation) { + FlutterPaidEventListener listener = invocation.getArgument(0); + listener.onPaidEvent(adValue); + return null; + } + }) + .when(mockAd) + .setOnPaidEventListener(any(FlutterPaidEventListener.class)); + + flutterRewardedAd.load(); + + verify(mockFlutterAdLoader) + .loadAdManagerRewarded( + eq("testId"), eq(mockAdManagerAdRequest), any(RewardedAdLoadCallback.class)); + + verify(mockManager).onAdLoaded(eq(1), eq(responseInfo)); + verify(mockAd).setOnPaidEventListener(any(FlutterPaidEventListener.class)); + final ArgumentCaptor adValueCaptor = forClass(FlutterAdValue.class); + verify(mockManager).onPaidEvent(eq(flutterRewardedAd), adValueCaptor.capture()); + assertEquals(adValueCaptor.getValue().currencyCode, "Dollars"); + assertEquals(adValueCaptor.getValue().precisionType, 1); + assertEquals(adValueCaptor.getValue().valueMicros, 1000L); + + // Setup mocks for show(). + doAnswer( + new Answer() { + @Override + public Object answer(InvocationOnMock invocation) throws Throwable { + FullScreenContentCallback callback = invocation.getArgument(0); + callback.onAdShowedFullScreenContent(); + callback.onAdImpression(); + callback.onAdClicked(); + callback.onAdDismissedFullScreenContent(); + return null; + } + }) + .when(mockAd) + .setFullScreenContentCallback(any(FullScreenContentCallback.class)); + + final RewardItem mockRewardItem = mock(RewardItem.class); + doReturn(5).when(mockRewardItem).getAmount(); + doReturn("$$").when(mockRewardItem).getType(); + doAnswer( + new Answer() { + @Override + public Object answer(InvocationOnMock invocation) throws Throwable { + OnUserEarnedRewardListener listener = invocation.getArgument(1); + listener.onUserEarnedReward(mockRewardItem); + return null; + } + }) + .when(mockAd) + .show(any(Activity.class), any(OnUserEarnedRewardListener.class)); + + doAnswer( + new Answer() { + @Override + public Object answer(InvocationOnMock invocation) throws Throwable { + OnAdMetadataChangedListener listener = invocation.getArgument(0); + listener.onAdMetadataChanged(); + return null; + } + }) + .when(mockAd) + .setOnAdMetadataChangedListener(any(OnAdMetadataChangedListener.class)); + + flutterRewardedAd.show(); + verify(mockAd).setFullScreenContentCallback(any(FullScreenContentCallback.class)); + verify(mockAd).show(eq(mockManager.getActivity()), any(OnUserEarnedRewardListener.class)); + verify(mockAd).setOnAdMetadataChangedListener(any(OnAdMetadataChangedListener.class)); + verify(mockManager).onAdShowedFullScreenContent(eq(1)); + verify(mockManager).onAdImpression(eq(1)); + verify(mockManager).onAdClicked(eq(1)); + verify(mockManager).onAdDismissedFullScreenContent(eq(1)); + verify(mockManager).onRewardedAdUserEarnedReward(1, new FlutterRewardItem(5, "$$")); + verify(mockManager).onAdMetadataChanged(eq(1)); + + assertNull(flutterRewardedAd.getPlatformView()); + } + + @Test + public void loadRewardedAdWithAdManagerRequest_nullServerSideOptions() { + setupAdManagerMocks(); + + final FlutterRewardedAd mockFlutterAd = spy(flutterRewardedAd); + final RewardedAd mockAd = mock(RewardedAd.class); + final LoadAdError loadAdError = new LoadAdError(1, "2", "3", null, null); + doAnswer( + new Answer() { + @Override + public Object answer(InvocationOnMock invocation) throws Throwable { + RewardedAdLoadCallback adLoadCallback = invocation.getArgument(2); + // Pass back null for ad + adLoadCallback.onAdLoaded(mockAd); + return null; + } + }) + .when(mockFlutterAdLoader) + .loadAdManagerRewarded( + anyString(), any(AdManagerAdRequest.class), any(RewardedAdLoadCallback.class)); + final ResponseInfo responseInfo = mock(ResponseInfo.class); + doReturn(responseInfo).when(mockAd).getResponseInfo(); + + mockFlutterAd.load(); + + verify(mockFlutterAdLoader) + .loadAdManagerRewarded( + eq("testId"), eq(mockAdManagerAdRequest), any(RewardedAdLoadCallback.class)); + + verify(mockManager).onAdLoaded(eq(1), eq(responseInfo)); + + doAnswer( + new Answer() { + @Override + public Object answer(InvocationOnMock invocation) throws Throwable { + FullScreenContentCallback callback = invocation.getArgument(0); + callback.onAdShowedFullScreenContent(); + return null; + } + }) + .when(mockAd) + .setFullScreenContentCallback(any(FullScreenContentCallback.class)); + + mockFlutterAd.show(); + verify(mockAd).setFullScreenContentCallback(any(FullScreenContentCallback.class)); + verify(mockAd).show(eq(mockManager.getActivity()), any(OnUserEarnedRewardListener.class)); + verify(mockAd).setOnAdMetadataChangedListener(any(OnAdMetadataChangedListener.class)); + } + + @Test + public void loadRewardedAdFailToShow() { + setupAdmobMocks(); + final RewardedAd mockRewardedAd = mock(RewardedAd.class); + doAnswer( + new Answer() { + @Override + public Object answer(InvocationOnMock invocation) throws Throwable { + RewardedAdLoadCallback adLoadCallback = invocation.getArgument(2); + // Pass back null for ad + adLoadCallback.onAdLoaded(mockRewardedAd); + return null; + } + }) + .when(mockFlutterAdLoader) + .loadRewarded(anyString(), any(AdRequest.class), any(RewardedAdLoadCallback.class)); + final ResponseInfo responseInfo = mock(ResponseInfo.class); + doReturn(responseInfo).when(mockRewardedAd).getResponseInfo(); + flutterRewardedAd.load(); + + verify(mockFlutterAdLoader) + .loadRewarded(eq("testId"), eq(mockAdRequest), any(RewardedAdLoadCallback.class)); + + verify(mockManager).onAdLoaded(eq(1), eq(responseInfo)); + final AdError adError = new AdError(0, "ad", "error"); + doAnswer( + new Answer() { + @Override + public Object answer(InvocationOnMock invocation) throws Throwable { + FullScreenContentCallback callback = invocation.getArgument(0); + callback.onAdFailedToShowFullScreenContent(adError); + return null; + } + }) + .when(mockRewardedAd) + .setFullScreenContentCallback(any(FullScreenContentCallback.class)); + + flutterRewardedAd.show(); + verify(mockRewardedAd).setFullScreenContentCallback(any(FullScreenContentCallback.class)); + verify(mockManager).onFailedToShowFullScreenContent(eq(1), eq(adError)); + } + + @Test + public void loadRewardedAd_setImmersiveMode() { + setupAdmobMocks(); + + final RewardedAd mockRewardedAd = mock(RewardedAd.class); + doAnswer( + new Answer() { + @Override + public Object answer(InvocationOnMock invocation) throws Throwable { + RewardedAdLoadCallback adLoadCallback = invocation.getArgument(2); + adLoadCallback.onAdLoaded(mockRewardedAd); + // Pass back null for ad + return null; + } + }) + .when(mockFlutterAdLoader) + .loadRewarded(anyString(), any(AdRequest.class), any(RewardedAdLoadCallback.class)); + + flutterRewardedAd.load(); + flutterRewardedAd.setImmersiveMode(true); + verify(mockRewardedAd).setImmersiveMode(true); + } + + @Test + public void setServerSideVerificationOptions() { + setupAdManagerMocks(); + final RewardedAd mockAd = mock(RewardedAd.class); + doAnswer( + new Answer() { + @Override + public Object answer(InvocationOnMock invocation) throws Throwable { + RewardedAdLoadCallback adLoadCallback = invocation.getArgument(2); + // Pass back null for ad + adLoadCallback.onAdLoaded(mockAd); + return null; + } + }) + .when(mockFlutterAdLoader) + .loadAdManagerRewarded( + anyString(), any(AdManagerAdRequest.class), any(RewardedAdLoadCallback.class)); + + flutterRewardedAd.load(); + + FlutterServerSideVerificationOptions fltSsv = mock(FlutterServerSideVerificationOptions.class); + ServerSideVerificationOptions ssv = mock(ServerSideVerificationOptions.class); + doReturn(ssv).when(fltSsv).asServerSideVerificationOptions(); + + flutterRewardedAd.setServerSideVerificationOptions(fltSsv); + verify(mockAd).setServerSideVerificationOptions(eq(ssv)); + } +} diff --git a/mih_ui/android/build/ios/SourcePackages/google_mobile_ads-8.0.0/android/src/test/java/io/flutter/plugins/googlemobileads/FlutterRewardedInterstitialAdTest.java b/mih_ui/android/build/ios/SourcePackages/google_mobile_ads-8.0.0/android/src/test/java/io/flutter/plugins/googlemobileads/FlutterRewardedInterstitialAdTest.java new file mode 100644 index 00000000..7237d566 --- /dev/null +++ b/mih_ui/android/build/ios/SourcePackages/google_mobile_ads-8.0.0/android/src/test/java/io/flutter/plugins/googlemobileads/FlutterRewardedInterstitialAdTest.java @@ -0,0 +1,393 @@ +// Copyright 2021 Google LLC +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// https://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +package io.flutter.plugins.googlemobileads; + +import static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertNull; +import static org.mockito.ArgumentCaptor.forClass; +import static org.mockito.ArgumentMatchers.any; +import static org.mockito.ArgumentMatchers.anyString; +import static org.mockito.ArgumentMatchers.eq; +import static org.mockito.Mockito.doAnswer; +import static org.mockito.Mockito.doReturn; +import static org.mockito.Mockito.mock; +import static org.mockito.Mockito.spy; +import static org.mockito.Mockito.verify; +import static org.mockito.Mockito.when; + +import android.app.Activity; +import com.google.android.gms.ads.AdError; +import com.google.android.gms.ads.AdRequest; +import com.google.android.gms.ads.AdValue; +import com.google.android.gms.ads.FullScreenContentCallback; +import com.google.android.gms.ads.LoadAdError; +import com.google.android.gms.ads.OnUserEarnedRewardListener; +import com.google.android.gms.ads.ResponseInfo; +import com.google.android.gms.ads.admanager.AdManagerAdRequest; +import com.google.android.gms.ads.rewarded.OnAdMetadataChangedListener; +import com.google.android.gms.ads.rewarded.RewardItem; +import com.google.android.gms.ads.rewarded.ServerSideVerificationOptions; +import com.google.android.gms.ads.rewardedinterstitial.RewardedInterstitialAd; +import com.google.android.gms.ads.rewardedinterstitial.RewardedInterstitialAdLoadCallback; +import io.flutter.plugin.common.MethodChannel; +import io.flutter.plugins.googlemobileads.FlutterAd.FlutterLoadAdError; +import io.flutter.plugins.googlemobileads.FlutterRewardedAd.FlutterRewardItem; +import org.junit.Before; +import org.junit.Test; +import org.junit.runner.RunWith; +import org.mockito.ArgumentCaptor; +import org.mockito.invocation.InvocationOnMock; +import org.mockito.stubbing.Answer; +import org.robolectric.RobolectricTestRunner; + +/** Tests for {@link FlutterRewardedInterstitialAd}. */ +@RunWith(RobolectricTestRunner.class) +public class FlutterRewardedInterstitialAdTest { + + private FlutterAdLoader mockFlutterAdLoader; + private AdInstanceManager mockManager; + private AdManagerAdRequest mockAdManagerAdRequest; + private AdRequest mockAdRequest; + + // The system under test. + private FlutterRewardedInterstitialAd flutterRewardedInterstitialAd; + + @Before + public void setup() { + mockManager = spy(new AdInstanceManager(mock(MethodChannel.class))); + doReturn(mock(Activity.class)).when(mockManager).getActivity(); + mockFlutterAdLoader = mock(FlutterAdLoader.class); + } + + private void setupAdmobMocks() { + FlutterAdRequest mockFlutterAdRequest = mock(FlutterAdRequest.class); + mockAdRequest = mock(AdRequest.class); + when(mockFlutterAdRequest.asAdRequest(anyString())).thenReturn(mockAdRequest); + flutterRewardedInterstitialAd = + new FlutterRewardedInterstitialAd( + 1, mockManager, "testId", mockFlutterAdRequest, mockFlutterAdLoader); + } + + private void setupAdManagerMocks() { + FlutterAdManagerAdRequest mockAdManagerFlutterRequest = mock(FlutterAdManagerAdRequest.class); + mockAdManagerAdRequest = mock(AdManagerAdRequest.class); + when(mockAdManagerFlutterRequest.asAdManagerAdRequest(anyString())) + .thenReturn(mockAdManagerAdRequest); + flutterRewardedInterstitialAd = + new FlutterRewardedInterstitialAd( + 1, mockManager, "testId", mockAdManagerFlutterRequest, mockFlutterAdLoader); + } + + @Test + public void loadAdManagerRewardedInterstitialAd_failedToLoad() { + setupAdManagerMocks(); + final LoadAdError loadAdError = mock(LoadAdError.class); + doReturn(1).when(loadAdError).getCode(); + doReturn("2").when(loadAdError).getDomain(); + doReturn("3").when(loadAdError).getMessage(); + doReturn(null).when(loadAdError).getResponseInfo(); + doAnswer( + new Answer() { + @Override + public Object answer(InvocationOnMock invocation) throws Throwable { + RewardedInterstitialAdLoadCallback adLoadCallback = invocation.getArgument(2); + // Pass back null for ad + adLoadCallback.onAdFailedToLoad(loadAdError); + return null; + } + }) + .when(mockFlutterAdLoader) + .loadAdManagerRewardedInterstitial( + anyString(), + any(AdManagerAdRequest.class), + any(RewardedInterstitialAdLoadCallback.class)); + + flutterRewardedInterstitialAd.load(); + + verify(mockFlutterAdLoader) + .loadAdManagerRewardedInterstitial( + eq("testId"), + eq(mockAdManagerAdRequest), + any(RewardedInterstitialAdLoadCallback.class)); + + FlutterLoadAdError expectedError = new FlutterLoadAdError(loadAdError); + verify(mockManager).onAdFailedToLoad(eq(1), eq(expectedError)); + } + + @Test + public void loadAdManagerRewardedInterstitialAd_showSuccessWithReward() { + setupAdManagerMocks(); + + final RewardedInterstitialAd mockAd = mock(RewardedInterstitialAd.class); + doAnswer( + new Answer() { + @Override + public Object answer(InvocationOnMock invocation) throws Throwable { + RewardedInterstitialAdLoadCallback adLoadCallback = invocation.getArgument(2); + // Pass back null for ad + adLoadCallback.onAdLoaded(mockAd); + return null; + } + }) + .when(mockFlutterAdLoader) + .loadAdManagerRewardedInterstitial( + anyString(), + any(AdManagerAdRequest.class), + any(RewardedInterstitialAdLoadCallback.class)); + final ResponseInfo responseInfo = mock(ResponseInfo.class); + doReturn(responseInfo).when(mockAd).getResponseInfo(); + + final AdValue adValue = mock(AdValue.class); + doReturn(1).when(adValue).getPrecisionType(); + doReturn("Dollars").when(adValue).getCurrencyCode(); + doReturn(1000L).when(adValue).getValueMicros(); + doAnswer( + new Answer() { + @Override + public Object answer(InvocationOnMock invocation) { + FlutterPaidEventListener listener = invocation.getArgument(0); + listener.onPaidEvent(adValue); + return null; + } + }) + .when(mockAd) + .setOnPaidEventListener(any(FlutterPaidEventListener.class)); + + flutterRewardedInterstitialAd.load(); + + verify(mockFlutterAdLoader) + .loadAdManagerRewardedInterstitial( + eq("testId"), + eq(mockAdManagerAdRequest), + any(RewardedInterstitialAdLoadCallback.class)); + + verify(mockManager).onAdLoaded(eq(1), eq(responseInfo)); + verify(mockAd).setOnPaidEventListener(any(FlutterPaidEventListener.class)); + final ArgumentCaptor adValueCaptor = forClass(FlutterAdValue.class); + verify(mockManager).onPaidEvent(eq(flutterRewardedInterstitialAd), adValueCaptor.capture()); + assertEquals(adValueCaptor.getValue().currencyCode, "Dollars"); + assertEquals(adValueCaptor.getValue().precisionType, 1); + assertEquals(adValueCaptor.getValue().valueMicros, 1000L); + + // Setup mocks for show(). + doAnswer( + new Answer() { + @Override + public Object answer(InvocationOnMock invocation) throws Throwable { + FullScreenContentCallback callback = invocation.getArgument(0); + callback.onAdShowedFullScreenContent(); + callback.onAdImpression(); + callback.onAdClicked(); + callback.onAdDismissedFullScreenContent(); + return null; + } + }) + .when(mockAd) + .setFullScreenContentCallback(any(FullScreenContentCallback.class)); + + final RewardItem mockRewardItem = mock(RewardItem.class); + doReturn(5).when(mockRewardItem).getAmount(); + doReturn("$$").when(mockRewardItem).getType(); + doAnswer( + new Answer() { + @Override + public Object answer(InvocationOnMock invocation) throws Throwable { + OnUserEarnedRewardListener listener = invocation.getArgument(1); + listener.onUserEarnedReward(mockRewardItem); + return null; + } + }) + .when(mockAd) + .show(any(Activity.class), any(OnUserEarnedRewardListener.class)); + + doAnswer( + new Answer() { + @Override + public Object answer(InvocationOnMock invocation) throws Throwable { + OnAdMetadataChangedListener listener = invocation.getArgument(0); + listener.onAdMetadataChanged(); + return null; + } + }) + .when(mockAd) + .setOnAdMetadataChangedListener(any(OnAdMetadataChangedListener.class)); + + flutterRewardedInterstitialAd.show(); + verify(mockAd).setFullScreenContentCallback(any(FullScreenContentCallback.class)); + verify(mockAd).show(eq(mockManager.getActivity()), any(OnUserEarnedRewardListener.class)); + verify(mockAd).setOnAdMetadataChangedListener(any(OnAdMetadataChangedListener.class)); + verify(mockManager).onAdShowedFullScreenContent(eq(1)); + verify(mockManager).onAdImpression(eq(1)); + verify(mockManager).onAdClicked(eq(1)); + verify(mockManager).onAdDismissedFullScreenContent(eq(1)); + verify(mockManager).onRewardedAdUserEarnedReward(1, new FlutterRewardItem(5, "$$")); + verify(mockManager).onAdMetadataChanged(eq(1)); + + assertNull(flutterRewardedInterstitialAd.getPlatformView()); + } + + @Test + public void loadRewardedInterstitialAdWithAdManagerRequest_nullServerSideOptions() { + setupAdManagerMocks(); + + final FlutterRewardedInterstitialAd mockFlutterAd = spy(flutterRewardedInterstitialAd); + final RewardedInterstitialAd mockAd = mock(RewardedInterstitialAd.class); + final LoadAdError loadAdError = new LoadAdError(1, "2", "3", null, null); + doAnswer( + new Answer() { + @Override + public Object answer(InvocationOnMock invocation) throws Throwable { + RewardedInterstitialAdLoadCallback adLoadCallback = invocation.getArgument(2); + // Pass back null for ad + adLoadCallback.onAdLoaded(mockAd); + return null; + } + }) + .when(mockFlutterAdLoader) + .loadAdManagerRewardedInterstitial( + anyString(), + any(AdManagerAdRequest.class), + any(RewardedInterstitialAdLoadCallback.class)); + final ResponseInfo responseInfo = mock(ResponseInfo.class); + doReturn(responseInfo).when(mockAd).getResponseInfo(); + + mockFlutterAd.load(); + + verify(mockFlutterAdLoader) + .loadAdManagerRewardedInterstitial( + eq("testId"), + eq(mockAdManagerAdRequest), + any(RewardedInterstitialAdLoadCallback.class)); + + verify(mockManager).onAdLoaded(eq(1), eq(responseInfo)); + + doAnswer( + new Answer() { + @Override + public Object answer(InvocationOnMock invocation) throws Throwable { + FullScreenContentCallback callback = invocation.getArgument(0); + callback.onAdShowedFullScreenContent(); + return null; + } + }) + .when(mockAd) + .setFullScreenContentCallback(any(FullScreenContentCallback.class)); + + mockFlutterAd.show(); + verify(mockAd).setFullScreenContentCallback(any(FullScreenContentCallback.class)); + verify(mockAd).show(eq(mockManager.getActivity()), any(OnUserEarnedRewardListener.class)); + verify(mockAd).setOnAdMetadataChangedListener(any(OnAdMetadataChangedListener.class)); + } + + @Test + public void loadRewardedInterstitialAd_failToShow() { + setupAdmobMocks(); + + final RewardedInterstitialAd mockRewardedInterstitialAd = mock(RewardedInterstitialAd.class); + doAnswer( + new Answer() { + @Override + public Object answer(InvocationOnMock invocation) throws Throwable { + RewardedInterstitialAdLoadCallback adLoadCallback = invocation.getArgument(2); + // Pass back null for ad + adLoadCallback.onAdLoaded(mockRewardedInterstitialAd); + return null; + } + }) + .when(mockFlutterAdLoader) + .loadRewardedInterstitial( + anyString(), any(AdRequest.class), any(RewardedInterstitialAdLoadCallback.class)); + final ResponseInfo responseInfo = mock(ResponseInfo.class); + doReturn(responseInfo).when(mockRewardedInterstitialAd).getResponseInfo(); + flutterRewardedInterstitialAd.load(); + + verify(mockFlutterAdLoader) + .loadRewardedInterstitial( + eq("testId"), eq(mockAdRequest), any(RewardedInterstitialAdLoadCallback.class)); + + verify(mockManager).onAdLoaded(eq(1), eq(responseInfo)); + final AdError adError = new AdError(0, "ad", "error"); + doAnswer( + new Answer() { + @Override + public Object answer(InvocationOnMock invocation) throws Throwable { + FullScreenContentCallback callback = invocation.getArgument(0); + callback.onAdFailedToShowFullScreenContent(adError); + return null; + } + }) + .when(mockRewardedInterstitialAd) + .setFullScreenContentCallback(any(FullScreenContentCallback.class)); + + flutterRewardedInterstitialAd.show(); + verify(mockRewardedInterstitialAd) + .setFullScreenContentCallback(any(FullScreenContentCallback.class)); + verify(mockManager).onFailedToShowFullScreenContent(eq(1), eq(adError)); + } + + @Test + public void loadRewardedInterstitialAd_setImmersiveMode() { + setupAdmobMocks(); + + final RewardedInterstitialAd mockRewardedInterstitialAd = mock(RewardedInterstitialAd.class); + doAnswer( + new Answer() { + @Override + public Object answer(InvocationOnMock invocation) throws Throwable { + RewardedInterstitialAdLoadCallback adLoadCallback = invocation.getArgument(2); + adLoadCallback.onAdLoaded(mockRewardedInterstitialAd); + // Pass back null for ad + return null; + } + }) + .when(mockFlutterAdLoader) + .loadRewardedInterstitial( + anyString(), any(AdRequest.class), any(RewardedInterstitialAdLoadCallback.class)); + + flutterRewardedInterstitialAd.load(); + flutterRewardedInterstitialAd.setImmersiveMode(true); + verify(mockRewardedInterstitialAd).setImmersiveMode(true); + } + + @Test + public void setServerSideVerificationOptions() { + setupAdManagerMocks(); + final RewardedInterstitialAd mockAd = mock(RewardedInterstitialAd.class); + doAnswer( + new Answer() { + @Override + public Object answer(InvocationOnMock invocation) throws Throwable { + RewardedInterstitialAdLoadCallback adLoadCallback = invocation.getArgument(2); + // Pass back null for ad + adLoadCallback.onAdLoaded(mockAd); + return null; + } + }) + .when(mockFlutterAdLoader) + .loadAdManagerRewardedInterstitial( + anyString(), + any(AdManagerAdRequest.class), + any(RewardedInterstitialAdLoadCallback.class)); + + flutterRewardedInterstitialAd.load(); + + FlutterServerSideVerificationOptions fltSsv = mock(FlutterServerSideVerificationOptions.class); + ServerSideVerificationOptions ssv = mock(ServerSideVerificationOptions.class); + doReturn(ssv).when(fltSsv).asServerSideVerificationOptions(); + + flutterRewardedInterstitialAd.setServerSideVerificationOptions(fltSsv); + verify(mockAd).setServerSideVerificationOptions(eq(ssv)); + } +} diff --git a/mih_ui/android/build/ios/SourcePackages/google_mobile_ads-8.0.0/android/src/test/java/io/flutter/plugins/googlemobileads/FlutterVideoOptionsTest.java b/mih_ui/android/build/ios/SourcePackages/google_mobile_ads-8.0.0/android/src/test/java/io/flutter/plugins/googlemobileads/FlutterVideoOptionsTest.java new file mode 100644 index 00000000..55efe9bc --- /dev/null +++ b/mih_ui/android/build/ios/SourcePackages/google_mobile_ads-8.0.0/android/src/test/java/io/flutter/plugins/googlemobileads/FlutterVideoOptionsTest.java @@ -0,0 +1,50 @@ +// Copyright 2021 Google LLC +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// https://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +package io.flutter.plugins.googlemobileads; + +import static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertFalse; +import static org.junit.Assert.assertTrue; + +import com.google.android.gms.ads.VideoOptions; +import org.junit.Test; + +/** Tests for {@link FlutterVideoOptions}. */ +public class FlutterVideoOptionsTest { + + @Test + public void testVideoOptions_null() { + FlutterVideoOptions flutterVideoOptions = new FlutterVideoOptions(null, null, null); + + VideoOptions videoOptions = flutterVideoOptions.asVideoOptions(); + VideoOptions defaultOptions = new VideoOptions.Builder().build(); + assertEquals( + videoOptions.getClickToExpandRequested(), defaultOptions.getClickToExpandRequested()); + assertEquals( + videoOptions.getCustomControlsRequested(), defaultOptions.getCustomControlsRequested()); + assertEquals(videoOptions.getStartMuted(), defaultOptions.getStartMuted()); + } + + @Test + public void testVideoOptions() { + FlutterVideoOptions flutterVideoOptions = new FlutterVideoOptions(true, false, true); + + VideoOptions videoOptions = flutterVideoOptions.asVideoOptions(); + + assertTrue(videoOptions.getClickToExpandRequested()); + assertFalse(videoOptions.getCustomControlsRequested()); + assertTrue(videoOptions.getStartMuted()); + } +} diff --git a/mih_ui/android/build/ios/SourcePackages/google_mobile_ads-8.0.0/android/src/test/java/io/flutter/plugins/googlemobileads/GoogleMobileAdsTest.java b/mih_ui/android/build/ios/SourcePackages/google_mobile_ads-8.0.0/android/src/test/java/io/flutter/plugins/googlemobileads/GoogleMobileAdsTest.java new file mode 100644 index 00000000..a25e8a88 --- /dev/null +++ b/mih_ui/android/build/ios/SourcePackages/google_mobile_ads-8.0.0/android/src/test/java/io/flutter/plugins/googlemobileads/GoogleMobileAdsTest.java @@ -0,0 +1,1035 @@ +// Copyright 2021 Google LLC +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// https://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +package io.flutter.plugins.googlemobileads; + +import static org.hamcrest.Matchers.hasEntry; +import static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertNotNull; +import static org.junit.Assert.assertNull; +import static org.junit.Assert.assertThat; +import static org.mockito.ArgumentMatchers.any; +import static org.mockito.ArgumentMatchers.eq; +import static org.mockito.ArgumentMatchers.isNull; +import static org.mockito.Mockito.doAnswer; +import static org.mockito.Mockito.doReturn; +import static org.mockito.Mockito.mock; +import static org.mockito.Mockito.spy; +import static org.mockito.Mockito.verify; +import static org.mockito.Mockito.verifyNoInteractions; + +import android.app.Activity; +import android.content.Context; +import android.os.Bundle; +import androidx.test.core.app.ApplicationProvider; +import com.google.android.gms.ads.AdError; +import com.google.android.gms.ads.AdInspectorError; +import com.google.android.gms.ads.AdSize; +import com.google.android.gms.ads.AdView; +import com.google.android.gms.ads.AdapterResponseInfo; +import com.google.android.gms.ads.OnAdInspectorClosedListener; +import com.google.android.gms.ads.RequestConfiguration; +import com.google.android.gms.ads.ResponseInfo; +import com.google.android.gms.ads.admanager.AdManagerAdView; +import com.google.android.gms.ads.initialization.InitializationStatus; +import com.google.android.gms.ads.initialization.OnInitializationCompleteListener; +import com.google.android.gms.ads.nativead.NativeAd; +import com.google.android.gms.ads.nativead.NativeAdView; +import io.flutter.embedding.engine.plugins.FlutterPlugin.FlutterPluginBinding; +import io.flutter.embedding.engine.plugins.activity.ActivityPluginBinding; +import io.flutter.plugin.common.BinaryMessenger; +import io.flutter.plugin.common.MethodCall; +import io.flutter.plugin.common.MethodChannel; +import io.flutter.plugin.common.MethodChannel.Result; +import io.flutter.plugin.common.StandardMethodCodec; +import io.flutter.plugin.platform.PlatformViewRegistry; +import io.flutter.plugins.googlemobileads.FlutterAd.FlutterResponseInfo; +import java.nio.ByteBuffer; +import java.util.ArrayList; +import java.util.Arrays; +import java.util.Collections; +import java.util.HashMap; +import java.util.List; +import java.util.Map; +import org.hamcrest.Matcher; +import org.junit.Before; +import org.junit.Test; +import org.junit.runner.RunWith; +import org.mockito.ArgumentCaptor; +import org.mockito.ArgumentMatchers; +import org.mockito.invocation.InvocationOnMock; +import org.mockito.stubbing.Answer; +import org.robolectric.Robolectric; +import org.robolectric.RobolectricTestRunner; + +/** Tests {@link AdInstanceManager}. */ +@RunWith(RobolectricTestRunner.class) +public class GoogleMobileAdsTest { + private AdInstanceManager testManager; + private final FlutterAdRequest request = new FlutterAdRequest.Builder().build(); + private Activity mockActivity; + private Context mockContext; + private FlutterPluginBinding mockFlutterPluginBinding; + private static BinaryMessenger mockMessenger; + private static FlutterRequestAgentProvider mockFlutterRequestAgentProvider = + mock(FlutterRequestAgentProvider.class); + + private static MethodCall getLastMethodCall() { + Robolectric.flushForegroundThreadScheduler(); + final ArgumentCaptor byteBufferCaptor = ArgumentCaptor.forClass(ByteBuffer.class); + verify(mockMessenger) + .send( + eq("plugins.flutter.io/google_mobile_ads"), + byteBufferCaptor.capture(), + (BinaryMessenger.BinaryReply) isNull()); + + return new StandardMethodCodec(new AdMessageCodec(null, mockFlutterRequestAgentProvider)) + .decodeMethodCall((ByteBuffer) byteBufferCaptor.getValue().position(0)); + } + + @Before + public void setup() { + mockMessenger = mock(BinaryMessenger.class); + mockActivity = mock(Activity.class); + doAnswer( + new Answer() { + @Override + public Object answer(InvocationOnMock invocation) { + Runnable runnable = invocation.getArgument(0); + runnable.run(); + return null; + } + }) + .when(mockActivity) + .runOnUiThread(ArgumentMatchers.any(Runnable.class)); + mockFlutterRequestAgentProvider = mock(FlutterRequestAgentProvider.class); + MethodChannel methodChannel = + new MethodChannel( + mockMessenger, + "plugins.flutter.io/google_mobile_ads", + new StandardMethodCodec( + new AdMessageCodec(mockActivity, mockFlutterRequestAgentProvider))); + testManager = new AdInstanceManager(methodChannel); + testManager.setActivity(mockActivity); + mockContext = mock(Context.class); + mockFlutterPluginBinding = mock(FlutterPluginBinding.class); + doReturn(mockContext).when(mockFlutterPluginBinding).getApplicationContext(); + } + + @Test + public void loadAd() { + final FlutterBannerAd bannerAd = + new FlutterBannerAd( + 1, + testManager, + "testId", + request, + new FlutterAdSize(1, 2), + mock(BannerAdCreator.class)); + testManager.trackAd(bannerAd, 0); + + assertNotNull(testManager.adForId(0)); + assertEquals(bannerAd, testManager.adForId(0)); + assertEquals(0, testManager.adIdFor(bannerAd).intValue()); + } + + @Test + public void disposeAd_banner() { + FlutterBannerAd bannerAd = mock(FlutterBannerAd.class); + + testManager.trackAd(bannerAd, 2); + assertNotNull(testManager.adForId(2)); + assertNotNull(testManager.adIdFor(bannerAd)); + testManager.disposeAd(2); + verify(bannerAd).dispose(); + assertNull(testManager.adForId(2)); + assertNull(testManager.adIdFor(bannerAd)); + } + + @Test + public void disposeAd_adManagerBanner() { + FlutterAdManagerBannerAd adManagerBannerAd = mock(FlutterAdManagerBannerAd.class); + + testManager.trackAd(adManagerBannerAd, 2); + assertNotNull(testManager.adForId(2)); + assertNotNull(testManager.adIdFor(adManagerBannerAd)); + testManager.disposeAd(2); + verify(adManagerBannerAd).dispose(); + assertNull(testManager.adForId(2)); + assertNull(testManager.adIdFor(adManagerBannerAd)); + } + + @Test + public void disposeAd_native() { + FlutterNativeAd flutterNativeAd = mock(FlutterNativeAd.class); + + testManager.trackAd(flutterNativeAd, 2); + assertNotNull(testManager.adForId(2)); + assertNotNull(testManager.adIdFor(flutterNativeAd)); + testManager.disposeAd(2); + verify(flutterNativeAd).dispose(); + assertNull(testManager.adForId(2)); + assertNull(testManager.adIdFor(flutterNativeAd)); + } + + @Test + public void flutterAdListener_onAdLoaded() { + final FlutterBannerAd bannerAd = + new FlutterBannerAd( + 0, + testManager, + "testId", + request, + new FlutterAdSize(1, 2), + mock(BannerAdCreator.class)); + testManager.trackAd(bannerAd, 0); + + AdError adError = mock(AdError.class); + doReturn(1).when(adError).getCode(); + doReturn("domain").when(adError).getDomain(); + doReturn("message").when(adError).getMessage(); + + Bundle credentials = new Bundle(); + credentials.putString("key", "value"); + + AdapterResponseInfo adapterInfo = mock(AdapterResponseInfo.class); + doReturn("adapter-class").when(adapterInfo).getAdapterClassName(); + doReturn(adError).when(adapterInfo).getAdError(); + doReturn(123L).when(adapterInfo).getLatencyMillis(); + doReturn(credentials).when(adapterInfo).getCredentials(); + doReturn("description").when(adapterInfo).toString(); + + AdapterResponseInfo adapterInfoWithNullError = mock(AdapterResponseInfo.class); + doReturn("adapter-class").when(adapterInfoWithNullError).getAdapterClassName(); + doReturn(null).when(adapterInfoWithNullError).getAdError(); + doReturn(123L).when(adapterInfoWithNullError).getLatencyMillis(); + doReturn(null).when(adapterInfoWithNullError).getCredentials(); + doReturn("description").when(adapterInfoWithNullError).toString(); + + List adapterResponses = new ArrayList<>(); + adapterResponses.add(adapterInfo); + adapterResponses.add(adapterInfoWithNullError); + + ResponseInfo responseInfo = mock(ResponseInfo.class); + doReturn("response-id").when(responseInfo).getResponseId(); + doReturn("class-name").when(responseInfo).getMediationAdapterClassName(); + doReturn(adapterResponses).when(responseInfo).getAdapterResponses(); + + testManager.onAdLoaded(0, responseInfo); + + final MethodCall call = getLastMethodCall(); + assertEquals("onAdEvent", call.method); + //noinspection rawtypes + assertThat(call.arguments, (Matcher) hasEntry("eventName", "onAdLoaded")); + //noinspection rawtypes + assertThat(call.arguments, (Matcher) hasEntry("adId", 0)); + assertThat( + call.arguments, (Matcher) hasEntry("responseInfo", new FlutterResponseInfo(responseInfo))); + } + + @Test + public void flutterAdListener_onAdLoaded_responseInfoNull() { + final FlutterBannerAd bannerAd = + new FlutterBannerAd( + 0, + testManager, + "testId", + request, + new FlutterAdSize(1, 2), + mock(BannerAdCreator.class)); + testManager.trackAd(bannerAd, 0); + + testManager.onAdLoaded(0, null); + + final MethodCall call = getLastMethodCall(); + assertEquals("onAdEvent", call.method); + //noinspection rawtypes + assertThat(call.arguments, (Matcher) hasEntry("eventName", "onAdLoaded")); + //noinspection rawtypes + assertThat(call.arguments, (Matcher) hasEntry("adId", 0)); + assertThat(call.arguments, (Matcher) hasEntry("responseInfo", null)); + } + + @Test + public void flutterAdListener_onAdFailedToLoad() { + final FlutterBannerAd bannerAd = + new FlutterBannerAd( + 0, + testManager, + "testId", + request, + new FlutterAdSize(1, 2), + mock(BannerAdCreator.class)); + testManager.trackAd(bannerAd, 0); + + testManager.onAdFailedToLoad(0, new FlutterAd.FlutterLoadAdError(1, "hi", "friend", null)); + + final MethodCall call = getLastMethodCall(); + assertEquals("onAdEvent", call.method); + //noinspection rawtypes + assertThat(call.arguments, (Matcher) hasEntry("eventName", "onAdFailedToLoad")); + //noinspection rawtypes + assertThat(call.arguments, (Matcher) hasEntry("adId", 0)); + //noinspection rawtypes + assertThat( + call.arguments, + (Matcher) + hasEntry("loadAdError", new FlutterAd.FlutterLoadAdError(1, "hi", "friend", null))); + } + + @Test + public void flutterAdListener_onAppEvent() { + final FlutterBannerAd bannerAd = + new FlutterBannerAd( + 0, + testManager, + "testId", + request, + new FlutterAdSize(1, 2), + mock(BannerAdCreator.class)); + testManager.trackAd(bannerAd, 0); + + testManager.onAppEvent(0, "color", "red"); + + final MethodCall call = getLastMethodCall(); + assertEquals("onAdEvent", call.method); + //noinspection rawtypes + assertThat(call.arguments, (Matcher) hasEntry("eventName", "onAppEvent")); + //noinspection rawtypes + assertThat(call.arguments, (Matcher) hasEntry("adId", 0)); + //noinspection rawtypes + assertThat(call.arguments, (Matcher) hasEntry("name", "color")); + //noinspection rawtypes + assertThat(call.arguments, (Matcher) hasEntry("data", "red")); + } + + @Test + public void flutterAdListener_onAdOpened() { + final FlutterBannerAd bannerAd = + new FlutterBannerAd( + 0, + testManager, + "testId", + request, + new FlutterAdSize(1, 2), + mock(BannerAdCreator.class)); + testManager.trackAd(bannerAd, 0); + + testManager.onAdOpened(0); + + final MethodCall call = getLastMethodCall(); + assertEquals("onAdEvent", call.method); + //noinspection rawtypes + assertThat(call.arguments, (Matcher) hasEntry("eventName", "onAdOpened")); + //noinspection rawtypes + assertThat(call.arguments, (Matcher) hasEntry("adId", 0)); + } + + @Test + public void flutterAdListener_onNativeAdClicked() { + final FlutterNativeAd nativeAd = + new FlutterNativeAd.Builder(ApplicationProvider.getApplicationContext()) + .setManager(testManager) + .setAdUnitId("testId") + .setRequest(request) + .setAdFactory( + new GoogleMobileAdsPlugin.NativeAdFactory() { + @Override + public NativeAdView createNativeAd( + NativeAd nativeAd, Map customOptions) { + return null; + } + }) + .setId(0) + .build(); + testManager.trackAd(nativeAd, 0); + + testManager.onAdClicked(0); + + final MethodCall call = getLastMethodCall(); + assertEquals("onAdEvent", call.method); + //noinspection rawtypes + assertThat(call.arguments, (Matcher) hasEntry("eventName", "onAdClicked")); + //noinspection rawtypes + assertThat(call.arguments, (Matcher) hasEntry("adId", 0)); + } + + @Test + public void flutterAdListener_onNativeAdImpression() { + final FlutterNativeAd nativeAd = + new FlutterNativeAd.Builder(ApplicationProvider.getApplicationContext()) + .setManager(testManager) + .setAdUnitId("testId") + .setRequest(request) + .setAdFactory( + new GoogleMobileAdsPlugin.NativeAdFactory() { + @Override + public NativeAdView createNativeAd( + NativeAd nativeAd, Map customOptions) { + return null; + } + }) + .setId(0) + .build(); + testManager.trackAd(nativeAd, 0); + + testManager.onAdImpression(0); + + final MethodCall call = getLastMethodCall(); + assertEquals("onAdEvent", call.method); + //noinspection rawtypes + assertThat(call.arguments, (Matcher) hasEntry("eventName", "onAdImpression")); + //noinspection rawtypes + assertThat(call.arguments, (Matcher) hasEntry("adId", 0)); + } + + @Test + public void flutterAdListener_onAdClosed() { + final FlutterBannerAd bannerAd = + new FlutterBannerAd( + 0, + testManager, + "testId", + request, + new FlutterAdSize(1, 2), + mock(BannerAdCreator.class)); + testManager.trackAd(bannerAd, 0); + + testManager.onAdClosed(0); + + final MethodCall call = getLastMethodCall(); + assertEquals("onAdEvent", call.method); + //noinspection rawtypes + assertThat(call.arguments, (Matcher) hasEntry("eventName", "onAdClosed")); + //noinspection rawtypes + assertThat(call.arguments, (Matcher) hasEntry("adId", 0)); + } + + @Test + public void flutterAdListener_onRewardedAdUserEarnedReward() { + FlutterAdLoader mockFlutterAdLoader = mock(FlutterAdLoader.class); + final FlutterRewardedAd ad = + new FlutterRewardedAd(0, testManager, "testId", request, mockFlutterAdLoader); + testManager.trackAd(ad, 0); + + testManager.onRewardedAdUserEarnedReward( + 0, new FlutterRewardedAd.FlutterRewardItem(23, "coins")); + + final MethodCall call = getLastMethodCall(); + assertEquals("onAdEvent", call.method); + //noinspection rawtypes + assertThat(call.arguments, (Matcher) hasEntry("eventName", "onRewardedAdUserEarnedReward")); + //noinspection rawtypes + assertThat(call.arguments, (Matcher) hasEntry("adId", 0)); + //noinspection rawtypes + assertThat( + call.arguments, + (Matcher) hasEntry("rewardItem", new FlutterRewardedAd.FlutterRewardItem(23, "coins"))); + } + + @Test + public void internalInitDisposesAds() { + // Set up testManager so that two ads have already been loaded and tracked. + final FlutterRewardedAd rewarded = mock(FlutterRewardedAd.class); + final FlutterBannerAd banner = mock(FlutterBannerAd.class); + + testManager.trackAd(rewarded, 0); + testManager.trackAd(banner, 1); + + assertEquals(testManager.adIdFor(rewarded), (Integer) 0); + assertEquals(testManager.adIdFor(banner), (Integer) 1); + assertEquals(testManager.adForId(0), rewarded); + assertEquals(testManager.adForId(1), banner); + + // Check that ads are removed and disposed when "_init" is called. + AdInstanceManager testManagerSpy = spy(testManager); + GoogleMobileAdsPlugin plugin = + new GoogleMobileAdsPlugin( + mockFlutterPluginBinding, testManagerSpy, new FlutterMobileAdsWrapper()); + Result result = mock(Result.class); + MethodCall methodCall = new MethodCall("_init", null); + plugin.onMethodCall(methodCall, result); + + verify(testManagerSpy).disposeAllAds(); + verify(result).success(null); + verify(rewarded).dispose(); + verify(banner).dispose(); + assertNull(testManager.adForId(0)); + assertNull(testManager.adForId(1)); + assertNull(testManager.adIdFor(rewarded)); + assertNull(testManager.adIdFor(banner)); + } + + @Test + public void initializeCallbackInvokedTwice() { + AdInstanceManager testManagerSpy = spy(testManager); + FlutterMobileAdsWrapper mockMobileAds = mock(FlutterMobileAdsWrapper.class); + GoogleMobileAdsPlugin plugin = + new GoogleMobileAdsPlugin(mockFlutterPluginBinding, testManagerSpy, mockMobileAds); + final InitializationStatus mockInitStatus = mock(InitializationStatus.class); + doAnswer( + new Answer() { + @Override + public Object answer(InvocationOnMock invocation) { + // Invoke init listener twice. + OnInitializationCompleteListener listener = invocation.getArgument(1); + listener.onInitializationComplete(mockInitStatus); + listener.onInitializationComplete(mockInitStatus); + return null; + } + }) + .when(mockMobileAds) + .initialize( + ArgumentMatchers.any(Context.class), + ArgumentMatchers.any(OnInitializationCompleteListener.class)); + + MethodCall methodCall = new MethodCall("MobileAds#initialize", null); + Result result = mock(Result.class); + plugin.onMethodCall(methodCall, result); + + verify(result).success(ArgumentMatchers.any(FlutterInitializationStatus.class)); + } + + @Test + public void openAdInspector_error() { + AdInstanceManager testManagerSpy = spy(testManager); + FlutterMobileAdsWrapper mockMobileAds = mock(FlutterMobileAdsWrapper.class); + GoogleMobileAdsPlugin plugin = + new GoogleMobileAdsPlugin(mockFlutterPluginBinding, testManagerSpy, mockMobileAds); + + doAnswer( + invocation -> { + OnAdInspectorClosedListener listener = invocation.getArgument(1); + final AdInspectorError error = mock(AdInspectorError.class); + doReturn(1).when(error).getCode(); + doReturn("domain").when(error).getDomain(); + doReturn("message").when(error).getMessage(); + listener.onAdInspectorClosed(error); + return null; + }) + .when(mockMobileAds) + .openAdInspector( + ArgumentMatchers.any(Context.class), + ArgumentMatchers.any(OnAdInspectorClosedListener.class)); + + MethodCall methodCall = new MethodCall("MobileAds#openAdInspector", null); + Result result = mock(Result.class); + plugin.onMethodCall(methodCall, result); + + verify(result).error(eq("1"), eq("message"), eq("domain")); + } + + @Test + public void openAdInspector_success() { + AdInstanceManager testManagerSpy = spy(testManager); + FlutterMobileAdsWrapper mockMobileAds = mock(FlutterMobileAdsWrapper.class); + GoogleMobileAdsPlugin plugin = + new GoogleMobileAdsPlugin(mockFlutterPluginBinding, testManagerSpy, mockMobileAds); + + doAnswer( + invocation -> { + OnAdInspectorClosedListener listener = invocation.getArgument(1); + listener.onAdInspectorClosed(null); + return null; + }) + .when(mockMobileAds) + .openAdInspector( + ArgumentMatchers.any(Context.class), + ArgumentMatchers.any(OnAdInspectorClosedListener.class)); + + MethodCall methodCall = new MethodCall("MobileAds#openAdInspector", null); + Result result = mock(Result.class); + plugin.onMethodCall(methodCall, result); + + verify(result).success(null); + } + + @Test + public void registerWebView() { + AdInstanceManager testManagerSpy = spy(testManager); + FlutterMobileAdsWrapper mockMobileAds = mock(FlutterMobileAdsWrapper.class); + GoogleMobileAdsPlugin plugin = + new GoogleMobileAdsPlugin(mockFlutterPluginBinding, testManagerSpy, mockMobileAds); + + MethodCall methodCall = + new MethodCall("MobileAds#registerWebView", Collections.singletonMap("webViewId", 1)); + Result result = mock(Result.class); + plugin.onMethodCall(methodCall, result); + + verify(result).success(null); + } + + @Test + public void testPluginUsesActivityWhenAvailable() { + FlutterMobileAdsWrapper flutterMobileAdsWrapper = mock(FlutterMobileAdsWrapper.class); + BinaryMessenger mockBinaryMessenger = mock(BinaryMessenger.class); + doReturn(ApplicationProvider.getApplicationContext()) + .when(mockFlutterPluginBinding) + .getApplicationContext(); + doReturn(mockBinaryMessenger).when(mockFlutterPluginBinding).getBinaryMessenger(); + PlatformViewRegistry mockPlatformViewRegistry = mock(PlatformViewRegistry.class); + + doReturn(mockPlatformViewRegistry).when(mockFlutterPluginBinding).getPlatformViewRegistry(); + + GoogleMobileAdsPlugin plugin = new GoogleMobileAdsPlugin(null, null, flutterMobileAdsWrapper); + plugin.onAttachedToEngine(mockFlutterPluginBinding); + + MethodCall methodCall = new MethodCall("MobileAds#initialize", null); + Result result = mock(Result.class); + plugin.onMethodCall(methodCall, result); + + // Check that we use application context if activity is not available. + verify(flutterMobileAdsWrapper) + .initialize(eq(ApplicationProvider.getApplicationContext()), any()); + + // Activity should be used instead of application context + ActivityPluginBinding activityPluginBinding = mock(ActivityPluginBinding.class); + doReturn(mockActivity).when(activityPluginBinding).getActivity(); + plugin.onAttachedToActivity(activityPluginBinding); + + plugin.onMethodCall(methodCall, result); + + verify(flutterMobileAdsWrapper).initialize(eq(mockActivity), any()); + } + + @Test + public void testGetRequestConfiguration() { + AdInstanceManager testManagerSpy = spy(testManager); + FlutterMobileAdsWrapper mockMobileAds = mock(FlutterMobileAdsWrapper.class); + GoogleMobileAdsPlugin plugin = + new GoogleMobileAdsPlugin(mockFlutterPluginBinding, testManagerSpy, mockMobileAds); + RequestConfiguration.Builder rcb = new RequestConfiguration.Builder(); + rcb.setMaxAdContentRating(RequestConfiguration.MAX_AD_CONTENT_RATING_MA); + rcb.setTagForChildDirectedTreatment(RequestConfiguration.TAG_FOR_CHILD_DIRECTED_TREATMENT_TRUE); + rcb.setTagForUnderAgeOfConsent(RequestConfiguration.TAG_FOR_UNDER_AGE_OF_CONSENT_TRUE); + rcb.setTestDeviceIds(new ArrayList(Arrays.asList("id1", "id2"))); + RequestConfiguration rc = rcb.build(); + doReturn(rc).when(mockMobileAds).getRequestConfiguration(); + + MethodCall methodCall = new MethodCall("MobileAds#getRequestConfiguration", null); + Result result = mock(Result.class); + plugin.onMethodCall(methodCall, result); + + verify(result).success(rc); + } + + @Test(expected = IllegalArgumentException.class) + public void trackAdThrowsErrorForDuplicateId() { + final FlutterBannerAd banner = mock(FlutterBannerAd.class); + testManager.trackAd(banner, 0); + testManager.trackAd(banner, 0); + } + + @Test + public void testOnPaidEvent() { + final FlutterBannerAd banner = mock(FlutterBannerAd.class); + final FlutterAdValue flutterAdValue = new FlutterAdValue(1, "code", 1L); + testManager.trackAd(banner, 1); + testManager.onPaidEvent(banner, flutterAdValue); + final MethodCall call = getLastMethodCall(); + assertEquals("onAdEvent", call.method); + //noinspection rawtypes + Map args = (Map) call.arguments; + assertEquals(args.get("eventName"), "onPaidEvent"); + assertEquals(args.get("adId"), 1); + assertEquals(args.get("valueMicros"), 1L); + assertEquals(args.get("precision"), 1); + assertEquals(args.get("currencyCode"), "code"); + } + + @Test + public void testSetAppMuted() { + AdInstanceManager testManagerSpy = spy(testManager); + FlutterMobileAdsWrapper mockMobileAds = mock(FlutterMobileAdsWrapper.class); + GoogleMobileAdsPlugin plugin = + new GoogleMobileAdsPlugin(mockFlutterPluginBinding, testManagerSpy, mockMobileAds); + + // Create a map for passing arguments to the MethodCall + HashMap trueArguments = new HashMap<>(); + trueArguments.put("muted", true); + + // Invoke the setAppMuted method with the arguments. + MethodCall methodCall = new MethodCall("MobileAds#setAppMuted", trueArguments); + Result result = mock(Result.class); + plugin.onMethodCall(methodCall, result); + + // Verify that mockMobileAds.setAppMuted() was called with the correct value. + verify(mockMobileAds).setAppMuted(eq(true)); + + // Create a map for passing arguments to the MethodCall + HashMap falseArguments = new HashMap<>(); + falseArguments.put("muted", false); + + // Invoke the setAppMuted method with the arguments. + MethodCall falseMethodCall = new MethodCall("MobileAds#setAppMuted", falseArguments); + Result falseResult = mock(Result.class); + plugin.onMethodCall(falseMethodCall, falseResult); + + // Verify that mockMobileAds.setAppMuted() was called with the correct value. + verify(mockMobileAds).setAppMuted(eq(false)); + } + + @Test + public void testSetAppVolume() { + AdInstanceManager testManagerSpy = spy(testManager); + FlutterMobileAdsWrapper mockMobileAds = mock(FlutterMobileAdsWrapper.class); + GoogleMobileAdsPlugin plugin = + new GoogleMobileAdsPlugin(mockFlutterPluginBinding, testManagerSpy, mockMobileAds); + + // Create a map for passing arguments to the MethodCall. + HashMap fullVolumeArguments = new HashMap<>(); + fullVolumeArguments.put("volume", 1.0); + + // Invoke the setAppVolume method with the arguments. + MethodCall methodCall = new MethodCall("MobileAds#setAppVolume", fullVolumeArguments); + Result result = mock(Result.class); + plugin.onMethodCall(methodCall, result); + + // Verify that mockMobileAds.setAppVolume() was called with the correct value. + verify(mockMobileAds).setAppVolume(eq(1.0)); + } + + @Test + public void testDisableMediationInitialization() { + AdInstanceManager testManagerSpy = spy(testManager); + FlutterMobileAdsWrapper mockMobileAds = mock(FlutterMobileAdsWrapper.class); + GoogleMobileAdsPlugin plugin = + new GoogleMobileAdsPlugin(mockFlutterPluginBinding, testManagerSpy, mockMobileAds); + // Invoke the disableMediationInitialization method. + MethodCall methodCall = new MethodCall("MobileAds#disableMediationInitialization", null); + Result result = mock(Result.class); + plugin.onMethodCall(methodCall, result); + + Robolectric.flushForegroundThreadScheduler(); + // Verify that mockMobileAds.disableMediationInitialization() was called. + verify(mockMobileAds).disableMediationInitialization(ArgumentMatchers.any(Context.class)); + } + + @Test + public void testGetVersionString() { + AdInstanceManager testManagerSpy = spy(testManager); + FlutterMobileAdsWrapper mockMobileAds = mock(FlutterMobileAdsWrapper.class); + GoogleMobileAdsPlugin plugin = + new GoogleMobileAdsPlugin(mockFlutterPluginBinding, testManagerSpy, mockMobileAds); + // Stub getVersionString() to return a value. + doReturn("Test-SDK-Version").when(mockMobileAds).getVersionString(); + + // Invoke the getVersionString method. + MethodCall methodCall = new MethodCall("MobileAds#getVersionString", null); + Result result = mock(Result.class); + plugin.onMethodCall(methodCall, result); + + // Verify that mockMobileAds.getVersionString() was called and a value is returned. + verify(mockMobileAds).getVersionString(); + verify(result).success("Test-SDK-Version"); + } + + @Test + public void testOpenDebugMenu() { + AdInstanceManager testManagerSpy = spy(testManager); + FlutterMobileAdsWrapper mockMobileAds = mock(FlutterMobileAdsWrapper.class); + GoogleMobileAdsPlugin plugin = + new GoogleMobileAdsPlugin(mockFlutterPluginBinding, testManagerSpy, mockMobileAds); + MethodCall methodCall = + new MethodCall( + "MobileAds#openDebugMenu", Collections.singletonMap("adUnitId", "test-ad-unit")); + Result result = mock(Result.class); + + plugin.onMethodCall(methodCall, result); + + verify(mockMobileAds).openDebugMenu(eq(mockActivity), eq("test-ad-unit")); + verify(result).success(isNull()); + } + + @Test + public void testGetAnchoredAdaptiveBannerAdSize() { + // Setup mocks + AdInstanceManager testManagerSpy = spy(testManager); + FlutterMobileAdsWrapper mockMobileAds = mock(FlutterMobileAdsWrapper.class); + GoogleMobileAdsPlugin plugin = + new GoogleMobileAdsPlugin(mockFlutterPluginBinding, testManagerSpy, mockMobileAds); + + BinaryMessenger mockBinaryMessenger = mock(BinaryMessenger.class); + FlutterPluginBinding mockActivityPluginBinding = mock(FlutterPluginBinding.class); + PlatformViewRegistry mockPlatformViewRegistry = mock(PlatformViewRegistry.class); + + Context context = ApplicationProvider.getApplicationContext(); + + doReturn(context).when(mockActivityPluginBinding).getApplicationContext(); + doReturn(mockBinaryMessenger).when(mockActivityPluginBinding).getBinaryMessenger(); + doReturn(mockPlatformViewRegistry).when(mockActivityPluginBinding).getPlatformViewRegistry(); + + plugin.onAttachedToEngine(mockActivityPluginBinding); + + // Test for portrait Banner AdSize. + HashMap arguments = new HashMap<>(); + arguments.put("orientation", "portrait"); + arguments.put("width", 23); + + AdSize adSize = AdSize.getPortraitAnchoredAdaptiveBannerAdSize(context, 23); + MethodCall methodCall = new MethodCall("AdSize#getAnchoredAdaptiveBannerAdSize", arguments); + Result result = mock(Result.class); + plugin.onMethodCall(methodCall, result); + + verify(result).success(adSize.getHeight()); + + adSize = AdSize.getLargePortraitAnchoredAdaptiveBannerAdSize(context, 23); + methodCall = new MethodCall("AdSize#getLargeAnchoredAdaptiveBannerAdSize", arguments); + result = mock(Result.class); + plugin.onMethodCall(methodCall, result); + + verify(result).success(adSize.getHeight()); + + // Test for landscape Banner AdSize. + arguments = new HashMap<>(); + arguments.put("orientation", "landscape"); + arguments.put("width", 23); + + adSize = AdSize.getLandscapeAnchoredAdaptiveBannerAdSize(context, 23); + methodCall = new MethodCall("AdSize#getAnchoredAdaptiveBannerAdSize", arguments); + result = mock(Result.class); + plugin.onMethodCall(methodCall, result); + + verify(result).success(adSize.getHeight()); + + adSize = AdSize.getLargeLandscapeAnchoredAdaptiveBannerAdSize(context, 23); + methodCall = new MethodCall("AdSize#getLargeAnchoredAdaptiveBannerAdSize", arguments); + result = mock(Result.class); + plugin.onMethodCall(methodCall, result); + + verify(result).success(adSize.getHeight()); + + // Test for current orientation (inferred) Banner AdSize. + arguments = new HashMap<>(); + arguments.put("width", 23); + + adSize = AdSize.getCurrentOrientationAnchoredAdaptiveBannerAdSize(context, 23); + methodCall = new MethodCall("AdSize#getAnchoredAdaptiveBannerAdSize", arguments); + result = mock(Result.class); + plugin.onMethodCall(methodCall, result); + + verify(result).success(adSize.getHeight()); + + adSize = AdSize.getLargeAnchoredAdaptiveBannerAdSize(context, 23); + methodCall = new MethodCall("AdSize#getLargeAnchoredAdaptiveBannerAdSize", arguments); + result = mock(Result.class); + plugin.onMethodCall(methodCall, result); + + verify(result).success(adSize.getHeight()); + } + + public void testGetAdSize_bannerAd() { + // Setup mocks + AdInstanceManager testManagerSpy = spy(testManager); + FlutterMobileAdsWrapper mockMobileAds = mock(FlutterMobileAdsWrapper.class); + GoogleMobileAdsPlugin plugin = + new GoogleMobileAdsPlugin(mockFlutterPluginBinding, testManagerSpy, mockMobileAds); + GoogleMobileAdsPlugin pluginSpy = spy(plugin); + BannerAdCreator bannerAdCreator = mock(BannerAdCreator.class); + AdView adView = mock(AdView.class); + doReturn(adView).when(bannerAdCreator).createAdView(); + doReturn(bannerAdCreator) + .when(pluginSpy) + .getBannerAdCreator(ArgumentMatchers.any(Context.class)); + + // Load a banner ad + Map loadArgs = new HashMap<>(); + loadArgs.put("adId", 1); + loadArgs.put("adUnitId", "test-ad-unit"); + loadArgs.put("request", new FlutterAdRequest.Builder().build()); + loadArgs.put("size", new FlutterAdSize(1, 2)); + + MethodCall loadBannerMethodCall = new MethodCall("loadBannerAd", loadArgs); + Result result = mock(Result.class); + pluginSpy.onMethodCall(loadBannerMethodCall, result); + verify(result).success(null); + + // Mock response for adView.getAdSize(); + AdSize adSize = mock(AdSize.class); + doReturn(adSize).when(adView).getAdSize(); + + // Method call for getAdSize. + Result getAdSizeResult = mock(Result.class); + Map getAdSizeArgs = Collections.singletonMap("adId", (Object) 1); + MethodCall getAdSizeMethodCall = new MethodCall("getAdSize", getAdSizeArgs); + pluginSpy.onMethodCall(getAdSizeMethodCall, getAdSizeResult); + + ArgumentCaptor argumentCaptor = ArgumentCaptor.forClass(FlutterAdSize.class); + verify(getAdSizeResult).success(argumentCaptor.capture()); + assertEquals(argumentCaptor.getValue().getAdSize(), adSize); + } + + @Test + public void testGetAdSize_adManagerBannerAd() { + // Setup mocks + AdInstanceManager testManagerSpy = spy(testManager); + FlutterMobileAdsWrapper mockMobileAds = mock(FlutterMobileAdsWrapper.class); + GoogleMobileAdsPlugin plugin = + new GoogleMobileAdsPlugin(mockFlutterPluginBinding, testManagerSpy, mockMobileAds); + GoogleMobileAdsPlugin pluginSpy = spy(plugin); + BannerAdCreator bannerAdCreator = mock(BannerAdCreator.class); + AdManagerAdView adView = mock(AdManagerAdView.class); + doReturn(adView).when(bannerAdCreator).createAdManagerAdView(); + doReturn(bannerAdCreator) + .when(pluginSpy) + .getBannerAdCreator(ArgumentMatchers.any(Context.class)); + + // Load a banner ad + Map loadArgs = new HashMap<>(); + loadArgs.put("adId", 1); + loadArgs.put("adUnitId", "test-ad-unit"); + loadArgs.put("request", new FlutterAdManagerAdRequest.Builder().build()); + loadArgs.put("sizes", Collections.singletonList(new FlutterAdSize(1, 2))); + + MethodCall loadBannerMethodCall = new MethodCall("loadAdManagerBannerAd", loadArgs); + Result result = mock(Result.class); + pluginSpy.onMethodCall(loadBannerMethodCall, result); + verify(result).success(null); + + // Mock response for adView.getAdSize(); + AdSize adSize = mock(AdSize.class); + doReturn(adSize).when(adView).getAdSize(); + + // Method call for getAdSize. + Result getAdSizeResult = mock(Result.class); + Map getAdSizeArgs = Collections.singletonMap("adId", (Object) 1); + MethodCall getAdSizeMethodCall = new MethodCall("getAdSize", getAdSizeArgs); + pluginSpy.onMethodCall(getAdSizeMethodCall, getAdSizeResult); + + ArgumentCaptor argumentCaptor = ArgumentCaptor.forClass(FlutterAdSize.class); + verify(getAdSizeResult).success(argumentCaptor.capture()); + assertEquals(argumentCaptor.getValue().getAdSize(), adSize); + } + + @Test + public void testAppStateNotifyDetachFromEngine() { + AppStateNotifier notifier = mock(AppStateNotifier.class); + GoogleMobileAdsPlugin plugin = new GoogleMobileAdsPlugin(notifier); + plugin.onDetachedFromEngine(null); + verify(notifier).stop(); + } + + @Test + public void testServerSideVerificationOptions_rewardedAd() { + // Setup mocks + AdInstanceManager mockManager = mock(AdInstanceManager.class); + FlutterMobileAdsWrapper mockMobileAds = mock(FlutterMobileAdsWrapper.class); + GoogleMobileAdsPlugin plugin = + new GoogleMobileAdsPlugin(mockFlutterPluginBinding, mockManager, mockMobileAds); + GoogleMobileAdsPlugin pluginSpy = spy(plugin); + + // Pretend that a rewarded ad has already been loaded with id 1 + FlutterRewardedAd mockRewardedAd = mock(FlutterRewardedAd.class); + doReturn(mockRewardedAd).when(mockManager).adForId(1); + + // Make a ssv method call + Map loadArgs = new HashMap<>(); + loadArgs.put("adId", 1); + FlutterServerSideVerificationOptions mockFlutterSsv = + mock(FlutterServerSideVerificationOptions.class); + loadArgs.put("serverSideVerificationOptions", mockFlutterSsv); + + // Successful call + MethodCall methodCall = new MethodCall("setServerSideVerificationOptions", loadArgs); + Result result = mock(Result.class); + pluginSpy.onMethodCall(methodCall, result); + + verify(mockRewardedAd).setServerSideVerificationOptions(eq(mockFlutterSsv)); + verify(result).success(null); + } + + @Test + public void testServerSideVerificationOptions_rewardedInterstitialAd() { + // Setup mocks + AdInstanceManager mockManager = mock(AdInstanceManager.class); + FlutterMobileAdsWrapper mockMobileAds = mock(FlutterMobileAdsWrapper.class); + GoogleMobileAdsPlugin plugin = + new GoogleMobileAdsPlugin(mockFlutterPluginBinding, mockManager, mockMobileAds); + GoogleMobileAdsPlugin pluginSpy = spy(plugin); + + // Pretend that a rewarded interstitial ad has already been loaded with id 1 + FlutterRewardedInterstitialAd mockAd = mock(FlutterRewardedInterstitialAd.class); + doReturn(mockAd).when(mockManager).adForId(1); + + // Make a ssv method call + Map loadArgs = new HashMap<>(); + loadArgs.put("adId", 1); + FlutterServerSideVerificationOptions mockFlutterSsv = + mock(FlutterServerSideVerificationOptions.class); + loadArgs.put("serverSideVerificationOptions", mockFlutterSsv); + + // Successful call + MethodCall methodCall = new MethodCall("setServerSideVerificationOptions", loadArgs); + Result result = mock(Result.class); + pluginSpy.onMethodCall(methodCall, result); + + verify(mockAd).setServerSideVerificationOptions(eq(mockFlutterSsv)); + verify(result).success(null); + } + + @Test + public void testServerSideVerificationOptions_invalidAdId() { + // Setup mocks + AdInstanceManager mockManager = mock(AdInstanceManager.class); + FlutterMobileAdsWrapper mockMobileAds = mock(FlutterMobileAdsWrapper.class); + GoogleMobileAdsPlugin plugin = + new GoogleMobileAdsPlugin(mockFlutterPluginBinding, mockManager, mockMobileAds); + GoogleMobileAdsPlugin pluginSpy = spy(plugin); + + // AdId matches a banner ad instead of rewarded or rewarded interstitial + FlutterBannerAd mockAd = mock(FlutterBannerAd.class); + doReturn(mockAd).when(mockManager).adForId(1); + + // Make a ssv method call without any ads having loaded + Map loadArgs = new HashMap<>(); + loadArgs.put("adId", 1); + FlutterServerSideVerificationOptions mockFlutterSsv = + mock(FlutterServerSideVerificationOptions.class); + loadArgs.put("serverSideVerificationOptions", mockFlutterSsv); + + // Successful call + MethodCall methodCall = new MethodCall("setServerSideVerificationOptions", loadArgs); + Result result = mock(Result.class); + pluginSpy.onMethodCall(methodCall, result); + + // result.success() still invoked, resulting in no-op + verifyNoInteractions(mockAd); + verify(result).success(null); + } + + @Test + public void testServerSideVerificationOptions_invalidAdType() { + // Setup mocks + AdInstanceManager mockManager = mock(AdInstanceManager.class); + FlutterMobileAdsWrapper mockMobileAds = mock(FlutterMobileAdsWrapper.class); + GoogleMobileAdsPlugin plugin = + new GoogleMobileAdsPlugin(mockFlutterPluginBinding, mockManager, mockMobileAds); + GoogleMobileAdsPlugin pluginSpy = spy(plugin); + + // Make a ssv method call without any ads having loaded + Map loadArgs = new HashMap<>(); + loadArgs.put("adId", 1); + FlutterServerSideVerificationOptions mockFlutterSsv = + mock(FlutterServerSideVerificationOptions.class); + loadArgs.put("serverSideVerificationOptions", mockFlutterSsv); + + // Successful call + MethodCall methodCall = new MethodCall("setServerSideVerificationOptions", loadArgs); + Result result = mock(Result.class); + pluginSpy.onMethodCall(methodCall, result); + + // result.success() still invoked, resulting in no-op + verify(result).success(null); + } +} diff --git a/mih_ui/android/build/ios/SourcePackages/google_mobile_ads-8.0.0/android/src/test/java/io/flutter/plugins/googlemobileads/nativetemplates/FlutterNativeTemplateFontStyleTest.java b/mih_ui/android/build/ios/SourcePackages/google_mobile_ads-8.0.0/android/src/test/java/io/flutter/plugins/googlemobileads/nativetemplates/FlutterNativeTemplateFontStyleTest.java new file mode 100644 index 00000000..e14929ef --- /dev/null +++ b/mih_ui/android/build/ios/SourcePackages/google_mobile_ads-8.0.0/android/src/test/java/io/flutter/plugins/googlemobileads/nativetemplates/FlutterNativeTemplateFontStyleTest.java @@ -0,0 +1,40 @@ +// Copyright 2023 Google LLC +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// https://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +package io.flutter.plugins.googlemobileads.nativetemplates; + +import static org.junit.Assert.assertEquals; + +import org.junit.Test; +import org.junit.runner.RunWith; +import org.robolectric.RobolectricTestRunner; + +/** Tests for {@link FlutterNativeTemplateFontStyle}. */ +@RunWith(RobolectricTestRunner.class) +public class FlutterNativeTemplateFontStyleTest { + + @Test + public void testFromIntValue() { + for (int i = 0; i < FlutterNativeTemplateFontStyle.values().length; i++) { + FlutterNativeTemplateFontStyle style = FlutterNativeTemplateFontStyle.fromIntValue(i); + assertEquals(style, FlutterNativeTemplateFontStyle.values()[i]); + } + } + + @Test + public void testFromIntValue_unknownValue() { + FlutterNativeTemplateFontStyle type = FlutterNativeTemplateFontStyle.fromIntValue(-1); + assertEquals(type, FlutterNativeTemplateFontStyle.NORMAL); + } +} diff --git a/mih_ui/android/build/ios/SourcePackages/google_mobile_ads-8.0.0/android/src/test/java/io/flutter/plugins/googlemobileads/nativetemplates/FlutterNativeTemplateStyleTest.java b/mih_ui/android/build/ios/SourcePackages/google_mobile_ads-8.0.0/android/src/test/java/io/flutter/plugins/googlemobileads/nativetemplates/FlutterNativeTemplateStyleTest.java new file mode 100644 index 00000000..b0826c58 --- /dev/null +++ b/mih_ui/android/build/ios/SourcePackages/google_mobile_ads-8.0.0/android/src/test/java/io/flutter/plugins/googlemobileads/nativetemplates/FlutterNativeTemplateStyleTest.java @@ -0,0 +1,215 @@ +// Copyright 2023 Google LLC +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// https://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +package io.flutter.plugins.googlemobileads.nativetemplates; + +import static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertNull; +import static org.mockito.ArgumentMatchers.anyInt; +import static org.mockito.ArgumentMatchers.eq; +import static org.mockito.ArgumentMatchers.isNull; +import static org.mockito.Mockito.doReturn; +import static org.mockito.Mockito.mock; +import static org.mockito.Mockito.spy; +import static org.mockito.Mockito.verify; + +import android.content.Context; +import android.graphics.Color; +import android.graphics.Typeface; +import android.graphics.drawable.ColorDrawable; +import android.view.LayoutInflater; +import com.google.android.ads.nativetemplates.NativeTemplateStyle; +import com.google.android.ads.nativetemplates.TemplateView; +import org.junit.Before; +import org.junit.Test; +import org.junit.runner.RunWith; +import org.robolectric.RobolectricTestRunner; + +/** Tests for {@link FlutterNativeTemplateStyle}. */ +@RunWith(RobolectricTestRunner.class) +public class FlutterNativeTemplateStyleTest { + + private Context mockContext = mock(Context.class); + private LayoutInflater mockLayoutInflater = mock(LayoutInflater.class); + private TemplateView mockTemplateView = mock(TemplateView.class); + + @Before + public void setup() { + doReturn(mockLayoutInflater) + .when(mockContext) + .getSystemService(eq(Context.LAYOUT_INFLATER_SERVICE)); + doReturn(mockTemplateView).when(mockLayoutInflater).inflate(anyInt(), isNull()); + } + + @Test + public void testAsTemplateView_noStylesDefined() { + FlutterNativeTemplateStyle flutterNativeTemplateStyle = + new FlutterNativeTemplateStyle( + FlutterNativeTemplateType.MEDIUM, null, null, null, null, null); + + FlutterNativeTemplateStyle spy = spy(flutterNativeTemplateStyle); + NativeTemplateStyle mockNativeTemplateStyle = mock(NativeTemplateStyle.class); + doReturn(mockNativeTemplateStyle).when(spy).asNativeTemplateStyle(); + + TemplateView templateView = spy.asTemplateView(mockContext); + + verify(mockLayoutInflater).inflate(eq(FlutterNativeTemplateType.MEDIUM.resourceId()), isNull()); + verify(mockTemplateView).setStyles(eq(mockNativeTemplateStyle)); + assertEquals(templateView, mockTemplateView); + } + + @Test + public void testAsTemplateView_stylesDefined() { + ColorDrawable mainBackgroundColor = new ColorDrawable(Color.argb(1, 2, 3, 4)); + FlutterNativeTemplateTextStyle ctaStyle = mock(FlutterNativeTemplateTextStyle.class); + FlutterNativeTemplateTextStyle primaryStyle = mock(FlutterNativeTemplateTextStyle.class); + FlutterNativeTemplateTextStyle secondaryStyle = mock(FlutterNativeTemplateTextStyle.class); + FlutterNativeTemplateTextStyle tertiaryStyle = mock(FlutterNativeTemplateTextStyle.class); + + FlutterNativeTemplateStyle flutterNativeTemplateStyle = + new FlutterNativeTemplateStyle( + FlutterNativeTemplateType.SMALL, + mainBackgroundColor, + ctaStyle, + primaryStyle, + secondaryStyle, + tertiaryStyle); + + FlutterNativeTemplateStyle spy = spy(flutterNativeTemplateStyle); + NativeTemplateStyle mockNativeTemplateStyle = mock(NativeTemplateStyle.class); + doReturn(mockNativeTemplateStyle).when(spy).asNativeTemplateStyle(); + + TemplateView templateView = spy.asTemplateView(mockContext); + + verify(mockLayoutInflater).inflate(eq(FlutterNativeTemplateType.SMALL.resourceId()), isNull()); + verify(mockTemplateView).setStyles(eq(mockNativeTemplateStyle)); + assertEquals(templateView, mockTemplateView); + } + + @Test + public void testAsNativeTemplateStyle_noStylesDefined() { + FlutterNativeTemplateStyle flutterNativeTemplateStyle = + new FlutterNativeTemplateStyle( + FlutterNativeTemplateType.MEDIUM, null, null, null, null, null); + + NativeTemplateStyle templateStyle = flutterNativeTemplateStyle.asNativeTemplateStyle(); + + // Values should match that of an empty template style with the same type + NativeTemplateStyle defaultStyle = new NativeTemplateStyle.Builder().build(); + assertEquals(templateStyle.getMainBackgroundColor(), defaultStyle.getMainBackgroundColor()); + assertEquals( + templateStyle.getCallToActionBackgroundColor(), + defaultStyle.getCallToActionBackgroundColor()); + assertEquals( + templateStyle.getCallToActionTextSize(), defaultStyle.getCallToActionTextSize(), 0); + assertEquals( + templateStyle.getCallToActionTextTypeface(), defaultStyle.getCallToActionTextTypeface()); + assertEquals( + templateStyle.getCallToActionTypefaceColor(), defaultStyle.getCallToActionTypefaceColor()); + assertEquals( + templateStyle.getPrimaryTextBackgroundColor(), + defaultStyle.getPrimaryTextBackgroundColor()); + assertEquals(templateStyle.getPrimaryTextSize(), defaultStyle.getPrimaryTextSize(), 0); + assertEquals(templateStyle.getPrimaryTextTypeface(), defaultStyle.getPrimaryTextTypeface()); + assertEquals( + templateStyle.getPrimaryTextTypefaceColor(), defaultStyle.getPrimaryTextTypefaceColor()); + assertEquals( + templateStyle.getSecondaryTextBackgroundColor(), + defaultStyle.getSecondaryTextBackgroundColor()); + assertEquals(templateStyle.getSecondaryTextSize(), defaultStyle.getSecondaryTextSize(), 0); + assertEquals(templateStyle.getSecondaryTextTypeface(), defaultStyle.getSecondaryTextTypeface()); + assertEquals( + templateStyle.getSecondaryTextTypefaceColor(), + defaultStyle.getSecondaryTextTypefaceColor()); + assertEquals( + templateStyle.getTertiaryTextBackgroundColor(), + defaultStyle.getTertiaryTextBackgroundColor()); + assertEquals(templateStyle.getTertiaryTextSize(), defaultStyle.getTertiaryTextSize(), 0); + assertEquals(templateStyle.getTertiaryTextTypeface(), defaultStyle.getTertiaryTextTypeface()); + assertEquals( + templateStyle.getTertiaryTextTypefaceColor(), defaultStyle.getTertiaryTextTypefaceColor()); + } + + @Test + public void testAsNativeTemplateStyle_stylesDefined() { + ColorDrawable mainBackgroundColor = new ColorDrawable(Color.argb(1, 2, 3, 4)); + FlutterNativeTemplateTextStyle ctaStyle = mock(FlutterNativeTemplateTextStyle.class); + doReturn(new ColorDrawable(Color.MAGENTA)).when(ctaStyle).getBackgroundColor(); + doReturn(new ColorDrawable(Color.LTGRAY)).when(ctaStyle).getTextColor(); + doReturn(null).when(ctaStyle).getFontStyle(); + doReturn(100f).when(ctaStyle).getSize(); + + FlutterNativeTemplateTextStyle primaryStyle = mock(FlutterNativeTemplateTextStyle.class); + doReturn(new ColorDrawable(Color.BLUE)).when(primaryStyle).getBackgroundColor(); + doReturn(new ColorDrawable(Color.GREEN)).when(primaryStyle).getTextColor(); + FlutterNativeTemplateFontStyle mockPrimaryFontStyle = + mock(FlutterNativeTemplateFontStyle.class); + Typeface mockPrimaryTypeface = mock(Typeface.class); + doReturn(mockPrimaryTypeface).when(mockPrimaryFontStyle).getTypeface(); + doReturn(mockPrimaryFontStyle).when(primaryStyle).getFontStyle(); + doReturn(200f).when(primaryStyle).getSize(); + + FlutterNativeTemplateTextStyle secondaryStyle = mock(FlutterNativeTemplateTextStyle.class); + doReturn(new ColorDrawable(Color.BLACK)).when(secondaryStyle).getBackgroundColor(); + doReturn(new ColorDrawable(Color.RED)).when(secondaryStyle).getTextColor(); + FlutterNativeTemplateFontStyle mockSecondaryFontStyle = + mock(FlutterNativeTemplateFontStyle.class); + Typeface mockSecondaryTypeface = mock(Typeface.class); + doReturn(mockSecondaryTypeface).when(mockSecondaryFontStyle).getTypeface(); + doReturn(mockSecondaryFontStyle).when(secondaryStyle).getFontStyle(); + doReturn(300f).when(secondaryStyle).getSize(); + + FlutterNativeTemplateTextStyle tertiaryStyle = mock(FlutterNativeTemplateTextStyle.class); + doReturn(new ColorDrawable(Color.TRANSPARENT)).when(tertiaryStyle).getBackgroundColor(); + doReturn(new ColorDrawable(Color.DKGRAY)).when(tertiaryStyle).getTextColor(); + FlutterNativeTemplateFontStyle mockTertiaryFontStyle = + mock(FlutterNativeTemplateFontStyle.class); + Typeface mockTertiaryTypeface = mock(Typeface.class); + doReturn(mockTertiaryTypeface).when(mockTertiaryFontStyle).getTypeface(); + doReturn(mockTertiaryFontStyle).when(tertiaryStyle).getFontStyle(); + doReturn(1000f).when(tertiaryStyle).getSize(); + + FlutterNativeTemplateStyle flutterNativeTemplateStyle = + new FlutterNativeTemplateStyle( + FlutterNativeTemplateType.SMALL, + mainBackgroundColor, + ctaStyle, + primaryStyle, + secondaryStyle, + tertiaryStyle); + + NativeTemplateStyle templateStyle = flutterNativeTemplateStyle.asNativeTemplateStyle(); + + assertEquals(templateStyle.getMainBackgroundColor(), mainBackgroundColor); + assertEquals(templateStyle.getCallToActionBackgroundColor().getColor(), Color.MAGENTA); + assertEquals(templateStyle.getCallToActionTypefaceColor(), (Integer) Color.LTGRAY); + assertEquals(templateStyle.getCallToActionTextSize(), 100f, 0); + assertNull(templateStyle.getCallToActionTextTypeface()); + + assertEquals(templateStyle.getPrimaryTextBackgroundColor().getColor(), Color.BLUE); + assertEquals(templateStyle.getPrimaryTextTypefaceColor(), (Integer) Color.GREEN); + assertEquals(templateStyle.getPrimaryTextSize(), 200f, 0); + assertEquals(templateStyle.getPrimaryTextTypeface(), mockPrimaryTypeface); + + assertEquals(templateStyle.getSecondaryTextBackgroundColor().getColor(), Color.BLACK); + assertEquals(templateStyle.getSecondaryTextTypefaceColor(), (Integer) Color.RED); + assertEquals(templateStyle.getSecondaryTextSize(), 300f, 0); + assertEquals(templateStyle.getSecondaryTextTypeface(), mockSecondaryTypeface); + + assertEquals(templateStyle.getTertiaryTextBackgroundColor().getColor(), Color.TRANSPARENT); + assertEquals(templateStyle.getTertiaryTextTypefaceColor(), (Integer) Color.DKGRAY); + assertEquals(templateStyle.getTertiaryTextSize(), 1000f, 0); + assertEquals(templateStyle.getTertiaryTextTypeface(), mockTertiaryTypeface); + } +} diff --git a/mih_ui/android/build/ios/SourcePackages/google_mobile_ads-8.0.0/android/src/test/java/io/flutter/plugins/googlemobileads/nativetemplates/FlutterNativeTemplateTextStyleTest.java b/mih_ui/android/build/ios/SourcePackages/google_mobile_ads-8.0.0/android/src/test/java/io/flutter/plugins/googlemobileads/nativetemplates/FlutterNativeTemplateTextStyleTest.java new file mode 100644 index 00000000..a73151c7 --- /dev/null +++ b/mih_ui/android/build/ios/SourcePackages/google_mobile_ads-8.0.0/android/src/test/java/io/flutter/plugins/googlemobileads/nativetemplates/FlutterNativeTemplateTextStyleTest.java @@ -0,0 +1,42 @@ +// Copyright 2023 Google LLC +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// https://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +package io.flutter.plugins.googlemobileads.nativetemplates; + +import static org.junit.Assert.assertEquals; +import static org.mockito.Mockito.mock; + +import android.graphics.drawable.ColorDrawable; +import org.junit.Test; +import org.junit.runner.RunWith; +import org.robolectric.RobolectricTestRunner; + +/** Tests for {@link FlutterNativeTemplateTextStyle}. */ +@RunWith(RobolectricTestRunner.class) +public class FlutterNativeTemplateTextStyleTest { + + @Test + public void testGetters() { + ColorDrawable textColor = mock(ColorDrawable.class); + ColorDrawable backgroundColor = mock(ColorDrawable.class); + FlutterNativeTemplateFontStyle fontStyle = mock(FlutterNativeTemplateFontStyle.class); + Double size = 1.; + FlutterNativeTemplateTextStyle style = + new FlutterNativeTemplateTextStyle(textColor, backgroundColor, fontStyle, size); + assertEquals(style.getTextColor(), textColor); + assertEquals(style.getBackgroundColor(), backgroundColor); + assertEquals(style.getFontStyle(), fontStyle); + assertEquals(style.getSize(), 1f, 0); + } +} diff --git a/mih_ui/android/build/ios/SourcePackages/google_mobile_ads-8.0.0/android/src/test/java/io/flutter/plugins/googlemobileads/nativetemplates/FlutterNativeTemplateTypeTest.java b/mih_ui/android/build/ios/SourcePackages/google_mobile_ads-8.0.0/android/src/test/java/io/flutter/plugins/googlemobileads/nativetemplates/FlutterNativeTemplateTypeTest.java new file mode 100644 index 00000000..ed04e6d8 --- /dev/null +++ b/mih_ui/android/build/ios/SourcePackages/google_mobile_ads-8.0.0/android/src/test/java/io/flutter/plugins/googlemobileads/nativetemplates/FlutterNativeTemplateTypeTest.java @@ -0,0 +1,40 @@ +// Copyright 2023 Google LLC +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// https://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +package io.flutter.plugins.googlemobileads.nativetemplates; + +import static org.junit.Assert.assertEquals; + +import org.junit.Test; +import org.junit.runner.RunWith; +import org.robolectric.RobolectricTestRunner; + +/** Tests for {@link FlutterNativeTemplateType}. */ +@RunWith(RobolectricTestRunner.class) +public class FlutterNativeTemplateTypeTest { + + @Test + public void testFromIntValue() { + for (int i = 0; i < FlutterNativeTemplateType.values().length; i++) { + FlutterNativeTemplateType type = FlutterNativeTemplateType.fromIntValue(i); + assertEquals(type, FlutterNativeTemplateType.values()[i]); + } + } + + @Test + public void testFromIntValue_unknownValue() { + FlutterNativeTemplateType type = FlutterNativeTemplateType.fromIntValue(-1); + assertEquals(type, FlutterNativeTemplateType.MEDIUM); + } +} diff --git a/mih_ui/android/build/ios/SourcePackages/google_mobile_ads-8.0.0/android/src/test/java/io/flutter/plugins/googlemobileads/usermessagingplatform/UserMessagingCodecTest.java b/mih_ui/android/build/ios/SourcePackages/google_mobile_ads-8.0.0/android/src/test/java/io/flutter/plugins/googlemobileads/usermessagingplatform/UserMessagingCodecTest.java new file mode 100644 index 00000000..ad6e1c75 --- /dev/null +++ b/mih_ui/android/build/ios/SourcePackages/google_mobile_ads-8.0.0/android/src/test/java/io/flutter/plugins/googlemobileads/usermessagingplatform/UserMessagingCodecTest.java @@ -0,0 +1,146 @@ +// Copyright 2022 Google LLC +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// https://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +package io.flutter.plugins.googlemobileads.usermessagingplatform; + +import static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertNull; +import static org.mockito.Mockito.mock; + +import com.google.android.ump.ConsentForm; +import com.google.android.ump.FormError; +import java.nio.ByteBuffer; +import java.util.Collections; +import java.util.List; +import org.junit.Before; +import org.junit.Test; +import org.junit.runner.RunWith; +import org.robolectric.RobolectricTestRunner; + +/** Tests for {@link UserMessagingCodec}. */ +@RunWith(RobolectricTestRunner.class) +public class UserMessagingCodecTest { + + private UserMessagingCodec codec; + + @Before + public void setup() { + codec = new UserMessagingCodec(); + } + + @Test + public void testConsentRequestParameters_null() { + ConsentRequestParametersWrapper params = new ConsentRequestParametersWrapper(null, null); + final ByteBuffer message = codec.encodeMessage(params); + ConsentRequestParametersWrapper decoded = + (ConsentRequestParametersWrapper) codec.decodeMessage((ByteBuffer) message.position(0)); + assertEquals(params, decoded); + } + + @Test + public void testConsentRequestParameters_tfuacNull_debugSettingsDefined() { + ConsentDebugSettingsWrapper debugSettings = new ConsentDebugSettingsWrapper(null, null); + ConsentRequestParametersWrapper params = + new ConsentRequestParametersWrapper(null, debugSettings); + final ByteBuffer message = codec.encodeMessage(params); + ConsentRequestParametersWrapper decoded = + (ConsentRequestParametersWrapper) codec.decodeMessage((ByteBuffer) message.position(0)); + assertEquals(params, decoded); + } + + @Test + public void testConsentRequestParameters_tfuacDefined_debugSettingsNull() { + ConsentRequestParametersWrapper params = new ConsentRequestParametersWrapper(true, null); + final ByteBuffer message = codec.encodeMessage(params); + ConsentRequestParametersWrapper decoded = + (ConsentRequestParametersWrapper) codec.decodeMessage((ByteBuffer) message.position(0)); + assertEquals(params, decoded); + } + + @Test + public void testConsentRequestParameters_tfuacDefined_debugSettingsDefined() { + ConsentDebugSettingsWrapper debugSettings = new ConsentDebugSettingsWrapper(null, null); + ConsentRequestParametersWrapper params = + new ConsentRequestParametersWrapper(true, debugSettings); + final ByteBuffer message = codec.encodeMessage(params); + ConsentRequestParametersWrapper decoded = + (ConsentRequestParametersWrapper) codec.decodeMessage((ByteBuffer) message.position(0)); + assertEquals(params, decoded); + } + + @Test + public void testConsentDebugSettings_null() { + ConsentDebugSettingsWrapper debugSettings = new ConsentDebugSettingsWrapper(null, null); + final ByteBuffer message = codec.encodeMessage(debugSettings); + ConsentDebugSettingsWrapper decoded = + (ConsentDebugSettingsWrapper) codec.decodeMessage((ByteBuffer) message.position(0)); + assertEquals(debugSettings, decoded); + } + + @Test + public void testConsentDebugSettings_debugGeographyDefined_testIdsNull() { + ConsentDebugSettingsWrapper debugSettings = new ConsentDebugSettingsWrapper(1, null); + final ByteBuffer message = codec.encodeMessage(debugSettings); + ConsentDebugSettingsWrapper decoded = + (ConsentDebugSettingsWrapper) codec.decodeMessage((ByteBuffer) message.position(0)); + assertEquals(debugSettings, decoded); + } + + @Test + public void testConsentDebugSettings_debugGeographyNull_testIdsDefined() { + List testIds = Collections.singletonList("first"); + ConsentDebugSettingsWrapper debugSettings = new ConsentDebugSettingsWrapper(null, testIds); + final ByteBuffer message = codec.encodeMessage(debugSettings); + ConsentDebugSettingsWrapper decoded = + (ConsentDebugSettingsWrapper) codec.decodeMessage((ByteBuffer) message.position(0)); + assertEquals(debugSettings, decoded); + } + + @Test + public void testConsentDebugSettings_debugGeographyDefined_testIdsDefined() { + List testIds = Collections.singletonList("first"); + ConsentDebugSettingsWrapper debugSettings = new ConsentDebugSettingsWrapper(4, testIds); + final ByteBuffer message = codec.encodeMessage(debugSettings); + ConsentDebugSettingsWrapper decoded = + (ConsentDebugSettingsWrapper) codec.decodeMessage((ByteBuffer) message.position(0)); + assertEquals(debugSettings, decoded); + } + + @Test + public void testConsentForm() { + ConsentForm form = mock(ConsentForm.class); + codec.trackConsentForm(form); + final ByteBuffer message = codec.encodeMessage(form); + + ConsentForm decoded = (ConsentForm) codec.decodeMessage((ByteBuffer) message.position(0)); + assertEquals(form, decoded); + + // Untrack consent form and verify that value is null + codec.disposeConsentForm(form); + decoded = (ConsentForm) codec.decodeMessage((ByteBuffer) message.position(0)); + assertNull(decoded); + } + + @Test + public void testFormError() { + FormError formError = new FormError(123, "testMessage"); + + final ByteBuffer message = codec.encodeMessage(formError); + FormError decoded = (FormError) codec.decodeMessage((ByteBuffer) message.position(0)); + + assert decoded != null; + assertEquals(formError.getErrorCode(), decoded.getErrorCode()); + assertEquals(formError.getMessage(), decoded.getMessage()); + } +} diff --git a/mih_ui/android/build/ios/SourcePackages/google_mobile_ads-8.0.0/android/src/test/java/io/flutter/plugins/googlemobileads/usermessagingplatform/UserMessagingPlatformManagerTest.java b/mih_ui/android/build/ios/SourcePackages/google_mobile_ads-8.0.0/android/src/test/java/io/flutter/plugins/googlemobileads/usermessagingplatform/UserMessagingPlatformManagerTest.java new file mode 100644 index 00000000..7c578248 --- /dev/null +++ b/mih_ui/android/build/ios/SourcePackages/google_mobile_ads-8.0.0/android/src/test/java/io/flutter/plugins/googlemobileads/usermessagingplatform/UserMessagingPlatformManagerTest.java @@ -0,0 +1,364 @@ +// Copyright 2022 Google LLC +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// https://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +package io.flutter.plugins.googlemobileads.usermessagingplatform; + +import static org.mockito.ArgumentMatchers.any; +import static org.mockito.ArgumentMatchers.eq; +import static org.mockito.ArgumentMatchers.isNull; +import static org.mockito.Mockito.doReturn; +import static org.mockito.Mockito.mock; +import static org.mockito.Mockito.verify; + +import android.app.Activity; +import android.content.Context; +import androidx.test.core.app.ApplicationProvider; +import com.google.android.ump.ConsentForm; +import com.google.android.ump.ConsentForm.OnConsentFormDismissedListener; +import com.google.android.ump.ConsentInformation; +import com.google.android.ump.ConsentInformation.ConsentStatus; +import com.google.android.ump.ConsentInformation.OnConsentInfoUpdateFailureListener; +import com.google.android.ump.ConsentInformation.OnConsentInfoUpdateSuccessListener; +import com.google.android.ump.ConsentInformation.PrivacyOptionsRequirementStatus; +import com.google.android.ump.ConsentRequestParameters; +import com.google.android.ump.FormError; +import com.google.android.ump.UserMessagingPlatform; +import com.google.android.ump.UserMessagingPlatform.OnConsentFormLoadFailureListener; +import com.google.android.ump.UserMessagingPlatform.OnConsentFormLoadSuccessListener; +import io.flutter.plugin.common.BinaryMessenger; +import io.flutter.plugin.common.MethodCall; +import io.flutter.plugin.common.MethodChannel.Result; +import java.util.Collections; +import java.util.HashMap; +import java.util.Map; +import org.junit.After; +import org.junit.Before; +import org.junit.Test; +import org.junit.runner.RunWith; +import org.mockito.ArgumentCaptor; +import org.mockito.MockedStatic; +import org.mockito.Mockito; +import org.robolectric.RobolectricTestRunner; + +/** Tests for {@link UserMessagingPlatformManager}. */ +@RunWith(RobolectricTestRunner.class) +public class UserMessagingPlatformManagerTest { + + private Context context; + private BinaryMessenger mockMessenger; + private UserMessagingPlatformManager manager; + private UserMessagingCodec userMessagingCodec; + private Activity activity; + + private MockedStatic mockedUmp; + private ConsentInformation mockConsentInformation; + + @Before + public void setup() { + userMessagingCodec = mock(UserMessagingCodec.class); + context = ApplicationProvider.getApplicationContext(); + mockMessenger = mock(BinaryMessenger.class); + manager = new UserMessagingPlatformManager(mockMessenger, context, userMessagingCodec); + activity = mock(Activity.class); + mockConsentInformation = mock(ConsentInformation.class); + mockedUmp = Mockito.mockStatic(UserMessagingPlatform.class); + mockedUmp + .when( + () -> { + UserMessagingPlatform.getConsentInformation(any()); + }) + .thenReturn(mockConsentInformation); + } + + @After + public void tearDown() { + mockedUmp.close(); + } + + @Test + public void testConsentInformation_reset() { + Map args = Collections.emptyMap(); + MethodCall methodCall = new MethodCall("ConsentInformation#reset", args); + Result result = mock(Result.class); + + manager.onMethodCall(methodCall, result); + + verify(mockConsentInformation).reset(); + verify(result).success(isNull()); + } + + @Test + public void testConsentInformation_getConsentStatus() { + doReturn(ConsentStatus.REQUIRED).when(mockConsentInformation).getConsentStatus(); + Map args = Collections.emptyMap(); + MethodCall methodCall = new MethodCall("ConsentInformation#getConsentStatus", args); + Result result = mock(Result.class); + + manager.onMethodCall(methodCall, result); + + verify(result).success(eq(ConsentStatus.REQUIRED)); + } + + @Test + public void testConsentInformation_requestConsentInfoUpdate_activityNotSet() { + manager.setActivity(null); + MethodCall methodCall = new MethodCall("ConsentInformation#requestConsentInfoUpdate", null); + Result result = mock(Result.class); + + manager.onMethodCall(methodCall, result); + + verify(result) + .error( + eq("0"), + eq( + "ConsentInformation#requestConsentInfoUpdate called before plugin has been " + + "registered to an activity."), + isNull()); + } + + @Test + public void testConsentInformation_requestConsentInfoUpdate_success() { + manager.setActivity(activity); + ConsentRequestParametersWrapper paramsWrapper = mock(ConsentRequestParametersWrapper.class); + ConsentRequestParameters params = mock(ConsentRequestParameters.class); + doReturn(params).when(paramsWrapper).getAsConsentRequestParameters(any()); + Map args = new HashMap<>(); + args.put("params", paramsWrapper); + MethodCall methodCall = new MethodCall("ConsentInformation#requestConsentInfoUpdate", args); + Result result = mock(Result.class); + + manager.onMethodCall(methodCall, result); + + ArgumentCaptor successCaptor = + ArgumentCaptor.forClass(OnConsentInfoUpdateSuccessListener.class); + ArgumentCaptor errorCaptor = + ArgumentCaptor.forClass(OnConsentInfoUpdateFailureListener.class); + verify(mockConsentInformation) + .requestConsentInfoUpdate( + eq(activity), eq(params), successCaptor.capture(), errorCaptor.capture()); + + successCaptor.getValue().onConsentInfoUpdateSuccess(); + verify(result).success(isNull()); + + FormError formError = mock(FormError.class); + doReturn(1).when(formError).getErrorCode(); + doReturn("message").when(formError).getMessage(); + errorCaptor.getValue().onConsentInfoUpdateFailure(formError); + verify(result).error(eq("1"), eq("message"), isNull()); + } + + @Test + public void testConsentInformation_isConsentFormAvailable() { + doReturn(false).when(mockConsentInformation).isConsentFormAvailable(); + Map args = + Collections.singletonMap("consentInformation", mockConsentInformation); + MethodCall methodCall = new MethodCall("ConsentInformation#isConsentFormAvailable", args); + Result result = mock(Result.class); + + manager.onMethodCall(methodCall, result); + + verify(result).success(eq(false)); + } + + @Test + public void testConsentInformation_canRequestAds() { + doReturn(true).when(mockConsentInformation).canRequestAds(); + MethodCall methodCall = new MethodCall("ConsentInformation#canRequestAds", null); + Result result = mock(Result.class); + + manager.onMethodCall(methodCall, result); + + verify(result).success(eq(true)); + } + + @Test + public void testConsentInformation_getPrivacyOptionsRequirementStatus_notRequiredReturns0() { + doReturn(PrivacyOptionsRequirementStatus.NOT_REQUIRED) + .when(mockConsentInformation) + .getPrivacyOptionsRequirementStatus(); + MethodCall methodCall = + new MethodCall("ConsentInformation#getPrivacyOptionsRequirementStatus", null); + Result result = mock(Result.class); + + manager.onMethodCall(methodCall, result); + + verify(result).success(eq(0)); + } + + @Test + public void testConsentInformation_getPrivacyOptionsRequirementStatus_requiredReturns1() { + doReturn(PrivacyOptionsRequirementStatus.REQUIRED) + .when(mockConsentInformation) + .getPrivacyOptionsRequirementStatus(); + MethodCall methodCall = + new MethodCall("ConsentInformation#getPrivacyOptionsRequirementStatus", null); + Result result = mock(Result.class); + + manager.onMethodCall(methodCall, result); + + verify(result).success(eq(1)); + } + + @Test + public void testConsentInformation_getPrivacyOptionsRequirementStatus_requiredReturns2() { + doReturn(PrivacyOptionsRequirementStatus.UNKNOWN) + .when(mockConsentInformation) + .getPrivacyOptionsRequirementStatus(); + MethodCall methodCall = + new MethodCall("ConsentInformation#getPrivacyOptionsRequirementStatus", null); + Result result = mock(Result.class); + + manager.onMethodCall(methodCall, result); + + verify(result).success(eq(2)); + } + + @Test + public void testUserMessagingPlatform_loadConsentFormAndDispose() { + MethodCall methodCall = new MethodCall("UserMessagingPlatform#loadConsentForm", null); + Result result = mock(Result.class); + + manager.onMethodCall(methodCall, result); + + ArgumentCaptor successCaptor = + ArgumentCaptor.forClass(OnConsentFormLoadSuccessListener.class); + ArgumentCaptor errorCaptor = + ArgumentCaptor.forClass(OnConsentFormLoadFailureListener.class); + mockedUmp.verify( + () -> + UserMessagingPlatform.loadConsentForm( + eq(context), successCaptor.capture(), errorCaptor.capture())); + + ConsentForm consentForm = mock(ConsentForm.class); + successCaptor.getValue().onConsentFormLoadSuccess(consentForm); + + verify(result).success(eq(consentForm)); + verify(userMessagingCodec).trackConsentForm(consentForm); + + FormError formError = mock(FormError.class); + errorCaptor.getValue().onConsentFormLoadFailure(formError); + + // Dispose + Map args = Collections.singletonMap("consentForm", consentForm); + methodCall = new MethodCall("ConsentForm#dispose", args); + manager.onMethodCall(methodCall, result); + + verify(userMessagingCodec).disposeConsentForm(consentForm); + verify(result).success(null); + } + + @Test + public void testUserMessagingPlatform_loadAndShowConsentFormIfRequired() { + manager.setActivity(activity); + MethodCall methodCall = + new MethodCall("UserMessagingPlatform#loadAndShowConsentFormIfRequired", null); + Result result = mock(Result.class); + + manager.onMethodCall(methodCall, result); + + ArgumentCaptor listenerCaptor = + ArgumentCaptor.forClass(OnConsentFormDismissedListener.class); + mockedUmp.verify( + () -> + UserMessagingPlatform.loadAndShowConsentFormIfRequired( + eq(activity), listenerCaptor.capture())); + listenerCaptor.getValue().onConsentFormDismissed(null); + verify(result).success(isNull()); + } + + @Test + public void testUserMessagingPlatform_loadAndShowConsentFormIfRequired_withFormError() { + manager.setActivity(activity); + FormError mockFormError = mock(FormError.class); + MethodCall methodCall = + new MethodCall("UserMessagingPlatform#loadAndShowConsentFormIfRequired", null); + Result result = mock(Result.class); + + manager.onMethodCall(methodCall, result); + + ArgumentCaptor listenerCaptor = + ArgumentCaptor.forClass(OnConsentFormDismissedListener.class); + mockedUmp.verify( + () -> + UserMessagingPlatform.loadAndShowConsentFormIfRequired( + eq(activity), listenerCaptor.capture())); + listenerCaptor.getValue().onConsentFormDismissed(mockFormError); + verify(result).success(mockFormError); + } + + @Test + public void testUserMessagingPlatform_showPrivacyOptionsForm() { + manager.setActivity(activity); + MethodCall methodCall = new MethodCall("UserMessagingPlatform#showPrivacyOptionsForm", null); + Result result = mock(Result.class); + + manager.onMethodCall(methodCall, result); + + ArgumentCaptor listenerCaptor = + ArgumentCaptor.forClass(OnConsentFormDismissedListener.class); + mockedUmp.verify( + () -> UserMessagingPlatform.showPrivacyOptionsForm(eq(activity), listenerCaptor.capture())); + listenerCaptor.getValue().onConsentFormDismissed(null); + verify(result).success(isNull()); + } + + @Test + public void testUserMessagingPlatform_showPrivacyOptionsForm_withFormError() { + manager.setActivity(activity); + FormError mockFormError = mock(FormError.class); + MethodCall methodCall = new MethodCall("UserMessagingPlatform#showPrivacyOptionsForm", null); + Result result = mock(Result.class); + + manager.onMethodCall(methodCall, result); + + ArgumentCaptor listenerCaptor = + ArgumentCaptor.forClass(OnConsentFormDismissedListener.class); + mockedUmp.verify( + () -> UserMessagingPlatform.showPrivacyOptionsForm(eq(activity), listenerCaptor.capture())); + listenerCaptor.getValue().onConsentFormDismissed(mockFormError); + verify(result).success(mockFormError); + } + + @Test + public void testConsentForm_show() { + manager.setActivity(activity); + ConsentForm consentForm = mock(ConsentForm.class); + Map args = Collections.singletonMap("consentForm", consentForm); + MethodCall methodCall = new MethodCall("ConsentForm#show", args); + Result result = mock(Result.class); + + manager.onMethodCall(methodCall, result); + + ArgumentCaptor listenerCaptor = + ArgumentCaptor.forClass(OnConsentFormDismissedListener.class); + verify(consentForm).show(eq(activity), listenerCaptor.capture()); + + listenerCaptor.getValue().onConsentFormDismissed(null); + verify(result).success(isNull()); + + FormError formError = mock(FormError.class); + doReturn(1).when(formError).getErrorCode(); + doReturn("message").when(formError).getMessage(); + listenerCaptor.getValue().onConsentFormDismissed(formError); + verify(result).error(eq("1"), eq("message"), isNull()); + } + + @Test + public void testConsentForm_show_errorNoConsentForm() { + MethodCall methodCall = new MethodCall("ConsentForm#show", null); + Result result = mock(Result.class); + manager.onMethodCall(methodCall, result); + verify(result).error(eq("0"), eq("ConsentForm#show"), isNull()); + } +} diff --git a/mih_ui/android/build/ios/SourcePackages/google_mobile_ads-8.0.0/example/README.md b/mih_ui/android/build/ios/SourcePackages/google_mobile_ads-8.0.0/example/README.md new file mode 100644 index 00000000..f7ee7a40 --- /dev/null +++ b/mih_ui/android/build/ios/SourcePackages/google_mobile_ads-8.0.0/example/README.md @@ -0,0 +1,8 @@ +# google_mobile_ads_example + +Demonstrates how to use the google_mobile_ads plugin. + +## Getting Started + +For help getting started with Flutter, view our online +[documentation](http://flutter.io/). diff --git a/mih_ui/android/build/ios/SourcePackages/google_mobile_ads-8.0.0/example/analysis_options.yaml b/mih_ui/android/build/ios/SourcePackages/google_mobile_ads-8.0.0/example/analysis_options.yaml new file mode 100644 index 00000000..9b541d2a --- /dev/null +++ b/mih_ui/android/build/ios/SourcePackages/google_mobile_ads-8.0.0/example/analysis_options.yaml @@ -0,0 +1,15 @@ +# Copyright 2021 Google LLC +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# https://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +include: ../../../analysis_options.yaml diff --git a/mih_ui/android/build/ios/SourcePackages/google_mobile_ads-8.0.0/example/android/app/build.gradle b/mih_ui/android/build/ios/SourcePackages/google_mobile_ads-8.0.0/example/android/app/build.gradle new file mode 100644 index 00000000..c1b39b6a --- /dev/null +++ b/mih_ui/android/build/ios/SourcePackages/google_mobile_ads-8.0.0/example/android/app/build.gradle @@ -0,0 +1,70 @@ +plugins { + id "com.android.application" + id "kotlin-android" + id "dev.flutter.flutter-gradle-plugin" +} + +def localProperties = new Properties() +def localPropertiesFile = rootProject.file('local.properties') +if (localPropertiesFile.exists()) { + localPropertiesFile.withReader('UTF-8') { reader -> + localProperties.load(reader) + } +} + +def flutterVersionCode = localProperties.getProperty('flutter.versionCode') +if (flutterVersionCode == null) { + flutterVersionCode = '1' +} + +def flutterVersionName = localProperties.getProperty('flutter.versionName') +if (flutterVersionName == null) { + flutterVersionName = '1.0' +} + +android { + compileSdk 36 + + namespace 'io.flutter.plugins.googlemobileadsexample' + + lintOptions { + disable 'InvalidPackage' + } + + defaultConfig { + applicationId "io.flutter.plugins.googlemobileadsexample" + minSdkVersion flutter.minSdkVersion + targetSdkVersion 34 + versionCode flutterVersionCode.toInteger() + versionName flutterVersionName + testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner" + multiDexEnabled true + } + + buildTypes { + release { + // TODO: Add your own signing config for the release build. + // Signing with the debug keys for now, so `flutter run --release` works. + signingConfig signingConfigs.debug + } + } + + compileOptions { + sourceCompatibility JavaLanguageVersion.of(17) + targetCompatibility JavaLanguageVersion.of(17) + } +} + +flutter { + source '../..' +} + +dependencies { + testImplementation 'junit:junit:4.13.2' + testImplementation 'org.robolectric:robolectric:4.14.1' + testImplementation 'org.mockito:mockito-core:5.15.2' + androidTestImplementation 'org.robolectric:robolectric:4.10.3' + androidTestImplementation 'androidx.test:runner:1.2.0' + androidTestImplementation 'androidx.test:rules:1.2.0' + androidTestImplementation 'androidx.test.espresso:espresso-core:3.2.0' +} diff --git a/mih_ui/android/build/ios/SourcePackages/google_mobile_ads-8.0.0/example/android/app/src/main/AndroidManifest.xml b/mih_ui/android/build/ios/SourcePackages/google_mobile_ads-8.0.0/example/android/app/src/main/AndroidManifest.xml new file mode 100644 index 00000000..d587c223 --- /dev/null +++ b/mih_ui/android/build/ios/SourcePackages/google_mobile_ads-8.0.0/example/android/app/src/main/AndroidManifest.xml @@ -0,0 +1,23 @@ + + + + + + + + + + + + + + + diff --git a/mih_ui/android/build/ios/SourcePackages/google_mobile_ads-8.0.0/example/android/app/src/main/java/io/flutter/plugins/googlemobileadsexample/MainActivity.java b/mih_ui/android/build/ios/SourcePackages/google_mobile_ads-8.0.0/example/android/app/src/main/java/io/flutter/plugins/googlemobileadsexample/MainActivity.java new file mode 100644 index 00000000..59fc22db --- /dev/null +++ b/mih_ui/android/build/ios/SourcePackages/google_mobile_ads-8.0.0/example/android/app/src/main/java/io/flutter/plugins/googlemobileadsexample/MainActivity.java @@ -0,0 +1,34 @@ +// Copyright 2021 Google LLC +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// https://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +package io.flutter.plugins.googlemobileadsexample; + +import io.flutter.embedding.android.FlutterActivity; +import io.flutter.embedding.engine.FlutterEngine; +import io.flutter.plugins.googlemobileads.GoogleMobileAdsPlugin; +import io.flutter.plugins.googlemobileads.GoogleMobileAdsPlugin.NativeAdFactory; + +public class MainActivity extends FlutterActivity { + @Override + public void configureFlutterEngine(FlutterEngine flutterEngine) { + super.configureFlutterEngine(flutterEngine); + final NativeAdFactory factory = new NativeAdFactoryExample(getLayoutInflater()); + GoogleMobileAdsPlugin.registerNativeAdFactory(flutterEngine, "adFactoryExample", factory); + } + + @Override + public void cleanUpFlutterEngine(FlutterEngine flutterEngine) { + GoogleMobileAdsPlugin.unregisterNativeAdFactory(flutterEngine, "adFactoryExample"); + } +} diff --git a/mih_ui/android/build/ios/SourcePackages/google_mobile_ads-8.0.0/example/android/app/src/main/java/io/flutter/plugins/googlemobileadsexample/NativeAdFactoryExample.java b/mih_ui/android/build/ios/SourcePackages/google_mobile_ads-8.0.0/example/android/app/src/main/java/io/flutter/plugins/googlemobileadsexample/NativeAdFactoryExample.java new file mode 100644 index 00000000..8047c5bd --- /dev/null +++ b/mih_ui/android/build/ios/SourcePackages/google_mobile_ads-8.0.0/example/android/app/src/main/java/io/flutter/plugins/googlemobileadsexample/NativeAdFactoryExample.java @@ -0,0 +1,114 @@ +// Copyright 2021 Google LLC +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// https://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +package io.flutter.plugins.googlemobileadsexample; + +import android.view.LayoutInflater; +import android.view.View; +import android.widget.Button; +import android.widget.ImageView; +import android.widget.RatingBar; +import android.widget.TextView; +import com.google.android.gms.ads.nativead.MediaView; +import com.google.android.gms.ads.nativead.NativeAd; +import com.google.android.gms.ads.nativead.NativeAdView; +import io.flutter.plugins.googlemobileads.GoogleMobileAdsPlugin.NativeAdFactory; +import java.util.Map; + +class NativeAdFactoryExample implements NativeAdFactory { + private final LayoutInflater layoutInflater; + + NativeAdFactoryExample(LayoutInflater layoutInflater) { + this.layoutInflater = layoutInflater; + } + + @Override + public NativeAdView createNativeAd(NativeAd nativeAd, Map customOptions) { + final NativeAdView adView = (NativeAdView) layoutInflater.inflate(R.layout.my_native_ad, null); + + // Set the media view. + adView.setMediaView((MediaView) adView.findViewById(R.id.ad_media)); + + // Set other ad assets. + adView.setHeadlineView(adView.findViewById(R.id.ad_headline)); + adView.setBodyView(adView.findViewById(R.id.ad_body)); + adView.setCallToActionView(adView.findViewById(R.id.ad_call_to_action)); + adView.setIconView(adView.findViewById(R.id.ad_app_icon)); + adView.setPriceView(adView.findViewById(R.id.ad_price)); + adView.setStarRatingView(adView.findViewById(R.id.ad_stars)); + adView.setStoreView(adView.findViewById(R.id.ad_store)); + adView.setAdvertiserView(adView.findViewById(R.id.ad_advertiser)); + + // The headline and mediaContent are guaranteed to be in every NativeAd. + ((TextView) adView.getHeadlineView()).setText(nativeAd.getHeadline()); + adView.getMediaView().setMediaContent(nativeAd.getMediaContent()); + + // These assets aren't guaranteed to be in every NativeAd, so it's important to + // check before trying to display them. + if (nativeAd.getBody() == null) { + adView.getBodyView().setVisibility(View.INVISIBLE); + } else { + adView.getBodyView().setVisibility(View.VISIBLE); + ((TextView) adView.getBodyView()).setText(nativeAd.getBody()); + } + + if (nativeAd.getCallToAction() == null) { + adView.getCallToActionView().setVisibility(View.INVISIBLE); + } else { + adView.getCallToActionView().setVisibility(View.VISIBLE); + ((Button) adView.getCallToActionView()).setText(nativeAd.getCallToAction()); + } + + if (nativeAd.getIcon() == null) { + adView.getIconView().setVisibility(View.GONE); + } else { + ((ImageView) adView.getIconView()).setImageDrawable(nativeAd.getIcon().getDrawable()); + adView.getIconView().setVisibility(View.VISIBLE); + } + + if (nativeAd.getPrice() == null) { + adView.getPriceView().setVisibility(View.INVISIBLE); + } else { + adView.getPriceView().setVisibility(View.VISIBLE); + ((TextView) adView.getPriceView()).setText(nativeAd.getPrice()); + } + + if (nativeAd.getStore() == null) { + adView.getStoreView().setVisibility(View.INVISIBLE); + } else { + adView.getStoreView().setVisibility(View.VISIBLE); + ((TextView) adView.getStoreView()).setText(nativeAd.getStore()); + } + + if (nativeAd.getStarRating() == null) { + adView.getStarRatingView().setVisibility(View.INVISIBLE); + } else { + ((RatingBar) adView.getStarRatingView()).setRating(nativeAd.getStarRating().floatValue()); + adView.getStarRatingView().setVisibility(View.VISIBLE); + } + + if (nativeAd.getAdvertiser() == null) { + adView.getAdvertiserView().setVisibility(View.INVISIBLE); + } else { + adView.getAdvertiserView().setVisibility(View.VISIBLE); + ((TextView) adView.getAdvertiserView()).setText(nativeAd.getAdvertiser()); + } + + // This method tells the Google Mobile Ads SDK that you have finished populating your + // native ad view with this native ad. + adView.setNativeAd(nativeAd); + + return adView; + } +} diff --git a/mih_ui/android/build/ios/SourcePackages/google_mobile_ads-8.0.0/example/android/app/src/main/res/layout/my_native_ad.xml b/mih_ui/android/build/ios/SourcePackages/google_mobile_ads-8.0.0/example/android/app/src/main/res/layout/my_native_ad.xml new file mode 100644 index 00000000..4dd1cef4 --- /dev/null +++ b/mih_ui/android/build/ios/SourcePackages/google_mobile_ads-8.0.0/example/android/app/src/main/res/layout/my_native_ad.xml @@ -0,0 +1,131 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/mih_ui/android/build/ios/SourcePackages/google_mobile_ads-8.0.0/example/ios/Runner/main.m b/mih_ui/android/build/ios/SourcePackages/google_mobile_ads-8.0.0/example/ios/Runner/main.m new file mode 100644 index 00000000..80af04fa --- /dev/null +++ b/mih_ui/android/build/ios/SourcePackages/google_mobile_ads-8.0.0/example/ios/Runner/main.m @@ -0,0 +1,24 @@ +// Copyright 2021 Google LLC +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// https://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +#import "AppDelegate.h" +#import +#import + +int main(int argc, char *argv[]) { + @autoreleasepool { + return UIApplicationMain(argc, argv, nil, + NSStringFromClass([AppDelegate class])); + } +} diff --git a/mih_ui/android/build/ios/SourcePackages/google_mobile_ads-8.0.0/example/ios/RunnerTests/FLTAdRequestTest.m b/mih_ui/android/build/ios/SourcePackages/google_mobile_ads-8.0.0/example/ios/RunnerTests/FLTAdRequestTest.m new file mode 100644 index 00000000..89aa5c84 --- /dev/null +++ b/mih_ui/android/build/ios/SourcePackages/google_mobile_ads-8.0.0/example/ios/RunnerTests/FLTAdRequestTest.m @@ -0,0 +1,145 @@ +// Copyright 2021 Google LLC +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// https://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +#import +#import + +#import "FLTAd_Internal.h" +#import "FLTMediationNetworkExtrasProvider.h" + +@interface FLTAdRequestTest : XCTestCase +@end + +@interface TestGADAdNetworkExtras : NSObject +@end + +@implementation TestGADAdNetworkExtras +@end + +@implementation FLTAdRequestTest + +- (void)testAsAdRequestAllParams { + // Proxy [GADRequest init] to return a partial mock of a real GADRequest. + GADRequest *gadRequestSpy = OCMPartialMock([GADRequest request]); + id gadRequestClassMock = OCMClassMock([GADRequest class]); + OCMStub([gadRequestClassMock request]).andReturn(gadRequestSpy); + + // Set values for all params. + FLTAdRequest *fltAdRequest = [[FLTAdRequest alloc] init]; + fltAdRequest.contentURL = @"contentURL"; + NSArray *keywords = @[ @"keyword1", @"keyword2" ]; + fltAdRequest.keywords = keywords; + fltAdRequest.nonPersonalizedAds = YES; + fltAdRequest.mediationExtrasIdentifier = @"identifier"; + NSArray *neighbors = @[ @"neighbor1", @"neighbor2" ]; + fltAdRequest.neighboringContentURLs = neighbors; + + // Mock FLTMediationNetworkExtrasProvider. + GADExtras *extras = [[GADExtras alloc] init]; + TestGADAdNetworkExtras *testExtras = [[TestGADAdNetworkExtras alloc] init]; + NSArray> *extrasArray = @[ extras, testExtras ]; + id extrasProvider = + OCMProtocolMock(@protocol(FLTMediationNetworkExtrasProvider)); + OCMStub([extrasProvider getMediationExtras:[OCMArg isEqual:@"test-ad-unit"] + mediationExtrasIdentifier:@"identifier"]) + .andReturn(extrasArray); + + fltAdRequest.mediationNetworkExtrasProvider = extrasProvider; + + // Create a GADRequest and verify properties are set correctly. + GADRequest *gadRequest = [fltAdRequest asGADRequest:@"test-ad-unit"]; + + XCTAssertEqualObjects(gadRequest.contentURL, @"contentURL"); + XCTAssertEqualObjects(gadRequest.keywords, keywords); + XCTAssertEqualObjects(gadRequest.neighboringContentURLStrings, neighbors); + GADExtras *updatedExtras = [gadRequest adNetworkExtrasFor:[GADExtras class]]; + XCTAssertEqualObjects(updatedExtras, extras); + XCTAssertEqualObjects(updatedExtras.additionalParameters[@"npa"], @"1"); + OCMVerify( + [gadRequestSpy registerAdNetworkExtras:[OCMArg isEqual:testExtras]]); +} + +- (void)testAsAdRequestNoParams { + // Proxy [GADRequest init] to return a partial mock of a real GADRequest. + GADRequest *gadRequestSpy = OCMPartialMock([GADRequest request]); + id gadRequestClassMock = OCMClassMock([GADRequest class]); + OCMStub([gadRequestClassMock request]).andReturn(gadRequestSpy); + + // Create a GADRequest with no additional params. + FLTAdRequest *fltAdRequest = [[FLTAdRequest alloc] init]; + GADRequest *gadRequest = [fltAdRequest asGADRequest:@"test-ad-unit"]; + + // Verify parameters are empty or nil. + XCTAssertNil(gadRequest.contentURL); + XCTAssertNil(gadRequest.keywords); + XCTAssertNil(gadRequest.neighboringContentURLStrings); + XCTAssertNil([gadRequest adNetworkExtrasFor:[GADExtras class]]); +} + +- (void)testGADExtrasAddedWhenNpaSpecified { + // Proxy [GADRequest init] to return a partial mock of a real GADRequest. + GADRequest *gadRequestSpy = OCMPartialMock([GADRequest request]); + id gadRequestClassMock = OCMClassMock([GADRequest class]); + OCMStub([gadRequestClassMock request]).andReturn(gadRequestSpy); + + // Create a GADRequest with NPA set, and a FLTMediationNetworkExtrasProvider + // that returns an empty array. + FLTAdRequest *fltAdRequest = [[FLTAdRequest alloc] init]; + fltAdRequest.nonPersonalizedAds = YES; + fltAdRequest.mediationExtrasIdentifier = @"identifier"; + + NSArray> *extrasArray = @[]; + id extrasProvider = + OCMProtocolMock(@protocol(FLTMediationNetworkExtrasProvider)); + OCMStub([extrasProvider getMediationExtras:[OCMArg isEqual:@"test-ad-unit"] + mediationExtrasIdentifier:@"identifier"]) + .andReturn(extrasArray); + + fltAdRequest.mediationNetworkExtrasProvider = extrasProvider; + + GADRequest *gadRequest = [fltAdRequest asGADRequest:@"test-ad-unit"]; + + // GADExtras should be added with npa = 1. + GADExtras *updatedExtras = [gadRequest adNetworkExtrasFor:[GADExtras class]]; + XCTAssertEqualObjects(updatedExtras.additionalParameters[@"npa"], @"1"); +} + +- (void)testGADExtrasWithoutNpa { + // Proxy [GADRequest init] to return a partial mock of a real GADRequest. + GADRequest *gadRequestSpy = OCMPartialMock([GADRequest request]); + id gadRequestClassMock = OCMClassMock([GADRequest class]); + OCMStub([gadRequestClassMock request]).andReturn(gadRequestSpy); + + // Extras should be added even if npa is not set. + FLTAdRequest *fltAdRequest = [[FLTAdRequest alloc] init]; + fltAdRequest.mediationExtrasIdentifier = @"identifier"; + + TestGADAdNetworkExtras *testExtras = [[TestGADAdNetworkExtras alloc] init]; + NSArray> *extrasArray = @[ testExtras ]; + id extrasProvider = + OCMProtocolMock(@protocol(FLTMediationNetworkExtrasProvider)); + OCMStub([extrasProvider getMediationExtras:[OCMArg isEqual:@"test-ad-unit"] + mediationExtrasIdentifier:@"identifier"]) + .andReturn(extrasArray); + + fltAdRequest.mediationNetworkExtrasProvider = extrasProvider; + + GADRequest *gadRequest = [fltAdRequest asGADRequest:@"test-ad-unit"]; + + XCTAssertNil([gadRequest adNetworkExtrasFor:[GADExtras class]]); + OCMVerify( + [gadRequestSpy registerAdNetworkExtras:[OCMArg isEqual:testExtras]]); +} + +@end diff --git a/mih_ui/android/build/ios/SourcePackages/google_mobile_ads-8.0.0/example/ios/RunnerTests/FLTAdUtilTest.m b/mih_ui/android/build/ios/SourcePackages/google_mobile_ads-8.0.0/example/ios/RunnerTests/FLTAdUtilTest.m new file mode 100644 index 00000000..77d8122e --- /dev/null +++ b/mih_ui/android/build/ios/SourcePackages/google_mobile_ads-8.0.0/example/ios/RunnerTests/FLTAdUtilTest.m @@ -0,0 +1,97 @@ +// Copyright 2022 Google LLC +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// https://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +#import +#import + +#import "FLTAdUtil.h" +#import "FLTConstants.h" + +@interface FLTAdUtilTest : XCTestCase +@end + +@implementation FLTAdUtilTest { + NSBundle *_mockMainBundle; +} + +- (void)setUp { + id mockBundle = OCMClassMock([NSBundle class]); + OCMStub(ClassMethod([mockBundle mainBundle])).andReturn(mockBundle); + _mockMainBundle = mockBundle; +} + +- (void)testRequestAgent_noTemplateMetadata { + OCMStub( + [_mockMainBundle + objectForInfoDictionaryKey:[OCMArg + isEqual:@"FLTNewsTemplateVersion"]]) + .andReturn(nil); + OCMStub( + [_mockMainBundle + objectForInfoDictionaryKey:[OCMArg + isEqual:@"FLTGameTemplateVersion"]]) + .andReturn(nil); + XCTAssertEqualObjects([FLTAdUtil requestAgent], FLT_REQUEST_AGENT_VERSIONED); +} + +- (void)testRequestAgent_newsTemplateMetadata { + OCMStub( + [_mockMainBundle + objectForInfoDictionaryKey:[OCMArg + isEqual:@"FLTNewsTemplateVersion"]]) + .andReturn(@"v1.2.3"); + OCMStub( + [_mockMainBundle + objectForInfoDictionaryKey:[OCMArg + isEqual:@"FLTGameTemplateVersion"]]) + .andReturn(nil); + NSString *expected = [NSString + stringWithFormat:@"%@%@", FLT_REQUEST_AGENT_VERSIONED, @"_News-v1.2.3"]; + XCTAssertEqualObjects([FLTAdUtil requestAgent], expected); +} + +- (void)testRequestAgent_gameTemplateMetadata { + OCMStub( + [_mockMainBundle + objectForInfoDictionaryKey:[OCMArg + isEqual:@"FLTNewsTemplateVersion"]]) + .andReturn(nil); + OCMStub( + [_mockMainBundle + objectForInfoDictionaryKey:[OCMArg + isEqual:@"FLTGameTemplateVersion"]]) + .andReturn(@"123456"); + NSString *expected = [NSString + stringWithFormat:@"%@%@", FLT_REQUEST_AGENT_VERSIONED, @"_Game-123456"]; + XCTAssertEqualObjects([FLTAdUtil requestAgent], expected); +} + +- (void)testRequestAgent_gameAndNewsTemplateMetadata { + OCMStub( + [_mockMainBundle + objectForInfoDictionaryKey:[OCMArg + isEqual:@"FLTNewsTemplateVersion"]]) + .andReturn(@"123456"); + OCMStub( + [_mockMainBundle + objectForInfoDictionaryKey:[OCMArg + isEqual:@"FLTGameTemplateVersion"]]) + .andReturn(@"789z"); + NSString *expected = + [NSString stringWithFormat:@"%@%@%@", FLT_REQUEST_AGENT_VERSIONED, + @"_News-123456", @"_Game-789z"]; + XCTAssertEqualObjects([FLTAdUtil requestAgent], expected); +} + +@end diff --git a/mih_ui/android/build/ios/SourcePackages/google_mobile_ads-8.0.0/example/ios/RunnerTests/FLTAppOpenAdTest.m b/mih_ui/android/build/ios/SourcePackages/google_mobile_ads-8.0.0/example/ios/RunnerTests/FLTAppOpenAdTest.m new file mode 100644 index 00000000..1122044e --- /dev/null +++ b/mih_ui/android/build/ios/SourcePackages/google_mobile_ads-8.0.0/example/ios/RunnerTests/FLTAppOpenAdTest.m @@ -0,0 +1,185 @@ +// Copyright 2021 Google LLC +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// https://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +#import +#import + +#import "FLTAdInstanceManager_Internal.h" +#import "FLTAd_Internal.h" + +@interface FLTAppOpenAdTest : XCTestCase +@end + +@implementation FLTAppOpenAdTest { + FLTAdInstanceManager *mockManager; +} + +- (void)setUp { + mockManager = (OCMClassMock([FLTAdInstanceManager class])); +} + +- (void)testLoadShowGADRequest { + FLTAdRequest *request = OCMClassMock([FLTAdRequest class]); + OCMStub([request keywords]).andReturn(@[ @"apple" ]); + GADRequest *gadRequest = OCMClassMock([GADRequest class]); + OCMStub([request asGADRequest:[OCMArg any]]).andReturn(gadRequest); + + [self testLoadShowAppOpenAd:request gadOrGAMRequest:gadRequest]; +} + +- (void)testLoadShowGAMRequest { + FLTGAMAdRequest *request = OCMClassMock([FLTGAMAdRequest class]); + OCMStub([request keywords]).andReturn(@[ @"apple" ]); + GAMRequest *gamRequest = OCMClassMock([GAMRequest class]); + OCMStub([request asGAMRequest:[OCMArg any]]).andReturn(gamRequest); + FLTServerSideVerificationOptions *serverSideVerificationOptions = + OCMClassMock([FLTServerSideVerificationOptions class]); + GADServerSideVerificationOptions *gadOptions = + OCMClassMock([GADServerSideVerificationOptions class]); + OCMStub([serverSideVerificationOptions asGADServerSideVerificationOptions]) + .andReturn(gadOptions); + + [self testLoadShowAppOpenAd:request gadOrGAMRequest:gamRequest]; +} + +// Helper method for testing with FLTAdRequest and FLTGAMAdRequest. +- (void)testLoadShowAppOpenAd:(FLTAdRequest *)request + gadOrGAMRequest:(GADRequest *)gadOrGAMRequest { + FLTAppOpenAd *ad = [[FLTAppOpenAd alloc] initWithAdUnitId:@"testId" + request:request + adId:@1]; + ad.manager = mockManager; + + // Stub the load call to invoke successful load callback. + id appOpenClassMock = OCMClassMock([GADAppOpenAd class]); + OCMStub(ClassMethod([appOpenClassMock loadWithAdUnitID:[OCMArg any] + request:[OCMArg any] + completionHandler:[OCMArg any]])) + .andDo(^(NSInvocation *invocation) { + void (^completionHandler)(GADAppOpenAd *ad, NSError *error); + [invocation getArgument:&completionHandler atIndex:4]; + completionHandler(appOpenClassMock, nil); + }); + // Stub setting of FullScreenContentDelegate to invoke delegate callbacks. + NSError *error = OCMClassMock([NSError class]); + OCMStub([appOpenClassMock setFullScreenContentDelegate:[OCMArg any]]) + .andDo(^(NSInvocation *invocation) { + id delegate; + [invocation getArgument:&delegate atIndex:2]; + XCTAssertEqual(delegate, ad); + [delegate adDidRecordImpression:appOpenClassMock]; + [delegate adDidRecordClick:appOpenClassMock]; + [delegate adDidDismissFullScreenContent:appOpenClassMock]; + [delegate adWillPresentFullScreenContent:appOpenClassMock]; + [delegate adWillDismissFullScreenContent:appOpenClassMock]; + [delegate ad:appOpenClassMock + didFailToPresentFullScreenContentWithError:error]; + }); + GADResponseInfo *responseInfo = OCMClassMock([GADResponseInfo class]); + OCMStub([appOpenClassMock responseInfo]).andReturn(responseInfo); + + // Mock callback of paid event handler. + GADAdValue *adValue = OCMClassMock([GADAdValue class]); + OCMStub([adValue value]).andReturn(NSDecimalNumber.one); + OCMStub([adValue precision]).andReturn(GADAdValuePrecisionEstimated); + OCMStub([adValue currencyCode]).andReturn(@"currencyCode"); + OCMStub([appOpenClassMock + setPaidEventHandler:[OCMArg checkWithBlock:^BOOL(id obj) { + GADPaidEventHandler handler = obj; + handler(adValue); + return YES; + }]]); + // Call load and check expected interactions with mocks. + [ad load]; + + OCMVerify(ClassMethod([appOpenClassMock + loadWithAdUnitID:[OCMArg isEqual:@"testId"] + request:[OCMArg isEqual:gadOrGAMRequest] + completionHandler:[OCMArg any]])); + OCMVerify([mockManager onAdLoaded:[OCMArg isEqual:ad] + responseInfo:[OCMArg isEqual:responseInfo]]); + OCMVerify( + [appOpenClassMock setFullScreenContentDelegate:[OCMArg isEqual:ad]]); + XCTAssertEqual(ad.appOpenAd, appOpenClassMock); + OCMVerify([mockManager + onPaidEvent:[OCMArg isEqual:ad] + value:[OCMArg checkWithBlock:^BOOL(id obj) { + FLTAdValue *adValue = obj; + XCTAssertEqualObjects( + adValue.valueMicros, + [[NSDecimalNumber alloc] initWithInt:1000000]); + XCTAssertEqual(adValue.precision, GADAdValuePrecisionEstimated); + XCTAssertEqualObjects(adValue.currencyCode, @"currencyCode"); + return TRUE; + }]]); + + [ad show]; + + OCMVerify([appOpenClassMock presentFromRootViewController:[OCMArg isNil]]); + + // Verify full screen callbacks. + OCMVerify([mockManager adWillPresentFullScreenContent:[OCMArg isEqual:ad]]); + OCMVerify([mockManager adDidDismissFullScreenContent:[OCMArg isEqual:ad]]); + OCMVerify([mockManager adWillDismissFullScreenContent:[OCMArg isEqual:ad]]); + OCMVerify([mockManager adDidRecordImpression:[OCMArg isEqual:ad]]); + OCMVerify([mockManager adDidRecordClick:[OCMArg isEqual:ad]]); + OCMVerify([mockManager + didFailToPresentFullScreenContentWithError:[OCMArg isEqual:ad] + error:[OCMArg isEqual:error]]); +} + +- (void)testFailedToLoadGADRequest { + FLTAdRequest *request = OCMClassMock([FLTAdRequest class]); + OCMStub([request keywords]).andReturn(@[ @"apple" ]); + GADRequest *gadRequest = OCMClassMock([GADRequest class]); + OCMStub([request asGADRequest:[OCMArg any]]).andReturn(gadRequest); + [self testFailedToLoad:request]; +} + +- (void)testFailedToLoadGAMRequest { + FLTGAMAdRequest *request = OCMClassMock([FLTGAMAdRequest class]); + OCMStub([request keywords]).andReturn(@[ @"apple" ]); + GAMRequest *gamRequest = OCMClassMock([GAMRequest class]); + OCMStub([request asGAMRequest:[OCMArg any]]).andReturn(gamRequest); + [self testFailedToLoad:request]; +} + +// Helper for testing failed to load. +- (void)testFailedToLoad:(FLTAdRequest *)request { + FLTAppOpenAd *ad = [[FLTAppOpenAd alloc] initWithAdUnitId:@"testId" + request:request + adId:@1]; + ad.manager = mockManager; + + id appOpenClassMock = OCMClassMock([GADAppOpenAd class]); + NSError *error = OCMClassMock([NSError class]); + OCMStub(ClassMethod([appOpenClassMock loadWithAdUnitID:[OCMArg any] + request:[OCMArg any] + completionHandler:[OCMArg any]])) + .andDo(^(NSInvocation *invocation) { + void (^completionHandler)(GADAppOpenAd *ad, NSError *error); + [invocation getArgument:&completionHandler atIndex:4]; + completionHandler(nil, error); + }); + + [ad load]; + + OCMVerify(ClassMethod([appOpenClassMock loadWithAdUnitID:[OCMArg any] + request:[OCMArg any] + completionHandler:[OCMArg any]])); + OCMVerify([mockManager onAdFailedToLoad:[OCMArg isEqual:ad] + error:[OCMArg isEqual:error]]); +} + +@end diff --git a/mih_ui/android/build/ios/SourcePackages/google_mobile_ads-8.0.0/example/ios/RunnerTests/FLTBannerAdTest.m b/mih_ui/android/build/ios/SourcePackages/google_mobile_ads-8.0.0/example/ios/RunnerTests/FLTBannerAdTest.m new file mode 100644 index 00000000..278875cd --- /dev/null +++ b/mih_ui/android/build/ios/SourcePackages/google_mobile_ads-8.0.0/example/ios/RunnerTests/FLTBannerAdTest.m @@ -0,0 +1,126 @@ +// Copyright 2021 Google LLC +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// https://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +#import +#import + +#import "FLTAdInstanceManager_Internal.h" +#import "FLTAd_Internal.h" + +@interface FLTBannerAdTest : XCTestCase +@end + +@implementation FLTBannerAdTest { + FLTAdInstanceManager *mockManager; +} + +- (void)setUp { + mockManager = (OCMClassMock([FLTAdInstanceManager class])); +} + +- (void)testDelegates { + FLTAdSize *size = [[FLTAdSize alloc] initWithWidth:@(1) height:@(2)]; + UIViewController *mockRootViewController = + OCMClassMock([UIViewController class]); + FLTBannerAd *bannerAd = + [[FLTBannerAd alloc] initWithAdUnitId:@"testId" + size:size + request:[[FLTAdRequest alloc] init] + rootViewController:mockRootViewController + adId:@1]; + bannerAd.manager = mockManager; + + [bannerAd load]; + + XCTAssertEqual(bannerAd.bannerView.delegate, bannerAd); + + GADBannerView *bannerMock = OCMClassMock([GADBannerView class]); + GADResponseInfo *responseInfo = OCMClassMock([GADResponseInfo class]); + OCMStub([bannerMock responseInfo]).andReturn(responseInfo); + + [bannerAd.bannerView.delegate bannerViewDidReceiveAd:bannerMock]; + OCMVerify([mockManager onAdLoaded:[OCMArg isEqual:bannerAd] + responseInfo:[OCMArg isEqual:responseInfo]]); + + [bannerAd.bannerView.delegate bannerViewDidDismissScreen:bannerMock]; + OCMVerify([mockManager onBannerDidDismissScreen:[OCMArg isEqual:bannerAd]]); + + [bannerAd.bannerView.delegate bannerViewWillDismissScreen:bannerMock]; + OCMVerify([mockManager onBannerWillDismissScreen:[OCMArg isEqual:bannerAd]]); + + [bannerAd.bannerView.delegate bannerViewWillPresentScreen:bannerMock]; + OCMVerify([mockManager onBannerWillPresentScreen:[OCMArg isEqual:bannerAd]]); + + [bannerAd.bannerView.delegate bannerViewDidRecordImpression:bannerMock]; + OCMVerify([mockManager onBannerImpression:[OCMArg isEqual:bannerAd]]); + + [bannerAd.bannerView.delegate bannerViewDidRecordClick:bannerMock]; + OCMVerify([mockManager adDidRecordClick:[OCMArg isEqual:bannerAd]]); + + // Mock callback of paid event handler. + GADAdValue *adValue = OCMClassMock([GADAdValue class]); + OCMStub([adValue value]).andReturn(NSDecimalNumber.one); + OCMStub([adValue precision]).andReturn(GADAdValuePrecisionEstimated); + OCMStub([adValue currencyCode]).andReturn(@"currencyCode"); + + bannerAd.bannerView.paidEventHandler(adValue); + OCMVerify([mockManager + onPaidEvent:[OCMArg isEqual:bannerAd] + value:[OCMArg checkWithBlock:^BOOL(id obj) { + FLTAdValue *adValue = obj; + XCTAssertEqualObjects( + adValue.valueMicros, + [[NSDecimalNumber alloc] initWithInt:1000000]); + XCTAssertEqual(adValue.precision, GADAdValuePrecisionEstimated); + XCTAssertEqualObjects(adValue.currencyCode, @"currencyCode"); + return TRUE; + }]]); + + NSString *domain = @"domain"; + NSDictionary *userInfo = @{NSLocalizedDescriptionKey : @"description"}; + NSError *error = [NSError errorWithDomain:domain code:1 userInfo:userInfo]; + [bannerAd.bannerView.delegate bannerView:OCMClassMock([GADBannerView class]) + didFailToReceiveAdWithError:error]; + OCMVerify([mockManager onAdFailedToLoad:[OCMArg isEqual:bannerAd] + error:[OCMArg isEqual:error]]); +} + +- (void)testLoad { + FLTAdRequest *request = [[FLTAdRequest alloc] init]; + request.keywords = @[ @"apple" ]; + UIViewController *mockRootViewController = + OCMClassMock([UIViewController class]); + FLTBannerAd *ad = [[FLTBannerAd alloc] + initWithAdUnitId:@"testId" + size:[[FLTAdSize alloc] initWithWidth:@(1) height:@(2)] + request:request + rootViewController:mockRootViewController + adId:@1]; + + XCTAssertEqual(ad.bannerView.adUnitID, @"testId"); + XCTAssertEqual(ad.bannerView.rootViewController, mockRootViewController); + + FLTBannerAd *mockBannerAd = OCMPartialMock(ad); + GADBannerView *mockView = OCMClassMock([GADBannerView class]); + OCMStub([mockBannerAd bannerView]).andReturn(mockView); + [mockBannerAd load]; + + OCMVerify([mockView loadRequest:[OCMArg checkWithBlock:^BOOL(id obj) { + GADRequest *requestArg = obj; + return + [requestArg.keywords isEqualToArray:@[ @"apple" ]]; + }]]); +} + +@end diff --git a/mih_ui/android/build/ios/SourcePackages/google_mobile_ads-8.0.0/example/ios/RunnerTests/FLTFluidGAMBannerAdTest.m b/mih_ui/android/build/ios/SourcePackages/google_mobile_ads-8.0.0/example/ios/RunnerTests/FLTFluidGAMBannerAdTest.m new file mode 100644 index 00000000..5ca92fa9 --- /dev/null +++ b/mih_ui/android/build/ios/SourcePackages/google_mobile_ads-8.0.0/example/ios/RunnerTests/FLTFluidGAMBannerAdTest.m @@ -0,0 +1,204 @@ +// Copyright 2021 Google LLC +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// https://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +#import +#import + +#import "FLTAdInstanceManager_Internal.h" +#import "FLTAd_Internal.h" + +@interface FLTFluidGAMBannerAdTest : XCTestCase +@end + +@implementation FLTFluidGAMBannerAdTest { + FLTAdInstanceManager *mockManager; +} + +- (void)setUp { + mockManager = (OCMClassMock([FLTAdInstanceManager class])); +} + +- (void)testDelegates { + FLTGAMAdRequest *request = [[FLTGAMAdRequest alloc] init]; + request.keywords = @[ @"apple" ]; + UIViewController *mockRootViewController = + OCMClassMock([UIViewController class]); + FLTFluidGAMBannerAd *fluidAd = [[FLTFluidGAMBannerAd alloc] + initWithAdUnitId:@"testId" + request:[[FLTGAMAdRequest alloc] init] + rootViewController:mockRootViewController + adId:@1]; + fluidAd.manager = mockManager; + + [fluidAd load]; + GAMBannerView *adView = (GAMBannerView *)fluidAd.bannerView; + XCTAssertEqual(adView.appEventDelegate, fluidAd); + XCTAssertEqual(adView.delegate, fluidAd); + + [fluidAd.bannerView.delegate + bannerViewDidReceiveAd:OCMClassMock([GADBannerView class])]; + OCMVerify([mockManager onAdLoaded:[OCMArg isEqual:fluidAd] + responseInfo:[OCMArg isEqual:adView.responseInfo]]); + + [fluidAd.bannerView.delegate + bannerViewDidDismissScreen:OCMClassMock([GADBannerView class])]; + OCMVerify([mockManager onBannerDidDismissScreen:[OCMArg isEqual:fluidAd]]); + + [fluidAd.bannerView.delegate + bannerViewWillDismissScreen:OCMClassMock([GADBannerView class])]; + OCMVerify([mockManager onBannerWillDismissScreen:[OCMArg isEqual:fluidAd]]); + + [fluidAd.bannerView.delegate + bannerViewWillPresentScreen:OCMClassMock([GADBannerView class])]; + OCMVerify([mockManager onBannerWillPresentScreen:[OCMArg isEqual:fluidAd]]); + + [fluidAd.bannerView.delegate + bannerViewDidRecordImpression:OCMClassMock([GADBannerView class])]; + OCMVerify([mockManager onBannerImpression:[OCMArg isEqual:fluidAd]]); + + [fluidAd.bannerView.delegate + bannerViewDidRecordClick:OCMClassMock([GADBannerView class])]; + OCMVerify([mockManager adDidRecordClick:[OCMArg isEqual:fluidAd]]); + + // Mock callback of paid event handler. + GADAdValue *adValue = OCMClassMock([GADAdValue class]); + OCMStub([adValue value]).andReturn(NSDecimalNumber.one); + OCMStub([adValue precision]).andReturn(GADAdValuePrecisionEstimated); + OCMStub([adValue currencyCode]).andReturn(@"currencyCode"); + + fluidAd.bannerView.paidEventHandler(adValue); + OCMVerify([mockManager + onPaidEvent:[OCMArg isEqual:fluidAd] + value:[OCMArg checkWithBlock:^BOOL(id obj) { + FLTAdValue *adValue = obj; + XCTAssertEqualObjects( + adValue.valueMicros, + [[NSDecimalNumber alloc] initWithInt:1000000]); + XCTAssertEqual(adValue.precision, GADAdValuePrecisionEstimated); + XCTAssertEqualObjects(adValue.currencyCode, @"currencyCode"); + return TRUE; + }]]); + + NSString *domain = @"domain"; + NSDictionary *userInfo = @{NSLocalizedDescriptionKey : @"description"}; + NSError *error = [NSError errorWithDomain:domain code:1 userInfo:userInfo]; + [fluidAd.bannerView.delegate bannerView:OCMClassMock([GADBannerView class]) + didFailToReceiveAdWithError:error]; + OCMVerify([mockManager onAdFailedToLoad:[OCMArg isEqual:fluidAd] + error:[OCMArg isEqual:error]]); + + [adView.appEventDelegate adView:adView + didReceiveAppEvent:@"appEvent" + withInfo:@"info"]; + OCMVerify([mockManager onAppEvent:[OCMArg isEqual:fluidAd] + name:[OCMArg isEqual:@"appEvent"] + data:[OCMArg isEqual:@"info"]]); +} + +- (void)testPlatformViewSetup { + // Setup mocks + FLTGAMAdRequest *request = [[FLTGAMAdRequest alloc] init]; + request.keywords = @[ @"apple" ]; + UIViewController *mockRootViewController = + OCMClassMock([UIViewController class]); + + id scrollViewClassMock = OCMClassMock([UIScrollView class]); + OCMStub([scrollViewClassMock alloc]).andReturn(scrollViewClassMock); + OCMStub([scrollViewClassMock initWithFrame:CGRectZero]) + .andReturn(scrollViewClassMock); + + id gamBannerClassMock = OCMClassMock([GAMBannerView class]); + OCMStub([gamBannerClassMock alloc]).andReturn(gamBannerClassMock); + OCMStub([gamBannerClassMock initWithAdSize:GADAdSizeFluid]) + .andReturn(gamBannerClassMock); + + // Create and load an ad. + FLTFluidGAMBannerAd *fluidAd = [[FLTFluidGAMBannerAd alloc] + initWithAdUnitId:@"testId" + request:[[FLTGAMAdRequest alloc] init] + rootViewController:mockRootViewController + adId:@1]; + fluidAd.manager = mockManager; + + // Mimic successful loading of an ad. + [fluidAd load]; + [fluidAd.bannerView.delegate + bannerViewDidReceiveAd:OCMClassMock([GADBannerView class])]; + + // The banner view should be contained within a scrollview. + XCTAssertEqualObjects(fluidAd.view, scrollViewClassMock); + OCMVerify([(UIScrollView *)scrollViewClassMock + addSubview:[OCMArg isKindOfClass:GAMBannerView.class]]); + OCMVerify([(UIScrollView *)scrollViewClassMock + setShowsHorizontalScrollIndicator:NO]); + OCMVerify( + [(UIScrollView *)scrollViewClassMock setShowsVerticalScrollIndicator:NO]); + + [scrollViewClassMock stopMocking]; + [gamBannerClassMock stopMocking]; +} + +- (void)testSizeChangedEvent { + // Setup mocks + FLTGAMAdRequest *request = [[FLTGAMAdRequest alloc] init]; + request.keywords = @[ @"apple" ]; + UIViewController *mockRootViewController = + OCMClassMock([UIViewController class]); + + // Create and load an ad. + FLTFluidGAMBannerAd *fluidAd = [[FLTFluidGAMBannerAd alloc] + initWithAdUnitId:@"testId" + request:[[FLTGAMAdRequest alloc] init] + rootViewController:mockRootViewController + adId:@1]; + fluidAd.manager = mockManager; + + // Mimic successful loading of an ad. + [fluidAd load]; + [fluidAd.bannerView.delegate + bannerViewDidReceiveAd:OCMClassMock([GADBannerView class])]; + + [fluidAd.bannerView.adSizeDelegate + adView:fluidAd.bannerView + willChangeAdSizeTo:GADAdSizeFromCGSize(CGSizeMake(0, 25))]; + OCMVerify([mockManager onFluidAdHeightChanged:fluidAd height:25]); +} + +- (void)testLoad { + FLTGAMAdRequest *request = [[FLTGAMAdRequest alloc] init]; + request.keywords = @[ @"apple" ]; + UIViewController *mockRootViewController = + OCMClassMock([UIViewController class]); + FLTFluidGAMBannerAd *ad = + [[FLTFluidGAMBannerAd alloc] initWithAdUnitId:@"testId" + request:request + rootViewController:mockRootViewController + adId:@1]; + + XCTAssertEqual(ad.bannerView.adUnitID, @"testId"); + XCTAssertEqual(ad.bannerView.rootViewController, mockRootViewController); + + FLTBannerAd *mockBannerAd = OCMPartialMock(ad); + GADBannerView *mockView = OCMClassMock([GADBannerView class]); + OCMStub([mockBannerAd bannerView]).andReturn(mockView); + [mockBannerAd load]; + + OCMVerify([mockView loadRequest:[OCMArg checkWithBlock:^BOOL(id obj) { + GADRequest *requestArg = obj; + return + [requestArg.keywords isEqualToArray:@[ @"apple" ]]; + }]]); +} + +@end diff --git a/mih_ui/android/build/ios/SourcePackages/google_mobile_ads-8.0.0/example/ios/RunnerTests/FLTGAMAdRequestTest.m b/mih_ui/android/build/ios/SourcePackages/google_mobile_ads-8.0.0/example/ios/RunnerTests/FLTGAMAdRequestTest.m new file mode 100644 index 00000000..44b7a1c8 --- /dev/null +++ b/mih_ui/android/build/ios/SourcePackages/google_mobile_ads-8.0.0/example/ios/RunnerTests/FLTGAMAdRequestTest.m @@ -0,0 +1,152 @@ +// Copyright 2021 Google LLC +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// https://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +#import +#import + +#import "FLTAd_Internal.h" +#import "FLTMediationNetworkExtrasProvider.h" + +@interface FLTGAMAdRequestTest : XCTestCase +@end + +@interface TestGAMAdNetworkExtras : NSObject +@end + +@implementation TestGAMAdNetworkExtras +@end + +@implementation FLTGAMAdRequestTest + +- (void)testAsAdRequestAllParams { + // Proxy [GAMRequest init] to return a partial mock of a real GAMRequest. + GAMRequest *gamRequestSpy = OCMPartialMock([GAMRequest request]); + id gamRequestClassMock = OCMClassMock([GAMRequest class]); + OCMStub([gamRequestClassMock request]).andReturn(gamRequestSpy); + + // Set values for all params. + FLTGAMAdRequest *fltGAMAdRequest = [[FLTGAMAdRequest alloc] init]; + fltGAMAdRequest.contentURL = @"contentURL"; + NSArray *keywords = @[ @"keyword1", @"keyword2" ]; + fltGAMAdRequest.keywords = keywords; + fltGAMAdRequest.nonPersonalizedAds = YES; + fltGAMAdRequest.mediationExtrasIdentifier = @"identifier"; + NSArray *neighbors = @[ @"neighbor1", @"neighbor2" ]; + fltGAMAdRequest.neighboringContentURLs = neighbors; + fltGAMAdRequest.customTargeting = @{@"key" : @"value"}; + fltGAMAdRequest.pubProvidedID = @"pubProvidedId"; + fltGAMAdRequest.customTargetingLists = @{@"key" : @[ @"value1", @"value2" ]}; + + // Mock FLTMediationNetworkExtrasProvider. + GADExtras *extras = [[GADExtras alloc] init]; + TestGAMAdNetworkExtras *testExtras = [[TestGAMAdNetworkExtras alloc] init]; + NSArray> *extrasArray = @[ extras, testExtras ]; + id extrasProvider = + OCMProtocolMock(@protocol(FLTMediationNetworkExtrasProvider)); + OCMStub([extrasProvider getMediationExtras:[OCMArg isEqual:@"test-ad-unit"] + mediationExtrasIdentifier:@"identifier"]) + .andReturn(extrasArray); + + fltGAMAdRequest.mediationNetworkExtrasProvider = extrasProvider; + + // Create a GAMRequest and verify properties are set correctly. + GAMRequest *gamRequest = [fltGAMAdRequest asGAMRequest:@"test-ad-unit"]; + + XCTAssertEqualObjects(gamRequest.contentURL, @"contentURL"); + XCTAssertEqualObjects(gamRequest.keywords, keywords); + XCTAssertEqualObjects(gamRequest.neighboringContentURLStrings, neighbors); + XCTAssertEqualObjects(gamRequest.customTargeting[@"key"], @"value1,value2"); + XCTAssertEqualObjects(gamRequest.publisherProvidedID, @"pubProvidedId"); + GADExtras *updatedExtras = [gamRequest adNetworkExtrasFor:[GADExtras class]]; + XCTAssertEqualObjects(updatedExtras, extras); + XCTAssertEqualObjects(updatedExtras.additionalParameters[@"npa"], @"1"); + OCMVerify( + [gamRequestSpy registerAdNetworkExtras:[OCMArg isEqual:testExtras]]); +} + +- (void)testAsAdRequestNoParams { + // Proxy [GAMRequest init] to return a partial mock of a real GAMRequest. + GAMRequest *gamRequestSpy = OCMPartialMock([GAMRequest request]); + id gamRequestClassMock = OCMClassMock([GAMRequest class]); + OCMStub([gamRequestClassMock request]).andReturn(gamRequestSpy); + + // Create a GAMRequest with no additional params. + FLTGAMAdRequest *fltGAMAdRequest = [[FLTGAMAdRequest alloc] init]; + GAMRequest *gamRequest = [fltGAMAdRequest asGAMRequest:@"test-ad-unit"]; + + // Verify parameters are empty or nil. + XCTAssertNil(gamRequest.contentURL); + XCTAssertNil(gamRequest.keywords); + XCTAssertNil(gamRequest.neighboringContentURLStrings); + XCTAssertNil([gamRequest adNetworkExtrasFor:[GADExtras class]]); + XCTAssertNil(gamRequest.publisherProvidedID); + XCTAssertTrue(gamRequest.customTargeting.count == 0); +} + +- (void)testGADExtrasAddedWhenNpaSpecified { + // Proxy [GAMRequest init] to return a partial mock of a real GAMRequest. + GAMRequest *gamRequestSpy = OCMPartialMock([GAMRequest request]); + id gamRequestClassMock = OCMClassMock([GAMRequest class]); + OCMStub([gamRequestClassMock request]).andReturn(gamRequestSpy); + + // Create a GAMRequest with NPA set, and a FLTMediationNetworkExtrasProvider + // that returns an empty array. + FLTGAMAdRequest *fltGAMAdRequest = [[FLTGAMAdRequest alloc] init]; + fltGAMAdRequest.nonPersonalizedAds = YES; + fltGAMAdRequest.mediationExtrasIdentifier = @"identifier"; + + NSArray> *extrasArray = @[]; + id extrasProvider = + OCMProtocolMock(@protocol(FLTMediationNetworkExtrasProvider)); + OCMStub([extrasProvider getMediationExtras:[OCMArg isEqual:@"test-ad-unit"] + mediationExtrasIdentifier:@"identifier"]) + .andReturn(extrasArray); + + fltGAMAdRequest.mediationNetworkExtrasProvider = extrasProvider; + + GAMRequest *gamRequest = [fltGAMAdRequest asGAMRequest:@"test-ad-unit"]; + + // GADExtras should be added with npa = 1. + GADExtras *updatedExtras = [gamRequest adNetworkExtrasFor:[GADExtras class]]; + XCTAssertEqualObjects(updatedExtras.additionalParameters[@"npa"], @"1"); +} + +- (void)testGADExtrasWithoutNpa { + // Proxy [GAMRequest init] to return a partial mock of a real GAMRequest. + GAMRequest *gamRequestSpy = OCMPartialMock([GAMRequest request]); + id gamRequestClassMock = OCMClassMock([GAMRequest class]); + OCMStub([gamRequestClassMock request]).andReturn(gamRequestSpy); + + // Extras should be added even if npa is not set. + FLTGAMAdRequest *fltGAMAdRequest = [[FLTGAMAdRequest alloc] init]; + fltGAMAdRequest.mediationExtrasIdentifier = @"identifier"; + + TestGAMAdNetworkExtras *testExtras = [[TestGAMAdNetworkExtras alloc] init]; + NSArray> *extrasArray = @[ testExtras ]; + id extrasProvider = + OCMProtocolMock(@protocol(FLTMediationNetworkExtrasProvider)); + OCMStub([extrasProvider getMediationExtras:[OCMArg isEqual:@"test-ad-unit"] + mediationExtrasIdentifier:@"identifier"]) + .andReturn(extrasArray); + + fltGAMAdRequest.mediationNetworkExtrasProvider = extrasProvider; + + GADRequest *gamRequest = [fltGAMAdRequest asGAMRequest:@"test-ad-unit"]; + + XCTAssertNil([gamRequest adNetworkExtrasFor:[GADExtras class]]); + OCMVerify( + [gamRequestSpy registerAdNetworkExtras:[OCMArg isEqual:testExtras]]); +} + +@end diff --git a/mih_ui/android/build/ios/SourcePackages/google_mobile_ads-8.0.0/example/ios/RunnerTests/FLTGAMBannerAdTest.m b/mih_ui/android/build/ios/SourcePackages/google_mobile_ads-8.0.0/example/ios/RunnerTests/FLTGAMBannerAdTest.m new file mode 100644 index 00000000..1baf1f4c --- /dev/null +++ b/mih_ui/android/build/ios/SourcePackages/google_mobile_ads-8.0.0/example/ios/RunnerTests/FLTGAMBannerAdTest.m @@ -0,0 +1,137 @@ +// Copyright 2021 Google LLC +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// https://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +#import +#import + +#import "FLTAdInstanceManager_Internal.h" +#import "FLTAd_Internal.h" + +@interface FLTGAMBannerAdTest : XCTestCase +@end + +@implementation FLTGAMBannerAdTest { + FLTAdInstanceManager *mockManager; +} + +- (void)setUp { + mockManager = (OCMClassMock([FLTAdInstanceManager class])); +} + +- (void)testDelegates { + FLTGAMAdRequest *request = [[FLTGAMAdRequest alloc] init]; + request.keywords = @[ @"apple" ]; + UIViewController *mockRootViewController = + OCMClassMock([UIViewController class]); + FLTGAMBannerAd *bannerAd = [[FLTGAMBannerAd alloc] + initWithAdUnitId:@"testId" + sizes:@[ [[FLTAdSize alloc] initWithWidth:@(1) height:@(2)] ] + request:[[FLTGAMAdRequest alloc] init] + rootViewController:mockRootViewController + adId:@1]; + bannerAd.manager = mockManager; + + [bannerAd load]; + GAMBannerView *adView = (GAMBannerView *)bannerAd.bannerView; + XCTAssertEqual(adView.appEventDelegate, bannerAd); + XCTAssertEqual(adView.delegate, bannerAd); + + [bannerAd.bannerView.delegate + bannerViewDidReceiveAd:OCMClassMock([GADBannerView class])]; + OCMVerify([mockManager onAdLoaded:[OCMArg isEqual:bannerAd] + responseInfo:[OCMArg isEqual:adView.responseInfo]]); + + [bannerAd.bannerView.delegate + bannerViewDidDismissScreen:OCMClassMock([GADBannerView class])]; + OCMVerify([mockManager onBannerDidDismissScreen:[OCMArg isEqual:bannerAd]]); + + [bannerAd.bannerView.delegate + bannerViewWillDismissScreen:OCMClassMock([GADBannerView class])]; + OCMVerify([mockManager onBannerWillDismissScreen:[OCMArg isEqual:bannerAd]]); + + [bannerAd.bannerView.delegate + bannerViewWillPresentScreen:OCMClassMock([GADBannerView class])]; + OCMVerify([mockManager onBannerWillPresentScreen:[OCMArg isEqual:bannerAd]]); + + [bannerAd.bannerView.delegate + bannerViewDidRecordImpression:OCMClassMock([GADBannerView class])]; + OCMVerify([mockManager onBannerImpression:[OCMArg isEqual:bannerAd]]); + + [bannerAd.bannerView.delegate + bannerViewDidRecordClick:OCMClassMock([GADBannerView class])]; + OCMVerify([mockManager adDidRecordClick:[OCMArg isEqual:bannerAd]]); + + // Mock callback of paid event handler. + GADAdValue *adValue = OCMClassMock([GADAdValue class]); + OCMStub([adValue value]).andReturn(NSDecimalNumber.one); + OCMStub([adValue precision]).andReturn(GADAdValuePrecisionEstimated); + OCMStub([adValue currencyCode]).andReturn(@"currencyCode"); + + bannerAd.bannerView.paidEventHandler(adValue); + OCMVerify([mockManager + onPaidEvent:[OCMArg isEqual:bannerAd] + value:[OCMArg checkWithBlock:^BOOL(id obj) { + FLTAdValue *adValue = obj; + XCTAssertEqualObjects( + adValue.valueMicros, + [[NSDecimalNumber alloc] initWithInt:1000000]); + XCTAssertEqual(adValue.precision, GADAdValuePrecisionEstimated); + XCTAssertEqualObjects(adValue.currencyCode, @"currencyCode"); + return TRUE; + }]]); + + NSString *domain = @"domain"; + NSDictionary *userInfo = @{NSLocalizedDescriptionKey : @"description"}; + NSError *error = [NSError errorWithDomain:domain code:1 userInfo:userInfo]; + [bannerAd.bannerView.delegate bannerView:OCMClassMock([GADBannerView class]) + didFailToReceiveAdWithError:error]; + OCMVerify([mockManager onAdFailedToLoad:[OCMArg isEqual:bannerAd] + error:[OCMArg isEqual:error]]); + + [adView.appEventDelegate adView:adView + didReceiveAppEvent:@"appEvent" + withInfo:@"info"]; + OCMVerify([mockManager onAppEvent:[OCMArg isEqual:bannerAd] + name:[OCMArg isEqual:@"appEvent"] + data:[OCMArg isEqual:@"info"]]); +} + +- (void)testLoad { + FLTGAMAdRequest *request = [[FLTGAMAdRequest alloc] init]; + request.keywords = @[ @"apple" ]; + UIViewController *mockRootViewController = + OCMClassMock([UIViewController class]); + FLTGAMBannerAd *ad = [[FLTGAMBannerAd alloc] + initWithAdUnitId:@"testId" + sizes:@[ [[FLTAdSize alloc] initWithWidth:@(1) height:@(2)] ] + request:request + rootViewController:mockRootViewController + adId:@1]; + + XCTAssertEqual(ad.bannerView.adUnitID, @"testId"); + XCTAssertEqual(ad.bannerView.rootViewController, mockRootViewController); + + FLTBannerAd *mockBannerAd = OCMPartialMock(ad); + GADBannerView *mockView = OCMClassMock([GADBannerView class]); + OCMStub([mockBannerAd bannerView]).andReturn(mockView); + [mockBannerAd load]; + + OCMVerify([mockView loadRequest:[OCMArg checkWithBlock:^BOOL(id obj) { + GADRequest *requestArg = obj; + return + [requestArg.keywords isEqualToArray:@[ @"apple" ]]; + }]]); +} + +@end diff --git a/mih_ui/android/build/ios/SourcePackages/google_mobile_ads-8.0.0/example/ios/RunnerTests/FLTGamInterstitialAdTest.m b/mih_ui/android/build/ios/SourcePackages/google_mobile_ads-8.0.0/example/ios/RunnerTests/FLTGamInterstitialAdTest.m new file mode 100644 index 00000000..da46fba0 --- /dev/null +++ b/mih_ui/android/build/ios/SourcePackages/google_mobile_ads-8.0.0/example/ios/RunnerTests/FLTGamInterstitialAdTest.m @@ -0,0 +1,173 @@ +// Copyright 2021 Google LLC +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// https://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +#import +#import + +#import "FLTAdInstanceManager_Internal.h" +#import "FLTAd_Internal.h" + +@interface FLTGAMInterstitialAdTest : XCTestCase +@end + +@implementation FLTGAMInterstitialAdTest { + FLTAdInstanceManager *mockManager; +} + +- (void)setUp { + mockManager = (OCMClassMock([FLTAdInstanceManager class])); +} + +- (void)testLoadShowInterstitialAd { + FLTGAMAdRequest *request = OCMClassMock([FLTGAMAdRequest class]); + OCMStub([request keywords]).andReturn(@[ @"apple" ]); + GAMRequest *gadRequest = OCMClassMock([GAMRequest class]); + OCMStub([request asGAMRequest:[OCMArg any]]).andReturn(gadRequest); + + FLTGAMInterstitialAd *ad = + [[FLTGAMInterstitialAd alloc] initWithAdUnitId:@"testId" + request:request + adId:@1]; + ad.manager = mockManager; + + id interstitialClassMock = OCMClassMock([GAMInterstitialAd class]); + OCMStub(ClassMethod([interstitialClassMock + loadWithAdManagerAdUnitID:[OCMArg any] + request:[OCMArg any] + completionHandler:[OCMArg any]])) + .andDo(^(NSInvocation *invocation) { + void (^completionHandler)(GAMInterstitialAd *ad, NSError *error); + [invocation getArgument:&completionHandler atIndex:4]; + completionHandler(interstitialClassMock, nil); + }); + NSError *error = OCMClassMock([NSError class]); + OCMStub([interstitialClassMock setFullScreenContentDelegate:[OCMArg any]]) + .andDo(^(NSInvocation *invocation) { + id delegate; + [invocation getArgument:&delegate atIndex:2]; + XCTAssertEqual(delegate, ad); + [delegate adDidRecordImpression:interstitialClassMock]; + [delegate adDidRecordClick:interstitialClassMock]; + [delegate adDidDismissFullScreenContent:interstitialClassMock]; + [delegate adWillPresentFullScreenContent:interstitialClassMock]; + [delegate adWillDismissFullScreenContent:interstitialClassMock]; + [delegate ad:interstitialClassMock + didFailToPresentFullScreenContentWithError:error]; + }); + + OCMStub([interstitialClassMock setAppEventDelegate:[OCMArg any]]) + .andDo(^(NSInvocation *invocation) { + id delegate; + [invocation getArgument:&delegate atIndex:2]; + XCTAssertEqual(delegate, ad); + [delegate interstitialAd:interstitialClassMock + didReceiveAppEvent:@"event" + withInfo:@"info"]; + }); + + GADResponseInfo *responseInfo = OCMClassMock([GADResponseInfo class]); + OCMStub([interstitialClassMock responseInfo]).andReturn(responseInfo); + + // Mock callback of paid event handler. + GADAdValue *adValue = OCMClassMock([GADAdValue class]); + OCMStub([adValue value]).andReturn(NSDecimalNumber.one); + OCMStub([adValue precision]).andReturn(GADAdValuePrecisionEstimated); + OCMStub([adValue currencyCode]).andReturn(@"currencyCode"); + OCMStub([interstitialClassMock + setPaidEventHandler:[OCMArg checkWithBlock:^BOOL(id obj) { + GADPaidEventHandler handler = obj; + handler(adValue); + return YES; + }]]); + // Call load and verify interactions with mocks. + [ad load]; + + OCMVerify(ClassMethod([interstitialClassMock + loadWithAdManagerAdUnitID:[OCMArg isEqual:@"testId"] + request:[OCMArg isEqual:gadRequest] + completionHandler:[OCMArg any]])); + OCMVerify([mockManager onAdLoaded:[OCMArg isEqual:ad] + responseInfo:[OCMArg isEqual:responseInfo]]); + OCMVerify( + [interstitialClassMock setFullScreenContentDelegate:[OCMArg isEqual:ad]]); + XCTAssertEqual(ad.interstitial, interstitialClassMock); + OCMVerify([mockManager + onPaidEvent:[OCMArg isEqual:ad] + value:[OCMArg checkWithBlock:^BOOL(id obj) { + FLTAdValue *adValue = obj; + XCTAssertEqualObjects( + adValue.valueMicros, + [[NSDecimalNumber alloc] initWithInt:1000000]); + XCTAssertEqual(adValue.precision, GADAdValuePrecisionEstimated); + XCTAssertEqualObjects(adValue.currencyCode, @"currencyCode"); + return TRUE; + }]]); + + // Show the ad + [ad show]; + + OCMVerify( + [interstitialClassMock presentFromRootViewController:[OCMArg isNil]]); + + // Verify full screen callbacks. + OCMVerify([mockManager adWillPresentFullScreenContent:[OCMArg isEqual:ad]]); + OCMVerify([mockManager adDidDismissFullScreenContent:[OCMArg isEqual:ad]]); + OCMVerify([mockManager adWillDismissFullScreenContent:[OCMArg isEqual:ad]]); + OCMVerify([mockManager adDidRecordImpression:[OCMArg isEqual:ad]]); + OCMVerify([mockManager adDidRecordClick:[OCMArg isEqual:ad]]); + OCMVerify([mockManager + didFailToPresentFullScreenContentWithError:[OCMArg isEqual:ad] + error:[OCMArg isEqual:error]]); + + // Verify app event + OCMVerify([mockManager onAppEvent:ad + name:[OCMArg isEqual:@"event"] + data:[OCMArg isEqual:@"info"]]); +} + +- (void)testFailToLoad { + FLTGAMAdRequest *request = OCMClassMock([FLTGAMAdRequest class]); + OCMStub([request keywords]).andReturn(@[ @"apple" ]); + GAMRequest *gadRequest = OCMClassMock([GAMRequest class]); + OCMStub([request asGAMRequest:[OCMArg any]]).andReturn(gadRequest); + + FLTGAMInterstitialAd *ad = + [[FLTGAMInterstitialAd alloc] initWithAdUnitId:@"testId" + request:request + adId:@1]; + ad.manager = mockManager; + + id interstitialClassMock = OCMClassMock([GAMInterstitialAd class]); + NSError *error = OCMClassMock([NSError class]); + OCMStub(ClassMethod([interstitialClassMock + loadWithAdManagerAdUnitID:[OCMArg any] + request:[OCMArg any] + completionHandler:[OCMArg any]])) + .andDo(^(NSInvocation *invocation) { + void (^completionHandler)(GAMInterstitialAd *ad, NSError *error); + [invocation getArgument:&completionHandler atIndex:4]; + completionHandler(nil, error); + }); + + [ad load]; + + OCMVerify(ClassMethod([interstitialClassMock + loadWithAdManagerAdUnitID:[OCMArg isEqual:@"testId"] + request:[OCMArg isEqual:gadRequest] + completionHandler:[OCMArg any]])); + OCMVerify([mockManager onAdFailedToLoad:[OCMArg isEqual:ad] + error:[OCMArg isEqual:error]]); +} + +@end diff --git a/mih_ui/android/build/ios/SourcePackages/google_mobile_ads-8.0.0/example/ios/RunnerTests/FLTGoogleMobileAdsPluginMethodCallsTest.m b/mih_ui/android/build/ios/SourcePackages/google_mobile_ads-8.0.0/example/ios/RunnerTests/FLTGoogleMobileAdsPluginMethodCallsTest.m new file mode 100644 index 00000000..ff7d8bde --- /dev/null +++ b/mih_ui/android/build/ios/SourcePackages/google_mobile_ads-8.0.0/example/ios/RunnerTests/FLTGoogleMobileAdsPluginMethodCallsTest.m @@ -0,0 +1,712 @@ +// Copyright 2021 Google LLC +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// https://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +#import +#import + +#import "google_mobile_ads/FLTAdInstanceManager_Internal.h" +#import "google_mobile_ads/FLTAdUtil.h" +#import "google_mobile_ads/FLTGoogleMobileAdsPlugin.h" +#import "google_mobile_ads/FLTGoogleMobileAdsReaderWriter_Internal.h" +#import "google_mobile_ads/FLTMobileAds_Internal.h" + +@interface FLTGoogleMobileAdsPluginMethodCallsTest : XCTestCase +@end + +@interface FLTGoogleMobileAdsPlugin () +@property UIViewController *rootController; +@end + +@implementation FLTGoogleMobileAdsPluginMethodCallsTest { + FLTGoogleMobileAdsPlugin *_fltGoogleMobileAdsPlugin; + FLTAdInstanceManager *_mockAdInstanceManager; +} + +- (void)setUp { + id messenger = + OCMProtocolMock(@protocol(FlutterBinaryMessenger)); + FLTAdInstanceManager *manager = + [[FLTAdInstanceManager alloc] initWithBinaryMessenger:messenger]; + _mockAdInstanceManager = OCMPartialMock(manager); + _fltGoogleMobileAdsPlugin = [[FLTGoogleMobileAdsPlugin alloc] init]; + [_fltGoogleMobileAdsPlugin setValue:_mockAdInstanceManager + forKey:@"_manager"]; +} + +- (void)testDisposeAd { + FlutterMethodCall *methodCall = + [FlutterMethodCall methodCallWithMethodName:@"disposeAd" + arguments:@{@"adId" : @1}]; + __block bool resultInvoked = false; + __block id _Nullable returnedResult; + FlutterResult result = ^(id _Nullable result) { + resultInvoked = true; + returnedResult = result; + }; + + [_fltGoogleMobileAdsPlugin handleMethodCall:methodCall result:result]; + + XCTAssertTrue(resultInvoked); + XCTAssertNil(returnedResult); + OCMVerify([_mockAdInstanceManager dispose:@1]); +} + +- (void)testLoadRewardedAd { + FLTAdRequest *request = [[FLTAdRequest alloc] init]; + request.keywords = @[ @"apple" ]; + FlutterMethodCall *methodCall = + [FlutterMethodCall methodCallWithMethodName:@"loadRewardedAd" + arguments:@{ + @"adId" : @2, + @"adUnitId" : @"testId", + @"request" : request, + }]; + + __block bool resultInvoked = false; + __block id _Nullable returnedResult; + FlutterResult result = ^(id _Nullable result) { + resultInvoked = true; + returnedResult = result; + }; + + [_fltGoogleMobileAdsPlugin handleMethodCall:methodCall result:result]; + + XCTAssertTrue(resultInvoked); + XCTAssertNil(returnedResult); + BOOL (^verificationBlock)(FLTRewardedAd *) = ^BOOL(FLTRewardedAd *ad) { + FLTAdRequest *adRequest = [ad valueForKey:@"_adRequest"]; + NSString *adUnit = [ad valueForKey:@"_adUnitId"]; + XCTAssertEqualObjects(adRequest, request); + XCTAssertEqualObjects(adUnit, @"testId"); + return YES; + }; + OCMVerify([_mockAdInstanceManager + loadAd:[OCMArg checkWithBlock:verificationBlock]]); +} + +- (void)testInternalInit { + FlutterMethodCall *methodCall = + [FlutterMethodCall methodCallWithMethodName:@"_init" arguments:@{}]; + + __block bool resultInvoked = false; + __block id _Nullable returnedResult; + FlutterResult result = ^(id _Nullable result) { + resultInvoked = true; + returnedResult = result; + }; + + [_fltGoogleMobileAdsPlugin handleMethodCall:methodCall result:result]; + + XCTAssertTrue(resultInvoked); + XCTAssertNil(returnedResult); + OCMVerify([_mockAdInstanceManager disposeAllAds]); +} + +- (void)testMobileAdsInitialize { + id gadMobileAdsClassMock = OCMClassMock([GADMobileAds class]); + OCMStub(ClassMethod([gadMobileAdsClassMock sharedInstance])) + .andReturn((GADMobileAds *)gadMobileAdsClassMock); + GADInitializationStatus *mockInitStatus = + OCMClassMock([GADInitializationStatus class]); + OCMStub([mockInitStatus adapterStatusesByClassName]).andReturn(@{}); + OCMStub([gadMobileAdsClassMock startWithCompletionHandler:[OCMArg any]]) + .andDo(^(NSInvocation *invocation) { + // Invoke the init handler twice. + __unsafe_unretained GADInitializationCompletionHandler + completionHandler; + [invocation getArgument:&completionHandler atIndex:2]; + completionHandler(mockInitStatus); + completionHandler(mockInitStatus); + }); + + FlutterMethodCall *methodCall = + [FlutterMethodCall methodCallWithMethodName:@"MobileAds#initialize" + arguments:@{}]; + __block int resultInvokedCount = 0; + __block id _Nullable returnedResult; + FlutterResult result = ^(id _Nullable result) { + resultInvokedCount += 1; + returnedResult = result; + }; + + [_fltGoogleMobileAdsPlugin handleMethodCall:methodCall result:result]; + XCTAssertEqual(resultInvokedCount, 1); + XCTAssertEqual( + [((FLTInitializationStatus *)returnedResult) adapterStatuses].count, 0); +} + +- (void)testSetSameAppKeyEnabledYes { + id gadMobileAdsClassMock = OCMClassMock([GADMobileAds class]); + OCMStub(ClassMethod([gadMobileAdsClassMock sharedInstance])) + .andReturn((GADMobileAds *)gadMobileAdsClassMock); + GADRequestConfiguration *gadRequestConfigurationMock = + OCMClassMock([GADRequestConfiguration class]); + OCMStub([gadMobileAdsClassMock requestConfiguration]) + .andReturn(gadRequestConfigurationMock); + + FlutterMethodCall *methodCall = [FlutterMethodCall + methodCallWithMethodName:@"MobileAds#setSameAppKeyEnabled" + arguments:@{@"isEnabled" : @(YES)}]; + + __block bool resultInvoked = false; + __block id _Nullable returnedResult; + FlutterResult result = ^(id _Nullable result) { + resultInvoked = true; + returnedResult = result; + }; + + [_fltGoogleMobileAdsPlugin handleMethodCall:methodCall result:result]; + + XCTAssertTrue(resultInvoked); + XCTAssertNil(returnedResult); + OCMVerify([gadRequestConfigurationMock + setPublisherFirstPartyIDEnabled:[OCMArg isEqual:@(YES)]]); +} + +- (void)testRegisterWebView { + id gadMobileAdsClassMock = OCMClassMock([GADMobileAds class]); + OCMStub(ClassMethod([gadMobileAdsClassMock sharedInstance])) + .andReturn((GADMobileAds *)gadMobileAdsClassMock); + + WKWebView *mockWebView = OCMClassMock([WKWebView class]); + id fltAdUtilMock = OCMClassMock([FLTAdUtil class]); + OCMStub(ClassMethod([fltAdUtilMock getWebView:[OCMArg any] + flutterPluginRegistry:[OCMArg any]])) + .andReturn(mockWebView); + + FlutterMethodCall *methodCall = + [FlutterMethodCall methodCallWithMethodName:@"MobileAds#registerWebView" + arguments:@{@"webViewId" : @(1)}]; + + __block bool resultInvoked = false; + __block id _Nullable returnedResult; + FlutterResult result = ^(id _Nullable result) { + resultInvoked = true; + returnedResult = result; + }; + + [_fltGoogleMobileAdsPlugin handleMethodCall:methodCall result:result]; + + XCTAssertTrue(resultInvoked); + XCTAssertNil(returnedResult); +} + +- (void)testSetSameAppKeyEnabledNo { + id gadMobileAdsClassMock = OCMClassMock([GADMobileAds class]); + OCMStub(ClassMethod([gadMobileAdsClassMock sharedInstance])) + .andReturn((GADMobileAds *)gadMobileAdsClassMock); + GADRequestConfiguration *gadRequestConfigurationMock = + OCMClassMock([GADRequestConfiguration class]); + OCMStub([gadMobileAdsClassMock requestConfiguration]) + .andReturn(gadRequestConfigurationMock); + + FlutterMethodCall *methodCall = [FlutterMethodCall + methodCallWithMethodName:@"MobileAds#setSameAppKeyEnabled" + arguments:@{@"isEnabled" : @0}]; + + __block bool resultInvoked = false; + __block id _Nullable returnedResult; + FlutterResult result = ^(id _Nullable result) { + resultInvoked = true; + returnedResult = result; + }; + + [_fltGoogleMobileAdsPlugin handleMethodCall:methodCall result:result]; + + XCTAssertTrue(resultInvoked); + XCTAssertNil(returnedResult); + OCMVerify([gadRequestConfigurationMock setPublisherFirstPartyIDEnabled:NO]); + + FlutterMethodCall *methodCallWithBool = [FlutterMethodCall + methodCallWithMethodName:@"MobileAds#setSameAppKeyEnabled" + arguments:@{@"isEnabled" : @NO}]; + + __block bool resultInvokedWithBool = false; + __block id _Nullable returnedResultWithBool; + FlutterResult resultWithBool = ^(id _Nullable result) { + resultInvokedWithBool = true; + returnedResultWithBool = result; + }; + + [_fltGoogleMobileAdsPlugin handleMethodCall:methodCallWithBool + result:resultWithBool]; + + XCTAssertTrue(resultInvokedWithBool); + XCTAssertNil(returnedResultWithBool); + OCMVerify([gadRequestConfigurationMock setPublisherFirstPartyIDEnabled:NO]); +} + +- (void)testSetAppMuted { + FlutterMethodCall *methodCall = + [FlutterMethodCall methodCallWithMethodName:@"MobileAds#setAppMuted" + arguments:@{@"muted" : @(YES)}]; + + __block bool resultInvoked = false; + __block id _Nullable returnedResult; + FlutterResult result = ^(id _Nullable result) { + resultInvoked = true; + returnedResult = result; + }; + + [_fltGoogleMobileAdsPlugin handleMethodCall:methodCall result:result]; + + XCTAssertTrue(resultInvoked); + XCTAssertNil(returnedResult); + NSTimeInterval timeout = 5.0; + NSDate *startTime = [NSDate date]; + while (!GADMobileAds.sharedInstance.applicationMuted && [[NSDate date] timeIntervalSinceDate:startTime] < timeout) { + [NSThread sleepForTimeInterval:0.1]; + } + XCTAssertTrue(GADMobileAds.sharedInstance.applicationMuted); + + methodCall = + [FlutterMethodCall methodCallWithMethodName:@"MobileAds#setAppMuted" + arguments:@{@"muted" : @(NO)}]; + + resultInvoked = false; + result = ^(id _Nullable result) { + resultInvoked = true; + returnedResult = result; + }; + + [_fltGoogleMobileAdsPlugin handleMethodCall:methodCall result:result]; + + XCTAssertTrue(resultInvoked); + XCTAssertNil(returnedResult); + startTime = [NSDate date]; + while (GADMobileAds.sharedInstance.applicationMuted && [[NSDate date] timeIntervalSinceDate:startTime] < timeout) { + [NSThread sleepForTimeInterval:0.1]; + } + XCTAssertFalse(GADMobileAds.sharedInstance.applicationMuted); +} + +- (void)testSetAppVolume { + FlutterMethodCall *methodCall = + [FlutterMethodCall methodCallWithMethodName:@"MobileAds#setAppVolume" + arguments:@{@"volume" : @1.0f}]; + + __block bool resultInvoked = false; + __block id _Nullable returnedResult; + FlutterResult result = ^(id _Nullable result) { + resultInvoked = true; + returnedResult = result; + }; + + [_fltGoogleMobileAdsPlugin handleMethodCall:methodCall result:result]; + + XCTAssertTrue(resultInvoked); + XCTAssertNil(returnedResult); + XCTAssertEqual(GADMobileAds.sharedInstance.applicationVolume, 1.0f); +} + +- (void)testDisableSDKCrashReporting { + id gadMobileAdsClassMock = OCMClassMock([GADMobileAds class]); + OCMStub(ClassMethod([gadMobileAdsClassMock sharedInstance])) + .andReturn((GADMobileAds *)gadMobileAdsClassMock); + FlutterMethodCall *methodCall = [FlutterMethodCall + methodCallWithMethodName:@"MobileAds#disableSDKCrashReporting" + arguments:@{}]; + + __block bool resultInvoked = false; + __block id _Nullable returnedResult; + FlutterResult result = ^(id _Nullable result) { + resultInvoked = true; + returnedResult = result; + }; + + [_fltGoogleMobileAdsPlugin handleMethodCall:methodCall result:result]; + + XCTAssertTrue(resultInvoked); + XCTAssertNil(returnedResult); + OCMVerify([gadMobileAdsClassMock disableSDKCrashReporting]); +} + +- (void)testDisableMediationInitialization { + id gadMobileAdsClassMock = OCMClassMock([GADMobileAds class]); + OCMStub(ClassMethod([gadMobileAdsClassMock sharedInstance])) + .andReturn((GADMobileAds *)gadMobileAdsClassMock); + + FlutterMethodCall *methodCall = [FlutterMethodCall + methodCallWithMethodName:@"MobileAds#disableMediationInitialization" + arguments:@{}]; + + __block bool resultInvoked = false; + __block id _Nullable returnedResult; + FlutterResult result = ^(id _Nullable result) { + resultInvoked = true; + returnedResult = result; + }; + + [_fltGoogleMobileAdsPlugin handleMethodCall:methodCall result:result]; + + XCTAssertTrue(resultInvoked); + XCTAssertNil(returnedResult); + OCMVerify([gadMobileAdsClassMock disableMediationInitialization]); +} + +- (void)testGetVersionString { + FlutterMethodCall *methodCall = + [FlutterMethodCall methodCallWithMethodName:@"MobileAds#getVersionString" + arguments:@{}]; + + __block bool resultInvoked = false; + __block id _Nullable returnedResult; + FlutterResult result = ^(id _Nullable result) { + resultInvoked = true; + returnedResult = result; + }; + + [_fltGoogleMobileAdsPlugin handleMethodCall:methodCall result:result]; + + XCTAssertTrue(resultInvoked); + XCTAssertEqual( + returnedResult, + GADGetStringFromVersionNumber(GADMobileAds.sharedInstance.versionNumber)); +} + +- (void)testOpenDebugMenu { + FlutterMethodCall *methodCall = [FlutterMethodCall + methodCallWithMethodName:@"MobileAds#openDebugMenu" + arguments:@{@"adUnitId" : @"test-ad-unit"}]; + + __block bool resultInvoked = false; + __block id _Nullable returnedResult; + FlutterResult result = ^(id _Nullable result) { + resultInvoked = true; + returnedResult = result; + }; + + FLTGoogleMobileAdsPlugin *mockPlugin = + OCMPartialMock(_fltGoogleMobileAdsPlugin); + UIViewController *mockUIViewController = OCMClassMock(UIViewController.class); + OCMStub([mockPlugin rootController]).andReturn(mockUIViewController); + + [_fltGoogleMobileAdsPlugin handleMethodCall:methodCall result:result]; + + OCMVerify([mockUIViewController + presentViewController:[OCMArg isKindOfClass:[GADDebugOptionsViewController + class]] + animated:[OCMArg any] + completion:[OCMArg isNil]]); + XCTAssertTrue(resultInvoked); + XCTAssertEqual(returnedResult, nil); +} + +- (void)testOpenAdInspectorSuccess { + FlutterMethodCall *methodCall = + [FlutterMethodCall methodCallWithMethodName:@"MobileAds#openAdInspector" + arguments:@{}]; + + __block bool resultInvoked = false; + __block id _Nullable returnedResult; + FlutterResult result = ^(id _Nullable result) { + resultInvoked = true; + returnedResult = result; + }; + + id gadMobileAdsClassMock = OCMClassMock([GADMobileAds class]); + OCMStub(ClassMethod([gadMobileAdsClassMock sharedInstance])) + .andReturn((GADMobileAds *)gadMobileAdsClassMock); + + OCMStub([gadMobileAdsClassMock + presentAdInspectorFromViewController:[OCMArg any] + completionHandler:[OCMArg any]]) + .andDo(^(NSInvocation *invocation) { + __unsafe_unretained GADAdInspectorCompletionHandler completionHandler; + [invocation getArgument:&completionHandler atIndex:3]; + completionHandler(nil); + }); + + [_fltGoogleMobileAdsPlugin handleMethodCall:methodCall result:result]; + + OCMVerify([gadMobileAdsClassMock + presentAdInspectorFromViewController:[OCMArg any] + completionHandler:[OCMArg any]]); + XCTAssertTrue(resultInvoked); + XCTAssertEqual(returnedResult, nil); +} + +- (void)testOpenAdInspectorError { + FlutterMethodCall *methodCall = + [FlutterMethodCall methodCallWithMethodName:@"MobileAds#openAdInspector" + arguments:@{}]; + + __block bool resultInvoked = false; + __block id _Nullable returnedResult; + FlutterResult result = ^(id _Nullable result) { + resultInvoked = true; + returnedResult = result; + }; + + id gadMobileAdsClassMock = OCMClassMock([GADMobileAds class]); + OCMStub(ClassMethod([gadMobileAdsClassMock sharedInstance])) + .andReturn((GADMobileAds *)gadMobileAdsClassMock); + NSDictionary *userInfo = @{ + NSLocalizedDescriptionKey : @"message", + }; + NSError *error = [NSError errorWithDomain:@"domain" code:1 userInfo:userInfo]; + + OCMStub([gadMobileAdsClassMock + presentAdInspectorFromViewController:[OCMArg any] + completionHandler:[OCMArg any]]) + .andDo(^(NSInvocation *invocation) { + __unsafe_unretained GADAdInspectorCompletionHandler completionHandler; + [invocation getArgument:&completionHandler atIndex:3]; + completionHandler(error); + }); + + [_fltGoogleMobileAdsPlugin handleMethodCall:methodCall result:result]; + + OCMVerify([gadMobileAdsClassMock + presentAdInspectorFromViewController:[OCMArg any] + completionHandler:[OCMArg any]]); + XCTAssertTrue(resultInvoked); + FlutterError *resultError = (FlutterError *)returnedResult; + + XCTAssertEqualObjects(resultError.code, @"1"); + XCTAssertEqualObjects(resultError.message, @"message"); + XCTAssertEqualObjects(resultError.details, @"domain"); +} + +- (void)testGetRequestConfiguration { + FlutterMethodCall *methodCall = [FlutterMethodCall + methodCallWithMethodName:@"MobileAds#getRequestConfiguration" + arguments:@{}]; + + __block bool resultInvoked = false; + __block id _Nullable returnedResult; + FlutterResult result = ^(id _Nullable result) { + resultInvoked = true; + returnedResult = result; + }; + + [_fltGoogleMobileAdsPlugin handleMethodCall:methodCall result:result]; + + XCTAssertTrue(resultInvoked); + XCTAssertEqual(returnedResult, + [GADMobileAds.sharedInstance requestConfiguration]); +} + +- (void)testGetAnchoredAdaptiveBannerAdSize { + FlutterMethodCall *methodCall = [FlutterMethodCall + methodCallWithMethodName:@"AdSize#getLargeAnchoredAdaptiveBannerAdSize" + arguments:@{ + @"orientation" : @"portrait", + @"width" : @23, + }]; + + __block bool resultInvoked = false; + __block id _Nullable returnedResult; + FlutterResult result = ^(id _Nullable result) { + resultInvoked = true; + returnedResult = result; + }; + + [_fltGoogleMobileAdsPlugin handleMethodCall:methodCall result:result]; + + XCTAssertTrue(resultInvoked); + XCTAssertEqual( + [returnedResult doubleValue], + GADLargePortraitAnchoredAdaptiveBannerAdSizeWithWidth(23).size.height); + + methodCall = [FlutterMethodCall + methodCallWithMethodName:@"AdSize#getLargeAnchoredAdaptiveBannerAdSize" + arguments:@{ + @"orientation" : @"landscape", + @"width" : @34, + }]; + + resultInvoked = false; + result = ^(id _Nullable result) { + resultInvoked = true; + returnedResult = result; + }; + + [_fltGoogleMobileAdsPlugin handleMethodCall:methodCall result:result]; + + XCTAssertTrue(resultInvoked); + XCTAssertEqual( + [returnedResult doubleValue], + GADLargeLandscapeAnchoredAdaptiveBannerAdSizeWithWidth(34).size.height); + + methodCall = [FlutterMethodCall + methodCallWithMethodName:@"AdSize#getLargeAnchoredAdaptiveBannerAdSize" + arguments:@{ + @"width" : @45, + }]; + + resultInvoked = false; + result = ^(id _Nullable result) { + resultInvoked = true; + returnedResult = result; + }; + + [_fltGoogleMobileAdsPlugin handleMethodCall:methodCall result:result]; + + XCTAssertTrue(resultInvoked); + XCTAssertEqual([returnedResult doubleValue], + GADLargeAnchoredAdaptiveBannerAdSizeWithWidth(45) + .size.height); +} + +- (void)testGetAdSize_bannerAd { + // Method calls to load a banner ad. + FlutterMethodCall *loadAdMethodCall = [FlutterMethodCall + methodCallWithMethodName:@"loadBannerAd" + arguments:@{ + @"adId" : @(1), + @"adUnitId" : @"ad-unit-id", + @"size" : [[FLTAdSize alloc] initWithWidth:@1 height:@2], + @"request" : [[FLTAdRequest alloc] init], + }]; + + __block bool loadAdResultInvoked = false; + __block id _Nullable returnedLoadAdResult; + FlutterResult loadAdResult = ^(id _Nullable result) { + loadAdResultInvoked = true; + returnedLoadAdResult = result; + }; + + [_fltGoogleMobileAdsPlugin handleMethodCall:loadAdMethodCall + result:loadAdResult]; + + XCTAssertTrue(loadAdResultInvoked); + XCTAssertNil(returnedLoadAdResult); + + // Method call to get the ad size. + __block bool getAdSizeResultInvoked = false; + __block FLTAdSize *_Nullable returnedGetAdSizeResult; + FlutterResult getAdSizeResult = ^(id _Nullable result) { + getAdSizeResultInvoked = true; + returnedGetAdSizeResult = result; + }; + + FlutterMethodCall *getAdSizeMethodCall = + [FlutterMethodCall methodCallWithMethodName:@"getAdSize" + arguments:@{@"adId" : @(1)}]; + [_fltGoogleMobileAdsPlugin handleMethodCall:getAdSizeMethodCall + result:getAdSizeResult]; + + XCTAssertTrue(getAdSizeResultInvoked); + XCTAssertEqualObjects(returnedGetAdSizeResult.width, @1); + XCTAssertEqualObjects(returnedGetAdSizeResult.height, @2); +} + +- (void)testServerSideVerificationOptions_rewardedAd { + // Mock having already loaded an ad + FLTRewardedAd *mockAd = OCMClassMock([FLTRewardedAd class]); + OCMStub([_mockAdInstanceManager adFor:[OCMArg isEqual:@1]]).andReturn(mockAd); + + // Method calls to set ssv + FLTServerSideVerificationOptions *mockSSV = + OCMClassMock([FLTServerSideVerificationOptions class]); + FlutterMethodCall *methodCall = [FlutterMethodCall + methodCallWithMethodName:@"setServerSideVerificationOptions" + arguments:@{ + @"adId" : @(1), + @"adUnitId" : @"ad-unit-id", + @"serverSideVerificationOptions" : mockSSV, + }]; + + __block bool resultInvoked = false; + FlutterResult result = ^(id _Nullable result) { + resultInvoked = true; + }; + + [_fltGoogleMobileAdsPlugin handleMethodCall:methodCall result:result]; + + XCTAssertTrue(resultInvoked); + OCMVerify([mockAd setServerSideVerificationOptions:[OCMArg isEqual:mockSSV]]); +} + +- (void)testServerSideVerificationOptions_rewardedInterstitialAd { + // Mock having already loaded an ad + FLTRewardedInterstitialAd *mockAd = + OCMClassMock([FLTRewardedInterstitialAd class]); + OCMStub([_mockAdInstanceManager adFor:[OCMArg isEqual:@1]]).andReturn(mockAd); + + // Method calls to set ssv + FLTServerSideVerificationOptions *mockSSV = + OCMClassMock([FLTServerSideVerificationOptions class]); + FlutterMethodCall *methodCall = [FlutterMethodCall + methodCallWithMethodName:@"setServerSideVerificationOptions" + arguments:@{ + @"adId" : @(1), + @"adUnitId" : @"ad-unit-id", + @"serverSideVerificationOptions" : mockSSV, + }]; + + __block bool resultInvoked = false; + FlutterResult result = ^(id _Nullable result) { + resultInvoked = true; + }; + + [_fltGoogleMobileAdsPlugin handleMethodCall:methodCall result:result]; + + XCTAssertTrue(resultInvoked); + OCMVerify([mockAd setServerSideVerificationOptions:[OCMArg isEqual:mockSSV]]); +} + +- (void)testServerSideVerificationOptions_nullAd { + // Try to set ssv without any ads being loaded + FLTServerSideVerificationOptions *mockSSV = + OCMClassMock([FLTServerSideVerificationOptions class]); + FlutterMethodCall *methodCall = [FlutterMethodCall + methodCallWithMethodName:@"setServerSideVerificationOptions" + arguments:@{ + @"adId" : @(1), + @"adUnitId" : @"ad-unit-id", + @"serverSideVerificationOptions" : mockSSV, + }]; + + __block bool resultInvoked = false; + FlutterResult result = ^(id _Nullable result) { + resultInvoked = true; + }; + + [_fltGoogleMobileAdsPlugin handleMethodCall:methodCall result:result]; + + // Result still invoked - no op + XCTAssertTrue(resultInvoked); +} + +- (void)testServerSideVerificationOptions_invalidAdType { + // Mock having already loaded an ad that does not support ssv + // Strict mock will fail if there are any interactions + FLTBannerAd *mockAd = OCMStrictClassMock([FLTBannerAd class]); + OCMStub([_mockAdInstanceManager adFor:[OCMArg isEqual:@1]]).andReturn(mockAd); + + // Try to set ssv without any ads being loaded + FLTServerSideVerificationOptions *mockSSV = + OCMClassMock([FLTServerSideVerificationOptions class]); + FlutterMethodCall *methodCall = [FlutterMethodCall + methodCallWithMethodName:@"setServerSideVerificationOptions" + arguments:@{ + @"adId" : @(1), + @"adUnitId" : @"ad-unit-id", + @"serverSideVerificationOptions" : mockSSV, + }]; + + __block bool resultInvoked = false; + FlutterResult result = ^(id _Nullable result) { + resultInvoked = true; + }; + + [_fltGoogleMobileAdsPlugin handleMethodCall:methodCall result:result]; + + // Result still invoked - no op + XCTAssertTrue(resultInvoked); +} + +@end diff --git a/mih_ui/android/build/ios/SourcePackages/google_mobile_ads-8.0.0/example/ios/RunnerTests/FLTGoogleMobileAdsReaderWriterTest.m b/mih_ui/android/build/ios/SourcePackages/google_mobile_ads-8.0.0/example/ios/RunnerTests/FLTGoogleMobileAdsReaderWriterTest.m new file mode 100644 index 00000000..bf273249 --- /dev/null +++ b/mih_ui/android/build/ios/SourcePackages/google_mobile_ads-8.0.0/example/ios/RunnerTests/FLTGoogleMobileAdsReaderWriterTest.m @@ -0,0 +1,816 @@ +// Copyright 2021 Google LLC +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// https://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +#import +#import + +#import "google_mobile_ads/FLTAdInstanceManager_Internal.h" +#import "google_mobile_ads/FLTAdUtil.h" +#import "google_mobile_ads/FLTAd_Internal.h" +#import "google_mobile_ads/FLTGoogleMobileAdsCollection_Internal.h" +#import "google_mobile_ads/FLTGoogleMobileAdsPlugin.h" +#import "google_mobile_ads/FLTGoogleMobileAdsReaderWriter_Internal.h" +#import "google_mobile_ads/FLTMediationExtras.h" +#import "google_mobile_ads/FLTMobileAds_Internal.h" +#import "google_mobile_ads/FLTNativeTemplateColor.h" +#import "google_mobile_ads/FLTNativeTemplateFontStyle.h" +#import "google_mobile_ads/FLTNativeTemplateStyle.h" +#import "google_mobile_ads/FLTNativeTemplateTextStyle.h" +#import "google_mobile_ads/FLTNativeTemplateType.h" + +@interface FLTGoogleMobileAdsReaderWriterTest : XCTestCase +@end + +@interface FLTTestAdSizeFactory : FLTAdSizeFactory +@property(readonly) GADAdSize testAdSize; +@end + +@interface _FlutterMediationExtras : NSObject +@end + +@implementation FLTGoogleMobileAdsReaderWriterTest { + FlutterStandardMessageCodec *_messageCodec; + FLTGoogleMobileAdsReaderWriter *_readerWriter; +} + +- (void)setUp { + id fltAdUtilMock = OCMClassMock([FLTAdUtil class]); + OCMStub(ClassMethod([fltAdUtilMock requestAgent])) + .andReturn(@"request-agent"); + _readerWriter = [[FLTGoogleMobileAdsReaderWriter alloc] + initWithFactory:[[FLTTestAdSizeFactory alloc] init]]; + _messageCodec = + [FlutterStandardMessageCodec codecWithReaderWriter:_readerWriter]; +} + +- (void)testEncodeDecodeAdSize { + FLTAdSize *size = [[FLTAdSize alloc] initWithWidth:@(1) height:@(2)]; + NSData *encodedMessage = [_messageCodec encode:size]; + + FLTAdSize *decodedSize = [_messageCodec decode:encodedMessage]; + XCTAssertEqualObjects(decodedSize.width, @(1)); + XCTAssertEqualObjects(decodedSize.height, @(2)); +} + +- (void)testEncodeDecodeRequestConfiguration { + GADMobileAds.sharedInstance.requestConfiguration.maxAdContentRating = + GADMaxAdContentRatingMatureAudience; + GADMobileAds.sharedInstance.requestConfiguration + .tagForChildDirectedTreatment = @YES; + GADMobileAds.sharedInstance.requestConfiguration.tagForUnderAgeOfConsent = + @NO; + NSArray *testDeviceIds = + [[NSArray alloc] initWithObjects:@"test-device-id", nil]; + GADMobileAds.sharedInstance.requestConfiguration.testDeviceIdentifiers = + testDeviceIds; + NSData *encodedMessage = + [_messageCodec encode:GADMobileAds.sharedInstance.requestConfiguration]; + + GADRequestConfiguration *decodedSize = [_messageCodec decode:encodedMessage]; + XCTAssertEqualObjects(decodedSize.maxAdContentRating, + GADMaxAdContentRatingMatureAudience); + XCTAssertEqualObjects(decodedSize.testDeviceIdentifiers, testDeviceIds); +} + +- (void)testEncodeDecodeInlineAdaptiveBannerAdSize_currentOrientation { + GADAdSize testAdSize = GADAdSizeFromCGSize(CGSizeMake(25, 10)); + + FLTAdSizeFactory *factory = OCMClassMock([FLTAdSizeFactory class]); + OCMStub([factory currentOrientationInlineAdaptiveBannerSizeWithWidth:@(23)]) + .andReturn(testAdSize); + + FLTInlineAdaptiveBannerSize *inlineAdaptiveBannerSize = + [[FLTInlineAdaptiveBannerSize alloc] initWithFactory:factory + width:@(23) + maxHeight:NULL + orientation:NULL]; + + NSData *encodedMessage = [_messageCodec encode:inlineAdaptiveBannerSize]; + + FLTInlineAdaptiveBannerSize *decodedSize = + [_messageCodec decode:encodedMessage]; + XCTAssertEqual(decodedSize.size.size.width, testAdSize.size.width); + XCTAssertEqualObjects(decodedSize.maxHeight, + inlineAdaptiveBannerSize.maxHeight); + XCTAssertEqualObjects(decodedSize.orientation, + inlineAdaptiveBannerSize.orientation); +} + +- (void)testEncodeDecodeInlineAdaptiveBannerAdSize_portraitOrientation { + GADAdSize testAdSize = GADAdSizeFromCGSize(CGSizeMake(25, 10)); + + FLTAdSizeFactory *factory = OCMClassMock([FLTAdSizeFactory class]); + OCMStub([factory portraitOrientationInlineAdaptiveBannerSizeWithWidth:@(23)]) + .andReturn(testAdSize); + + FLTInlineAdaptiveBannerSize *inlineAdaptiveBannerSize = + [[FLTInlineAdaptiveBannerSize alloc] initWithFactory:factory + width:@(23) + maxHeight:NULL + orientation:@0]; + + NSData *encodedMessage = [_messageCodec encode:inlineAdaptiveBannerSize]; + + FLTInlineAdaptiveBannerSize *decodedSize = + [_messageCodec decode:encodedMessage]; + XCTAssertEqual(decodedSize.size.size.width, testAdSize.size.width); + XCTAssertEqualObjects(decodedSize.maxHeight, + inlineAdaptiveBannerSize.maxHeight); + XCTAssertEqualObjects(decodedSize.orientation, + inlineAdaptiveBannerSize.orientation); +} + +- (void)testEncodeDecodeInlineAdaptiveBannerAdSize_landscapeOrientation { + GADAdSize testAdSize = GADAdSizeFromCGSize(CGSizeMake(25, 10)); + + FLTAdSizeFactory *factory = OCMClassMock([FLTAdSizeFactory class]); + OCMStub([factory landscapeInlineAdaptiveBannerAdSizeWithWidth:@(23)]) + .andReturn(testAdSize); + + FLTInlineAdaptiveBannerSize *inlineAdaptiveBannerSize = + [[FLTInlineAdaptiveBannerSize alloc] initWithFactory:factory + width:@(23) + maxHeight:NULL + orientation:@1]; + + NSData *encodedMessage = [_messageCodec encode:inlineAdaptiveBannerSize]; + + FLTInlineAdaptiveBannerSize *decodedSize = + [_messageCodec decode:encodedMessage]; + XCTAssertEqual(decodedSize.size.size.width, testAdSize.size.width); + XCTAssertEqualObjects(decodedSize.maxHeight, + inlineAdaptiveBannerSize.maxHeight); + XCTAssertEqualObjects(decodedSize.orientation, + inlineAdaptiveBannerSize.orientation); +} + +- (void)testEncodeDecodeInlineAdaptiveBannerAdSize_withMaxHeight { + GADAdSize testAdSize = GADAdSizeFromCGSize(CGSizeMake(25, 10)); + + FLTAdSizeFactory *factory = OCMClassMock([FLTAdSizeFactory class]); + OCMStub([factory inlineAdaptiveBannerAdSizeWithWidthAndMaxHeight:@(23) + maxHeight:@50]) + .andReturn(testAdSize); + + FLTInlineAdaptiveBannerSize *inlineAdaptiveBannerSize = + [[FLTInlineAdaptiveBannerSize alloc] initWithFactory:factory + width:@(23) + maxHeight:@50 + orientation:nil]; + + NSData *encodedMessage = [_messageCodec encode:inlineAdaptiveBannerSize]; + + FLTInlineAdaptiveBannerSize *decodedSize = + [_messageCodec decode:encodedMessage]; + XCTAssertEqual(decodedSize.size.size.width, testAdSize.size.width); + XCTAssertEqualObjects(decodedSize.maxHeight, + inlineAdaptiveBannerSize.maxHeight); + XCTAssertEqualObjects(decodedSize.orientation, + inlineAdaptiveBannerSize.orientation); +} + +- (void)testEncodeDecodeAnchoredAdaptiveBannerAdSize_portraitOrientation { + GADAdSize testAdSize = GADAdSizeFromCGSize(CGSizeMake(23, 34)); + + FLTAdSizeFactory *factory = OCMClassMock([FLTAdSizeFactory class]); + OCMStub([factory portraitAnchoredAdaptiveBannerAdSizeWithWidth:@(23)]) + .andReturn(testAdSize); + + FLTAnchoredAdaptiveBannerSize *size = + [[FLTAnchoredAdaptiveBannerSize alloc] initWithFactory:factory + orientation:@"portrait" + width:@(23) + isLarge:false]; + NSData *encodedMessage = [_messageCodec encode:size]; + + FLTAnchoredAdaptiveBannerSize *decodedSize = + [_messageCodec decode:encodedMessage]; + XCTAssertEqual(decodedSize.size.size.width, testAdSize.size.width); +} + +- (void)testEncodeDecodeAnchoredAdaptiveBannerAdSize_landscapeOrientation { + GADAdSize testAdSize = GADAdSizeFromCGSize(CGSizeMake(34, 45)); + + FLTAdSizeFactory *factory = OCMClassMock([FLTAdSizeFactory class]); + OCMStub([factory landscapeAnchoredAdaptiveBannerAdSizeWithWidth:@(34)]) + .andReturn(testAdSize); + + FLTAnchoredAdaptiveBannerSize *size = + [[FLTAnchoredAdaptiveBannerSize alloc] initWithFactory:factory + orientation:@"landscape" + width:@(34) + isLarge:false]; + NSData *encodedMessage = [_messageCodec encode:size]; + + FLTAnchoredAdaptiveBannerSize *decodedSize = + [_messageCodec decode:encodedMessage]; + XCTAssertEqual(decodedSize.size.size.width, testAdSize.size.width); +} + +- (void)testEncodeDecodeAnchoredAdaptiveBannerAdSize_currentOrientation { + GADAdSize testAdSize = GADAdSizeFromCGSize(CGSizeMake(45, 56)); + + FLTAdSizeFactory *factory = OCMClassMock([FLTAdSizeFactory class]); + OCMStub( + [factory currentOrientationAnchoredAdaptiveBannerAdSizeWithWidth:@(45)]) + .andReturn(testAdSize); + + FLTAnchoredAdaptiveBannerSize *size = + [[FLTAnchoredAdaptiveBannerSize alloc] initWithFactory:factory + orientation:NULL + width:@(45) + isLarge:false]; + NSData *encodedMessage = [_messageCodec encode:size]; + + FLTAnchoredAdaptiveBannerSize *decodedSize = + [_messageCodec decode:encodedMessage]; + XCTAssertEqual(decodedSize.size.size.width, testAdSize.size.width); +} + +- (void)testEncodeDecodeSmartBannerAdSize { + FLTSmartBannerSize *size = + [[FLTSmartBannerSize alloc] initWithOrientation:@"landscape"]; + + NSData *encodedMessage = [_messageCodec encode:size]; + FLTSmartBannerSize *decodedSize = [_messageCodec decode:encodedMessage]; + + XCTAssertTrue([decodedSize isKindOfClass:FLTSmartBannerSize.class]); +#pragma clang diagnostic push +#pragma clang diagnostic ignored "-Wdeprecated-declarations" + XCTAssertEqual(decodedSize.size.size.width, + kGADAdSizeSmartBannerPortrait.size.width); + XCTAssertEqual(decodedSize.size.size.height, + kGADAdSizeSmartBannerPortrait.size.height); +#pragma clang diagnostic pop +} + +- (void)testEncodeDecodeFluidAdSize { + FLTFluidSize *size = [[FLTFluidSize alloc] init]; + + NSData *encodedMessage = [_messageCodec encode:size]; + FLTFluidSize *decodedSize = [_messageCodec decode:encodedMessage]; + + XCTAssertTrue([decodedSize isKindOfClass:FLTFluidSize.class]); + XCTAssertEqual(decodedSize.size.size.width, GADAdSizeFluid.size.width); + XCTAssertEqual(decodedSize.size.size.height, GADAdSizeFluid.size.height); +} + +- (void)testEncodeDecodeAdRequest { + id mediationExtras = + [[_FlutterMediationExtras alloc] init]; + mediationExtras.extras = @{@"test_key" : @"test_value"}; + FLTAdRequest *request = [[FLTAdRequest alloc] init]; + request.keywords = @[ @"apple" ]; + request.contentURL = @"banana"; + request.nonPersonalizedAds = YES; + NSArray *contentURLs = @[ @"url-1.com", @"url-2.com" ]; + request.neighboringContentURLs = contentURLs; + request.mediationExtrasIdentifier = @"identifier"; + request.adMobExtras = @{@"key" : @"value"}; + NSArray> *mediationExtrasArray = + @[ mediationExtras ]; + request.mediationExtras = mediationExtrasArray; + NSData *encodedMessage = [_messageCodec encode:request]; + + FLTAdRequest *decodedRequest = [_messageCodec decode:encodedMessage]; + XCTAssertTrue([decodedRequest.keywords isEqualToArray:@[ @"apple" ]]); + XCTAssertEqualObjects(decodedRequest.contentURL, @"banana"); + XCTAssertTrue(decodedRequest.nonPersonalizedAds); + XCTAssertEqualObjects(decodedRequest.neighboringContentURLs, contentURLs); + XCTAssertEqualObjects(decodedRequest.mediationExtrasIdentifier, + @"identifier"); + XCTAssertEqualObjects(decodedRequest.adMobExtras, @{@"key" : @"value"}); + XCTAssertEqualObjects(decodedRequest.requestAgent, @"request-agent"); + XCTAssertEqualObjects(decodedRequest.mediationExtras[0].extras, + @{@"test_key" : @"test_value"}); +} + +- (void)testEncodeDecodeGAMAdRequest { + id mediationExtras = + [[_FlutterMediationExtras alloc] init]; + mediationExtras.extras = @{@"test_key" : @"test_value"}; + FLTGAMAdRequest *request = [[FLTGAMAdRequest alloc] init]; + request.keywords = @[ @"apple" ]; + request.contentURL = @"banana"; + request.customTargeting = @{@"table" : @"linen"}; + request.customTargetingLists = @{@"go" : @[ @"lakers" ]}; + request.nonPersonalizedAds = YES; + NSArray *contentURLs = @[ @"url-1.com", @"url-2.com" ]; + request.neighboringContentURLs = contentURLs; + request.pubProvidedID = @"pub-id"; + request.mediationExtrasIdentifier = @"identifier"; + request.adMobExtras = @{@"key" : @"value"}; + NSArray> *mediationExtrasArray = + @[ mediationExtras ]; + request.mediationExtras = mediationExtrasArray; + NSData *encodedMessage = [_messageCodec encode:request]; + + FLTGAMAdRequest *decodedRequest = [_messageCodec decode:encodedMessage]; + XCTAssertTrue([decodedRequest.keywords isEqualToArray:@[ @"apple" ]]); + XCTAssertEqualObjects(decodedRequest.contentURL, @"banana"); + XCTAssertTrue([decodedRequest.customTargeting + isEqualToDictionary:@{@"table" : @"linen"}]); + XCTAssertTrue([decodedRequest.customTargetingLists + isEqualToDictionary:@{@"go" : @[ @"lakers" ]}]); + XCTAssertTrue(decodedRequest.nonPersonalizedAds); + XCTAssertEqualObjects(decodedRequest.neighboringContentURLs, contentURLs); + XCTAssertEqualObjects(decodedRequest.pubProvidedID, @"pub-id"); + XCTAssertEqualObjects(decodedRequest.mediationExtrasIdentifier, + @"identifier"); + XCTAssertEqualObjects(decodedRequest.adMobExtras, @{@"key" : @"value"}); + XCTAssertEqualObjects(decodedRequest.requestAgent, @"request-agent"); + XCTAssertEqualObjects(decodedRequest.mediationExtras[0].extras, + @{@"test_key" : @"test_value"}); +} + +- (void)testEncodeDecodeRewardItem { + FLTRewardItem *item = [[FLTRewardItem alloc] initWithAmount:@(1) + type:@"apple"]; + NSData *encodedMessage = [_messageCodec encode:item]; + + FLTRewardItem *decodedItem = [_messageCodec decode:encodedMessage]; + XCTAssertEqualObjects(decodedItem.amount, @(1)); + XCTAssertEqualObjects(decodedItem.type, @"apple"); +} + +- (void)testEncodeDecodeServerSideVerification { + FLTServerSideVerificationOptions *serverSideVerificationOptions = + [[FLTServerSideVerificationOptions alloc] init]; + serverSideVerificationOptions.customRewardString = @"reward"; + serverSideVerificationOptions.userIdentifier = @"user-id"; + NSData *encodedMessage = [_messageCodec encode:serverSideVerificationOptions]; + + FLTServerSideVerificationOptions *decoded = + [_messageCodec decode:encodedMessage]; + XCTAssertEqualObjects(decoded.customRewardString, + serverSideVerificationOptions.customRewardString); + XCTAssertEqualObjects(decoded.userIdentifier, + serverSideVerificationOptions.userIdentifier); + + // With customRewardString not defined. + serverSideVerificationOptions = + [[FLTServerSideVerificationOptions alloc] init]; + serverSideVerificationOptions.userIdentifier = @"user-id"; + encodedMessage = [_messageCodec encode:serverSideVerificationOptions]; + decoded = [_messageCodec decode:encodedMessage]; + XCTAssertEqualObjects(decoded.customRewardString, + serverSideVerificationOptions.customRewardString); + XCTAssertEqualObjects(decoded.userIdentifier, + serverSideVerificationOptions.userIdentifier); + + // With userId not defined. + serverSideVerificationOptions = + [[FLTServerSideVerificationOptions alloc] init]; + serverSideVerificationOptions.customRewardString = @"reward"; + encodedMessage = [_messageCodec encode:serverSideVerificationOptions]; + decoded = [_messageCodec decode:encodedMessage]; + XCTAssertEqualObjects(decoded.customRewardString, + serverSideVerificationOptions.customRewardString); + XCTAssertEqualObjects(decoded.userIdentifier, + serverSideVerificationOptions.userIdentifier); + + // Both undefined. + serverSideVerificationOptions = + [[FLTServerSideVerificationOptions alloc] init]; + encodedMessage = [_messageCodec encode:serverSideVerificationOptions]; + decoded = [_messageCodec decode:encodedMessage]; + XCTAssertEqualObjects(decoded.customRewardString, + serverSideVerificationOptions.customRewardString); + XCTAssertEqualObjects(decoded.userIdentifier, + serverSideVerificationOptions.userIdentifier); +} + +- (void)testEncodeDecodeNSError { + NSDictionary *userInfo = @{NSLocalizedDescriptionKey : @"message"}; + NSError *error = [NSError errorWithDomain:@"domain" code:1 userInfo:userInfo]; + + NSData *encodedMessage = [_messageCodec encode:error]; + + NSError *decodedError = [_messageCodec decode:encodedMessage]; + XCTAssertEqual(decodedError.code, 1); + XCTAssertEqualObjects(decodedError.domain, @"domain"); + XCTAssertEqualObjects(decodedError.localizedDescription, @"message"); +} + +- (void)testEncodeDecodeFLTGADLoadError { + GADResponseInfo *mockResponseInfo = OCMClassMock([GADResponseInfo class]); + GADAdNetworkResponseInfo *mockAdNetworkResponseInfo = + OCMClassMock([GADAdNetworkResponseInfo class]); + NSString *identifier = @"test-identifier"; + NSString *className = @"test-class-name"; + OCMStub([mockResponseInfo responseIdentifier]).andReturn(identifier); + OCMStub(mockResponseInfo.loadedAdNetworkResponseInfo) + .andReturn(mockAdNetworkResponseInfo); + OCMStub(mockAdNetworkResponseInfo.adNetworkClassName).andReturn(className); + NSDictionary *userInfo = @{ + NSLocalizedDescriptionKey : @"message", + GADErrorUserInfoKeyResponseInfo : mockResponseInfo + }; + NSError *error = [NSError errorWithDomain:@"domain" code:1 userInfo:userInfo]; + FLTLoadAdError *loadAdError = [[FLTLoadAdError alloc] initWithError:error]; + + NSData *encodedMessage = [_messageCodec encode:loadAdError]; + FLTLoadAdError *decodedError = [_messageCodec decode:encodedMessage]; + + XCTAssertEqual(decodedError.code, 1); + XCTAssertEqualObjects(decodedError.domain, @"domain"); + XCTAssertEqualObjects(decodedError.message, @"message"); + XCTAssertEqualObjects(decodedError.responseInfo.adNetworkClassName, + className); + XCTAssertEqualObjects(decodedError.responseInfo.responseIdentifier, + identifier); + XCTAssertTrue(decodedError.responseInfo.adNetworkInfoArray.count == 0); +} + +- (void)testEncodeDecodeFLTGADLoadErrorWithResponseInfo { + GADAdNetworkResponseInfo *mockNetworkResponse = + OCMClassMock([GADAdNetworkResponseInfo class]); + OCMStub([mockNetworkResponse adNetworkClassName]).andReturn(@"adapter-class"); + + GADResponseInfo *mockResponseInfo = OCMClassMock([GADResponseInfo class]); + GADAdNetworkResponseInfo *mockAdNetworkResponseInfo = + OCMClassMock([GADAdNetworkResponseInfo class]); + NSString *identifier = @"test-identifier"; + NSString *className = @"test-class-name"; + OCMStub([mockResponseInfo responseIdentifier]).andReturn(identifier); + OCMStub(mockResponseInfo.loadedAdNetworkResponseInfo) + .andReturn(mockAdNetworkResponseInfo); + OCMStub(mockAdNetworkResponseInfo.adNetworkClassName).andReturn(className); + OCMStub([mockResponseInfo adNetworkInfoArray]).andReturn(@[ + mockNetworkResponse + ]); + NSDictionary *userInfo = @{ + NSLocalizedDescriptionKey : @"message", + GADErrorUserInfoKeyResponseInfo : mockResponseInfo + }; + NSError *error = [NSError errorWithDomain:@"domain" code:1 userInfo:userInfo]; + FLTLoadAdError *loadAdError = [[FLTLoadAdError alloc] initWithError:error]; + + NSData *encodedMessage = [_messageCodec encode:loadAdError]; + FLTLoadAdError *decodedError = [_messageCodec decode:encodedMessage]; + + XCTAssertEqual(decodedError.code, 1); + XCTAssertEqualObjects(decodedError.domain, @"domain"); + XCTAssertEqualObjects(decodedError.message, @"message"); + XCTAssertEqualObjects(decodedError.responseInfo.adNetworkClassName, + className); + XCTAssertEqualObjects(decodedError.responseInfo.responseIdentifier, + identifier); + XCTAssertTrue(decodedError.responseInfo.adNetworkInfoArray.count == 1); + XCTAssertEqualObjects(decodedError.responseInfo.adNetworkInfoArray.firstObject + .adNetworkClassName, + @"adapter-class"); +} + +- (void)testEncodeDecodeFLTGADResponseInfo { + NSDictionary *descriptionsDict = @{@"descriptions" : @"dict"}; + NSDictionary *adUnitMappingsDict = @{@"credentials" : @"dict"}; + + NSError *error = OCMClassMock([NSError class]); + OCMStub([error domain]).andReturn(@"domain"); + OCMStub([error code]).andReturn(1); + OCMStub([error localizedDescription]).andReturn(@"error"); + + GADAdNetworkResponseInfo *mockGADResponseInfo = + OCMClassMock([GADAdNetworkResponseInfo class]); + OCMStub([mockGADResponseInfo adNetworkClassName]).andReturn(@"adapter-class"); + OCMStub([mockGADResponseInfo latency]).andReturn(123.1234); + OCMStub([mockGADResponseInfo dictionaryRepresentation]) + .andReturn(descriptionsDict); + OCMStub([mockGADResponseInfo adUnitMapping]).andReturn(adUnitMappingsDict); + OCMStub([mockGADResponseInfo error]).andReturn(error); + + GADAdNetworkResponseInfo *mockLoadedGADResponseInfo = + OCMClassMock([GADAdNetworkResponseInfo class]); + OCMStub([mockLoadedGADResponseInfo adNetworkClassName]) + .andReturn(@"loaded-adapter"); + OCMStub([mockLoadedGADResponseInfo latency]).andReturn(123.1234); + OCMStub([mockLoadedGADResponseInfo dictionaryRepresentation]) + .andReturn(descriptionsDict); + OCMStub([mockLoadedGADResponseInfo adUnitMapping]) + .andReturn(adUnitMappingsDict); + OCMStub([mockLoadedGADResponseInfo error]).andReturn(error); + OCMStub([mockLoadedGADResponseInfo adSourceName]).andReturn(@"adSourceName"); + OCMStub([mockLoadedGADResponseInfo adSourceID]).andReturn(@"adSourceID"); + OCMStub([mockLoadedGADResponseInfo adSourceInstanceName]) + .andReturn(@"adSourceInstanceName"); + OCMStub([mockLoadedGADResponseInfo adSourceInstanceID]) + .andReturn(@"adSourceInstanceID"); + + FLTGADAdNetworkResponseInfo *adNetworkResponseInfo = + [[FLTGADAdNetworkResponseInfo alloc] + initWithResponseInfo:mockGADResponseInfo]; + FLTGADAdNetworkResponseInfo *loadedNetworkResponseInfo = + [[FLTGADAdNetworkResponseInfo alloc] + initWithResponseInfo:mockLoadedGADResponseInfo]; + + FLTGADResponseInfo *responseInfo = [[FLTGADResponseInfo alloc] init]; + responseInfo.adNetworkClassName = @"class-name"; + responseInfo.responseIdentifier = @"identifier"; + responseInfo.adNetworkInfoArray = @[ adNetworkResponseInfo ]; + responseInfo.loadedAdNetworkResponseInfo = loadedNetworkResponseInfo; + responseInfo.extrasDictionary = @{@"key" : @"value"}; + + NSData *encodedMessage = [_messageCodec encode:responseInfo]; + FLTGADResponseInfo *decodedResponseInfo = + [_messageCodec decode:encodedMessage]; + + XCTAssertEqualObjects(decodedResponseInfo.adNetworkClassName, @"class-name"); + XCTAssertEqualObjects(decodedResponseInfo.responseIdentifier, @"identifier"); + XCTAssertEqualObjects(decodedResponseInfo.extrasDictionary, + @{@"key" : @"value"}); + XCTAssertEqual(decodedResponseInfo.adNetworkInfoArray.count, 1); + + FLTGADAdNetworkResponseInfo *decodedInfo = + decodedResponseInfo.adNetworkInfoArray.firstObject; + + XCTAssertEqualObjects(decodedInfo.adNetworkClassName, @"adapter-class"); + XCTAssertEqualObjects(decodedInfo.latency, @(123123)); + XCTAssertEqualObjects(decodedInfo.dictionaryDescription, + @"{\n descriptions = dict;\n}"); + XCTAssertEqualObjects(decodedInfo.adUnitMapping, adUnitMappingsDict); + XCTAssertEqual(decodedInfo.error.code, 1); + XCTAssertEqualObjects(decodedInfo.error.domain, @"domain"); + XCTAssertEqualObjects(decodedInfo.error.localizedDescription, @"error"); + + FLTGADAdNetworkResponseInfo *decodedLoadedInfo = + decodedResponseInfo.loadedAdNetworkResponseInfo; + XCTAssertEqualObjects(decodedLoadedInfo.adNetworkClassName, + @"loaded-adapter"); + XCTAssertEqualObjects(decodedLoadedInfo.latency, @(123123)); + XCTAssertEqualObjects(decodedLoadedInfo.dictionaryDescription, + @"{\n descriptions = dict;\n}"); + XCTAssertEqualObjects(decodedLoadedInfo.adUnitMapping, adUnitMappingsDict); + XCTAssertEqual(decodedLoadedInfo.error.code, 1); + XCTAssertEqualObjects(decodedLoadedInfo.error.domain, @"domain"); + XCTAssertEqualObjects(decodedLoadedInfo.error.localizedDescription, @"error"); + XCTAssertEqualObjects(decodedLoadedInfo.adSourceName, @"adSourceName"); + XCTAssertEqualObjects(decodedLoadedInfo.adSourceID, @"adSourceID"); + XCTAssertEqualObjects(decodedLoadedInfo.adSourceInstanceName, + @"adSourceInstanceName"); + XCTAssertEqualObjects(decodedLoadedInfo.adSourceInstanceID, + @"adSourceInstanceID"); +} + +- (void)testEncodeDecodeFLTGADLoadErrorWithEmptyValues { + GADResponseInfo *mockResponseInfo = OCMClassMock([GADResponseInfo class]); + OCMStub([mockResponseInfo responseIdentifier]).andReturn(nil); + OCMStub([mockResponseInfo.loadedAdNetworkResponseInfo adNetworkClassName]) + .andReturn(nil); + NSDictionary *userInfo = @{ + NSLocalizedDescriptionKey : @"message", + GADErrorUserInfoKeyResponseInfo : mockResponseInfo + }; + NSError *error = [NSError errorWithDomain:@"domain" code:1 userInfo:userInfo]; + FLTLoadAdError *loadAdError = [[FLTLoadAdError alloc] initWithError:error]; + + NSData *encodedMessage = [_messageCodec encode:loadAdError]; + FLTLoadAdError *decodedError = [_messageCodec decode:encodedMessage]; + + XCTAssertEqual(decodedError.code, 1); + XCTAssertEqualObjects(decodedError.domain, @"domain"); + XCTAssertEqualObjects(decodedError.message, @"message"); + XCTAssertNil(decodedError.responseInfo.adNetworkClassName); + XCTAssertNil(decodedError.responseInfo.responseIdentifier); +} + +- (void)testEncodeDecodeAdapterStatus { + FLTAdapterStatus *status = [[FLTAdapterStatus alloc] init]; + status.state = @(1); + status.statusDescription = @"desc"; + status.latency = @(23); + + NSData *encodedMessage = [_messageCodec encode:status]; + + FLTAdapterStatus *decodedStatus = [_messageCodec decode:encodedMessage]; + XCTAssertEqualObjects(decodedStatus.state, @(1)); + XCTAssertEqualObjects(decodedStatus.statusDescription, @"desc"); + XCTAssertEqualObjects(decodedStatus.latency, @(23)); +} + +- (void)testEncodeDecodeInitializationStatus { + FLTInitializationStatus *status = [[FLTInitializationStatus alloc] init]; + status.adapterStatuses = @{@"name" : [[FLTAdapterStatus alloc] init]}; + + NSData *encodedMessage = [_messageCodec encode:status]; + + FLTInitializationStatus *decodedStatus = + [_messageCodec decode:encodedMessage]; + XCTAssertEqual(decodedStatus.adapterStatuses.count, 1); + XCTAssertEqualObjects(decodedStatus.adapterStatuses.allKeys[0], @"name"); + XCTAssertNil(decodedStatus.adapterStatuses.allValues[0].state); + XCTAssertNil(decodedStatus.adapterStatuses.allValues[0].statusDescription); + XCTAssertNil(decodedStatus.adapterStatuses.allValues[0].latency); +} + +- (void)testEncodeDecodeNativeTemplateType { + FLTNativeTemplateType *templateType = + [[FLTNativeTemplateType alloc] initWithInt:1]; + NSData *encodedMessage = [_messageCodec encode:templateType]; + + FLTNativeTemplateType *decodedTemplateType = + [_messageCodec decode:encodedMessage]; + [self assertEqualTemplateTypes:templateType second:decodedTemplateType]; +} + +- (void)testEncodeDecodeNativeTemplateFontStyle { + FLTNativeTemplateFontStyleWrapper *fontStyle = + [[FLTNativeTemplateFontStyleWrapper alloc] initWithInt:2]; + NSData *encodedMessage = [_messageCodec encode:fontStyle]; + + FLTNativeTemplateFontStyleWrapper *decoded = + [_messageCodec decode:encodedMessage]; + [self assertEqualTemplateFontStyles:fontStyle second:decoded]; +} + +- (void)testEncodeDecodeNativeTemplateColor { + FLTNativeTemplateColor *color = + [[FLTNativeTemplateColor alloc] initWithAlpha:@2.0f + red:@3.0f + green:@4.0f + blue:@5.0f]; + NSData *encodedMessage = [_messageCodec encode:color]; + + FLTNativeTemplateColor *decoded = [_messageCodec decode:encodedMessage]; + [self assertEqualTemplateColors:color second:decoded]; +} + +- (void)testEncodeDecodeNativeTemplateTextStyle { + FLTNativeTemplateColor *textColor = + [[FLTNativeTemplateColor alloc] initWithAlpha:@2.0f + red:@3.0f + green:@4.0f + blue:@5.0f]; + FLTNativeTemplateColor *backgroundColor = + [[FLTNativeTemplateColor alloc] initWithAlpha:@6.0f + red:@7.0f + green:@8.0f + blue:@9.0f]; + FLTNativeTemplateFontStyleWrapper *fontStyle = + [[FLTNativeTemplateFontStyleWrapper alloc] initWithInt:1]; + + FLTNativeTemplateTextStyle *textStyle = + [[FLTNativeTemplateTextStyle alloc] initWithTextColor:textColor + backgroundColor:backgroundColor + fontStyle:fontStyle + size:@15.0f]; + NSData *encodedMessage = [_messageCodec encode:textStyle]; + + FLTNativeTemplateTextStyle *decoded = [_messageCodec decode:encodedMessage]; + [self assertEqualTextStyles:textStyle second:decoded]; +} + +- (void)testEncodeDecodeNativeTemplateStyle { + FLTNativeTemplateType *templateType = + [[FLTNativeTemplateType alloc] initWithInt:0]; + FLTNativeTemplateColor *mainBackgroundColor = + [[FLTNativeTemplateColor alloc] initWithAlpha:@2.0f + red:@3.0f + green:@4.0f + blue:@5.0f]; + + FLTNativeTemplateColor *ctaTextColor = + [[FLTNativeTemplateColor alloc] initWithAlpha:@2.0f + red:@3.0f + green:@4.0f + blue:@5.0f]; + FLTNativeTemplateColor *ctaBackgroundColor = + [[FLTNativeTemplateColor alloc] initWithAlpha:@6.0f + red:@7.0f + green:@8.0f + blue:@9.0f]; + FLTNativeTemplateFontStyleWrapper *ctaFontStyle = + [[FLTNativeTemplateFontStyleWrapper alloc] initWithInt:1]; + + FLTNativeTemplateTextStyle *ctaTextStyle = + [[FLTNativeTemplateTextStyle alloc] initWithTextColor:ctaTextColor + backgroundColor:ctaBackgroundColor + fontStyle:ctaFontStyle + size:@15.0f]; + FLTNativeTemplateTextStyle *primaryTextStyle = + [[FLTNativeTemplateTextStyle alloc] initWithTextColor:nil + backgroundColor:nil + fontStyle:nil + size:nil]; + + FLTNativeTemplateTextStyle *secondaryTextStyle = + [[FLTNativeTemplateTextStyle alloc] initWithTextColor:nil + backgroundColor:nil + fontStyle:nil + size:@30.0f]; + + FLTNativeTemplateColor *tertiaryTextColor = + [[FLTNativeTemplateColor alloc] initWithAlpha:@12.0f + red:@13.0f + green:@14.0f + blue:@15.0f]; + FLTNativeTemplateTextStyle *tertiaryTextStyle = + [[FLTNativeTemplateTextStyle alloc] initWithTextColor:tertiaryTextColor + backgroundColor:nil + fontStyle:nil + size:@45.0f]; + + FLTNativeTemplateStyle *style = + [[FLTNativeTemplateStyle alloc] initWithTemplateType:templateType + mainBackgroundColor:mainBackgroundColor + callToActionStyle:ctaTextStyle + primaryTextStyle:primaryTextStyle + secondaryTextStyle:secondaryTextStyle + tertiaryTextStyle:tertiaryTextStyle + cornerRadius:@20.0f]; + + NSData *encodedMessage = [_messageCodec encode:style]; + FLTNativeTemplateStyle *decoded = [_messageCodec decode:encodedMessage]; + + [self assertEqualTemplateTypes:style.templateType + second:decoded.templateType]; + [self assertEqualTemplateColors:style.mainBackgroundColor + second:decoded.mainBackgroundColor]; + [self assertEqualTextStyles:style.callToActionStyle + second:decoded.callToActionStyle]; + [self assertEqualTextStyles:style.primaryTextStyle + second:decoded.primaryTextStyle]; + [self assertEqualTextStyles:style.secondaryTextStyle + second:decoded.secondaryTextStyle]; + [self assertEqualTextStyles:style.tertiaryTextStyle + second:decoded.tertiaryTextStyle]; + XCTAssertEqual(style.cornerRadius.floatValue, + decoded.cornerRadius.floatValue); +} + +#pragma mark - Helper methods to compare native templates types + +- (void)assertEqualTextStyles:(FLTNativeTemplateTextStyle *)first + second:(FLTNativeTemplateTextStyle *)second { + [self assertEqualTemplateColors:first.textColor second:second.textColor]; + [self assertEqualTemplateColors:first.backgroundColor + second:second.backgroundColor]; + + XCTAssertEqual(first.fontStyle.intValue, second.fontStyle.intValue); + XCTAssertEqual(first.size.floatValue, second.size.floatValue); +} + +- (void)assertEqualTemplateFontStyles:(FLTNativeTemplateFontStyleWrapper *)first + second: + (FLTNativeTemplateFontStyleWrapper *)second { + XCTAssertEqual(first.intValue, second.intValue); +} + +- (void)assertEqualTemplateColors:(FLTNativeTemplateColor *)first + second:(FLTNativeTemplateColor *)second { + XCTAssertEqual(first.alpha.floatValue, second.alpha.floatValue); + XCTAssertEqual(first.red.floatValue, second.red.floatValue); + XCTAssertEqual(first.blue.floatValue, second.blue.floatValue); + XCTAssertEqual(first.green.floatValue, second.green.floatValue); +} + +- (void)assertEqualTemplateTypes:(FLTNativeTemplateType *)first + second:(FLTNativeTemplateType *)second { + XCTAssertEqual(first.intValue, second.intValue); +} + +@end + +@implementation FLTTestAdSizeFactory +- (instancetype)initWithAdSize:(GADAdSize)testAdSize { + self = [super init]; + if (self) { + _testAdSize = testAdSize; + } + return self; +} + +- (GADAdSize)portraitAnchoredAdaptiveBannerAdSizeWithWidth:(NSNumber *)width { + return GADAdSizeFromCGSize(CGSizeMake(width.doubleValue, 0)); +} + +- (GADAdSize)landscapeAnchoredAdaptiveBannerAdSizeWithWidth:(NSNumber *)width { + return GADAdSizeFromCGSize(CGSizeMake(width.doubleValue, 0)); +} + +- (GADAdSize)currentOrientationAnchoredAdaptiveBannerAdSizeWithWidth: + (NSNumber *)width { + return GADAdSizeFromCGSize(CGSizeMake(width.doubleValue, 0)); +} +@end + +@implementation _FlutterMediationExtras + +@synthesize extras; + +- (id _Nonnull)getMediationExtras { + return OCMProtocolMock(@protocol(GADAdNetworkExtras)); +} + +@end diff --git a/mih_ui/android/build/ios/SourcePackages/google_mobile_ads-8.0.0/example/ios/RunnerTests/FLTGoogleMobileAdsTest.m b/mih_ui/android/build/ios/SourcePackages/google_mobile_ads-8.0.0/example/ios/RunnerTests/FLTGoogleMobileAdsTest.m new file mode 100644 index 00000000..427b5e3d --- /dev/null +++ b/mih_ui/android/build/ios/SourcePackages/google_mobile_ads-8.0.0/example/ios/RunnerTests/FLTGoogleMobileAdsTest.m @@ -0,0 +1,472 @@ +// Copyright 2021 Google LLC +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// https://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +#import +#import + +#import "FLTAdInstanceManager_Internal.h" +#import "FLTAd_Internal.h" +#import "FLTGoogleMobileAdsCollection_Internal.h" +#import "FLTGoogleMobileAdsPlugin.h" +#import "FLTGoogleMobileAdsReaderWriter_Internal.h" +#import "FLTMobileAds_Internal.h" + +@interface FLTGoogleMobileAdsTest : XCTestCase +@end + +@implementation FLTGoogleMobileAdsTest { + FLTAdInstanceManager *_manager; + NSObject *_mockMessenger; + NSObject *_methodCodec; +} + +static NSString *channel = @"plugins.flutter.io/google_mobile_ads"; + +- (void)setUp { + _mockMessenger = OCMProtocolMock(@protocol(FlutterBinaryMessenger)); + _manager = + [[FLTAdInstanceManager alloc] initWithBinaryMessenger:_mockMessenger]; + _methodCodec = [FlutterStandardMethodCodec + codecWithReaderWriter:[[FLTGoogleMobileAdsReaderWriter alloc] init]]; +} + +- (void)testAdInstanceManagerLoadAd { + FLTAdSize *size = [[FLTAdSize alloc] initWithWidth:@(1) height:@(2)]; + FLTBannerAd *bannerAd = [[FLTBannerAd alloc] + initWithAdUnitId:@"testId" + size:size + request:[[FLTAdRequest alloc] init] + rootViewController:OCMClassMock([UIViewController class]) + adId:@1]; + + FLTBannerAd *mockBannerAd = OCMPartialMock(bannerAd); + OCMStub([mockBannerAd load]); + + [_manager loadAd:bannerAd]; + + OCMVerify([mockBannerAd load]); + XCTAssertEqual([_manager adFor:@(1)], bannerAd); + XCTAssertEqualObjects([_manager adIdFor:bannerAd], @(1)); +} + +- (void)testAdInstanceManagerDisposeAd { + FLTAdSize *size = [[FLTAdSize alloc] initWithWidth:@(1) height:@(2)]; + FLTBannerAd *bannerAd = [[FLTBannerAd alloc] + initWithAdUnitId:@"testId" + size:size + request:[[FLTAdRequest alloc] init] + rootViewController:OCMClassMock([UIViewController class]) + adId:@1]; + FLTBannerAd *mockBannerAd = OCMPartialMock(bannerAd); + OCMStub([mockBannerAd load]); + + [_manager loadAd:bannerAd]; + [_manager dispose:@(1)]; + + XCTAssertNil([_manager adFor:@(1)]); + XCTAssertNil([_manager adIdFor:bannerAd]); +} + +- (void)testAdInstanceManagerDisposeAllAds { + FLTAdSize *size = [[FLTAdSize alloc] initWithWidth:@(1) height:@(2)]; + FLTBannerAd *bannerAd1 = [[FLTBannerAd alloc] + initWithAdUnitId:@"testId" + size:size + request:[[FLTAdRequest alloc] init] + rootViewController:OCMClassMock([UIViewController class]) + adId:@1]; + FLTBannerAd *mockBannerAd1 = OCMPartialMock(bannerAd1); + OCMStub([mockBannerAd1 load]); + + FLTBannerAd *bannerAd2 = [[FLTBannerAd alloc] + initWithAdUnitId:@"testId" + size:size + request:[[FLTAdRequest alloc] init] + rootViewController:OCMClassMock([UIViewController class]) + adId:@2]; + FLTBannerAd *mockBannerAd2 = OCMPartialMock(bannerAd2); + OCMStub([mockBannerAd2 load]); + + [_manager loadAd:bannerAd1]; + [_manager loadAd:bannerAd2]; + [_manager disposeAllAds]; + + XCTAssertNil([_manager adFor:@(1)]); + XCTAssertNil([_manager adIdFor:bannerAd1]); + XCTAssertNil([_manager adFor:@(2)]); + XCTAssertNil([_manager adIdFor:bannerAd2]); +} + +- (void)testAdInstanceManagerOnAdLoaded { + FLTNativeAd *ad = [[FLTNativeAd alloc] + initWithAdUnitId:@"testAdUnitId" + request:[[FLTAdRequest alloc] init] + nativeAdFactory:OCMProtocolMock(@protocol(FLTNativeAdFactory)) + customOptions:nil + rootViewController:OCMClassMock([UIViewController class]) + adId:@1 + nativeAdOptions:nil + nativeTemplateStyle:nil]; + [_manager loadAd:ad]; + + GADResponseInfo *responseInfo = OCMClassMock([GADResponseInfo class]); + FLTGADResponseInfo *fltResponseInfo = + [[FLTGADResponseInfo alloc] initWithResponseInfo:responseInfo]; + [_manager onAdLoaded:ad responseInfo:responseInfo]; + NSData *data = [_methodCodec + encodeMethodCall:[FlutterMethodCall + methodCallWithMethodName:@"onAdEvent" + arguments:@{ + @"adId" : @1, + @"eventName" : @"onAdLoaded", + @"responseInfo" : fltResponseInfo, + }]]; + OCMVerify([_mockMessenger sendOnChannel:channel message:data]); +} + +- (void)testAdInstanceManagerOnAdFailedToLoad { + FLTNativeAd *ad = [[FLTNativeAd alloc] + initWithAdUnitId:@"testAdUnitId" + request:[[FLTAdRequest alloc] init] + nativeAdFactory:OCMProtocolMock(@protocol(FLTNativeAdFactory)) + customOptions:nil + rootViewController:OCMClassMock([UIViewController class]) + adId:@1 + nativeAdOptions:nil + nativeTemplateStyle:nil]; + [_manager loadAd:ad]; + + NSDictionary *userInfo = @{NSLocalizedDescriptionKey : @"message"}; + NSError *error = [NSError errorWithDomain:@"domain" code:1 userInfo:userInfo]; + + FLTLoadAdError *loadAdError = [[FLTLoadAdError alloc] initWithError:error]; + [_manager onAdFailedToLoad:ad error:error]; + NSData *data = [_methodCodec + encodeMethodCall:[FlutterMethodCall + methodCallWithMethodName:@"onAdEvent" + arguments:@{ + @"adId" : @1, + @"eventName" : @"onAdFailedToLoad", + @"loadAdError" : loadAdError, + }]]; + OCMVerify([_mockMessenger sendOnChannel:channel message:data]); +} + +- (void)testAdInstanceManagerOnAdFailedToShow { + FLTInterstitialAd *ad = OCMClassMock([FLTInterstitialAd class]); + OCMStub([ad adId]).andReturn(@1); + [_manager loadAd:ad]; + + NSDictionary *userInfo = @{NSLocalizedDescriptionKey : @"message"}; + NSError *error = [NSError errorWithDomain:@"domain" code:1 userInfo:userInfo]; + + [_manager didFailToPresentFullScreenContentWithError:ad error:error]; + NSData *data = [_methodCodec + encodeMethodCall:[FlutterMethodCall + methodCallWithMethodName:@"onAdEvent" + arguments:@{ + @"adId" : @1, + @"eventName" : + @"didFailToPresentFullScreenCon" + @"tentWithError", + @"error" : error, + }]]; + OCMVerify([_mockMessenger sendOnChannel:channel message:data]); +} + +- (void)testAdInstanceManagerOnAppEvent { + FLTNativeAd *ad = [[FLTNativeAd alloc] + initWithAdUnitId:@"testAdUnitId" + request:[[FLTAdRequest alloc] init] + nativeAdFactory:OCMProtocolMock(@protocol(FLTNativeAdFactory)) + customOptions:nil + rootViewController:OCMClassMock([UIViewController class]) + adId:@1 + nativeAdOptions:nil + nativeTemplateStyle:nil]; + FlutterMethodChannel *mockMethodChannel = + OCMClassMock([FlutterMethodChannel class]); + [_manager setValue:mockMethodChannel forKey:@"_channel"]; + [_manager loadAd:ad]; + + [_manager onAppEvent:ad name:@"color" data:@"red"]; + + NSDictionary *arguments = @{ + @"adId" : @1, + @"eventName" : @"onAppEvent", + @"name" : @"color", + @"data" : @"red" + }; + OCMVerify([mockMethodChannel invokeMethod:@"onAdEvent" arguments:arguments]); +} + +- (void)testAdInstanceManagerOnNativeAdEvents { + FLTNativeAd *ad = [[FLTNativeAd alloc] + initWithAdUnitId:@"testAdUnitId" + request:[[FLTAdRequest alloc] init] + nativeAdFactory:OCMProtocolMock(@protocol(FLTNativeAdFactory)) + customOptions:nil + rootViewController:OCMClassMock([UIViewController class]) + adId:@1 + nativeAdOptions:nil + nativeTemplateStyle:nil]; + [_manager loadAd:ad]; + + [_manager adDidRecordClick:ad]; + NSData *clickData = [self getDataForEvent:@"adDidRecordClick" adId:@1]; + OCMVerify([_mockMessenger sendOnChannel:channel message:clickData]); + + [_manager onNativeAdImpression:ad]; + NSData *impressionData = [self getDataForEvent:@"onNativeAdImpression" + adId:@1]; + OCMVerify([_mockMessenger sendOnChannel:channel message:impressionData]); + + [_manager onNativeAdWillPresentScreen:ad]; + NSData *presentScreenData = + [self getDataForEvent:@"onNativeAdWillPresentScreen" adId:@1]; + OCMVerify(([_mockMessenger sendOnChannel:channel message:presentScreenData])); + + [_manager onNativeAdDidDismissScreen:ad]; + NSData *didDismissData = [self getDataForEvent:@"onNativeAdDidDismissScreen" + adId:@1]; + OCMVerify(([_mockMessenger sendOnChannel:channel message:didDismissData])); + + [_manager onNativeAdWillDismissScreen:ad]; + NSData *willDismissData = [self getDataForEvent:@"onNativeAdWillDismissScreen" + adId:@1]; + OCMVerify(([_mockMessenger sendOnChannel:channel message:willDismissData])); +} + +- (void)testAdInstanceManagerOnRewardedAdUserEarnedReward { + FLTRewardedAd *ad = + [[FLTRewardedAd alloc] initWithAdUnitId:@"testId" + request:[[FLTAdRequest alloc] init] + adId:@1]; + [_manager loadAd:ad]; + + [_manager onRewardedAdUserEarnedReward:ad + reward:[[FLTRewardItem alloc] + initWithAmount:@(1) + type:@"type"]]; + NSData *data = [_methodCodec + encodeMethodCall:[FlutterMethodCall + methodCallWithMethodName:@"onAdEvent" + arguments:@{ + @"adId" : @1, + @"eventName" : + @"onRewardedAdUserEarnedReward", + @"rewardItem" : + [[FLTRewardItem alloc] + initWithAmount:@(1) + type:@"type"] + }]]; + OCMVerify([_mockMessenger sendOnChannel:channel message:data]); +} + +- (void)testAdInstanceManagerOnRewardedInterstitialAdUserEarnedReward { + FLTRewardedInterstitialAd *ad = [[FLTRewardedInterstitialAd alloc] + initWithAdUnitId:@"testId" + request:[[FLTAdRequest alloc] init] + adId:@1]; + [_manager loadAd:ad]; + + [_manager + onRewardedInterstitialAdUserEarnedReward:ad + reward:[[FLTRewardItem alloc] + initWithAmount:@(1) + type:@"type"]]; + NSData *data = [_methodCodec + encodeMethodCall: + [FlutterMethodCall + methodCallWithMethodName:@"onAdEvent" + arguments:@{ + @"adId" : @1, + @"eventName" : + @"onRewardedInterstitialAdUserEarnedReward", + @"rewardItem" : [[FLTRewardItem alloc] + initWithAmount:@(1) + type:@"type"] + }]]; + OCMVerify([_mockMessenger sendOnChannel:channel message:data]); +} + +- (void)testAdInstanceManagerOnPaidEvent { + FLTNativeAd *ad = [[FLTNativeAd alloc] + initWithAdUnitId:@"testAdUnitId" + request:[[FLTAdRequest alloc] init] + nativeAdFactory:OCMProtocolMock(@protocol(FLTNativeAdFactory)) + customOptions:nil + rootViewController:OCMClassMock([UIViewController class]) + adId:@1 + nativeAdOptions:nil + nativeTemplateStyle:nil]; + [_manager loadAd:ad]; + + NSDecimalNumber *valueDecimal = [[NSDecimalNumber alloc] initWithInt:1]; + FLTAdValue *value = [[FLTAdValue alloc] initWithValue:valueDecimal + precision:12 + currencyCode:@"code"]; + + [_manager onPaidEvent:ad value:value]; + NSData *data = [_methodCodec + encodeMethodCall:[FlutterMethodCall + methodCallWithMethodName:@"onAdEvent" + arguments:@{ + @"adId" : @1, + @"eventName" : @"onPaidEvent", + @"valueMicros" : value.valueMicros, + @"precision" : + [NSNumber numberWithInteger:12], + @"currencyCode" : @"code" + }]]; + OCMVerify([_mockMessenger sendOnChannel:channel message:data]); +} + +- (void)testBannerEvents { + FLTAdSize *size = [[FLTAdSize alloc] initWithWidth:@(1) height:@(2)]; + FLTBannerAd *ad = [[FLTBannerAd alloc] + initWithAdUnitId:@"testId" + size:size + request:[[FLTAdRequest alloc] init] + rootViewController:OCMClassMock([UIViewController class]) + adId:@1]; + FLTBannerAd *mockBannerAd = OCMPartialMock(ad); + OCMStub([mockBannerAd load]); + + [_manager loadAd:ad]; + + [_manager onBannerImpression:ad]; + NSData *impressionData = [self getDataForEvent:@"onBannerImpression" adId:@1]; + OCMVerify(([_mockMessenger sendOnChannel:channel message:impressionData])); + + [_manager onBannerWillDismissScreen:ad]; + NSData *willDismissData = [self getDataForEvent:@"onBannerWillDismissScreen" + adId:@1]; + OCMVerify(([_mockMessenger sendOnChannel:channel message:willDismissData])); + + [_manager onBannerDidDismissScreen:ad]; + NSData *didDismissData = [self getDataForEvent:@"onBannerDidDismissScreen" + adId:@1]; + OCMVerify(([_mockMessenger sendOnChannel:channel message:didDismissData])); + + [_manager onBannerWillPresentScreen:ad]; + NSData *willPresentData = [self getDataForEvent:@"onBannerWillPresentScreen" + adId:@1]; + OCMVerify(([_mockMessenger sendOnChannel:channel message:willPresentData])); +} + +- (void)testFullScreenEventsRewardedAd { + FLTRewardedAd *rewardedAd = + [[FLTRewardedAd alloc] initWithAdUnitId:@"testId" + request:[[FLTAdRequest alloc] init] + adId:@1]; + [_manager loadAd:rewardedAd]; + + [_manager adWillPresentFullScreenContent:rewardedAd]; + NSData *didPresentData = + [self getDataForEvent:@"adWillPresentFullScreenContent" adId:@1]; + OCMVerify(([_mockMessenger sendOnChannel:channel message:didPresentData])); + + [_manager adDidDismissFullScreenContent:rewardedAd]; + NSData *didDismissData = + [self getDataForEvent:@"adDidDismissFullScreenContent" adId:@1]; + OCMVerify(([_mockMessenger sendOnChannel:channel message:didDismissData])); + + [_manager adWillDismissFullScreenContent:rewardedAd]; + NSData *willDismissData = + [self getDataForEvent:@"adWillDismissFullScreenContent" adId:@1]; + OCMVerify(([_mockMessenger sendOnChannel:channel message:willDismissData])); + + [_manager adDidRecordImpression:rewardedAd]; + NSData *impressionData = [self getDataForEvent:@"adDidRecordImpression" + adId:@1]; + OCMVerify(([_mockMessenger sendOnChannel:channel message:impressionData])); +} + +- (void)testFullScreenEventsRewardedInterstitialAd { + FLTRewardedInterstitialAd *rewardedInterstitialAd = + [[FLTRewardedInterstitialAd alloc] + initWithAdUnitId:@"testId" + request:[[FLTAdRequest alloc] init] + adId:@1]; + [_manager loadAd:rewardedInterstitialAd]; + + [_manager adWillPresentFullScreenContent:rewardedInterstitialAd]; + NSData *didPresentData = + [self getDataForEvent:@"adWillPresentFullScreenContent" adId:@1]; + OCMVerify(([_mockMessenger sendOnChannel:channel message:didPresentData])); + + [_manager adDidDismissFullScreenContent:rewardedInterstitialAd]; + NSData *didDismissData = + [self getDataForEvent:@"adDidDismissFullScreenContent" adId:@1]; + OCMVerify(([_mockMessenger sendOnChannel:channel message:didDismissData])); + + [_manager adWillDismissFullScreenContent:rewardedInterstitialAd]; + NSData *willDismissData = + [self getDataForEvent:@"adWillDismissFullScreenContent" adId:@1]; + OCMVerify(([_mockMessenger sendOnChannel:channel message:willDismissData])); + + [_manager adDidRecordImpression:rewardedInterstitialAd]; + NSData *impressionData = [self getDataForEvent:@"adDidRecordImpression" + adId:@1]; + OCMVerify(([_mockMessenger sendOnChannel:channel message:impressionData])); +} + +- (void)testEventSentForDisposedAd { + FLTAdSize *size = [[FLTAdSize alloc] initWithWidth:@(1) height:@(2)]; + FLTBannerAd *bannerAd = [[FLTBannerAd alloc] + initWithAdUnitId:@"testId" + size:size + request:[[FLTAdRequest alloc] init] + rootViewController:OCMClassMock([UIViewController class]) + adId:@1]; + FLTBannerAd *mockBannerAd = OCMPartialMock(bannerAd); + OCMStub([mockBannerAd load]); + + [_manager loadAd:bannerAd]; + [_manager dispose:@(1)]; + + XCTAssertNil([_manager adFor:@(1)]); + XCTAssertNil([_manager adIdFor:bannerAd]); + + GADBannerView *mockGADBannerView = OCMClassMock([GADBannerView class]); + [bannerAd bannerViewDidRecordImpression:mockGADBannerView]; + + NSData *impressionData = [self getDataForEvent:@"onBannerImpression" adId:@1]; + OCMVerify(([_mockMessenger sendOnChannel:channel message:impressionData])); +} + +// Helper method to create encoded data for an event and ad id. +- (NSData *)getDataForEvent:(NSString *)name adId:(NSNumber *)adId { + return [_methodCodec + encodeMethodCall:[FlutterMethodCall methodCallWithMethodName:@"onAdEvent" + arguments:@{ + @"adId" : @1, + @"eventName" : name + }]]; +} + +- (void)testAdClick { + FLTRewardedInterstitialAd *rewardedInterstitialAd = + [[FLTRewardedInterstitialAd alloc] + initWithAdUnitId:@"testId" + request:[[FLTAdRequest alloc] init] + adId:@1]; + + [_manager adDidRecordClick:rewardedInterstitialAd]; + NSData *impressionData = [self getDataForEvent:@"adDidRecordClick" adId:@1]; + OCMVerify(([_mockMessenger sendOnChannel:channel message:impressionData])); +} + +@end diff --git a/mih_ui/android/build/ios/SourcePackages/google_mobile_ads-8.0.0/example/ios/RunnerTests/FLTInterstitialAdTest.m b/mih_ui/android/build/ios/SourcePackages/google_mobile_ads-8.0.0/example/ios/RunnerTests/FLTInterstitialAdTest.m new file mode 100644 index 00000000..d3ef3c13 --- /dev/null +++ b/mih_ui/android/build/ios/SourcePackages/google_mobile_ads-8.0.0/example/ios/RunnerTests/FLTInterstitialAdTest.m @@ -0,0 +1,154 @@ +// Copyright 2021 Google LLC +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// https://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +#import +#import + +#import "FLTAdInstanceManager_Internal.h" +#import "FLTAd_Internal.h" + +@interface FLTInterstitialAdTest : XCTestCase +@end + +@implementation FLTInterstitialAdTest { + FLTAdInstanceManager *mockManager; +} + +- (void)setUp { + mockManager = (OCMClassMock([FLTAdInstanceManager class])); +} + +- (void)testLoadShowInterstitialAd { + FLTAdRequest *request = OCMClassMock([FLTAdRequest class]); + OCMStub([request keywords]).andReturn(@[ @"apple" ]); + GADRequest *gadRequest = OCMClassMock([GADRequest class]); + OCMStub([request asGADRequest:[OCMArg any]]).andReturn(gadRequest); + + FLTInterstitialAd *ad = [[FLTInterstitialAd alloc] initWithAdUnitId:@"testId" + request:request + adId:@1]; + ad.manager = mockManager; + + id interstitialClassMock = OCMClassMock([GADInterstitialAd class]); + OCMStub(ClassMethod([interstitialClassMock loadWithAdUnitID:[OCMArg any] + request:[OCMArg any] + completionHandler:[OCMArg any]])) + .andDo(^(NSInvocation *invocation) { + void (^completionHandler)(GADInterstitialAd *ad, NSError *error); + [invocation getArgument:&completionHandler atIndex:4]; + completionHandler(interstitialClassMock, nil); + }); + NSError *error = OCMClassMock([NSError class]); + OCMStub([interstitialClassMock setFullScreenContentDelegate:[OCMArg any]]) + .andDo(^(NSInvocation *invocation) { + id delegate; + [invocation getArgument:&delegate atIndex:2]; + XCTAssertEqual(delegate, ad); + [delegate adDidRecordImpression:interstitialClassMock]; + [delegate adDidRecordClick:interstitialClassMock]; + [delegate adDidDismissFullScreenContent:interstitialClassMock]; + [delegate adWillPresentFullScreenContent:interstitialClassMock]; + [delegate adWillDismissFullScreenContent:interstitialClassMock]; + [delegate ad:interstitialClassMock + didFailToPresentFullScreenContentWithError:error]; + }); + + GADResponseInfo *mockResponseInfo = OCMClassMock([GADResponseInfo class]); + OCMStub([interstitialClassMock responseInfo]).andReturn(mockResponseInfo); + + // Mock callback of paid event handler. + GADAdValue *adValue = OCMClassMock([GADAdValue class]); + OCMStub([adValue value]).andReturn(NSDecimalNumber.one); + OCMStub([adValue precision]).andReturn(GADAdValuePrecisionEstimated); + OCMStub([adValue currencyCode]).andReturn(@"currencyCode"); + OCMStub([interstitialClassMock + setPaidEventHandler:[OCMArg checkWithBlock:^BOOL(id obj) { + GADPaidEventHandler handler = obj; + handler(adValue); + return YES; + }]]); + // Call load and verify interactions with mocks. + [ad load]; + + OCMVerify(ClassMethod([interstitialClassMock + loadWithAdUnitID:[OCMArg isEqual:@"testId"] + request:[OCMArg isEqual:gadRequest] + completionHandler:[OCMArg any]])); + OCMVerify([mockManager onAdLoaded:[OCMArg isEqual:ad] + responseInfo:[OCMArg isEqual:mockResponseInfo]]); + OCMVerify( + [interstitialClassMock setFullScreenContentDelegate:[OCMArg isEqual:ad]]); + XCTAssertEqual(ad.interstitial, interstitialClassMock); + OCMVerify([mockManager + onPaidEvent:[OCMArg isEqual:ad] + value:[OCMArg checkWithBlock:^BOOL(id obj) { + FLTAdValue *adValue = obj; + XCTAssertEqualObjects( + adValue.valueMicros, + [[NSDecimalNumber alloc] initWithInt:1000000]); + XCTAssertEqual(adValue.precision, GADAdValuePrecisionEstimated); + XCTAssertEqualObjects(adValue.currencyCode, @"currencyCode"); + return TRUE; + }]]); + + // Show the ad + [ad show]; + + OCMVerify( + [interstitialClassMock presentFromRootViewController:[OCMArg isNil]]); + + // Verify full screen callbacks. + OCMVerify([mockManager adWillPresentFullScreenContent:[OCMArg isEqual:ad]]); + OCMVerify([mockManager adDidDismissFullScreenContent:[OCMArg isEqual:ad]]); + OCMVerify([mockManager adWillDismissFullScreenContent:[OCMArg isEqual:ad]]); + OCMVerify([mockManager adDidRecordImpression:[OCMArg isEqual:ad]]); + OCMVerify([mockManager adDidRecordClick:[OCMArg isEqual:ad]]); + OCMVerify([mockManager + didFailToPresentFullScreenContentWithError:[OCMArg isEqual:ad] + error:[OCMArg isEqual:error]]); +} + +- (void)testFailedToLoad { + FLTAdRequest *request = OCMClassMock([FLTAdRequest class]); + OCMStub([request keywords]).andReturn(@[ @"apple" ]); + GADRequest *gadRequest = OCMClassMock([GADRequest class]); + OCMStub([request asGADRequest:[OCMArg any]]).andReturn(gadRequest); + + FLTInterstitialAd *ad = [[FLTInterstitialAd alloc] initWithAdUnitId:@"testId" + request:request + adId:@1]; + ad.manager = mockManager; + + id interstitialClassMock = OCMClassMock([GADInterstitialAd class]); + NSError *error = OCMClassMock([NSError class]); + OCMStub(ClassMethod([interstitialClassMock loadWithAdUnitID:[OCMArg any] + request:[OCMArg any] + completionHandler:[OCMArg any]])) + .andDo(^(NSInvocation *invocation) { + void (^completionHandler)(GADInterstitialAd *ad, NSError *error); + [invocation getArgument:&completionHandler atIndex:4]; + completionHandler(nil, error); + }); + + [ad load]; + + OCMVerify(ClassMethod([interstitialClassMock + loadWithAdUnitID:[OCMArg isEqual:@"testId"] + request:[OCMArg isEqual:gadRequest] + completionHandler:[OCMArg any]])); + OCMVerify([mockManager onAdFailedToLoad:[OCMArg isEqual:ad] + error:[OCMArg isEqual:error]]); +} + +@end diff --git a/mih_ui/android/build/ios/SourcePackages/google_mobile_ads-8.0.0/example/ios/RunnerTests/FLTNativeAdTest.m b/mih_ui/android/build/ios/SourcePackages/google_mobile_ads-8.0.0/example/ios/RunnerTests/FLTNativeAdTest.m new file mode 100644 index 00000000..4c3b8cb2 --- /dev/null +++ b/mih_ui/android/build/ios/SourcePackages/google_mobile_ads-8.0.0/example/ios/RunnerTests/FLTNativeAdTest.m @@ -0,0 +1,197 @@ +// Copyright 2021 Google LLC +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// https://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +#import +#import + +#import "FLTAdInstanceManager_Internal.h" +#import "FLTAd_Internal.h" +#import "FLTNativeTemplateStyle.h" + +@interface FLTNativeAdTest : XCTestCase +@end + +@implementation FLTNativeAdTest { + FLTAdInstanceManager *mockManager; +} + +- (void)setUp { + mockManager = (OCMClassMock([FLTAdInstanceManager class])); +} + +- (void)testLoadNativeAd { + FLTAdRequest *request = [[FLTAdRequest alloc] init]; + request.keywords = @[ @"apple" ]; + [self testLoadNativeAd:request customOptions:NULL]; +} + +- (void)testLoadNativeAdWithGAMRequest { + FLTGAMAdRequest *request = [[FLTGAMAdRequest alloc] init]; + request.keywords = @[ @"apple" ]; + [self testLoadNativeAd:request + customOptions:OCMClassMock([NSDictionary class])]; +} + +- (void)testLoadNativeAd:(FLTAdRequest *)gadOrGAMRequest + customOptions: + (NSDictionary *_Nullable)customOptions { + id mockNativeAdFactory = OCMProtocolMock(@protocol(FLTNativeAdFactory)); + FLTNativeAdOptions *mockNativeAdOptions = + OCMClassMock([FLTNativeAdOptions class]); + GADAdLoaderOptions *mockGADAdLoaderOptions = + OCMClassMock([GADAdLoaderOptions class]); + OCMStub([mockNativeAdOptions asGADAdLoaderOptions]) + .andReturn([NSArray arrayWithObject:mockGADAdLoaderOptions]); + UIViewController *mockViewController = OCMClassMock([UIViewController class]); + + FLTNativeAd *ad = [[FLTNativeAd alloc] initWithAdUnitId:@"testAdUnitId" + request:gadOrGAMRequest + nativeAdFactory:mockNativeAdFactory + customOptions:customOptions + rootViewController:mockViewController + adId:@1 + nativeAdOptions:mockNativeAdOptions + nativeTemplateStyle:nil]; + ad.manager = mockManager; + + XCTAssertEqual(ad.adLoader.adUnitID, @"testAdUnitId"); + XCTAssertEqual(ad.adLoader.delegate, ad); + OCMVerify([mockNativeAdOptions asGADAdLoaderOptions]); + + FLTNativeAd *mockNativeAd = OCMPartialMock(ad); + GADAdLoader *mockLoader = OCMPartialMock([ad adLoader]); + OCMStub([mockNativeAd adLoader]).andReturn(mockLoader); + [mockNativeAd load]; + + OCMVerify([mockLoader loadRequest:[OCMArg checkWithBlock:^BOOL(id obj) { + GADRequest *requestArg = obj; + return [requestArg.keywords + isEqualToArray:@[ @"apple" ]]; + }]]); + + // Check that nil is used instead of null when customOptions is Null + GADResponseInfo *mockResponseInfo = OCMClassMock([GADResponseInfo class]); + GADNativeAd *mockGADNativeAd = OCMClassMock([GADNativeAd class]); + OCMStub([mockGADNativeAd responseInfo]).andReturn(mockResponseInfo); + [ad adLoader:mockLoader didReceiveNativeAd:mockGADNativeAd]; + if ([NSNull.null isEqual:customOptions] || customOptions == nil) { + OCMVerify([mockNativeAdFactory createNativeAd:mockGADNativeAd + customOptions:[OCMArg isNil]]); + } else { + OCMVerify([mockNativeAdFactory + createNativeAd:mockGADNativeAd + customOptions:[OCMArg isEqual:customOptions]]); + } + + OCMStub( + [mockGADNativeAd setDelegate:[OCMArg checkWithBlock:^BOOL(id obj) { + id delegate = obj; + [delegate nativeAdDidRecordClick:mockGADNativeAd]; + [delegate nativeAdDidRecordImpression:mockGADNativeAd]; + [delegate nativeAdWillPresentScreen:mockGADNativeAd]; + [delegate nativeAdDidDismissScreen:mockGADNativeAd]; + [delegate nativeAdWillDismissScreen:mockGADNativeAd]; + return YES; + }]]); + + // Mock callback of paid event handler. + GADAdValue *adValue = OCMClassMock([GADAdValue class]); + OCMStub([adValue value]).andReturn(NSDecimalNumber.one); + OCMStub([adValue precision]).andReturn(GADAdValuePrecisionEstimated); + OCMStub([adValue currencyCode]).andReturn(@"currencyCode"); + OCMStub([mockGADNativeAd + setPaidEventHandler:[OCMArg checkWithBlock:^BOOL(id obj) { + GADPaidEventHandler handler = obj; + handler(adValue); + return YES; + }]]); + + // Check ad loader delegate methods forward to ad instance manager. + [(id)ad.adLoader.delegate + adLoader:mockLoader + didReceiveNativeAd:mockGADNativeAd]; + + OCMVerify([mockManager onAdLoaded:[OCMArg isEqual:ad] + responseInfo:[OCMArg isEqual:mockResponseInfo]]); + + NSError *error = OCMClassMock([NSError class]); + [(id)ad.adLoader.delegate adLoader:mockLoader + didFailToReceiveAdWithError:error]; + OCMVerify([mockManager onAdFailedToLoad:[OCMArg isEqual:ad] + error:[OCMArg isEqual:error]]); + + OCMVerify([mockGADNativeAd setPaidEventHandler:[OCMArg any]]); + + // Check GADNativeAdDelegate methods forward to ad instance manager. + OCMVerify([mockGADNativeAd setDelegate:[OCMArg isEqual:ad]]); + OCMVerify([mockManager adDidRecordClick:[OCMArg isEqual:ad]]); + OCMVerify([mockManager onNativeAdImpression:[OCMArg isEqual:ad]]); + OCMVerify([mockManager onNativeAdWillPresentScreen:[OCMArg isEqual:ad]]); + OCMVerify([mockManager onNativeAdDidDismissScreen:[OCMArg isEqual:ad]]); + OCMVerify([mockManager onNativeAdWillDismissScreen:[OCMArg isEqual:ad]]); + OCMVerify([mockManager + onPaidEvent:[OCMArg isEqual:ad] + value:[OCMArg checkWithBlock:^BOOL(id obj) { + FLTAdValue *adValue = obj; + XCTAssertEqualObjects( + adValue.valueMicros, + [[NSDecimalNumber alloc] initWithInt:1000000]); + XCTAssertEqual(adValue.precision, GADAdValuePrecisionEstimated); + XCTAssertEqualObjects(adValue.currencyCode, @"currencyCode"); + return TRUE; + }]]); +} + +// Check that native templates are used when template style is provided. +- (void)testLoadNativeAdNativeTemplateStyle { + FLTGAMAdRequest *request = [[FLTGAMAdRequest alloc] init]; + id mockNativeAdFactory = OCMProtocolMock(@protocol(FLTNativeAdFactory)); + FLTNativeAdOptions *mockNativeAdOptions = + OCMClassMock([FLTNativeAdOptions class]); + GADAdLoaderOptions *mockGADAdLoaderOptions = + OCMClassMock([GADAdLoaderOptions class]); + OCMStub([mockNativeAdOptions asGADAdLoaderOptions]) + .andReturn([NSArray arrayWithObject:mockGADAdLoaderOptions]); + UIViewController *mockViewController = OCMClassMock([UIViewController class]); + FLTNativeTemplateStyle *templateStyle = + OCMClassMock([FLTNativeTemplateStyle class]); + UIView *mockTemplateView = OCMClassMock([UIView class]); + OCMStub([templateStyle getDisplayedView:[OCMArg any]]) + .andReturn(mockTemplateView); + + FLTNativeAd *ad = [[FLTNativeAd alloc] initWithAdUnitId:@"testAdUnitId" + request:request + nativeAdFactory:mockNativeAdFactory + customOptions:nil + rootViewController:mockViewController + adId:@1 + nativeAdOptions:mockNativeAdOptions + nativeTemplateStyle:templateStyle]; + ad.manager = mockManager; + + FLTNativeAd *mockNativeAd = OCMPartialMock(ad); + GADAdLoader *mockLoader = OCMPartialMock([ad adLoader]); + OCMStub([mockNativeAd adLoader]).andReturn(mockLoader); + [mockNativeAd load]; + + GADResponseInfo *mockResponseInfo = OCMClassMock([GADResponseInfo class]); + GADNativeAd *mockGADNativeAd = OCMClassMock([GADNativeAd class]); + OCMStub([mockGADNativeAd responseInfo]).andReturn(mockResponseInfo); + [ad adLoader:mockLoader didReceiveNativeAd:mockGADNativeAd]; + + OCMVerify([templateStyle getDisplayedView:[OCMArg isEqual:mockGADNativeAd]]); + XCTAssertEqual(ad.view, mockTemplateView); +} + +@end diff --git a/mih_ui/android/build/ios/SourcePackages/google_mobile_ads-8.0.0/example/ios/RunnerTests/FLTRewardedAdTest.m b/mih_ui/android/build/ios/SourcePackages/google_mobile_ads-8.0.0/example/ios/RunnerTests/FLTRewardedAdTest.m new file mode 100644 index 00000000..71d6f66d --- /dev/null +++ b/mih_ui/android/build/ios/SourcePackages/google_mobile_ads-8.0.0/example/ios/RunnerTests/FLTRewardedAdTest.m @@ -0,0 +1,239 @@ +// Copyright 2021 Google LLC +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// https://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +#import +#import + +#import "FLTAdInstanceManager_Internal.h" +#import "FLTAd_Internal.h" + +@interface FLTRewardedAdTest : XCTestCase +@end + +@implementation FLTRewardedAdTest { + FLTAdInstanceManager *mockManager; +} + +- (void)setUp { + mockManager = (OCMClassMock([FLTAdInstanceManager class])); +} + +- (void)testLoadShowRewardedAdGADRequest { + FLTAdRequest *request = OCMClassMock([FLTAdRequest class]); + OCMStub([request keywords]).andReturn(@[ @"apple" ]); + GADRequest *gadRequest = OCMClassMock([GADRequest class]); + OCMStub([request asGADRequest:[OCMArg any]]).andReturn(gadRequest); + + [self testLoadShowRewardedAd:request gadOrGAMRequest:gadRequest]; +} + +- (void)testLoadShowRewardedAdGAMRequest { + FLTGAMAdRequest *request = OCMClassMock([FLTGAMAdRequest class]); + OCMStub([request keywords]).andReturn(@[ @"apple" ]); + GAMRequest *gamRequest = OCMClassMock([GAMRequest class]); + OCMStub([request asGAMRequest:[OCMArg any]]).andReturn(gamRequest); + + [self testLoadShowRewardedAd:request gadOrGAMRequest:gamRequest]; +} + +// Helper method for testing with FLTAdRequest and FLTGAMAdRequest. +- (void)testLoadShowRewardedAd:(FLTAdRequest *)request + gadOrGAMRequest:(GADRequest *)gadOrGAMRequest { + FLTRewardedAd *ad = [[FLTRewardedAd alloc] initWithAdUnitId:@"testId" + request:request + adId:@1]; + ad.manager = mockManager; + + // Stub the load call to invoke successful load callback. + id rewardedClassMock = OCMClassMock([GADRewardedAd class]); + OCMStub(ClassMethod([rewardedClassMock loadWithAdUnitID:[OCMArg any] + request:[OCMArg any] + completionHandler:[OCMArg any]])) + .andDo(^(NSInvocation *invocation) { + void (^completionHandler)(GADRewardedAd *ad, NSError *error); + [invocation getArgument:&completionHandler atIndex:4]; + completionHandler(rewardedClassMock, nil); + }); + // Stub setting of FullScreenContentDelegate to invoke delegate callbacks. + NSError *error = OCMClassMock([NSError class]); + __block id fullScreenContentDelegate; + OCMStub([rewardedClassMock setFullScreenContentDelegate:[OCMArg any]]) + .andDo(^(NSInvocation *invocation) { + [invocation getArgument:&fullScreenContentDelegate atIndex:2]; + XCTAssertEqual(fullScreenContentDelegate, ad); + }); + GADResponseInfo *responseInfo = OCMClassMock([GADResponseInfo class]); + OCMStub([rewardedClassMock responseInfo]).andReturn(responseInfo); + // Stub presentFromRootViewController to invoke reward callback. + GADAdReward *mockReward = OCMClassMock([GADAdReward class]); + OCMStub([mockReward amount]).andReturn(@1.0); + OCMStub([mockReward type]).andReturn(@"type"); + OCMStub([rewardedClassMock adReward]).andReturn(mockReward); + OCMStub([rewardedClassMock presentFromRootViewController:[OCMArg any] + userDidEarnRewardHandler:[OCMArg any]]) + .andDo(^(NSInvocation *invocation) { + GADUserDidEarnRewardHandler rewardHandler; + [invocation getArgument:&rewardHandler atIndex:3]; + rewardHandler(); + }); + + // Mock callback of paid event handler. + GADAdValue *adValue = OCMClassMock([GADAdValue class]); + OCMStub([adValue value]).andReturn(NSDecimalNumber.one); + OCMStub([adValue precision]).andReturn(GADAdValuePrecisionEstimated); + OCMStub([adValue currencyCode]).andReturn(@"currencyCode"); + OCMStub([rewardedClassMock + setPaidEventHandler:[OCMArg checkWithBlock:^BOOL(id obj) { + GADPaidEventHandler handler = obj; + handler(adValue); + return YES; + }]]); + + // Setup mock for UIApplication.sharedInstance + id uiApplicationClassMock = OCMClassMock([UIApplication class]); + OCMStub(ClassMethod([uiApplicationClassMock sharedApplication])) + .andReturn(uiApplicationClassMock); + + // Call load and check expected interactions with mocks. + [ad load]; + + OCMVerify(ClassMethod([rewardedClassMock + loadWithAdUnitID:[OCMArg isEqual:@"testId"] + request:[OCMArg isEqual:gadOrGAMRequest] + completionHandler:[OCMArg any]])); + OCMVerify([mockManager onAdLoaded:[OCMArg isEqual:ad] + responseInfo:[OCMArg isEqual:responseInfo]]); + OCMVerify( + [rewardedClassMock setFullScreenContentDelegate:[OCMArg isEqual:ad]]); + XCTAssertEqual(ad.rewardedAd, rewardedClassMock); + OCMVerify([mockManager + onPaidEvent:[OCMArg isEqual:ad] + value:[OCMArg checkWithBlock:^BOOL(id obj) { + FLTAdValue *adValue = obj; + XCTAssertEqualObjects( + adValue.valueMicros, + [[NSDecimalNumber alloc] initWithInt:1000000]); + XCTAssertEqual(adValue.precision, GADAdValuePrecisionEstimated); + XCTAssertEqualObjects(adValue.currencyCode, @"currencyCode"); + return TRUE; + }]]); + + // Set SSV and verify interactions with mocks + FLTServerSideVerificationOptions *serverSideVerificationOptions = + OCMClassMock([FLTServerSideVerificationOptions class]); + GADServerSideVerificationOptions *gadOptions = + OCMClassMock([GADServerSideVerificationOptions class]); + OCMStub([serverSideVerificationOptions asGADServerSideVerificationOptions]) + .andReturn(gadOptions); + + [ad setServerSideVerificationOptions:serverSideVerificationOptions]; + + OCMVerify([rewardedClassMock + setServerSideVerificationOptions:[OCMArg isEqual:gadOptions]]); + + // Show the ad and verify callbacks invoked + [ad show]; + + OCMVerify([rewardedClassMock presentFromRootViewController:[OCMArg isNil] + userDidEarnRewardHandler:[OCMArg any]]); + + [fullScreenContentDelegate adWillPresentFullScreenContent:rewardedClassMock]; + OCMVerify([mockManager adWillPresentFullScreenContent:[OCMArg isEqual:ad]]); + // Verify that we hide status bar +#pragma clang diagnostic push +#pragma clang diagnostic ignored "-Wdeprecated-declarations" + OCMVerify([uiApplicationClassMock setStatusBarHidden:YES]); +#pragma clang diagnostic pop + + [fullScreenContentDelegate adDidRecordImpression:rewardedClassMock]; + OCMVerify([mockManager adDidRecordImpression:[OCMArg isEqual:ad]]); + + [fullScreenContentDelegate adDidRecordClick:rewardedClassMock]; + OCMVerify([mockManager adDidRecordClick:[OCMArg isEqual:ad]]); + + [fullScreenContentDelegate adDidDismissFullScreenContent:rewardedClassMock]; + OCMVerify([mockManager adDidDismissFullScreenContent:[OCMArg isEqual:ad]]); + + [fullScreenContentDelegate adWillDismissFullScreenContent:rewardedClassMock]; + OCMVerify([mockManager adWillDismissFullScreenContent:[OCMArg isEqual:ad]]); +#pragma clang diagnostic push +#pragma clang diagnostic ignored "-Wdeprecated-declarations" + OCMVerify([uiApplicationClassMock setStatusBarHidden:NO]); +#pragma clang diagnostic pop + + [ad ad:rewardedClassMock didFailToPresentFullScreenContentWithError:error]; + OCMVerify([mockManager + didFailToPresentFullScreenContentWithError:[OCMArg isEqual:ad] + error:[OCMArg isEqual:error]]); + + // Verify reward callback. + OCMVerify([mockManager + onRewardedAdUserEarnedReward:[OCMArg isEqual:ad] + reward:[OCMArg checkWithBlock:^BOOL(id obj) { + FLTRewardItem *reward = (FLTRewardItem *)obj; + XCTAssertEqual(reward.amount, @1.0); + XCTAssertEqual(reward.type, @"type"); + return true; + }]]); + + // Explicitly stop mocking. There is an issue when running tests on Github + // actions where the mock does not get deallocated properly, so without this + // other test cases will fail. + [rewardedClassMock stopMocking]; +} + +- (void)testFailedToLoadGADRequest { + FLTAdRequest *request = OCMClassMock([FLTAdRequest class]); + OCMStub([request keywords]).andReturn(@[ @"apple" ]); + GADRequest *gadRequest = OCMClassMock([GADRequest class]); + OCMStub([request asGADRequest:[OCMArg any]]).andReturn(gadRequest); + [self testFailedToLoad:request]; +} + +- (void)testFailedToLoadGAMRequest { + FLTGAMAdRequest *request = OCMClassMock([FLTGAMAdRequest class]); + OCMStub([request keywords]).andReturn(@[ @"apple" ]); + GAMRequest *gamRequest = OCMClassMock([GAMRequest class]); + OCMStub([request asGAMRequest:[OCMArg any]]).andReturn(gamRequest); + [self testFailedToLoad:request]; +} + +// Helper for testing failed to load. +- (void)testFailedToLoad:(FLTAdRequest *)request { + FLTRewardedAd *ad = [[FLTRewardedAd alloc] initWithAdUnitId:@"testId" + request:request + adId:@1]; + ad.manager = mockManager; + + id rewardedClassMock = OCMClassMock([GADRewardedAd class]); + NSError *error = OCMClassMock([NSError class]); + OCMStub(ClassMethod([rewardedClassMock loadWithAdUnitID:[OCMArg any] + request:[OCMArg any] + completionHandler:[OCMArg any]])) + .andDo(^(NSInvocation *invocation) { + void (^completionHandler)(GADRewardedAd *ad, NSError *error); + [invocation getArgument:&completionHandler atIndex:4]; + completionHandler(nil, error); + }); + + [ad load]; + + OCMVerify(ClassMethod([rewardedClassMock loadWithAdUnitID:[OCMArg any] + request:[OCMArg any] + completionHandler:[OCMArg any]])); + OCMVerify([mockManager onAdFailedToLoad:[OCMArg isEqual:ad] + error:[OCMArg isEqual:error]]); +} + +@end diff --git a/mih_ui/android/build/ios/SourcePackages/google_mobile_ads-8.0.0/example/ios/RunnerTests/FLTRewardedInterstitialAdTest.m b/mih_ui/android/build/ios/SourcePackages/google_mobile_ads-8.0.0/example/ios/RunnerTests/FLTRewardedInterstitialAdTest.m new file mode 100644 index 00000000..0c547563 --- /dev/null +++ b/mih_ui/android/build/ios/SourcePackages/google_mobile_ads-8.0.0/example/ios/RunnerTests/FLTRewardedInterstitialAdTest.m @@ -0,0 +1,232 @@ +// Copyright 2021 Google LLC +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// https://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +#import +#import + +#import "FLTAdInstanceManager_Internal.h" +#import "FLTAd_Internal.h" + +@interface FLTRewardedInterstitialAdTest : XCTestCase +@end + +@implementation FLTRewardedInterstitialAdTest { + FLTAdInstanceManager *mockManager; +} + +- (void)setUp { + mockManager = (OCMClassMock([FLTAdInstanceManager class])); +} + +- (void)testLoadShowRewardedInterstitialAdGADRequest { + FLTAdRequest *request = OCMClassMock([FLTAdRequest class]); + OCMStub([request keywords]).andReturn(@[ @"apple" ]); + GADRequest *gadRequest = OCMClassMock([GADRequest class]); + OCMStub([request asGADRequest:[OCMArg any]]).andReturn(gadRequest); + + [self testLoadShowRewardedInterstitialAd:request gadOrGAMRequest:gadRequest]; +} + +- (void)testLoadShowRewardedInterstitialAdGAMRequest { + FLTGAMAdRequest *request = OCMClassMock([FLTGAMAdRequest class]); + OCMStub([request keywords]).andReturn(@[ @"apple" ]); + GAMRequest *gamRequest = OCMClassMock([GAMRequest class]); + OCMStub([request asGAMRequest:[OCMArg any]]).andReturn(gamRequest); + + [self testLoadShowRewardedInterstitialAd:request gadOrGAMRequest:gamRequest]; +} + +// Helper method for testing with FLTAdRequest and FLTGAMAdRequest. +- (void)testLoadShowRewardedInterstitialAd:(FLTAdRequest *)request + gadOrGAMRequest:(GADRequest *)gadOrGAMRequest { + FLTRewardedInterstitialAd *ad = + [[FLTRewardedInterstitialAd alloc] initWithAdUnitId:@"testId" + request:request + adId:@1]; + ad.manager = mockManager; + + // Stub the load call to invoke successful load callback. + id rewardedInterstitialClassMock = + OCMClassMock([GADRewardedInterstitialAd class]); + OCMStub(ClassMethod([rewardedInterstitialClassMock + loadWithAdUnitID:[OCMArg any] + request:[OCMArg any] + completionHandler:[OCMArg any]])) + .andDo(^(NSInvocation *invocation) { + void (^completionHandler)(GADRewardedInterstitialAd *ad, + NSError *error); + [invocation getArgument:&completionHandler atIndex:4]; + completionHandler(rewardedInterstitialClassMock, nil); + }); + // Stub setting of FullScreenContentDelegate to invoke delegate callbacks. + NSError *error = OCMClassMock([NSError class]); + OCMStub( + [rewardedInterstitialClassMock setFullScreenContentDelegate:[OCMArg any]]) + .andDo(^(NSInvocation *invocation) { + id delegate; + [invocation getArgument:&delegate atIndex:2]; + XCTAssertEqual(delegate, ad); + [delegate adDidRecordImpression:rewardedInterstitialClassMock]; + [delegate adDidRecordClick:rewardedInterstitialClassMock]; + [delegate adDidDismissFullScreenContent:rewardedInterstitialClassMock]; + [delegate adWillPresentFullScreenContent:rewardedInterstitialClassMock]; + [delegate adWillDismissFullScreenContent:rewardedInterstitialClassMock]; + [delegate ad:rewardedInterstitialClassMock + didFailToPresentFullScreenContentWithError:error]; + }); + GADResponseInfo *responseInfo = OCMClassMock([GADResponseInfo class]); + OCMStub([rewardedInterstitialClassMock responseInfo]).andReturn(responseInfo); + // Stub presentFromRootViewController to invoke reward callback. + GADAdReward *mockReward = OCMClassMock([GADAdReward class]); + OCMStub([mockReward amount]).andReturn(@1.0); + OCMStub([mockReward type]).andReturn(@"type"); + OCMStub([rewardedInterstitialClassMock adReward]).andReturn(mockReward); + OCMStub([rewardedInterstitialClassMock + presentFromRootViewController:[OCMArg any] + userDidEarnRewardHandler:[OCMArg any]]) + .andDo(^(NSInvocation *invocation) { + GADUserDidEarnRewardHandler rewardHandler; + [invocation getArgument:&rewardHandler atIndex:3]; + rewardHandler(); + }); + + // Mock callback of paid event handler. + GADAdValue *adValue = OCMClassMock([GADAdValue class]); + OCMStub([adValue value]).andReturn(NSDecimalNumber.one); + OCMStub([adValue precision]).andReturn(GADAdValuePrecisionEstimated); + OCMStub([adValue currencyCode]).andReturn(@"currencyCode"); + OCMStub([rewardedInterstitialClassMock + setPaidEventHandler:[OCMArg checkWithBlock:^BOOL(id obj) { + GADPaidEventHandler handler = obj; + handler(adValue); + return YES; + }]]); + // Call load and check expected interactions with mocks. + [ad load]; + + OCMVerify(ClassMethod([rewardedInterstitialClassMock + loadWithAdUnitID:[OCMArg isEqual:@"testId"] + request:[OCMArg isEqual:gadOrGAMRequest] + completionHandler:[OCMArg any]])); + OCMVerify([mockManager onAdLoaded:[OCMArg isEqual:ad] + responseInfo:[OCMArg isEqual:responseInfo]]); + OCMVerify([rewardedInterstitialClassMock + setFullScreenContentDelegate:[OCMArg isEqual:ad]]); + OCMVerify([mockManager + onPaidEvent:[OCMArg isEqual:ad] + value:[OCMArg checkWithBlock:^BOOL(id obj) { + FLTAdValue *adValue = obj; + XCTAssertEqualObjects( + adValue.valueMicros, + [[NSDecimalNumber alloc] initWithInt:1000000]); + XCTAssertEqual(adValue.precision, GADAdValuePrecisionEstimated); + XCTAssertEqualObjects(adValue.currencyCode, @"currencyCode"); + return TRUE; + }]]); + + // Set SSV and verify interactions with mocks + FLTServerSideVerificationOptions *serverSideVerificationOptions = + OCMClassMock([FLTServerSideVerificationOptions class]); + GADServerSideVerificationOptions *gadOptions = + OCMClassMock([GADServerSideVerificationOptions class]); + OCMStub([serverSideVerificationOptions asGADServerSideVerificationOptions]) + .andReturn(gadOptions); + + [ad setServerSideVerificationOptions:serverSideVerificationOptions]; + + OCMVerify([rewardedInterstitialClassMock + setServerSideVerificationOptions:[OCMArg isEqual:gadOptions]]); + + // Show the ad and verify callbacks are invoked + [ad show]; + + OCMVerify([rewardedInterstitialClassMock + presentFromRootViewController:[OCMArg isNil] + userDidEarnRewardHandler:[OCMArg any]]); + + // Verify full screen callbacks. + OCMVerify([mockManager adWillPresentFullScreenContent:[OCMArg isEqual:ad]]); + OCMVerify([mockManager adDidDismissFullScreenContent:[OCMArg isEqual:ad]]); + OCMVerify([mockManager adWillDismissFullScreenContent:[OCMArg isEqual:ad]]); + OCMVerify([mockManager adDidRecordImpression:[OCMArg isEqual:ad]]); + OCMVerify([mockManager adDidRecordClick:[OCMArg isEqual:ad]]); + OCMVerify([mockManager + didFailToPresentFullScreenContentWithError:[OCMArg isEqual:ad] + error:[OCMArg isEqual:error]]); + + // Verify reward callback. + OCMVerify([mockManager + onRewardedInterstitialAdUserEarnedReward:[OCMArg isEqual:ad] + reward:[OCMArg checkWithBlock:^BOOL( + id obj) { + FLTRewardItem *reward = + (FLTRewardItem *)obj; + XCTAssertEqual(reward.amount, @1.0); + XCTAssertEqual(reward.type, @"type"); + return true; + }]]); + // Call stopMocking. There's a bug where mocks are not stopping automatically + // after the test finishes. + [rewardedInterstitialClassMock stopMocking]; +} + +- (void)testFailedToLoadGADRequest { + FLTAdRequest *request = OCMClassMock([FLTAdRequest class]); + OCMStub([request keywords]).andReturn(@[ @"apple" ]); + GADRequest *gadRequest = OCMClassMock([GADRequest class]); + OCMStub([request asGADRequest:[OCMArg any]]).andReturn(gadRequest); + [self testFailedToLoad:request]; +} + +- (void)testFailedToLoadGAMRequest { + FLTGAMAdRequest *request = OCMClassMock([FLTGAMAdRequest class]); + OCMStub([request keywords]).andReturn(@[ @"apple" ]); + GAMRequest *gamRequest = OCMClassMock([GAMRequest class]); + OCMStub([request asGAMRequest:[OCMArg any]]).andReturn(gamRequest); + [self testFailedToLoad:request]; +} + +// Helper for testing failed to load. +- (void)testFailedToLoad:(FLTAdRequest *)request { + FLTRewardedInterstitialAd *ad = + [[FLTRewardedInterstitialAd alloc] initWithAdUnitId:@"testId" + request:request + adId:@1]; + ad.manager = mockManager; + + id rewardedInterstitialClassMock = + OCMClassMock([GADRewardedInterstitialAd class]); + NSError *error = OCMClassMock([NSError class]); + OCMStub(ClassMethod([rewardedInterstitialClassMock + loadWithAdUnitID:[OCMArg any] + request:[OCMArg any] + completionHandler:[OCMArg any]])) + .andDo(^(NSInvocation *invocation) { + void (^completionHandler)(GADRewardedInterstitialAd *ad, + NSError *error); + [invocation getArgument:&completionHandler atIndex:4]; + completionHandler(nil, error); + }); + + [ad load]; + + OCMVerify(ClassMethod([rewardedInterstitialClassMock + loadWithAdUnitID:[OCMArg any] + request:[OCMArg any] + completionHandler:[OCMArg any]])); + OCMVerify([mockManager onAdFailedToLoad:[OCMArg isEqual:ad] + error:[OCMArg isEqual:error]]); +} + +@end diff --git a/mih_ui/android/build/ios/SourcePackages/google_mobile_ads-8.0.0/example/ios/RunnerTests/FLTUserMessagingPlatformManagerTest.m b/mih_ui/android/build/ios/SourcePackages/google_mobile_ads-8.0.0/example/ios/RunnerTests/FLTUserMessagingPlatformManagerTest.m new file mode 100644 index 00000000..946460ba --- /dev/null +++ b/mih_ui/android/build/ios/SourcePackages/google_mobile_ads-8.0.0/example/ios/RunnerTests/FLTUserMessagingPlatformManagerTest.m @@ -0,0 +1,454 @@ +// Copyright 2022 Google LLC +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// https://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +#import +#include +#import + +#import "FLTUserMessagingPlatformManager.h" +#import "FLTUserMessagingPlatformReaderWriter.h" + +@interface FLTUserMessagingPlatformManagerTest : XCTestCase +@end + +@interface FLTUserMessagingPlatformManager () +@property UIViewController *rootController; +@end + +@implementation FLTUserMessagingPlatformManagerTest { + FLTUserMessagingPlatformManager *umpManager; + NSObject *binaryMessenger; + UMPConsentInformation *mockUmpConsentInformation; + FlutterResult flutterResult; + bool resultInvoked; + id _Nullable returnedResult; +} + +- (void)setUp { + binaryMessenger = OCMProtocolMock(@protocol(FlutterBinaryMessenger)); + umpManager = [[FLTUserMessagingPlatformManager alloc] + initWithBinaryMessenger:binaryMessenger]; + id umpInfoClassMock = OCMClassMock([UMPConsentInformation class]); + OCMStub(ClassMethod([umpInfoClassMock sharedInstance])) + .andReturn(umpInfoClassMock); + mockUmpConsentInformation = umpInfoClassMock; + + resultInvoked = false; + returnedResult = nil; + flutterResult = ^(id _Nullable result) { + self->resultInvoked = true; + self->returnedResult = result; + }; +} + +- (void)testReset { + FlutterMethodCall *methodCall = + [FlutterMethodCall methodCallWithMethodName:@"ConsentInformation#reset" + arguments:@{}]; + + [umpManager handleMethodCall:methodCall result:flutterResult]; + + XCTAssertTrue(resultInvoked); + XCTAssertEqual(returnedResult, nil); + OCMVerify([mockUmpConsentInformation reset]); +} + +- (void)testGetConsentStatus { + FlutterMethodCall *methodCall = [FlutterMethodCall + methodCallWithMethodName:@"ConsentInformation#getConsentStatus" + arguments:@{}]; + + OCMStub([mockUmpConsentInformation consentStatus]) + .andReturn(UMPConsentStatusRequired); + + [umpManager handleMethodCall:methodCall result:flutterResult]; + + XCTAssertTrue(resultInvoked); + NSNumber *expected = + [[NSNumber alloc] initWithInteger:UMPConsentStatusRequired]; + XCTAssertEqual(returnedResult, expected); + OCMVerify([mockUmpConsentInformation consentStatus]); +} + +- (void)testCanRequestAds_yes { + FlutterMethodCall *methodCall = [FlutterMethodCall + methodCallWithMethodName:@"ConsentInformation#canRequestAds" + arguments:@{}]; + OCMStub([mockUmpConsentInformation canRequestAds]).andReturn(YES); + + [umpManager handleMethodCall:methodCall result:flutterResult]; + + XCTAssertTrue(resultInvoked); + XCTAssertEqual(returnedResult, [[NSNumber alloc] initWithBool:YES]); +} + +- (void)testCanRequestAds_no { + FlutterMethodCall *methodCall = [FlutterMethodCall + methodCallWithMethodName:@"ConsentInformation#canRequestAds" + arguments:@{}]; + OCMStub([mockUmpConsentInformation canRequestAds]).andReturn(NO); + + [umpManager handleMethodCall:methodCall result:flutterResult]; + + XCTAssertTrue(resultInvoked); + XCTAssertEqual(returnedResult, [[NSNumber alloc] initWithBool:NO]); +} + +- (void)testGetPrivacyOptionsRequirementStatus_notRequiredReturns0 { + FlutterMethodCall *methodCall = [FlutterMethodCall + methodCallWithMethodName: + @"ConsentInformation#getPrivacyOptionsRequirementStatus" + arguments:@{}]; + OCMStub([mockUmpConsentInformation privacyOptionsRequirementStatus]) + .andReturn(UMPPrivacyOptionsRequirementStatusNotRequired); + + [umpManager handleMethodCall:methodCall result:flutterResult]; + + XCTAssertTrue(resultInvoked); + NSNumber *expected = [[NSNumber alloc] initWithInt:0]; + XCTAssertEqual(returnedResult, expected); +} + +- (void)testGetPrivacyOptionsRequirementStatus_requiredReturns1 { + FlutterMethodCall *methodCall = [FlutterMethodCall + methodCallWithMethodName: + @"ConsentInformation#getPrivacyOptionsRequirementStatus" + arguments:@{}]; + OCMStub([mockUmpConsentInformation privacyOptionsRequirementStatus]) + .andReturn(UMPPrivacyOptionsRequirementStatusRequired); + + [umpManager handleMethodCall:methodCall result:flutterResult]; + + XCTAssertTrue(resultInvoked); + NSNumber *expected = [[NSNumber alloc] initWithInt:1]; + XCTAssertEqual(returnedResult, expected); +} + +- (void)testGetPrivacyOptionsRequirementStatus_unknownReturns2 { + FlutterMethodCall *methodCall = [FlutterMethodCall + methodCallWithMethodName: + @"ConsentInformation#getPrivacyOptionsRequirementStatus" + arguments:@{}]; + OCMStub([mockUmpConsentInformation privacyOptionsRequirementStatus]) + .andReturn(UMPPrivacyOptionsRequirementStatusUnknown); + + [umpManager handleMethodCall:methodCall result:flutterResult]; + + XCTAssertTrue(resultInvoked); + NSNumber *expected = [[NSNumber alloc] initWithInt:2]; + XCTAssertEqual(returnedResult, expected); +} + +- (void)testRequestConsentInfoUpdate_success { + UMPRequestParameters *params = OCMClassMock([UMPRequestParameters class]); + + FlutterMethodCall *methodCall = [FlutterMethodCall + methodCallWithMethodName:@"ConsentInformation#requestConsentInfoUpdate" + arguments:@{@"params" : params}]; + + OCMStub([mockUmpConsentInformation + requestConsentInfoUpdateWithParameters:[OCMArg isEqual:params] + completionHandler:[OCMArg any]]) + .andDo(^(NSInvocation *invocation) { + void (^completionHandler)(NSError *error); + [invocation getArgument:&completionHandler atIndex:3]; + completionHandler(nil); + }); + + [umpManager handleMethodCall:methodCall result:flutterResult]; + + XCTAssertTrue(resultInvoked); + XCTAssertNil(returnedResult); + OCMVerify([mockUmpConsentInformation + requestConsentInfoUpdateWithParameters:[OCMArg any] + completionHandler:[OCMArg any]]); +} + +- (void)testRequestConsentInfoUpdate_error { + UMPRequestParameters *params = OCMClassMock([UMPRequestParameters class]); + FlutterMethodCall *methodCall = [FlutterMethodCall + methodCallWithMethodName:@"ConsentInformation#requestConsentInfoUpdate" + arguments:@{@"params" : params}]; + + NSDictionary *userInfo = @{NSLocalizedDescriptionKey : @"description"}; + NSError *error = [NSError errorWithDomain:@"domain" code:1 userInfo:userInfo]; + OCMStub([mockUmpConsentInformation + requestConsentInfoUpdateWithParameters:[OCMArg isEqual:params] + completionHandler:[OCMArg any]]) + .andDo(^(NSInvocation *invocation) { + void (^completionHandler)(NSError *error); + [invocation getArgument:&completionHandler atIndex:3]; + completionHandler(error); + }); + + [umpManager handleMethodCall:methodCall result:flutterResult]; + + XCTAssertTrue(resultInvoked); + + OCMVerify([mockUmpConsentInformation + requestConsentInfoUpdateWithParameters:[OCMArg any] + completionHandler:[OCMArg any]]); + FlutterError *resultError = (FlutterError *)returnedResult; + XCTAssertEqualObjects(resultError.code, @"1"); + XCTAssertEqualObjects(resultError.details, @"domain"); + XCTAssertEqualObjects(resultError.message, @"description"); +} + +- (void)testLoadAndShowConsentFormIfRequired_success { + UMPRequestParameters *params = OCMClassMock([UMPRequestParameters class]); + FlutterMethodCall *methodCall = [FlutterMethodCall + methodCallWithMethodName: + @"UserMessagingPlatform#loadAndShowConsentFormIfRequired" + arguments:@{@"params" : params}]; + id mockUmpConsentForm = OCMClassMock([UMPConsentForm class]); + OCMStub([mockUmpConsentForm + loadAndPresentIfRequiredFromViewController:[OCMArg any] + completionHandler:[OCMArg any]]) + .andDo(^(NSInvocation *invocation) { + __unsafe_unretained void (^completionHandler)(NSError *loadError); + [invocation getArgument:&completionHandler atIndex:3]; + completionHandler(nil); + }); + + [umpManager handleMethodCall:methodCall result:flutterResult]; + + XCTAssertTrue(resultInvoked); + XCTAssertNil(returnedResult); + OCMVerify([mockUmpConsentForm + loadAndPresentIfRequiredFromViewController:[OCMArg any] + completionHandler:[OCMArg any]]); +} + +- (void)testLoadAndShowConsentFormIfRequired_error { + NSDictionary *userInfo = @{NSLocalizedDescriptionKey : @"description"}; + NSError *error = [NSError errorWithDomain:@"domain" code:1 userInfo:userInfo]; + UMPRequestParameters *params = OCMClassMock([UMPRequestParameters class]); + FlutterMethodCall *methodCall = [FlutterMethodCall + methodCallWithMethodName: + @"UserMessagingPlatform#loadAndShowConsentFormIfRequired" + arguments:@{@"params" : params}]; + id mockUmpConsentForm = OCMClassMock([UMPConsentForm class]); + OCMStub([mockUmpConsentForm + loadAndPresentIfRequiredFromViewController:[OCMArg any] + completionHandler:[OCMArg any]]) + .andDo(^(NSInvocation *invocation) { + __unsafe_unretained void (^completionHandler)(NSError *loadError); + [invocation getArgument:&completionHandler atIndex:3]; + completionHandler(error); + }); + + [umpManager handleMethodCall:methodCall result:flutterResult]; + + XCTAssertTrue(resultInvoked); + FlutterError *resultError = (FlutterError *)returnedResult; + XCTAssertEqualObjects(resultError.code, @"1"); + XCTAssertEqualObjects(resultError.details, @"domain"); + XCTAssertEqualObjects(resultError.message, @"description"); + OCMVerify([mockUmpConsentForm + loadAndPresentIfRequiredFromViewController:[OCMArg any] + completionHandler:[OCMArg any]]); +} + +- (void)testLoadConsentForm_successAndDispose { + FlutterMethodCall *methodCall = [FlutterMethodCall + methodCallWithMethodName:@"UserMessagingPlatform#loadConsentForm" + arguments:@{}]; + + id mockUmpConsentForm = OCMClassMock([UMPConsentForm class]); + OCMStub([mockUmpConsentForm loadWithCompletionHandler:[OCMArg any]]) + .andDo(^(NSInvocation *invocation) { + void (^completionHandler)(UMPConsentForm *form, NSError *loadError); + [invocation getArgument:&completionHandler atIndex:2]; + completionHandler(mockUmpConsentForm, nil); + }); + + FLTUserMessagingPlatformManager *partialMock = OCMPartialMock(umpManager); + FLTUserMessagingPlatformReaderWriter *mockReaderWriter = + OCMClassMock([FLTUserMessagingPlatformReaderWriter class]); + OCMStub([partialMock readerWriter]).andReturn(mockReaderWriter); + + [partialMock handleMethodCall:methodCall result:flutterResult]; + + XCTAssertTrue(resultInvoked); + XCTAssertEqual(returnedResult, mockUmpConsentForm); + OCMVerify([mockUmpConsentForm loadWithCompletionHandler:[OCMArg any]]); + OCMVerify([mockReaderWriter trackConsentForm:mockUmpConsentForm]); +} + +- (void)testLoadConsentForm_error { + FlutterMethodCall *methodCall = [FlutterMethodCall + methodCallWithMethodName:@"UserMessagingPlatform#loadConsentForm" + arguments:@{}]; + + NSDictionary *userInfo = @{NSLocalizedDescriptionKey : @"description"}; + NSError *error = [NSError errorWithDomain:@"domain" code:1 userInfo:userInfo]; + id mockUmpConsentForm = OCMClassMock([UMPConsentForm class]); + OCMStub([mockUmpConsentForm loadWithCompletionHandler:[OCMArg any]]) + .andDo(^(NSInvocation *invocation) { + void (^completionHandler)(UMPConsentForm *form, NSError *loadError); + [invocation getArgument:&completionHandler atIndex:2]; + completionHandler(mockUmpConsentForm, error); + }); + + [umpManager handleMethodCall:methodCall result:flutterResult]; + + XCTAssertTrue(resultInvoked); + OCMVerify([mockUmpConsentForm loadWithCompletionHandler:[OCMArg any]]); + FlutterError *resultError = (FlutterError *)returnedResult; + XCTAssertEqualObjects(resultError.code, @"1"); + XCTAssertEqualObjects(resultError.details, @"domain"); + XCTAssertEqualObjects(resultError.message, @"description"); +} + +- (void)testShowPrivacyOptionsForm_success { + UMPRequestParameters *params = OCMClassMock([UMPRequestParameters class]); + FlutterMethodCall *methodCall = [FlutterMethodCall + methodCallWithMethodName:@"UserMessagingPlatform#showPrivacyOptionsForm" + arguments:@{@"params" : params}]; + id mockUmpConsentForm = OCMClassMock([UMPConsentForm class]); + OCMStub([mockUmpConsentForm + presentPrivacyOptionsFormFromViewController:[OCMArg any] + completionHandler:[OCMArg any]]) + .andDo(^(NSInvocation *invocation) { + __unsafe_unretained void (^completionHandler)(NSError *loadError); + [invocation getArgument:&completionHandler atIndex:3]; + completionHandler(nil); + }); + + [umpManager handleMethodCall:methodCall result:flutterResult]; + + XCTAssertTrue(resultInvoked); + XCTAssertNil(returnedResult); + OCMVerify([mockUmpConsentForm + presentPrivacyOptionsFormFromViewController:[OCMArg any] + completionHandler:[OCMArg any]]); +} + +- (void)testShowPrivacyOptionsForm_error { + NSDictionary *userInfo = @{NSLocalizedDescriptionKey : @"description"}; + NSError *error = [NSError errorWithDomain:@"domain" code:1 userInfo:userInfo]; + UMPRequestParameters *params = OCMClassMock([UMPRequestParameters class]); + FlutterMethodCall *methodCall = [FlutterMethodCall + methodCallWithMethodName:@"UserMessagingPlatform#showPrivacyOptionsForm" + arguments:@{@"params" : params}]; + id mockUmpConsentForm = OCMClassMock([UMPConsentForm class]); + OCMStub([mockUmpConsentForm + presentPrivacyOptionsFormFromViewController:[OCMArg any] + completionHandler:[OCMArg any]]) + .andDo(^(NSInvocation *invocation) { + __unsafe_unretained void (^completionHandler)(NSError *loadError); + [invocation getArgument:&completionHandler atIndex:3]; + completionHandler(error); + }); + + [umpManager handleMethodCall:methodCall result:flutterResult]; + + XCTAssertTrue(resultInvoked); + FlutterError *resultError = (FlutterError *)returnedResult; + XCTAssertEqualObjects(resultError.code, @"1"); + XCTAssertEqualObjects(resultError.details, @"domain"); + XCTAssertEqualObjects(resultError.message, @"description"); + OCMVerify([mockUmpConsentForm + presentPrivacyOptionsFormFromViewController:[OCMArg any] + completionHandler:[OCMArg any]]); +} + +- (void)testIsConsentFormAvailable_available { + FlutterMethodCall *methodCall = [FlutterMethodCall + methodCallWithMethodName:@"ConsentInformation#isConsentFormAvailable" + arguments:@{}]; + + OCMStub([mockUmpConsentInformation formStatus]) + .andReturn(UMPFormStatusAvailable); + + [umpManager handleMethodCall:methodCall result:flutterResult]; + + XCTAssertTrue(resultInvoked); + XCTAssertEqual(returnedResult, [[NSNumber alloc] initWithBool:YES]); +} + +- (void)testIsConsentFormAvailable_notAvailable { + FlutterMethodCall *methodCall = [FlutterMethodCall + methodCallWithMethodName:@"ConsentInformation#isConsentFormAvailable" + arguments:@{}]; + + OCMStub([mockUmpConsentInformation formStatus]) + .andReturn(UMPFormStatusUnavailable); + + [umpManager handleMethodCall:methodCall result:flutterResult]; + + XCTAssertTrue(resultInvoked); + XCTAssertEqual(returnedResult, [[NSNumber alloc] initWithBool:NO]); +} + +- (void)testShowConsentForm_success { + UIViewController *mockUIViewController = OCMClassMock(UIViewController.class); + FLTUserMessagingPlatformManager *partialMock = OCMPartialMock(umpManager); + OCMStub([partialMock rootController]).andReturn(mockUIViewController); + + UMPConsentForm *mockForm = OCMClassMock([UMPConsentForm class]); + FlutterMethodCall *methodCall = + [FlutterMethodCall methodCallWithMethodName:@"ConsentForm#show" + arguments:@{@"consentForm" : mockForm}]; + + OCMStub([mockForm presentFromViewController:[OCMArg any] + completionHandler:[OCMArg any]]) + .andDo(^(NSInvocation *invocation) { + void (^completionHandler)(NSError *error); + [invocation getArgument:&completionHandler atIndex:3]; + completionHandler(nil); + }); + ; + + [partialMock handleMethodCall:methodCall result:flutterResult]; + + XCTAssertTrue(resultInvoked); + XCTAssertNil(returnedResult); + OCMVerify([mockForm presentFromViewController:[OCMArg any] + completionHandler:[OCMArg any]]); +} + +- (void)testShowConsentForm_error { + UIViewController *mockUIViewController = OCMClassMock(UIViewController.class); + FLTUserMessagingPlatformManager *partialMock = OCMPartialMock(umpManager); + OCMStub([partialMock rootController]).andReturn(mockUIViewController); + + UMPConsentForm *mockForm = OCMClassMock([UMPConsentForm class]); + FlutterMethodCall *methodCall = + [FlutterMethodCall methodCallWithMethodName:@"ConsentForm#show" + arguments:@{@"consentForm" : mockForm}]; + + NSDictionary *userInfo = @{NSLocalizedDescriptionKey : @"description"}; + NSError *error = [NSError errorWithDomain:@"domain" code:1 userInfo:userInfo]; + OCMStub([mockForm presentFromViewController:[OCMArg any] + completionHandler:[OCMArg any]]) + .andDo(^(NSInvocation *invocation) { + void (^completionHandler)(NSError *error); + [invocation getArgument:&completionHandler atIndex:3]; + completionHandler(error); + }); + ; + + [partialMock handleMethodCall:methodCall result:flutterResult]; + + XCTAssertTrue(resultInvoked); + OCMVerify([mockForm presentFromViewController:[OCMArg any] + completionHandler:[OCMArg any]]); + FlutterError *resultError = (FlutterError *)returnedResult; + XCTAssertEqualObjects(resultError.code, @"1"); + XCTAssertEqualObjects(resultError.details, @"domain"); + XCTAssertEqualObjects(resultError.message, @"description"); +} + +@end diff --git a/mih_ui/android/build/ios/SourcePackages/google_mobile_ads-8.0.0/example/ios/RunnerTests/FLTUserMessagingPlatformReaderWriterTest.m b/mih_ui/android/build/ios/SourcePackages/google_mobile_ads-8.0.0/example/ios/RunnerTests/FLTUserMessagingPlatformReaderWriterTest.m new file mode 100644 index 00000000..351133c7 --- /dev/null +++ b/mih_ui/android/build/ios/SourcePackages/google_mobile_ads-8.0.0/example/ios/RunnerTests/FLTUserMessagingPlatformReaderWriterTest.m @@ -0,0 +1,115 @@ +// Copyright 2022 Google LLC +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// https://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +#import +#include +#import + +#import "FLTUserMessagingPlatformReaderWriter.h" + +@interface FLTUserMessagingPlatformReaderWriterTest : XCTestCase +@end + +@implementation FLTUserMessagingPlatformReaderWriterTest { + FlutterStandardMessageCodec *messageCodec; + FLTUserMessagingPlatformReaderWriter *readerWriter; +} + +- (void)setUp { + readerWriter = [[FLTUserMessagingPlatformReaderWriter alloc] init]; + messageCodec = + [FlutterStandardMessageCodec codecWithReaderWriter:readerWriter]; +} + +- (void)testRequestParams_default { + UMPRequestParameters *requestParameters = [[UMPRequestParameters alloc] init]; + NSData *encodedMessage = [messageCodec encode:requestParameters]; + + UMPRequestParameters *decoded = [messageCodec decode:encodedMessage]; + XCTAssertEqual(decoded.tagForUnderAgeOfConsent, + requestParameters.tagForUnderAgeOfConsent); + XCTAssertEqual(decoded.debugSettings, requestParameters.debugSettings); +} + +- (void)testRequestParams_withDebugSettingsTfuac { + UMPRequestParameters *requestParameters = [[UMPRequestParameters alloc] init]; + requestParameters.tagForUnderAgeOfConsent = YES; + requestParameters.debugSettings = [[UMPDebugSettings alloc] init]; + NSData *encodedMessage = [messageCodec encode:requestParameters]; + + UMPRequestParameters *decoded = [messageCodec decode:encodedMessage]; + XCTAssertEqual(decoded.tagForUnderAgeOfConsent, + requestParameters.tagForUnderAgeOfConsent); + XCTAssertEqual(decoded.debugSettings.geography, + requestParameters.debugSettings.geography); + XCTAssertEqual(decoded.debugSettings.testDeviceIdentifiers, + requestParameters.debugSettings.testDeviceIdentifiers); +} + +- (void)testConsentDebugSettings_default { + UMPDebugSettings *debugSettings = [[UMPDebugSettings alloc] init]; + NSData *encodedMessage = [messageCodec encode:debugSettings]; + + UMPDebugSettings *decoded = [messageCodec decode:encodedMessage]; + XCTAssertEqual(decoded.geography, debugSettings.geography); + XCTAssertEqual(decoded.testDeviceIdentifiers, + debugSettings.testDeviceIdentifiers); +} + +- (void)testConsentDebugSettings_geographyTestDeviceIdentifiers { + UMPDebugSettings *debugSettings = [[UMPDebugSettings alloc] init]; + debugSettings.geography = UMPDebugGeographyOther; + debugSettings.testDeviceIdentifiers = @[ @"id-1", @"id-2" ]; + NSData *encodedMessage = [messageCodec encode:debugSettings]; + + UMPDebugSettings *decoded = [messageCodec decode:encodedMessage]; + XCTAssertEqual(decoded.geography, debugSettings.geography); + XCTAssertEqualObjects(decoded.testDeviceIdentifiers, + debugSettings.testDeviceIdentifiers); +} + +- (void)testConsentFormTrackAndDispose { + UMPConsentForm *form1 = OCMClassMock([UMPConsentForm class]); + UMPConsentForm *form2 = OCMClassMock([UMPConsentForm class]); + UMPConsentForm *form3 = OCMClassMock([UMPConsentForm class]); + + [readerWriter trackConsentForm:form1]; + [readerWriter trackConsentForm:form2]; + [readerWriter trackConsentForm:form3]; + + NSData *encodedMessage1 = [messageCodec encode:form1]; + NSData *encodedMessage2 = [messageCodec encode:form2]; + NSData *encodedMessage3 = [messageCodec encode:form3]; + + UMPConsentForm *decoded1 = [messageCodec decode:encodedMessage1]; + UMPConsentForm *decoded2 = [messageCodec decode:encodedMessage2]; + UMPConsentForm *decoded3 = [messageCodec decode:encodedMessage3]; + + XCTAssertEqual(form1, decoded1); + XCTAssertEqual(form2, decoded2); + XCTAssertEqual(form3, decoded3); + + [readerWriter disposeConsentForm:form1]; + [readerWriter disposeConsentForm:form2]; + [readerWriter disposeConsentForm:form3]; + + decoded1 = [messageCodec decode:encodedMessage1]; + decoded2 = [messageCodec decode:encodedMessage2]; + decoded3 = [messageCodec decode:encodedMessage3]; + XCTAssertNil(decoded1); + XCTAssertNil(decoded2); + XCTAssertNil(decoded3); +} + +@end diff --git a/mih_ui/android/build/ios/SourcePackages/google_mobile_ads-8.0.0/example/ios/RunnerTests/NativeTemplates/FLTNativeTemplateColorTest.m b/mih_ui/android/build/ios/SourcePackages/google_mobile_ads-8.0.0/example/ios/RunnerTests/NativeTemplates/FLTNativeTemplateColorTest.m new file mode 100644 index 00000000..24ad94e7 --- /dev/null +++ b/mih_ui/android/build/ios/SourcePackages/google_mobile_ads-8.0.0/example/ios/RunnerTests/NativeTemplates/FLTNativeTemplateColorTest.m @@ -0,0 +1,41 @@ +// Copyright 2023 Google LLC +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// https://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +#import "FLTNativeTemplateColor.h" +#import +#import + +@interface FLTNativeTemplateColorTest : XCTestCase +@end + +@implementation FLTNativeTemplateColorTest + +- (void)testConvertToUiColor { + FLTNativeTemplateColor *color = [[FLTNativeTemplateColor alloc] + initWithAlpha:[[NSNumber alloc] initWithFloat:5.0f] + red:@10.0f + green:[[NSNumber alloc] initWithFloat:15.0f] + blue:[[NSNumber alloc] initWithFloat:20.0f]]; + CGFloat alpha; + CGFloat red; + CGFloat green; + CGFloat blue; + [color.uiColor getRed:&red green:&green blue:&blue alpha:&alpha]; + XCTAssertEqualWithAccuracy(alpha, 5.0f / 255.0f, FLT_EPSILON); + XCTAssertEqualWithAccuracy(red, 10.0f / 255.0f, FLT_EPSILON); + XCTAssertEqualWithAccuracy(green, 15.0f / 255.0f, FLT_EPSILON); + XCTAssertEqualWithAccuracy(blue, 20.0f / 255.0f, FLT_EPSILON); +} + +@end diff --git a/mih_ui/android/build/ios/SourcePackages/google_mobile_ads-8.0.0/example/ios/RunnerTests/NativeTemplates/FLTNativeTemplateFontStyleTest.m b/mih_ui/android/build/ios/SourcePackages/google_mobile_ads-8.0.0/example/ios/RunnerTests/NativeTemplates/FLTNativeTemplateFontStyleTest.m new file mode 100644 index 00000000..8657b4de --- /dev/null +++ b/mih_ui/android/build/ios/SourcePackages/google_mobile_ads-8.0.0/example/ios/RunnerTests/NativeTemplates/FLTNativeTemplateFontStyleTest.m @@ -0,0 +1,38 @@ +// Copyright 2023 Google LLC +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// https://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +#import "FLTNativeTemplateFontStyle.h" +#import + +@interface FLTNativeTemplateFontStyleTest : XCTestCase +@end + +@implementation FLTNativeTemplateFontStyleTest + +- (void)testConvertFromInt { + FLTNativeTemplateFontStyleWrapper *wrapper = + [[FLTNativeTemplateFontStyleWrapper alloc] initWithInt:0]; + XCTAssertEqual(wrapper.fontStyle, FLTNativeTemplateFontNormal); + + wrapper = [[FLTNativeTemplateFontStyleWrapper alloc] initWithInt:1]; + XCTAssertEqual(wrapper.fontStyle, FLTNativeTemplateFontBold); + + wrapper = [[FLTNativeTemplateFontStyleWrapper alloc] initWithInt:2]; + XCTAssertEqual(wrapper.fontStyle, FLTNativeTemplateFontItalic); + + wrapper = [[FLTNativeTemplateFontStyleWrapper alloc] initWithInt:3]; + XCTAssertEqual(wrapper.fontStyle, FLTNativeTemplateFontMonospace); +} + +@end diff --git a/mih_ui/android/build/ios/SourcePackages/google_mobile_ads-8.0.0/example/ios/RunnerTests/NativeTemplates/FLTNativeTemplateStyleTest.m b/mih_ui/android/build/ios/SourcePackages/google_mobile_ads-8.0.0/example/ios/RunnerTests/NativeTemplates/FLTNativeTemplateStyleTest.m new file mode 100644 index 00000000..208a21f3 --- /dev/null +++ b/mih_ui/android/build/ios/SourcePackages/google_mobile_ads-8.0.0/example/ios/RunnerTests/NativeTemplates/FLTNativeTemplateStyleTest.m @@ -0,0 +1,222 @@ +// Copyright 2023 Google LLC +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// https://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +#import +#import + +#import "FLTNativeTemplateColor.h" +#import "FLTNativeTemplateStyle.h" +#import "FLTNativeTemplateTextStyle.h" +#import "FLTNativeTemplateType.h" + +@interface FLTNativeTemplateStyleTest : XCTestCase +@end + +@implementation FLTNativeTemplateStyleTest + +- (void)testInitNilParameters { + FLTNativeTemplateType *templateType = + [[FLTNativeTemplateType alloc] initWithInt:0]; + + FLTNativeTemplateStyle *style = + [[FLTNativeTemplateStyle alloc] initWithTemplateType:templateType + mainBackgroundColor:nil + callToActionStyle:nil + primaryTextStyle:nil + secondaryTextStyle:nil + tertiaryTextStyle:nil + cornerRadius:nil]; + XCTAssertEqual(style.templateType, templateType); + XCTAssertNil(style.mainBackgroundColor); + XCTAssertNil(style.callToActionStyle); + XCTAssertNil(style.primaryTextStyle); + XCTAssertNil(style.secondaryTextStyle); + XCTAssertNil(style.tertiaryTextStyle); + XCTAssertNil(style.cornerRadius); +} + +- (void)testInit { + FLTNativeTemplateType *templateType = + [[FLTNativeTemplateType alloc] initWithInt:0]; + FLTNativeTemplateColor *bgColor = + OCMClassMock([FLTNativeTemplateColor class]); + UIColor *bgUIColor = OCMClassMock([UIColor class]); + OCMStub([bgColor uiColor]).andReturn(bgUIColor); + FLTNativeTemplateTextStyle *ctaStyle = + OCMClassMock([FLTNativeTemplateTextStyle class]); + FLTNativeTemplateTextStyle *primaryStyle = + OCMClassMock([FLTNativeTemplateTextStyle class]); + FLTNativeTemplateTextStyle *secondaryStyle = + OCMClassMock([FLTNativeTemplateTextStyle class]); + FLTNativeTemplateTextStyle *tertiaryStyle = + OCMClassMock([FLTNativeTemplateTextStyle class]); + + FLTNativeTemplateStyle *style = + [[FLTNativeTemplateStyle alloc] initWithTemplateType:templateType + mainBackgroundColor:bgColor + callToActionStyle:ctaStyle + primaryTextStyle:primaryStyle + secondaryTextStyle:secondaryStyle + tertiaryTextStyle:tertiaryStyle + cornerRadius:@14.0f]; + + XCTAssertEqual(style.templateType, templateType); + XCTAssertEqual(style.mainBackgroundColor, bgColor); + XCTAssertEqual(style.callToActionStyle, ctaStyle); + XCTAssertEqual(style.primaryTextStyle, primaryStyle); + XCTAssertEqual(style.secondaryTextStyle, secondaryStyle); + XCTAssertEqual(style.tertiaryTextStyle, tertiaryStyle); + XCTAssertEqual(style.cornerRadius, @14.0f); +} + +- (void)testGetDisplayedView { + FLTNativeTemplateType *templateType = + OCMClassMock([FLTNativeTemplateType class]); + GADTTemplateView *templateView = OCMClassMock([GADTTemplateView class]); + OCMStub([templateType templateView]).andReturn(templateView); + + FLTNativeTemplateColor *bgColor = + OCMClassMock([FLTNativeTemplateColor class]); + UIColor *bgUIColor = OCMClassMock([UIColor class]); + OCMStub([bgColor uiColor]).andReturn(bgUIColor); + + // Setup mocks for cta + FLTNativeTemplateTextStyle *ctaStyle = + OCMClassMock([FLTNativeTemplateTextStyle class]); + UIColor *ctaBackgroundUIColor = OCMClassMock([UIColor class]); + FLTNativeTemplateColor *ctaBackgroundColor = + OCMClassMock([FLTNativeTemplateColor class]); + OCMStub([ctaBackgroundColor uiColor]).andReturn(ctaBackgroundUIColor); + OCMStub([ctaStyle backgroundColor]).andReturn(ctaBackgroundColor); + + UIColor *ctaTextUIColor = OCMClassMock([UIColor class]); + FLTNativeTemplateColor *ctaTextcolor = + OCMClassMock([FLTNativeTemplateColor class]); + OCMStub([ctaTextcolor uiColor]).andReturn(ctaTextUIColor); + OCMStub([ctaStyle textColor]).andReturn(ctaTextcolor); + + UIFont *ctaFont = OCMClassMock([UIFont class]); + OCMStub([ctaStyle uiFont]).andReturn(ctaFont); + + // Setup mocks for primary + FLTNativeTemplateTextStyle *primaryStyle = + OCMClassMock([FLTNativeTemplateTextStyle class]); + UIColor *primaryBackgroundUIColor = OCMClassMock([UIColor class]); + FLTNativeTemplateColor *primaryBackgroundColor = + OCMClassMock([FLTNativeTemplateColor class]); + OCMStub([primaryBackgroundColor uiColor]).andReturn(primaryBackgroundUIColor); + OCMStub([primaryStyle backgroundColor]).andReturn(primaryBackgroundColor); + + UIColor *primaryTextUIColor = OCMClassMock([UIColor class]); + FLTNativeTemplateColor *primaryTextcolor = + OCMClassMock([FLTNativeTemplateColor class]); + OCMStub([primaryTextcolor uiColor]).andReturn(primaryTextUIColor); + OCMStub([primaryStyle textColor]).andReturn(primaryTextcolor); + + UIFont *primaryFont = OCMClassMock([UIFont class]); + OCMStub([primaryStyle uiFont]).andReturn(primaryFont); + + // Setup mocks for secondary + FLTNativeTemplateTextStyle *secondaryStyle = + OCMClassMock([FLTNativeTemplateTextStyle class]); + UIColor *secondaryBackgroundUIColor = OCMClassMock([UIColor class]); + FLTNativeTemplateColor *secondaryBackgroundColor = + OCMClassMock([FLTNativeTemplateColor class]); + OCMStub([secondaryBackgroundColor uiColor]) + .andReturn(secondaryBackgroundUIColor); + OCMStub([secondaryStyle backgroundColor]).andReturn(secondaryBackgroundColor); + + UIColor *secondaryTextUIColor = OCMClassMock([UIColor class]); + FLTNativeTemplateColor *secondaryTextcolor = + OCMClassMock([FLTNativeTemplateColor class]); + OCMStub([secondaryTextcolor uiColor]).andReturn(secondaryTextUIColor); + OCMStub([secondaryStyle textColor]).andReturn(secondaryTextcolor); + + UIFont *secondaryFont = OCMClassMock([UIFont class]); + OCMStub([secondaryStyle uiFont]).andReturn(secondaryFont); + + // Setup mocks for tertiary + FLTNativeTemplateTextStyle *tertiaryStyle = + OCMClassMock([FLTNativeTemplateTextStyle class]); + UIColor *tertiaryBackgroundUIColor = OCMClassMock([UIColor class]); + FLTNativeTemplateColor *tertiaryBackgroundColor = + OCMClassMock([FLTNativeTemplateColor class]); + OCMStub([tertiaryBackgroundColor uiColor]) + .andReturn(tertiaryBackgroundUIColor); + OCMStub([tertiaryStyle backgroundColor]).andReturn(tertiaryBackgroundColor); + + UIColor *tertiaryTextUIColor = OCMClassMock([UIColor class]); + FLTNativeTemplateColor *tertiaryTextcolor = + OCMClassMock([FLTNativeTemplateColor class]); + OCMStub([tertiaryTextcolor uiColor]).andReturn(tertiaryTextUIColor); + OCMStub([tertiaryStyle textColor]).andReturn(tertiaryTextcolor); + + UIFont *tertiaryFont = OCMClassMock([UIFont class]); + OCMStub([tertiaryStyle uiFont]).andReturn(tertiaryFont); + + FLTNativeTemplateStyle *style = + [[FLTNativeTemplateStyle alloc] initWithTemplateType:templateType + mainBackgroundColor:bgColor + callToActionStyle:ctaStyle + primaryTextStyle:primaryStyle + secondaryTextStyle:secondaryStyle + tertiaryTextStyle:tertiaryStyle + cornerRadius:@14.0f]; + + GADNativeAd *gadNativeAd = OCMClassMock([GADNativeAd class]); + + FLTNativeTemplateViewWrapper *templateViewWrapper = + [style getDisplayedView:gadNativeAd]; + XCTAssertEqual(templateViewWrapper.templateView, templateView); + OCMVerify([templateView setNativeAd:[OCMArg isEqual:gadNativeAd]]); + OCMVerify([templateView + setStyles:[OCMArg checkWithBlock:^BOOL(id obj) { + NSDictionary *styles = obj; + XCTAssertEqual(styles[GADTNativeTemplateStyleKeyCornerRadius], @14.0f); + + XCTAssertEqual( + styles[GADTNativeTemplateStyleKeyCallToActionBackgroundColor], + ctaBackgroundUIColor); + XCTAssertEqual(styles[GADTNativeTemplateStyleKeyCallToActionFontColor], + ctaTextUIColor); + XCTAssertEqual(styles[GADTNativeTemplateStyleKeyCallToActionFont], + ctaFont); + + XCTAssertEqual(styles[GADTNativeTemplateStyleKeyPrimaryBackgroundColor], + primaryBackgroundUIColor); + XCTAssertEqual(styles[GADTNativeTemplateStyleKeyPrimaryFontColor], + primaryTextUIColor); + XCTAssertEqual(styles[GADTNativeTemplateStyleKeyPrimaryFont], + primaryFont); + + XCTAssertEqual( + styles[GADTNativeTemplateStyleKeySecondaryBackgroundColor], + secondaryBackgroundUIColor); + XCTAssertEqual(styles[GADTNativeTemplateStyleKeySecondaryFontColor], + secondaryTextUIColor); + XCTAssertEqual(styles[GADTNativeTemplateStyleKeySecondaryFont], + secondaryFont); + + XCTAssertEqual( + styles[GADTNativeTemplateStyleKeyTertiaryBackgroundColor], + tertiaryBackgroundUIColor); + XCTAssertEqual(styles[GADTNativeTemplateStyleKeyTertiaryFontColor], + tertiaryTextUIColor); + XCTAssertEqual(styles[GADTNativeTemplateStyleKeyTertiaryFont], + tertiaryFont); + return YES; + }]]); +} + +@end diff --git a/mih_ui/android/build/ios/SourcePackages/google_mobile_ads-8.0.0/example/ios/RunnerTests/NativeTemplates/FLTNativeTemplateTextStyleTest.m b/mih_ui/android/build/ios/SourcePackages/google_mobile_ads-8.0.0/example/ios/RunnerTests/NativeTemplates/FLTNativeTemplateTextStyleTest.m new file mode 100644 index 00000000..1aff4db1 --- /dev/null +++ b/mih_ui/android/build/ios/SourcePackages/google_mobile_ads-8.0.0/example/ios/RunnerTests/NativeTemplates/FLTNativeTemplateTextStyleTest.m @@ -0,0 +1,148 @@ +// Copyright 2023 Google LLC +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// https://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +#import +#import + +#import "FLTNativeTemplateTextStyle.h" + +@interface FLTNativeTemplateTextStyleTest : XCTestCase +@end + +@implementation FLTNativeTemplateTextStyleTest + +- (void)testInitWithNilParameters { + FLTNativeTemplateTextStyle *textStyle = + [[FLTNativeTemplateTextStyle alloc] initWithTextColor:nil + backgroundColor:nil + fontStyle:nil + size:nil]; + XCTAssertNil(textStyle.uiFont); + XCTAssertNil(textStyle.backgroundColor); + XCTAssertNil(textStyle.textColor); + XCTAssertNil(textStyle.fontStyle); + XCTAssertNil(textStyle.size); +} + +- (void)testInitWithDefinedParams { + FLTNativeTemplateColor *textColor = + OCMClassMock([FLTNativeTemplateColor class]); + FLTNativeTemplateColor *backgroundColor = + OCMClassMock([FLTNativeTemplateColor class]); + FLTNativeTemplateFontStyleWrapper *fontStyleWrapper = + OCMClassMock([FLTNativeTemplateFontStyleWrapper class]); + OCMStub([fontStyleWrapper fontStyle]).andReturn(FLTNativeTemplateFontBold); + NSNumber *size = [[NSNumber alloc] initWithFloat:14.0f]; + + FLTNativeTemplateTextStyle *textStyle = + [[FLTNativeTemplateTextStyle alloc] initWithTextColor:textColor + backgroundColor:backgroundColor + fontStyle:fontStyleWrapper + size:size]; + + XCTAssertEqual(textStyle.backgroundColor, backgroundColor); + XCTAssertEqual(textStyle.textColor, textColor); + XCTAssertEqual(textStyle.fontStyle, fontStyleWrapper); + XCTAssertEqual(textStyle.size, size); + + UIFont *font = textStyle.uiFont; + UIFont *expectedFont = [UIFont boldSystemFontOfSize:14.0f]; + XCTAssertEqual(font.pointSize, expectedFont.pointSize); + XCTAssertEqual(font.fontName, expectedFont.fontName); + XCTAssertEqual(font.familyName, expectedFont.familyName); +} + +- (void)testUiFontWithMissingSize { + FLTNativeTemplateColor *textColor = + OCMClassMock([FLTNativeTemplateColor class]); + FLTNativeTemplateColor *backgroundColor = + OCMClassMock([FLTNativeTemplateColor class]); + FLTNativeTemplateFontStyleWrapper *fontStyleWrapper = + OCMClassMock([FLTNativeTemplateFontStyleWrapper class]); + OCMStub([fontStyleWrapper fontStyle]).andReturn(FLTNativeTemplateFontItalic); + + FLTNativeTemplateTextStyle *textStyle = + [[FLTNativeTemplateTextStyle alloc] initWithTextColor:textColor + backgroundColor:backgroundColor + fontStyle:fontStyleWrapper + size:nil]; + + XCTAssertEqual(textStyle.backgroundColor, backgroundColor); + XCTAssertEqual(textStyle.textColor, textColor); + XCTAssertEqual(textStyle.fontStyle, fontStyleWrapper); + XCTAssertNil(textStyle.size); + + UIFont *font = textStyle.uiFont; + // System font size is used when size is not defined + UIFont *expectedFont = [UIFont italicSystemFontOfSize:UIFont.systemFontSize]; + XCTAssertEqual(font.pointSize, expectedFont.pointSize); + XCTAssertEqual(font.fontName, expectedFont.fontName); + XCTAssertEqual(font.familyName, expectedFont.familyName); +} + +- (void)testUiFontWithMissingFontStyle { + FLTNativeTemplateColor *textColor = + OCMClassMock([FLTNativeTemplateColor class]); + FLTNativeTemplateColor *backgroundColor = + OCMClassMock([FLTNativeTemplateColor class]); + NSNumber *size = [[NSNumber alloc] initWithFloat:14.0f]; + FLTNativeTemplateTextStyle *textStyle = + [[FLTNativeTemplateTextStyle alloc] initWithTextColor:textColor + backgroundColor:backgroundColor + fontStyle:nil + size:size]; + + XCTAssertEqual(textStyle.backgroundColor, backgroundColor); + XCTAssertEqual(textStyle.textColor, textColor); + XCTAssertNil(textStyle.fontStyle); + XCTAssertEqual(textStyle.size, size); + + UIFont *font = textStyle.uiFont; + // Default system font type is used when fontStyle is not defined + UIFont *expectedFont = [UIFont systemFontOfSize:14.0f]; + XCTAssertEqual(font.pointSize, expectedFont.pointSize); + XCTAssertEqual(font.fontName, expectedFont.fontName); + XCTAssertEqual(font.familyName, expectedFont.familyName); +} + +- (void)testUiFontWithUnknownFontStyle { + FLTNativeTemplateColor *textColor = + OCMClassMock([FLTNativeTemplateColor class]); + FLTNativeTemplateColor *backgroundColor = + OCMClassMock([FLTNativeTemplateColor class]); + NSNumber *size = [[NSNumber alloc] initWithFloat:14.0f]; + FLTNativeTemplateFontStyleWrapper *fontStyleWrapper = + OCMClassMock([FLTNativeTemplateFontStyleWrapper class]); + OCMStub([fontStyleWrapper fontStyle]).andReturn(-1); + + FLTNativeTemplateTextStyle *textStyle = + [[FLTNativeTemplateTextStyle alloc] initWithTextColor:textColor + backgroundColor:backgroundColor + fontStyle:fontStyleWrapper + size:size]; + + XCTAssertEqual(textStyle.backgroundColor, backgroundColor); + XCTAssertEqual(textStyle.textColor, textColor); + XCTAssertEqual(textStyle.fontStyle, fontStyleWrapper); + XCTAssertEqual(textStyle.size, size); + + UIFont *font = textStyle.uiFont; + // Default system font type is used when fontStyle is unknown + UIFont *expectedFont = [UIFont systemFontOfSize:14.0f]; + XCTAssertEqual(font.pointSize, expectedFont.pointSize); + XCTAssertEqual(font.fontName, expectedFont.fontName); + XCTAssertEqual(font.familyName, expectedFont.familyName); +} + +@end diff --git a/mih_ui/android/build/ios/SourcePackages/google_mobile_ads-8.0.0/example/ios/RunnerTests/NativeTemplates/FLTNativeTemplateTypeTest.m b/mih_ui/android/build/ios/SourcePackages/google_mobile_ads-8.0.0/example/ios/RunnerTests/NativeTemplates/FLTNativeTemplateTypeTest.m new file mode 100644 index 00000000..94b32771 --- /dev/null +++ b/mih_ui/android/build/ios/SourcePackages/google_mobile_ads-8.0.0/example/ios/RunnerTests/NativeTemplates/FLTNativeTemplateTypeTest.m @@ -0,0 +1,42 @@ +// Copyright 2023 Google LLC +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// https://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +#import "FLTNativeTemplateType.h" +#import + +@interface FLTNativeTemplateTypeTest : XCTestCase +@end + +@implementation FLTNativeTemplateTypeTest + +- (void)testXibName { + FLTNativeTemplateType *templateTypeSmall = + [[FLTNativeTemplateType alloc] initWithInt:0]; + XCTAssertEqualObjects(templateTypeSmall.xibName, @"GADTSmallTemplateView"); + + FLTNativeTemplateType *templateTypeMedium = + [[FLTNativeTemplateType alloc] initWithInt:1]; + XCTAssertEqualObjects(templateTypeMedium.xibName, @"GADTMediumTemplateView"); + + // Unknown templates default to medium + FLTNativeTemplateType *templateTypeUnknown = + [[FLTNativeTemplateType alloc] initWithInt:-1]; + XCTAssertEqualObjects(templateTypeUnknown.xibName, @"GADTMediumTemplateView"); + + FLTNativeTemplateType *templateType = + [[FLTNativeTemplateType alloc] initWithInt:2]; + XCTAssertEqualObjects(templateType.xibName, @"GADTMediumTemplateView"); +} + +@end diff --git a/mih_ui/android/build/ios/SourcePackages/google_mobile_ads-8.0.0/example/ios/google_mobile_ads_exampleTests/Info.plist b/mih_ui/android/build/ios/SourcePackages/google_mobile_ads-8.0.0/example/ios/google_mobile_ads_exampleTests/Info.plist new file mode 100644 index 00000000..64d65ca4 --- /dev/null +++ b/mih_ui/android/build/ios/SourcePackages/google_mobile_ads-8.0.0/example/ios/google_mobile_ads_exampleTests/Info.plist @@ -0,0 +1,22 @@ + + + + + CFBundleDevelopmentRegion + $(DEVELOPMENT_LANGUAGE) + CFBundleExecutable + $(EXECUTABLE_NAME) + CFBundleIdentifier + $(PRODUCT_BUNDLE_IDENTIFIER) + CFBundleInfoDictionaryVersion + 6.0 + CFBundleName + $(PRODUCT_NAME) + CFBundlePackageType + $(PRODUCT_BUNDLE_PACKAGE_TYPE) + CFBundleShortVersionString + 1.0 + CFBundleVersion + 1 + + diff --git a/mih_ui/android/build/ios/SourcePackages/google_mobile_ads-8.0.0/example/lib/anchored_adaptive_example.dart b/mih_ui/android/build/ios/SourcePackages/google_mobile_ads-8.0.0/example/lib/anchored_adaptive_example.dart new file mode 100644 index 00000000..02719666 --- /dev/null +++ b/mih_ui/android/build/ios/SourcePackages/google_mobile_ads-8.0.0/example/lib/anchored_adaptive_example.dart @@ -0,0 +1,146 @@ +// Copyright 2021 Google LLC +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// https://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// ignore_for_file: public_member_api_docs + +import 'dart:io'; + +import 'package:flutter/material.dart'; +import 'package:google_mobile_ads/google_mobile_ads.dart'; +import 'constants.dart'; + +/// This example demonstrates anchored adaptive banner ads. +/// +/// Loads an anchored adaptive banner ad and displays it at the bottom of the +/// screen. This also handles loading a new ad on orientation change. +class AnchoredAdaptiveExample extends StatefulWidget { + @override + _AnchoredAdaptiveExampleState createState() => + _AnchoredAdaptiveExampleState(); +} + +class _AnchoredAdaptiveExampleState extends State { + BannerAd? _anchoredAdaptiveAd; + bool _isLoaded = false; + late Orientation _currentOrientation; + + @override + void didChangeDependencies() { + super.didChangeDependencies(); + _currentOrientation = MediaQuery.of(context).orientation; + _loadAd(); + } + + /// Load another ad, disposing of the current ad if there is one. + Future _loadAd() async { + await _anchoredAdaptiveAd?.dispose(); + setState(() { + _anchoredAdaptiveAd = null; + _isLoaded = false; + }); + + final AnchoredAdaptiveBannerAdSize? size = + await AdSize.getLargeAnchoredAdaptiveBannerAdSize( + MediaQuery.of(context).size.width.truncate(), + ); + + if (size == null) { + print('Unable to get height of anchored banner.'); + return; + } + + _anchoredAdaptiveAd = BannerAd( + adUnitId: Platform.isAndroid + ? 'ca-app-pub-3940256099942544/9214589741' + : 'ca-app-pub-3940256099942544/2435281174', + size: size, + request: AdRequest(), + listener: BannerAdListener( + onAdLoaded: (Ad ad) { + print('$ad loaded: ${ad.responseInfo}'); + setState(() { + // When the ad is loaded, get the ad size and use it to set + // the height of the ad container. + _anchoredAdaptiveAd = ad as BannerAd; + _isLoaded = true; + }); + }, + onAdFailedToLoad: (Ad ad, LoadAdError error) { + print('Anchored adaptive banner failedToLoad: $error'); + ad.dispose(); + }, + ), + ); + return _anchoredAdaptiveAd!.load(); + } + + /// Gets a widget containing the ad, if one is loaded. + /// + /// Returns an empty container if no ad is loaded, or the orientation + /// has changed. Also loads a new ad if the orientation changes. + Widget _getAdWidget() { + return OrientationBuilder( + builder: (context, orientation) { + if (_currentOrientation == orientation && + _anchoredAdaptiveAd != null && + _isLoaded) { + return Container( + color: Colors.green, + width: _anchoredAdaptiveAd!.size.width.toDouble(), + height: _anchoredAdaptiveAd!.size.height.toDouble(), + child: AdWidget(ad: _anchoredAdaptiveAd!), + ); + } + // Reload the ad if the orientation changes. + if (_currentOrientation != orientation) { + _currentOrientation = orientation; + _loadAd(); + } + return Container(); + }, + ); + } + + @override + Widget build(BuildContext context) => Scaffold( + appBar: AppBar(title: Text('Anchored adaptive banner example')), + body: Center( + child: Stack( + alignment: AlignmentDirectional.bottomCenter, + children: [ + ListView.separated( + padding: const EdgeInsets.symmetric(horizontal: 16.0), + itemBuilder: (context, index) { + return Text( + Constants.placeholderText, + style: TextStyle(fontSize: 24), + ); + }, + separatorBuilder: (context, index) { + return Container(height: 40); + }, + itemCount: 5, + ), + _getAdWidget(), + ], + ), + ), + ); + + @override + void dispose() { + super.dispose(); + _anchoredAdaptiveAd?.dispose(); + } +} diff --git a/mih_ui/android/build/ios/SourcePackages/google_mobile_ads-8.0.0/example/lib/constants.dart b/mih_ui/android/build/ios/SourcePackages/google_mobile_ads-8.0.0/example/lib/constants.dart new file mode 100644 index 00000000..b71613c4 --- /dev/null +++ b/mih_ui/android/build/ios/SourcePackages/google_mobile_ads-8.0.0/example/lib/constants.dart @@ -0,0 +1,30 @@ +// Copyright 2021 Google LLC +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// https://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// ignore_for_file: public_member_api_docs + +/// Constants used in the example app. +class Constants { + /// Placeholder text. + static const String placeholderText = + 'Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod' + ' tempor incididunt ut labore et dolore magna aliqua. Faucibus purus in' + ' massa tempor. Quis enim lobortis scelerisque fermentum dui faucibus' + ' in. Nibh praesent tristique magna sit amet purus gravida quis.' + ' Magna sit amet purus gravida quis blandit turpis cursus in. Sed' + ' adipiscing diam donec adipiscing tristique. Urna porttitor rhoncus' + ' dolor purus non enim praesent. Pellentesque habitant morbi tristique' + ' senectus et netus. Risus ultricies tristique nulla aliquet enim tortor' + ' at.'; +} diff --git a/mih_ui/android/build/ios/SourcePackages/google_mobile_ads-8.0.0/example/lib/fluid_example.dart b/mih_ui/android/build/ios/SourcePackages/google_mobile_ads-8.0.0/example/lib/fluid_example.dart new file mode 100644 index 00000000..361ffee9 --- /dev/null +++ b/mih_ui/android/build/ios/SourcePackages/google_mobile_ads-8.0.0/example/lib/fluid_example.dart @@ -0,0 +1,102 @@ +// Copyright 2021 Google LLC +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// https://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// ignore_for_file: public_member_api_docs + +import 'package:flutter/material.dart'; +import 'package:google_mobile_ads/google_mobile_ads.dart'; +import 'constants.dart'; + +/// This example demonstrates fluid ads. +class FluidExample extends StatefulWidget { + @override + _FluidExampleExampleState createState() => _FluidExampleExampleState(); +} + +class _FluidExampleExampleState extends State { + FluidAdManagerBannerAd? _fluidAd; + double _width = 200.0; + + @override + Widget build(BuildContext context) => Scaffold( + appBar: AppBar(title: Text('Fluid example')), + body: Center( + child: Padding( + padding: const EdgeInsets.symmetric(horizontal: 16.0), + child: ListView.separated( + itemCount: 3, + separatorBuilder: (BuildContext context, int index) { + return Container(height: 40); + }, + itemBuilder: (BuildContext context, int index) { + if (index == 1) { + return Align( + alignment: Alignment.center, + child: FluidAdWidget(width: _width, ad: _fluidAd!), + ); + } else if (index == 2) { + return ElevatedButton( + onPressed: () { + double newWidth; + if (_width == 200.0) { + newWidth = 100.0; + } else if (_width == 100.0) { + newWidth = 150.0; + } else { + newWidth = 200.0; + } + setState(() { + _width = newWidth; + }); + }, + child: Text('Change size'), + ); + } + return Text( + Constants.placeholderText, + style: TextStyle(fontSize: 24), + ); + }, + ), + ), + ), + ); + + @override + void didChangeDependencies() { + super.didChangeDependencies(); + // Create the ad objects and load ads. + _fluidAd = FluidAdManagerBannerAd( + adUnitId: '/6499/example/APIDemo/Fluid', + request: AdManagerAdRequest(nonPersonalizedAds: true), + listener: AdManagerBannerAdListener( + onAdLoaded: (Ad ad) { + print('$_fluidAd loaded.'); + }, + onAdFailedToLoad: (Ad ad, LoadAdError error) { + print('$_fluidAd failedToLoad: $error'); + ad.dispose(); + }, + onAdOpened: (Ad ad) => print('$_fluidAd onAdOpened.'), + onAdClosed: (Ad ad) => print('$_fluidAd onAdClosed.'), + ), + )..load(); + } + + @override + void dispose() { + super.dispose(); + _fluidAd?.dispose(); + } +} diff --git a/mih_ui/android/build/ios/SourcePackages/google_mobile_ads-8.0.0/example/lib/inline_adaptive_example.dart b/mih_ui/android/build/ios/SourcePackages/google_mobile_ads-8.0.0/example/lib/inline_adaptive_example.dart new file mode 100644 index 00000000..0052508f --- /dev/null +++ b/mih_ui/android/build/ios/SourcePackages/google_mobile_ads-8.0.0/example/lib/inline_adaptive_example.dart @@ -0,0 +1,154 @@ +// Copyright 2021 Google LLC +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// https://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// ignore_for_file: public_member_api_docs + +import 'dart:io'; + +import 'package:flutter/material.dart'; +import 'package:google_mobile_ads/google_mobile_ads.dart'; +import 'constants.dart'; + +/// This example demonstrates inline adaptive banner ads. +/// +/// Loads and shows an inline adaptive banner ad in a scrolling view, +/// and reloads the ad when the orientation changes. +class InlineAdaptiveExample extends StatefulWidget { + @override + _InlineAdaptiveExampleState createState() => _InlineAdaptiveExampleState(); +} + +class _InlineAdaptiveExampleState extends State { + static const _insets = 16.0; + AdManagerBannerAd? _inlineAdaptiveAd; + bool _isLoaded = false; + AdSize? _adSize; + late Orientation _currentOrientation; + + double get _adWidth => MediaQuery.of(context).size.width - (2 * _insets); + + @override + void didChangeDependencies() { + super.didChangeDependencies(); + _currentOrientation = MediaQuery.of(context).orientation; + _loadAd(); + } + + void _loadAd() async { + await _inlineAdaptiveAd?.dispose(); + setState(() { + _inlineAdaptiveAd = null; + _isLoaded = false; + }); + + // Get an inline adaptive size for the current orientation. + AdSize size = AdSize.getCurrentOrientationInlineAdaptiveBannerAdSize( + _adWidth.truncate(), + ); + + _inlineAdaptiveAd = AdManagerBannerAd( + adUnitId: Platform.isAndroid + ? '/21775744923/example/banner' + : '/21775744923/example/adaptive-banner', + sizes: [size], + request: AdManagerAdRequest(), + listener: AdManagerBannerAdListener( + onAdLoaded: (Ad ad) async { + print('Inline adaptive banner loaded: ${ad.responseInfo}'); + + // After the ad is loaded, get the platform ad size and use it to + // update the height of the container. This is necessary because the + // height can change after the ad is loaded. + AdManagerBannerAd bannerAd = (ad as AdManagerBannerAd); + final AdSize? size = await bannerAd.getPlatformAdSize(); + if (size == null) { + print('Error: getPlatformAdSize() returned null for $bannerAd'); + return; + } + + setState(() { + _inlineAdaptiveAd = bannerAd; + _isLoaded = true; + _adSize = size; + }); + }, + onAdFailedToLoad: (Ad ad, LoadAdError error) { + print('Inline adaptive banner failedToLoad: $error'); + ad.dispose(); + }, + ), + ); + await _inlineAdaptiveAd!.load(); + } + + /// Gets a widget containing the ad, if one is loaded. + /// + /// Returns an empty container if no ad is loaded, or the orientation + /// has changed. Also loads a new ad if the orientation changes. + Widget _getAdWidget() { + return OrientationBuilder( + builder: (context, orientation) { + if (_currentOrientation == orientation && + _inlineAdaptiveAd != null && + _isLoaded && + _adSize != null) { + return Align( + child: Container( + width: _adWidth, + height: _adSize!.height.toDouble(), + child: AdWidget(ad: _inlineAdaptiveAd!), + ), + ); + } + // Reload the ad if the orientation changes. + if (_currentOrientation != orientation) { + _currentOrientation = orientation; + _loadAd(); + } + return Container(); + }, + ); + } + + @override + Widget build(BuildContext context) => Scaffold( + appBar: AppBar(title: Text('Inline adaptive banner example')), + body: Center( + child: Padding( + padding: const EdgeInsets.symmetric(horizontal: _insets), + child: ListView.separated( + itemCount: 3, + separatorBuilder: (BuildContext context, int index) { + return Container(height: 40); + }, + itemBuilder: (BuildContext context, int index) { + if (index == 1) { + return _getAdWidget(); + } + return Text( + Constants.placeholderText, + style: TextStyle(fontSize: 24), + ); + }, + ), + ), + ), + ); + + @override + void dispose() { + super.dispose(); + _inlineAdaptiveAd?.dispose(); + } +} diff --git a/mih_ui/android/build/ios/SourcePackages/google_mobile_ads-8.0.0/example/lib/main.dart b/mih_ui/android/build/ios/SourcePackages/google_mobile_ads-8.0.0/example/lib/main.dart new file mode 100644 index 00000000..8ee75cb5 --- /dev/null +++ b/mih_ui/android/build/ios/SourcePackages/google_mobile_ads-8.0.0/example/lib/main.dart @@ -0,0 +1,388 @@ +// Copyright 2021 Google LLC +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// https://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// ignore_for_file: public_member_api_docs + +import 'dart:io' show Platform; + +import 'package:flutter/material.dart'; +import 'package:google_mobile_ads/google_mobile_ads.dart'; +import 'dart:developer'; + +import 'anchored_adaptive_example.dart'; +import 'fluid_example.dart'; +import 'inline_adaptive_example.dart'; +import 'multi_adaptive_inline_with_recycle_example.dart'; +import 'native_template_example.dart'; +import 'reusable_inline_example.dart'; +import 'webview_example.dart'; + +void main() { + WidgetsFlutterBinding.ensureInitialized(); + MobileAds.instance.initialize(); + runApp(MyApp()); +} + +// You can also test with your own ad unit IDs by registering your device as a +// test device. Check the logs for your device's ID value. +const String testDevice = 'YOUR_DEVICE_ID'; +const int maxFailedLoadAttempts = 3; + +class MyApp extends StatefulWidget { + @override + _MyAppState createState() => _MyAppState(); +} + +class _MyAppState extends State { + static final AdRequest request = AdRequest( + keywords: ['foo', 'bar'], + contentUrl: 'http://foo.com/bar.html', + nonPersonalizedAds: true, + ); + + static const interstitialButtonText = 'InterstitialAd'; + static const rewardedButtonText = 'RewardedAd'; + static const rewardedInterstitialButtonText = 'RewardedInterstitialAd'; + static const fluidButtonText = 'Fluid'; + static const inlineAdaptiveButtonText = 'Inline adaptive'; + static const mulipleInlineAdaptiveWithRecycleButtonText = + 'Multiple inline adaptive with recycle'; + static const anchoredAdaptiveButtonText = 'Anchored adaptive'; + static const nativeTemplateButtonText = 'Native template'; + static const webviewExampleButtonText = 'Register WebView'; + static const adInspectorButtonText = 'Ad Inspector'; + + InterstitialAd? _interstitialAd; + int _numInterstitialLoadAttempts = 0; + + RewardedAd? _rewardedAd; + int _numRewardedLoadAttempts = 0; + + RewardedInterstitialAd? _rewardedInterstitialAd; + int _numRewardedInterstitialLoadAttempts = 0; + + @override + void initState() { + super.initState(); + MobileAds.instance.updateRequestConfiguration( + RequestConfiguration(testDeviceIds: [testDevice]), + ); + _createInterstitialAd(); + _createRewardedAd(); + _createRewardedInterstitialAd(); + } + + void _createInterstitialAd() { + InterstitialAd.load( + adUnitId: Platform.isAndroid + ? 'ca-app-pub-3940256099942544/1033173712' + : 'ca-app-pub-3940256099942544/4411468910', + request: request, + adLoadCallback: InterstitialAdLoadCallback( + onAdLoaded: (InterstitialAd ad) { + print('$ad loaded'); + _interstitialAd = ad; + _numInterstitialLoadAttempts = 0; + _interstitialAd!.setImmersiveMode(true); + }, + onAdFailedToLoad: (LoadAdError error) { + print('InterstitialAd failed to load: $error.'); + _numInterstitialLoadAttempts += 1; + _interstitialAd = null; + if (_numInterstitialLoadAttempts < maxFailedLoadAttempts) { + _createInterstitialAd(); + } + }, + ), + ); + } + + void _showInterstitialAd() { + if (_interstitialAd == null) { + print('Warning: attempt to show interstitial before loaded.'); + return; + } + _interstitialAd!.fullScreenContentCallback = FullScreenContentCallback( + onAdShowedFullScreenContent: (InterstitialAd ad) => + print('ad onAdShowedFullScreenContent.'), + onAdDismissedFullScreenContent: (InterstitialAd ad) { + print('$ad onAdDismissedFullScreenContent.'); + ad.dispose(); + _createInterstitialAd(); + }, + onAdFailedToShowFullScreenContent: (InterstitialAd ad, AdError error) { + print('$ad onAdFailedToShowFullScreenContent: $error'); + ad.dispose(); + _createInterstitialAd(); + }, + ); + _interstitialAd!.show(); + _interstitialAd = null; + } + + void _createRewardedAd() { + RewardedAd.load( + adUnitId: Platform.isAndroid + ? 'ca-app-pub-3940256099942544/5224354917' + : 'ca-app-pub-3940256099942544/1712485313', + request: request, + rewardedAdLoadCallback: RewardedAdLoadCallback( + onAdLoaded: (RewardedAd ad) { + print('$ad loaded.'); + _rewardedAd = ad; + _numRewardedLoadAttempts = 0; + }, + onAdFailedToLoad: (LoadAdError error) { + print('RewardedAd failed to load: $error'); + _rewardedAd = null; + _numRewardedLoadAttempts += 1; + if (_numRewardedLoadAttempts < maxFailedLoadAttempts) { + _createRewardedAd(); + } + }, + ), + ); + } + + void _showRewardedAd() { + if (_rewardedAd == null) { + print('Warning: attempt to show rewarded before loaded.'); + return; + } + _rewardedAd!.fullScreenContentCallback = FullScreenContentCallback( + onAdShowedFullScreenContent: (RewardedAd ad) => + print('ad onAdShowedFullScreenContent.'), + onAdDismissedFullScreenContent: (RewardedAd ad) { + print('$ad onAdDismissedFullScreenContent.'); + ad.dispose(); + _createRewardedAd(); + }, + onAdFailedToShowFullScreenContent: (RewardedAd ad, AdError error) { + print('$ad onAdFailedToShowFullScreenContent: $error'); + ad.dispose(); + _createRewardedAd(); + }, + ); + + _rewardedAd!.setImmersiveMode(true); + _rewardedAd!.show( + onUserEarnedReward: (AdWithoutView ad, RewardItem reward) { + print('$ad with reward $RewardItem(${reward.amount}, ${reward.type})'); + }, + ); + _rewardedAd = null; + } + + void _createRewardedInterstitialAd() { + RewardedInterstitialAd.load( + adUnitId: Platform.isAndroid + ? 'ca-app-pub-3940256099942544/5354046379' + : 'ca-app-pub-3940256099942544/6978759866', + request: request, + rewardedInterstitialAdLoadCallback: RewardedInterstitialAdLoadCallback( + onAdLoaded: (RewardedInterstitialAd ad) { + print('$ad loaded.'); + _rewardedInterstitialAd = ad; + _numRewardedInterstitialLoadAttempts = 0; + }, + onAdFailedToLoad: (LoadAdError error) { + print('RewardedInterstitialAd failed to load: $error'); + _rewardedInterstitialAd = null; + _numRewardedInterstitialLoadAttempts += 1; + if (_numRewardedInterstitialLoadAttempts < maxFailedLoadAttempts) { + _createRewardedInterstitialAd(); + } + }, + ), + ); + } + + void _showRewardedInterstitialAd() { + if (_rewardedInterstitialAd == null) { + print('Warning: attempt to show rewarded interstitial before loaded.'); + return; + } + _rewardedInterstitialAd!.fullScreenContentCallback = + FullScreenContentCallback( + onAdShowedFullScreenContent: (RewardedInterstitialAd ad) => + print('$ad onAdShowedFullScreenContent.'), + onAdDismissedFullScreenContent: (RewardedInterstitialAd ad) { + print('$ad onAdDismissedFullScreenContent.'); + ad.dispose(); + _createRewardedInterstitialAd(); + }, + onAdFailedToShowFullScreenContent: + (RewardedInterstitialAd ad, AdError error) { + print('$ad onAdFailedToShowFullScreenContent: $error'); + ad.dispose(); + _createRewardedInterstitialAd(); + }, + ); + + _rewardedInterstitialAd!.setImmersiveMode(true); + _rewardedInterstitialAd!.show( + onUserEarnedReward: (AdWithoutView ad, RewardItem reward) { + print('$ad with reward $RewardItem(${reward.amount}, ${reward.type})'); + }, + ); + _rewardedInterstitialAd = null; + } + + @override + void dispose() { + super.dispose(); + _interstitialAd?.dispose(); + _rewardedAd?.dispose(); + _rewardedInterstitialAd?.dispose(); + } + + @override + Widget build(BuildContext context) { + return MaterialApp( + home: Builder( + builder: (BuildContext context) { + return Scaffold( + appBar: AppBar( + title: const Text('AdMob Plugin example app'), + actions: [ + PopupMenuButton( + onSelected: (String result) { + switch (result) { + case interstitialButtonText: + _showInterstitialAd(); + break; + case rewardedButtonText: + _showRewardedAd(); + break; + case rewardedInterstitialButtonText: + _showRewardedInterstitialAd(); + break; + case fluidButtonText: + Navigator.push( + context, + MaterialPageRoute( + builder: (context) => FluidExample(), + ), + ); + break; + case inlineAdaptiveButtonText: + Navigator.push( + context, + MaterialPageRoute( + builder: (context) => InlineAdaptiveExample(), + ), + ); + break; + case mulipleInlineAdaptiveWithRecycleButtonText: + Navigator.push( + context, + MaterialPageRoute( + builder: (context) => + MultiInlineAdaptiveWithRecycleExample(), + ), + ); + break; + case anchoredAdaptiveButtonText: + Navigator.push( + context, + MaterialPageRoute( + builder: (context) => AnchoredAdaptiveExample(), + ), + ); + break; + case nativeTemplateButtonText: + Navigator.push( + context, + MaterialPageRoute( + builder: (context) => NativeTemplateExample(), + ), + ); + break; + case webviewExampleButtonText: + Navigator.push( + context, + MaterialPageRoute( + builder: (context) => WebViewExample(), + ), + ); + break; + case adInspectorButtonText: + MobileAds.instance.openAdInspector( + (error) => log( + 'Ad Inspector ' + + (error == null + ? 'opened.' + : 'error: ' + (error.message ?? '')), + ), + ); + break; + default: + throw AssertionError('unexpected button: $result'); + } + }, + itemBuilder: (BuildContext context) => + >[ + PopupMenuItem( + value: interstitialButtonText, + child: Text(interstitialButtonText), + ), + PopupMenuItem( + value: rewardedButtonText, + child: Text(rewardedButtonText), + ), + PopupMenuItem( + value: rewardedInterstitialButtonText, + child: Text(rewardedInterstitialButtonText), + ), + PopupMenuItem( + value: fluidButtonText, + child: Text(fluidButtonText), + ), + PopupMenuItem( + value: inlineAdaptiveButtonText, + child: Text(inlineAdaptiveButtonText), + ), + PopupMenuItem( + value: mulipleInlineAdaptiveWithRecycleButtonText, + child: Text( + mulipleInlineAdaptiveWithRecycleButtonText, + ), + ), + PopupMenuItem( + value: anchoredAdaptiveButtonText, + child: Text(anchoredAdaptiveButtonText), + ), + PopupMenuItem( + value: nativeTemplateButtonText, + child: Text(nativeTemplateButtonText), + ), + PopupMenuItem( + value: webviewExampleButtonText, + child: Text(webviewExampleButtonText), + ), + PopupMenuItem( + value: adInspectorButtonText, + child: Text(adInspectorButtonText), + ), + ], + ), + ], + ), + body: SafeArea(child: ReusableInlineExample()), + ); + }, + ), + ); + } +} diff --git a/mih_ui/android/build/ios/SourcePackages/google_mobile_ads-8.0.0/example/lib/multi_adaptive_inline_with_recycle_example.dart b/mih_ui/android/build/ios/SourcePackages/google_mobile_ads-8.0.0/example/lib/multi_adaptive_inline_with_recycle_example.dart new file mode 100644 index 00000000..f1c310c2 --- /dev/null +++ b/mih_ui/android/build/ios/SourcePackages/google_mobile_ads-8.0.0/example/lib/multi_adaptive_inline_with_recycle_example.dart @@ -0,0 +1,148 @@ +import 'dart:io'; +import 'package:flutter/material.dart'; +import 'package:collection/collection.dart'; +import 'package:google_mobile_ads/google_mobile_ads.dart'; + +/// This example demonstrates inline adaptive ads in a list view, where banners +/// are recycle to improve performance. +class MultiInlineAdaptiveWithRecycleExample extends StatefulWidget { + @override + _MultiInlineAdaptiveWithRecycleExampleState createState() => + _MultiInlineAdaptiveWithRecycleExampleState(); +} + +class _MultiInlineAdaptiveWithRecycleExampleState + extends State { + // A list of all the banners created. + final List _banners = []; + // Keep track of sizes of the banners (since they can be different sizes). + final Map _bannerSizes = {}; + // A set of all failed banners to retry. + final Set _failedBanners = {}; + + // The maximum number of banners to create. + static const int _cacheSize = 10; + // Show a banner every 3 rows (i.e. row index 0, 3, 6, 9 etc will be banner rows. + static const int _adInterval = 3; + // Keep track of the positions of banners. + final Map _bannerPositions = {}; + + BannerAd _createBannerAd() { + final String bannerId = Platform.isAndroid + ? 'ca-app-pub-3940256099942544/6300978111' + : 'ca-app-pub-3940256099942544/2934735716'; + AdSize adSize = AdSize.getCurrentOrientationInlineAdaptiveBannerAdSize(360); + final BannerAd bannerAd = BannerAd( + adUnitId: bannerId, + request: const AdRequest(), + size: adSize, + listener: BannerAdListener( + onAdLoaded: (Ad ad) async { + BannerAd bannerAd = (ad as BannerAd); + if (_failedBanners.contains(bannerAd)) { + _failedBanners.remove(bannerAd); + } + final AdSize? adSize = await bannerAd.getPlatformAdSize(); + // When the banner size is updated, rebuild by calling setState. + if (adSize != null && adSize != _bannerSizes[bannerAd]) { + setState(() { + _bannerSizes[bannerAd] = adSize; + }); + } + }, + onAdFailedToLoad: (Ad ad, LoadAdError error) { + _failedBanners.add(ad as BannerAd); + }, + onAdImpression: (Ad ad) { + print('Banner ad impression occurred.'); + }, + ), + ); + bannerAd.load(); + return bannerAd; + } + + BannerAd _getRecycledBannerAd(int bannerPosition) { + // If already created a banner for current position, just reuse it. + BannerAd? currentBannerAd = _bannerPositions.entries + .firstWhereOrNull((entry) => entry.value == bannerPosition) + ?.key; + if (currentBannerAd != null) { + return currentBannerAd; + } + + if (_banners.length < _cacheSize) { + // If the cache is not full, create a new banner + BannerAd bannerAd = _createBannerAd(); + _banners.add(bannerAd); + _bannerPositions[bannerAd] = bannerPosition; + return bannerAd; + } + // If cache is full, recycle the banner (if possible). + BannerAd bannerAd = _banners[bannerPosition % _cacheSize]; + if (_failedBanners.contains(bannerAd)) { + // if it's failed previously, reload it. + bannerAd.load(); + _failedBanners.remove(bannerAd); + } + if (bannerAd.isMounted) { + // Create a new banner if it's not possible to recycle the banner + // e.g. show 15 banners on screen, but _cacheSize is only 10. + // This should be a corner case indicating _cacheSize should be increased. + bannerAd = _createBannerAd(); + } + _bannerPositions[bannerAd] = bannerPosition; + return bannerAd; + } + + @override + Widget build(BuildContext context) { + return Scaffold( + appBar: AppBar(title: Text('Adaptive Size, Recycle')), + body: ListView.builder( + // Arbitrary example of 100 items in the list. + itemCount: 100, + itemBuilder: (BuildContext context, int index) { + if (index % _adInterval == 0) { + int bannerPosition = index ~/ _adInterval; + BannerAd bannerAd = _getRecycledBannerAd(bannerPosition); + final AdSize? adSize = _bannerSizes[bannerAd]; + if (adSize == null) { + // Null adSize means the banner's content is not fetched yet. + return SizedBox.shrink(); + } + // Now this banner is loaded with ad content and corresponding ad size. + return SizedBox( + width: adSize.width.toDouble(), + height: adSize.height.toDouble(), + child: AdWidget(ad: bannerAd), + ); + } + + // Show your regular non-ad content. + return Container( + decoration: BoxDecoration( + border: Border.all( + color: Colors.blue, + width: 1.0, + style: BorderStyle.solid, + ), + ), + child: SizedBox( + height: 100, + child: ColoredBox(color: Colors.yellow), + ), + ); + }, + ), + ); + } + + @override + void dispose() { + for (final banner in _banners) { + banner.dispose(); + } + super.dispose(); + } +} diff --git a/mih_ui/android/build/ios/SourcePackages/google_mobile_ads-8.0.0/example/lib/native_template_example.dart b/mih_ui/android/build/ios/SourcePackages/google_mobile_ads-8.0.0/example/lib/native_template_example.dart new file mode 100644 index 00000000..415db8ed --- /dev/null +++ b/mih_ui/android/build/ios/SourcePackages/google_mobile_ads-8.0.0/example/lib/native_template_example.dart @@ -0,0 +1,106 @@ +// Copyright 2022 Google LLC +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// https://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// ignore_for_file: public_member_api_docs + +import 'package:flutter/material.dart'; +import 'package:google_mobile_ads/google_mobile_ads.dart'; +import 'constants.dart'; + +/// This example demonstrates native templates. +class NativeTemplateExample extends StatefulWidget { + @override + _NativeTemplateExampleExampleState createState() => + _NativeTemplateExampleExampleState(); +} + +class _NativeTemplateExampleExampleState extends State { + NativeAd? _nativeAd; + bool _nativeAdIsLoaded = false; + + @override + Widget build(BuildContext context) => Scaffold( + appBar: AppBar(title: Text('Native templates example')), + body: Center( + child: Padding( + padding: const EdgeInsets.symmetric(horizontal: 16.0), + child: ListView.separated( + itemCount: 10, + separatorBuilder: (BuildContext context, int index) { + return Container(height: 40); + }, + itemBuilder: (BuildContext context, int index) { + if (index == 5 && _nativeAd != null && _nativeAdIsLoaded) { + return Align( + alignment: Alignment.center, + child: ConstrainedBox( + constraints: const BoxConstraints( + minWidth: 300, + minHeight: 350, + maxHeight: 400, + maxWidth: 450, + ), + child: AdWidget(ad: _nativeAd!), + ), + ); + } + return Text( + Constants.placeholderText, + style: TextStyle(fontSize: 24), + ); + }, + ), + ), + ), + ); + + @override + void didChangeDependencies() { + super.didChangeDependencies(); + // Create the ad objects and load ads. + _nativeAd = NativeAd( + adUnitId: '/6499/example/native', + request: AdRequest(), + listener: NativeAdListener( + onAdLoaded: (Ad ad) { + print('$NativeAd loaded.'); + setState(() { + _nativeAdIsLoaded = true; + }); + }, + onAdFailedToLoad: (Ad ad, LoadAdError error) { + print('$NativeAd failedToLoad: $error'); + ad.dispose(); + }, + onAdOpened: (Ad ad) => print('$NativeAd onAdOpened.'), + onAdClosed: (Ad ad) => print('$NativeAd onAdClosed.'), + ), + nativeTemplateStyle: NativeTemplateStyle( + templateType: TemplateType.medium, + mainBackgroundColor: Colors.white12, + callToActionTextStyle: NativeTemplateTextStyle(size: 16.0), + primaryTextStyle: NativeTemplateTextStyle( + textColor: Colors.black38, + backgroundColor: Colors.white70, + ), + ), + )..load(); + } + + @override + void dispose() { + super.dispose(); + _nativeAd?.dispose(); + } +} diff --git a/mih_ui/android/build/ios/SourcePackages/google_mobile_ads-8.0.0/example/lib/reusable_inline_example.dart b/mih_ui/android/build/ios/SourcePackages/google_mobile_ads-8.0.0/example/lib/reusable_inline_example.dart new file mode 100644 index 00000000..18711161 --- /dev/null +++ b/mih_ui/android/build/ios/SourcePackages/google_mobile_ads-8.0.0/example/lib/reusable_inline_example.dart @@ -0,0 +1,163 @@ +// Copyright 2021 Google LLC +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// https://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// ignore_for_file: public_member_api_docs + +import 'package:flutter/material.dart'; +import 'package:google_mobile_ads/google_mobile_ads.dart'; +import 'constants.dart'; +import 'dart:io' show Platform; + +/// This example demonstrates inline ads in a list view, where the ad objects +/// live for the lifetime of this widget. +class ReusableInlineExample extends StatefulWidget { + @override + _ReusableInlineExampleState createState() => _ReusableInlineExampleState(); +} + +class _ReusableInlineExampleState extends State { + BannerAd? _bannerAd; + bool _bannerAdIsLoaded = false; + + AdManagerBannerAd? _adManagerBannerAd; + bool _adManagerBannerAdIsLoaded = false; + + NativeAd? _nativeAd; + bool _nativeAdIsLoaded = false; + + @override + Widget build(BuildContext context) => Center( + child: Padding( + padding: const EdgeInsets.symmetric(horizontal: 16.0), + child: ListView.separated( + itemCount: 20, + separatorBuilder: (BuildContext context, int index) { + return Container(height: 40); + }, + itemBuilder: (BuildContext context, int index) { + final BannerAd? bannerAd = _bannerAd; + if (index == 5 && _bannerAdIsLoaded && bannerAd != null) { + return Container( + height: bannerAd.size.height.toDouble(), + width: bannerAd.size.width.toDouble(), + child: AdWidget(ad: bannerAd), + ); + } + + final AdManagerBannerAd? adManagerBannerAd = _adManagerBannerAd; + if (index == 10 && + _adManagerBannerAdIsLoaded && + adManagerBannerAd != null) { + return Container( + height: adManagerBannerAd.sizes[0].height.toDouble(), + width: adManagerBannerAd.sizes[0].width.toDouble(), + child: AdWidget(ad: _adManagerBannerAd!), + ); + } + + final NativeAd? nativeAd = _nativeAd; + if (index == 15 && _nativeAdIsLoaded && nativeAd != null) { + return Container( + width: 250, + height: 350, + child: AdWidget(ad: nativeAd), + ); + } + + return Text( + Constants.placeholderText, + style: TextStyle(fontSize: 24), + ); + }, + ), + ), + ); + + @override + void didChangeDependencies() { + super.didChangeDependencies(); + // Create the ad objects and load ads. + _bannerAd = BannerAd( + size: AdSize.banner, + adUnitId: Platform.isAndroid + ? 'ca-app-pub-3940256099942544/6300978111' + : 'ca-app-pub-3940256099942544/2934735716', + listener: BannerAdListener( + onAdLoaded: (Ad ad) { + print('$BannerAd loaded.'); + setState(() { + _bannerAdIsLoaded = true; + }); + }, + onAdFailedToLoad: (Ad ad, LoadAdError error) { + print('$BannerAd failedToLoad: $error'); + ad.dispose(); + }, + onAdOpened: (Ad ad) => print('$BannerAd onAdOpened.'), + onAdClosed: (Ad ad) => print('$BannerAd onAdClosed.'), + ), + request: AdRequest(), + )..load(); + + _nativeAd = NativeAd( + adUnitId: Platform.isAndroid + ? 'ca-app-pub-3940256099942544/2247696110' + : 'ca-app-pub-3940256099942544/3986624511', + request: AdRequest(), + factoryId: 'adFactoryExample', + listener: NativeAdListener( + onAdLoaded: (Ad ad) { + print('$NativeAd loaded.'); + setState(() { + _nativeAdIsLoaded = true; + }); + }, + onAdFailedToLoad: (Ad ad, LoadAdError error) { + print('$NativeAd failedToLoad: $error'); + ad.dispose(); + }, + onAdOpened: (Ad ad) => print('$NativeAd onAdOpened.'), + onAdClosed: (Ad ad) => print('$NativeAd onAdClosed.'), + ), + )..load(); + + _adManagerBannerAd = AdManagerBannerAd( + adUnitId: '/6499/example/banner', + request: AdManagerAdRequest(nonPersonalizedAds: true), + sizes: [AdSize.largeBanner], + listener: AdManagerBannerAdListener( + onAdLoaded: (Ad ad) { + print('$AdManagerBannerAd loaded.'); + setState(() { + _adManagerBannerAdIsLoaded = true; + }); + }, + onAdFailedToLoad: (Ad ad, LoadAdError error) { + print('$AdManagerBannerAd failedToLoad: $error'); + ad.dispose(); + }, + onAdOpened: (Ad ad) => print('$AdManagerBannerAd onAdOpened.'), + onAdClosed: (Ad ad) => print('$AdManagerBannerAd onAdClosed.'), + ), + )..load(); + } + + @override + void dispose() { + super.dispose(); + _bannerAd?.dispose(); + _adManagerBannerAd?.dispose(); + _nativeAd?.dispose(); + } +} diff --git a/mih_ui/android/build/ios/SourcePackages/google_mobile_ads-8.0.0/example/lib/snippets/banner_ad_snippets.dart b/mih_ui/android/build/ios/SourcePackages/google_mobile_ads-8.0.0/example/lib/snippets/banner_ad_snippets.dart new file mode 100644 index 00000000..8685cbf8 --- /dev/null +++ b/mih_ui/android/build/ios/SourcePackages/google_mobile_ads-8.0.0/example/lib/snippets/banner_ad_snippets.dart @@ -0,0 +1,79 @@ +// Copyright 2025 Google LLC +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// https://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// ignore_for_file: public_member_api_docs + +import 'dart:async'; +import 'dart:io'; + +import 'package:flutter/material.dart'; +import 'package:google_mobile_ads/google_mobile_ads.dart'; + +/// Dart snippets for the developer guide. +class _BannerAdWidget extends StatefulWidget { + const _BannerAdWidget(); + + @override + State<_BannerAdWidget> createState() => _BannerAdSnippets(); +} + +class _BannerAdSnippets extends State<_BannerAdWidget> { + BannerAd? _bannerAd; + final _adUnitId = Platform.isAndroid + ? 'ca-app-pub-3940256099942544/9214589741' + : 'ca-app-pub-3940256099942544/2435281174'; + final String _adManagerAdUnitId = '/21775744923/example/adaptive-banner'; + + // [START load_ad_ad_manager] + void _loadAd() async { + // Get an AnchoredAdaptiveBannerAdSize before loading the ad. + final size = await AdSize.getLargeAnchoredAdaptiveBannerAdSize( + MediaQuery.sizeOf(context).width.truncate(), + ); + + if (size == null) { + // Unable to get width of anchored banner. + return; + } + + unawaited( + BannerAd( + adUnitId: _adUnitId, + request: const AdManagerAdRequest(), + size: size, + listener: BannerAdListener( + onAdLoaded: (ad) { + // Called when an ad is successfully received. + debugPrint('Ad was loaded.'); + setState(() { + _bannerAd = ad as BannerAd; + }); + }, + onAdFailedToLoad: (ad, err) { + // Called when an ad request failed. + debugPrint('Ad failed to load with error: $err'); + ad.dispose(); + }, + ), + ).load(), + ); + } + // [END load_ad_ad_manager] + + @override + Widget build(BuildContext context) { + // TODO: implement build + throw UnimplementedError(); + } +} diff --git a/mih_ui/android/build/ios/SourcePackages/google_mobile_ads-8.0.0/example/lib/snippets/interstitial_ad_snippets.dart b/mih_ui/android/build/ios/SourcePackages/google_mobile_ads-8.0.0/example/lib/snippets/interstitial_ad_snippets.dart new file mode 100644 index 00000000..10d49c89 --- /dev/null +++ b/mih_ui/android/build/ios/SourcePackages/google_mobile_ads-8.0.0/example/lib/snippets/interstitial_ad_snippets.dart @@ -0,0 +1,112 @@ +// Copyright 2025 Google LLC +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// https://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// ignore_for_file: public_member_api_docs + +import 'dart:io'; + +import 'package:flutter/cupertino.dart'; +import 'package:google_mobile_ads/google_mobile_ads.dart'; + +/// Dart snippets for the developer guide. +class _InterstitialAdSnippets { + InterstitialAd? _interstitialAd; + final String _adUnitId = Platform.isAndroid + ? 'ca-app-pub-3940256099942544/1033173712' + : 'ca-app-pub-3940256099942544/4411468910'; + final String _adManagerAdUnitId = '/21775744923/example/interstitial'; + + void _loadInterstitialAd() { + // [START load_ad] + InterstitialAd.load( + adUnitId: _adUnitId, + request: const AdRequest(), + adLoadCallback: InterstitialAdLoadCallback( + onAdLoaded: (InterstitialAd ad) { + // Called when an ad is successfully received. + debugPrint('Ad was loaded.'); + // Keep a reference to the ad so you can show it later. + _interstitialAd = ad; + // [START_EXCLUDE silent] + _setFullScreenContentCallback(ad); + // [END_EXCLUDE] + }, + onAdFailedToLoad: (LoadAdError error) { + // Called when an ad request failed. + debugPrint('Ad failed to load with error: $error'); + }, + ), + ); + // [END load_ad] + } + + void _setFullScreenContentCallback(InterstitialAd ad) { + // [START ad_events] + ad.fullScreenContentCallback = FullScreenContentCallback( + onAdShowedFullScreenContent: (ad) { + // Called when the ad showed the full screen content. + debugPrint('Ad showed full screen content.'); + }, + onAdFailedToShowFullScreenContent: (ad, err) { + // Called when the ad failed to show full screen content. + debugPrint('Ad failed to show full screen content with error: $err'); + // Dispose the ad here to free resources. + ad.dispose(); + }, + onAdDismissedFullScreenContent: (ad) { + // Called when the ad dismissed full screen content. + debugPrint('Ad was dismissed.'); + // Dispose the ad here to free resources. + ad.dispose(); + }, + onAdImpression: (ad) { + // Called when an impression occurs on the ad. + debugPrint('Ad recorded an impression.'); + }, + onAdClicked: (ad) { + // Called when a click is recorded for an ad. + debugPrint('Ad was clicked.'); + }, + ); + // [END ad_events] + } + + // =================================================================== + // Ad Manager snippets + // =================================================================== + + void _loadAdManagerInterstitialAd() { + // [START load_ad_ad_manager] + InterstitialAd.load( + adUnitId: _adUnitId, + request: const AdManagerAdRequest(), + adLoadCallback: InterstitialAdLoadCallback( + onAdLoaded: (InterstitialAd ad) { + // Called when an ad is successfully received. + debugPrint('Ad was loaded.'); + // Keep a reference to the ad so you can show it later. + _interstitialAd = ad; + // [START_EXCLUDE silent] + _setFullScreenContentCallback(ad); + // [END_EXCLUDE] + }, + onAdFailedToLoad: (LoadAdError error) { + // Called when an ad request failed. + debugPrint('Ad failed to load with error: $error'); + }, + ), + ); + // [END load_ad_ad_manager] + } +} diff --git a/mih_ui/android/build/ios/SourcePackages/google_mobile_ads-8.0.0/example/lib/snippets/rewarded_ad_snippets.dart b/mih_ui/android/build/ios/SourcePackages/google_mobile_ads-8.0.0/example/lib/snippets/rewarded_ad_snippets.dart new file mode 100644 index 00000000..82b152ed --- /dev/null +++ b/mih_ui/android/build/ios/SourcePackages/google_mobile_ads-8.0.0/example/lib/snippets/rewarded_ad_snippets.dart @@ -0,0 +1,152 @@ +// Copyright 2025 Google LLC +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// https://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// ignore_for_file: public_member_api_docs + +import 'dart:io'; + +import 'package:flutter/cupertino.dart'; +import 'package:google_mobile_ads/google_mobile_ads.dart'; + +/// Dart snippets for the developer guide. +class _RewardedAdSnippets { + RewardedAd? _rewardedAd; + final String _adUnitId = Platform.isAndroid + ? 'ca-app-pub-3940256099942544/5224354917' + : 'ca-app-pub-3940256099942544/1712485313'; + final String _adManagerAdUnitId = '/21775744923/example/rewarded'; + + void _loadRewardedAd() { + // [START load_ad] + RewardedAd.load( + adUnitId: _adUnitId, + request: const AdRequest(), + rewardedAdLoadCallback: RewardedAdLoadCallback( + onAdLoaded: (RewardedAd ad) { + // Called when an ad is successfully received. + debugPrint('Ad was loaded.'); + // Keep a reference to the ad so you can show it later. + _rewardedAd = ad; + // [START_EXCLUDE silent] + _setFullScreenContentCallback(ad); + // [END_EXCLUDE] + }, + onAdFailedToLoad: (LoadAdError error) { + // Called when an ad request failed. + debugPrint('Ad failed to load with error: $error'); + }, + ), + ); + // [END load_ad] + } + + void _setFullScreenContentCallback(RewardedAd ad) { + // [START ad_events] + ad.fullScreenContentCallback = FullScreenContentCallback( + onAdShowedFullScreenContent: (ad) { + // Called when the ad showed the full screen content. + debugPrint('Ad showed full screen content.'); + }, + onAdFailedToShowFullScreenContent: (ad, err) { + // Called when the ad failed to show full screen content. + debugPrint('Ad failed to show full screen content with error: $err'); + // Dispose the ad here to free resources. + ad.dispose(); + }, + onAdDismissedFullScreenContent: (ad) { + // Called when the ad dismissed full screen content. + debugPrint('Ad was dismissed.'); + // Dispose the ad here to free resources. + ad.dispose(); + }, + onAdImpression: (ad) { + // Called when an impression occurs on the ad. + debugPrint('Ad recorded an impression.'); + }, + onAdClicked: (ad) { + // Called when a click is recorded for an ad. + debugPrint('Ad was clicked.'); + }, + ); + // [END ad_events] + } + + void _validateServerSideVerification() { + // [START validate_server_side_verification] + RewardedAd.load( + adUnitId: _adUnitId, + request: AdRequest(), + rewardedAdLoadCallback: RewardedAdLoadCallback( + onAdLoaded: (ad) { + ServerSideVerificationOptions _options = + ServerSideVerificationOptions( + customData: 'SAMPLE_CUSTOM_DATA_STRING', + ); + ad.setServerSideOptions(_options); + _rewardedAd = ad; + }, + onAdFailedToLoad: (error) {}, + ), + ); + // [END validate_server_side_verification] + } + + // =================================================================== + // Ad Manager snippets + // =================================================================== + + void _loadAdManagerRewardedAd() { + // [START load_ad_ad_manager] + RewardedAd.load( + adUnitId: _adUnitId, + request: const AdManagerAdRequest(), + rewardedAdLoadCallback: RewardedAdLoadCallback( + onAdLoaded: (RewardedAd ad) { + // Called when an ad is successfully received. + debugPrint('Ad was loaded.'); + // Keep a reference to the ad so you can show it later. + _rewardedAd = ad; + // [START_EXCLUDE silent] + _setFullScreenContentCallback(ad); + // [END_EXCLUDE] + }, + onAdFailedToLoad: (LoadAdError error) { + // Called when an ad request failed. + debugPrint('Ad failed to load with error: $error'); + }, + ), + ); + // [END load_ad_ad_manager] + } + + void _validateAdManagerServerSideVerification() { + // [START validate_server_side_verification_ad_manager] + RewardedAd.load( + adUnitId: _adUnitId, + request: AdManagerAdRequest(), + rewardedAdLoadCallback: RewardedAdLoadCallback( + onAdLoaded: (ad) { + ServerSideVerificationOptions _options = + ServerSideVerificationOptions( + customData: 'SAMPLE_CUSTOM_DATA_STRING', + ); + ad.setServerSideOptions(_options); + _rewardedAd = ad; + }, + onAdFailedToLoad: (error) {}, + ), + ); + // [END validate_server_side_verification_ad_manager] + } +} diff --git a/mih_ui/android/build/ios/SourcePackages/google_mobile_ads-8.0.0/example/lib/snippets/rewarded_interstitial_ad_snippets.dart b/mih_ui/android/build/ios/SourcePackages/google_mobile_ads-8.0.0/example/lib/snippets/rewarded_interstitial_ad_snippets.dart new file mode 100644 index 00000000..ff932b61 --- /dev/null +++ b/mih_ui/android/build/ios/SourcePackages/google_mobile_ads-8.0.0/example/lib/snippets/rewarded_interstitial_ad_snippets.dart @@ -0,0 +1,153 @@ +// Copyright 2025 Google LLC +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// https://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// ignore_for_file: public_member_api_docs + +import 'dart:io'; + +import 'package:flutter/cupertino.dart'; +import 'package:google_mobile_ads/google_mobile_ads.dart'; + +/// Dart snippets for the developer guide. +class _RewardedInterstitialAdSnippets { + RewardedInterstitialAd? _rewardedInterstitialAd; + final String _adUnitId = Platform.isAndroid + ? 'ca-app-pub-3940256099942544/5354046379' + : 'ca-app-pub-3940256099942544/6978759866'; + final String _adManagerAdUnitId = + '/21775744923/example/rewarded-interstitial'; + + void _loadRewardedInterstitialAd() { + // [START load_ad] + RewardedInterstitialAd.load( + adUnitId: _adUnitId, + request: const AdRequest(), + rewardedInterstitialAdLoadCallback: RewardedInterstitialAdLoadCallback( + onAdLoaded: (RewardedInterstitialAd ad) { + // Called when an ad is successfully received. + debugPrint('Ad was loaded.'); + // Keep a reference to the ad so you can show it later. + _rewardedInterstitialAd = ad; + // [START_EXCLUDE silent] + _setFullScreenContentCallback(ad); + // [END_EXCLUDE] + }, + onAdFailedToLoad: (LoadAdError error) { + // Called when an ad request failed. + debugPrint('Ad failed to load with error: $error'); + }, + ), + ); + // [END load_ad] + } + + void _setFullScreenContentCallback(RewardedInterstitialAd ad) { + // [START ad_events] + ad.fullScreenContentCallback = FullScreenContentCallback( + onAdShowedFullScreenContent: (ad) { + // Called when the ad showed the full screen content. + debugPrint('Ad showed full screen content.'); + }, + onAdFailedToShowFullScreenContent: (ad, err) { + // Called when the ad failed to show full screen content. + debugPrint('Ad failed to show full screen content with error: $err'); + // Dispose the ad here to free resources. + ad.dispose(); + }, + onAdDismissedFullScreenContent: (ad) { + // Called when the ad dismissed full screen content. + debugPrint('Ad was dismissed.'); + // Dispose the ad here to free resources. + ad.dispose(); + }, + onAdImpression: (ad) { + // Called when an impression occurs on the ad. + debugPrint('Ad recorded an impression.'); + }, + onAdClicked: (ad) { + // Called when a click is recorded for an ad. + debugPrint('Ad was clicked.'); + }, + ); + // [END ad_events] + } + + void _validateServerSideVerification() { + // [START validate_server_side_verification] + RewardedInterstitialAd.load( + adUnitId: _adUnitId, + request: AdRequest(), + rewardedInterstitialAdLoadCallback: RewardedInterstitialAdLoadCallback( + onAdLoaded: (ad) { + ServerSideVerificationOptions _options = + ServerSideVerificationOptions( + customData: 'SAMPLE_CUSTOM_DATA_STRING', + ); + ad.setServerSideOptions(_options); + _rewardedInterstitialAd = ad; + }, + onAdFailedToLoad: (error) {}, + ), + ); + // [END validate_server_side_verification] + } + + // =================================================================== + // Ad Manager snippets + // =================================================================== + + void _loadAdManagerRewardedInterstitialAd() { + // [START load_ad_ad_manager] + RewardedInterstitialAd.load( + adUnitId: _adUnitId, + request: const AdManagerAdRequest(), + rewardedInterstitialAdLoadCallback: RewardedInterstitialAdLoadCallback( + onAdLoaded: (RewardedInterstitialAd ad) { + // Called when an ad is successfully received. + debugPrint('Ad was loaded.'); + // Keep a reference to the ad so you can show it later. + _rewardedInterstitialAd = ad; + // [START_EXCLUDE silent] + _setFullScreenContentCallback(ad); + // [END_EXCLUDE] + }, + onAdFailedToLoad: (LoadAdError error) { + // Called when an ad request failed. + debugPrint('Ad failed to load with error: $error'); + }, + ), + ); + // [END load_ad_ad_manager] + } + + void _validateAdManagerServerSideVerification() { + // [START validate_server_side_verification_ad_manager] + RewardedInterstitialAd.load( + adUnitId: _adUnitId, + request: AdManagerAdRequest(), + rewardedInterstitialAdLoadCallback: RewardedInterstitialAdLoadCallback( + onAdLoaded: (ad) { + ServerSideVerificationOptions _options = + ServerSideVerificationOptions( + customData: 'SAMPLE_CUSTOM_DATA_STRING', + ); + ad.setServerSideOptions(_options); + _rewardedInterstitialAd = ad; + }, + onAdFailedToLoad: (error) {}, + ), + ); + // [END validate_server_side_verification_ad_manager] + } +} diff --git a/mih_ui/android/build/ios/SourcePackages/google_mobile_ads-8.0.0/example/lib/webview_example.dart b/mih_ui/android/build/ios/SourcePackages/google_mobile_ads-8.0.0/example/lib/webview_example.dart new file mode 100644 index 00000000..b194a964 --- /dev/null +++ b/mih_ui/android/build/ios/SourcePackages/google_mobile_ads-8.0.0/example/lib/webview_example.dart @@ -0,0 +1,77 @@ +// Copyright 2023 Google LLC +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// https://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// ignore_for_file: public_member_api_docs + +import 'package:flutter/material.dart'; +import 'package:google_mobile_ads/google_mobile_ads.dart'; +import 'package:webview_flutter/webview_flutter.dart'; +import 'package:webview_flutter_android/webview_flutter_android.dart'; + +/// Opens a WebView and tries to register it via `MobileAds.registerWebView()`. +class WebViewExample extends StatefulWidget { + @override + _WebViewExampleState createState() => _WebViewExampleState(); +} + +class _WebViewExampleState extends State { + late final WebViewController controller; + + @override + Widget build(BuildContext context) { + return Scaffold( + appBar: AppBar(title: const Text('WebView Example')), + body: WebViewWidget(controller: controller), + ); + } + + @override + void initState() { + super.initState(); + createWebView(); + } + + void createWebView() async { + controller = WebViewController(); + await controller.setJavaScriptMode(JavaScriptMode.unrestricted); + await controller.setBackgroundColor(const Color(0x00000000)); + await controller.setNavigationDelegate( + NavigationDelegate( + onProgress: (int progress) {}, + onPageStarted: (String url) {}, + onPageFinished: (String url) {}, + onWebResourceError: (WebResourceError error) {}, + onNavigationRequest: (NavigationRequest request) { + if (request.url.startsWith('https://www.youtube.com/')) { + return NavigationDecision.prevent; + } + return NavigationDecision.navigate; + }, + ), + ); + if (controller.platform is AndroidWebViewController) { + AndroidWebViewCookieManager cookieManager = AndroidWebViewCookieManager( + PlatformWebViewCookieManagerCreationParams(), + ); + await cookieManager.setAcceptThirdPartyCookies( + controller.platform as AndroidWebViewController, + true, + ); + } + await MobileAds.instance.registerWebView(controller); + await controller.loadRequest( + Uri.parse('https://google.github.io/webview-ads/test/#api-for-ads-tests'), + ); + } +} diff --git a/mih_ui/android/build/ios/SourcePackages/google_mobile_ads-8.0.0/example/pubspec.yaml b/mih_ui/android/build/ios/SourcePackages/google_mobile_ads-8.0.0/example/pubspec.yaml new file mode 100644 index 00000000..aa0ac859 --- /dev/null +++ b/mih_ui/android/build/ios/SourcePackages/google_mobile_ads-8.0.0/example/pubspec.yaml @@ -0,0 +1,37 @@ +# Copyright 2021 Google LLC +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# https://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +name: google_mobile_ads_example +version: 1.0.0 +description: Demonstrates how to use the google mobile ads plugin. +publish_to: none + +dependencies: + flutter: + sdk: flutter + google_mobile_ads: + path: ../ + webview_flutter_android: ^4.10.9 + webview_flutter: ^4.10.0 + +dev_dependencies: + pedantic: ^1.11.0 + flutter_driver: + sdk: flutter + +flutter: + uses-material-design: true + +environment: + sdk: ">=3.9.0 <4.0.0" diff --git a/mih_ui/android/build/ios/SourcePackages/google_mobile_ads-8.0.0/ios/google_mobile_ads.podspec b/mih_ui/android/build/ios/SourcePackages/google_mobile_ads-8.0.0/ios/google_mobile_ads.podspec new file mode 100644 index 00000000..161c4794 --- /dev/null +++ b/mih_ui/android/build/ios/SourcePackages/google_mobile_ads-8.0.0/ios/google_mobile_ads.podspec @@ -0,0 +1,31 @@ +# +# To learn more about a Podspec see http://guides.cocoapods.org/syntax/podspec.html +# +Pod::Spec.new do |s| + s.name = 'google_mobile_ads' + s.version = '8.0.0' + s.summary = 'Google Mobile Ads plugin for Flutter.' + s.description = <<-DESC +Google Mobile Ads plugin for Flutter. + DESC + s.homepage = 'https://github.com/googleads/googleads-mobile-flutter' + s.license = { :file => '../LICENSE' } + s.author = { 'Flutter Team' => 'flutter-dev@googlegroups.com' } + s.source = { :path => '.' } + s.source_files = 'google_mobile_ads/Sources/google_mobile_ads/**/*.{h,m}' + s.public_header_files = 'google_mobile_ads/Sources/google_mobile_ads/**/*.h' + s.dependency 'Flutter' + s.dependency 'Google-Mobile-Ads-SDK','~> 13.2.0' + s.dependency 'webview_flutter_wkwebview' + s.ios.deployment_target = '13.0' + s.pod_target_xcconfig = { 'DEFINES_MODULE' => 'YES', 'VALID_ARCHS' => 'armv7 arm64 x86_64' } + s.static_framework = true + s.resource_bundles = { + 'google_mobile_ads' => ['google_mobile_ads/Sources/google_mobile_ads/**/*.xib'] + } + + s.test_spec 'Tests' do |test_spec| + test_spec.source_files = 'Tests/**/*.{h,m}' + test_spec.dependency 'OCMock','3.6' + end +end diff --git a/mih_ui/android/build/ios/SourcePackages/google_mobile_ads-8.0.0/ios/google_mobile_ads/Package.swift b/mih_ui/android/build/ios/SourcePackages/google_mobile_ads-8.0.0/ios/google_mobile_ads/Package.swift new file mode 100644 index 00000000..057a4e82 --- /dev/null +++ b/mih_ui/android/build/ios/SourcePackages/google_mobile_ads-8.0.0/ios/google_mobile_ads/Package.swift @@ -0,0 +1,34 @@ +// swift-tools-version: 5.9 +// The swift-tools-version declares the minimum version of Swift required to build this package. + +import PackageDescription + +let package = Package( + name: "google_mobile_ads", + platforms: [ + .iOS("13.0") + ], + products: [ + .library(name: "google-mobile-ads", targets: ["google_mobile_ads"]) + ], + dependencies: [ + .package( + url: "https://github.com/googleads/swift-package-manager-google-mobile-ads", from: "13.2.0"), + .package(name: "webview_flutter_wkwebview", path: "../webview_flutter_wkwebview-3.26.0"), + ], + targets: [ + .target( + name: "google_mobile_ads", + dependencies: [ + .product(name: "GoogleMobileAds", package: "swift-package-manager-google-mobile-ads"), + .product(name: "webview-flutter-wkwebview", package: "webview_flutter_wkwebview"), + ], + resources: [ + .process("Resources"), + ], + cSettings: [ + .headerSearchPath("include/google_mobile_ads") + ] + ) + ] +) diff --git a/mih_ui/android/build/ios/SourcePackages/google_mobile_ads-8.0.0/ios/google_mobile_ads/Sources/google_mobile_ads/FLTAdInstanceManager_Internal.m b/mih_ui/android/build/ios/SourcePackages/google_mobile_ads-8.0.0/ios/google_mobile_ads/Sources/google_mobile_ads/FLTAdInstanceManager_Internal.m new file mode 100644 index 00000000..6f8e856c --- /dev/null +++ b/mih_ui/android/build/ios/SourcePackages/google_mobile_ads-8.0.0/ios/google_mobile_ads/Sources/google_mobile_ads/FLTAdInstanceManager_Internal.m @@ -0,0 +1,259 @@ +// Copyright 2021 Google LLC +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// https://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +#import "FLTAdInstanceManager_Internal.h" + +@implementation FLTAdInstanceManager { + FLTGoogleMobileAdsCollection> *_ads; + FlutterMethodChannel *_channel; +} + +- (instancetype _Nonnull)initWithBinaryMessenger: + (id _Nonnull)binaryMessenger { + self = [super init]; + if (self) { + _ads = [[FLTGoogleMobileAdsCollection alloc] init]; + NSObject *methodCodec = [FlutterStandardMethodCodec + codecWithReaderWriter:[[FLTGoogleMobileAdsReaderWriter alloc] init]]; + _channel = [[FlutterMethodChannel alloc] + initWithName:@"plugins.flutter.io/google_mobile_ads" + binaryMessenger:binaryMessenger + codec:methodCodec]; + } + return self; +} + +- (id _Nullable)adFor:(NSNumber *_Nonnull)adId { + return [_ads objectForKey:adId]; +} + +- (NSNumber *_Nullable)adIdFor:(id _Nonnull)ad { + NSArray *keys = [_ads allKeysForObject:ad]; + + if (keys.count > 1) { + NSLog(@"%@Error: Multiple keys for a single ad.", + NSStringFromClass([FLTAdInstanceManager class])); + } + + if (keys.count > 0) { + return keys[0]; + } + + return nil; +} + +- (void)loadAd:(id _Nonnull)ad { + [_ads setObject:ad forKey:ad.adId]; + ad.manager = self; + [ad load]; +} + +- (void)dispose:(NSNumber *_Nonnull)adId { + [_ads removeObjectForKey:adId]; +} + +- (void)disposeAllAds { + [_ads removeAllObjects]; +} + +- (void)showAdWithID:(NSNumber *_Nonnull)adId { + id ad = (id)[self adFor:adId]; + + if (!ad) { + NSLog(@"Can't find ad with id: %@", adId); + return; + } + + [ad show]; +} + +- (void)onAdLoaded:(id _Nonnull)ad + responseInfo:(GADResponseInfo *_Nonnull)responseInfo { + [_channel invokeMethod:@"onAdEvent" + arguments:@{ + @"adId" : ad.adId, + @"eventName" : @"onAdLoaded", + @"responseInfo" : [[FLTGADResponseInfo alloc] + initWithResponseInfo:responseInfo] + }]; +} + +- (void)onAdFailedToLoad:(id _Nonnull)ad error:(NSError *_Nonnull)error { + [_channel invokeMethod:@"onAdEvent" + arguments:@{ + @"adId" : ad.adId, + @"eventName" : @"onAdFailedToLoad", + @"loadAdError" : [[FLTLoadAdError alloc] initWithError:error] + }]; +} + +- (void)onAppEvent:(id _Nonnull)ad + name:(NSString *)name + data:(NSString *)data { + [_channel invokeMethod:@"onAdEvent" + arguments:@{ + @"adId" : ad.adId, + @"eventName" : @"onAppEvent", + @"name" : name, + @"data" : data + }]; +} + +- (void)onNativeAdImpression:(FLTNativeAd *_Nonnull)ad { + [self sendAdEvent:@"onNativeAdImpression" ad:ad]; +} + +- (void)onNativeAdWillPresentScreen:(FLTNativeAd *_Nonnull)ad { + [self sendAdEvent:@"onNativeAdWillPresentScreen" ad:ad]; +} + +- (void)onNativeAdDidDismissScreen:(FLTNativeAd *_Nonnull)ad { + [self sendAdEvent:@"onNativeAdDidDismissScreen" ad:ad]; +} + +- (void)onNativeAdWillDismissScreen:(FLTNativeAd *_Nonnull)ad { + [self sendAdEvent:@"onNativeAdWillDismissScreen" ad:ad]; +} + +- (void)onRewardedAdUserEarnedReward:(FLTRewardedAd *_Nonnull)ad + reward:(FLTRewardItem *_Nonnull)reward { + [_channel invokeMethod:@"onAdEvent" + arguments:@{ + @"adId" : ad.adId, + @"eventName" : @"onRewardedAdUserEarnedReward", + @"rewardItem" : reward, + }]; +} + +- (void)onRewardedInterstitialAdUserEarnedReward: + (FLTRewardedInterstitialAd *_Nonnull)ad + reward: + (FLTRewardItem *_Nonnull)reward { + [_channel invokeMethod:@"onAdEvent" + arguments:@{ + @"adId" : ad.adId, + @"eventName" : @"onRewardedInterstitialAdUserEarnedReward", + @"rewardItem" : reward, + }]; +} + +- (void)onPaidEvent:(id _Nonnull)ad value:(FLTAdValue *_Nonnull)adValue { + [_channel invokeMethod:@"onAdEvent" + arguments:@{ + @"adId" : ad.adId, + @"eventName" : @"onPaidEvent", + @"valueMicros" : adValue.valueMicros, + @"precision" : [NSNumber numberWithInteger:adValue.precision], + @"currencyCode" : adValue.currencyCode + }]; +} + +- (void)onBannerImpression:(FLTBannerAd *_Nonnull)ad { + [self sendAdEvent:@"onBannerImpression" ad:ad]; +} + +- (void)onBannerWillDismissScreen:(FLTBannerAd *)ad { + [self sendAdEvent:@"onBannerWillDismissScreen" ad:ad]; +} + +- (void)onBannerDidDismissScreen:(FLTBannerAd *)ad { + [self sendAdEvent:@"onBannerDidDismissScreen" ad:ad]; +} + +- (void)onBannerWillPresentScreen:(FLTBannerAd *_Nonnull)ad { + [self sendAdEvent:@"onBannerWillPresentScreen" ad:ad]; +} + +- (void)adWillPresentFullScreenContent:(id _Nonnull)ad { + [self sendAdEvent:@"adWillPresentFullScreenContent" ad:ad]; +} + +- (void)adDidDismissFullScreenContent:(id _Nonnull)ad { + [self sendAdEvent:@"adDidDismissFullScreenContent" ad:ad]; +} + +- (void)adWillDismissFullScreenContent:(id _Nonnull)ad { + [self sendAdEvent:@"adWillDismissFullScreenContent" ad:ad]; +} + +- (void)adDidRecordImpression:(id _Nonnull)ad { + [self sendAdEvent:@"adDidRecordImpression" ad:ad]; +} + +- (void)adDidRecordClick:(id _Nonnull)ad { + [self sendAdEvent:@"adDidRecordClick" ad:ad]; +} + +- (void)didFailToPresentFullScreenContentWithError:(id _Nonnull)ad + error:(NSError *_Nonnull)error { + [_channel invokeMethod:@"onAdEvent" + arguments:@{ + @"adId" : ad.adId, + @"eventName" : @"didFailToPresentFullScreenContentWithError", + @"error" : error + }]; +} + +- (void)onFluidAdHeightChanged:(id _Nonnull)ad height:(CGFloat)height { + [_channel invokeMethod:@"onAdEvent" + arguments:@{ + @"adId" : ad.adId, + @"eventName" : @"onFluidAdHeightChanged", + @"height" : [[NSNumber alloc] initWithFloat:height] + }]; +} + +/// Sends an ad event with the provided name. +- (void)sendAdEvent:(NSString *_Nonnull)eventName ad:(id)ad { + [_channel invokeMethod:@"onAdEvent" + arguments:@{ + @"adId" : ad.adId, + @"eventName" : eventName, + }]; +} + +@end + +@implementation FLTNewGoogleMobileAdsViewFactory +- (instancetype)initWithManager:(FLTAdInstanceManager *_Nonnull)manager { + self = [super init]; + if (self) { + _manager = manager; + } + return self; +} + +- (nonnull NSObject *)createWithFrame:(CGRect)frame + viewIdentifier:(int64_t)viewId + arguments:(id _Nullable)args { + NSNumber *adId = args; + NSObject *view = + (NSObject *)[_manager adFor:adId]; + + if (!view) { + NSString *reason = [NSString + stringWithFormat: + @"Could not find an ad with id: %@. Was this ad already disposed?", + adId]; + @throw [NSException exceptionWithName:NSInvalidArgumentException + reason:reason + userInfo:nil]; + } + return view; +} + +- (NSObject *)createArgsCodec { + return [FlutterStandardMessageCodec sharedInstance]; +} +@end diff --git a/mih_ui/android/build/ios/SourcePackages/google_mobile_ads-8.0.0/ios/google_mobile_ads/Sources/google_mobile_ads/FLTAdUtil.m b/mih_ui/android/build/ios/SourcePackages/google_mobile_ads-8.0.0/ios/google_mobile_ads/Sources/google_mobile_ads/FLTAdUtil.m new file mode 100644 index 00000000..8627b341 --- /dev/null +++ b/mih_ui/android/build/ios/SourcePackages/google_mobile_ads-8.0.0/ios/google_mobile_ads/Sources/google_mobile_ads/FLTAdUtil.m @@ -0,0 +1,58 @@ +// Copyright 2021 Google LLC +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// https://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +#import "FLTAdUtil.h" +#import "FLTConstants.h" +@import webview_flutter_wkwebview; + +@implementation FLTAdUtil + +static NSString *_requestAgent; + ++ (BOOL)isNull:(id)object { + return object == nil || [[NSNull null] isEqual:object]; +} + ++ (BOOL)isNotNull:(id)object { + return ![FLTAdUtil isNull:object]; +} + ++ (NSString *)requestAgent { + NSString *newsTemplateString = @""; + id newsTemplateVersion = [NSBundle.mainBundle + objectForInfoDictionaryKey:@"FLTNewsTemplateVersion"]; + if ([newsTemplateVersion isKindOfClass:[NSString class]]) { + newsTemplateString = + [NSString stringWithFormat:@"_News-%@", newsTemplateVersion]; + } + + NSString *gameTemplateString = @""; + id gameTemplateVersion = [NSBundle.mainBundle + objectForInfoDictionaryKey:@"FLTGameTemplateVersion"]; + if ([gameTemplateVersion isKindOfClass:[NSString class]]) { + gameTemplateString = + [NSString stringWithFormat:@"_Game-%@", gameTemplateVersion]; + } + return [NSString stringWithFormat:@"%@%@%@", FLT_REQUEST_AGENT_VERSIONED, + newsTemplateString, gameTemplateString]; +} + ++ (WKWebView *)getWebView:(NSNumber *)webViewId + flutterPluginRegistry:(id)flutterPluginRegistry { + return (WKWebView *)[FWFWebViewFlutterWKWebViewExternalAPI + webViewForIdentifier:webViewId.longValue + withPluginRegistry:flutterPluginRegistry]; +} + +@end diff --git a/mih_ui/android/build/ios/SourcePackages/google_mobile_ads-8.0.0/ios/google_mobile_ads/Sources/google_mobile_ads/FLTAd_Internal.m b/mih_ui/android/build/ios/SourcePackages/google_mobile_ads-8.0.0/ios/google_mobile_ads/Sources/google_mobile_ads/FLTAd_Internal.m new file mode 100644 index 00000000..d66f9b91 --- /dev/null +++ b/mih_ui/android/build/ios/SourcePackages/google_mobile_ads-8.0.0/ios/google_mobile_ads/Sources/google_mobile_ads/FLTAd_Internal.m @@ -0,0 +1,1407 @@ +// Copyright 2021 Google LLC +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// https://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +#import "FLTAd_Internal.h" +#import "FLTAdUtil.h" +#import "FLTNativeTemplateStyle.h" + +@implementation FLTAdSize +- (instancetype _Nonnull)initWithWidth:(NSNumber *_Nonnull)width + height:(NSNumber *_Nonnull)height { + return [self initWithAdSize:GADAdSizeFromCGSize(CGSizeMake( + width.doubleValue, height.doubleValue))]; +} + +- (instancetype _Nonnull)initWithAdSize:(GADAdSize)size { + self = [super init]; + if (self) { + _size = size; + _width = @(size.size.width); + _height = @(size.size.height); + } + return self; +} +@end + +@implementation FLTAdSizeFactory +- (GADAdSize)portraitAnchoredAdaptiveBannerAdSizeWithWidth: + (NSNumber *_Nonnull)width { + return GADPortraitAnchoredAdaptiveBannerAdSizeWithWidth(width.doubleValue); +} + +- (GADAdSize)landscapeAnchoredAdaptiveBannerAdSizeWithWidth: + (NSNumber *_Nonnull)width { + return GADLandscapeAnchoredAdaptiveBannerAdSizeWithWidth(width.doubleValue); +} + +- (GADAdSize)currentOrientationAnchoredAdaptiveBannerAdSizeWithWidth: + (NSNumber *_Nonnull)width { + return GADCurrentOrientationAnchoredAdaptiveBannerAdSizeWithWidth( + width.doubleValue); +} + +- (GADAdSize)largePortraitAnchoredAdaptiveBannerAdSizeWithWidth: + (NSNumber *_Nonnull)width { + return GADLargePortraitAnchoredAdaptiveBannerAdSizeWithWidth(width.doubleValue); +} + +- (GADAdSize)largeLandscapeAnchoredAdaptiveBannerAdSizeWithWidth: + (NSNumber *_Nonnull)width { + return GADLargeLandscapeAnchoredAdaptiveBannerAdSizeWithWidth(width.doubleValue); +} + +- (GADAdSize)largeAnchoredAdaptiveBannerAdSizeWithWidth: + (NSNumber *_Nonnull)width { + return GADLargeAnchoredAdaptiveBannerAdSizeWithWidth( + width.doubleValue); +} + +- (GADAdSize)currentOrientationInlineAdaptiveBannerSizeWithWidth: + (NSNumber *_Nonnull)width { + return GADCurrentOrientationInlineAdaptiveBannerAdSizeWithWidth( + width.floatValue); +} + +- (GADAdSize)portraitOrientationInlineAdaptiveBannerSizeWithWidth: + (NSNumber *_Nonnull)width { + return GADPortraitInlineAdaptiveBannerAdSizeWithWidth(width.floatValue); +} +- (GADAdSize)landscapeInlineAdaptiveBannerAdSizeWithWidth: + (NSNumber *_Nonnull)width { + return GADLandscapeInlineAdaptiveBannerAdSizeWithWidth(width.floatValue); +} +- (GADAdSize) + inlineAdaptiveBannerAdSizeWithWidthAndMaxHeight:(NSNumber *_Nonnull)width + maxHeight: + (NSNumber *_Nonnull)maxHeight { + return GADInlineAdaptiveBannerAdSizeWithWidthAndMaxHeight( + width.floatValue, maxHeight.floatValue); +} + +@end + +@implementation FLTAnchoredAdaptiveBannerSize +- (instancetype _Nonnull)initWithFactory:(FLTAdSizeFactory *_Nonnull)factory + orientation:(NSString *_Nullable)orientation + width:(NSNumber *_Nonnull)width + isLarge:(Boolean)isLarge { + GADAdSize size; + if ([FLTAdUtil isNull:orientation]) { + if (isLarge) { + size = [factory largeAnchoredAdaptiveBannerAdSizeWithWidth:width]; + } else { + size = + [factory currentOrientationAnchoredAdaptiveBannerAdSizeWithWidth:width]; + } + } else if ([orientation isEqualToString:@"portrait"]) { + if (isLarge) { + size = [factory largePortraitAnchoredAdaptiveBannerAdSizeWithWidth:width]; + } else { + size = [factory portraitAnchoredAdaptiveBannerAdSizeWithWidth:width]; + } + } else if ([orientation isEqualToString:@"landscape"]) { + if (isLarge) { + size = [factory largeLandscapeAnchoredAdaptiveBannerAdSizeWithWidth:width]; + } else { + size = [factory landscapeAnchoredAdaptiveBannerAdSizeWithWidth:width]; + } + } else { + NSLog(@"Unexpected value for orientation: %@", orientation); + return nil; + } + + self = [self initWithAdSize:size]; + if (self) { + _orientation = orientation; + } + return self; +} +@end + +@implementation FLTInlineAdaptiveBannerSize +- (instancetype _Nonnull)initWithFactory:(FLTAdSizeFactory *_Nonnull)factory + width:(NSNumber *_Nonnull)width + maxHeight:(NSNumber *_Nullable)maxHeight + orientation:(NSNumber *_Nullable)orientation { + GADAdSize gadAdSize; + if ([FLTAdUtil isNotNull:orientation]) { + gadAdSize = + orientation.intValue == 0 + ? [factory + portraitOrientationInlineAdaptiveBannerSizeWithWidth:width] + : [factory landscapeInlineAdaptiveBannerAdSizeWithWidth:width]; + } else if ([FLTAdUtil isNotNull:maxHeight]) { + gadAdSize = + [factory inlineAdaptiveBannerAdSizeWithWidthAndMaxHeight:width + maxHeight:maxHeight]; + } else { + gadAdSize = + [factory currentOrientationInlineAdaptiveBannerSizeWithWidth:width]; + } + self = [self initWithAdSize:gadAdSize]; + if (self) { + _orientation = orientation; + _maxHeight = maxHeight; + } + return self; +} +@end + +@implementation FLTSmartBannerSize +- (instancetype _Nonnull)initWithOrientation:(NSString *_Nonnull)orientation { + GADAdSize size; + if ([orientation isEqualToString:@"portrait"]) { +#pragma clang diagnostic push +#pragma clang diagnostic ignored "-Wdeprecated-declarations" + size = kGADAdSizeSmartBannerPortrait; + } else if ([orientation isEqualToString:@"landscape"]) { + size = kGADAdSizeSmartBannerLandscape; +#pragma clang diagnostic pop + } else { + NSLog(@"SmartBanner orientation should be 'portrait' or 'landscape': %@", + orientation); + return nil; + } + + self = [self initWithAdSize:size]; + if (self) { + _orientation = orientation; + } + return self; +} +@end + +@implementation FLTFluidSize +- (instancetype _Nonnull)init { + self = [self initWithAdSize:GADAdSizeFluid]; + return self; +} +@end + +@interface FLTAdRequest () +/// A helper method for adding network extras to the GADRequest. +- (void)addNetworkExtrasToGADRequest:(GADRequest *_Nonnull)request + adUnitId:(NSString *_Nonnull)adUnitId; + +@end + +@implementation FLTAdRequest + +- (void)addNetworkExtrasToGADRequest:(GADRequest *)request + adUnitId:(NSString *_Nonnull)adUnitId { + NSArray> *extras; + + if (_mediationExtras != NULL) { + NSMutableArray> *flutterExtras = + [NSMutableArray array]; + for (id extra in _mediationExtras) { + [flutterExtras addObject:[extra getMediationExtras]]; + } + extras = [NSArray arrayWithArray:flutterExtras]; + } else { + extras = [_mediationNetworkExtrasProvider + getMediationExtras:adUnitId + mediationExtrasIdentifier:_mediationExtrasIdentifier]; + } + BOOL addedNpaToGADExtras = false; + + if ([FLTAdUtil isNotNull:extras]) { + for (id extra in extras) { + // If GADExtras are present and npa is true, add npa = 1 to the GADExtras + if ([extra isKindOfClass:[GADExtras class]] && _nonPersonalizedAds) { + GADExtras *gadExtras = (GADExtras *)extra; + NSMutableDictionary *newParams = [[NSMutableDictionary alloc] + initWithDictionary:gadExtras.additionalParameters]; + newParams[@"npa"] = @"1"; + gadExtras.additionalParameters = newParams; + [request registerAdNetworkExtras:gadExtras]; + addedNpaToGADExtras = true; + } else { + [request registerAdNetworkExtras:extra]; + } + } + } + + if (!addedNpaToGADExtras) { + [self addAdMobExtras:request]; + } +} + +- (void)addAdMobExtras:(GADRequest *_Nonnull)request { + NSMutableDictionary *additionalParams = + [[NSMutableDictionary alloc] init]; + + if (_nonPersonalizedAds) { + additionalParams[@"npa"] = @"1"; + } + if (_adMobExtras) { + [additionalParams addEntriesFromDictionary:_adMobExtras]; + } + if (additionalParams.count > 0) { + GADExtras *extras = [[GADExtras alloc] init]; + extras.additionalParameters = additionalParams; + [request registerAdNetworkExtras:extras]; + } +} + +- (GADRequest *_Nonnull)asGADRequest:(NSString *_Nonnull)adUnitId { + GADRequest *request = [GADRequest request]; + request.keywords = _keywords; + request.contentURL = _contentURL; + request.neighboringContentURLStrings = _neighboringContentURLs; + request.requestAgent = _requestAgent; + [self addNetworkExtrasToGADRequest:request adUnitId:adUnitId]; + return request; +} + +@end + +@implementation FLTGADResponseInfo + +- (instancetype _Nonnull)initWithResponseInfo: + (GADResponseInfo *_Nonnull)responseInfo { + self = [super init]; + if (self) { + _responseIdentifier = responseInfo.responseIdentifier; + _adNetworkClassName = + responseInfo.loadedAdNetworkResponseInfo.adNetworkClassName; + NSMutableArray *infoArray = + [[NSMutableArray alloc] init]; + for (GADAdNetworkResponseInfo *adNetworkInfo in responseInfo + .adNetworkInfoArray) { + [infoArray addObject:[[FLTGADAdNetworkResponseInfo alloc] + initWithResponseInfo:adNetworkInfo]]; + } + _adNetworkInfoArray = infoArray; + _loadedAdNetworkResponseInfo = [[FLTGADAdNetworkResponseInfo alloc] + initWithResponseInfo:responseInfo.loadedAdNetworkResponseInfo]; + _extrasDictionary = + responseInfo.extrasDictionary ? responseInfo.extrasDictionary : @{}; + } + return self; +} +@end + +@implementation FLTGADAdNetworkResponseInfo + +- (instancetype _Nonnull)initWithResponseInfo: + (GADAdNetworkResponseInfo *_Nonnull)responseInfo { + self = [super init]; + if (self) { + _adNetworkClassName = responseInfo.adNetworkClassName; + NSNumber *timeInMillis = + [[NSNumber alloc] initWithDouble:responseInfo.latency * 1000]; + _latency = @(timeInMillis.longValue); + _dictionaryDescription = responseInfo.dictionaryRepresentation.description; + _adUnitMapping = [[NSMutableDictionary alloc] init]; + for (NSString *key in responseInfo.adUnitMapping) { + if ([responseInfo.adUnitMapping[key] isKindOfClass:NSObject.class]) { + NSObject *value = ((NSObject *)responseInfo.adUnitMapping[key]); + [_adUnitMapping setValue:value.description forKey:key]; + } else { + [_adUnitMapping setValue:@"Unrecognized credential" forKey:key]; + } + } + _error = responseInfo.error; + + _adSourceName = responseInfo.adSourceName; + _adSourceInstanceName = responseInfo.adSourceInstanceName; + _adSourceInstanceID = responseInfo.adSourceInstanceID; + _adSourceID = responseInfo.adSourceID; + } + return self; +} +@end + +@implementation FLTLoadAdError + +- (instancetype _Nonnull)initWithError:(NSError *_Nonnull)error { + self = [super init]; + if (self) { + _code = error.code; + _domain = error.domain; + _message = error.localizedDescription; + GADResponseInfo *responseInfo = + error.userInfo[GADErrorUserInfoKeyResponseInfo]; + if (responseInfo) { + _responseInfo = + [[FLTGADResponseInfo alloc] initWithResponseInfo:responseInfo]; + } + } + return self; +} +@end + +#pragma mark - FLTGAMAdRequest + +@implementation FLTGAMAdRequest +- (GADRequest *_Nonnull)asGAMRequest:(NSString *_Nonnull)adUnitId { + GAMRequest *request = [GAMRequest request]; + request.keywords = self.keywords; + request.contentURL = self.contentURL; + request.neighboringContentURLStrings = self.neighboringContentURLs; + request.publisherProvidedID = self.pubProvidedID; + request.requestAgent = self.requestAgent; + + NSMutableDictionary *targetingDictionary = + [NSMutableDictionary dictionaryWithDictionary:self.customTargeting]; + for (NSString *key in self.customTargetingLists) { + targetingDictionary[key] = + [self.customTargetingLists[key] componentsJoinedByString:@","]; + } + request.customTargeting = targetingDictionary; + [self addNetworkExtrasToGADRequest:request adUnitId:adUnitId]; + return request; +} +@end + +#pragma mark - FLTBaseAd + +@interface FLTBaseAd () +@property(readwrite) NSNumber *_Nonnull adId; +@end + +@implementation FLTBaseAd +@synthesize adId; +@end + +#pragma mark - FLTBannerAd + +@implementation FLTBannerAd { + GADBannerView *_bannerView; + FLTAdRequest *_adRequest; + NSString *_adUnitId; +} + +- (instancetype)initWithAdUnitId:(NSString *_Nonnull)adUnitId + size:(FLTAdSize *_Nonnull)size + request:(FLTAdRequest *_Nonnull)request + rootViewController:(UIViewController *_Nonnull)rootViewController + adId:(NSNumber *_Nonnull)adId { + self = [super init]; + if (self) { + _adRequest = request; + _adUnitId = adUnitId; + _bannerView = [[GADBannerView alloc] initWithAdSize:size.size]; + _bannerView.adUnitID = adUnitId; + self.adId = adId; + self.bannerView.rootViewController = rootViewController; + __weak FLTBannerAd *weakSelf = self; + self.bannerView.paidEventHandler = ^(GADAdValue *_Nonnull value) { + if (weakSelf.manager == nil) { + return; + } + [weakSelf.manager onPaidEvent:weakSelf + value:[[FLTAdValue alloc] + initWithValue:value.value + precision:(NSInteger)value.precision + currencyCode:value.currencyCode]]; + }; + } + return self; +} + +- (GADBannerView *_Nonnull)bannerView { + return _bannerView; +} + +- (void)load { + self.bannerView.delegate = self; + [self.bannerView loadRequest:[_adRequest asGADRequest:_adUnitId]]; +} + +- (FLTAdSize *)getAdSize { + if (self.bannerView) { + return [[FLTAdSize alloc] initWithAdSize:self.bannerView.adSize]; + } + return nil; +} + +-(BOOL)isCollapsible { + if (self.bannerView) { + return self.bannerView.isCollapsible; + } + return false; +} + +#pragma mark - GADBannerViewDelegate + +- (void)bannerViewDidReceiveAd:(GADBannerView *)bannerView { + [manager onAdLoaded:self responseInfo:bannerView.responseInfo]; +} + +- (void)bannerView:(GADBannerView *)bannerView + didFailToReceiveAdWithError:(NSError *)error { + [manager onAdFailedToLoad:self error:error]; +} + +- (void)bannerViewDidRecordImpression:(GADBannerView *)bannerView { + [manager onBannerImpression:self]; +} + +- (void)bannerViewWillPresentScreen:(GADBannerView *)bannerView { + [manager onBannerWillPresentScreen:self]; +} + +- (void)bannerViewWillDismissScreen:(GADBannerView *)bannerView { + [manager onBannerWillDismissScreen:self]; +} + +- (void)bannerViewDidDismissScreen:(GADBannerView *)bannerView { + [manager onBannerDidDismissScreen:self]; +} + +- (void)bannerViewDidRecordClick:(GADBannerView *)bannerView { + [manager adDidRecordClick:self]; +} + +#pragma mark - FlutterPlatformView +- (nonnull UIView *)view { + return self.bannerView; +} + +@synthesize manager; + +@end + +#pragma mark - FLTGAMBannerAd +@implementation FLTGAMBannerAd { + GAMBannerView *_bannerView; + FLTGAMAdRequest *_adRequest; + NSString *_adUnitId; +} + +- (instancetype)initWithAdUnitId:(NSString *_Nonnull)adUnitId + sizes:(NSArray *_Nonnull)sizes + request:(FLTGAMAdRequest *_Nonnull)request + rootViewController:(UIViewController *_Nonnull)rootViewController + adId:(NSNumber *_Nonnull)adId { + self = [super init]; + if (self) { + self.adId = adId; + _adRequest = request; + _adUnitId = adUnitId; + _bannerView = [[GAMBannerView alloc] initWithAdSize:sizes[0].size]; + _bannerView.adUnitID = adUnitId; + _bannerView.rootViewController = rootViewController; + _bannerView.appEventDelegate = self; + _bannerView.delegate = self; + + NSMutableArray *validAdSizes = + [NSMutableArray arrayWithCapacity:sizes.count]; + for (FLTAdSize *size in sizes) { + [validAdSizes addObject:NSValueFromGADAdSize(size.size)]; + } + _bannerView.validAdSizes = validAdSizes; + + __weak FLTGAMBannerAd *weakSelf = self; + self.bannerView.paidEventHandler = ^(GADAdValue *_Nonnull value) { + if (weakSelf.manager == nil) { + return; + } + [weakSelf.manager onPaidEvent:weakSelf + value:[[FLTAdValue alloc] + initWithValue:value.value + precision:(NSInteger)value.precision + currencyCode:value.currencyCode]]; + }; + } + return self; +} + +- (GADBannerView *_Nonnull)bannerView { + return _bannerView; +} + +- (void)load { + [self.bannerView loadRequest:[_adRequest asGAMRequest:_adUnitId]]; +} + +#pragma mark - FlutterPlatformView + +- (nonnull UIView *)view { + return self.bannerView; +} + +#pragma mark - GADAppEventDelegate +- (void)adView:(nonnull GADBannerView *)banner + didReceiveAppEvent:(nonnull NSString *)name + withInfo:(nullable NSString *)info { + [self.manager onAppEvent:self name:name data:info]; +} + +@end + +#pragma mark - FLTFluidGAMBannerAd + +@implementation FLTFluidGAMBannerAd { + GAMBannerView *_bannerView; + FLTGAMAdRequest *_adRequest; + UIScrollView *_containerView; + CGFloat _height; + NSString *_adUnitId; +} + +- (instancetype)initWithAdUnitId:(NSString *_Nonnull)adUnitId + request:(FLTGAMAdRequest *_Nonnull)request + rootViewController:(UIViewController *_Nonnull)rootViewController + adId:(NSNumber *_Nonnull)adId { + self = [super init]; + if (self) { + self.adId = adId; + _height = -1; + _adRequest = request; + _adUnitId = adUnitId; + _bannerView = [[GAMBannerView alloc] initWithAdSize:GADAdSizeFluid]; + _bannerView.adUnitID = adUnitId; + _bannerView.rootViewController = rootViewController; + _bannerView.appEventDelegate = self; + _bannerView.delegate = self; + _bannerView.adSizeDelegate = self; + + __weak FLTFluidGAMBannerAd *weakSelf = self; + self.bannerView.paidEventHandler = ^(GADAdValue *_Nonnull value) { + if (weakSelf.manager == nil) { + return; + } + [weakSelf.manager onPaidEvent:weakSelf + value:[[FLTAdValue alloc] + initWithValue:value.value + precision:(NSInteger)value.precision + currencyCode:value.currencyCode]]; + }; + } + return self; +} + +- (GADBannerView *_Nonnull)bannerView { + return _bannerView; +} + +- (void)load { + [self.bannerView loadRequest:[_adRequest asGAMRequest:_adUnitId]]; +} + +#pragma mark - FlutterPlatformView + +- (nonnull UIView *)view { + if (_containerView) { + return _containerView; + } + + UIScrollView *scrollView = [[UIScrollView alloc] initWithFrame:CGRectZero]; + [scrollView setShowsHorizontalScrollIndicator:NO]; + [scrollView setShowsVerticalScrollIndicator:NO]; + [scrollView addSubview:_bannerView]; + + _bannerView.translatesAutoresizingMaskIntoConstraints = false; + NSLayoutConstraint *width = + [NSLayoutConstraint constraintWithItem:_bannerView + attribute:NSLayoutAttributeWidth + relatedBy:0 + toItem:scrollView + attribute:NSLayoutAttributeWidth + multiplier:1.0 + constant:0]; + [scrollView addConstraint:width]; + _containerView = scrollView; + [_bannerView.widthAnchor constraintEqualToAnchor:scrollView.widthAnchor] + .active = YES; + [_bannerView.topAnchor constraintEqualToAnchor:scrollView.topAnchor].active = + YES; + return scrollView; +} + +#pragma mark - GADAdSizeDelegate + +- (void)adView:(GADBannerView *)bannerView + willChangeAdSizeTo:(GADAdSize)adSize { + CGFloat height = adSize.size.height; + [self.manager onFluidAdHeightChanged:self height:height]; +} + +#pragma mark - GADAppEventDelegate +- (void)adView:(nonnull GADBannerView *)banner + didReceiveAppEvent:(nonnull NSString *)name + withInfo:(nullable NSString *)info { + [self.manager onAppEvent:self name:name data:info]; +} + +@end + +#pragma mark - FLTFullScreenAd + +@implementation FLTFullScreenAd { + BOOL _statusBarVisibilityBeforeAdShow; +} + +@synthesize manager; + +- (void)load { + // Must be overridden by subclasses + [NSException + raise:NSInternalInconsistencyException + format:@"You must override %@ in a subclass", NSStringFromSelector(_cmd)]; +} + +- (void)show { + // Must be overridden by subclasses + [NSException + raise:NSInternalInconsistencyException + format:@"You must override %@ in a subclass", NSStringFromSelector(_cmd)]; +} + +- (void)ad:(nonnull id)ad + didFailToPresentFullScreenContentWithError:(nonnull NSError *)error { + [manager didFailToPresentFullScreenContentWithError:self error:error]; +} + +- (void)adWillPresentFullScreenContent: + (nonnull id)ad { + // Manually hide the status bar. This is a fix for + // https://github.com/googleads/googleads-mobile-flutter/issues/191 +#pragma clang diagnostic push +#pragma clang diagnostic ignored "-Wdeprecated-declarations" + _statusBarVisibilityBeforeAdShow = + UIApplication.sharedApplication.statusBarHidden; + [UIApplication.sharedApplication setStatusBarHidden:YES]; +#pragma clang diagnostic pop + [manager adWillPresentFullScreenContent:self]; +} + +- (void)adDidDismissFullScreenContent: + (nonnull id)ad { + [manager adDidDismissFullScreenContent:self]; +} + +- (void)adWillDismissFullScreenContent: + (nonnull id)ad { +#pragma clang diagnostic push +#pragma clang diagnostic ignored "-Wdeprecated-declarations" + [UIApplication.sharedApplication + setStatusBarHidden:_statusBarVisibilityBeforeAdShow]; +#pragma clang diagnostic pop + [manager adWillDismissFullScreenContent:self]; +} + +- (void)adDidRecordImpression:(nonnull id)ad { + [manager adDidRecordImpression:self]; +} + +- (void)adDidRecordClick:(nonnull id)ad { + [manager adDidRecordClick:self]; +} + +@end + +#pragma mark - FLTInterstitialAd + +@implementation FLTInterstitialAd { + GADInterstitialAd *_interstitialView; + FLTAdRequest *_adRequest; + NSString *_adUnitId; +} + +- (instancetype)initWithAdUnitId:(NSString *_Nonnull)adUnitId + request:(FLTAdRequest *_Nonnull)request + adId:(NSNumber *_Nonnull)adId { + self = [super init]; + if (self) { + self.adId = adId; + _adRequest = request; + _adUnitId = [adUnitId copy]; + } + return self; +} + +- (GADInterstitialAd *_Nullable)interstitial { + return _interstitialView; +} + +- (NSString *_Nonnull)adUnitId { + return _adUnitId; +} + +- (void)load { + [GADInterstitialAd + loadWithAdUnitID:_adUnitId + request:[_adRequest asGADRequest:_adUnitId] + completionHandler:^(GADInterstitialAd *ad, NSError *error) { + if (error) { + [self.manager onAdFailedToLoad:self error:error]; + return; + } + + ad.fullScreenContentDelegate = self; + self->_interstitialView = ad; + __weak FLTInterstitialAd *weakSelf = self; + ad.paidEventHandler = ^(GADAdValue *_Nonnull value) { + if (weakSelf.manager == nil) { + return; + } + [weakSelf.manager + onPaidEvent:weakSelf + value:[[FLTAdValue alloc] + initWithValue:value.value + precision:(NSInteger)value.precision + currencyCode:value.currencyCode]]; + }; + + [self.manager onAdLoaded:self responseInfo:ad.responseInfo]; + }]; +} + +- (void)show { + if (self.interstitial) { + [self.interstitial presentFromRootViewController:nil]; + } else { + NSLog(@"InterstitialAd failed to show because the ad was not ready."); + } +} + +@end + +#pragma mark - FLTGAMInterstitialAd + +@implementation FLTGAMInterstitialAd { + GAMInterstitialAd *_insterstitial; + FLTGAMAdRequest *_adRequest; + NSString *_adUnitId; +} + +- (instancetype)initWithAdUnitId:(NSString *_Nonnull)adUnitId + request:(FLTGAMAdRequest *_Nonnull)request + adId:(NSNumber *_Nonnull)adId { + self = [super init]; + if (self) { + self.adId = adId; + _adRequest = request; + _adUnitId = [adUnitId copy]; + } + return self; +} + +- (GADInterstitialAd *_Nullable)interstitial { + return _insterstitial; +} + +- (void)load { + [GAMInterstitialAd + loadWithAdManagerAdUnitID:_adUnitId + request:[_adRequest asGAMRequest:_adUnitId] + completionHandler:^(GAMInterstitialAd *ad, NSError *error) { + if (error) { + [self.manager onAdFailedToLoad:self error:error]; + return; + } + [self.manager onAdLoaded:self responseInfo:ad.responseInfo]; + ad.fullScreenContentDelegate = self; + ad.appEventDelegate = self; + __weak FLTGAMInterstitialAd *weakSelf = self; + ad.paidEventHandler = ^(GADAdValue *_Nonnull value) { + if (weakSelf.manager == nil) { + return; + } + [weakSelf.manager + onPaidEvent:weakSelf + value:[[FLTAdValue alloc] + initWithValue:value.value + precision:(NSInteger)value.precision + currencyCode:value.currencyCode]]; + }; + + self->_insterstitial = ad; + }]; +} + +- (void)show { + if (self.interstitial) { + [self.interstitial presentFromRootViewController:nil]; + } else { + NSLog(@"InterstitialAd failed to show because the ad was not ready."); + } +} + +#pragma mark - GADAppEventDelegate + +- (void)interstitialAd:(nonnull GADInterstitialAd *)interstitialAd + didReceiveAppEvent:(nonnull NSString *)name + withInfo:(nullable NSString *)info { + [self.manager onAppEvent:self name:name data:info]; +} + +@end + +#pragma mark - FLTRewardedAd +@implementation FLTRewardedAd { + GADRewardedAd *_rewardedView; + FLTAdRequest *_adRequest; + NSString *_adUnitId; +} + +- (instancetype)initWithAdUnitId:(NSString *_Nonnull)adUnitId + request:(FLTAdRequest *_Nonnull)request + adId:(NSNumber *_Nonnull)adId { + self = [super init]; + if (self) { + self.adId = adId; + _adRequest = request; + _adUnitId = [adUnitId copy]; + } + return self; +} + +- (GADRewardedAd *_Nullable)rewardedAd { + return _rewardedView; +} + +- (void)load { + GADRequest *request; + if ([_adRequest isKindOfClass:[FLTGAMAdRequest class]]) { + FLTGAMAdRequest *gamRequest = (FLTGAMAdRequest *)_adRequest; + request = [gamRequest asGAMRequest:_adUnitId]; + } else if ([_adRequest isKindOfClass:[FLTAdRequest class]]) { + request = [_adRequest asGADRequest:_adUnitId]; + } else { + NSLog(@"A null or invalid ad request was provided."); + return; + } + + [GADRewardedAd loadWithAdUnitID:_adUnitId + request:request + completionHandler:^(GADRewardedAd *_Nullable rewardedAd, + NSError *_Nullable error) { + if (error) { + [self.manager onAdFailedToLoad:self error:error]; + return; + } + __weak FLTRewardedAd *weakSelf = self; + rewardedAd.paidEventHandler = ^(GADAdValue *_Nonnull value) { + if (weakSelf.manager == nil) { + return; + } + [weakSelf.manager + onPaidEvent:weakSelf + value:[[FLTAdValue alloc] + initWithValue:value.value + precision:(NSInteger)value.precision + currencyCode:value.currencyCode]]; + }; + rewardedAd.fullScreenContentDelegate = self; + self->_rewardedView = rewardedAd; + [self.manager onAdLoaded:self + responseInfo:rewardedAd.responseInfo]; + }]; +} + +- (void)show { + if (self.rewardedAd) { + [self.rewardedAd + presentFromRootViewController:nil + userDidEarnRewardHandler:^{ + GADAdReward *reward = self.rewardedAd.adReward; + FLTRewardItem *fltReward = + [[FLTRewardItem alloc] initWithAmount:reward.amount + type:reward.type]; + [self.manager onRewardedAdUserEarnedReward:self + reward:fltReward]; + }]; + } else { + NSLog(@"RewardedAd failed to show because the ad was not ready."); + } +} + +- (void)setServerSideVerificationOptions: + (FLTServerSideVerificationOptions *_Nullable)serverSideVerificationOptions { + if (_rewardedView) { + _rewardedView.serverSideVerificationOptions = + [serverSideVerificationOptions asGADServerSideVerificationOptions]; + } else { + NSLog(@"Error - rewardedView is nil in " + @"FLTRewardedAd.setServerSideVerificationOptions"); + } +} + +@end + +#pragma mark - FLTRewardedInterstitialAd +@implementation FLTRewardedInterstitialAd { + GADRewardedInterstitialAd *_rewardedInterstitialView; + FLTAdRequest *_adRequest; + NSString *_adUnitId; +} + +- (instancetype)initWithAdUnitId:(NSString *_Nonnull)adUnitId + request:(FLTAdRequest *_Nonnull)request + adId:(NSNumber *_Nonnull)adId { + self = [super init]; + if (self) { + self.adId = adId; + _adRequest = request; + _adUnitId = [adUnitId copy]; + } + return self; +} + +- (GADRewardedInterstitialAd *_Nullable)rewardedInterstitialAd { + return _rewardedInterstitialView; +} + +- (void)load { + GADRequest *request; + if ([_adRequest isKindOfClass:[FLTGAMAdRequest class]]) { + FLTGAMAdRequest *gamRequest = (FLTGAMAdRequest *)_adRequest; + request = [gamRequest asGAMRequest:_adUnitId]; + } else if ([_adRequest isKindOfClass:[FLTAdRequest class]]) { + request = [_adRequest asGADRequest:_adUnitId]; + } else { + NSLog(@"A null or invalid ad request was provided."); + return; + } + + [GADRewardedInterstitialAd + loadWithAdUnitID:_adUnitId + request:request + completionHandler:^( + GADRewardedInterstitialAd *_Nullable rewardedInterstitialAd, + NSError *_Nullable error) { + if (error) { + [self.manager onAdFailedToLoad:self error:error]; + return; + } + __weak FLTRewardedInterstitialAd *weakSelf = self; + rewardedInterstitialAd.paidEventHandler = + ^(GADAdValue *_Nonnull value) { + if (weakSelf.manager == nil) { + return; + } + [weakSelf.manager + onPaidEvent:weakSelf + value:[[FLTAdValue alloc] + initWithValue:value.value + precision:(NSInteger)value.precision + currencyCode:value.currencyCode]]; + }; + rewardedInterstitialAd.fullScreenContentDelegate = self; + self->_rewardedInterstitialView = rewardedInterstitialAd; + [self.manager onAdLoaded:self + responseInfo:rewardedInterstitialAd.responseInfo]; + }]; +} + +- (void)show { + if (self.rewardedInterstitialAd) { + [self.rewardedInterstitialAd + presentFromRootViewController:nil + userDidEarnRewardHandler:^{ + GADAdReward *reward = self.rewardedInterstitialAd.adReward; + FLTRewardItem *fltReward = + [[FLTRewardItem alloc] initWithAmount:reward.amount + type:reward.type]; + [self.manager + onRewardedInterstitialAdUserEarnedReward:self + reward:fltReward]; + }]; + } else { + NSLog( + @"RewardedInterstitialAd failed to show because the ad was not ready."); + } +} + +- (void)setServerSideVerificationOptions: + (FLTServerSideVerificationOptions *_Nullable)serverSideVerificationOptions { + if (_rewardedInterstitialView) { + _rewardedInterstitialView.serverSideVerificationOptions = + [serverSideVerificationOptions asGADServerSideVerificationOptions]; + } else { + NSLog(@"Error - rewardedView is nil in " + @"FLTRewardedInterstitialAd.setServerSideVerificationOptions"); + } +} + +@end + +#pragma mark - FLTAppOpenAd +@implementation FLTAppOpenAd { + GADAppOpenAd *_appOpenAd; + FLTAdRequest *_adRequest; + NSString *_adUnitId; +} + +- (instancetype _Nonnull)initWithAdUnitId:(NSString *_Nonnull)adUnitId + request:(FLTAdRequest *_Nonnull)request + adId:(NSNumber *_Nonnull)adId { + self = [super init]; + if (self) { + self.adId = adId; + _adRequest = request; + _adUnitId = [adUnitId copy]; + } + return self; +} + +- (GADAppOpenAd *_Nullable)appOpenAd { + return _appOpenAd; +} + +- (void)load { + GADRequest *request; + if ([_adRequest isKindOfClass:[FLTGAMAdRequest class]]) { + FLTGAMAdRequest *gamRequest = (FLTGAMAdRequest *)_adRequest; + request = [gamRequest asGAMRequest:_adUnitId]; + } else if ([_adRequest isKindOfClass:[FLTAdRequest class]]) { + request = [_adRequest asGADRequest:_adUnitId]; + } else { + NSLog(@"A null or invalid ad request was provided."); + return; + } + + [GADAppOpenAd loadWithAdUnitID:_adUnitId + request:request + completionHandler:^(GADAppOpenAd *_Nullable appOpenAd, + NSError *_Nullable error) { + if (error) { + [self.manager onAdFailedToLoad:self error:error]; + return; + } + __weak FLTAppOpenAd *weakSelf = self; + appOpenAd.paidEventHandler = ^(GADAdValue *_Nonnull value) { + if (weakSelf.manager == nil) { + return; + } + [weakSelf.manager + onPaidEvent:weakSelf + value:[[FLTAdValue alloc] + initWithValue:value.value + precision:(NSInteger)value.precision + currencyCode:value.currencyCode]]; + }; + appOpenAd.fullScreenContentDelegate = self; + + self->_appOpenAd = appOpenAd; + [self.manager onAdLoaded:self + responseInfo:appOpenAd.responseInfo]; + }]; +} + +- (void)show { + if (self.appOpenAd) { + [self.appOpenAd presentFromRootViewController:nil]; + } else { + NSLog(@"AppOpenAd failed to show because the ad was not ready."); + } +} + +@end + +#pragma mark - FLTNativeAd + +@implementation FLTNativeAd { + NSString *_adUnitId; + FLTAdRequest *_adRequest; + NSObject *_nativeAdFactory; + NSDictionary *_customOptions; + UIView *_view; + GADAdLoader *_adLoader; + FLTNativeAdOptions *_nativeAdOptions; + FLTNativeTemplateStyle *_nativeTemplateStyle; +} + +- (instancetype _Nonnull) + initWithAdUnitId:(NSString *_Nonnull)adUnitId + request:(FLTAdRequest *_Nonnull)request + nativeAdFactory:(NSObject *_Nonnull)nativeAdFactory + customOptions:(NSDictionary *_Nullable)customOptions + rootViewController:(UIViewController *_Nonnull)rootViewController + adId:(NSNumber *_Nonnull)adId + nativeAdOptions:(FLTNativeAdOptions *_Nullable)nativeAdOptions + nativeTemplateStyle:(FLTNativeTemplateStyle *_Nullable)nativeTemplateStyle { + self = [super init]; + if (self) { + self.adId = adId; + _adUnitId = adUnitId; + _adRequest = request; + _nativeAdFactory = nativeAdFactory; + _customOptions = customOptions; + NSArray *adLoaderOptions = + (nativeAdOptions == nil || [[NSNull null] isEqual:nativeAdOptions]) + ? @[] + : nativeAdOptions.asGADAdLoaderOptions; + + _adLoader = + [[GADAdLoader alloc] initWithAdUnitID:_adUnitId + rootViewController:rootViewController + adTypes:@[ GADAdLoaderAdTypeNative ] + options:adLoaderOptions]; + _nativeAdOptions = nativeAdOptions; + _nativeTemplateStyle = nativeTemplateStyle; + self.adLoader.delegate = self; + } + return self; +} + +- (GADAdLoader *_Nonnull)adLoader { + return _adLoader; +} + +- (void)load { + GADRequest *request; + if ([_adRequest isKindOfClass:[FLTGAMAdRequest class]]) { + FLTGAMAdRequest *gamRequest = (FLTGAMAdRequest *)_adRequest; + request = [gamRequest asGAMRequest:_adUnitId]; + } else { + request = [_adRequest asGADRequest:_adUnitId]; + } + + [self.adLoader loadRequest:request]; +} + +#pragma mark - GADNativeAdLoaderDelegate + +- (void)adLoader:(GADAdLoader *)adLoader + didReceiveNativeAd:(GADNativeAd *)nativeAd { + // Use Nil instead of Null to fix crash with Swift integrations. + NSDictionary *customOptions = + [[NSNull null] isEqual:_customOptions] ? nil : _customOptions; + if ([FLTAdUtil isNotNull:_nativeTemplateStyle]) { + _view = [_nativeTemplateStyle getDisplayedView:nativeAd]; + } else if ([FLTAdUtil isNotNull:_nativeAdFactory]) { + _view = [_nativeAdFactory createNativeAd:nativeAd + customOptions:customOptions]; + } + + nativeAd.delegate = self; + + __weak FLTNativeAd *weakSelf = self; + nativeAd.paidEventHandler = ^(GADAdValue *_Nonnull value) { + if (weakSelf.manager == nil) { + return; + } + [weakSelf.manager + onPaidEvent:weakSelf + value:[[FLTAdValue alloc] initWithValue:value.value + precision:(NSInteger)value.precision + currencyCode:value.currencyCode]]; + }; + [manager onAdLoaded:self responseInfo:nativeAd.responseInfo]; +} + +- (void)adLoader:(GADAdLoader *)adLoader + didFailToReceiveAdWithError:(NSError *)error { + [manager onAdFailedToLoad:self error:error]; +} + +#pragma mark - GADNativeAdDelegate + +- (void)nativeAdDidRecordClick:(GADNativeAd *)nativeAd { + [manager adDidRecordClick:self]; +} + +- (void)nativeAdDidRecordImpression:(GADNativeAd *)nativeAd { + [manager onNativeAdImpression:self]; +} + +- (void)nativeAdWillPresentScreen:(GADNativeAd *)nativeAd { + [manager onNativeAdWillPresentScreen:self]; +} + +- (void)nativeAdWillDismissScreen:(nonnull GADNativeAd *)nativeAd { + [manager onNativeAdWillDismissScreen:self]; +} + +- (void)nativeAdDidDismissScreen:(GADNativeAd *)nativeAd { + [manager onNativeAdDidDismissScreen:self]; +} + +#pragma mark - FlutterPlatformView +- (UIView *)view { + return _view; +} + +@synthesize manager; + +@end + +@implementation FLTRewardItem +- (instancetype _Nonnull)initWithAmount:(NSNumber *_Nonnull)amount + type:(NSString *_Nonnull)type { + self = [super init]; + if (self) { + _amount = amount; + _type = type; + } + return self; +} + +- (BOOL)isEqual:(id)other { + if (other == self) { + return YES; + } else if (![super isEqual:other]) { + return NO; + } else { + FLTRewardItem *item = other; + return [_amount isEqual:item.amount] && [_type isEqual:item.type]; + } +} + +- (NSUInteger)hash { + return _amount.hash | _type.hash; +} +@end + +@implementation FLTAdValue +- (instancetype _Nonnull)initWithValue:(NSDecimalNumber *_Nonnull)value + precision:(NSInteger)precision + currencyCode:(NSString *_Nonnull)currencyCode { + self = [super init]; + if (self) { + _valueMicros = + [value decimalNumberByMultiplyingBy:[[NSDecimalNumber alloc] + initWithInteger:1000000]]; + _precision = precision; + _currencyCode = currencyCode; + } + return self; +} +@end + +@implementation FLTVideoOptions +- (instancetype _Nonnull) + initWithClickToExpandRequested:(NSNumber *_Nullable)clickToExpandRequested + customControlsRequested:(NSNumber *_Nullable)customControlsRequested + startMuted:(NSNumber *_Nullable)startMuted { + self = [super init]; + if (self) { + _clickToExpandRequested = clickToExpandRequested; + _customControlsRequested = customControlsRequested; + _startMuted = startMuted; + } + return self; +} + +- (GADVideoOptions *_Nonnull)asGADVideoOptions { + GADVideoOptions *options = [[GADVideoOptions alloc] init]; + if ([FLTAdUtil isNotNull:_clickToExpandRequested]) { + options.clickToExpandRequested = _clickToExpandRequested.boolValue; + } + if ([FLTAdUtil isNotNull:_customControlsRequested]) { + options.customControlsRequested = _customControlsRequested.boolValue; + } + if ([FLTAdUtil isNotNull:_startMuted]) { + options.startMuted = _startMuted.boolValue; + } + return options; +} + +@end + +@implementation FLTNativeAdOptions +- (instancetype _Nonnull) + initWithAdChoicesPlacement:(NSNumber *_Nullable)adChoicesPlacement + mediaAspectRatio:(NSNumber *_Nullable)mediaAspectRatio + videoOptions:(FLTVideoOptions *_Nullable)videoOptions + requestCustomMuteThisAd:(NSNumber *_Nullable)requestCustomMuteThisAd + shouldRequestMultipleImages: + (NSNumber *_Nullable)shouldRequestMultipleImages + shouldReturnUrlsForImageAssets: + (NSNumber *_Nullable)shouldReturnUrlsForImageAssets { + self = [super init]; + if (self) { + _adChoicesPlacement = adChoicesPlacement; + _mediaAspectRatio = mediaAspectRatio; + _videoOptions = videoOptions; + _requestCustomMuteThisAd = requestCustomMuteThisAd; + _shouldRequestMultipleImages = shouldRequestMultipleImages; + _shouldReturnUrlsForImageAssets = shouldReturnUrlsForImageAssets; + } + return self; +} + +- (NSArray *_Nonnull)asGADAdLoaderOptions { + NSMutableArray *options = [NSMutableArray array]; + + GADNativeAdImageAdLoaderOptions *imageOptions = + [[GADNativeAdImageAdLoaderOptions alloc] init]; + if ([FLTAdUtil isNotNull:_shouldReturnUrlsForImageAssets]) { + imageOptions.disableImageLoading = + _shouldReturnUrlsForImageAssets.boolValue; + } + if ([FLTAdUtil isNotNull:_shouldRequestMultipleImages]) { + imageOptions.shouldRequestMultipleImages = + _shouldRequestMultipleImages.boolValue; + } + [options addObject:imageOptions]; + + if ([FLTAdUtil isNotNull:_adChoicesPlacement]) { + GADNativeAdViewAdOptions *adViewOptions = + [[GADNativeAdViewAdOptions alloc] init]; + switch (_adChoicesPlacement.intValue) { + case 0: + adViewOptions.preferredAdChoicesPosition = + GADAdChoicesPositionTopRightCorner; + break; + case 1: + adViewOptions.preferredAdChoicesPosition = + GADAdChoicesPositionTopLeftCorner; + break; + case 2: + adViewOptions.preferredAdChoicesPosition = + GADAdChoicesPositionBottomRightCorner; + break; + case 3: + adViewOptions.preferredAdChoicesPosition = + GADAdChoicesPositionBottomLeftCorner; + break; + default: + NSLog(@"AdChoicesPlacement should be an int in the range [0, 3]: %d", + _adChoicesPlacement.intValue); + break; + } + [options addObject:adViewOptions]; + } + + if ([FLTAdUtil isNotNull:_mediaAspectRatio]) { + GADNativeAdMediaAdLoaderOptions *mediaOptions = + [[GADNativeAdMediaAdLoaderOptions alloc] init]; + switch (_mediaAspectRatio.intValue) { + case 0: + mediaOptions.mediaAspectRatio = GADMediaAspectRatioUnknown; + break; + case 1: + mediaOptions.mediaAspectRatio = GADMediaAspectRatioAny; + break; + case 2: + mediaOptions.mediaAspectRatio = GADMediaAspectRatioLandscape; + break; + case 3: + mediaOptions.mediaAspectRatio = GADMediaAspectRatioPortrait; + break; + case 4: + mediaOptions.mediaAspectRatio = GADMediaAspectRatioSquare; + break; + default: + NSLog(@"MediaAspectRatio should be an int in the range [0, 4]: %d", + _mediaAspectRatio.intValue); + break; + } + [options addObject:mediaOptions]; + } + + if ([FLTAdUtil isNotNull:_videoOptions]) { + [options addObject:_videoOptions.asGADVideoOptions]; + } + return options; +} + +@end diff --git a/mih_ui/android/build/ios/SourcePackages/google_mobile_ads-8.0.0/ios/google_mobile_ads/Sources/google_mobile_ads/FLTAppStateNotifier.m b/mih_ui/android/build/ios/SourcePackages/google_mobile_ads-8.0.0/ios/google_mobile_ads/Sources/google_mobile_ads/FLTAppStateNotifier.m new file mode 100644 index 00000000..d4ef51ad --- /dev/null +++ b/mih_ui/android/build/ios/SourcePackages/google_mobile_ads-8.0.0/ios/google_mobile_ads/Sources/google_mobile_ads/FLTAppStateNotifier.m @@ -0,0 +1,142 @@ +// Copyright 2021 Google LLC +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// https://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +#import "FLTAppStateNotifier.h" + +@implementation FLTAppStateNotifier { + FlutterEventChannel *_eventChannel; + FlutterMethodChannel *_methodChannel; + FlutterEventSink _events; + NSMutableArray> *_observers; + BOOL _applicationInBackground; +} + +- (instancetype _Nonnull)initWithBinaryMessenger: + (NSObject *_Nonnull)messenger { + self = [self init]; + if (self) { + FLTAppStateNotifier *__weak weakSelf = self; + _observers = [[NSMutableArray alloc] init]; + _eventChannel = [FlutterEventChannel + eventChannelWithName: + @"plugins.flutter.io/google_mobile_ads/app_state_event" + binaryMessenger:messenger]; + _methodChannel = [FlutterMethodChannel + methodChannelWithName: + @"plugins.flutter.io/google_mobile_ads/app_state_method" + binaryMessenger:messenger]; + [_eventChannel setStreamHandler:self]; + [_methodChannel setMethodCallHandler:^(FlutterMethodCall *_Nonnull call, + FlutterResult _Nonnull result) { + [weakSelf handleMethodCall:call result:result]; + }]; + } + return self; +} + +- (void)handleMethodCall:(FlutterMethodCall *_Nonnull)call + result:(FlutterResult _Nonnull)result { + if ([call.method isEqualToString:@"start"]) { + [self addAppStateObservers]; + result(nil); + } else if ([call.method isEqualToString:@"stop"]) { + [self removeAppStateObservers]; + result(nil); + } else { + result(FlutterMethodNotImplemented); + } +} + +- (void)addAppStateObservers { + if (_observers.count > 0) { + NSLog(@"FLTAppStateNotifier: Already listening for foreground/background " + @"changes."); + return; + } + + id foregroundObserver = [NSNotificationCenter.defaultCenter + addObserverForName:UIApplicationWillEnterForegroundNotification + object:nil + queue:nil + usingBlock:^(NSNotification *_Nonnull note) { + [self handleWillEnterForeground]; + }]; + [_observers addObject:foregroundObserver]; + + id backgroundObserver = [NSNotificationCenter.defaultCenter + addObserverForName:UIApplicationDidEnterBackgroundNotification + object:nil + queue:nil + usingBlock:^(NSNotification *_Nonnull note) { + [self handleDidEnterBackground]; + }]; + [_observers addObject:backgroundObserver]; + + if (@available(iOS 13.0, *)) { + id foregroundSceneObserver = [NSNotificationCenter.defaultCenter + addObserverForName:UISceneWillEnterForegroundNotification + object:nil + queue:nil + usingBlock:^(NSNotification *_Nonnull note) { + [self handleWillEnterForeground]; + }]; + [_observers addObject:foregroundSceneObserver]; + + id backgroundSceneObserver = [NSNotificationCenter.defaultCenter + addObserverForName:UISceneDidEnterBackgroundNotification + object:nil + queue:nil + usingBlock:^(NSNotification *_Nonnull note) { + [self handleDidEnterBackground]; + }]; + [_observers addObject:backgroundSceneObserver]; + } +} + +- (void)removeAppStateObservers { + while (_observers.count > 0) { + [NSNotificationCenter.defaultCenter removeObserver:_observers.lastObject]; + [_observers removeLastObject]; + } +} + +- (void)handleWillEnterForeground { + if (!_applicationInBackground) { + return; + } + _applicationInBackground = NO; + _events(@"foreground"); +} + +- (void)handleDidEnterBackground { + if (_applicationInBackground) { + return; + } + _applicationInBackground = YES; + _events(@"background"); +} + +- (FlutterError *_Nullable)onCancelWithArguments:(id _Nullable)arguments { + _events = nil; + return nil; +} + +- (FlutterError *_Nullable)onListenWithArguments:(id _Nullable)arguments + eventSink: + (nonnull FlutterEventSink)events { + _events = events; + return nil; +} + +@end diff --git a/mih_ui/android/build/ios/SourcePackages/google_mobile_ads-8.0.0/ios/google_mobile_ads/Sources/google_mobile_ads/FLTGoogleMobileAdsCollection_Internal.m b/mih_ui/android/build/ios/SourcePackages/google_mobile_ads-8.0.0/ios/google_mobile_ads/Sources/google_mobile_ads/FLTGoogleMobileAdsCollection_Internal.m new file mode 100644 index 00000000..6efb188e --- /dev/null +++ b/mih_ui/android/build/ios/SourcePackages/google_mobile_ads-8.0.0/ios/google_mobile_ads/Sources/google_mobile_ads/FLTGoogleMobileAdsCollection_Internal.m @@ -0,0 +1,70 @@ +// Copyright 2021 Google LLC +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// https://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +#import "FLTGoogleMobileAdsCollection_Internal.h" + +@implementation FLTGoogleMobileAdsCollection { + NSMutableDictionary> *_dictionary; + dispatch_queue_t _lockQueue; +} + +- (instancetype _Nonnull)init { + self = [super init]; + if (self) { + _dictionary = [[NSMutableDictionary alloc] init]; + _lockQueue = dispatch_queue_create("FLTGoogleMobileAdsCollection", + DISPATCH_QUEUE_SERIAL); + } + return self; +} + +- (void)setObject:(id _Nonnull)object forKey:(id _Nonnull)key { + if (key && object) { + dispatch_async(_lockQueue, ^{ + self->_dictionary[key] = object; + }); + } +} + +- (void)removeObjectForKey:(id _Nonnull)key { + if (key != nil) { + dispatch_async(_lockQueue, ^{ + [self->_dictionary removeObjectForKey:key]; + }); + } +} + +- (id _Nullable)objectForKey:(id _Nonnull)key { + id __block object = nil; + dispatch_sync(_lockQueue, ^{ + object = _dictionary[key]; + }); + return object; +} + +- (NSArray *_Nonnull)allKeysForObject:(id _Nonnull)object { + NSArray __block *keys = nil; + dispatch_sync(_lockQueue, ^{ + keys = [_dictionary allKeysForObject:object]; + }); + return keys; +} + +- (void)removeAllObjects { + dispatch_async(_lockQueue, ^{ + [self->_dictionary removeAllObjects]; + }); +} + +@end diff --git a/mih_ui/android/build/ios/SourcePackages/google_mobile_ads-8.0.0/ios/google_mobile_ads/Sources/google_mobile_ads/FLTGoogleMobileAdsPlugin.m b/mih_ui/android/build/ios/SourcePackages/google_mobile_ads-8.0.0/ios/google_mobile_ads/Sources/google_mobile_ads/FLTGoogleMobileAdsPlugin.m new file mode 100644 index 00000000..ae62c703 --- /dev/null +++ b/mih_ui/android/build/ios/SourcePackages/google_mobile_ads-8.0.0/ios/google_mobile_ads/Sources/google_mobile_ads/FLTGoogleMobileAdsPlugin.m @@ -0,0 +1,592 @@ +// Copyright 2021 Google LLC +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// https://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +#import "FLTGoogleMobileAdsPlugin.h" +#import "FLTAdUtil.h" +#import "FLTAppStateNotifier.h" +#import "FLTConstants.h" +#import "FLTNSString.h" +#import "FLTUserMessagingPlatformManager.h" +@import webview_flutter_wkwebview; + +@interface FLTGoogleMobileAdsPlugin () +@property(nonatomic, retain) FlutterMethodChannel *channel; +@property NSObject *registrar; +@property NSMutableDictionary> + *nativeAdFactories; +@end + +/// Initialization handler for GMASDK. Invokes result at most once. +@interface FLTInitializationHandler : NSObject +- (instancetype)initWithResult:(FlutterResult)result; +- (void)handleInitializationComplete:(GADInitializationStatus *_Nonnull)status; +@end + +@interface GADMobileAds (Plugin) +- (void)setPlugin:(nullable NSString *)plugin; +@end + +@implementation FLTInitializationHandler { + FlutterResult _result; + BOOL _isInitializationCompleted; +} + +- (instancetype)initWithResult:(FlutterResult)result { + self = [super init]; + if (self) { + _isInitializationCompleted = false; + _result = result; + } + return self; +} + +- (void)handleInitializationComplete:(GADInitializationStatus *_Nonnull)status { + if (_isInitializationCompleted) { + return; + } + _result([[FLTInitializationStatus alloc] initWithStatus:status]); + _isInitializationCompleted = true; + GADMobileAds *mobileAds = GADMobileAds.sharedInstance; + if ([mobileAds respondsToSelector:@selector(setPlugin:)]) { + [mobileAds setPlugin:FLT_REQUEST_AGENT_VERSIONED]; + } +} + +@end + +@implementation FLTGoogleMobileAdsPlugin { + NSMutableDictionary> *_nativeAdFactories; + FLTAdInstanceManager *_manager; + id _mediationNetworkExtrasProvider; + FLTGoogleMobileAdsReaderWriter *_readerWriter; + FLTAppStateNotifier *_appStateNotifier; + FLTUserMessagingPlatformManager *_userMessagingPlatformManager; + __weak FlutterAppDelegate *_appDelegate; +} + ++ (void)registerWithRegistrar:(NSObject *)registrar { + FLTGoogleMobileAdsPlugin *instance = [[FLTGoogleMobileAdsPlugin alloc] + initWithRegistrar:registrar binaryMessenger:registrar.messenger]; + [registrar publish:instance]; + + FLTGoogleMobileAdsReaderWriter *readerWriter = + [[FLTGoogleMobileAdsReaderWriter alloc] init]; + instance->_readerWriter = readerWriter; + + NSObject *codec = + [FlutterStandardMethodCodec codecWithReaderWriter:readerWriter]; + + FlutterMethodChannel *channel = [FlutterMethodChannel + methodChannelWithName:@"plugins.flutter.io/google_mobile_ads" + binaryMessenger:[registrar messenger] + codec:codec]; + [registrar addMethodCallDelegate:instance channel:channel]; + + FLTNewGoogleMobileAdsViewFactory *viewFactory = + [[FLTNewGoogleMobileAdsViewFactory alloc] + initWithManager:instance->_manager]; + [registrar + registerViewFactory:viewFactory + withId:@"plugins.flutter.io/google_mobile_ads/ad_widget"]; + [registrar addApplicationDelegate:instance]; +} + +- (instancetype)init { + self = [super init]; + return self; +} + +- (BOOL)application:(UIApplication *)application + didFinishLaunchingWithOptions:(NSDictionary *)launchOptions { + _appDelegate = (FlutterAppDelegate *)application.delegate; + return YES; +} + +- (instancetype)initWithRegistrar: (NSObject*)registrar + binaryMessenger: (id)binaryMessenger { + self = [self init]; + if (self) { + _registrar = registrar; + _nativeAdFactories = [NSMutableDictionary dictionary]; + _manager = + [[FLTAdInstanceManager alloc] initWithBinaryMessenger:binaryMessenger]; + _appStateNotifier = + [[FLTAppStateNotifier alloc] initWithBinaryMessenger:binaryMessenger]; + _userMessagingPlatformManager = [[FLTUserMessagingPlatformManager alloc] + initWithBinaryMessenger:binaryMessenger]; + } + + return self; +} + ++ (BOOL)registerMediationNetworkExtrasProvider: + (id _Nonnull) + mediationNetworkExtrasProvider + registry: + (id _Nonnull) + registry { + NSString *pluginClassName = + NSStringFromClass([FLTGoogleMobileAdsPlugin class]); + FLTGoogleMobileAdsPlugin *adMobPlugin = (FLTGoogleMobileAdsPlugin *)[registry + valuePublishedByPlugin:pluginClassName]; + if (!adMobPlugin) { + NSLog(@"Could not find a %@ instance registering mediation extras " + @"provider. The plugin may " + @"have not been registered.", + pluginClassName); + return NO; + } + + adMobPlugin->_mediationNetworkExtrasProvider = mediationNetworkExtrasProvider; + adMobPlugin->_readerWriter.mediationNetworkExtrasProvider = + mediationNetworkExtrasProvider; + + return YES; +} + ++ (void)unregisterMediationNetworkExtrasProvider: + (id _Nonnull)registry { + NSString *pluginClassName = + NSStringFromClass([FLTGoogleMobileAdsPlugin class]); + FLTGoogleMobileAdsPlugin *adMobPlugin = (FLTGoogleMobileAdsPlugin *)[registry + valuePublishedByPlugin:pluginClassName]; + if (!adMobPlugin) { + NSLog(@"Could not find a %@ instance deregistering mediation extras " + @"provider. The plugin may " + @"have not been registered.", + pluginClassName); + return; + } + + adMobPlugin->_mediationNetworkExtrasProvider = nil; + adMobPlugin->_readerWriter.mediationNetworkExtrasProvider = nil; +} + ++ (BOOL)registerNativeAdFactory:(id)registry + factoryId:(NSString *)factoryId + nativeAdFactory:(id)nativeAdFactory { + NSString *pluginClassName = + NSStringFromClass([FLTGoogleMobileAdsPlugin class]); + FLTGoogleMobileAdsPlugin *adMobPlugin = (FLTGoogleMobileAdsPlugin *)[registry + valuePublishedByPlugin:pluginClassName]; + if (!adMobPlugin) { + NSString *reason = + [NSString stringWithFormat:@"Could not find a %@ instance. The plugin " + @"may have not been registered.", + pluginClassName]; + [NSException exceptionWithName:NSInvalidArgumentException + reason:reason + userInfo:nil]; + } + + if (adMobPlugin.nativeAdFactories[factoryId]) { + NSLog(@"A NativeAdFactory with the following factoryId already exists: %@", + factoryId); + return NO; + } + + [adMobPlugin.nativeAdFactories setValue:nativeAdFactory forKey:factoryId]; + return YES; +} + ++ (id)unregisterNativeAdFactory: + (id)registry + factoryId:(NSString *)factoryId { + FLTGoogleMobileAdsPlugin *adMobPlugin = (FLTGoogleMobileAdsPlugin *)[registry + valuePublishedByPlugin:NSStringFromClass( + [FLTGoogleMobileAdsPlugin class])]; + + id factory = adMobPlugin.nativeAdFactories[factoryId]; + if (factory) + [adMobPlugin.nativeAdFactories removeObjectForKey:factoryId]; + return factory; +} + +- (UIViewController *)rootController { + UIViewController* root = _registrar.viewController; + if ([FLTAdUtil isNull:root]) { +// UIApplication.sharedApplication.delegate.window is not guaranteed to be +// set. Use the keyWindow in this case. +#pragma clang diagnostic push +#pragma clang diagnostic ignored "-Wdeprecated-declarations" + root = UIApplication.sharedApplication.keyWindow.rootViewController; +#pragma clang diagnostic pop + } + + // Get the presented view controller. This fixes an issue in the add to app + // case: https://github.com/googleads/googleads-mobile-flutter/issues/700 + UIViewController *presentedViewController = root; + while (presentedViewController.presentedViewController && + ![presentedViewController.presentedViewController isBeingDismissed]) { + if ([presentedViewController isKindOfClass:[UITabBarController class]]) { + UITabBarController *tabBarController = + (UITabBarController *)presentedViewController; + presentedViewController = tabBarController.selectedViewController; + } else if ([presentedViewController + isKindOfClass:[UINavigationController class]]) { + UINavigationController *navigationController = + (UINavigationController *)presentedViewController; + presentedViewController = navigationController.visibleViewController; + } else { + presentedViewController = presentedViewController.presentedViewController; + } + } + return presentedViewController; +} + +- (void)handleMethodCall:(FlutterMethodCall *)call + result:(FlutterResult)result { + UIViewController *rootController = self.rootController; + + if ([call.method isEqualToString:@"MobileAds#initialize"]) { + FLTInitializationHandler *handler = + [[FLTInitializationHandler alloc] initWithResult:result]; + [[GADMobileAds sharedInstance] + startWithCompletionHandler:^(GADInitializationStatus *_Nonnull status) { + [handler handleInitializationComplete:status]; + }]; + } else if ([call.method isEqualToString:@"_init"]) { + [_manager disposeAllAds]; + result(nil); + } else if ([call.method isEqualToString:@"MobileAds#setSameAppKeyEnabled"]) { + GADRequestConfiguration *requestConfig = + GADMobileAds.sharedInstance.requestConfiguration; + NSNumber *isEnabled = call.arguments[@"isEnabled"]; + [requestConfig setPublisherFirstPartyIDEnabled:isEnabled.boolValue]; + result(nil); + } else if ([call.method isEqualToString:@"MobileAds#setAppMuted"]) { + GADMobileAds.sharedInstance.applicationMuted = + [call.arguments[@"muted"] boolValue]; + result(nil); + } else if ([call.method isEqualToString:@"MobileAds#setAppVolume"]) { + GADMobileAds.sharedInstance.applicationVolume = + [call.arguments[@"volume"] floatValue]; + result(nil); + } else if ([call.method + isEqualToString:@"MobileAds#disableSDKCrashReporting"]) { + [GADMobileAds.sharedInstance disableSDKCrashReporting]; + result(nil); + } else if ([call.method + isEqualToString:@"MobileAds#disableMediationInitialization"]) { + [GADMobileAds.sharedInstance disableMediationInitialization]; + result(nil); + } else if ([call.method isEqualToString:@"MobileAds#openDebugMenu"]) { + NSString *adUnitId = call.arguments[@"adUnitId"]; + GADDebugOptionsViewController *debugOptionsViewController = + [GADDebugOptionsViewController + debugOptionsViewControllerWithAdUnitID:adUnitId]; + [rootController presentViewController:debugOptionsViewController + animated:YES + completion:nil]; + result(nil); + } else if ([call.method isEqualToString:@"MobileAds#openAdInspector"]) { + [GADMobileAds.sharedInstance + presentAdInspectorFromViewController:rootController + completionHandler:^(NSError *error) { + if (error) { + result([FlutterError + errorWithCode:[[NSString alloc] + gma_initWithInt:error.code] + message:error.localizedDescription + details:error.domain]); + } else { + result(nil); + } + }]; + } else if ([call.method isEqualToString:@"MobileAds#getVersionString"]) { + result(GADGetStringFromVersionNumber( + GADMobileAds.sharedInstance.versionNumber)); + } else if ([call.method + isEqualToString:@"MobileAds#getRequestConfiguration"]) { + result(GADMobileAds.sharedInstance.requestConfiguration); + } else if ([call.method isEqualToString:@"MobileAds#registerWebView"]) { + UIViewController* viewController = _registrar.viewController; + NSNumber *webViewId = call.arguments[@"webViewId"]; + if ([viewController isKindOfClass:FlutterViewController.class]) { + FlutterEngine* engine = ((FlutterViewController*)viewController).engine; + WKWebView *webView = [FLTAdUtil getWebView:webViewId + flutterPluginRegistry:engine]; + [GADMobileAds.sharedInstance registerWebView:webView]; + } else if (!_appDelegate) { + NSLog(@"App delegate is null in MobileAds#registerWebView, skipping"); + } else { + WKWebView *webView = [FLTAdUtil getWebView:webViewId + flutterPluginRegistry:_appDelegate]; + [GADMobileAds.sharedInstance registerWebView:webView]; + } + result(nil); + } else if ([call.method + isEqualToString:@"MobileAds#updateRequestConfiguration"]) { + NSString *maxAdContentRating = call.arguments[@"maxAdContentRating"]; + NSNumber *tagForChildDirectedTreatment = + call.arguments[@"tagForChildDirectedTreatment"]; + NSNumber *tagForUnderAgeOfConsent = + call.arguments[@"tagForUnderAgeOfConsent"]; + NSArray *testDeviceIds = call.arguments[@"testDeviceIds"]; + + if (maxAdContentRating != NULL && maxAdContentRating != (id)[NSNull null]) { + if ([maxAdContentRating isEqualToString:@"G"]) { + GADMobileAds.sharedInstance.requestConfiguration.maxAdContentRating = + GADMaxAdContentRatingGeneral; + } else if ([maxAdContentRating isEqualToString:@"PG"]) { + GADMobileAds.sharedInstance.requestConfiguration.maxAdContentRating = + GADMaxAdContentRatingParentalGuidance; + } else if ([maxAdContentRating isEqualToString:@"T"]) { + GADMobileAds.sharedInstance.requestConfiguration.maxAdContentRating = + GADMaxAdContentRatingTeen; + } else if ([maxAdContentRating isEqualToString:@"MA"]) { + GADMobileAds.sharedInstance.requestConfiguration.maxAdContentRating = + GADMaxAdContentRatingMatureAudience; + } + } + if (tagForChildDirectedTreatment != NULL && + tagForChildDirectedTreatment != (id)[NSNull null]) { + switch ([tagForChildDirectedTreatment intValue]) { + case 0: + GADMobileAds.sharedInstance.requestConfiguration + .tagForChildDirectedTreatment = @NO; + break; + case 1: + GADMobileAds.sharedInstance.requestConfiguration + .tagForChildDirectedTreatment = @YES; + break; + } + } + if (tagForUnderAgeOfConsent != NULL && + tagForUnderAgeOfConsent != (id)[NSNull null]) { + switch ([tagForUnderAgeOfConsent intValue]) { + case 0: + GADMobileAds.sharedInstance.requestConfiguration + .tagForUnderAgeOfConsent = @NO; + break; + case 1: + GADMobileAds.sharedInstance.requestConfiguration + .tagForUnderAgeOfConsent = @YES; + break; + } + } + if (testDeviceIds != NULL && testDeviceIds != (id)[NSNull null]) { + GADMobileAds.sharedInstance.requestConfiguration.testDeviceIdentifiers = + testDeviceIds; + } + result(nil); + } else if ([call.method isEqualToString:@"loadBannerAd"]) { + FLTBannerAd *ad = + [[FLTBannerAd alloc] initWithAdUnitId:call.arguments[@"adUnitId"] + size:call.arguments[@"size"] + request:call.arguments[@"request"] + rootViewController:rootController + adId:call.arguments[@"adId"]]; + [_manager loadAd:ad]; + result(nil); + } else if ([call.method isEqualToString:@"loadAdManagerBannerAd"]) { + FLTGAMBannerAd *ad = + [[FLTGAMBannerAd alloc] initWithAdUnitId:call.arguments[@"adUnitId"] + sizes:call.arguments[@"sizes"] + request:call.arguments[@"request"] + rootViewController:rootController + adId:call.arguments[@"adId"]]; + [_manager loadAd:ad]; + result(nil); + } else if ([call.method isEqualToString:@"loadFluidAd"]) { + FLTFluidGAMBannerAd *ad = [[FLTFluidGAMBannerAd alloc] + initWithAdUnitId:call.arguments[@"adUnitId"] + request:call.arguments[@"request"] + rootViewController:rootController + adId:call.arguments[@"adId"]]; + [_manager loadAd:ad]; + result(nil); + } else if ([call.method isEqualToString:@"loadNativeAd"]) { + NSString *factoryId = call.arguments[@"factoryId"]; + id factory = _nativeAdFactories[factoryId]; + FLTNativeTemplateStyle *templateStyle = + call.arguments[@"nativeTemplateStyle"]; + if ([FLTAdUtil isNull:factory] && [FLTAdUtil isNull:templateStyle]) { + NSString *message = + [NSString stringWithFormat:@"Can't find NativeAdFactory with id: %@ " + @"and nativeTemplateStyle is null", + factoryId]; + result([FlutterError errorWithCode:@"NativeAdError" + message:message + details:nil]); + return; + } + + FLTAdRequest *request; + if ([FLTAdUtil isNotNull:call.arguments[@"request"]]) { + request = call.arguments[@"request"]; + } else if ([FLTAdUtil isNotNull:call.arguments[@"adManagerRequest"]]) { + request = call.arguments[@"adManagerRequest"]; + } + + FLTNativeAd *ad = [[FLTNativeAd alloc] + initWithAdUnitId:call.arguments[@"adUnitId"] + request:request + nativeAdFactory:(id)factory + customOptions:call.arguments[@"customOptions"] + rootViewController:rootController + adId:call.arguments[@"adId"] + nativeAdOptions:call.arguments[@"nativeAdOptions"] + nativeTemplateStyle:call.arguments[@"nativeTemplateStyle"]]; + [_manager loadAd:ad]; + result(nil); + } else if ([call.method isEqualToString:@"loadInterstitialAd"]) { + FLTInterstitialAd *ad = + [[FLTInterstitialAd alloc] initWithAdUnitId:call.arguments[@"adUnitId"] + request:call.arguments[@"request"] + adId:call.arguments[@"adId"]]; + [_manager loadAd:ad]; + result(nil); + } else if ([call.method isEqualToString:@"loadAdManagerInterstitialAd"]) { + FLTGAMInterstitialAd *ad = [[FLTGAMInterstitialAd alloc] + initWithAdUnitId:call.arguments[@"adUnitId"] + request:call.arguments[@"request"] + adId:call.arguments[@"adId"]]; + [_manager loadAd:ad]; + result(nil); + } else if ([call.method isEqualToString:@"loadRewardedAd"]) { + FLTAdRequest *request; + if ([FLTAdUtil isNotNull:call.arguments[@"request"]]) { + request = call.arguments[@"request"]; + } else if ([FLTAdUtil isNotNull:call.arguments[@"adManagerRequest"]]) { + request = call.arguments[@"adManagerRequest"]; + } else { + result([FlutterError + errorWithCode:@"InvalidRequest" + message:@"A null or invalid ad request was provided." + details:nil]); + return; + } + + FLTRewardedAd *ad = + [[FLTRewardedAd alloc] initWithAdUnitId:call.arguments[@"adUnitId"] + request:request + adId:call.arguments[@"adId"]]; + [_manager loadAd:ad]; + result(nil); + } else if ([call.method isEqualToString:@"loadRewardedInterstitialAd"]) { + FLTAdRequest *request; + if ([FLTAdUtil isNotNull:call.arguments[@"request"]]) { + request = call.arguments[@"request"]; + } else if ([FLTAdUtil isNotNull:call.arguments[@"adManagerRequest"]]) { + request = call.arguments[@"adManagerRequest"]; + } else { + result([FlutterError + errorWithCode:@"InvalidRequest" + message:@"A null or invalid ad request was provided." + details:nil]); + return; + } + + FLTRewardedInterstitialAd *ad = [[FLTRewardedInterstitialAd alloc] + initWithAdUnitId:call.arguments[@"adUnitId"] + request:request + adId:call.arguments[@"adId"]]; + [_manager loadAd:ad]; + result(nil); + } else if ([call.method isEqualToString:@"loadAppOpenAd"]) { + FLTAdRequest *request; + if ([FLTAdUtil isNotNull:call.arguments[@"request"]]) { + request = call.arguments[@"request"]; + } else if ([FLTAdUtil isNotNull:call.arguments[@"adManagerRequest"]]) { + request = call.arguments[@"adManagerRequest"]; + } else { + result([FlutterError + errorWithCode:@"InvalidRequest" + message:@"A null or invalid ad request was provided." + details:nil]); + return; + } + FLTAppOpenAd *ad = + [[FLTAppOpenAd alloc] initWithAdUnitId:call.arguments[@"adUnitId"] + request:request + adId:call.arguments[@"adId"]]; + [_manager loadAd:ad]; + result(nil); + } else if ([call.method isEqualToString:@"disposeAd"]) { + [_manager dispose:call.arguments[@"adId"]]; + result(nil); + } else if ([call.method isEqualToString:@"showAdWithoutView"]) { + [_manager showAdWithID:call.arguments[@"adId"]]; + result(nil); + } else if ([call.method + isEqualToString:@"AdSize#getAnchoredAdaptiveBannerAdSize"]) { + FLTAnchoredAdaptiveBannerSize *size = [[FLTAnchoredAdaptiveBannerSize alloc] + initWithFactory:[[FLTAdSizeFactory alloc] init] + orientation:call.arguments[@"orientation"] + width:call.arguments[@"width"] + isLarge:false]; + if (IsGADAdSizeValid(size.size)) { + result(size.height); + } else { + result(nil); + } + } else if ([call.method isEqualToString:@"AdSize#getLargeAnchoredAdaptiveBannerAdSize"]) { + FLTAnchoredAdaptiveBannerSize *size = [[FLTAnchoredAdaptiveBannerSize alloc] + initWithFactory:[[FLTAdSizeFactory alloc] init] + orientation:call.arguments[@"orientation"] + width:call.arguments[@"width"] + isLarge:true]; + if (IsGADAdSizeValid(size.size)) { + result(size.height); + } else { + result(nil); + } + } else if ([call.method isEqualToString:@"getAdSize"]) { + id ad = [_manager adFor:call.arguments[@"adId"]]; + if ([FLTAdUtil isNull:ad]) { + // Called on an ad that hasn't been loaded yet. + result(nil); + } + if ([ad isKindOfClass:[FLTBannerAd class]]) { + FLTBannerAd *bannerAd = (FLTBannerAd *)ad; + result([bannerAd getAdSize]); + } else { + result(FlutterMethodNotImplemented); + } + } else if ([call.method isEqualToString:@"isCollapsible"]) { + id ad = [_manager adFor:call.arguments[@"adId"]]; + if ([FLTAdUtil isNull:ad]) { + // Called on an ad that hasn't been loaded yet. + result(@NO); + } + if ([ad isKindOfClass:[FLTBannerAd class]]) { + FLTBannerAd *bannerAd = (FLTBannerAd *)ad; + result(@([bannerAd isCollapsible])); + } else { + result(FlutterMethodNotImplemented); + } + } else if ([call.method + isEqualToString:@"setServerSideVerificationOptions"]) { + id ad = [_manager adFor:call.arguments[@"adId"]]; + FLTServerSideVerificationOptions *options = + call.arguments[@"serverSideVerificationOptions"]; + if ([ad isKindOfClass:[FLTRewardedAd class]]) { + FLTRewardedAd *rewardedAd = (FLTRewardedAd *)ad; + [rewardedAd setServerSideVerificationOptions:options]; + } else if ([ad isKindOfClass:[FLTRewardedInterstitialAd class]]) { + FLTRewardedInterstitialAd *rewardedInterstitialAd = + (FLTRewardedInterstitialAd *)ad; + [rewardedInterstitialAd setServerSideVerificationOptions:options]; + } else { + NSLog(@"Error - setServerSideVerificationOptions called on missing or " + @"invalid ad id: %@", + call.arguments[@"adId"]); + } + result(nil); + } else { + result(FlutterMethodNotImplemented); + } +} +@end diff --git a/mih_ui/android/build/ios/SourcePackages/google_mobile_ads-8.0.0/ios/google_mobile_ads/Sources/google_mobile_ads/FLTGoogleMobileAdsReaderWriter_Internal.m b/mih_ui/android/build/ios/SourcePackages/google_mobile_ads-8.0.0/ios/google_mobile_ads/Sources/google_mobile_ads/FLTGoogleMobileAdsReaderWriter_Internal.m new file mode 100644 index 00000000..fa8bcb5b --- /dev/null +++ b/mih_ui/android/build/ios/SourcePackages/google_mobile_ads-8.0.0/ios/google_mobile_ads/Sources/google_mobile_ads/FLTGoogleMobileAdsReaderWriter_Internal.m @@ -0,0 +1,532 @@ +// Copyright 2021 Google LLC +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// https://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +#import "FLTGoogleMobileAdsReaderWriter_Internal.h" +#import "FLTAdUtil.h" +#import "FLTMediationExtras.h" +#import "FLTNativeTemplateColor.h" +#import "FLTNativeTemplateFontStyle.h" +#import "FLTNativeTemplateStyle.h" +#import "FLTNativeTemplateTextStyle.h" +#import "FLTNativeTemplateType.h" + +// The type values below must be consistent for each platform. +typedef NS_ENUM(NSInteger, FLTAdMobField) { + FLTAdMobFieldAdSize = 128, + FLTAdMobFieldAdRequest = 129, + FLTAdMobFieldFluidAdSize = 130, + FLTAdMobFieldRewardItem = 132, + FLTAdMobFieldLoadError = 133, + FLTAdMobFieldAdManagerAdRequest = 134, + FLTAdMobFieldAdapterInitializationState = 135, + FLTAdMobFieldAdapterStatus = 136, + FLTAdMobFieldInitializationStatus = 137, + FLTAdmobFieldServerSideVerificationOptions = 138, + FLTAdmobFieldAdError = 139, + FLTAdmobFieldGadResponseInfo = 140, + FLTAdmobFieldGADAdNetworkResponseInfo = 141, + FLTAdmobFieldAnchoredAdaptiveBannerAdSize = 142, + FLTAdmobFieldSmartBannerAdSize = 143, + FLTAdmobFieldNativeAdOptions = 144, + FLTAdmobFieldVideoOptions = 145, + FLTAdmobFieldInlineAdaptiveAdSize = 146, + FLTAdmobRequestConfigurationParams = 148, + FLTAdmobFieldNativeTemplateStyle = 149, + FLTAdmobFieldNativeTemplateTextStyle = 150, + FLTAdmobFieldNativeTemplateFontStyle = 151, + FLTAdmobFieldNativeTemplateType = 152, + FLTAdmobFieldNativeTemplateColor = 153, + FLTAdmobFieldMediationExtras = 154 + +}; + +@interface FLTGoogleMobileAdsWriter : FlutterStandardWriter +@end + +@implementation FLTGoogleMobileAdsReaderWriter +- (instancetype)init { + return [self initWithFactory:[[FLTAdSizeFactory alloc] init]]; +} + +- (instancetype _Nonnull)initWithFactory: + (FLTAdSizeFactory *_Nonnull)adSizeFactory { + self = [super init]; + if (self) { + _adSizeFactory = adSizeFactory; + } + return self; +} + +- (FlutterStandardReader *_Nonnull)readerWithData:(NSData *_Nonnull)data { + FLTGoogleMobileAdsReader *reader = + [[FLTGoogleMobileAdsReader alloc] initWithFactory:_adSizeFactory + data:data]; + reader.mediationNetworkExtrasProvider = _mediationNetworkExtrasProvider; + return reader; +} + +- (FlutterStandardWriter *_Nonnull)writerWithData: + (NSMutableData *_Nonnull)data { + return [[FLTGoogleMobileAdsWriter alloc] initWithData:data]; +} +@end + +@implementation FLTGoogleMobileAdsReader { + NSString *_requestAgent; +} +- (instancetype _Nonnull)initWithFactory: + (FLTAdSizeFactory *_Nonnull)adSizeFactory + data:(NSData *_Nonnull)data { + self = [super initWithData:data]; + if (self) { + _adSizeFactory = adSizeFactory; + _requestAgent = [FLTAdUtil requestAgent]; + } + return self; +} + +- (id _Nullable)readValueOfType:(UInt8)type { + FLTAdMobField field = (FLTAdMobField)type; + switch (field) { + case FLTAdMobFieldAdSize: + return [[FLTAdSize alloc] + initWithWidth:[self readValueOfType:[self readByte]] + height:[self readValueOfType:[self readByte]]]; + case FLTAdMobFieldFluidAdSize: + return [[FLTFluidSize alloc] init]; + case FLTAdMobFieldAdRequest: { + FLTAdRequest *request = [[FLTAdRequest alloc] init]; + + request.keywords = [self readValueOfType:[self readByte]]; + request.contentURL = [self readValueOfType:[self readByte]]; + + NSNumber *nonPersonalizedAds = [self readValueOfType:[self readByte]]; + request.nonPersonalizedAds = nonPersonalizedAds.boolValue; + request.neighboringContentURLs = [self readValueOfType:[self readByte]]; + request.mediationExtrasIdentifier = [self readValueOfType:[self readByte]]; + request.mediationNetworkExtrasProvider = _mediationNetworkExtrasProvider; + request.adMobExtras = [self readValueOfType:[self readByte]]; + request.requestAgent = _requestAgent; + request.mediationExtras = [self readValueOfType:[self readByte]]; + return request; + } + case FLTAdmobFieldMediationExtras: { + id flutterMediationExtras = + [[NSClassFromString([self readValueOfType:[self readByte]]) alloc] + init]; + NSMutableDictionary *flutterExtras = [self readValueOfType:[self readByte]]; + flutterMediationExtras.extras = flutterExtras; + return flutterMediationExtras; + } + case FLTAdMobFieldRewardItem: { + return [[FLTRewardItem alloc] + initWithAmount:[self readValueOfType:[self readByte]] + type:[self readValueOfType:[self readByte]]]; + } + case FLTAdmobFieldGadResponseInfo: { + NSString *responseIdentifier = [self readValueOfType:[self readByte]]; + NSString *adNetworkClassName = [self readValueOfType:[self readByte]]; + NSArray *adNetworkInfoArray = + [self readValueOfType:[self readByte]]; + FLTGADAdNetworkResponseInfo *loadedResponseInfo = + [self readValueOfType:[self readByte]]; + NSDictionary *extrasDictionary = + [self readValueOfType:[self readByte]]; + FLTGADResponseInfo *gadResponseInfo = [[FLTGADResponseInfo alloc] init]; + gadResponseInfo.adNetworkClassName = adNetworkClassName; + gadResponseInfo.responseIdentifier = responseIdentifier; + gadResponseInfo.adNetworkInfoArray = adNetworkInfoArray; + gadResponseInfo.loadedAdNetworkResponseInfo = loadedResponseInfo; + gadResponseInfo.extrasDictionary = extrasDictionary; + return gadResponseInfo; + } + case FLTAdmobFieldGADAdNetworkResponseInfo: { + NSString *adNetworkClassName = [self readValueOfType:[self readByte]]; + NSNumber *latency = [self readValueOfType:[self readByte]]; + NSString *dictionaryDescription = [self readValueOfType:[self readByte]]; + NSDictionary *adUnitMapping = + [self readValueOfType:[self readByte]]; + NSError *error = [self readValueOfType:[self readByte]]; + NSString *adSourceName = [self readValueOfType:[self readByte]]; + NSString *adSourceID = [self readValueOfType:[self readByte]]; + NSString *adSourceInstanceName = [self readValueOfType:[self readByte]]; + NSString *adSourceInstanceID = [self readValueOfType:[self readByte]]; + FLTGADAdNetworkResponseInfo *adNetworkResponseInfo = + [[FLTGADAdNetworkResponseInfo alloc] init]; + adNetworkResponseInfo.adNetworkClassName = adNetworkClassName; + adNetworkResponseInfo.latency = latency; + adNetworkResponseInfo.dictionaryDescription = dictionaryDescription; + adNetworkResponseInfo.adUnitMapping = adUnitMapping; + adNetworkResponseInfo.error = error; + adNetworkResponseInfo.adSourceName = adSourceName; + adNetworkResponseInfo.adSourceID = adSourceID; + adNetworkResponseInfo.adSourceInstanceName = adSourceInstanceName; + adNetworkResponseInfo.adSourceInstanceID = adSourceInstanceID; + + return adNetworkResponseInfo; + } + case FLTAdMobFieldLoadError: { + NSNumber *code = [self readValueOfType:[self readByte]]; + NSString *domain = [self readValueOfType:[self readByte]]; + NSString *message = [self readValueOfType:[self readByte]]; + FLTGADResponseInfo *responseInfo = [self readValueOfType:[self readByte]]; + FLTLoadAdError *loadAdError = [[FLTLoadAdError alloc] init]; + loadAdError.code = code.longValue; + loadAdError.domain = domain; + loadAdError.message = message; + loadAdError.responseInfo = responseInfo; + return loadAdError; + } + case FLTAdmobFieldAdError: { + NSNumber *code = [self readValueOfType:[self readByte]]; + NSString *domain = [self readValueOfType:[self readByte]]; + NSString *message = [self readValueOfType:[self readByte]]; + return [NSError errorWithDomain:domain + code:code.longValue + userInfo:@{NSLocalizedDescriptionKey : message}]; + } + case FLTAdMobFieldAdManagerAdRequest: { + FLTGAMAdRequest *request = [[FLTGAMAdRequest alloc] init]; + request.keywords = [self readValueOfType:[self readByte]]; + request.contentURL = [self readValueOfType:[self readByte]]; + request.customTargeting = [self readValueOfType:[self readByte]]; + request.customTargetingLists = [self readValueOfType:[self readByte]]; + NSNumber *nonPersonalizedAds = [self readValueOfType:[self readByte]]; + request.nonPersonalizedAds = nonPersonalizedAds.boolValue; + request.neighboringContentURLs = [self readValueOfType:[self readByte]]; + request.pubProvidedID = [self readValueOfType:[self readByte]]; + request.mediationExtrasIdentifier = [self readValueOfType:[self readByte]]; + request.mediationNetworkExtrasProvider = _mediationNetworkExtrasProvider; + request.adMobExtras = [self readValueOfType:[self readByte]]; + request.requestAgent = _requestAgent; + request.mediationExtras = [self readValueOfType:[self readByte]]; + return request; + } + case FLTAdMobFieldAdapterInitializationState: { + NSString *state = [self readValueOfType:[self readByte]]; + if (!state) { + return nil; + } else if ([@"notReady" isEqualToString:state]) { + return @(FLTAdapterInitializationStateNotReady); + } else if ([@"ready" isEqualToString:state]) { + return @(FLTAdapterInitializationStateReady); + } + NSLog(@"Failed to interpret AdapterInitializationState of: %@", state); + return nil; + } + case FLTAdMobFieldAdapterStatus: { + FLTAdapterStatus *status = [[FLTAdapterStatus alloc] init]; + status.state = [self readValueOfType:[self readByte]]; + status.statusDescription = [self readValueOfType:[self readByte]]; + status.latency = [self readValueOfType:[self readByte]]; + return status; + } + case FLTAdMobFieldInitializationStatus: { + FLTInitializationStatus *status = [[FLTInitializationStatus alloc] init]; + status.adapterStatuses = [self readValueOfType:[self readByte]]; + return status; + } + case FLTAdmobFieldServerSideVerificationOptions: { + FLTServerSideVerificationOptions *options = + [[FLTServerSideVerificationOptions alloc] init]; + options.userIdentifier = [self readValueOfType:[self readByte]]; + options.customRewardString = [self readValueOfType:[self readByte]]; + return options; + } + case FLTAdmobFieldAnchoredAdaptiveBannerAdSize: { + NSString *orientation = [self readValueOfType:[self readByte]]; + NSNumber *width = [self readValueOfType:[self readByte]]; + return [[FLTAnchoredAdaptiveBannerSize alloc] initWithFactory:_adSizeFactory + orientation:orientation + width:width + isLarge:false]; + } + case FLTAdmobFieldSmartBannerAdSize: + return [[FLTSmartBannerSize alloc] + initWithOrientation:[self readValueOfType:[self readByte]]]; + case FLTAdmobFieldNativeAdOptions: { + return [[FLTNativeAdOptions alloc] + initWithAdChoicesPlacement:[self readValueOfType:[self readByte]] + mediaAspectRatio:[self readValueOfType:[self readByte]] + videoOptions:[self readValueOfType:[self readByte]] + requestCustomMuteThisAd:[self readValueOfType:[self readByte]] + shouldRequestMultipleImages:[self readValueOfType:[self readByte]] + shouldReturnUrlsForImageAssets:[self readValueOfType:[self readByte]]]; + } + case FLTAdmobFieldVideoOptions: { + return [[FLTVideoOptions alloc] + initWithClickToExpandRequested:[self readValueOfType:[self readByte]] + customControlsRequested:[self readValueOfType:[self readByte]] + startMuted:[self readValueOfType:[self readByte]]]; + } + case FLTAdmobRequestConfigurationParams: { + GADMobileAds.sharedInstance.requestConfiguration.maxAdContentRating = + [self readValueOfType:[self readByte]]; + GADMobileAds.sharedInstance.requestConfiguration + .tagForChildDirectedTreatment = [self readValueOfType:[self readByte]]; + GADMobileAds.sharedInstance.requestConfiguration.tagForUnderAgeOfConsent = + [self readValueOfType:[self readByte]]; + GADMobileAds.sharedInstance.requestConfiguration.testDeviceIdentifiers = + [self readValueOfType:[self readByte]]; + return GADMobileAds.sharedInstance.requestConfiguration; + } + case FLTAdmobFieldInlineAdaptiveAdSize: { + return [[FLTInlineAdaptiveBannerSize alloc] + initWithFactory:_adSizeFactory + width:[self readValueOfType:[self readByte]] + maxHeight:[self readValueOfType:[self readByte]] + orientation:[self readValueOfType:[self readByte]]]; + } + case FLTAdmobFieldNativeTemplateStyle: { + FLTNativeTemplateType *templateType = + [self readValueOfType:[self readByte]]; + FLTNativeTemplateColor *mainBackgroundColor = + [self readValueOfType:[self readByte]]; + FLTNativeTemplateTextStyle *callToActionStyle = + [self readValueOfType:[self readByte]]; + FLTNativeTemplateTextStyle *primaryTextStyle = + [self readValueOfType:[self readByte]]; + FLTNativeTemplateTextStyle *secondaryTextStyle = + [self readValueOfType:[self readByte]]; + FLTNativeTemplateTextStyle *tertiaryTextStyle = + [self readValueOfType:[self readByte]]; + NSNumber *cornerRadius = [self readValueOfType:[self readByte]]; + return + [[FLTNativeTemplateStyle alloc] initWithTemplateType:templateType + mainBackgroundColor:mainBackgroundColor + callToActionStyle:callToActionStyle + primaryTextStyle:primaryTextStyle + secondaryTextStyle:secondaryTextStyle + tertiaryTextStyle:tertiaryTextStyle + cornerRadius:cornerRadius]; + } + case FLTAdmobFieldNativeTemplateTextStyle: { + FLTNativeTemplateColor *textColor = [self readValueOfType:[self readByte]]; + FLTNativeTemplateColor *backgroundColor = + [self readValueOfType:[self readByte]]; + FLTNativeTemplateFontStyleWrapper *fontStyle = + [self readValueOfType:[self readByte]]; + NSNumber *size = [self readValueOfType:[self readByte]]; + return [[FLTNativeTemplateTextStyle alloc] initWithTextColor:textColor + backgroundColor:backgroundColor + fontStyle:fontStyle + size:size]; + } + case FLTAdmobFieldNativeTemplateFontStyle: { + NSNumber *fontStyleIndex = [self readValueOfType:[self readByte]]; + return [[FLTNativeTemplateFontStyleWrapper alloc] + initWithInt:fontStyleIndex.intValue]; + } + case FLTAdmobFieldNativeTemplateType: { + NSNumber *templateIndex = [self readValueOfType:[self readByte]]; + return [[FLTNativeTemplateType alloc] initWithInt:templateIndex.intValue]; + } + case FLTAdmobFieldNativeTemplateColor: { + NSNumber *alpha = [self readValueOfType:[self readByte]]; + NSNumber *red = [self readValueOfType:[self readByte]]; + NSNumber *green = [self readValueOfType:[self readByte]]; + NSNumber *blue = [self readValueOfType:[self readByte]]; + return [[FLTNativeTemplateColor alloc] initWithAlpha:alpha + red:red + green:green + blue:blue]; + } + } + return [super readValueOfType:type]; +} +@end + +@implementation FLTGoogleMobileAdsWriter +- (void)writeAdSize:(FLTAdSize *_Nonnull)value { + if ([value isKindOfClass:[FLTInlineAdaptiveBannerSize class]]) { + [self writeByte:FLTAdmobFieldInlineAdaptiveAdSize]; + FLTInlineAdaptiveBannerSize *size = (FLTInlineAdaptiveBannerSize *)value; + [self writeValue:size.width]; + [self writeValue:size.maxHeight]; + [self writeValue:size.orientation]; + } else if ([value isKindOfClass:[FLTAnchoredAdaptiveBannerSize class]]) { + [self writeByte:FLTAdmobFieldAnchoredAdaptiveBannerAdSize]; + FLTAnchoredAdaptiveBannerSize *size = + (FLTAnchoredAdaptiveBannerSize *)value; + [self writeValue:size.orientation]; + [self writeValue:size.width]; + } else if ([value isKindOfClass:[FLTSmartBannerSize class]]) { + [self writeByte:FLTAdmobFieldSmartBannerAdSize]; + FLTSmartBannerSize *size = (FLTSmartBannerSize *)value; + [self writeValue:size.orientation]; + } else if ([value isKindOfClass:[FLTFluidSize class]]) { + [self writeByte:FLTAdMobFieldFluidAdSize]; + } else if ([value isKindOfClass:[FLTAdSize class]]) { + [self writeByte:FLTAdMobFieldAdSize]; + [self writeValue:value.width]; + [self writeValue:value.height]; + } +} + +- (void)writeValue:(id)value { + if ([value isKindOfClass:[FLTAdSize class]]) { + [self writeAdSize:value]; + } else if ([value isKindOfClass:[FLTGAMAdRequest class]]) { + [self writeByte:FLTAdMobFieldAdManagerAdRequest]; + FLTGAMAdRequest *request = value; + [self writeValue:request.keywords]; + [self writeValue:request.contentURL]; + [self writeValue:request.customTargeting]; + [self writeValue:request.customTargetingLists]; + [self writeValue:@(request.nonPersonalizedAds)]; + [self writeValue:request.neighboringContentURLs]; + [self writeValue:request.pubProvidedID]; + [self writeValue:request.mediationExtrasIdentifier]; + [self writeValue:request.adMobExtras]; + [self writeValue:request.mediationExtras]; + } else if ([value isKindOfClass:[FLTAdRequest class]]) { + [self writeByte:FLTAdMobFieldAdRequest]; + FLTAdRequest *request = value; + [self writeValue:request.keywords]; + [self writeValue:request.contentURL]; + [self writeValue:@(request.nonPersonalizedAds)]; + [self writeValue:request.neighboringContentURLs]; + [self writeValue:request.mediationExtrasIdentifier]; + [self writeValue:request.adMobExtras]; + [self writeValue:request.mediationExtras]; + } else if ([value conformsToProtocol:@protocol(FlutterMediationExtras)]) { + [self writeByte:FLTAdmobFieldMediationExtras]; + NSObject *fltExtras = value; + [self writeValue:NSStringFromClass([fltExtras class])]; + [self writeValue:fltExtras.extras]; + } else if ([value isKindOfClass:[FLTRewardItem class]]) { + [self writeByte:FLTAdMobFieldRewardItem]; + FLTRewardItem *item = value; + [self writeValue:item.amount]; + [self writeValue:item.type]; + } else if ([value isKindOfClass:[FLTGADResponseInfo class]]) { + [self writeByte:FLTAdmobFieldGadResponseInfo]; + FLTGADResponseInfo *responseInfo = value; + [self writeValue:responseInfo.responseIdentifier]; + [self writeValue:responseInfo.adNetworkClassName]; + [self writeValue:responseInfo.adNetworkInfoArray]; + [self writeValue:responseInfo.loadedAdNetworkResponseInfo]; + [self writeValue:responseInfo.extrasDictionary]; + } else if ([value isKindOfClass:[FLTGADAdNetworkResponseInfo class]]) { + [self writeByte:FLTAdmobFieldGADAdNetworkResponseInfo]; + FLTGADAdNetworkResponseInfo *networkResponseInfo = value; + [self writeValue:networkResponseInfo.adNetworkClassName]; + [self writeValue:networkResponseInfo.latency]; + [self writeValue:networkResponseInfo.dictionaryDescription]; + [self writeValue:networkResponseInfo.adUnitMapping]; + [self writeValue:networkResponseInfo.error]; + [self writeValue:networkResponseInfo.adSourceName]; + [self writeValue:networkResponseInfo.adSourceID]; + [self writeValue:networkResponseInfo.adSourceInstanceName]; + [self writeValue:networkResponseInfo.adSourceInstanceID]; + } else if ([value isKindOfClass:[FLTLoadAdError class]]) { + [self writeByte:FLTAdMobFieldLoadError]; + FLTLoadAdError *error = value; + [self writeValue:@(error.code)]; + [self writeValue:error.domain]; + [self writeValue:error.message]; + [self writeValue:error.responseInfo]; + } else if ([value isKindOfClass:[NSError class]]) { + [self writeByte:FLTAdmobFieldAdError]; + NSError *error = value; + [self writeValue:@(error.code)]; + [self writeValue:error.domain]; + [self writeValue:error.localizedDescription]; + } else if ([value isKindOfClass:[FLTAdapterStatus class]]) { + [self writeByte:FLTAdMobFieldAdapterStatus]; + FLTAdapterStatus *status = value; + [self writeByte:FLTAdMobFieldAdapterInitializationState]; + if (!status.state) { + [self writeValue:[NSNull null]]; + } else if (status.state.unsignedLongValue == + FLTAdapterInitializationStateNotReady) { + [self writeValue:@"notReady"]; + } else if (status.state.unsignedLongValue == + FLTAdapterInitializationStateReady) { + [self writeValue:@"ready"]; + } else { + NSLog(@"Failed to interpret AdapterInitializationState of: %@", + status.state); + [self writeValue:[NSNull null]]; + } + [self writeValue:status.statusDescription]; + [self writeValue:status.latency]; + } else if ([value isKindOfClass:[FLTInitializationStatus class]]) { + [self writeByte:FLTAdMobFieldInitializationStatus]; + FLTInitializationStatus *status = value; + [self writeValue:status.adapterStatuses]; + } else if ([value isKindOfClass:[FLTServerSideVerificationOptions class]]) { + [self writeByte:FLTAdmobFieldServerSideVerificationOptions]; + FLTServerSideVerificationOptions *options = value; + [self writeValue:options.userIdentifier]; + [self writeValue:options.customRewardString]; + } else if ([value isKindOfClass:[FLTNativeAdOptions class]]) { + [self writeByte:FLTAdmobFieldNativeAdOptions]; + FLTNativeAdOptions *options = value; + [self writeValue:options.adChoicesPlacement]; + [self writeValue:options.mediaAspectRatio]; + [self writeValue:options.videoOptions]; + [self writeValue:options.requestCustomMuteThisAd]; + [self writeValue:options.shouldRequestMultipleImages]; + [self writeValue:options.shouldReturnUrlsForImageAssets]; + } else if ([value isKindOfClass:[FLTVideoOptions class]]) { + [self writeByte:FLTAdmobFieldVideoOptions]; + FLTVideoOptions *options = value; + [self writeValue:options.clickToExpandRequested]; + [self writeValue:options.customControlsRequested]; + [self writeValue:options.startMuted]; + } else if ([value isKindOfClass:[GADRequestConfiguration class]]) { + [self writeByte:FLTAdmobRequestConfigurationParams]; + GADRequestConfiguration *params = value; + [self writeValue:params.maxAdContentRating]; + [self writeValue:params.tagForChildDirectedTreatment]; + [self writeValue:params.tagForUnderAgeOfConsent]; + [self writeValue:params.testDeviceIdentifiers]; + } else if ([value isKindOfClass:[FLTNativeTemplateType class]]) { + [self writeByte:FLTAdmobFieldNativeTemplateType]; + FLTNativeTemplateType *templateType = value; + [self writeValue:@(templateType.intValue)]; + } else if ([value isKindOfClass:[FLTNativeTemplateFontStyleWrapper class]]) { + [self writeByte:FLTAdmobFieldNativeTemplateFontStyle]; + FLTNativeTemplateFontStyleWrapper *fontStyle = value; + [self writeValue:@(fontStyle.intValue)]; + } else if ([value isKindOfClass:[FLTNativeTemplateColor class]]) { + [self writeByte:FLTAdmobFieldNativeTemplateColor]; + FLTNativeTemplateColor *templateColor = value; + [self writeValue:templateColor.alpha]; + [self writeValue:templateColor.red]; + [self writeValue:templateColor.green]; + [self writeValue:templateColor.blue]; + } else if ([value isKindOfClass:[FLTNativeTemplateTextStyle class]]) { + [self writeByte:FLTAdmobFieldNativeTemplateTextStyle]; + FLTNativeTemplateTextStyle *textStyle = value; + [self writeValue:textStyle.textColor]; + [self writeValue:textStyle.backgroundColor]; + [self writeValue:textStyle.fontStyle]; + [self writeValue:textStyle.size]; + } else if ([value isKindOfClass:[FLTNativeTemplateStyle class]]) { + [self writeByte:FLTAdmobFieldNativeTemplateStyle]; + FLTNativeTemplateStyle *templateStyle = value; + [self writeValue:templateStyle.templateType]; + [self writeValue:templateStyle.mainBackgroundColor]; + [self writeValue:templateStyle.callToActionStyle]; + [self writeValue:templateStyle.primaryTextStyle]; + [self writeValue:templateStyle.secondaryTextStyle]; + [self writeValue:templateStyle.tertiaryTextStyle]; + [self writeValue:templateStyle.cornerRadius]; + } else { + [super writeValue:value]; + } +} +@end diff --git a/mih_ui/android/build/ios/SourcePackages/google_mobile_ads-8.0.0/ios/google_mobile_ads/Sources/google_mobile_ads/FLTMobileAds_Internal.m b/mih_ui/android/build/ios/SourcePackages/google_mobile_ads-8.0.0/ios/google_mobile_ads/Sources/google_mobile_ads/FLTMobileAds_Internal.m new file mode 100644 index 00000000..cb3a3fba --- /dev/null +++ b/mih_ui/android/build/ios/SourcePackages/google_mobile_ads-8.0.0/ios/google_mobile_ads/Sources/google_mobile_ads/FLTMobileAds_Internal.m @@ -0,0 +1,61 @@ +// Copyright 2021 Google LLC +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// https://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +#import "FLTMobileAds_Internal.h" + +@implementation FLTAdapterStatus +- (instancetype)initWithStatus:(GADAdapterStatus *)status { + self = [self init]; + if (self) { + switch (status.state) { + case GADAdapterInitializationStateNotReady: + _state = @(FLTAdapterInitializationStateNotReady); + break; + case GADAdapterInitializationStateReady: + _state = @(FLTAdapterInitializationStateReady); + break; + } + _statusDescription = status.description; + _latency = @(status.latency); + } + return self; +} +@end + +@implementation FLTInitializationStatus +- (instancetype)initWithStatus:(GADInitializationStatus *)status { + self = [self init]; + if (self) { + NSMutableDictionary *newDictionary = [NSMutableDictionary dictionary]; + for (NSString *name in status.adapterStatusesByClassName.allKeys) { + FLTAdapterStatus *adapterStatus = [[FLTAdapterStatus alloc] + initWithStatus:status.adapterStatusesByClassName[name]]; + [newDictionary setValue:adapterStatus forKey:name]; + } + _adapterStatuses = newDictionary; + } + return self; +} +@end + +@implementation FLTServerSideVerificationOptions +- (GADServerSideVerificationOptions *_Nonnull) + asGADServerSideVerificationOptions { + GADServerSideVerificationOptions *options = + [[GADServerSideVerificationOptions alloc] init]; + options.userIdentifier = _userIdentifier; + options.customRewardString = _customRewardString; + return options; +} +@end diff --git a/mih_ui/android/build/ios/SourcePackages/google_mobile_ads-8.0.0/ios/google_mobile_ads/Sources/google_mobile_ads/FLTNSString.m b/mih_ui/android/build/ios/SourcePackages/google_mobile_ads-8.0.0/ios/google_mobile_ads/Sources/google_mobile_ads/FLTNSString.m new file mode 100644 index 00000000..3cf996f6 --- /dev/null +++ b/mih_ui/android/build/ios/SourcePackages/google_mobile_ads-8.0.0/ios/google_mobile_ads/Sources/google_mobile_ads/FLTNSString.m @@ -0,0 +1,24 @@ +// Copyright 2022 Google LLC +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// https://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +#import "FLTNSString.h" + +@implementation NSString (FLTNSStringExtension) + +- (instancetype _Nonnull)gma_initWithInt:(NSInteger)integer { + self = [self initWithFormat:@"%ld", (long)integer]; + return self; +} + +@end diff --git a/mih_ui/android/build/ios/SourcePackages/google_mobile_ads-8.0.0/ios/google_mobile_ads/Sources/google_mobile_ads/GoogleAdsMobileIosNativeTemplates/GADTFullScreenTemplateView.m b/mih_ui/android/build/ios/SourcePackages/google_mobile_ads-8.0.0/ios/google_mobile_ads/Sources/google_mobile_ads/GoogleAdsMobileIosNativeTemplates/GADTFullScreenTemplateView.m new file mode 100644 index 00000000..237cc11a --- /dev/null +++ b/mih_ui/android/build/ios/SourcePackages/google_mobile_ads-8.0.0/ios/google_mobile_ads/Sources/google_mobile_ads/GoogleAdsMobileIosNativeTemplates/GADTFullScreenTemplateView.m @@ -0,0 +1,30 @@ +// Copyright 2021 Google LLC +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +#import "GADTFullScreenTemplateView.h" + +@implementation GADTFullScreenTemplateView + +- (nonnull instancetype)initWithFrame:(CGRect)frame { + if (self = [super initWithFrame:frame]) { + self.translatesAutoresizingMaskIntoConstraints = NO; + } + return self; +} + +- (nonnull NSString *)getTemplateTypeName { + return @"full_screen_template"; +} + +@end diff --git a/mih_ui/android/build/ios/SourcePackages/google_mobile_ads-8.0.0/ios/google_mobile_ads/Sources/google_mobile_ads/GoogleAdsMobileIosNativeTemplates/GADTMediumTemplateView.m b/mih_ui/android/build/ios/SourcePackages/google_mobile_ads-8.0.0/ios/google_mobile_ads/Sources/google_mobile_ads/GoogleAdsMobileIosNativeTemplates/GADTMediumTemplateView.m new file mode 100644 index 00000000..715010eb --- /dev/null +++ b/mih_ui/android/build/ios/SourcePackages/google_mobile_ads-8.0.0/ios/google_mobile_ads/Sources/google_mobile_ads/GoogleAdsMobileIosNativeTemplates/GADTMediumTemplateView.m @@ -0,0 +1,29 @@ +// Copyright 2018-2021 Google LLC +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. +#import "GADTMediumTemplateView.h" + +@implementation GADTMediumTemplateView + +- (nonnull instancetype)initWithFrame:(CGRect)frame { + if (self = [super initWithFrame:frame]) { + self.translatesAutoresizingMaskIntoConstraints = NO; + } + return self; +} + +- (nonnull NSString *)getTemplateTypeName { + return @"medium_template"; +} + +@end diff --git a/mih_ui/android/build/ios/SourcePackages/google_mobile_ads-8.0.0/ios/google_mobile_ads/Sources/google_mobile_ads/GoogleAdsMobileIosNativeTemplates/GADTSmallTemplateView.m b/mih_ui/android/build/ios/SourcePackages/google_mobile_ads-8.0.0/ios/google_mobile_ads/Sources/google_mobile_ads/GoogleAdsMobileIosNativeTemplates/GADTSmallTemplateView.m new file mode 100644 index 00000000..a4482d7b --- /dev/null +++ b/mih_ui/android/build/ios/SourcePackages/google_mobile_ads-8.0.0/ios/google_mobile_ads/Sources/google_mobile_ads/GoogleAdsMobileIosNativeTemplates/GADTSmallTemplateView.m @@ -0,0 +1,30 @@ +// Copyright 2018-2021 Google LLC +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +#import "GADTSmallTemplateView.h" + +@implementation GADTSmallTemplateView + +- (nonnull instancetype)initWithFrame:(CGRect)frame { + if (self = [super initWithFrame:frame]) { + self.translatesAutoresizingMaskIntoConstraints = NO; + } + return self; +} + +- (nonnull NSString *)getTemplateTypeName { + return @"small_template"; +} + +@end diff --git a/mih_ui/android/build/ios/SourcePackages/google_mobile_ads-8.0.0/ios/google_mobile_ads/Sources/google_mobile_ads/GoogleAdsMobileIosNativeTemplates/GADTTemplateView.m b/mih_ui/android/build/ios/SourcePackages/google_mobile_ads-8.0.0/ios/google_mobile_ads/Sources/google_mobile_ads/GoogleAdsMobileIosNativeTemplates/GADTTemplateView.m new file mode 100644 index 00000000..2c8f3413 --- /dev/null +++ b/mih_ui/android/build/ios/SourcePackages/google_mobile_ads-8.0.0/ios/google_mobile_ads/Sources/google_mobile_ads/GoogleAdsMobileIosNativeTemplates/GADTTemplateView.m @@ -0,0 +1,326 @@ +// Copyright 2018-2021 Google LLC +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +#import "GADTTemplateView.h" +#import + +GADTNativeTemplateStyleKey const GADTNativeTemplateStyleKeyCallToActionFont = + @"call_to_action_font"; + +GADTNativeTemplateStyleKey const + GADTNativeTemplateStyleKeyCallToActionFontColor = + @"call_to_action_font_color"; + +GADTNativeTemplateStyleKey const + GADTNativeTemplateStyleKeyCallToActionBackgroundColor = + @"call_to_action_background_color"; + +GADTNativeTemplateStyleKey const GADTNativeTemplateStyleKeySecondaryFont = + @"secondary_font"; + +GADTNativeTemplateStyleKey const GADTNativeTemplateStyleKeySecondaryFontColor = + @"secondary_font_color"; + +GADTNativeTemplateStyleKey const + GADTNativeTemplateStyleKeySecondaryBackgroundColor = + @"secondary_background_color"; + +GADTNativeTemplateStyleKey const GADTNativeTemplateStyleKeyPrimaryFont = + @"primary_font"; + +GADTNativeTemplateStyleKey const GADTNativeTemplateStyleKeyPrimaryFontColor = + @"primary_font_color"; + +GADTNativeTemplateStyleKey const + GADTNativeTemplateStyleKeyPrimaryBackgroundColor = + @"primary_background_color"; + +GADTNativeTemplateStyleKey const GADTNativeTemplateStyleKeyTertiaryFont = + @"tertiary_font"; + +GADTNativeTemplateStyleKey const GADTNativeTemplateStyleKeyTertiaryFontColor = + @"tertiary_font_color"; + +GADTNativeTemplateStyleKey const + GADTNativeTemplateStyleKeyTertiaryBackgroundColor = + @"tertiary_background_color"; + +GADTNativeTemplateStyleKey const GADTNativeTemplateStyleKeyMainBackgroundColor = + @"main_background_color"; + +GADTNativeTemplateStyleKey const GADTNativeTemplateStyleKeyCornerRadius = + @"corner_radius"; + +static NSString *const GADTBlue = @"#5C84F0"; + +@implementation GADTTemplateView { + NSDictionary *_defaultStyles; +} + +- (instancetype)initWithFrame:(CGRect)frame { + if (self = [super initWithFrame:frame]) { + _rootView = + [NSBundle.mainBundle loadNibNamed:NSStringFromClass([self class]) + owner:self + options:nil] + .firstObject; + + [self addSubview:_rootView]; + + [self addConstraints: + [NSLayoutConstraint + constraintsWithVisualFormat:@"H:|[_rootView]|" + options:0 + metrics:nil + views:NSDictionaryOfVariableBindings( + _rootView)]]; + [self addConstraints: + [NSLayoutConstraint + constraintsWithVisualFormat:@"V:|[_rootView]|" + options:0 + metrics:nil + views:NSDictionaryOfVariableBindings( + _rootView)]]; + [self applyStyles]; + [self styleAdBadge]; + } + return self; +} + +- (NSString *)getTemplateTypeName { + return @"root"; +} + +/// Returns the style value for the provided key or the default style if no +/// styles dictionary was set. +- (id)styleForKey:(GADTNativeTemplateStyleKey)key { + return _styles[key] ?: nil; +} + +// Goes through all recognized style keys and updates the views accordingly, +// overwriting the defaults. +- (void)applyStyles { + self.layer.borderColor = + [GADTTemplateView colorFromHexString:@"E0E0E0"].CGColor; + self.layer.borderWidth = 1.0f; + [self.mediaView sizeToFit]; + if ([self styleForKey:GADTNativeTemplateStyleKeyCornerRadius]) { + float roundedCornerRadius = + ((NSNumber *)[self styleForKey:GADTNativeTemplateStyleKeyCornerRadius]) + .floatValue; + + // Rounded corners + self.iconView.layer.cornerRadius = roundedCornerRadius; + self.iconView.clipsToBounds = YES; + ((UIButton *)self.callToActionView).layer.cornerRadius = + roundedCornerRadius; + ((UIButton *)self.callToActionView).clipsToBounds = YES; + } + + // Fonts + if ([self styleForKey:GADTNativeTemplateStyleKeyPrimaryFont]) { + ((UILabel *)self.headlineView).font = + (UIFont *)[self styleForKey:GADTNativeTemplateStyleKeyPrimaryFont]; + } + + if ([self styleForKey:GADTNativeTemplateStyleKeySecondaryFont]) { + ((UILabel *)self.bodyView).font = + (UIFont *)[self styleForKey:GADTNativeTemplateStyleKeySecondaryFont]; + } + + if ([self styleForKey:GADTNativeTemplateStyleKeyTertiaryFont]) { + ((UILabel *)self.advertiserView).font = + (UIFont *)[self styleForKey:GADTNativeTemplateStyleKeyTertiaryFont]; + } + + if ([self styleForKey:GADTNativeTemplateStyleKeyCallToActionFont]) { + ((UIButton *)self.callToActionView).titleLabel.font = + (UIFont *)[self styleForKey:GADTNativeTemplateStyleKeyCallToActionFont]; + } + + // Font colors + if ([self styleForKey:GADTNativeTemplateStyleKeyPrimaryFontColor]) + ((UILabel *)self.headlineView).textColor = (UIColor *)[self + styleForKey:GADTNativeTemplateStyleKeyPrimaryFontColor]; + + if ([self styleForKey:GADTNativeTemplateStyleKeySecondaryFontColor]) { + ((UILabel *)self.bodyView).textColor = (UIColor *)[self + styleForKey:GADTNativeTemplateStyleKeySecondaryFontColor]; + } + + if ([self styleForKey:GADTNativeTemplateStyleKeyTertiaryFontColor]) { + ((UILabel *)self.advertiserView).textColor = (UIColor *)[self + styleForKey:GADTNativeTemplateStyleKeyTertiaryFontColor]; + } + + if ([self styleForKey:GADTNativeTemplateStyleKeyCallToActionFontColor]) { + [((UIButton *)self.callToActionView) + setTitleColor: + (UIColor *)[self + styleForKey:GADTNativeTemplateStyleKeyCallToActionFontColor] + forState:UIControlStateNormal]; + } + + // Background colors + if ([self styleForKey:GADTNativeTemplateStyleKeyPrimaryBackgroundColor]) { + ((UILabel *)self.headlineView).backgroundColor = (UIColor *)[self + styleForKey:GADTNativeTemplateStyleKeyPrimaryBackgroundColor]; + } + + if ([self styleForKey:GADTNativeTemplateStyleKeySecondaryBackgroundColor]) { + ((UILabel *)self.bodyView).backgroundColor = (UIColor *)[self + styleForKey:GADTNativeTemplateStyleKeySecondaryBackgroundColor]; + } + + if ([self styleForKey:GADTNativeTemplateStyleKeyTertiaryBackgroundColor]) { + ((UILabel *)self.advertiserView).backgroundColor = (UIColor *)[self + styleForKey:GADTNativeTemplateStyleKeyTertiaryBackgroundColor]; + } + + if ([self + styleForKey:GADTNativeTemplateStyleKeyCallToActionBackgroundColor]) { + ((UIButton *)self.callToActionView).backgroundColor = (UIColor *)[self + styleForKey:GADTNativeTemplateStyleKeyCallToActionBackgroundColor]; + } + + if ([self styleForKey:GADTNativeTemplateStyleKeyMainBackgroundColor]) { + self.backgroundColor = (UIColor *)[self + styleForKey:GADTNativeTemplateStyleKeyMainBackgroundColor]; + } + [self styleAdBadge]; +} + +- (void)styleAdBadge { + UILabel *adBadge = self.adBadge; + adBadge.layer.borderColor = adBadge.textColor.CGColor; + adBadge.layer.borderWidth = 1.0; + adBadge.layer.cornerRadius = 3.0; + adBadge.layer.masksToBounds = YES; +} + +- (void)setStyles: + (NSDictionary *)styles { + _styles = [styles copy]; + [self applyStyles]; +} + +- (void)setNativeAd:(GADNativeAd *)nativeAd { + ((UILabel *)self.headlineView).text = nativeAd.headline; + + // Some of the assets are not guaranteed to be present. This is to check + // that they are before showing or hiding them. + ((UIImageView *)self.iconView).image = nativeAd.icon.image; + self.iconView.hidden = nativeAd.icon ? NO : YES; + + [((UIButton *)self.callToActionView) setTitle:nativeAd.callToAction + forState:UIControlStateNormal]; + + // Either show the advertiser an app has, or show the store of the ad. + if (nativeAd.advertiser && !nativeAd.store) { + // Ad has advertiser but not store + self.storeView.hidden = YES; + ((UILabel *)self.advertiserView).text = nativeAd.advertiser; + self.advertiserView.hidden = NO; + } else if (nativeAd.store && !nativeAd.advertiser) { + // Ad has store but not advertiser + self.advertiserView.hidden = YES; + ((UILabel *)self.storeView).text = nativeAd.store; + self.storeView.hidden = NO; + } else if (nativeAd.advertiser && nativeAd.store) { + // Ad has both store and advertiser, default to showing advertiser. + self.storeView.hidden = YES; + ((UILabel *)self.advertiserView).text = nativeAd.advertiser; + self.advertiserView.hidden = NO; + } + + // Either show the number of stars an app has, or show the body of the ad. + // If there is a starRating then starRatingView is shown and bodyView is + // hidden otherwise, starRatingView is hidden and bodyView is filled. Use the + // unicode characters for filled in or empty stars. + if (nativeAd.starRating.floatValue > 0) { + NSMutableString *stars = [[NSMutableString alloc] initWithString:@""]; + int count = 0; + for (; count < nativeAd.starRating.intValue; count++) { + NSString *filledStar = [NSString stringWithUTF8String:"\u2605"]; + [stars appendString:filledStar]; + } + for (; count < 5; count++) { + NSString *emptyStar = [NSString stringWithUTF8String:"\u2606"]; + [stars appendString:emptyStar]; + } + ((UILabel *)self.starRatingView).text = stars; + self.bodyView.hidden = YES; + self.starRatingView.hidden = NO; + } else { + self.starRatingView.hidden = YES; + ((UILabel *)self.bodyView).text = nativeAd.body; + self.bodyView.hidden = NO; + } + + [self.mediaView setMediaContent:nativeAd.mediaContent]; + [super setNativeAd:nativeAd]; +} + +- (void)addHorizontalConstraintsToSuperviewWidth { + // Add an autolayout constraint to make sure our template view stretches to + // fill the width of its parent. + if (self.superview) { + UIView *child = self; + [self.superview + addConstraints: + [NSLayoutConstraint + constraintsWithVisualFormat:@"H:|[child]|" + options:0 + metrics:nil + views:NSDictionaryOfVariableBindings( + child)]]; + } +} + +- (void)addVerticalCenterConstraintToSuperview { + if (self.superview) { + UIView *child = self; + [self.superview + addConstraint:[NSLayoutConstraint + constraintWithItem:self.superview + attribute:NSLayoutAttributeCenterY + relatedBy:NSLayoutRelationEqual + toItem:child + attribute:NSLayoutAttributeCenterY + multiplier:1 + constant:0]]; + } +} + +/// Creates an opaque UIColor object from a byte-value color definition. ++ (UIColor *)colorFromHexString:(NSString *)hexString { + if (hexString == nil) { + return nil; + } + NSRange range = [hexString rangeOfString:@"^#[0-9a-fA-F]{6}$" + options:NSRegularExpressionSearch]; + if (range.location == NSNotFound) { + return nil; + } + unsigned rgbValue = 0; + NSScanner *scanner = [NSScanner scannerWithString:hexString]; + [scanner setScanLocation:1]; // Bypass '#' character. + [scanner scanHexInt:&rgbValue]; + + return [UIColor colorWithRed:((rgbValue & 0xff0000) >> 16) / 255.0f + green:((rgbValue & 0xff00) >> 8) / 255.0f + blue:(rgbValue & 0xff) / 255.0f + alpha:1]; +} +@end diff --git a/mih_ui/android/build/ios/SourcePackages/google_mobile_ads-8.0.0/ios/google_mobile_ads/Sources/google_mobile_ads/NativeTemplates/FLTNativeTemplateColor.m b/mih_ui/android/build/ios/SourcePackages/google_mobile_ads-8.0.0/ios/google_mobile_ads/Sources/google_mobile_ads/NativeTemplates/FLTNativeTemplateColor.m new file mode 100644 index 00000000..1651ffd1 --- /dev/null +++ b/mih_ui/android/build/ios/SourcePackages/google_mobile_ads-8.0.0/ios/google_mobile_ads/Sources/google_mobile_ads/NativeTemplates/FLTNativeTemplateColor.m @@ -0,0 +1,45 @@ +// Copyright 2022 Google LLC +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// https://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +#import "FLTNativeTemplateColor.h" + +@implementation FLTNativeTemplateColor { + NSNumber *_alpha; + NSNumber *_red; + NSNumber *_green; + NSNumber *_blue; +} + +- (instancetype _Nonnull)initWithAlpha:(NSNumber *_Nonnull)alpha + red:(NSNumber *_Nonnull)red + green:(NSNumber *_Nonnull)green + blue:(NSNumber *_Nonnull)blue { + self = [super init]; + if (self) { + _alpha = alpha; + _red = red; + _green = green; + _blue = blue; + } + return self; +} + +- (UIColor *)uiColor { + return [UIColor colorWithRed:_red.floatValue / 255.f + green:_green.floatValue / 255.f + blue:_blue.floatValue / 255.f + alpha:_alpha.floatValue / 255.f]; +} + +@end diff --git a/mih_ui/android/build/ios/SourcePackages/google_mobile_ads-8.0.0/ios/google_mobile_ads/Sources/google_mobile_ads/NativeTemplates/FLTNativeTemplateFontStyle.m b/mih_ui/android/build/ios/SourcePackages/google_mobile_ads-8.0.0/ios/google_mobile_ads/Sources/google_mobile_ads/NativeTemplates/FLTNativeTemplateFontStyle.m new file mode 100644 index 00000000..1d1fdbed --- /dev/null +++ b/mih_ui/android/build/ios/SourcePackages/google_mobile_ads-8.0.0/ios/google_mobile_ads/Sources/google_mobile_ads/NativeTemplates/FLTNativeTemplateFontStyle.m @@ -0,0 +1,45 @@ +// Copyright 2022 Google LLC +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// https://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +#import "FLTNativeTemplateFontStyle.h" + +@implementation FLTNativeTemplateFontStyleWrapper { + int _intValue; +} + +- (instancetype _Nonnull)initWithInt:(int)intValue { + self = [super init]; + if (self) { + _intValue = intValue; + } + return self; +} + +- (FLTNativeTemplateFontStyle)fontStyle { + switch (_intValue) { + case 0: + return FLTNativeTemplateFontNormal; + case 1: + return FLTNativeTemplateFontBold; + case 2: + return FLTNativeTemplateFontItalic; + case 3: + return FLTNativeTemplateFontMonospace; + default: + NSLog(@"Unknown FLTNativeTemplateFontStyle value: %d", _intValue); + return FLTNativeTemplateFontNormal; + } +} + +@end diff --git a/mih_ui/android/build/ios/SourcePackages/google_mobile_ads-8.0.0/ios/google_mobile_ads/Sources/google_mobile_ads/NativeTemplates/FLTNativeTemplateStyle.m b/mih_ui/android/build/ios/SourcePackages/google_mobile_ads-8.0.0/ios/google_mobile_ads/Sources/google_mobile_ads/NativeTemplates/FLTNativeTemplateStyle.m new file mode 100644 index 00000000..1de7bb50 --- /dev/null +++ b/mih_ui/android/build/ios/SourcePackages/google_mobile_ads-8.0.0/ios/google_mobile_ads/Sources/google_mobile_ads/NativeTemplates/FLTNativeTemplateStyle.m @@ -0,0 +1,157 @@ +// Copyright 2022 Google LLC +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// https://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +#import "FLTNativeTemplateStyle.h" +#import "FLTAdUtil.h" +#import "GADTSmallTemplateView.h" +#import "GADTTemplateView.h" + +@implementation FLTNativeTemplateStyle + +- (instancetype _Nonnull) + initWithTemplateType:(FLTNativeTemplateType *_Nonnull)templateType + mainBackgroundColor:(FLTNativeTemplateColor *_Nullable)mainBackgroundColor + callToActionStyle: + (FLTNativeTemplateTextStyle *_Nullable)callToActionStyle + primaryTextStyle:(FLTNativeTemplateTextStyle *_Nullable)primaryTextStyle + secondaryTextStyle: + (FLTNativeTemplateTextStyle *_Nullable)secondaryTextStyle + tertiaryTextStyle: + (FLTNativeTemplateTextStyle *_Nullable)tertiaryTextStyle + cornerRadius:(NSNumber *_Nullable)cornerRadius { + self = [super init]; + if (self) { + _templateType = templateType; + _mainBackgroundColor = mainBackgroundColor; + _callToActionStyle = callToActionStyle; + _primaryTextStyle = primaryTextStyle; + _secondaryTextStyle = secondaryTextStyle; + _tertiaryTextStyle = tertiaryTextStyle; + _cornerRadius = cornerRadius; + } + return self; +} + +- (FLTNativeTemplateViewWrapper *_Nonnull)getDisplayedView: + (GADNativeAd *_Nonnull)gadNativeAd { + GADTTemplateView *templateView = _templateType.templateView; + templateView.nativeAd = gadNativeAd; + + NSMutableDictionary *styles = [[NSMutableDictionary alloc] init]; + if ([FLTAdUtil isNotNull:_mainBackgroundColor]) { + styles[GADTNativeTemplateStyleKeyMainBackgroundColor] = + _mainBackgroundColor.uiColor; + } + if ([FLTAdUtil isNotNull:_cornerRadius]) { + styles[GADTNativeTemplateStyleKeyCornerRadius] = _cornerRadius; + } + if ([FLTAdUtil isNotNull:_callToActionStyle]) { + if ([FLTAdUtil isNotNull:_callToActionStyle.backgroundColor]) { + styles[GADTNativeTemplateStyleKeyCallToActionBackgroundColor] = + _callToActionStyle.backgroundColor.uiColor; + } + if ([FLTAdUtil isNotNull:_callToActionStyle.uiFont]) { + styles[GADTNativeTemplateStyleKeyCallToActionFont] = + _callToActionStyle.uiFont; + } + if ([FLTAdUtil isNotNull:_callToActionStyle.textColor]) { + styles[GADTNativeTemplateStyleKeyCallToActionFontColor] = + _callToActionStyle.textColor.uiColor; + } + } + if ([FLTAdUtil isNotNull:_primaryTextStyle]) { + if ([FLTAdUtil isNotNull:_primaryTextStyle.backgroundColor]) { + styles[GADTNativeTemplateStyleKeyPrimaryBackgroundColor] = + _primaryTextStyle.backgroundColor.uiColor; + } + if ([FLTAdUtil isNotNull:_primaryTextStyle.uiFont]) { + styles[GADTNativeTemplateStyleKeyPrimaryFont] = _primaryTextStyle.uiFont; + } + if ([FLTAdUtil isNotNull:_primaryTextStyle.textColor]) { + styles[GADTNativeTemplateStyleKeyPrimaryFontColor] = + _primaryTextStyle.textColor.uiColor; + } + } + if ([FLTAdUtil isNotNull:_secondaryTextStyle]) { + if ([FLTAdUtil isNotNull:_secondaryTextStyle.backgroundColor]) { + styles[GADTNativeTemplateStyleKeySecondaryBackgroundColor] = + _secondaryTextStyle.backgroundColor.uiColor; + } + if ([FLTAdUtil isNotNull:_secondaryTextStyle.uiFont]) { + styles[GADTNativeTemplateStyleKeySecondaryFont] = + _secondaryTextStyle.uiFont; + } + if ([FLTAdUtil isNotNull:_secondaryTextStyle.textColor]) { + styles[GADTNativeTemplateStyleKeySecondaryFontColor] = + _secondaryTextStyle.textColor.uiColor; + } + } + if ([FLTAdUtil isNotNull:_tertiaryTextStyle]) { + if ([FLTAdUtil isNotNull:_tertiaryTextStyle.backgroundColor]) { + styles[GADTNativeTemplateStyleKeyTertiaryBackgroundColor] = + _tertiaryTextStyle.backgroundColor.uiColor; + } + if ([FLTAdUtil isNotNull:_tertiaryTextStyle.uiFont]) { + styles[GADTNativeTemplateStyleKeyTertiaryFont] = + _tertiaryTextStyle.uiFont; + } + if ([FLTAdUtil isNotNull:_tertiaryTextStyle.textColor]) { + styles[GADTNativeTemplateStyleKeyTertiaryFontColor] = + _tertiaryTextStyle.textColor.uiColor; + } + } + templateView.styles = styles; + + FLTNativeTemplateViewWrapper *wrapper = + [[FLTNativeTemplateViewWrapper alloc] initWithFrame:CGRectZero]; + wrapper.templateView = templateView; + return wrapper; +} + +@end + +@implementation FLTNativeTemplateViewWrapper + +- (void)layoutSubviews { + [super layoutSubviews]; + if (_templateView) { + [self addSubview:_templateView]; + // Constrain the top of the templateView to the top of this view. This top + // aligns the template view + if (_templateView.superview) { + [_templateView.superview + addConstraint:[NSLayoutConstraint + constraintWithItem:_templateView.superview + attribute:NSLayoutAttributeTop + relatedBy:NSLayoutRelationEqual + toItem:_templateView + attribute:NSLayoutAttributeTop + multiplier:1 + constant:0]]; + [_templateView.superview + addConstraint: + [NSLayoutConstraint + constraintWithItem:_templateView.superview + attribute:NSLayoutAttributeBottom + relatedBy:NSLayoutRelationGreaterThanOrEqual + toItem:_templateView + attribute:NSLayoutAttributeBottom + multiplier:1 + constant:0]]; + } + [_templateView addHorizontalConstraintsToSuperviewWidth]; + } +} + +@end diff --git a/mih_ui/android/build/ios/SourcePackages/google_mobile_ads-8.0.0/ios/google_mobile_ads/Sources/google_mobile_ads/NativeTemplates/FLTNativeTemplateTextStyle.m b/mih_ui/android/build/ios/SourcePackages/google_mobile_ads-8.0.0/ios/google_mobile_ads/Sources/google_mobile_ads/NativeTemplates/FLTNativeTemplateTextStyle.m new file mode 100644 index 00000000..82716ba1 --- /dev/null +++ b/mih_ui/android/build/ios/SourcePackages/google_mobile_ads-8.0.0/ios/google_mobile_ads/Sources/google_mobile_ads/NativeTemplates/FLTNativeTemplateTextStyle.m @@ -0,0 +1,67 @@ +// Copyright 2022 Google LLC +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// https://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +#import "FLTNativeTemplateTextStyle.h" +#import "FLTAdUtil.h" + +@implementation FLTNativeTemplateTextStyle + +- (instancetype _Nonnull) + initWithTextColor:(FLTNativeTemplateColor *_Nullable)textColor + backgroundColor:(FLTNativeTemplateColor *_Nullable)backgroundColor + fontStyle:(FLTNativeTemplateFontStyleWrapper *_Nullable)fontStyle + size:(NSNumber *_Nullable)size { + self = [super init]; + if (self) { + _textColor = textColor; + _backgroundColor = backgroundColor; + _fontStyle = fontStyle; + _size = size; + } + return self; +} + +- (UIFont *_Nullable)uiFont { + if ([FLTAdUtil isNull:_fontStyle] && [FLTAdUtil isNull:_size]) { + return nil; + } + + CGFloat size = + [FLTAdUtil isNull:_size] ? UIFont.systemFontSize : _size.floatValue; + if ([FLTAdUtil isNull:_fontStyle]) { + return [UIFont systemFontOfSize:size]; + } else { + switch (_fontStyle.fontStyle) { + case FLTNativeTemplateFontNormal: + return [UIFont systemFontOfSize:size]; + case FLTNativeTemplateFontBold: + return [UIFont boldSystemFontOfSize:size]; + case FLTNativeTemplateFontItalic: + return [UIFont italicSystemFontOfSize:size]; + case FLTNativeTemplateFontMonospace: + if (@available(iOS 13.0, *)) { + return [UIFont monospacedSystemFontOfSize:size + weight:UIFontWeightRegular]; + } else { + return [UIFont monospacedDigitSystemFontOfSize:size + weight:UIFontWeightRegular]; + } + default: + NSLog(@"Unknown fontStyle case: %ld", _fontStyle.fontStyle); + return [UIFont systemFontOfSize:size]; + } + } +} + +@end diff --git a/mih_ui/android/build/ios/SourcePackages/google_mobile_ads-8.0.0/ios/google_mobile_ads/Sources/google_mobile_ads/NativeTemplates/FLTNativeTemplateType.m b/mih_ui/android/build/ios/SourcePackages/google_mobile_ads-8.0.0/ios/google_mobile_ads/Sources/google_mobile_ads/NativeTemplates/FLTNativeTemplateType.m new file mode 100644 index 00000000..6f7ab2e0 --- /dev/null +++ b/mih_ui/android/build/ios/SourcePackages/google_mobile_ads-8.0.0/ios/google_mobile_ads/Sources/google_mobile_ads/NativeTemplates/FLTNativeTemplateType.m @@ -0,0 +1,69 @@ +// Copyright 2022 Google LLC +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// https://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +#import "FLTNativeTemplateType.h" + +#ifndef SWIFTPM_MODULE_BUNDLE + #define SWIFTPM_MODULE_BUNDLE [NSBundle bundleForClass:[self class]] +#endif + +@implementation FLTNativeTemplateType { + int _intValue; +} + +- (instancetype _Nonnull)initWithInt:(int)intValue { + self = [super init]; + if (self) { + _intValue = intValue; + } + return self; +} + +- (NSString *_Nonnull)xibName { + switch (_intValue) { + case 0: + return @"GADTSmallTemplateView"; + case 1: + return @"GADTMediumTemplateView"; + default: + NSLog(@"Unknown template type value: %d", _intValue); + return @"GADTMediumTemplateView"; + } +} + +- (GADTTemplateView *_Nonnull)templateView { + // Bundle file name is declared in Package.swift or podspec + NSBundle *adsBundle = nil; + + NSURL *bundleURL = [[NSBundle mainBundle] URLForResource:@"google_mobile_ads" + withExtension:@"bundle"]; + if (bundleURL) { + adsBundle = [NSBundle bundleWithURL:bundleURL]; + } else { + #ifdef SWIFTPM_MODULE_BUNDLE + adsBundle = SWIFTPM_MODULE_BUNDLE; + #else + adsBundle = [NSBundle bundleForClass:[self class]]; + #endif + } + if (!adsBundle) { + adsBundle = [NSBundle mainBundle]; + } + + GADTTemplateView *templateView = + [adsBundle loadNibNamed:self.xibName owner:nil options:nil].firstObject; + return templateView; +} + +@end diff --git a/mih_ui/android/build/ios/SourcePackages/google_mobile_ads-8.0.0/ios/google_mobile_ads/Sources/google_mobile_ads/Resources/GADTFullScreenTemplateView.xib b/mih_ui/android/build/ios/SourcePackages/google_mobile_ads-8.0.0/ios/google_mobile_ads/Sources/google_mobile_ads/Resources/GADTFullScreenTemplateView.xib new file mode 100644 index 00000000..8e370677 --- /dev/null +++ b/mih_ui/android/build/ios/SourcePackages/google_mobile_ads-8.0.0/ios/google_mobile_ads/Sources/google_mobile_ads/Resources/GADTFullScreenTemplateView.xib @@ -0,0 +1,134 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/mih_ui/android/build/ios/SourcePackages/google_mobile_ads-8.0.0/ios/google_mobile_ads/Sources/google_mobile_ads/Resources/GADTMediumTemplateView.xib b/mih_ui/android/build/ios/SourcePackages/google_mobile_ads-8.0.0/ios/google_mobile_ads/Sources/google_mobile_ads/Resources/GADTMediumTemplateView.xib new file mode 100644 index 00000000..f6bf27cc --- /dev/null +++ b/mih_ui/android/build/ios/SourcePackages/google_mobile_ads-8.0.0/ios/google_mobile_ads/Sources/google_mobile_ads/Resources/GADTMediumTemplateView.xib @@ -0,0 +1,192 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/mih_ui/android/build/ios/SourcePackages/google_mobile_ads-8.0.0/ios/google_mobile_ads/Sources/google_mobile_ads/Resources/GADTSmallTemplateView.xib b/mih_ui/android/build/ios/SourcePackages/google_mobile_ads-8.0.0/ios/google_mobile_ads/Sources/google_mobile_ads/Resources/GADTSmallTemplateView.xib new file mode 100644 index 00000000..ccc9feab --- /dev/null +++ b/mih_ui/android/build/ios/SourcePackages/google_mobile_ads-8.0.0/ios/google_mobile_ads/Sources/google_mobile_ads/Resources/GADTSmallTemplateView.xib @@ -0,0 +1,121 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/mih_ui/android/build/ios/SourcePackages/google_mobile_ads-8.0.0/ios/google_mobile_ads/Sources/google_mobile_ads/UserMessagingPlatform/FLTUserMessagingPlatformManager.m b/mih_ui/android/build/ios/SourcePackages/google_mobile_ads-8.0.0/ios/google_mobile_ads/Sources/google_mobile_ads/UserMessagingPlatform/FLTUserMessagingPlatformManager.m new file mode 100644 index 00000000..5cca5767 --- /dev/null +++ b/mih_ui/android/build/ios/SourcePackages/google_mobile_ads-8.0.0/ios/google_mobile_ads/Sources/google_mobile_ads/UserMessagingPlatform/FLTUserMessagingPlatformManager.m @@ -0,0 +1,180 @@ +// Copyright 2022 Google LLC +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// https://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +#import "FLTUserMessagingPlatformManager.h" +#import "FLTAdUtil.h" +#import "FLTNSString.h" +#import "FLTUserMessagingPlatformReaderWriter.h" +#include + +@implementation FLTUserMessagingPlatformManager { + FlutterMethodChannel *_methodChannel; +} + +- (instancetype _Nonnull)initWithBinaryMessenger: + (NSObject *_Nonnull)binaryMessenger { + self = [self init]; + if (self) { + self.readerWriter = [[FLTUserMessagingPlatformReaderWriter alloc] init]; + NSObject *methodCodec = + [FlutterStandardMethodCodec codecWithReaderWriter:_readerWriter]; + _methodChannel = [[FlutterMethodChannel alloc] + initWithName:@"plugins.flutter.io/google_mobile_ads/ump" + binaryMessenger:binaryMessenger + codec:methodCodec]; + + FLTUserMessagingPlatformManager *__weak weakSelf = self; + [_methodChannel setMethodCallHandler:^(FlutterMethodCall *_Nonnull call, + FlutterResult _Nonnull result) { + [weakSelf handleMethodCall:call result:result]; + }]; + } + return self; +} + +- (UIViewController *)rootController { + return UIApplication.sharedApplication.delegate.window.rootViewController; +} + +- (void)handleMethodCall:(FlutterMethodCall *_Nonnull)call + result:(FlutterResult _Nonnull)result { + if ([call.method isEqualToString:@"ConsentInformation#reset"]) { + [UMPConsentInformation.sharedInstance reset]; + result(nil); + } else if ([call.method + isEqualToString:@"ConsentInformation#getConsentStatus"]) { + UMPConsentStatus status = + UMPConsentInformation.sharedInstance.consentStatus; + result([[NSNumber alloc] initWithInteger:status]); + } else if ([call.method + isEqualToString:@"ConsentInformation#canRequestAds"]) { + result(@([UMPConsentInformation.sharedInstance canRequestAds])); + } else if ([call.method + isEqualToString:@"ConsentInformation#" + @"getPrivacyOptionsRequirementStatus"]) { + UMPPrivacyOptionsRequirementStatus status = + UMPConsentInformation.sharedInstance.privacyOptionsRequirementStatus; + switch (status) { + case UMPPrivacyOptionsRequirementStatusNotRequired: + result([[NSNumber alloc] initWithInt:0]); + break; + case UMPPrivacyOptionsRequirementStatusRequired: + result([[NSNumber alloc] initWithInt:1]); + break; + default: + result([[NSNumber alloc] initWithInt:2]); + break; + } + } else if ([call.method isEqualToString: + @"ConsentInformation#requestConsentInfoUpdate"]) { + UMPRequestParameters *parameters = call.arguments[@"params"]; + [UMPConsentInformation.sharedInstance + requestConsentInfoUpdateWithParameters:parameters + completionHandler:^(NSError *_Nullable error) { + if ([FLTAdUtil isNull:error]) { + result(nil); + } else { + result([FlutterError + errorWithCode:[[NSString alloc] + gma_initWithInt:error.code] + message:error.localizedDescription + details:error.domain]); + } + }]; + } else if ([call.method + isEqualToString:@"UserMessagingPlatform#" + @"loadAndShowConsentFormIfRequired"]) { + [UMPConsentForm + loadAndPresentIfRequiredFromViewController:self.rootController + completionHandler:^(NSError *_Nullable error) { + if ([FLTAdUtil isNull:error]) { + result(nil); + } else { + result([FlutterError + errorWithCode: + [[NSString alloc] + gma_initWithInt:error.code] + message:error + .localizedDescription + details:error.domain]); + } + }]; + } else if ([call.method + isEqualToString:@"UserMessagingPlatform#loadConsentForm"]) { + [UMPConsentForm + loadWithCompletionHandler:^(UMPConsentForm *form, NSError *loadError) { + if ([FLTAdUtil isNull:loadError]) { + [self.readerWriter trackConsentForm:form]; + result(form); + } else { + result([FlutterError + errorWithCode:[[NSString alloc] gma_initWithInt:loadError.code] + message:loadError.localizedDescription + details:loadError.domain]); + } + }]; + } else if ([call.method + isEqualToString: + @"UserMessagingPlatform#showPrivacyOptionsForm"]) { + [UMPConsentForm + presentPrivacyOptionsFormFromViewController:self.rootController + completionHandler:^( + NSError *_Nullable formError) { + if ([FLTAdUtil isNull:formError]) { + result(nil); + } else { + result([FlutterError + errorWithCode: + [[NSString alloc] + gma_initWithInt:formError.code] + message: + formError + .localizedDescription + details:formError.domain]); + } + }]; + } else if ([call.method isEqualToString: + @"ConsentInformation#isConsentFormAvailable"]) { + BOOL isAvailable = UMPConsentInformation.sharedInstance.formStatus == + UMPFormStatusAvailable; + result([[NSNumber alloc] initWithBool:isAvailable]); + } else if ([call.method isEqualToString:@"ConsentForm#show"]) { + UMPConsentForm *consentForm = call.arguments[@"consentForm"]; + [consentForm + presentFromViewController:self.rootController + completionHandler:^(NSError *_Nullable error) { + if ([FLTAdUtil isNull:error]) { + result(nil); + } else { + result([FlutterError + errorWithCode:[[NSString alloc] gma_initWithInt:error.code] + message:error.localizedDescription + details:error.domain]); + } + }]; + } else if ([call.method isEqualToString:@"ConsentForm#dispose"]) { + UMPConsentForm *consentForm = call.arguments[@"consentForm"]; + if ([FLTAdUtil isNotNull:consentForm]) { + [_readerWriter disposeConsentForm:consentForm]; + } else { + NSLog(@"FLTUserMessagingPlatformManager - consentForm resources already " + @"freed"); + } + result(nil); + } else { + result(FlutterMethodNotImplemented); + } +} + +@end diff --git a/mih_ui/android/build/ios/SourcePackages/google_mobile_ads-8.0.0/ios/google_mobile_ads/Sources/google_mobile_ads/UserMessagingPlatform/FLTUserMessagingPlatformReaderWriter.m b/mih_ui/android/build/ios/SourcePackages/google_mobile_ads-8.0.0/ios/google_mobile_ads/Sources/google_mobile_ads/UserMessagingPlatform/FLTUserMessagingPlatformReaderWriter.m new file mode 100644 index 00000000..d3ab46d7 --- /dev/null +++ b/mih_ui/android/build/ios/SourcePackages/google_mobile_ads-8.0.0/ios/google_mobile_ads/Sources/google_mobile_ads/UserMessagingPlatform/FLTUserMessagingPlatformReaderWriter.m @@ -0,0 +1,138 @@ +// Copyright 2022 Google LLC +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// https://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +#import "FLTUserMessagingPlatformReaderWriter.h" +#import "FLTAdUtil.h" +#include + +// The type values below must be consistent for each platform. +typedef NS_ENUM(NSInteger, FLTUserMessagingPlatformField) { + FLTValueConsentRequestParameters = 129, + FLTValueConsentDebugSettings = 130, + FLTValueConsentForm = 131, +}; + +@interface FLTUserMessagingPlatformReader : FlutterStandardReader +@property NSMutableDictionary *consentFormDict; +@end + +@interface FLTUserMessagingPlatformWriter : FlutterStandardWriter +@property NSMutableDictionary *consentFormDict; +@end + +@interface FLTUserMessagingPlatformReaderWriter () +@property NSMutableDictionary *consentFormDict; +@end + +@implementation FLTUserMessagingPlatformReaderWriter + +- (instancetype _Nonnull)init { + self = [super init]; + if (self) { + self.consentFormDict = [[NSMutableDictionary alloc] init]; + } + return self; +} + +- (void)trackConsentForm:(UMPConsentForm *)consentForm { + NSNumber *hash = [[NSNumber alloc] initWithInteger:consentForm.hash]; + _consentFormDict[hash] = consentForm; +} + +- (void)disposeConsentForm:(UMPConsentForm *)consentForm { + NSNumber *hash = [[NSNumber alloc] initWithInteger:consentForm.hash]; + [_consentFormDict removeObjectForKey:hash]; +} + +- (FlutterStandardReader *_Nonnull)readerWithData:(NSData *_Nonnull)data { + FLTUserMessagingPlatformReader *reader = + [[FLTUserMessagingPlatformReader alloc] initWithData:data]; + reader.consentFormDict = self.consentFormDict; + return reader; +} + +- (FlutterStandardWriter *_Nonnull)writerWithData: + (NSMutableData *_Nonnull)data { + FLTUserMessagingPlatformWriter *writer = + [[FLTUserMessagingPlatformWriter alloc] initWithData:data]; + writer.consentFormDict = self.consentFormDict; + return writer; +} +@end + +@implementation FLTUserMessagingPlatformWriter + +- (void)writeValue:(id)value { + if ([value isKindOfClass:[UMPConsentForm class]]) { + UMPConsentForm *form = (UMPConsentForm *)value; + NSNumber *hash = [[NSNumber alloc] initWithInteger:form.hash]; + [self writeByte:FLTValueConsentForm]; + [self writeValue:hash]; + } else if ([value isKindOfClass:[UMPRequestParameters class]]) { + UMPRequestParameters *params = (UMPRequestParameters *)value; + + [self writeByte:FLTValueConsentRequestParameters]; + [self writeValue:[[NSNumber alloc] + initWithBool:params.tagForUnderAgeOfConsent]]; + [self writeValue:params.debugSettings]; + } else if ([value isKindOfClass:[UMPDebugSettings class]]) { + UMPDebugSettings *debugSettings = (UMPDebugSettings *)value; + [self writeByte:FLTValueConsentDebugSettings]; + [self + writeValue:[[NSNumber alloc] initWithInteger:debugSettings.geography]]; + [self writeValue:debugSettings.testDeviceIdentifiers]; + } else { + [super writeValue:value]; + } +} + +@end + +@implementation FLTUserMessagingPlatformReader + +- (id _Nullable)readValueOfType:(UInt8)type { + FLTUserMessagingPlatformField field = (FLTUserMessagingPlatformField)type; + switch (field) { + case FLTValueConsentRequestParameters: { + UMPRequestParameters *parameters = [[UMPRequestParameters alloc] init]; + NSNumber *tfuac = [self readValueOfType:[self readByte]]; + + parameters.tagForUnderAgeOfConsent = tfuac.boolValue; + UMPDebugSettings *debugSettings = [self readValueOfType:[self readByte]]; + parameters.debugSettings = debugSettings; + return parameters; + } + case FLTValueConsentDebugSettings: { + UMPDebugSettings *debugSettings = [[UMPDebugSettings alloc] init]; + NSNumber *geography = [self readValueOfType:[self readByte]]; + NSArray *testIdentifiers = + [self readValueOfType:[self readByte]]; + if ([FLTAdUtil isNotNull:geography]) { + debugSettings.geography = geography.intValue; + } + if ([FLTAdUtil isNotNull:testIdentifiers]) { + debugSettings.testDeviceIdentifiers = testIdentifiers; + } + return debugSettings; + } + case FLTValueConsentForm: { + NSNumber *hash = [self readValueOfType:[self readByte]]; + return _consentFormDict[hash]; + } + default: + return [super readValueOfType:type]; + } +} + +@end diff --git a/mih_ui/android/build/ios/SourcePackages/google_mobile_ads-8.0.0/ios/google_mobile_ads/Sources/google_mobile_ads/include/google_mobile_ads/FLTAdInstanceManager_Internal.h b/mih_ui/android/build/ios/SourcePackages/google_mobile_ads-8.0.0/ios/google_mobile_ads/Sources/google_mobile_ads/include/google_mobile_ads/FLTAdInstanceManager_Internal.h new file mode 100644 index 00000000..1e8dd554 --- /dev/null +++ b/mih_ui/android/build/ios/SourcePackages/google_mobile_ads-8.0.0/ios/google_mobile_ads/Sources/google_mobile_ads/include/google_mobile_ads/FLTAdInstanceManager_Internal.h @@ -0,0 +1,74 @@ +// Copyright 2021 Google LLC +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// https://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +#import "FLTAd_Internal.h" +#import "FLTGoogleMobileAdsCollection_Internal.h" +#import "FLTGoogleMobileAdsReaderWriter_Internal.h" +#import + +@protocol FLTAd; +@class FLTBannerAd; +@class FLTNativeAd; +@class FLTRewardedAd; +@class FLTRewardedInterstitialAd; +@class FLTRewardItem; +@class FLTAdValue; + +@interface FLTAdInstanceManager : NSObject +- (instancetype _Nonnull)initWithBinaryMessenger: + (id _Nonnull)binaryMessenger; +- (id _Nullable)adFor:(NSNumber *_Nonnull)adId; +- (NSNumber *_Nullable)adIdFor:(id _Nonnull)ad; +- (void)loadAd:(id _Nonnull)ad; +- (void)dispose:(NSNumber *_Nonnull)adId; +- (void)showAdWithID:(NSNumber *_Nonnull)adId; +- (void)onAdLoaded:(id _Nonnull)ad + responseInfo:(GADResponseInfo *_Nonnull)responseInfo; +- (void)onAdFailedToLoad:(id _Nonnull)ad error:(NSError *_Nonnull)error; +- (void)onAppEvent:(id _Nonnull)ad + name:(NSString *_Nullable)name + data:(NSString *_Nullable)data; +- (void)onNativeAdImpression:(FLTNativeAd *_Nonnull)ad; +- (void)onNativeAdWillPresentScreen:(FLTNativeAd *_Nonnull)ad; +- (void)onNativeAdDidDismissScreen:(FLTNativeAd *_Nonnull)ad; +- (void)onNativeAdWillDismissScreen:(FLTNativeAd *_Nonnull)ad; +- (void)onRewardedAdUserEarnedReward:(FLTRewardedAd *_Nonnull)ad + reward:(FLTRewardItem *_Nonnull)reward; +- (void)onRewardedInterstitialAdUserEarnedReward: + (FLTRewardedInterstitialAd *_Nonnull)ad + reward: + (FLTRewardItem *_Nonnull)reward; +- (void)onPaidEvent:(id _Nonnull)ad value:(FLTAdValue *_Nonnull)value; +- (void)onBannerImpression:(FLTBannerAd *_Nonnull)ad; +- (void)onBannerWillDismissScreen:(FLTBannerAd *_Nonnull)ad; +- (void)onBannerDidDismissScreen:(FLTBannerAd *_Nonnull)ad; +- (void)onBannerWillPresentScreen:(FLTBannerAd *_Nonnull)ad; + +- (void)adWillPresentFullScreenContent:(id _Nonnull)ad; +- (void)adDidDismissFullScreenContent:(id _Nonnull)ad; +- (void)adWillDismissFullScreenContent:(id _Nonnull)ad; +- (void)adDidRecordImpression:(id _Nonnull)ad; +- (void)adDidRecordClick:(id _Nonnull)ad; +- (void)didFailToPresentFullScreenContentWithError:(id _Nonnull)ad + error:(NSError *_Nonnull)error; +- (void)onFluidAdHeightChanged:(id _Nonnull)ad height:(CGFloat)height; +- (void)disposeAllAds; +@end + +@interface FLTNewGoogleMobileAdsViewFactory + : NSObject +@property(readonly) FLTAdInstanceManager *_Nonnull manager; +- (instancetype _Nonnull)initWithManager: + (FLTAdInstanceManager *_Nonnull)manager; +@end diff --git a/mih_ui/android/build/ios/SourcePackages/google_mobile_ads-8.0.0/ios/google_mobile_ads/Sources/google_mobile_ads/include/google_mobile_ads/FLTAdUtil.h b/mih_ui/android/build/ios/SourcePackages/google_mobile_ads-8.0.0/ios/google_mobile_ads/Sources/google_mobile_ads/include/google_mobile_ads/FLTAdUtil.h new file mode 100644 index 00000000..1a0c2f9f --- /dev/null +++ b/mih_ui/android/build/ios/SourcePackages/google_mobile_ads-8.0.0/ios/google_mobile_ads/Sources/google_mobile_ads/include/google_mobile_ads/FLTAdUtil.h @@ -0,0 +1,31 @@ +// Copyright 2021 Google LLC +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// https://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +#import +#import +#import + +@interface FLTAdUtil : NSObject + ++ (BOOL)isNull:(_Nullable id)object; + ++ (BOOL)isNotNull:(_Nullable id)object; + ++ (WKWebView *_Nullable)getWebView:(NSNumber *_Nonnull)webViewId + flutterPluginRegistry: + (id _Nonnull)flutterPluginRegistry; + +@property(readonly, class) NSString *_Nonnull requestAgent; + +@end diff --git a/mih_ui/android/build/ios/SourcePackages/google_mobile_ads-8.0.0/ios/google_mobile_ads/Sources/google_mobile_ads/include/google_mobile_ads/FLTAd_Internal.h b/mih_ui/android/build/ios/SourcePackages/google_mobile_ads-8.0.0/ios/google_mobile_ads/Sources/google_mobile_ads/include/google_mobile_ads/FLTAd_Internal.h new file mode 100644 index 00000000..1d48655c --- /dev/null +++ b/mih_ui/android/build/ios/SourcePackages/google_mobile_ads-8.0.0/ios/google_mobile_ads/Sources/google_mobile_ads/include/google_mobile_ads/FLTAd_Internal.h @@ -0,0 +1,319 @@ +// Copyright 2021 Google LLC +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// https://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +#import "FLTAdInstanceManager_Internal.h" +#import "FLTGoogleMobileAdsPlugin.h" +#import "FLTMediationExtras.h" +#import "FLTMediationNetworkExtrasProvider.h" +#import "FLTMobileAds_Internal.h" +#import "FLTNativeTemplateStyle.h" +#import "GADTTemplateView.h" +#import +#import + +@class FLTAdInstanceManager; +@protocol FLTNativeAdFactory; + +@interface FLTAdSize : NSObject +@property(readonly) GADAdSize size; +@property(readonly) NSNumber *_Nonnull width; +@property(readonly) NSNumber *_Nonnull height; +- (instancetype _Nonnull)initWithWidth:(NSNumber *_Nonnull)width + height:(NSNumber *_Nonnull)height; +- (instancetype _Nonnull)initWithAdSize:(GADAdSize)size; +@end + +/** + * Wrapper around top level methods for `GADAdSize` for the Google Mobile Ads + * Plugin. + */ +@interface FLTAdSizeFactory : NSObject +- (GADAdSize)portraitAnchoredAdaptiveBannerAdSizeWithWidth: + (NSNumber *_Nonnull)width; +- (GADAdSize)landscapeAnchoredAdaptiveBannerAdSizeWithWidth: + (NSNumber *_Nonnull)width; +- (GADAdSize)currentOrientationAnchoredAdaptiveBannerAdSizeWithWidth: + (NSNumber *_Nonnull)width; +- (GADAdSize)currentOrientationInlineAdaptiveBannerSizeWithWidth: + (NSNumber *_Nonnull)width; +- (GADAdSize)portraitOrientationInlineAdaptiveBannerSizeWithWidth: + (NSNumber *_Nonnull)width; +- (GADAdSize)landscapeInlineAdaptiveBannerAdSizeWithWidth: + (NSNumber *_Nonnull)width; +- (GADAdSize) + inlineAdaptiveBannerAdSizeWithWidthAndMaxHeight:(NSNumber *_Nonnull)width + maxHeight: + (NSNumber *_Nonnull)maxHeight; + +@end + +@interface FLTAnchoredAdaptiveBannerSize : FLTAdSize +@property(readonly) NSString *_Nonnull orientation; +- (instancetype _Nonnull)initWithFactory:(FLTAdSizeFactory *_Nonnull)factory + orientation:(NSString *_Nullable)orientation + width:(NSNumber *_Nonnull)width + isLarge:(BOOL)isLarge; +@end + +@interface FLTInlineAdaptiveBannerSize : FLTAdSize +@property(readonly) NSNumber *_Nullable orientation; +@property(readonly) NSNumber *_Nullable maxHeight; +- (instancetype _Nonnull)initWithFactory:(FLTAdSizeFactory *_Nonnull)factory + width:(NSNumber *_Nonnull)width + maxHeight:(NSNumber *_Nullable)maxHeight + orientation:(NSNumber *_Nullable)orientation; +@end + +@interface FLTSmartBannerSize : FLTAdSize +@property(readonly) NSString *_Nonnull orientation; +- (instancetype _Nonnull)initWithOrientation:(NSString *_Nonnull)orientation; +@end + +@interface FLTFluidSize : FLTAdSize +@end + +@interface FLTAdRequest : NSObject +@property NSArray *_Nullable keywords; +@property NSString *_Nullable contentURL; +@property BOOL nonPersonalizedAds; +@property NSArray *_Nullable neighboringContentURLs; +@property NSString *_Nullable mediationExtrasIdentifier + DEPRECATED_MSG_ATTRIBUTE("Use mediationExtras instead."); +@property id< + FLTMediationNetworkExtrasProvider> _Nullable mediationNetworkExtrasProvider + DEPRECATED_MSG_ATTRIBUTE("Use mediationExtras instead."); +@property NSDictionary *_Nullable adMobExtras; +@property NSString *_Nonnull requestAgent; +@property NSArray> *_Nullable mediationExtras; + +- (GADRequest *_Nonnull)asGADRequest:(NSString *_Nonnull)adUnitId; +@end + +/** + * Wrapper around `GADAdNetworkResponseInfo`. + */ +@interface FLTGADAdNetworkResponseInfo : NSObject + +@property NSString *_Nullable adNetworkClassName; +@property NSNumber *_Nullable latency; +@property NSString *_Nullable dictionaryDescription; +@property NSDictionary *_Nullable adUnitMapping; +@property NSError *_Nullable error; +@property NSString *_Nullable adSourceInstanceID; +@property NSString *_Nullable adSourceID; +@property NSString *_Nullable adSourceName; +@property NSString *_Nullable adSourceInstanceName; + +- (instancetype _Nonnull)initWithResponseInfo: + (GADAdNetworkResponseInfo *_Nonnull)responseInfo; +@end + +/** + * Wrapper around `GADResponseInfo`. + */ +@interface FLTGADResponseInfo : NSObject +@property NSString *_Nullable responseIdentifier; +@property NSString *_Nullable adNetworkClassName; +@property NSArray *_Nullable adNetworkInfoArray; +@property FLTGADAdNetworkResponseInfo *_Nullable loadedAdNetworkResponseInfo; +@property NSDictionary *_Nullable extrasDictionary; + +- (instancetype _Nonnull)initWithResponseInfo: + (GADResponseInfo *_Nonnull)responseInfo; +@end + +/** + * Wrapper around `GAMRequest` for the Google Mobile Ads Plugin. + * Extracts response info from the userInfo dict. + */ +@interface FLTLoadAdError : NSObject +@property NSInteger code; +@property NSString *_Nullable domain; +@property NSString *_Nullable message; +@property FLTGADResponseInfo *_Nullable responseInfo; + +- (instancetype _Nonnull)initWithError:(NSError *_Nonnull)error; +@end + +/** + * Wrapper around `GAMRequest` for the Google Mobile Ads Plugin. + */ +@interface FLTGAMAdRequest : FLTAdRequest +@property NSDictionary *_Nullable customTargeting; +@property NSDictionary *> + *_Nullable customTargetingLists; +@property NSString *_Nullable pubProvidedID; + +- (GAMRequest *_Nonnull)asGAMRequest:(NSString *_Nonnull)adUnitId; +@end + +@protocol FLTAd +@property(weak) FLTAdInstanceManager *_Nullable manager; +@property(readonly) NSNumber *_Nonnull adId; +- (void)load; +@end + +@protocol FLTAdWithoutView +- (void)show; +@end + +@interface FLTBaseAd : NSObject +@property(readonly) NSNumber *_Nonnull adId; +@end + +@interface FLTBannerAd + : FLTBaseAd +- (instancetype _Nonnull)initWithAdUnitId:(NSString *_Nonnull)adUnitId + size:(FLTAdSize *_Nonnull)size + request:(FLTAdRequest *_Nonnull)request + rootViewController: + (UIViewController *_Nonnull)rootViewController + adId:(NSNumber *_Nonnull)adId; +- (FLTAdSize *_Nullable)getAdSize; +- (GADBannerView *_Nonnull)bannerView; +- (BOOL)isCollapsible; +@end + +/** + * Wrapper around `GAMBannerAd` for the Google Mobile Ads Plugin. + */ +@interface FLTGAMBannerAd : FLTBannerAd +- (instancetype _Nonnull)initWithAdUnitId:(NSString *_Nonnull)adUnitId + sizes:(NSArray *_Nonnull)sizes + request:(FLTGAMAdRequest *_Nonnull)request + rootViewController: + (UIViewController *_Nonnull)rootViewController + adId:(NSNumber *_Nonnull)adId; + +@end + +/** + * An extension of`GAMBannerAd` for fluid ad size. + */ +@interface FLTFluidGAMBannerAd : FLTGAMBannerAd +- (instancetype _Nonnull)initWithAdUnitId:(NSString *_Nonnull)adUnitId + request:(FLTGAMAdRequest *_Nonnull)request + rootViewController: + (UIViewController *_Nonnull)rootViewController + adId:(NSNumber *_Nonnull)adId; +@end + +@interface FLTFullScreenAd + : FLTBaseAd +@end + +@interface FLTInterstitialAd : FLTFullScreenAd +- (instancetype _Nonnull)initWithAdUnitId:(NSString *_Nonnull)adUnitId + request:(FLTAdRequest *_Nonnull)request + adId:(NSNumber *_Nonnull)adId; +- (GADInterstitialAd *_Nullable)interstitial; +- (NSString *_Nonnull)adUnitId; +- (void)load; + +@end + +@interface FLTGAMInterstitialAd : FLTInterstitialAd +- (instancetype _Nonnull)initWithAdUnitId:(NSString *_Nonnull)adUnitId + request:(FLTGAMAdRequest *_Nonnull)request + adId:(NSNumber *_Nonnull)adId; +@end + +@interface FLTRewardedAd : FLTFullScreenAd +- (instancetype _Nonnull)initWithAdUnitId:(NSString *_Nonnull)adUnitId + request:(FLTAdRequest *_Nonnull)request + adId:(NSNumber *_Nonnull)adId; +- (GADRewardedAd *_Nullable)rewardedAd; +- (void)setServerSideVerificationOptions: + (FLTServerSideVerificationOptions *_Nullable)serverSideVerificationOptions; +@end + +@interface FLTRewardedInterstitialAd : FLTFullScreenAd +- (instancetype _Nonnull)initWithAdUnitId:(NSString *_Nonnull)adUnitId + request:(FLTAdRequest *_Nonnull)request + adId:(NSNumber *_Nonnull)adId; +- (GADRewardedInterstitialAd *_Nullable)rewardedInterstitialAd; +- (void)setServerSideVerificationOptions: + (FLTServerSideVerificationOptions *_Nullable)serverSideVerificationOptions; +@end + +@interface FLTAppOpenAd : FLTFullScreenAd +- (instancetype _Nonnull)initWithAdUnitId:(NSString *_Nonnull)adUnitId + request:(FLTAdRequest *_Nonnull)request + adId:(NSNumber *_Nonnull)adId; +- (GADAppOpenAd *_Nullable)appOpenAd; +@end + +@interface FLTVideoOptions : NSObject +@property(readonly) NSNumber *_Nullable clickToExpandRequested; +@property(readonly) NSNumber *_Nullable customControlsRequested; +@property(readonly) NSNumber *_Nullable startMuted; +- (instancetype _Nonnull) + initWithClickToExpandRequested:(NSNumber *_Nullable)clickToExpandRequested + customControlsRequested:(NSNumber *_Nullable)customControlsRequested + startMuted:(NSNumber *_Nullable)startMuted; +- (GADVideoOptions *_Nonnull)asGADVideoOptions; + +@end + +@interface FLTNativeAdOptions : NSObject +@property(readonly) NSNumber *_Nullable adChoicesPlacement; +@property(readonly) NSNumber *_Nullable mediaAspectRatio; +@property(readonly) FLTVideoOptions *_Nullable videoOptions; +@property(readonly) NSNumber *_Nullable requestCustomMuteThisAd; +@property(readonly) NSNumber *_Nullable shouldRequestMultipleImages; +@property(readonly) NSNumber *_Nullable shouldReturnUrlsForImageAssets; + +- (instancetype _Nonnull) + initWithAdChoicesPlacement:(NSNumber *_Nullable)adChoicesPlacement + mediaAspectRatio:(NSNumber *_Nullable)mediaAspectRatio + videoOptions:(FLTVideoOptions *_Nullable)videoOptions + requestCustomMuteThisAd:(NSNumber *_Nullable)requestCustomMuteThisAd + shouldRequestMultipleImages: + (NSNumber *_Nullable)shouldRequestMultipleImages + shouldReturnUrlsForImageAssets: + (NSNumber *_Nullable)shouldReturnUrlsForImageAssets; + +- (NSArray *_Nonnull)asGADAdLoaderOptions; +@end + +@interface FLTNativeAd + : FLTBaseAd +- (instancetype _Nonnull) + initWithAdUnitId:(NSString *_Nonnull)adUnitId + request:(FLTAdRequest *_Nonnull)request + nativeAdFactory:(NSObject *_Nonnull)nativeAdFactory + customOptions:(NSDictionary *_Nullable)customOptions + rootViewController:(UIViewController *_Nonnull)rootViewController + adId:(NSNumber *_Nonnull)adId + nativeAdOptions:(FLTNativeAdOptions *_Nullable)nativeAdOptions + nativeTemplateStyle:(FLTNativeTemplateStyle *_Nullable)nativeTemplateStyle; +- (GADAdLoader *_Nonnull)adLoader; +@end + +@interface FLTRewardItem : NSObject +@property(readonly) NSNumber *_Nonnull amount; +@property(readonly) NSString *_Nonnull type; +- (instancetype _Nonnull)initWithAmount:(NSNumber *_Nonnull)amount + type:(NSString *_Nonnull)type; +@end + +@interface FLTAdValue : NSObject +@property(readonly) NSDecimalNumber *_Nonnull valueMicros; +@property(readonly) NSInteger precision; +@property(readonly) NSString *_Nonnull currencyCode; +- (instancetype _Nonnull)initWithValue:(NSDecimalNumber *_Nonnull)value + precision:(NSInteger)precision + currencyCode:(NSString *_Nonnull)currencyCode; +@end diff --git a/mih_ui/android/build/ios/SourcePackages/google_mobile_ads-8.0.0/ios/google_mobile_ads/Sources/google_mobile_ads/include/google_mobile_ads/FLTAppStateNotifier.h b/mih_ui/android/build/ios/SourcePackages/google_mobile_ads-8.0.0/ios/google_mobile_ads/Sources/google_mobile_ads/include/google_mobile_ads/FLTAppStateNotifier.h new file mode 100644 index 00000000..027d4689 --- /dev/null +++ b/mih_ui/android/build/ios/SourcePackages/google_mobile_ads-8.0.0/ios/google_mobile_ads/Sources/google_mobile_ads/include/google_mobile_ads/FLTAppStateNotifier.h @@ -0,0 +1,22 @@ +// Copyright 2021 Google LLC +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// https://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +#import + +@interface FLTAppStateNotifier : NSObject + +- (instancetype _Nonnull)initWithBinaryMessenger: + (NSObject *_Nonnull)messenger; + +@end diff --git a/mih_ui/android/build/ios/SourcePackages/google_mobile_ads-8.0.0/ios/google_mobile_ads/Sources/google_mobile_ads/include/google_mobile_ads/FLTConstants.h b/mih_ui/android/build/ios/SourcePackages/google_mobile_ads-8.0.0/ios/google_mobile_ads/Sources/google_mobile_ads/include/google_mobile_ads/FLTConstants.h new file mode 100644 index 00000000..46a063b8 --- /dev/null +++ b/mih_ui/android/build/ios/SourcePackages/google_mobile_ads-8.0.0/ios/google_mobile_ads/Sources/google_mobile_ads/include/google_mobile_ads/FLTConstants.h @@ -0,0 +1,16 @@ +// Copyright 2021 Google LLC +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// https://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +/** Versioned request agent string. */ +#define FLT_REQUEST_AGENT_VERSIONED @"Flutter-GMA-8.0.0" diff --git a/mih_ui/android/build/ios/SourcePackages/google_mobile_ads-8.0.0/ios/google_mobile_ads/Sources/google_mobile_ads/include/google_mobile_ads/FLTGoogleMobileAdsCollection_Internal.h b/mih_ui/android/build/ios/SourcePackages/google_mobile_ads-8.0.0/ios/google_mobile_ads/Sources/google_mobile_ads/include/google_mobile_ads/FLTGoogleMobileAdsCollection_Internal.h new file mode 100644 index 00000000..5034d467 --- /dev/null +++ b/mih_ui/android/build/ios/SourcePackages/google_mobile_ads-8.0.0/ios/google_mobile_ads/Sources/google_mobile_ads/include/google_mobile_ads/FLTGoogleMobileAdsCollection_Internal.h @@ -0,0 +1,29 @@ +// Copyright 2021 Google LLC +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// https://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +#import "FLTAd_Internal.h" +#import "FLTGoogleMobileAdsPlugin.h" +#import + +@protocol FLTAd; + +// Thread-safe wrapper of NSMutableDictionary. +@interface FLTGoogleMobileAdsCollection : NSObject +- (void)setObject:(ObjectType _Nonnull)object + forKey:(KeyType _Nonnull)key; +- (void)removeObjectForKey:(KeyType _Nonnull)key; +- (id _Nullable)objectForKey:(KeyType _Nonnull)key; +- (NSArray *_Nonnull)allKeysForObject:(ObjectType _Nonnull)object; +- (void)removeAllObjects; +@end diff --git a/mih_ui/android/build/ios/SourcePackages/google_mobile_ads-8.0.0/ios/google_mobile_ads/Sources/google_mobile_ads/include/google_mobile_ads/FLTGoogleMobileAdsPlugin.h b/mih_ui/android/build/ios/SourcePackages/google_mobile_ads-8.0.0/ios/google_mobile_ads/Sources/google_mobile_ads/include/google_mobile_ads/FLTGoogleMobileAdsPlugin.h new file mode 100644 index 00000000..9da745da --- /dev/null +++ b/mih_ui/android/build/ios/SourcePackages/google_mobile_ads-8.0.0/ios/google_mobile_ads/Sources/google_mobile_ads/include/google_mobile_ads/FLTGoogleMobileAdsPlugin.h @@ -0,0 +1,111 @@ +// Copyright 2021 Google LLC +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// https://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +#import + +#import + +#import "FLTAdInstanceManager_Internal.h" +#import "FLTAd_Internal.h" +#import "FLTMediationNetworkExtrasProvider.h" +#import "FLTMobileAds_Internal.h" + +#define FLTLogWarning(format, ...) \ + NSLog((@"GoogleMobileAdsPlugin " format), ##__VA_ARGS__) + +/** + * Creates a `GADNativeAdView` to be shown in a Flutter app. + * + * When a Native Ad is created in Dart, this protocol is responsible for + * building the `GADNativeAdView`. Register a class that implements this with a + * `FLTGoogleMobileAdsPlugin` to use in conjunction with Flutter. + */ +@protocol FLTNativeAdFactory +@required +/** + * Creates a `GADNativeAdView` with a `GADNativeAd`. + * + * @param nativeAd Ad information used to create a `GADNativeAdView` + * @param customOptions Used to pass additional custom options to create the + * `GADNativeAdView`. Nullable. + * @return a `GADNativeAdView` that is overlaid on top of the FlutterView. + */ +- (GADNativeAdView *_Nullable)createNativeAd:(GADNativeAd *_Nonnull)nativeAd + customOptions: + (NSDictionary *_Nullable)customOptions; +@end + +/** + * Flutter plugin providing access to the Google Mobile Ads API. + */ +@interface FLTGoogleMobileAdsPlugin : NSObject + +/** + * Registers a FLTMediationNetworkExtrasProvider used to provide mediation + * extras when the plugin creates ad requests. + * + * @param mediationNetworkExtrasProvider the FLTMediationNetworkExtrasProvider + * which will be used to get extras when ad requests are created. + * @param registry the associated FlutterPluginRegistry the plugin will be + * attached to + * @return whether mediationNetworkExtrasProvider was successfully registered to + * a FLTGoogleMobileAdsPlugin in the registry. + */ ++ (BOOL)registerMediationNetworkExtrasProvider: + (id _Nonnull) + mediationNetworkExtrasProvider + registry: + (id _Nonnull) + registry + __deprecated_msg("Use MediationExtras instead"); + +/* + * Unregisters any FLTMediationNetworkExtrasProvider that was associated with + * the FLTGoogleMobileAdsPlugin in registry. + */ ++ (void)unregisterMediationNetworkExtrasProvider: + (id _Nonnull)registry + __deprecated_msg("Use MediationExtras instead"); + +/** + * Adds a `FLTNativeAdFactory` used to create a `GADNativeAdView`s from a Native + * Ad created in Dart. + * + * @param registry maintains access to a `FLTGoogleMobileAdsPlugin`` instance. + * @param factoryId a unique identifier for the ad factory. The Native Ad + * created in Dart includes a parameter that refers to this. + * @param nativeAdFactory creates `GADNativeAdView`s when a Native Ad is created + * in Dart. + * @return whether the factoryId is unique and the nativeAdFactory was + * successfully added. + */ ++ (BOOL)registerNativeAdFactory:(id _Nonnull)registry + factoryId:(NSString *_Nonnull)factoryId + nativeAdFactory: + (id _Nonnull)nativeAdFactory; + +/** + * Unregisters a `FLTNativeAdFactory` used to create `GADNativeAdView`s from a + * Native Ad created in Dart. + * + * @param registry maintains access to a `FLTGoogleMobileAdsPlugin `instance. + * @param factoryId a unique identifier for the ad factory. The Native Ad + * created in Dart includes a parameter that refers to this. + * @return the previous `FLTNativeAdFactory` associated with this factoryId, or + * null if there was none for this factoryId. + */ ++ (id _Nullable) + unregisterNativeAdFactory:(id _Nonnull)registry + factoryId:(NSString *_Nonnull)factoryId; +@end diff --git a/mih_ui/android/build/ios/SourcePackages/google_mobile_ads-8.0.0/ios/google_mobile_ads/Sources/google_mobile_ads/include/google_mobile_ads/FLTGoogleMobileAdsReaderWriter_Internal.h b/mih_ui/android/build/ios/SourcePackages/google_mobile_ads-8.0.0/ios/google_mobile_ads/Sources/google_mobile_ads/include/google_mobile_ads/FLTGoogleMobileAdsReaderWriter_Internal.h new file mode 100644 index 00000000..5d8092af --- /dev/null +++ b/mih_ui/android/build/ios/SourcePackages/google_mobile_ads-8.0.0/ios/google_mobile_ads/Sources/google_mobile_ads/include/google_mobile_ads/FLTGoogleMobileAdsReaderWriter_Internal.h @@ -0,0 +1,38 @@ +// Copyright 2021 Google LLC +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// https://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +#import "FLTAd_Internal.h" +#import "FLTMediationNetworkExtrasProvider.h" +#import + +@class FLTAdSizeFactory; + +@interface FLTGoogleMobileAdsReaderWriter : FlutterStandardReaderWriter +@property(readonly) FLTAdSizeFactory *_Nonnull adSizeFactory; +@property id< + FLTMediationNetworkExtrasProvider> _Nullable mediationNetworkExtrasProvider; + +- (instancetype _Nonnull)initWithFactory: + (FLTAdSizeFactory *_Nonnull)adSizeFactory; +@end + +@interface FLTGoogleMobileAdsReader : FlutterStandardReader +@property(readonly) FLTAdSizeFactory *_Nonnull adSizeFactory; +@property id< + FLTMediationNetworkExtrasProvider> _Nullable mediationNetworkExtrasProvider; + +- (instancetype _Nonnull)initWithFactory: + (FLTAdSizeFactory *_Nonnull)adSizeFactory + data:(NSData *_Nonnull)data; +@end diff --git a/mih_ui/android/build/ios/SourcePackages/google_mobile_ads-8.0.0/ios/google_mobile_ads/Sources/google_mobile_ads/include/google_mobile_ads/FLTMediationExtras.h b/mih_ui/android/build/ios/SourcePackages/google_mobile_ads-8.0.0/ios/google_mobile_ads/Sources/google_mobile_ads/include/google_mobile_ads/FLTMediationExtras.h new file mode 100644 index 00000000..398d612a --- /dev/null +++ b/mih_ui/android/build/ios/SourcePackages/google_mobile_ads-8.0.0/ios/google_mobile_ads/Sources/google_mobile_ads/include/google_mobile_ads/FLTMediationExtras.h @@ -0,0 +1,35 @@ +// Copyright 2024 Google LLC +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// https://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +#import +#import + +/** + * Mediation adapters will provide a class that conforms to this protocol to be + * added to the `FLTAdRequest`. + */ +@protocol FlutterMediationExtras + +// Pair of key-values to be stored received from the dart layer. +@property NSDictionary *_Nullable extras; + +/** + * Parses the values in @c extras to the required protocol to append Mediation + * extras to the `FLTAdRequest`. + * + * @return the parsed extra values to an object that conforms to protocol. + */ +- (id _Nonnull)getMediationExtras; + +@end diff --git a/mih_ui/android/build/ios/SourcePackages/google_mobile_ads-8.0.0/ios/google_mobile_ads/Sources/google_mobile_ads/include/google_mobile_ads/FLTMediationNetworkExtrasProvider.h b/mih_ui/android/build/ios/SourcePackages/google_mobile_ads-8.0.0/ios/google_mobile_ads/Sources/google_mobile_ads/include/google_mobile_ads/FLTMediationNetworkExtrasProvider.h new file mode 100644 index 00000000..3f2c9281 --- /dev/null +++ b/mih_ui/android/build/ios/SourcePackages/google_mobile_ads-8.0.0/ios/google_mobile_ads/Sources/google_mobile_ads/include/google_mobile_ads/FLTMediationNetworkExtrasProvider.h @@ -0,0 +1,42 @@ +// Copyright 2021 Google LLC +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// https://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +#import + +/** + * Provides network specific parameters to include in ad requests. + * An implementation of this protocol can be passed to FLTGoogleMobileAdsPlugin + * using registerMediationNetworkExtrasProvider + * + * @deprecated Use FLTMediationExtras instead. + */ +__attribute__((deprecated)) +@protocol FLTMediationNetworkExtrasProvider +@required + +/** + * Gets an array of GADAdNetworkExtras to include in the GADRequest for the + * given adUnitId and mediationExtrasIdentifier. + * + * @param adUnitId the ad unit id associated with the ad request + * @param mediationExtrasIdentifier n optional string that comes from the + * associated dart ad request object. This allows for additional control of + * which extras to include for an ad request, beyond just the ad unit. + * @return an array of GADAdNetworkExtras to include in the ad request. + */ +- (NSArray> *_Nullable) + getMediationExtras:(NSString *_Nonnull)adUnitId + mediationExtrasIdentifier:(NSString *_Nullable)mediationExtrasIdentifier; + +@end diff --git a/mih_ui/android/build/ios/SourcePackages/google_mobile_ads-8.0.0/ios/google_mobile_ads/Sources/google_mobile_ads/include/google_mobile_ads/FLTMobileAds_Internal.h b/mih_ui/android/build/ios/SourcePackages/google_mobile_ads-8.0.0/ios/google_mobile_ads/Sources/google_mobile_ads/include/google_mobile_ads/FLTMobileAds_Internal.h new file mode 100644 index 00000000..06414f4d --- /dev/null +++ b/mih_ui/android/build/ios/SourcePackages/google_mobile_ads-8.0.0/ios/google_mobile_ads/Sources/google_mobile_ads/include/google_mobile_ads/FLTMobileAds_Internal.h @@ -0,0 +1,57 @@ +// Copyright 2021 Google LLC +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// https://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +#import + +NS_ASSUME_NONNULL_BEGIN + +/** + * Represent `GADAdapterInitializationState` for the Google Mobile Ads Plugin. + * + * Used to help serialize and pass `GADAdapterInitializationState` to Dart. + */ +typedef NS_ENUM(NSUInteger, FLTAdapterInitializationState) { + FLTAdapterInitializationStateNotReady, + FLTAdapterInitializationStateReady, +}; + +/** + * Wrapper around `GADAdapterStatus` for the Google Mobile Ads Plugin. + * + * Used to help serialize and pass `GADAdapterStatus` to Dart. + */ +@interface FLTAdapterStatus : NSObject +@property NSNumber *state; +@property NSString *statusDescription; +@property NSNumber *latency; +- (instancetype)initWithStatus:(GADAdapterStatus *)status; +@end + +/** + * Wrapper around `GADInitializationStatus` for the Google Mobile Ads Plugin. + * + * Used to help serialize and pass `GADInitializationStatus` to Dart. + */ +@interface FLTInitializationStatus : NSObject +@property NSDictionary *adapterStatuses; +- (instancetype)initWithStatus:(GADInitializationStatus *)status; +@end + +@interface FLTServerSideVerificationOptions : NSObject +@property(nonatomic, copy, nullable) NSString *userIdentifier; +@property(nonatomic, copy, nullable) NSString *customRewardString; +- (GADServerSideVerificationOptions *_Nonnull) + asGADServerSideVerificationOptions; +@end +NS_ASSUME_NONNULL_END diff --git a/mih_ui/android/build/ios/SourcePackages/google_mobile_ads-8.0.0/ios/google_mobile_ads/Sources/google_mobile_ads/include/google_mobile_ads/FLTNSString.h b/mih_ui/android/build/ios/SourcePackages/google_mobile_ads-8.0.0/ios/google_mobile_ads/Sources/google_mobile_ads/include/google_mobile_ads/FLTNSString.h new file mode 100644 index 00000000..5ec63900 --- /dev/null +++ b/mih_ui/android/build/ios/SourcePackages/google_mobile_ads-8.0.0/ios/google_mobile_ads/Sources/google_mobile_ads/include/google_mobile_ads/FLTNSString.h @@ -0,0 +1,22 @@ +// Copyright 2022 Google LLC +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// https://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +#import + +/// Category extensions for NSString +@interface NSString (FLTNSStringExtension) + +- (instancetype _Nonnull)gma_initWithInt:(NSInteger)integer __attribute__((objc_method_family(init))); + +@end diff --git a/mih_ui/android/build/ios/SourcePackages/google_mobile_ads-8.0.0/ios/google_mobile_ads/Sources/google_mobile_ads/include/google_mobile_ads/FLTNativeTemplateColor.h b/mih_ui/android/build/ios/SourcePackages/google_mobile_ads-8.0.0/ios/google_mobile_ads/Sources/google_mobile_ads/include/google_mobile_ads/FLTNativeTemplateColor.h new file mode 100644 index 00000000..67f1c107 --- /dev/null +++ b/mih_ui/android/build/ios/SourcePackages/google_mobile_ads-8.0.0/ios/google_mobile_ads/Sources/google_mobile_ads/include/google_mobile_ads/FLTNativeTemplateColor.h @@ -0,0 +1,34 @@ +// Copyright 2022 Google LLC +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// https://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +#import +#import + +/** + * Handles mapping argb to UIColor. + */ +@interface FLTNativeTemplateColor : NSObject + +- (instancetype _Nonnull)initWithAlpha:(NSNumber *_Nonnull)alpha + red:(NSNumber *_Nonnull)red + green:(NSNumber *_Nonnull)green + blue:(NSNumber *_Nonnull)blue; +- (UIColor *_Nonnull)uiColor; + +@property(readonly) NSNumber *_Nonnull alpha; +@property(readonly) NSNumber *_Nonnull red; +@property(readonly) NSNumber *_Nonnull green; +@property(readonly) NSNumber *_Nonnull blue; + +@end diff --git a/mih_ui/android/build/ios/SourcePackages/google_mobile_ads-8.0.0/ios/google_mobile_ads/Sources/google_mobile_ads/include/google_mobile_ads/FLTNativeTemplateFontStyle.h b/mih_ui/android/build/ios/SourcePackages/google_mobile_ads-8.0.0/ios/google_mobile_ads/Sources/google_mobile_ads/include/google_mobile_ads/FLTNativeTemplateFontStyle.h new file mode 100644 index 00000000..d8b3e6c8 --- /dev/null +++ b/mih_ui/android/build/ios/SourcePackages/google_mobile_ads-8.0.0/ios/google_mobile_ads/Sources/google_mobile_ads/include/google_mobile_ads/FLTNativeTemplateFontStyle.h @@ -0,0 +1,36 @@ +// Copyright 2022 Google LLC +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// https://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +#import + +/** + * Predefined font types for native templates. + */ +typedef NS_ENUM(NSInteger, FLTNativeTemplateFontStyle) { + FLTNativeTemplateFontNormal, + FLTNativeTemplateFontBold, + FLTNativeTemplateFontItalic, + FLTNativeTemplateFontMonospace +}; + +/** + * Handles mapping int values to FLTNativeTemplateFontStyle. + */ +@interface FLTNativeTemplateFontStyleWrapper : NSObject + +- (instancetype _Nonnull)initWithInt:(int)intValue; +- (FLTNativeTemplateFontStyle)fontStyle; + +@property(readonly) int intValue; +@end diff --git a/mih_ui/android/build/ios/SourcePackages/google_mobile_ads-8.0.0/ios/google_mobile_ads/Sources/google_mobile_ads/include/google_mobile_ads/FLTNativeTemplateStyle.h b/mih_ui/android/build/ios/SourcePackages/google_mobile_ads-8.0.0/ios/google_mobile_ads/Sources/google_mobile_ads/include/google_mobile_ads/FLTNativeTemplateStyle.h new file mode 100644 index 00000000..58ecc30d --- /dev/null +++ b/mih_ui/android/build/ios/SourcePackages/google_mobile_ads-8.0.0/ios/google_mobile_ads/Sources/google_mobile_ads/include/google_mobile_ads/FLTNativeTemplateStyle.h @@ -0,0 +1,58 @@ +// Copyright 2022 Google LLC +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// https://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +#import "FLTNativeTemplateColor.h" +#import "FLTNativeTemplateTextStyle.h" +#import "FLTNativeTemplateType.h" +#import "GADTTemplateView.h" +#import +#import +#import + +/** + * Wraps a GADTTemplateView for being displayed as a platform view. + * Exists to override layoutSubviews, so we can attach layout constraints. + */ +@interface FLTNativeTemplateViewWrapper : UIView + +/** The GADTTemplateView that is being wrapped. */ +@property GADTTemplateView *_Nullable templateView; +@end + +@interface FLTNativeTemplateStyle : NSObject + +- (instancetype _Nonnull) + initWithTemplateType:(FLTNativeTemplateType *_Nonnull)templateType + mainBackgroundColor:(FLTNativeTemplateColor *_Nullable)mainBackgroundColor + callToActionStyle: + (FLTNativeTemplateTextStyle *_Nullable)callToActionStyle + primaryTextStyle:(FLTNativeTemplateTextStyle *_Nullable)primaryTextStyle + secondaryTextStyle: + (FLTNativeTemplateTextStyle *_Nullable)secondaryTextStyle + tertiaryTextStyle: + (FLTNativeTemplateTextStyle *_Nullable)tertiaryTextStyle + cornerRadius:(NSNumber *_Nullable)cornerRadius; +@property(readonly) FLTNativeTemplateType *_Nonnull templateType; +@property(readonly) FLTNativeTemplateColor *_Nullable mainBackgroundColor; +@property(readonly) FLTNativeTemplateTextStyle *_Nullable callToActionStyle; +@property(readonly) FLTNativeTemplateTextStyle *_Nullable primaryTextStyle; +@property(readonly) FLTNativeTemplateTextStyle *_Nullable secondaryTextStyle; +@property(readonly) FLTNativeTemplateTextStyle *_Nullable tertiaryTextStyle; +@property(readonly) NSNumber *_Nullable cornerRadius; + +/** The actual view to be displayed. */ +- (FLTNativeTemplateViewWrapper *_Nonnull)getDisplayedView: + (GADNativeAd *_Nonnull)gadNativeAd; + +@end diff --git a/mih_ui/android/build/ios/SourcePackages/google_mobile_ads-8.0.0/ios/google_mobile_ads/Sources/google_mobile_ads/include/google_mobile_ads/FLTNativeTemplateTextStyle.h b/mih_ui/android/build/ios/SourcePackages/google_mobile_ads-8.0.0/ios/google_mobile_ads/Sources/google_mobile_ads/include/google_mobile_ads/FLTNativeTemplateTextStyle.h new file mode 100644 index 00000000..d4068a78 --- /dev/null +++ b/mih_ui/android/build/ios/SourcePackages/google_mobile_ads-8.0.0/ios/google_mobile_ads/Sources/google_mobile_ads/include/google_mobile_ads/FLTNativeTemplateTextStyle.h @@ -0,0 +1,35 @@ +// Copyright 2022 Google LLC +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// https://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +#import "FLTNativeTemplateColor.h" +#import "FLTNativeTemplateFontStyle.h" + +/** + * Contains style options that can be applied to text in a native template. + */ +@interface FLTNativeTemplateTextStyle : NSObject + +- (instancetype _Nonnull) + initWithTextColor:(FLTNativeTemplateColor *_Nullable)textColor + backgroundColor:(FLTNativeTemplateColor *_Nullable)backgroundColor + fontStyle:(FLTNativeTemplateFontStyleWrapper *_Nullable)fontStyle + size:(NSNumber *_Nullable)size; + +@property(readonly) FLTNativeTemplateColor *_Nullable textColor; +@property(readonly) FLTNativeTemplateColor *_Nullable backgroundColor; +@property(readonly) FLTNativeTemplateFontStyleWrapper *_Nullable fontStyle; +@property(readonly) NSNumber *_Nullable size; +/** UIFont that has the corresponding fontStyle and size. */ +@property(readonly) UIFont *_Nullable uiFont; +@end diff --git a/mih_ui/android/build/ios/SourcePackages/google_mobile_ads-8.0.0/ios/google_mobile_ads/Sources/google_mobile_ads/include/google_mobile_ads/FLTNativeTemplateType.h b/mih_ui/android/build/ios/SourcePackages/google_mobile_ads-8.0.0/ios/google_mobile_ads/Sources/google_mobile_ads/include/google_mobile_ads/FLTNativeTemplateType.h new file mode 100644 index 00000000..65bda99b --- /dev/null +++ b/mih_ui/android/build/ios/SourcePackages/google_mobile_ads-8.0.0/ios/google_mobile_ads/Sources/google_mobile_ads/include/google_mobile_ads/FLTNativeTemplateType.h @@ -0,0 +1,27 @@ +// Copyright 2022 Google LLC +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// https://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +#import "GADTTemplateView.h" +#import + +/** Maps int values to template layout types. */ +@interface FLTNativeTemplateType : NSObject + +- (instancetype _Nonnull)initWithInt:(int)intValue; +- (NSString *_Nonnull)xibName; +- (GADTTemplateView *_Nonnull)templateView; + +@property(readonly) int intValue; + +@end diff --git a/mih_ui/android/build/ios/SourcePackages/google_mobile_ads-8.0.0/ios/google_mobile_ads/Sources/google_mobile_ads/include/google_mobile_ads/FLTUserMessagingPlatformManager.h b/mih_ui/android/build/ios/SourcePackages/google_mobile_ads-8.0.0/ios/google_mobile_ads/Sources/google_mobile_ads/include/google_mobile_ads/FLTUserMessagingPlatformManager.h new file mode 100644 index 00000000..9bfd93cf --- /dev/null +++ b/mih_ui/android/build/ios/SourcePackages/google_mobile_ads-8.0.0/ios/google_mobile_ads/Sources/google_mobile_ads/include/google_mobile_ads/FLTUserMessagingPlatformManager.h @@ -0,0 +1,29 @@ +// Copyright 2022 Google LLC +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// https://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +#include "FLTUserMessagingPlatformReaderWriter.h" +#import +#import + +@interface FLTUserMessagingPlatformManager : NSObject + +@property FLTUserMessagingPlatformReaderWriter *_Nonnull readerWriter; + +- (instancetype _Nonnull)initWithBinaryMessenger: + (NSObject *_Nonnull)binaryMessenger; + +- (void)handleMethodCall:(FlutterMethodCall *_Nonnull)call + result:(FlutterResult _Nonnull)result; + +@end diff --git a/mih_ui/android/build/ios/SourcePackages/google_mobile_ads-8.0.0/ios/google_mobile_ads/Sources/google_mobile_ads/include/google_mobile_ads/FLTUserMessagingPlatformReaderWriter.h b/mih_ui/android/build/ios/SourcePackages/google_mobile_ads-8.0.0/ios/google_mobile_ads/Sources/google_mobile_ads/include/google_mobile_ads/FLTUserMessagingPlatformReaderWriter.h new file mode 100644 index 00000000..1c069166 --- /dev/null +++ b/mih_ui/android/build/ios/SourcePackages/google_mobile_ads-8.0.0/ios/google_mobile_ads/Sources/google_mobile_ads/include/google_mobile_ads/FLTUserMessagingPlatformReaderWriter.h @@ -0,0 +1,24 @@ +// Copyright 2022 Google LLC +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// https://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +#import +#include + +@interface FLTUserMessagingPlatformReaderWriter : FlutterStandardReaderWriter + +- (void)trackConsentForm:(UMPConsentForm *)consentForm; + +- (void)disposeConsentForm:(UMPConsentForm *)consentForm; + +@end diff --git a/mih_ui/android/build/ios/SourcePackages/google_mobile_ads-8.0.0/ios/google_mobile_ads/Sources/google_mobile_ads/include/google_mobile_ads/GADTFullScreenTemplateView.h b/mih_ui/android/build/ios/SourcePackages/google_mobile_ads-8.0.0/ios/google_mobile_ads/Sources/google_mobile_ads/include/google_mobile_ads/GADTFullScreenTemplateView.h new file mode 100644 index 00000000..b9d28475 --- /dev/null +++ b/mih_ui/android/build/ios/SourcePackages/google_mobile_ads-8.0.0/ios/google_mobile_ads/Sources/google_mobile_ads/include/google_mobile_ads/GADTFullScreenTemplateView.h @@ -0,0 +1,21 @@ +/* + * Copyright 2021 Google LLC + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#import "GADTTemplateView.h" + +@interface GADTFullScreenTemplateView : GADTTemplateView + +@end diff --git a/mih_ui/android/build/ios/SourcePackages/google_mobile_ads-8.0.0/ios/google_mobile_ads/Sources/google_mobile_ads/include/google_mobile_ads/GADTMediumTemplateView.h b/mih_ui/android/build/ios/SourcePackages/google_mobile_ads-8.0.0/ios/google_mobile_ads/Sources/google_mobile_ads/include/google_mobile_ads/GADTMediumTemplateView.h new file mode 100644 index 00000000..915d18e0 --- /dev/null +++ b/mih_ui/android/build/ios/SourcePackages/google_mobile_ads-8.0.0/ios/google_mobile_ads/Sources/google_mobile_ads/include/google_mobile_ads/GADTMediumTemplateView.h @@ -0,0 +1,23 @@ +/* + * Copyright 2019 Google LLC + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#import "GADTTemplateView.h" + +/// A template for medium sized views. Renders a roughly square view with a call +/// to action on the bottom and a horizontal image in the middle. +@interface GADTMediumTemplateView : GADTTemplateView + +@end diff --git a/mih_ui/android/build/ios/SourcePackages/google_mobile_ads-8.0.0/ios/google_mobile_ads/Sources/google_mobile_ads/include/google_mobile_ads/GADTSmallTemplateView.h b/mih_ui/android/build/ios/SourcePackages/google_mobile_ads-8.0.0/ios/google_mobile_ads/Sources/google_mobile_ads/include/google_mobile_ads/GADTSmallTemplateView.h new file mode 100644 index 00000000..12d4d3d8 --- /dev/null +++ b/mih_ui/android/build/ios/SourcePackages/google_mobile_ads-8.0.0/ios/google_mobile_ads/Sources/google_mobile_ads/include/google_mobile_ads/GADTSmallTemplateView.h @@ -0,0 +1,22 @@ +/* + * Copyright 2019 Google LLC + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#import "GADTTemplateView.h" + +/// A small template, perfect for UITableViewCells or other row views. +@interface GADTSmallTemplateView : GADTTemplateView + +@end diff --git a/mih_ui/android/build/ios/SourcePackages/google_mobile_ads-8.0.0/ios/google_mobile_ads/Sources/google_mobile_ads/include/google_mobile_ads/GADTTemplateView.h b/mih_ui/android/build/ios/SourcePackages/google_mobile_ads-8.0.0/ios/google_mobile_ads/Sources/google_mobile_ads/include/google_mobile_ads/GADTTemplateView.h new file mode 100644 index 00000000..82a27630 --- /dev/null +++ b/mih_ui/android/build/ios/SourcePackages/google_mobile_ads-8.0.0/ios/google_mobile_ads/Sources/google_mobile_ads/include/google_mobile_ads/GADTTemplateView.h @@ -0,0 +1,114 @@ +// Copyright 2018-2021 Google LLC +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +#import + +/// Constants used to style your template. +typedef NSString *GADTNativeTemplateStyleKey NS_STRING_ENUM; + +/// The font, font color and background color for your call to action view. +/// All templates have a call to action view. +#pragma mark - Call To Action + +/// Call to action font. Expects a UIFont. +extern GADTNativeTemplateStyleKey const + GADTNativeTemplateStyleKeyCallToActionFont; + +/// Call to action font color. Expects a UIColor. +extern GADTNativeTemplateStyleKey const + GADTNativeTemplateStyleKeyCallToActionFontColor; + +/// Call to action background color. Expects a UIColor. +extern GADTNativeTemplateStyleKey const + GADTNativeTemplateStyleKeyCallToActionBackgroundColor; + +/// The font, font color and background color for the first row of text in the +/// template. All templates have a primary text area which is populated by the +/// native ad's headline. +#pragma mark - Primary Text + +/// Primary text font. Expects a UIFont. +extern GADTNativeTemplateStyleKey const GADTNativeTemplateStyleKeyPrimaryFont; + +/// Primary text font color. Expects a UIColor. +extern GADTNativeTemplateStyleKey const + GADTNativeTemplateStyleKeyPrimaryFontColor; + +/// Primary text background color. Expects a UIColor. +extern GADTNativeTemplateStyleKey const + GADTNativeTemplateStyleKeyPrimaryBackgroundColor; + +/// The font, font color and background color for the second row of text in the +/// template. All templates have a secondary text area which is populated either +/// by the body of the ad, or by the rating of the app. +#pragma mark - Secondary Text + +/// Secondary text font. Expects a UIFont. +extern GADTNativeTemplateStyleKey const GADTNativeTemplateStyleKeySecondaryFont; + +/// Secondary text font color. Expects a UIColor. +extern GADTNativeTemplateStyleKey const + GADTNativeTemplateStyleKeySecondaryFontColor; + +/// Secondary text background color. Expects a UIColor. +extern GADTNativeTemplateStyleKey const + GADTNativeTemplateStyleKeySecondaryBackgroundColor; + +/// The font, font color and background color for the third row of text in the +/// template. The third row is used to display store name or the default +/// tertiary text. +#pragma mark - Tertiary Text + +/// Tertiary text font. Expects a UIFont. +extern GADTNativeTemplateStyleKey const GADTNativeTemplateStyleKeyTertiaryFont; + +/// Tertiary text font color. Expects a UIColor. +extern GADTNativeTemplateStyleKey const + GADTNativeTemplateStyleKeyTertiaryFontColor; + +/// Tertiary text background color. Expects a UIColor. +extern GADTNativeTemplateStyleKey const + GADTNativeTemplateStyleKeyTertiaryBackgroundColor; + +#pragma mark - Additional Style Options + +/// The background color for the bulk of the ad. Expects a UIColor. +extern GADTNativeTemplateStyleKey const + GADTNativeTemplateStyleKeyMainBackgroundColor; + +/// The corner rounding radius for the icon view and call to action. Expects an +/// NSNumber. +extern GADTNativeTemplateStyleKey const GADTNativeTemplateStyleKeyCornerRadius; + +/// The super class for every template object. +/// This class has the majority of all layout and styling logic. +@interface GADTTemplateView : GADNativeAdView +@property(nonatomic, copy) + NSDictionary *styles; +@property(weak) IBOutlet UILabel *adBadge; +@property(weak) UIView *rootView; + +/// Adds a constraint to the superview so that the template spans the width of +/// its parent. Does nothing if there is no superview. +- (void)addHorizontalConstraintsToSuperviewWidth; + +/// Adds a constraint to the superview so that the template is centered +/// vertically in its parent. Does nothing if there is no superview. +- (void)addVerticalCenterConstraintToSuperview; + +/// Utility method to get a color from a hex string. ++ (UIColor *)colorFromHexString:(NSString *)hexString; + +- (NSString *)getTemplateTypeName; +@end diff --git a/mih_ui/android/build/ios/SourcePackages/google_mobile_ads-8.0.0/lib/google_mobile_ads.dart b/mih_ui/android/build/ios/SourcePackages/google_mobile_ads-8.0.0/lib/google_mobile_ads.dart new file mode 100644 index 00000000..d33b6e17 --- /dev/null +++ b/mih_ui/android/build/ios/SourcePackages/google_mobile_ads-8.0.0/lib/google_mobile_ads.dart @@ -0,0 +1,28 @@ +// Copyright 2021 Google LLC +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// https://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +export 'src/ad_containers.dart'; +export 'src/ad_listeners.dart'; +export 'src/app_background_event_notifier.dart'; +export 'src/mediation_extras.dart'; +export 'src/mobile_ads.dart'; +export 'src/request_configuration.dart'; +export 'src/ump/consent_request_parameters.dart'; +export 'src/ump/consent_information.dart'; +export 'src/ump/consent_form.dart'; +export 'src/ump/form_error.dart'; +export 'src/nativetemplates/native_template_font_style.dart'; +export 'src/nativetemplates/native_template_style.dart'; +export 'src/nativetemplates/native_template_text_style.dart'; +export 'src/nativetemplates/template_type.dart'; diff --git a/mih_ui/android/build/ios/SourcePackages/google_mobile_ads-8.0.0/lib/src/ad_containers.dart b/mih_ui/android/build/ios/SourcePackages/google_mobile_ads-8.0.0/lib/src/ad_containers.dart new file mode 100644 index 00000000..5c6fb716 --- /dev/null +++ b/mih_ui/android/build/ios/SourcePackages/google_mobile_ads-8.0.0/lib/src/ad_containers.dart @@ -0,0 +1,1663 @@ +// Copyright 2021 Google LLC +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// https://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +import 'dart:async'; +import 'dart:math'; + +import 'package:flutter/foundation.dart'; +import 'package:flutter/gestures.dart'; +import 'package:flutter/rendering.dart'; +import 'package:flutter/services.dart'; +import 'package:flutter/widgets.dart'; + +import 'ad_instance_manager.dart'; +import 'ad_listeners.dart'; +import 'mediation_extras.dart'; +import 'nativetemplates/native_template_style.dart'; + +/// Error information about why an ad operation failed. +class AdError { + /// Creates an [AdError] with the given [code], [domain] and [message]. + @protected + AdError(this.code, this.domain, this.message); + + /// Unique code to identify the error. + /// + /// See links below for possible error codes: + /// Android: + /// https://developers.google.com/android/reference/com/google/android/gms/ads/AdRequest#constant-summary + /// Ios: + /// https://developers.google.com/admob/ios/api/reference/Enums/GADErrorCode + final int code; + + /// The domain from which the error came. + final String domain; + + /// A message detailing the error. + /// + /// For example "Account not approved yet". See + /// https://support.google.com/admob/answer/9905175 for explanations of + /// common errors. + final String message; + + @override + String toString() { + return '$runtimeType(code: $code, domain: $domain, message: $message)'; + } +} + +/// Contains information about the loaded ad or ad request. +/// +/// For debugging and logging purposes. See +/// https://developers.google.com/admob/android/response-info for more +/// information on how this can be used. +class ResponseInfo { + /// Constructs a [ResponseInfo] with the [responseId] and [mediationAdapterClassName]. + @protected + const ResponseInfo({ + this.responseId, + this.mediationAdapterClassName, + this.adapterResponses, + this.loadedAdapterResponseInfo, + required this.responseExtras, + }); + + /// An identifier for the loaded ad. + final String? responseId; + + /// The mediation adapter class name of the ad network that loaded the ad. + final String? mediationAdapterClassName; + + /// The [AdapterResponseInfo]s containing metadata for each adapter included + /// in the ad response. + /// + /// Can be used to debug the mediation waterfall execution. + final List? adapterResponses; + + /// The [AdapterResponseInfo] of the adapter that was used to load the ad. + /// + /// This is null if the ad failed to load. + final AdapterResponseInfo? loadedAdapterResponseInfo; + + /// Map of extra information about the ad response. + final Map responseExtras; + + @override + String toString() { + return '$runtimeType(responseId: $responseId, ' + 'mediationAdapterClassName: $mediationAdapterClassName, ' + 'adapterResponses: $adapterResponses, ' + 'loadedAdapterResponseInfo: $loadedAdapterResponseInfo), ' + 'responseExtras: $responseExtras'; + } +} + +/// Response information for an individual ad network in an ad response. +class AdapterResponseInfo { + /// Constructs an [AdapterResponseInfo]. + @protected + AdapterResponseInfo({ + required this.adapterClassName, + required this.latencyMillis, + required this.description, + required this.adUnitMapping, + required this.adSourceName, + required this.adSourceId, + required this.adSourceInstanceName, + required this.adSourceInstanceId, + this.adError, + }); + + /// A class name that identifies the ad network adapter. + final String adapterClassName; + + /// The amount of time the ad network adapter spent loading an ad. + /// + /// 0 if the adapter was not attempted. + final int latencyMillis; + + /// A log friendly string version of this object. + final String description; + + /// Network configuration set on the AdMob UI. + final Map adUnitMapping; + + /// The error that occurred while rendering the ad. + final AdError? adError; + + /// The ad source name associated with this adapter response. + /// + /// This is an empty string "" if the ad server did not populate this field. + final String adSourceName; + + /// The ad source ID associated with this adapter response. + /// + /// This is an empty string "" if the ad server did not populate this field. + final String adSourceId; + + /// The ad source instance name associated with this adapter response. + /// + /// This is an empty string "" if the ad server did not populate this field. + final String adSourceInstanceName; + + /// The ad source instance id associated with this adapter response. + /// + /// This is an empty string "" if the ad server did not populate this field. + final String adSourceInstanceId; + + @override + String toString() { + return '$runtimeType(adapterClassName: $adapterClassName, ' + 'latencyMillis: $latencyMillis, ' + 'description: $description, ' + 'adUnitMapping: $adUnitMapping, ' + 'adError: $adError, ' + 'adSourceName: $adSourceName, ' + 'adSourceId: $adSourceId, ' + 'adSourceInstanceName: $adSourceInstanceName, ' + 'adSourceInstanceId: $adSourceInstanceId)'; + } +} + +/// Represents errors that occur when loading an ad. +class LoadAdError extends AdError { + /// Default constructor for [LoadAdError]. + @protected + LoadAdError(int code, String domain, String message, this.responseInfo) + : super(code, domain, message); + + /// The [ResponseInfo] for the error. + final ResponseInfo? responseInfo; + + @override + String toString() { + return '$runtimeType(code: $code, domain: $domain, message: $message' + ', responseInfo: $responseInfo)'; + } +} + +/// Targeting info per the AdMob API. +/// +/// This class's properties mirror the native AdRequest API. See for example: +/// [AdRequest.Builder for Android](https://developers.google.com/android/reference/com/google/android/gms/ads/AdRequest.Builder). +class AdRequest { + /// Default constructor for [AdRequest]. + const AdRequest({ + this.keywords, + this.contentUrl, + this.neighboringContentUrls, + this.nonPersonalizedAds, + this.httpTimeoutMillis, + @Deprecated('Use mediationExtras instead.') this.mediationExtrasIdentifier, + this.extras, + this.mediationExtras, + }); + + /// Words or phrases describing the current user activity. + final List? keywords; + + /// URL string for a webpage whose content matches the app’s primary content. + /// + /// This webpage content is used for targeting and brand safety purposes. + final String? contentUrl; + + /// URLs representing web content near an ad. + final List? neighboringContentUrls; + + /// Non-personalized ads are ads that are not based on a user’s past behavior. + /// + /// For more information: + /// https://support.google.com/admob/answer/7676680?hl=en + final bool? nonPersonalizedAds; + + /// A custom timeout for HTTPS calls during an ad request. + /// + /// This is only supported in Android. This value is ignored on iOS. + final int? httpTimeoutMillis; + + /// String identifier used in providing mediation extras. + /// + /// Only relevant if you use mediation and need to provide network extras + /// to the ad request. This identifier will get passed to your platform-side + /// mediation extras factory class, allowing for additional customization + /// of network extras. + @Deprecated('Use mediationExtras instead.') + final String? mediationExtrasIdentifier; + + /// Extras to pass to the AdMob adapter. + final Map? extras; + + /// Extra parameters to pass to specific ad adapters. + final List? mediationExtras; + + @override + bool operator ==(Object other) { + return other is AdRequest && + listEquals(keywords, other.keywords) && + contentUrl == other.contentUrl && + nonPersonalizedAds == other.nonPersonalizedAds && + listEquals(neighboringContentUrls, other.neighboringContentUrls) && + httpTimeoutMillis == other.httpTimeoutMillis && + //ignore: deprecated_member_use_from_same_package + mediationExtrasIdentifier == other.mediationExtrasIdentifier && + mapEquals(extras, other.extras) && + mediationExtras == other.mediationExtras; + } + + @override + int get hashCode => Object.hash( + keywords, + contentUrl, + nonPersonalizedAds, + neighboringContentUrls, + httpTimeoutMillis, + //ignore: deprecated_member_use_from_same_package + mediationExtrasIdentifier, + extras, + mediationExtras, + ); +} + +/// Targeting info per the Ad Manager API. +class AdManagerAdRequest extends AdRequest { + /// Constructs an [AdManagerAdRequest] from optional targeting information. + const AdManagerAdRequest({ + List? keywords, + String? contentUrl, + List? neighboringContentUrls, + this.customTargeting, + this.customTargetingLists, + bool? nonPersonalizedAds, + int? httpTimeoutMillis, + this.publisherProvidedId, + String? mediationExtrasIdentifier, + Map? extras, + List? mediationExtras, + }) : super( + keywords: keywords, + contentUrl: contentUrl, + neighboringContentUrls: neighboringContentUrls, + nonPersonalizedAds: nonPersonalizedAds, + httpTimeoutMillis: httpTimeoutMillis, + //ignore: deprecated_member_use_from_same_package + mediationExtrasIdentifier: mediationExtrasIdentifier, + extras: extras, + mediationExtras: mediationExtras, + ); + + /// Key-value pairs used for custom targeting. + final Map? customTargeting; + + /// Key-value pairs used for custom targeting. + /// + /// Any duplicate keys from [customTargeting] will be overwritten. + final Map>? customTargetingLists; + + /// The identifier used for frequency capping, audience segmentation + /// and targeting, sequential ad rotation, and other audience-based ad + /// delivery controls across devices. + final String? publisherProvidedId; + + @override + bool operator ==(Object other) { + return super == other && + other is AdManagerAdRequest && + mapEquals(customTargeting, other.customTargeting) && + customTargetingLists.toString() == + other.customTargetingLists.toString() && + publisherProvidedId == other.publisherProvidedId; + } + + @override + int get hashCode => + Object.hash(customTargeting, customTargetingLists, publisherProvidedId); +} + +/// An [AdSize] with the given width and a Google-optimized height to create a banner ad. +/// +/// See: +/// [AdSize.getAnchoredAdaptiveBannerAdSize]. +class AnchoredAdaptiveBannerAdSize extends AdSize { + /// Default constructor for [AnchoredAdaptiveBannerAdSize]. + /// + /// This constructor should only be used internally. + /// + /// See: + /// [AdSize.getAnchoredAdaptiveBannerAdSize]. + AnchoredAdaptiveBannerAdSize( + this.orientation, { + required int width, + required int height, + }) : super(width: width, height: height); + + /// Orientation of the device used by the SDK to automatically find the correct height. + final Orientation? orientation; +} + +/// Ad units that render screen-width banner ads on any screen size across different devices in either [Orientation]. +@Deprecated('Use adaptive banner instead') +class SmartBannerAdSize extends AdSize { + /// Default constructor for [SmartBannerAdSize]. + SmartBannerAdSize(this.orientation) : super(width: -1, height: -1); + + /// Orientation of the device used by the SDK to automatically find the correct height. + final Orientation orientation; +} + +/// A dynamically sized banner that matches its parent's width and content height. +class FluidAdSize extends AdSize { + /// Default constructor for [FluidAdSize]. + const FluidAdSize() : super(width: -3, height: -3); +} + +/// A size for inline adaptive banner ads. +/// +/// This ad size takes a width and optionally a maximum height and orientation. +/// They will be rendered at the provided width and have variable height decided +/// by Google servers. +/// +/// You can obtain an instance of this using factory methods such as +/// [AdSize.getCurrentOrientationInlineAdaptiveBannerAdSize(width)]. +/// +/// After an inline adaptive banner ad is loaded, you should use +/// [BannerAd.getPlatformAdSize] or [AdManagerBannerAd.getPlatformAdSize] to get +/// the height to use for the ad container. +class InlineAdaptiveSize extends AdSize { + /// Private constructor for [InlineAdaptiveSize]. + /// + /// You should use one of the static constructors in [AdSize]. + const InlineAdaptiveSize._({ + required int width, + this.maxHeight, + this.orientation, + }) : super(width: width, height: 0); + + /// The maximum height allowed. + final int? maxHeight; + + /// The orientation. If none if specified the current orientation is used. + final Orientation? orientation; + + /// Representation of [orientation] to pass to platform code. + int? get orientationValue => orientation == null + ? null + : orientation == Orientation.portrait + ? 0 + : 1; +} + +/// [AdSize] represents the size of a banner ad. +/// +/// There are six sizes available, which are the same for both iOS and Android. +/// See the guides for banners on [Android](https://developers.google.com/admob/android/banner#banner_sizes) +/// and [iOS](https://developers.google.com/admob/ios/banner#banner_sizes) for +/// additional details. +class AdSize { + /// Constructs an [AdSize] with the given [width] and [height]. + const AdSize({required this.width, required this.height}); + + /// The vertical span of an ad. + final int height; + + /// The horizontal span of an ad. + final int width; + + /// The standard banner (320x50) size. + static const AdSize banner = AdSize(width: 320, height: 50); + + /// The large banner (320x100) size. + static const AdSize largeBanner = AdSize(width: 320, height: 100); + + /// The medium rectangle (300x250) size. + static const AdSize mediumRectangle = AdSize(width: 300, height: 250); + + /// The full banner (468x60) size. + static const AdSize fullBanner = AdSize(width: 468, height: 60); + + /// The leaderboard (728x90) size. + static const AdSize leaderboard = AdSize(width: 728, height: 90); + + /// A dynamically sized banner that matches its parent's width and expands/contracts its height to match the ad's content after loading completes. + static const AdSize fluid = FluidAdSize(); + + /// Ad units that render screen-width banner ads on any screen size across different devices in either [Orientation]. + /// + /// Width of the current device can be found using: + /// `MediaQuery.of(context).size.width.truncate()`. + /// + /// Returns `null` if a proper height could not be found for the device or + /// window. + @Deprecated('Use getLargeAnchoredAdaptiveBannerAdSizeWithOrientation instead') + static Future getAnchoredAdaptiveBannerAdSize( + Orientation orientation, + int width, + ) async { + final num? height = await instanceManager.channel.invokeMethod( + 'AdSize#getAnchoredAdaptiveBannerAdSize', + {'orientation': orientation.name, 'width': width}, + ); + + if (height == null) return null; + return AnchoredAdaptiveBannerAdSize( + orientation, + width: width, + height: height.truncate(), + ); + } + + /// Ad units that render screen-width banner ads on any screen size across different devices in either [Orientation]. + /// + /// Width of the current device can be found using: + /// `MediaQuery.of(context).size.width.truncate()`. + /// + /// Returns `null` if a proper height could not be found for the device or + /// window. + static Future + getLargeAnchoredAdaptiveBannerAdSizeWithOrientation( + Orientation orientation, + int width, + ) async { + final num? height = await instanceManager.channel.invokeMethod( + 'AdSize#getLargeAnchoredAdaptiveBannerAdSize', + {'orientation': orientation.name, 'width': width}, + ); + + if (height == null) return null; + return AnchoredAdaptiveBannerAdSize( + orientation, + width: width, + height: height.truncate(), + ); + } + + /// Returns an AdSize with the given width and a Google-optimized height to create a banner ad. + /// + /// The size returned will have an aspect ratio similar to AdSize, suitable for anchoring near the top or bottom of your app. + /// The height will never be larger than 15% of the device's current orientation height and never smaller than 50px. + /// This function always returns the same height for any width / device combination. + /// For more details, visit: https://developers.google.com/android/reference/com/google/android/gms/ads/AdSize#getCurrentOrientationAnchoredAdaptiveBannerAdSize(android.content.Context,%20int) + @Deprecated('Use getLargeAnchoredAdaptiveBannerAdSize instead') + static Future + getCurrentOrientationAnchoredAdaptiveBannerAdSize(int width) async { + final num? height = await instanceManager.channel.invokeMethod( + 'AdSize#getAnchoredAdaptiveBannerAdSize', + {'width': width}, + ); + + if (height == null) return null; + return AnchoredAdaptiveBannerAdSize( + null, + width: width, + height: height.truncate(), + ); + } + + /// Returns an AdSize with the given width and a Google-optimized height to create a banner ad. + /// + /// The size returned will have an aspect ratio similar to AdSize, suitable for anchoring near the top or bottom of your app. + /// The height will never be larger than 15% of the device's current orientation height and never smaller than 50px. + /// This function always returns the same height for any width / device combination. + /// For more details, visit: https://developers.google.com/android/reference/com/google/android/gms/ads/AdSize#getCurrentOrientationAnchoredAdaptiveBannerAdSize(android.content.Context,%20int) + static Future + getLargeAnchoredAdaptiveBannerAdSize(int width) async { + final num? height = await instanceManager.channel.invokeMethod( + 'AdSize#getLargeAnchoredAdaptiveBannerAdSize', + {'width': width}, + ); + + if (height == null) return null; + return AnchoredAdaptiveBannerAdSize( + null, + width: width, + height: height.truncate(), + ); + } + + /// Gets an AdSize with the given width and height that is always 0. + /// + /// This ad size allows Google servers to choose an optimal ad size with a + /// height less than or equal to the height of the screen in the current + /// orientation. + /// After the ad is loaded, you should update the height of the ad container + /// by calling [BannerAd.getPlatformAdSize] or + /// [AdManagerBannerAd.getPlatformAdSize] from the ad load callback. + /// This ad size is most suitable for ads intended to be displayed inside + /// scrollable content. + static InlineAdaptiveSize getCurrentOrientationInlineAdaptiveBannerAdSize( + int width, + ) { + return InlineAdaptiveSize._(width: width); + } + + /// Gets an AdSize in landscape orientation with the given width and 0 height. + /// + /// This ad size allows Google servers to choose an optimal ad size with a + /// height less than or equal to the height of the screen in landscape + /// orientation. + /// After the ad is loaded, you should update the height of the ad container + /// by calling [BannerAd.getPlatformAdSize] or + /// [AdManagerBannerAd.getPlatformAdSize] from the ad load callback. + /// This ad size is most suitable for ads intended to be displayed inside + /// scrollable content. + static InlineAdaptiveSize getLandscapeInlineAdaptiveBannerAdSize(int width) { + return InlineAdaptiveSize._( + width: width, + orientation: Orientation.landscape, + ); + } + + /// Gets an AdSize in portrait orientation with the given width and 0 height. + /// + /// This ad size allows Google servers to choose an optimal ad size with a + /// height less than or equal to the height of the screen in portrait + /// orientation. + /// After the ad is loaded, you should update the height of the ad container + /// by calling [BannerAd.getPlatformAdSize] or + /// [AdManagerBannerAd.getPlatformAdSize] from the ad load callback. + /// This ad size is most suitable for ads intended to be displayed inside + /// scrollable content. + static InlineAdaptiveSize getPortraitInlineAdaptiveBannerAdSize(int width) { + return InlineAdaptiveSize._( + width: width, + orientation: Orientation.portrait, + ); + } + + /// Gets an AdSize with the given width and height that is always 0. + /// + /// This ad size allows Google servers to choose an optimal ad size with a + /// height less than or equal to [maxHeight]. + /// After the ad is loaded, you should update the height of the ad container + /// by calling [BannerAd.getPlatformAdSize] or + /// [AdManagerBannerAd.getPlatformAdSize] from the ad load callback. + /// This ad size is most suitable for ads intended to be displayed inside + /// scrollable content. + static InlineAdaptiveSize getInlineAdaptiveBannerAdSize( + int width, + int maxHeight, + ) { + return InlineAdaptiveSize._(width: width, maxHeight: maxHeight); + } + + /// Ad units that render screen-width banner ads on any screen size across different devices in either orientation on Android. + @Deprecated('Use adaptive banner instead') + static AdSize get smartBanner { + assert(defaultTargetPlatform == TargetPlatform.android); + // Orientation is not used on Android. + return smartBannerPortrait; + } + + /// Ad units that render screen-width banner ads on any screen size across different devices in portrait on iOS. + @Deprecated('Use adaptive banner instead') + static AdSize get smartBannerPortrait { + return getSmartBanner(Orientation.portrait); + } + + /// Ad units that render screen-width banner ads on any screen size across different devices in landscape on iOS. + @Deprecated('Use adaptive banner instead') + static AdSize get smartBannerLandscape { + return getSmartBanner(Orientation.landscape); + } + + /// Ad units that render screen-width banner ads on any screen size across different devices in either [Orientation]. + @Deprecated('Use adaptive banner instead') + static SmartBannerAdSize getSmartBanner(Orientation orientation) { + return SmartBannerAdSize(orientation); + } + + @override + bool operator ==(Object other) { + return other is AdSize && width == other.width && height == other.height; + } + + @override + int get hashCode => Object.hash(width, height); +} + +/// The base class for all ads. +/// +/// A valid [adUnitId] is required. +abstract class Ad { + /// Default constructor, used by subclasses. + Ad({required this.adUnitId, this.responseInfo}); + + /// Identifies the source of [Ad]s for your application. + /// + /// For testing use a [sample ad unit](https://developers.google.com/admob/ios/test-ads#sample_ad_units). + final String adUnitId; + + /// Frees the plugin resources associated with this ad. + Future dispose() { + return instanceManager.disposeAd(this); + } + + /// Contains information about the loaded request. + /// + /// Only present if the ad has been successfully loaded. + ResponseInfo? responseInfo; +} + +/// Base class for mobile [Ad] that has an in-line view. +/// +/// A valid [adUnitId] and [size] are required. +abstract class AdWithView extends Ad { + /// Default constructor, used by subclasses. + AdWithView({required String adUnitId, required this.listener}) + : super(adUnitId: adUnitId); + + /// The [AdWithViewListener] for the ad. + final AdWithViewListener listener; + + /// Starts loading this ad. + /// + /// Loading callbacks are sent to this [Ad]'s [listener]. + Future load(); +} + +/// An [Ad] that is overlaid on top of the UI. +abstract class AdWithoutView extends Ad { + /// Default constructor used by subclasses. + AdWithoutView({required String adUnitId}) : super(adUnitId: adUnitId); + + /// Callback to be invoked when an ad is estimated to have earned money. + /// Available for allowlisted accounts only. + OnPaidEventCallback? onPaidEvent; + + /// Sets whether this ad will be displayed in immersive mode (Android only). + /// + /// This is a no-op on iOS. + /// See https://developer.android.com/training/system-ui/immersive#immersive + /// for more information on immersive mode. + Future setImmersiveMode(bool immersiveModeEnabled) async { + if (defaultTargetPlatform == TargetPlatform.iOS) { + return Future.value(); + } else { + return instanceManager.setImmersiveMode(this, immersiveModeEnabled); + } + } +} + +/// Displays an [Ad] as a Flutter widget. +/// +/// This widget takes ads inheriting from [AdWithView] +/// (e.g. [BannerAd] and [NativeAd]) and allows them to be added to the Flutter +/// widget tree. +/// +/// Must call `load()` first before showing the widget. Otherwise, a +/// [PlatformException] will be thrown. +class AdWidget extends StatefulWidget { + /// Default constructor for [AdWidget]. + /// + /// [ad] must be loaded before this is added to the widget tree. + const AdWidget({Key? key, required this.ad}) : super(key: key); + + /// Ad to be displayed as a widget. + final AdWithView ad; + + @override + _AdWidgetState createState() => _AdWidgetState(); +} + +class _AdWidgetState extends State { + bool _adIdAlreadyMounted = false; + bool _adLoadNotCalled = false; + + @override + void initState() { + super.initState(); + final int? adId = instanceManager.adIdFor(widget.ad); + if (adId != null) { + if (instanceManager.isWidgetAdIdMounted(adId)) { + _adIdAlreadyMounted = true; + } + instanceManager.mountWidgetAdId(adId); + } else { + _adLoadNotCalled = true; + } + } + + @override + void dispose() { + super.dispose(); + final int? adId = instanceManager.adIdFor(widget.ad); + if (adId != null) { + instanceManager.unmountWidgetAdId(adId); + } + } + + @override + Widget build(BuildContext context) { + if (_adIdAlreadyMounted) { + throw FlutterError.fromParts([ + ErrorSummary('This AdWidget is already in the Widget tree'), + ErrorHint( + 'If you placed this AdWidget in a list, make sure you create a new instance ' + 'in the builder function with a unique ad object.', + ), + ErrorHint( + 'Make sure you are not using the same ad object in more than one AdWidget.', + ), + ]); + } + if (_adLoadNotCalled) { + throw FlutterError.fromParts([ + ErrorSummary( + 'AdWidget requires Ad.load to be called before AdWidget is inserted into the tree', + ), + ErrorHint( + 'Parameter ad is not loaded. Call Ad.load before AdWidget is inserted into the tree.', + ), + ]); + } + if (defaultTargetPlatform == TargetPlatform.android) { + return PlatformViewLink( + viewType: '${instanceManager.channel.name}/ad_widget', + surfaceFactory: + (BuildContext context, PlatformViewController controller) { + return AndroidViewSurface( + controller: controller as AndroidViewController, + gestureRecognizers: + const >{}, + hitTestBehavior: PlatformViewHitTestBehavior.opaque, + ); + }, + onCreatePlatformView: (PlatformViewCreationParams params) { + return PlatformViewsService.initSurfaceAndroidView( + id: params.id, + viewType: '${instanceManager.channel.name}/ad_widget', + layoutDirection: TextDirection.ltr, + creationParams: instanceManager.adIdFor(widget.ad), + creationParamsCodec: StandardMessageCodec(), + ) + ..addOnPlatformViewCreatedListener(params.onPlatformViewCreated) + ..create(); + }, + ); + } + + return UiKitView( + viewType: '${instanceManager.channel.name}/ad_widget', + creationParams: instanceManager.adIdFor(widget.ad), + creationParamsCodec: StandardMessageCodec(), + ); + } +} + +/// A widget for displaying [FluidAdManagerBannerAd]. +/// +/// This widget adjusts its height based on the platform rendered ad. +class FluidAdWidget extends StatefulWidget { + /// Constructs a [FluidAdWidget]. + const FluidAdWidget({Key? key, required this.ad, this.width}) + : super(key: key); + + /// Ad to be displayed as a widget. + final FluidAdManagerBannerAd ad; + + /// The width to set for the ad widget. + final double? width; + + @override + _FluidAdWidgetState createState() => _FluidAdWidgetState(); +} + +class _FluidAdWidgetState extends State { + bool _adIdAlreadyMounted = false; + bool _adLoadNotCalled = false; + double _height = 0; + + @override + void initState() { + super.initState(); + final int? adId = instanceManager.adIdFor(widget.ad); + if (adId != null) { + if (instanceManager.isWidgetAdIdMounted(adId)) { + _adIdAlreadyMounted = true; + } + instanceManager.mountWidgetAdId(adId); + } else { + _adLoadNotCalled = true; + } + } + + @override + void dispose() { + super.dispose(); + final int? adId = instanceManager.adIdFor(widget.ad); + if (adId != null) { + instanceManager.unmountWidgetAdId(adId); + } + } + + @override + Widget build(BuildContext context) { + if (_adIdAlreadyMounted) { + throw FlutterError.fromParts([ + ErrorSummary('This AdWidget is already in the Widget tree'), + ErrorHint( + 'If you placed this AdWidget in a list, make sure you create a new instance ' + 'in the builder function with a unique ad object.', + ), + ErrorHint( + 'Make sure you are not using the same ad object in more than one AdWidget.', + ), + ]); + } + if (_adLoadNotCalled) { + throw FlutterError.fromParts([ + ErrorSummary( + 'AdWidget requires Ad.load to be called before AdWidget is inserted into the tree', + ), + ErrorHint( + 'Parameter ad is not loaded. Call Ad.load before AdWidget is inserted into the tree.', + ), + ]); + } + + widget.ad.onFluidAdHeightChangedListener = (ad, height) { + setState(() { + _height = height; + }); + }; + + Widget platformView; + double height; + if (defaultTargetPlatform == TargetPlatform.android) { + platformView = PlatformViewLink( + viewType: '${instanceManager.channel.name}/ad_widget', + surfaceFactory: + (BuildContext context, PlatformViewController controller) { + return AndroidViewSurface( + controller: controller as AndroidViewController, + gestureRecognizers: + const >{}, + hitTestBehavior: PlatformViewHitTestBehavior.opaque, + ); + }, + onCreatePlatformView: (PlatformViewCreationParams params) { + return PlatformViewsService.initSurfaceAndroidView( + id: params.id, + viewType: '${instanceManager.channel.name}/ad_widget', + layoutDirection: TextDirection.ltr, + creationParams: instanceManager.adIdFor(widget.ad), + creationParamsCodec: StandardMessageCodec(), + ) + ..addOnPlatformViewCreatedListener(params.onPlatformViewCreated) + ..create(); + }, + ); + height = _height / MediaQuery.of(context).devicePixelRatio; + } else { + platformView = UiKitView( + viewType: '${instanceManager.channel.name}/ad_widget', + creationParams: instanceManager.adIdFor(widget.ad), + creationParamsCodec: StandardMessageCodec(), + ); + height = _height; + } + + return Container( + height: max(1, height), + width: widget.width == null ? 1 : max(1, widget.width!), + child: platformView, + ); + } +} + +/// A banner ad. +/// +/// This ad can either be overlaid on top of all flutter widgets as a static +/// view or displayed as a typical Flutter widget. To display as a widget, +/// instantiate an [AdWidget] with this as a parameter. +class BannerAd extends AdWithView { + /// Creates a [BannerAd]. + /// + /// A valid [adUnitId], nonnull [listener], and nonnull request is required. + BannerAd({ + required this.size, + required String adUnitId, + required this.listener, + required this.request, + }) : super(adUnitId: adUnitId, listener: listener); + + /// Targeting information used to fetch an [Ad]. + final AdRequest request; + + /// Represents the size of a banner ad. + /// + /// There are six sizes available, which are the same for both iOS and Android. + /// See the guides for banners on Android](https://developers.google.com/admob/android/banner#banner_sizes) + /// and [iOS](https://developers.google.com/admob/ios/banner#banner_sizes) for additional details. + final AdSize size; + + /// A listener for receiving events in the ad lifecycle. + @override + final BannerAdListener listener; + + @override + Future load() async { + await instanceManager.loadBannerAd(this); + } + + /// Returns the AdSize of the associated platform ad object. + /// + /// The dimensions of the [AdSize] returned here may differ from [size], + /// depending on what type of [AdSize] was used. + /// The future will resolve to null if [load] has not been called yet. + Future getPlatformAdSize() async { + return await instanceManager.getAdSize(this); + } + + /// Returns true if the ad Id is already mounted in a WidgetAd managed + /// by the instanceManager. + bool get isMounted { + final int? id = instanceManager.adIdFor(this); + if (id != null) { + return instanceManager.isWidgetAdIdMounted(id); + } + return false; + } + + /// Returns true if banner loaded is collapsible + Future get isCollapsible async { + return await instanceManager.isCollapsible(this); + } +} + +/// An 'AdManagerBannerAd' that has fluid ad size. +/// +/// These ads will dynamically adjust their height to match the width of the ad. +/// This should be used with [FluidAdWidget], which displays the ad in a widget +/// that adjusts its height to the height of the platform rendered ad. +class FluidAdManagerBannerAd extends AdManagerBannerAd { + /// Creates a [FluidAdManagerBannerAd]. + /// + /// These ads dynamically change their height based on the width. + /// Set [onFluidAdHeightChangedListener] to get notified of height updates. + FluidAdManagerBannerAd({ + required String adUnitId, + required AdManagerBannerAdListener listener, + required AdManagerAdRequest request, + this.onFluidAdHeightChangedListener, + }) : super( + sizes: [FluidAdSize()], + adUnitId: adUnitId, + listener: listener, + request: request, + ); + + /// Listener for when the height of the ad changes. + OnFluidAdHeightChangedListener? onFluidAdHeightChangedListener; + + @override + Future load() async { + return instanceManager.loadFluidAd(this); + } +} + +/// A banner ad displayed with Google Ad Manager. +/// +/// This ad can either be overlaid on top of all flutter widgets by passing this +/// to an [AdWidget] after calling [load]. +class AdManagerBannerAd extends AdWithView { + /// Default constructor for [AdManagerBannerAd]. + /// + /// [sizes], [adUnitId], [listener], and [request] are all required values. + AdManagerBannerAd({ + required this.sizes, + required String adUnitId, + required this.listener, + required this.request, + }) : assert(sizes.isNotEmpty), + super(adUnitId: adUnitId, listener: listener); + + /// Targeting information used to fetch an [Ad]. + final AdManagerAdRequest request; + + /// A listener for receiving events in the ad lifecycle. + @override + final AdManagerBannerAdListener listener; + + /// Ad sizes supported by this [AdManagerBannerAd]. + /// + /// In most cases, only one ad size will be specified. Multiple ad sizes can + /// be specified if your application can appropriately handle multiple ad + /// sizes. If multiple ad sizes are specified, the [AdManagerBannerAd] will + /// assume the size of the first ad size until an ad is loaded. + final List sizes; + + @override + Future load() async { + await instanceManager.loadAdManagerBannerAd(this); + } + + /// Returns the AdSize of the associated platform ad object. + /// + /// The future will resolve to null if [load] has not been called yet. + /// The dimensions of the [AdSize] returned here may differ from [sizes], + /// depending on what type of [AdSize] was used. + Future getPlatformAdSize() async { + return await instanceManager.getAdSize(this); + } +} + +/// A NativeAd. +/// +/// Native ads are ad assets that are presented to users via UI components that +/// are native to the platform. (e.g. A +/// [View](https://developer.android.com/reference/android/view/View) on Android +/// or a +/// [UIView](https://developer.apple.com/documentation/uikit/uiview?language=objc) +/// on iOS). Using Flutter widgets to create native ads is NOT supported by +/// this. +/// +/// Using platform specific UI components, these ads can be formatted to match +/// the visual design of the user experience in which they live. In coding +/// terms, this means that when a native ad loads, your app receives a NativeAd +/// object that contains its assets, and the app (rather than the Google Mobile +/// Ads SDK) is then responsible for displaying them. +/// +/// See the README for more details on using Native Ads. +/// +/// To display this ad, instantiate an [AdWidget] with this as a parameter after +/// calling [load]. +class NativeAd extends AdWithView { + /// Creates a [NativeAd]. + /// + /// A valid [adUnitId], nonnull [listener], nonnull [request], and either + /// [factoryId] or [nativeTemplateStyle] is required. + /// Use [nativeAdOptions] to customize the native ad request. + /// Use [customOptions] to pass data to your native ad factory. + NativeAd({ + required String adUnitId, + this.factoryId, + required this.listener, + required this.request, + this.nativeAdOptions, + this.customOptions, + this.nativeTemplateStyle, + }) : adManagerRequest = null, + assert(request != null), + assert(nativeTemplateStyle != null || factoryId != null), + super(adUnitId: adUnitId, listener: listener); + + /// Creates a [NativeAd] with Ad Manager. + /// + /// A valid [adUnitId], nonnull [listener], nonnull [adManagerRequest], and + /// either [factoryId] or [nativeTemplateStyle] is required. + /// Use [nativeAdOptions] to customize the native ad request. + /// Use [customOptions] to pass data to your native ad factory. + NativeAd.fromAdManagerRequest({ + required String adUnitId, + this.factoryId, + required this.listener, + required this.adManagerRequest, + this.nativeAdOptions, + this.customOptions, + this.nativeTemplateStyle, + }) : request = null, + assert(adManagerRequest != null), + assert(nativeTemplateStyle != null || factoryId != null), + super(adUnitId: adUnitId, listener: listener); + + /// An identifier for the factory that creates the Platform view. + final String? factoryId; + + /// A listener for receiving events in the ad lifecycle. + @override + final NativeAdListener listener; + + /// Optional options used to create the [NativeAd]. + /// + /// These options are passed to the platform's `NativeAdFactory`. + Map? customOptions; + + /// Targeting information used to fetch an [Ad]. + final AdRequest? request; + + /// Targeting information used to fetch an [Ad] with Ad Manager. + final AdManagerAdRequest? adManagerRequest; + + /// Options to configure the native ad request. + final NativeAdOptions? nativeAdOptions; + + /// Optional [NativeTemplateStyle] for this ad. + /// + /// If this is non-null, the plugin will render a native ad template + /// with corresponding style. Otherwise any registered NativeAdFactory will be + /// used to render the native ad. + final NativeTemplateStyle? nativeTemplateStyle; + + @override + Future load() async { + await instanceManager.loadNativeAd(this); + } +} + +/// A full-screen interstitial ad for the Google Mobile Ads Plugin. +class InterstitialAd extends AdWithoutView { + /// Creates an [InterstitialAd]. + /// + /// A valid [adUnitId] from the AdMob dashboard, a nonnull [listener], and a + /// nonnull [request] is required. + InterstitialAd._({ + required String adUnitId, + required this.request, + required this.adLoadCallback, + }) : super(adUnitId: adUnitId); + + /// Targeting information used to fetch an [Ad]. + final AdRequest request; + + /// Callback to be invoked when the ad finishes loading. + final InterstitialAdLoadCallback adLoadCallback; + + /// Callbacks to be invoked when ads show and dismiss full screen content. + FullScreenContentCallback? fullScreenContentCallback; + + /// Loads an [InterstitialAd] with the given [adUnitId] and [request]. + static Future load({ + required String adUnitId, + required AdRequest request, + required InterstitialAdLoadCallback adLoadCallback, + }) async { + InterstitialAd ad = InterstitialAd._( + adUnitId: adUnitId, + adLoadCallback: adLoadCallback, + request: request, + ); + + await instanceManager.loadInterstitialAd(ad); + } + + /// Displays this on top of the application. + /// + /// Set [fullScreenContentCallback] before calling this method to be + /// notified of events that occur when showing the ad. + Future show() { + return instanceManager.showAdWithoutView(this); + } +} + +/// A full-screen interstitial ad for use with Ad Manager. +class AdManagerInterstitialAd extends AdWithoutView { + /// Creates an [AdManagerInterstitialAd]. + /// + /// A valid [adUnitId] from the Ad Manager dashboard, a nonnull [listener], + /// and nonnull [request] is required. + AdManagerInterstitialAd._({ + required String adUnitId, + required this.request, + required this.adLoadCallback, + }) : super(adUnitId: adUnitId); + + /// Targeting information used to fetch an [Ad]. + final AdManagerAdRequest request; + + /// Callback to be invoked when the ad finishes loading. + final AdManagerInterstitialAdLoadCallback adLoadCallback; + + /// Callbacks to be invoked when ads show and dismiss full screen content. + FullScreenContentCallback? fullScreenContentCallback; + + /// An optional listener for app events. + AppEventListener? appEventListener; + + /// Loads an [AdManagerInterstitialAd] with the given [adUnitId] and [request]. + static Future load({ + required String adUnitId, + required AdManagerAdRequest request, + required AdManagerInterstitialAdLoadCallback adLoadCallback, + AppEventListener? appEventListener, + }) async { + AdManagerInterstitialAd ad = AdManagerInterstitialAd._( + adUnitId: adUnitId, + adLoadCallback: adLoadCallback, + request: request, + ); + + await instanceManager.loadAdManagerInterstitialAd(ad); + } + + /// Displays this on top of the application. + /// + /// Set [fullScreenContentCallback] before calling this method to be + /// notified of events that occur when showing the ad. + Future show() { + return instanceManager.showAdWithoutView(this); + } +} + +/// An [Ad] where a user has the option of interacting with in exchange for in-app rewards. +/// +/// Because the video assets are so large, it's a good idea to start loading an +/// ad well in advance of when it's likely to be needed. +class RewardedAd extends AdWithoutView { + /// Creates a [RewardedAd] with an [AdRequest]. + /// + /// A valid [adUnitId], nonnull [listener], and nonnull request is required. + RewardedAd._({ + required String adUnitId, + required this.rewardedAdLoadCallback, + required this.request, + }) : adManagerRequest = null, + super(adUnitId: adUnitId); + + /// Creates a [RewardedAd] with a [AdManagerAdRequest]. + /// + /// A valid [adUnitId], nonnull [listener], and nonnull request is required. + RewardedAd._fromAdManagerRequest({ + required String adUnitId, + required this.rewardedAdLoadCallback, + required this.adManagerRequest, + }) : request = null, + super(adUnitId: adUnitId); + + /// Targeting information used to fetch an [Ad]. + final AdRequest? request; + + /// Targeting information used to fetch an [Ad] using Ad Manager. + final AdManagerAdRequest? adManagerRequest; + + /// Callbacks for events that occur when attempting to load an ad. + final RewardedAdLoadCallback rewardedAdLoadCallback; + + /// Callbacks to be invoked when ads show and dismiss full screen content. + FullScreenContentCallback? fullScreenContentCallback; + + /// Callback for when the user earns a reward. + OnUserEarnedRewardCallback? onUserEarnedRewardCallback; + + /// Loads a [RewardedAd] using an [AdRequest]. + static Future load({ + required String adUnitId, + required AdRequest request, + required RewardedAdLoadCallback rewardedAdLoadCallback, + }) async { + RewardedAd rewardedAd = RewardedAd._( + adUnitId: adUnitId, + request: request, + rewardedAdLoadCallback: rewardedAdLoadCallback, + ); + + await instanceManager.loadRewardedAd(rewardedAd); + } + + /// Loads a [RewardedAd] using an [AdManagerAdRequest]. + static Future loadWithAdManagerAdRequest({ + required String adUnitId, + required AdManagerAdRequest adManagerRequest, + required RewardedAdLoadCallback rewardedAdLoadCallback, + }) async { + RewardedAd rewardedAd = RewardedAd._fromAdManagerRequest( + adUnitId: adUnitId, + adManagerRequest: adManagerRequest, + rewardedAdLoadCallback: rewardedAdLoadCallback, + ); + + await instanceManager.loadRewardedAd(rewardedAd); + } + + /// Display this on top of the application. + /// + /// Set [fullScreenContentCallback] before calling this method to be + /// notified of events that occur when showing the ad. + /// [onUserEarnedReward] will be invoked when the user earns a reward. + Future show({required OnUserEarnedRewardCallback onUserEarnedReward}) { + onUserEarnedRewardCallback = onUserEarnedReward; + return instanceManager.showAdWithoutView(this); + } + + /// Set [ServerSideVerificationOptions] for the ad. + Future setServerSideOptions(ServerSideVerificationOptions options) { + return instanceManager.setServerSideVerificationOptions(options, this); + } +} + +/// Rewarded interstitials are full screen ads that reward users and can be +/// shown without a user opt in. +/// +/// This ad format is different than [RewardedAd] because rewarded ads require +/// the user to opt-in to watching the video. This ad format is different than +/// [InterstitialAd] because interstitial ads do not reward the user. +/// +/// Because the video assets are so large, it's a good idea to start loading an +/// ad well in advance of when it's likely to be needed. +class RewardedInterstitialAd extends AdWithoutView { + /// Creates a [RewardedInterstitialAd] with an [AdRequest]. + /// + /// A valid [adUnitId], nonnull [listener], and nonnull request is required. + RewardedInterstitialAd._({ + required String adUnitId, + required this.rewardedInterstitialAdLoadCallback, + required this.request, + }) : adManagerRequest = null, + super(adUnitId: adUnitId); + + /// Creates a [RewardedInterstitialAd] with an [AdManagerAdRequest]. + /// + /// A valid [adUnitId], nonnull [listener], and nonnull request is required. + RewardedInterstitialAd._fromAdManagerRequest({ + required String adUnitId, + required this.rewardedInterstitialAdLoadCallback, + required this.adManagerRequest, + }) : request = null, + super(adUnitId: adUnitId); + + /// Targeting information used to fetch an [Ad]. + final AdRequest? request; + + /// Targeting information used to fetch an [Ad] using Ad Manager. + final AdManagerAdRequest? adManagerRequest; + + /// Callbacks for events that occur when attempting to load an ad. + final RewardedInterstitialAdLoadCallback rewardedInterstitialAdLoadCallback; + + /// Callbacks to be invoked when ads show and dismiss full screen content. + FullScreenContentCallback? fullScreenContentCallback; + + /// Callback for when the user earns a reward. + OnUserEarnedRewardCallback? onUserEarnedRewardCallback; + + /// Loads a [RewardedInterstitialAd] using an [AdRequest]. + static Future load({ + required String adUnitId, + required AdRequest request, + required RewardedInterstitialAdLoadCallback + rewardedInterstitialAdLoadCallback, + }) async { + RewardedInterstitialAd rewardedInterstitialAd = RewardedInterstitialAd._( + adUnitId: adUnitId, + request: request, + rewardedInterstitialAdLoadCallback: rewardedInterstitialAdLoadCallback, + ); + + await instanceManager.loadRewardedInterstitialAd(rewardedInterstitialAd); + } + + /// Loads a [RewardedInterstitialAd] using an [AdManagerAdRequest]. + static Future loadWithAdManagerAdRequest({ + required String adUnitId, + required AdManagerAdRequest adManagerRequest, + required RewardedInterstitialAdLoadCallback + rewardedInterstitialAdLoadCallback, + }) async { + RewardedInterstitialAd rewardedInterstitialAd = + RewardedInterstitialAd._fromAdManagerRequest( + adUnitId: adUnitId, + adManagerRequest: adManagerRequest, + rewardedInterstitialAdLoadCallback: + rewardedInterstitialAdLoadCallback, + ); + + await instanceManager.loadRewardedInterstitialAd(rewardedInterstitialAd); + } + + /// Display this on top of the application. + /// + /// Set [fullScreenContentCallback] before calling this method to be + /// notified of events that occur when showing the ad. + /// [onUserEarnedReward] will be invoked when the user earns a reward. + Future show({required OnUserEarnedRewardCallback onUserEarnedReward}) { + onUserEarnedRewardCallback = onUserEarnedReward; + return instanceManager.showAdWithoutView(this); + } + + /// Set [ServerSideVerificationOptions] for the ad. + Future setServerSideOptions(ServerSideVerificationOptions options) { + return instanceManager.setServerSideVerificationOptions(options, this); + } +} + +/// Credit information about a reward received from a [RewardedAd] or +/// [RewardedInterstitialAd]. +class RewardItem { + /// Default constructor for [RewardItem]. + /// + /// This is mostly used to return [RewardItem]s for a [RewardedAd] or + /// [RewardedInterstitialAd] and shouldn't be needed to be used directly. + RewardItem(this.amount, this.type); + + /// Credit amount rewarded from a [RewardedAd] or [RewardedInterstitialAd]. + final num amount; + + /// Type of credit rewarded. + final String type; +} + +/// Options for RewardedAd server-side verification callbacks. +/// +/// See https://developers.google.com/admob/ios/rewarded-video-ssv and +/// https://developers.google.com/admob/android/rewarded-video-ssv for more +/// information. +class ServerSideVerificationOptions { + /// The user id to be used in server-to-server reward callbacks. + final String? userId; + + /// The custom data to be used in server-to-server reward callbacks + final String? customData; + + /// Create [ServerSideVerificationOptions] with the userId or customData. + ServerSideVerificationOptions({this.userId, this.customData}); + + @override + bool operator ==(other) { + return other is ServerSideVerificationOptions && + userId == other.userId && + customData == other.customData; + } + + @override + int get hashCode => Object.hash(userId, customData); +} + +/// A full-screen app open ad for the Google Mobile Ads Plugin. +class AppOpenAd extends AdWithoutView { + AppOpenAd._({ + required String adUnitId, + required this.adLoadCallback, + required this.request, + }) : adManagerAdRequest = null, + super(adUnitId: adUnitId); + + AppOpenAd._fromAdManagerRequest({ + required String adUnitId, + required this.adLoadCallback, + required this.adManagerAdRequest, + }) : request = null, + super(adUnitId: adUnitId); + + /// The [AdRequest] used to load the ad. + final AdRequest? request; + + /// The [AdManagerAdRequest] used to load the ad. + final AdManagerAdRequest? adManagerAdRequest; + + /// Listener for ad load events. + final AppOpenAdLoadCallback adLoadCallback; + + /// Callbacks to be invoked when ads show and dismiss full screen content. + FullScreenContentCallback? fullScreenContentCallback; + + /// Loads a [AppOpenAd] using an [AdRequest]. + static Future load({ + required String adUnitId, + required AdRequest request, + required AppOpenAdLoadCallback adLoadCallback, + }) async { + AppOpenAd ad = AppOpenAd._( + adUnitId: adUnitId, + adLoadCallback: adLoadCallback, + request: request, + ); + await instanceManager.loadAppOpenAd(ad); + } + + /// Loads an [AppOpenAd] using an [AdManagerRequest]. + static Future loadWithAdManagerAdRequest({ + required String adUnitId, + required AdManagerAdRequest adManagerAdRequest, + required AppOpenAdLoadCallback adLoadCallback, + }) async { + AppOpenAd ad = AppOpenAd._fromAdManagerRequest( + adUnitId: adUnitId, + adLoadCallback: adLoadCallback, + adManagerAdRequest: adManagerAdRequest, + ); + await instanceManager.loadAppOpenAd(ad); + } + + /// Displays this on top of the application. + /// + /// Set [fullScreenContentCallback] before calling this method to be + /// notified of events that occur when showing the ad. + Future show() { + return instanceManager.showAdWithoutView(this); + } +} + +/// Media aspect ratio for native ads. +enum MediaAspectRatio { + /// Unknown media aspect ratio. + unknown, + + /// Any media aspect ratio. + any, + + /// Landscape media aspect ratio. + landscape, + + /// Portrait media aspect ratio. + portrait, + + /// Close to square media aspect ratio. This is not a strict 1:1 aspect ratio. + square, +} + +/// Indicates preferred location of AdChoices icon. +enum AdChoicesPlacement { + /// Top right corner. + topRightCorner, + + /// Top left corner. + topLeftCorner, + + /// Bottom right corner. + bottomRightCorner, + + /// Bottom left corner. + bottomLeftCorner, +} + +/// Used to configure native ad requests. +class NativeAdOptions { + /// Where to place the AdChoices icon. + /// + /// Default is top right. + final AdChoicesPlacement? adChoicesPlacement; + + /// The media aspect ratio. + /// + /// Default is unknown, which will apply no restrictions. + final MediaAspectRatio? mediaAspectRatio; + + /// Options for video. + final VideoOptions? videoOptions; + + /// Whether to request a custom implementation for the Mute This Ad feature. + /// + /// Default value is false. + final bool? requestCustomMuteThisAd; + + /// Sets whether multiple images should be requested or not. + /// + /// Default value is false. + final bool? shouldRequestMultipleImages; + + /// Indicates whether image asset content should be loaded by the SDK. + /// + /// If set to true, the SDK will not load image asset content and native ad + /// image URLs can be used to fetch content. Defaults to false. + final bool? shouldReturnUrlsForImageAssets; + + /// Construct a NativeAdOptions, an optional class used to further customize + /// native ad requests. + NativeAdOptions({ + this.adChoicesPlacement, + this.mediaAspectRatio, + this.videoOptions, + this.requestCustomMuteThisAd, + this.shouldRequestMultipleImages, + this.shouldReturnUrlsForImageAssets, + }); + + @override + bool operator ==(other) { + return other is NativeAdOptions && + adChoicesPlacement == other.adChoicesPlacement && + mediaAspectRatio == other.mediaAspectRatio && + videoOptions == other.videoOptions && + requestCustomMuteThisAd == other.requestCustomMuteThisAd && + shouldRequestMultipleImages == other.shouldRequestMultipleImages && + shouldReturnUrlsForImageAssets == other.shouldReturnUrlsForImageAssets; + } + + @override + int get hashCode => Object.hash( + adChoicesPlacement, + mediaAspectRatio, + videoOptions, + requestCustomMuteThisAd, + shouldRequestMultipleImages, + shouldReturnUrlsForImageAssets, + ); +} + +/// Options for controlling video playback in supported ad formats. +class VideoOptions { + /// Whether the requested video should have the click to expand behavior. + final bool? clickToExpandRequested; + + /// Whether the requested video should have custom controls enabled. + /// + /// Custom controls are for play/pause/mute/unmute. + final bool? customControlsRequested; + + /// Indicates whether videos should start muted. + /// + /// By default this property value is YES. + final bool? startMuted; + + /// Constructs a VideoOptions to further customize a native ad request. + /// + /// This is only necessary if you wish to further customize your native ad + /// integration. + VideoOptions({ + this.clickToExpandRequested, + this.customControlsRequested, + this.startMuted, + }); + + @override + bool operator ==(other) { + return other is VideoOptions && + clickToExpandRequested == other.clickToExpandRequested && + customControlsRequested == other.customControlsRequested && + startMuted == other.startMuted; + } + + @override + int get hashCode => + Object.hash(clickToExpandRequested, customControlsRequested, startMuted); +} diff --git a/mih_ui/android/build/ios/SourcePackages/google_mobile_ads-8.0.0/lib/src/ad_inspector_containers.dart b/mih_ui/android/build/ios/SourcePackages/google_mobile_ads-8.0.0/lib/src/ad_inspector_containers.dart new file mode 100644 index 00000000..cfc42daa --- /dev/null +++ b/mih_ui/android/build/ios/SourcePackages/google_mobile_ads-8.0.0/lib/src/ad_inspector_containers.dart @@ -0,0 +1,31 @@ +// Copyright 2022 Google LLC +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// https://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +/// Callback for when the ad inspector closes. +typedef OnAdInspectorClosedListener = void Function(AdInspectorError?); + +/// Error information about why the ad inspector failed. +class AdInspectorError { + /// Create an AdInspectorError with the given code, domain and message. + AdInspectorError({this.code, this.domain, this.message}); + + /// Code to identifier the error. + final String? code; + + /// The domain from which the error came. + final String? domain; + + /// A message detailing the error. + final String? message; +} diff --git a/mih_ui/android/build/ios/SourcePackages/google_mobile_ads-8.0.0/lib/src/ad_instance_manager.dart b/mih_ui/android/build/ios/SourcePackages/google_mobile_ads-8.0.0/lib/src/ad_instance_manager.dart new file mode 100644 index 00000000..a0cccbb8 --- /dev/null +++ b/mih_ui/android/build/ios/SourcePackages/google_mobile_ads-8.0.0/lib/src/ad_instance_manager.dart @@ -0,0 +1,1488 @@ +// Copyright 2021 Google LLC +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// https://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// ignore_for_file: public_member_api_docs + +// ignore_for_file: deprecated_member_use_from_same_package + +// ignore_for_file: deprecated_member_use + +import 'dart:async'; +import 'dart:collection'; +import 'dart:io'; + +import 'package:flutter/cupertino.dart'; +import 'package:flutter/foundation.dart'; +import 'package:flutter/material.dart'; +import 'package:flutter/services.dart'; +import 'package:google_mobile_ads/src/ad_inspector_containers.dart'; +import 'package:google_mobile_ads/src/ad_listeners.dart'; +import 'package:google_mobile_ads/src/mediation_extras.dart'; +import 'package:google_mobile_ads/src/mobile_ads.dart'; +import 'package:google_mobile_ads/src/nativetemplates/template_type.dart'; +import 'package:google_mobile_ads/src/webview_controller_util.dart'; +import 'package:webview_flutter/webview_flutter.dart'; +import 'package:webview_flutter_android/webview_flutter_android.dart'; +import 'package:webview_flutter_wkwebview/webview_flutter_wkwebview.dart'; + +import 'ad_containers.dart'; +import 'nativetemplates/native_template_font_style.dart'; +import 'nativetemplates/native_template_style.dart'; +import 'nativetemplates/native_template_text_style.dart'; +import 'request_configuration.dart'; + +/// Loads and disposes [BannerAds] and [InterstitialAds]. +AdInstanceManager instanceManager = AdInstanceManager( + 'plugins.flutter.io/google_mobile_ads', +); + +/// Maintains access to loaded [Ad] instances and handles sending/receiving +/// messages to platform code. +class AdInstanceManager { + AdInstanceManager( + String channelName, { + this.webViewControllerUtil = const WebViewControllerUtil(), + }) : channel = MethodChannel( + channelName, + StandardMethodCodec(AdMessageCodec()), + ) { + channel.setMethodCallHandler((MethodCall call) async { + assert(call.method == 'onAdEvent'); + + final int adId = call.arguments['adId']; + final String eventName = call.arguments['eventName']; + + final Ad? ad = adFor(adId); + if (ad != null) { + _onAdEvent(ad, eventName, call.arguments); + } else { + debugPrint('$Ad with id `$adId` is not available for $eventName.'); + } + }); + } + + int _nextAdId = 0; + final _BiMap _loadedAds = _BiMap(); + + /// Invokes load and dispose calls. + final MethodChannel channel; + final WebViewControllerUtil webViewControllerUtil; + + void _onAdEvent(Ad ad, String eventName, Map arguments) { + if (defaultTargetPlatform == TargetPlatform.android) { + _onAdEventAndroid(ad, eventName, arguments); + } else { + _onAdEventIOS(ad, eventName, arguments); + } + } + + void _onAdEventIOS(Ad ad, String eventName, Map arguments) { + switch (eventName) { + case 'onAdLoaded': + _invokeOnAdLoaded(ad, eventName, arguments); + break; + case 'onAdFailedToLoad': + _invokeOnAdFailedToLoad(ad, eventName, arguments); + break; + case 'onAppEvent': + _invokeOnAppEvent(ad, eventName, arguments); + break; + case 'adDidRecordClick': + _invokeOnAdClicked(ad, eventName); + break; + case 'onNativeAdWillPresentScreen': // Fall through + case 'onBannerWillPresentScreen': + _invokeOnAdOpened(ad, eventName); + break; + case 'onNativeAdDidDismissScreen': // Fall through + case 'onBannerDidDismissScreen': + _invokeOnAdClosed(ad, eventName); + break; + case 'onBannerWillDismissScreen': // Fall through + case 'onNativeAdWillDismissScreen': + if (ad is AdWithView) { + ad.listener.onAdWillDismissScreen?.call(ad); + } else { + debugPrint('invalid ad: $ad, for event name: $eventName'); + } + break; + case 'onRewardedAdUserEarnedReward': + case 'onRewardedInterstitialAdUserEarnedReward': + _invokeOnUserEarnedReward(ad, eventName, arguments); + break; + case 'onBannerImpression': + case 'adDidRecordImpression': // Fall through + case 'onNativeAdImpression': // Fall through + _invokeOnAdImpression(ad, eventName); + break; + case 'adWillPresentFullScreenContent': + _invokeOnAdShowedFullScreenContent(ad, eventName); + break; + case 'adDidDismissFullScreenContent': + _invokeOnAdDismissedFullScreenContent(ad, eventName); + break; + case 'adWillDismissFullScreenContent': + if (ad is RewardedAd) { + ad.fullScreenContentCallback?.onAdWillDismissFullScreenContent?.call( + ad, + ); + } else if (ad is InterstitialAd) { + ad.fullScreenContentCallback?.onAdWillDismissFullScreenContent?.call( + ad, + ); + } else if (ad is RewardedInterstitialAd) { + ad.fullScreenContentCallback?.onAdWillDismissFullScreenContent?.call( + ad, + ); + } else if (ad is AdManagerInterstitialAd) { + ad.fullScreenContentCallback?.onAdWillDismissFullScreenContent?.call( + ad, + ); + } else if (ad is AppOpenAd) { + ad.fullScreenContentCallback?.onAdWillDismissFullScreenContent?.call( + ad, + ); + } else { + debugPrint('invalid ad: $ad, for event name: $eventName'); + } + break; + case 'didFailToPresentFullScreenContentWithError': + _invokeOnAdFailedToShowFullScreenContent(ad, eventName, arguments); + break; + case 'onPaidEvent': + _invokePaidEvent(ad, eventName, arguments); + break; + case 'onFluidAdHeightChanged': + _invokeFluidAdHeightChanged(ad, arguments); + break; + default: + debugPrint('invalid ad event name: $eventName'); + } + } + + void _onAdEventAndroid( + Ad ad, + String eventName, + Map arguments, + ) { + switch (eventName) { + case 'onAdLoaded': + _invokeOnAdLoaded(ad, eventName, arguments); + break; + case 'onAdFailedToLoad': + _invokeOnAdFailedToLoad(ad, eventName, arguments); + break; + case 'onAdOpened': + _invokeOnAdOpened(ad, eventName); + break; + case 'onAdClosed': + _invokeOnAdClosed(ad, eventName); + break; + case 'onAppEvent': + _invokeOnAppEvent(ad, eventName, arguments); + break; + case 'onRewardedAdUserEarnedReward': + case 'onRewardedInterstitialAdUserEarnedReward': + _invokeOnUserEarnedReward(ad, eventName, arguments); + break; + case 'onAdImpression': + _invokeOnAdImpression(ad, eventName); + break; + case 'onFailedToShowFullScreenContent': + _invokeOnAdFailedToShowFullScreenContent(ad, eventName, arguments); + break; + case 'onAdShowedFullScreenContent': + _invokeOnAdShowedFullScreenContent(ad, eventName); + break; + case 'onAdDismissedFullScreenContent': + _invokeOnAdDismissedFullScreenContent(ad, eventName); + break; + case 'onPaidEvent': + _invokePaidEvent(ad, eventName, arguments); + break; + case 'onFluidAdHeightChanged': + _invokeFluidAdHeightChanged(ad, arguments); + break; + case 'onAdClicked': + _invokeOnAdClicked(ad, eventName); + break; + default: + debugPrint('invalid ad event name: $eventName'); + } + } + + void _invokeFluidAdHeightChanged(Ad ad, Map arguments) { + assert(ad is FluidAdManagerBannerAd); + (ad as FluidAdManagerBannerAd).onFluidAdHeightChangedListener?.call( + ad, + arguments['height'].toDouble(), + ); + } + + void _invokeOnAdLoaded( + Ad ad, + String eventName, + Map arguments, + ) { + ad.responseInfo = arguments['responseInfo']; + if (ad is AdWithView) { + ad.listener.onAdLoaded?.call(ad); + } else if (ad is RewardedAd) { + ad.rewardedAdLoadCallback.onAdLoaded.call(ad); + } else if (ad is InterstitialAd) { + ad.adLoadCallback.onAdLoaded.call(ad); + } else if (ad is RewardedInterstitialAd) { + ad.rewardedInterstitialAdLoadCallback.onAdLoaded.call(ad); + } else if (ad is AdManagerInterstitialAd) { + ad.adLoadCallback.onAdLoaded.call(ad); + } else if (ad is AppOpenAd) { + ad.adLoadCallback.onAdLoaded.call(ad); + } else { + debugPrint('invalid ad: $ad, for event name: $eventName'); + } + } + + void _invokeOnAdFailedToLoad( + Ad ad, + String eventName, + Map arguments, + ) { + if (ad is AdWithView) { + ad.listener.onAdFailedToLoad?.call(ad, arguments['loadAdError']); + } else if (ad is RewardedAd) { + ad.dispose(); + ad.rewardedAdLoadCallback.onAdFailedToLoad.call(arguments['loadAdError']); + } else if (ad is InterstitialAd) { + ad.dispose(); + ad.adLoadCallback.onAdFailedToLoad.call(arguments['loadAdError']); + } else if (ad is RewardedInterstitialAd) { + ad.dispose(); + ad.rewardedInterstitialAdLoadCallback.onAdFailedToLoad.call( + arguments['loadAdError'], + ); + } else if (ad is AdManagerInterstitialAd) { + ad.dispose(); + ad.adLoadCallback.onAdFailedToLoad.call(arguments['loadAdError']); + } else if (ad is AppOpenAd) { + ad.adLoadCallback.onAdFailedToLoad.call(arguments['loadAdError']); + } else { + debugPrint('invalid ad: $ad, for event name: $eventName'); + } + } + + void _invokeOnAppEvent( + Ad ad, + String eventName, + Map arguments, + ) { + if (ad is AdManagerBannerAd) { + ad.listener.onAppEvent?.call(ad, arguments['name'], arguments['data']); + } else if (ad is AdManagerInterstitialAd) { + ad.appEventListener?.onAppEvent?.call( + ad, + arguments['name'], + arguments['data'], + ); + } else { + debugPrint('invalid ad: $ad, for event name: $eventName'); + } + } + + void _invokeOnUserEarnedReward( + Ad ad, + String eventName, + Map arguments, + ) { + assert(arguments['rewardItem'] != null); + if (ad is RewardedAd) { + ad.onUserEarnedRewardCallback?.call(ad, arguments['rewardItem']); + } else if (ad is RewardedInterstitialAd) { + ad.onUserEarnedRewardCallback?.call(ad, arguments['rewardItem']); + } else { + debugPrint('invalid ad: $ad, for event name: $eventName'); + } + } + + void _invokeOnAdOpened(Ad ad, String eventName) { + if (ad is AdWithView) { + ad.listener.onAdOpened?.call(ad); + } else { + debugPrint('invalid ad: $ad, for event name: $eventName'); + } + } + + void _invokeOnAdClosed(Ad ad, String eventName) { + if (ad is AdWithView) { + ad.listener.onAdClosed?.call(ad); + } else { + debugPrint('invalid ad: $ad, for event name: $eventName'); + } + } + + void _invokeOnAdShowedFullScreenContent(Ad ad, String eventName) { + if (ad is RewardedAd) { + ad.fullScreenContentCallback?.onAdShowedFullScreenContent?.call(ad); + } else if (ad is InterstitialAd) { + ad.fullScreenContentCallback?.onAdShowedFullScreenContent?.call(ad); + } else if (ad is RewardedInterstitialAd) { + ad.fullScreenContentCallback?.onAdShowedFullScreenContent?.call(ad); + } else if (ad is AdManagerInterstitialAd) { + ad.fullScreenContentCallback?.onAdShowedFullScreenContent?.call(ad); + } else if (ad is AppOpenAd) { + ad.fullScreenContentCallback?.onAdShowedFullScreenContent?.call(ad); + } else { + debugPrint('invalid ad: $ad, for event name: $eventName'); + } + } + + void _invokeOnAdDismissedFullScreenContent(Ad ad, String eventName) { + if (ad is RewardedAd) { + ad.fullScreenContentCallback?.onAdDismissedFullScreenContent?.call(ad); + } else if (ad is InterstitialAd) { + ad.fullScreenContentCallback?.onAdDismissedFullScreenContent?.call(ad); + } else if (ad is RewardedInterstitialAd) { + ad.fullScreenContentCallback?.onAdDismissedFullScreenContent?.call(ad); + } else if (ad is AdManagerInterstitialAd) { + ad.fullScreenContentCallback?.onAdDismissedFullScreenContent?.call(ad); + } else if (ad is AppOpenAd) { + ad.fullScreenContentCallback?.onAdDismissedFullScreenContent?.call(ad); + } else { + debugPrint('invalid ad: $ad, for event name: $eventName'); + } + } + + void _invokeOnAdFailedToShowFullScreenContent( + Ad ad, + String eventName, + Map arguments, + ) { + if (ad is RewardedAd) { + ad.fullScreenContentCallback?.onAdFailedToShowFullScreenContent?.call( + ad, + arguments['error'], + ); + } else if (ad is InterstitialAd) { + ad.fullScreenContentCallback?.onAdFailedToShowFullScreenContent?.call( + ad, + arguments['error'], + ); + } else if (ad is RewardedInterstitialAd) { + ad.fullScreenContentCallback?.onAdFailedToShowFullScreenContent?.call( + ad, + arguments['error'], + ); + } else if (ad is AdManagerInterstitialAd) { + ad.fullScreenContentCallback?.onAdFailedToShowFullScreenContent?.call( + ad, + arguments['error'], + ); + } else if (ad is AppOpenAd) { + ad.fullScreenContentCallback?.onAdFailedToShowFullScreenContent?.call( + ad, + arguments['error'], + ); + } else { + debugPrint('invalid ad: $ad, for event name: $eventName'); + } + } + + void _invokeOnAdImpression(Ad ad, String eventName) { + if (ad is AdWithView) { + ad.listener.onAdImpression?.call(ad); + } else if (ad is RewardedAd) { + ad.fullScreenContentCallback?.onAdImpression?.call(ad); + } else if (ad is InterstitialAd) { + ad.fullScreenContentCallback?.onAdImpression?.call(ad); + } else if (ad is RewardedInterstitialAd) { + ad.fullScreenContentCallback?.onAdImpression?.call(ad); + } else if (ad is AdManagerInterstitialAd) { + ad.fullScreenContentCallback?.onAdImpression?.call(ad); + } else if (ad is AppOpenAd) { + ad.fullScreenContentCallback?.onAdImpression?.call(ad); + } else { + debugPrint('invalid ad: $ad, for event name: $eventName'); + } + } + + void _invokeOnAdClicked(Ad ad, String eventName) { + if (ad is NativeAd) { + ad.listener.onAdClicked?.call(ad); + } else if (ad is AdWithView) { + ad.listener.onAdClicked?.call(ad); + } else if (ad is RewardedAd) { + ad.fullScreenContentCallback?.onAdClicked?.call(ad); + } else if (ad is InterstitialAd) { + ad.fullScreenContentCallback?.onAdClicked?.call(ad); + } else if (ad is RewardedInterstitialAd) { + ad.fullScreenContentCallback?.onAdClicked?.call(ad); + } else if (ad is AdManagerInterstitialAd) { + ad.fullScreenContentCallback?.onAdClicked?.call(ad); + } else if (ad is AppOpenAd) { + ad.fullScreenContentCallback?.onAdClicked?.call(ad); + } else { + debugPrint('invalid ad: $ad, for event name: $eventName'); + } + } + + void _invokePaidEvent( + Ad ad, + String eventName, + Map arguments, + ) { + assert(arguments['valueMicros'] != null && arguments['valueMicros'] is num); + + int precisionTypeInt = arguments['precision']; + PrecisionType precisionType; + switch (precisionTypeInt) { + case 0: + precisionType = PrecisionType.unknown; + break; + case 1: + precisionType = PrecisionType.estimated; + break; + case 2: + precisionType = PrecisionType.publisherProvided; + break; + case 3: + precisionType = PrecisionType.precise; + break; + default: + debugPrint('Unexpected precisionType: $precisionTypeInt'); + precisionType = PrecisionType.unknown; + break; + } + if (ad is AdWithView) { + ad.listener.onPaidEvent?.call( + ad, + arguments['valueMicros'].toDouble(), + precisionType, + arguments['currencyCode'], + ); + } else if (ad is AdWithoutView) { + ad.onPaidEvent?.call( + ad, + arguments['valueMicros'].toDouble(), + precisionType, + arguments['currencyCode'], + ); + } else { + debugPrint('invalid ad: $ad, for event name: $eventName'); + } + } + + Future initialize() async { + return (await instanceManager.channel.invokeMethod( + 'MobileAds#initialize', + ))!; + } + + Future getAdSize(Ad ad) => + instanceManager.channel.invokeMethod( + 'getAdSize', + {'adId': adIdFor(ad)}, + ); + + /// Returns null if an invalid [adId] was passed in. + Ad? adFor(int adId) => _loadedAds[adId]; + + /// Returns null if an invalid [Ad] was passed in. + int? adIdFor(Ad ad) => _loadedAds.inverse[ad]; + + final Set _mountedWidgetAdIds = {}; + + /// Returns true if the [adId] is already mounted in a [WidgetAd]. + bool isWidgetAdIdMounted(int adId) => _mountedWidgetAdIds.contains(adId); + + /// Returns true if banner loaded is collapsible + Future isCollapsible(Ad ad) async => + (await instanceManager.channel.invokeMethod( + 'isCollapsible', + {'adId': adIdFor(ad)}, + ))!; + + /// Indicates that [adId] is mounted in widget tree. + void mountWidgetAdId(int adId) => _mountedWidgetAdIds.add(adId); + + /// Indicates that [adId] is unmounted from the widget tree. + void unmountWidgetAdId(int adId) => _mountedWidgetAdIds.remove(adId); + + /// Starts loading the ad if not previously loaded. + /// + /// Does nothing if we have already tried to load the ad. + Future loadBannerAd(BannerAd ad) { + if (adIdFor(ad) != null) { + return Future.value(); + } + + final int adId = _nextAdId++; + _loadedAds[adId] = ad; + return channel.invokeMethod('loadBannerAd', { + 'adId': adId, + 'adUnitId': ad.adUnitId, + 'request': ad.request, + 'size': ad.size, + }); + } + + Future loadInterstitialAd(InterstitialAd ad) { + if (adIdFor(ad) != null) { + return Future.value(); + } + + final int adId = _nextAdId++; + _loadedAds[adId] = ad; + return channel.invokeMethod('loadInterstitialAd', { + 'adId': adId, + 'adUnitId': ad.adUnitId, + 'request': ad.request, + }); + } + + /// Starts loading the ad if not previously loaded. + /// + /// Loading also terminates if ad is already in the process of loading. + Future loadNativeAd(NativeAd ad) { + if (adIdFor(ad) != null) { + return Future.value(); + } + + final int adId = _nextAdId++; + _loadedAds[adId] = ad; + return channel.invokeMethod('loadNativeAd', { + 'adId': adId, + 'adUnitId': ad.adUnitId, + 'request': ad.request, + 'adManagerRequest': ad.adManagerRequest, + 'factoryId': ad.factoryId, + 'nativeAdOptions': ad.nativeAdOptions, + 'customOptions': ad.customOptions, + 'nativeTemplateStyle': ad.nativeTemplateStyle, + }); + } + + /// Starts loading the ad if not previously loaded. + /// + /// Loading also terminates if ad is already in the process of loading. + Future loadRewardedAd(RewardedAd ad) { + if (adIdFor(ad) != null) { + return Future.value(); + } + + final int adId = _nextAdId++; + _loadedAds[adId] = ad; + return channel.invokeMethod('loadRewardedAd', { + 'adId': adId, + 'adUnitId': ad.adUnitId, + 'request': ad.request, + 'adManagerRequest': ad.adManagerRequest, + }); + } + + /// Starts loading the ad if not previously loaded. + /// + /// Loading also terminates if ad is already in the process of loading. + Future loadRewardedInterstitialAd(RewardedInterstitialAd ad) { + if (adIdFor(ad) != null) { + return Future.value(); + } + + final int adId = _nextAdId++; + _loadedAds[adId] = ad; + return channel + .invokeMethod('loadRewardedInterstitialAd', { + 'adId': adId, + 'adUnitId': ad.adUnitId, + 'request': ad.request, + 'adManagerRequest': ad.adManagerRequest, + }); + } + + /// Load an app open ad. + Future loadAppOpenAd(AppOpenAd ad) { + if (adIdFor(ad) != null) { + return Future.value(); + } + + final int adId = _nextAdId++; + _loadedAds[adId] = ad; + return channel.invokeMethod('loadAppOpenAd', { + 'adId': adId, + 'adUnitId': ad.adUnitId, + 'request': ad.request, + 'adManagerRequest': ad.adManagerAdRequest, + }); + } + + /// Starts loading the ad if not previously loaded. + /// + /// Loading also terminates if ad is already in the process of loading. + Future loadAdManagerBannerAd(AdManagerBannerAd ad) { + if (adIdFor(ad) != null) { + return Future.value(); + } + + final int adId = _nextAdId++; + _loadedAds[adId] = ad; + return channel.invokeMethod( + 'loadAdManagerBannerAd', + { + 'adId': adId, + 'sizes': ad.sizes, + 'adUnitId': ad.adUnitId, + 'request': ad.request, + }, + ); + } + + /// Starts loading the ad if not previously loaded. + /// + /// Loading also terminates if ad is already in the process of loading. + Future loadFluidAd(FluidAdManagerBannerAd ad) { + if (adIdFor(ad) != null) { + return Future.value(); + } + + final int adId = _nextAdId++; + _loadedAds[adId] = ad; + return channel.invokeMethod('loadFluidAd', { + 'adId': adId, + 'sizes': ad.sizes, + 'adUnitId': ad.adUnitId, + 'request': ad.request, + }); + } + + /// Loads an ad if not currently loading or loaded. + /// + /// Loading also terminates if ad is already in the process of loading. + Future loadAdManagerInterstitialAd(AdManagerInterstitialAd ad) { + if (adIdFor(ad) != null) { + return Future.value(); + } + + final int adId = _nextAdId++; + _loadedAds[adId] = ad; + return channel.invokeMethod( + 'loadAdManagerInterstitialAd', + { + 'adId': adId, + 'adUnitId': ad.adUnitId, + 'request': ad.request, + }, + ); + } + + /// Free the plugin resources associated with this ad. + /// + /// Disposing a banner ad that's been shown removes it from the screen. + /// Interstitial ads can't be programmatically removed from view. + Future disposeAd(Ad ad) { + final int? adId = adIdFor(ad); + final Ad? disposedAd = _loadedAds.remove(adId); + if (disposedAd == null) { + return Future.value(); + } + return channel.invokeMethod('disposeAd', { + 'adId': adId, + }); + } + + /// Display an [AdWithoutView] that is overlaid on top of the application. + Future showAdWithoutView(AdWithoutView ad) { + assert( + adIdFor(ad) != null, + '$Ad has not been loaded or has already been disposed.', + ); + + return channel.invokeMethod('showAdWithoutView', { + 'adId': adIdFor(ad), + }); + } + + /// Gets the global [RequestConfiguration]. + Future getRequestConfiguration() async { + return (await instanceManager.channel.invokeMethod( + 'MobileAds#getRequestConfiguration', + ))!; + } + + /// Set the [RequestConfiguration] to apply for future ad requests. + Future updateRequestConfiguration( + RequestConfiguration requestConfiguration, + ) { + return channel.invokeMethod( + 'MobileAds#updateRequestConfiguration', + { + 'maxAdContentRating': requestConfiguration.maxAdContentRating, + 'tagForChildDirectedTreatment': + requestConfiguration.tagForChildDirectedTreatment, + 'testDeviceIds': requestConfiguration.testDeviceIds, + 'tagForUnderAgeOfConsent': requestConfiguration.tagForUnderAgeOfConsent, + }, + ); + } + + /// Set whether same app key is enabled. + Future setSameAppKeyEnabled(bool isEnabled) { + return channel.invokeMethod( + 'MobileAds#setSameAppKeyEnabled', + {'isEnabled': isEnabled}, + ); + } + + /// Mute / Unmute app. + Future setAppMuted(bool muted) { + return channel.invokeMethod( + 'MobileAds#setAppMuted', + {'muted': muted}, + ); + } + + /// Set app volume. + Future setAppVolume(double volume) { + return channel.invokeMethod( + 'MobileAds#setAppVolume', + {'volume': volume}, + ); + } + + /// Enable / Disable immersive mode for the Ad. + Future setImmersiveMode(AdWithoutView ad, bool immersiveModeEnabled) { + assert( + adIdFor(ad) != null, + '$ad has not been loaded or has already been disposed.', + ); + + return channel.invokeMethod('setImmersiveMode', { + 'adId': adIdFor(ad), + 'immersiveModeEnabled': immersiveModeEnabled, + }); + } + + /// Disables automated SDK crash reporting. + Future disableSDKCrashReporting() { + return channel.invokeMethod('MobileAds#disableSDKCrashReporting'); + } + + /// Disables mediation adapter initialization during initialization of the GMA SDK. + Future disableMediationInitialization() { + return channel.invokeMethod( + 'MobileAds#disableMediationInitialization', + ); + } + + /// Gets the version string of Google Mobile Ads SDK. + Future getVersionString() async { + return (await instanceManager.channel.invokeMethod( + 'MobileAds#getVersionString', + ))!; + } + + /// Set server side verification options on the ad. + Future setServerSideVerificationOptions( + ServerSideVerificationOptions options, + Ad ad, + ) { + return channel.invokeMethod( + 'setServerSideVerificationOptions', + { + 'adId': adIdFor(ad), + 'serverSideVerificationOptions': options, + }, + ); + } + + /// Opens the debug menu. + /// + /// Returns a Future that completes when the platform side api has been + /// invoked. + Future openDebugMenu(String adUnitId) async { + return channel.invokeMethod( + 'MobileAds#openDebugMenu', + {'adUnitId': adUnitId}, + ); + } + + /// Register the `WebViewController` with the GMASDK. + Future registerWebView(WebViewController controller) { + return channel.invokeMethod( + 'MobileAds#registerWebView', + { + 'webViewId': webViewControllerUtil.webViewIdentifier(controller), + }, + ); + } + + int getWebViewId(WebViewController controller) { + if (WebViewPlatform.instance is AndroidWebViewPlatform) { + return (controller.platform as AndroidWebViewController) + .webViewIdentifier; + } else if (WebViewPlatform.instance is WebKitWebViewPlatform) { + return (controller.platform as WebKitWebViewController).webViewIdentifier; + } else { + throw UnsupportedError('This method only supports Android and iOS.'); + } + } + + /// Send a platform message to open the ad inspector. + void openAdInspector(OnAdInspectorClosedListener listener) async { + try { + await channel.invokeMethod('MobileAds#openAdInspector'); + listener(null); + } on PlatformException catch (e) { + var error = AdInspectorError( + code: e.code, + domain: e.details, + message: e.message, + ); + listener(error); + } + } +} + +@visibleForTesting +class AdMessageCodec extends StandardMessageCodec { + // The type values below must be consistent for each platform. + static const int _valueAdSize = 128; + static const int _valueAdRequest = 129; + static const int _valueFluidAdSize = 130; + static const int _valueRewardItem = 132; + static const int _valueLoadAdError = 133; + static const int _valueAdManagerAdRequest = 134; + static const int _valueInitializationState = 135; + static const int _valueAdapterStatus = 136; + static const int _valueInitializationStatus = 137; + static const int _valueServerSideVerificationOptions = 138; + static const int _valueAdError = 139; + static const int _valueResponseInfo = 140; + static const int _valueAdapterResponseInfo = 141; + static const int _valueAnchoredAdaptiveBannerAdSize = 142; + static const int _valueSmartBannerAdSize = 143; + static const int _valueNativeAdOptions = 144; + static const int _valueVideoOptions = 145; + static const int _valueInlineAdaptiveBannerAdSize = 146; + static const int _valueRequestConfigurationParams = 148; + static const int _valueNativeTemplateStyle = 149; + static const int _valueNativeTemplateTextStyle = 150; + static const int _valueNativeTemplateFontStyle = 151; + static const int _valueNativeTemplateType = 152; + static const int _valueColor = 153; + static const int _valueMediationExtras = 154; + + @override + void writeValue(WriteBuffer buffer, dynamic value) { + if (value is AdSize) { + writeAdSize(buffer, value); + } else if (value is AdManagerAdRequest) { + buffer.putUint8(_valueAdManagerAdRequest); + writeValue(buffer, value.keywords); + writeValue(buffer, value.contentUrl); + writeValue(buffer, value.customTargeting); + writeValue(buffer, value.customTargetingLists); + writeValue(buffer, value.nonPersonalizedAds); + writeValue(buffer, value.neighboringContentUrls); + if (defaultTargetPlatform == TargetPlatform.android) { + writeValue(buffer, value.httpTimeoutMillis); + } + writeValue(buffer, value.publisherProvidedId); + writeValue(buffer, value.mediationExtrasIdentifier); + writeValue(buffer, value.extras); + writeValue(buffer, value.mediationExtras); + } else if (value is AdRequest) { + buffer.putUint8(_valueAdRequest); + writeValue(buffer, value.keywords); + writeValue(buffer, value.contentUrl); + writeValue(buffer, value.nonPersonalizedAds); + writeValue(buffer, value.neighboringContentUrls); + if (defaultTargetPlatform == TargetPlatform.android) { + writeValue(buffer, value.httpTimeoutMillis); + } + writeValue(buffer, value.mediationExtrasIdentifier); + writeValue(buffer, value.extras); + writeValue(buffer, value.mediationExtras); + } else if (value is MediationExtras) { + buffer.putUint8(_valueMediationExtras); + if (defaultTargetPlatform == TargetPlatform.android) { + writeValue(buffer, value.getAndroidClassName()); + } else { + writeValue(buffer, value.getIOSClassName()); + } + writeValue(buffer, value.getExtras()); + } else if (value is RewardItem) { + buffer.putUint8(_valueRewardItem); + writeValue(buffer, value.amount); + writeValue(buffer, value.type); + } else if (value is ResponseInfo) { + buffer.putUint8(_valueResponseInfo); + writeValue(buffer, value.responseId); + writeValue(buffer, value.mediationAdapterClassName); + writeValue(buffer, value.adapterResponses); + writeValue(buffer, value.loadedAdapterResponseInfo); + writeValue(buffer, value.responseExtras); + } else if (value is AdapterResponseInfo) { + buffer.putUint8(_valueAdapterResponseInfo); + writeValue(buffer, value.adapterClassName); + writeValue(buffer, value.latencyMillis); + writeValue(buffer, value.description); + writeValue(buffer, value.adUnitMapping); + writeValue(buffer, value.adError); + writeValue(buffer, value.adSourceName); + writeValue(buffer, value.adSourceId); + writeValue(buffer, value.adSourceInstanceName); + writeValue(buffer, value.adSourceInstanceId); + } else if (value is LoadAdError) { + buffer.putUint8(_valueLoadAdError); + writeValue(buffer, value.code); + writeValue(buffer, value.domain); + writeValue(buffer, value.message); + writeValue(buffer, value.responseInfo); + } else if (value is AdError) { + buffer.putUint8(_valueAdError); + writeValue(buffer, value.code); + writeValue(buffer, value.domain); + writeValue(buffer, value.message); + } else if (value is AdapterInitializationState) { + buffer.putUint8(_valueInitializationState); + writeValue(buffer, value.name); + } else if (value is AdapterStatus) { + buffer.putUint8(_valueAdapterStatus); + writeValue(buffer, value.state); + writeValue(buffer, value.description); + writeValue(buffer, value.latency); + } else if (value is InitializationStatus) { + buffer.putUint8(_valueInitializationStatus); + writeValue(buffer, value.adapterStatuses); + } else if (value is ServerSideVerificationOptions) { + buffer.putUint8(_valueServerSideVerificationOptions); + writeValue(buffer, value.userId); + writeValue(buffer, value.customData); + } else if (value is NativeAdOptions) { + buffer.putUint8(_valueNativeAdOptions); + writeValue(buffer, value.adChoicesPlacement?.intValue); + writeValue(buffer, value.mediaAspectRatio?.intValue); + writeValue(buffer, value.videoOptions); + writeValue(buffer, value.requestCustomMuteThisAd); + writeValue(buffer, value.shouldRequestMultipleImages); + writeValue(buffer, value.shouldReturnUrlsForImageAssets); + } else if (value is VideoOptions) { + buffer.putUint8(_valueVideoOptions); + writeValue(buffer, value.clickToExpandRequested); + writeValue(buffer, value.customControlsRequested); + writeValue(buffer, value.startMuted); + } else if (value is RequestConfiguration) { + buffer.putUint8(_valueRequestConfigurationParams); + writeValue(buffer, value.maxAdContentRating); + writeValue(buffer, value.tagForChildDirectedTreatment); + writeValue(buffer, value.tagForUnderAgeOfConsent); + writeValue(buffer, value.testDeviceIds); + } else if (value is NativeTemplateStyle) { + buffer.putUint8(_valueNativeTemplateStyle); + writeValue(buffer, value.templateType); + writeValue(buffer, value.mainBackgroundColor); + writeValue(buffer, value.callToActionTextStyle); + writeValue(buffer, value.primaryTextStyle); + writeValue(buffer, value.secondaryTextStyle); + writeValue(buffer, value.tertiaryTextStyle); + if (defaultTargetPlatform == TargetPlatform.iOS) { + writeValue(buffer, value.cornerRadius); + } + } else if (value is TemplateType) { + buffer.putUint8(_valueNativeTemplateType); + writeValue(buffer, value.index); + } else if (value is NativeTemplateTextStyle) { + buffer.putUint8(_valueNativeTemplateTextStyle); + writeValue(buffer, value.textColor); + writeValue(buffer, value.backgroundColor); + writeValue(buffer, value.style); + writeValue(buffer, value.size); + } else if (value is Color) { + buffer.putUint8(_valueColor); + writeValue(buffer, (value.a * 255).toInt()); + writeValue(buffer, (value.r * 255).toInt()); + writeValue(buffer, (value.g * 255).toInt()); + writeValue(buffer, (value.b * 255).toInt()); + } else if (value is NativeTemplateFontStyle) { + buffer.putUint8(_valueNativeTemplateFontStyle); + writeValue(buffer, value.index); + } else { + super.writeValue(buffer, value); + } + } + + @override + dynamic readValueOfType(dynamic type, ReadBuffer buffer) { + switch (type) { + case _valueInlineAdaptiveBannerAdSize: + final num width = readValueOfType(buffer.getUint8(), buffer); + final num? maxHeight = readValueOfType(buffer.getUint8(), buffer); + final num? orientation = readValueOfType(buffer.getUint8(), buffer); + if (orientation != null) { + return orientation.toInt() == 0 + ? AdSize.getPortraitInlineAdaptiveBannerAdSize(width.toInt()) + : AdSize.getLandscapeInlineAdaptiveBannerAdSize(width.toInt()); + } else if (maxHeight != null) { + return AdSize.getInlineAdaptiveBannerAdSize( + width.toInt(), + maxHeight.toInt(), + ); + } else { + return AdSize.getCurrentOrientationInlineAdaptiveBannerAdSize( + width.toInt(), + ); + } + + case _valueAnchoredAdaptiveBannerAdSize: + final String? orientationStr = readValueOfType( + buffer.getUint8(), + buffer, + ); + final num width = readValueOfType(buffer.getUint8(), buffer); + Orientation? orientation; + if (orientationStr != null) { + orientation = Orientation.values.firstWhere( + (Orientation orientation) => orientation.name == orientationStr, + ); + } + return AnchoredAdaptiveBannerAdSize( + orientation, + width: width.truncate(), + height: -1, // Unused value + ); + case _valueSmartBannerAdSize: + final String orientationStr = readValueOfType( + buffer.getUint8(), + buffer, + ); + return SmartBannerAdSize( + Orientation.values.firstWhere( + (Orientation orientation) => orientation.name == orientationStr, + ), + ); + case _valueAdSize: + num width = readValueOfType(buffer.getUint8(), buffer); + num height = readValueOfType(buffer.getUint8(), buffer); + return AdSize(width: width.toInt(), height: height.toInt()); + case _valueFluidAdSize: + return FluidAdSize(); + case _valueAdRequest: + return AdRequest( + keywords: readValueOfType(buffer.getUint8(), buffer)?.cast(), + contentUrl: readValueOfType(buffer.getUint8(), buffer), + nonPersonalizedAds: readValueOfType(buffer.getUint8(), buffer), + neighboringContentUrls: readValueOfType( + buffer.getUint8(), + buffer, + )?.cast(), + httpTimeoutMillis: (defaultTargetPlatform == TargetPlatform.android) + ? readValueOfType(buffer.getUint8(), buffer) + : null, + mediationExtrasIdentifier: readValueOfType(buffer.getUint8(), buffer), + extras: readValueOfType( + buffer.getUint8(), + buffer, + )?.cast(), + mediationExtras: readValueOfType( + buffer.getUint8(), + buffer, + )?.cast>(), + ); + case _valueMediationExtras: + return _MediationExtras( + readValueOfType(buffer.getUint8(), buffer), + readValueOfType(buffer.getUint8(), buffer), + ); + case _valueRewardItem: + return RewardItem( + readValueOfType(buffer.getUint8(), buffer), + readValueOfType(buffer.getUint8(), buffer), + ); + case _valueResponseInfo: + return ResponseInfo( + responseId: readValueOfType(buffer.getUint8(), buffer), + mediationAdapterClassName: readValueOfType(buffer.getUint8(), buffer), + adapterResponses: readValueOfType( + buffer.getUint8(), + buffer, + )?.cast(), + loadedAdapterResponseInfo: readValueOfType(buffer.getUint8(), buffer), + responseExtras: _deepCastStringKeyDynamicValueMap( + readValueOfType(buffer.getUint8(), buffer), + ), + ); + case _valueAdapterResponseInfo: + return AdapterResponseInfo( + adapterClassName: _safeReadString(buffer), + latencyMillis: readValueOfType(buffer.getUint8(), buffer), + description: _safeReadString(buffer), + adUnitMapping: _deepCastStringMap( + readValueOfType(buffer.getUint8(), buffer), + ), + adError: readValueOfType(buffer.getUint8(), buffer), + adSourceName: _safeReadString(buffer), + adSourceId: _safeReadString(buffer), + adSourceInstanceName: _safeReadString(buffer), + adSourceInstanceId: _safeReadString(buffer), + ); + case _valueLoadAdError: + return LoadAdError( + readValueOfType(buffer.getUint8(), buffer), + readValueOfType(buffer.getUint8(), buffer), + readValueOfType(buffer.getUint8(), buffer), + readValueOfType(buffer.getUint8(), buffer), + ); + case _valueAdError: + return AdError( + readValueOfType(buffer.getUint8(), buffer), + readValueOfType(buffer.getUint8(), buffer), + readValueOfType(buffer.getUint8(), buffer), + ); + case _valueAdManagerAdRequest: + return AdManagerAdRequest( + keywords: readValueOfType(buffer.getUint8(), buffer)?.cast(), + contentUrl: readValueOfType(buffer.getUint8(), buffer), + customTargeting: readValueOfType( + buffer.getUint8(), + buffer, + )?.cast(), + customTargetingLists: _tryDeepMapCast( + readValueOfType(buffer.getUint8(), buffer), + ), + nonPersonalizedAds: readValueOfType(buffer.getUint8(), buffer), + neighboringContentUrls: readValueOfType( + buffer.getUint8(), + buffer, + )?.cast(), + httpTimeoutMillis: (defaultTargetPlatform == TargetPlatform.android) + ? readValueOfType(buffer.getUint8(), buffer) + : null, + publisherProvidedId: readValueOfType(buffer.getUint8(), buffer), + mediationExtrasIdentifier: readValueOfType(buffer.getUint8(), buffer), + extras: readValueOfType( + buffer.getUint8(), + buffer, + )?.cast(), + mediationExtras: readValueOfType( + buffer.getUint8(), + buffer, + )?.cast>(), + ); + case _valueInitializationState: + switch (readValueOfType(buffer.getUint8(), buffer)) { + case 'notReady': + return AdapterInitializationState.notReady; + case 'ready': + return AdapterInitializationState.ready; + } + throw ArgumentError(); + case _valueAdapterStatus: + final AdapterInitializationState state = readValueOfType( + buffer.getUint8(), + buffer, + ); + final String description = readValueOfType(buffer.getUint8(), buffer); + + double latency = readValueOfType(buffer.getUint8(), buffer).toDouble(); + // Android provides this value as an int in milliseconds while iOS + // provides this value as a double in seconds. + if (defaultTargetPlatform == TargetPlatform.android) { + latency /= 1000; + } + + return AdapterStatus(state, description, latency); + case _valueInitializationStatus: + return InitializationStatus( + readValueOfType( + buffer.getUint8(), + buffer, + ).cast(), + ); + case _valueServerSideVerificationOptions: + return ServerSideVerificationOptions( + userId: readValueOfType(buffer.getUint8(), buffer), + customData: readValueOfType(buffer.getUint8(), buffer), + ); + case _valueNativeAdOptions: + int? adChoices = readValueOfType(buffer.getUint8(), buffer); + int? mediaAspectRatio = readValueOfType(buffer.getUint8(), buffer); + return NativeAdOptions( + adChoicesPlacement: AdChoicesPlacementExtension.fromInt(adChoices), + mediaAspectRatio: MediaAspectRatioExtension.fromInt(mediaAspectRatio), + videoOptions: readValueOfType(buffer.getUint8(), buffer), + requestCustomMuteThisAd: readValueOfType(buffer.getUint8(), buffer), + shouldRequestMultipleImages: readValueOfType( + buffer.getUint8(), + buffer, + ), + shouldReturnUrlsForImageAssets: readValueOfType( + buffer.getUint8(), + buffer, + ), + ); + case _valueVideoOptions: + return VideoOptions( + clickToExpandRequested: readValueOfType(buffer.getUint8(), buffer), + customControlsRequested: readValueOfType(buffer.getUint8(), buffer), + startMuted: readValueOfType(buffer.getUint8(), buffer), + ); + case _valueRequestConfigurationParams: + return RequestConfiguration( + maxAdContentRating: readValueOfType(buffer.getUint8(), buffer), + tagForChildDirectedTreatment: readValueOfType( + buffer.getUint8(), + buffer, + ), + tagForUnderAgeOfConsent: readValueOfType(buffer.getUint8(), buffer), + testDeviceIds: readValueOfType( + buffer.getUint8(), + buffer, + ).cast(), + ); + case _valueNativeTemplateStyle: + return NativeTemplateStyle( + templateType: readValueOfType(buffer.getUint8(), buffer), + mainBackgroundColor: readValueOfType(buffer.getUint8(), buffer), + callToActionTextStyle: readValueOfType(buffer.getUint8(), buffer), + primaryTextStyle: readValueOfType(buffer.getUint8(), buffer), + secondaryTextStyle: readValueOfType(buffer.getUint8(), buffer), + tertiaryTextStyle: readValueOfType(buffer.getUint8(), buffer), + cornerRadius: defaultTargetPlatform == TargetPlatform.iOS + ? readValueOfType(buffer.getUint8(), buffer) + : null, + ); + case _valueNativeTemplateType: + return TemplateType.values[readValueOfType(buffer.getUint8(), buffer)]; + case _valueNativeTemplateTextStyle: + return NativeTemplateTextStyle( + textColor: readValueOfType(buffer.getUint8(), buffer), + backgroundColor: readValueOfType(buffer.getUint8(), buffer), + style: readValueOfType(buffer.getUint8(), buffer), + size: readValueOfType(buffer.getUint8(), buffer), + ); + case _valueColor: + return Color.fromARGB( + readValueOfType(buffer.getUint8(), buffer), + readValueOfType(buffer.getUint8(), buffer), + readValueOfType(buffer.getUint8(), buffer), + readValueOfType(buffer.getUint8(), buffer), + ); + case _valueNativeTemplateFontStyle: + return NativeTemplateFontStyle.values[readValueOfType( + buffer.getUint8(), + buffer, + )]; + default: + return super.readValueOfType(type, buffer); + } + } + + Map>? _tryDeepMapCast(Map? map) { + if (map == null) return null; + return map.map>( + (dynamic key, dynamic value) => + MapEntry>(key, value?.cast()), + ); + } + + Map _deepCastStringMap(Map? map) { + if (map == null) return {}; + return map.map( + (dynamic key, dynamic value) => MapEntry(key, value), + ); + } + + Map _deepCastStringKeyDynamicValueMap( + Map? map, + ) { + if (map == null) return {}; + return map.map( + (dynamic key, dynamic value) => MapEntry(key, value), + ); + } + + /// Reads the next value as a non-nullable string. + /// + /// Returns '' if the next value is null. + String _safeReadString(ReadBuffer buffer) { + return readValueOfType(buffer.getUint8(), buffer) ?? ''; + } + + void writeAdSize(WriteBuffer buffer, AdSize value) { + if (value is InlineAdaptiveSize) { + buffer.putUint8(_valueInlineAdaptiveBannerAdSize); + writeValue(buffer, value.width); + writeValue(buffer, value.maxHeight); + writeValue(buffer, value.orientationValue); + } else if (value is AnchoredAdaptiveBannerAdSize) { + buffer.putUint8(_valueAnchoredAdaptiveBannerAdSize); + String? orientationValue; + if (value.orientation != null) { + orientationValue = (value.orientation as Orientation).name; + } + writeValue(buffer, orientationValue); + writeValue(buffer, value.width); + } else if (value is SmartBannerAdSize) { + buffer.putUint8(_valueSmartBannerAdSize); + if (defaultTargetPlatform == TargetPlatform.iOS) { + writeValue(buffer, value.orientation.name); + } + } else if (value is FluidAdSize) { + buffer.putUint8(_valueFluidAdSize); + } else { + buffer.putUint8(_valueAdSize); + writeValue(buffer, value.width); + writeValue(buffer, value.height); + } + } +} + +class _MediationExtras implements MediationExtras { + _MediationExtras(String className, Map extras) + : _androidClassName = className, + _iOSClassName = className, + _extras = extras; + + final String _androidClassName; + final String _iOSClassName; + final Map _extras; + + @override + String getAndroidClassName() { + return _androidClassName; + } + + @override + Map getExtras() { + return _extras; + } + + @override + String getIOSClassName() { + return _iOSClassName; + } +} + +/// An extension that maps each [MediaAspectRatio] to an int. +extension MediaAspectRatioExtension on MediaAspectRatio { + /// Gets the int mapping to pass to platform channel. + int get intValue { + switch (this) { + case MediaAspectRatio.unknown: + return 0; + case MediaAspectRatio.any: + return 1; + case MediaAspectRatio.landscape: + return 2; + case MediaAspectRatio.portrait: + return 3; + case MediaAspectRatio.square: + return 4; + } + } + + /// Maps an int back to [MediaAspectRatio]. + static MediaAspectRatio? fromInt(int? intValue) { + switch (intValue) { + case 0: + return MediaAspectRatio.unknown; + case 1: + return MediaAspectRatio.any; + case 2: + return MediaAspectRatio.landscape; + case 3: + return MediaAspectRatio.portrait; + case 4: + return MediaAspectRatio.square; + default: + return null; + } + } +} + +/// An extension that maps each [AdChoicesPlacement] to an int. +extension AdChoicesPlacementExtension on AdChoicesPlacement { + /// Gets the int mapping to pass to platform channel. + int get intValue { + switch (this) { + case AdChoicesPlacement.topRightCorner: + return Platform.isAndroid ? 1 : 0; + case AdChoicesPlacement.topLeftCorner: + return Platform.isAndroid ? 0 : 1; + case AdChoicesPlacement.bottomRightCorner: + return 2; + case AdChoicesPlacement.bottomLeftCorner: + return 3; + } + } + + /// Maps an int back to [AdChoicesPlacement]. + static AdChoicesPlacement? fromInt(int? intValue) { + switch (intValue) { + case 0: + return Platform.isAndroid + ? AdChoicesPlacement.topLeftCorner + : AdChoicesPlacement.topRightCorner; + case 1: + return Platform.isAndroid + ? AdChoicesPlacement.topRightCorner + : AdChoicesPlacement.topLeftCorner; + case 2: + return AdChoicesPlacement.bottomRightCorner; + case 3: + return AdChoicesPlacement.bottomLeftCorner; + default: + return null; + } + } +} + +class _BiMap extends MapBase { + _BiMap() { + _inverse = _BiMap._inverse(this); + } + + _BiMap._inverse(this._inverse); + + final Map _map = {}; + late _BiMap _inverse; + + _BiMap get inverse => _inverse; + + @override + V? operator [](Object? key) => _map[key]; + + @override + void operator []=(K key, V value) { + assert(!_map.containsKey(key)); + assert(!inverse.containsKey(value)); + _map[key] = value; + inverse._map[value] = key; + } + + @override + void clear() { + _map.clear(); + inverse._map.clear(); + } + + @override + Iterable get keys => _map.keys; + + @override + V? remove(Object? key) { + if (key == null) return null; + final V? value = _map[key]; + inverse._map.remove(value); + return _map.remove(key); + } +} diff --git a/mih_ui/android/build/ios/SourcePackages/google_mobile_ads-8.0.0/lib/src/ad_listeners.dart b/mih_ui/android/build/ios/SourcePackages/google_mobile_ads-8.0.0/lib/src/ad_listeners.dart new file mode 100644 index 00000000..2645bf98 --- /dev/null +++ b/mih_ui/android/build/ios/SourcePackages/google_mobile_ads-8.0.0/lib/src/ad_listeners.dart @@ -0,0 +1,325 @@ +// Copyright 2021 Google LLC +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// https://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +import 'package:meta/meta.dart'; + +import 'ad_containers.dart'; + +/// The callback type to handle an event occurring for an [Ad]. +typedef AdEventCallback = void Function(Ad ad); + +/// Generic callback type for an event occurring on an Ad. +typedef GenericAdEventCallback = void Function(Ad ad); + +/// A callback type for when an error occurs loading a full screen ad. +typedef FullScreenAdLoadErrorCallback = void Function(LoadAdError error); + +/// The callback type for when a user earns a reward. +typedef OnUserEarnedRewardCallback = + void Function(AdWithoutView ad, RewardItem reward); + +/// The callback type to handle an error loading an [Ad]. +typedef AdLoadErrorCallback = void Function(Ad ad, LoadAdError error); + +/// The callback type for when an ad receives revenue value. +typedef OnPaidEventCallback = + void Function( + Ad ad, + double valueMicros, + PrecisionType precision, + String currencyCode, + ); + +/// The callback type for when a fluid ad's height changes. +typedef OnFluidAdHeightChangedListener = + void Function(FluidAdManagerBannerAd ad, double height); + +/// Allowed constants for precision type in [OnPaidEventCallback]. +enum PrecisionType { + /// An ad value with unknown precision. + unknown, + + /// An ad value estimated from aggregated data. + estimated, + + /// A publisher-provided ad value, such as manual CPMs in a mediation group. + publisherProvided, + + /// The precise value paid for this ad. + precise, +} + +/// Listener for app events. +class AppEventListener { + /// Called when an app event is received. + void Function(Ad ad, String name, String data)? onAppEvent; +} + +/// Shared event callbacks used in Native and Banner ads. +abstract class AdWithViewListener { + /// Default constructor for [AdWithViewListener], meant to be used by subclasses. + @protected + const AdWithViewListener({ + this.onAdLoaded, + this.onAdFailedToLoad, + this.onAdOpened, + this.onAdWillDismissScreen, + this.onAdImpression, + this.onAdClosed, + this.onPaidEvent, + this.onAdClicked, + }); + + /// Called when an ad is successfully received. + final AdEventCallback? onAdLoaded; + + /// Called when an ad request failed. + final AdLoadErrorCallback? onAdFailedToLoad; + + /// A full screen view/overlay is presented in response to the user clicking + /// on an ad. You may want to pause animations and time sensitive + /// interactions. + final AdEventCallback? onAdOpened; + + /// For iOS only. Called before dismissing a full screen view. + final AdEventCallback? onAdWillDismissScreen; + + /// Called when the full screen view has been closed. You should restart + /// anything paused while handling onAdOpened. + final AdEventCallback? onAdClosed; + + /// Called when an impression occurs on the ad. + final AdEventCallback? onAdImpression; + + /// Called when the ad is clicked. + final AdEventCallback? onAdClicked; + + /// Callback to be invoked when an ad is estimated to have earned money. + /// Available for allowlisted accounts only. + final OnPaidEventCallback? onPaidEvent; +} + +/// A listener for receiving notifications for the lifecycle of a [BannerAd]. +class BannerAdListener extends AdWithViewListener { + /// Constructs a [BannerAdListener] that notifies for the provided event callbacks. + /// + /// Typically you will override [onAdLoaded] and [onAdFailedToLoad]: + /// ```dart + /// BannerAdListener( + /// onAdLoaded: (ad) { + /// // Ad successfully loaded - display an AdWidget with the banner ad. + /// }, + /// onAdFailedToLoad: (ad, error) { + /// // Ad failed to load - log the error and dispose the ad. + /// }, + /// ... + /// ) + /// ``` + const BannerAdListener({ + AdEventCallback? onAdLoaded, + AdLoadErrorCallback? onAdFailedToLoad, + AdEventCallback? onAdOpened, + AdEventCallback? onAdClosed, + AdEventCallback? onAdWillDismissScreen, + AdEventCallback? onAdImpression, + OnPaidEventCallback? onPaidEvent, + AdEventCallback? onAdClicked, + }) : super( + onAdLoaded: onAdLoaded, + onAdFailedToLoad: onAdFailedToLoad, + onAdOpened: onAdOpened, + onAdClosed: onAdClosed, + onAdWillDismissScreen: onAdWillDismissScreen, + onAdImpression: onAdImpression, + onPaidEvent: onPaidEvent, + onAdClicked: onAdClicked, + ); +} + +/// A listener for receiving notifications for the lifecycle of an [AdManagerBannerAd]. +class AdManagerBannerAdListener extends BannerAdListener + implements AppEventListener { + /// Constructs an [AdManagerBannerAdListener] with the provided event callbacks. + /// + /// Typically you will override [onAdLoaded] and [onAdFailedToLoad]: + /// ```dart + /// AdManagerBannerAdListener( + /// onAdLoaded: (ad) { + /// // Ad successfully loaded - display an AdWidget with the banner ad. + /// }, + /// onAdFailedToLoad: (ad, error) { + /// // Ad failed to load - log the error and dispose the ad. + /// }, + /// ... + /// ) + /// ``` + AdManagerBannerAdListener({ + AdEventCallback? onAdLoaded, + Function(Ad ad, LoadAdError error)? onAdFailedToLoad, + AdEventCallback? onAdOpened, + AdEventCallback? onAdWillDismissScreen, + AdEventCallback? onAdClosed, + AdEventCallback? onAdImpression, + OnPaidEventCallback? onPaidEvent, + this.onAppEvent, + AdEventCallback? onAdClicked, + }) : super( + onAdLoaded: onAdLoaded, + onAdFailedToLoad: onAdFailedToLoad, + onAdOpened: onAdOpened, + onAdWillDismissScreen: onAdWillDismissScreen, + onAdClosed: onAdClosed, + onAdImpression: onAdImpression, + onPaidEvent: onPaidEvent, + onAdClicked: onAdClicked, + ); + + /// Called when an app event is received. + @override + void Function(Ad ad, String name, String data)? onAppEvent; +} + +/// A listener for receiving notifications for the lifecycle of a [NativeAd]. +class NativeAdListener extends AdWithViewListener { + /// Constructs a [NativeAdListener] with the provided event callbacks. + /// + /// Typically you will override [onAdLoaded] and [onAdFailedToLoad]: + /// ```dart + /// NativeAdListener( + /// onAdLoaded: (ad) { + /// // Ad successfully loaded - display an AdWidget with the native ad. + /// }, + /// onAdFailedToLoad: (ad, error) { + /// // Ad failed to load - log the error and dispose the ad. + /// }, + /// ... + /// ) + /// ``` + NativeAdListener({ + AdEventCallback? onAdLoaded, + Function(Ad ad, LoadAdError error)? onAdFailedToLoad, + AdEventCallback? onAdOpened, + AdEventCallback? onAdWillDismissScreen, + AdEventCallback? onAdClosed, + AdEventCallback? onAdImpression, + OnPaidEventCallback? onPaidEvent, + AdEventCallback? onAdClicked, + }) : super( + onAdLoaded: onAdLoaded, + onAdFailedToLoad: onAdFailedToLoad, + onAdOpened: onAdOpened, + onAdWillDismissScreen: onAdWillDismissScreen, + onAdClosed: onAdClosed, + onAdImpression: onAdImpression, + onPaidEvent: onPaidEvent, + onAdClicked: onAdClicked, + ); +} + +/// Callback events for for full screen ads, such as Rewarded and Interstitial. +class FullScreenContentCallback { + /// Construct a new [FullScreenContentCallback]. + /// + /// [Ad.dispose] should be called from [onAdFailedToShowFullScreenContent] + /// and [onAdDismissedFullScreenContent], in order to free up resources. + const FullScreenContentCallback({ + this.onAdShowedFullScreenContent, + this.onAdImpression, + this.onAdFailedToShowFullScreenContent, + this.onAdWillDismissFullScreenContent, + this.onAdDismissedFullScreenContent, + this.onAdClicked, + }); + + /// Called when an ad shows full screen content. + final GenericAdEventCallback? onAdShowedFullScreenContent; + + /// Called when an ad dismisses full screen content. + final GenericAdEventCallback? onAdDismissedFullScreenContent; + + /// For iOS only. Called before dismissing a full screen view. + final GenericAdEventCallback? onAdWillDismissFullScreenContent; + + /// Called when an ad impression occurs. + final GenericAdEventCallback? onAdImpression; + + /// Called when an ad is clicked. + final GenericAdEventCallback? onAdClicked; + + /// Called when ad fails to show full screen content. + final void Function(Ad ad, AdError error)? onAdFailedToShowFullScreenContent; +} + +/// Generic parent class for ad load callbacks. +abstract class FullScreenAdLoadCallback { + /// Default constructor for [FullScreenAdLoadCallback[, used by subclasses. + const FullScreenAdLoadCallback({ + required this.onAdLoaded, + required this.onAdFailedToLoad, + }); + + /// Called when the ad successfully loads. + final GenericAdEventCallback onAdLoaded; + + /// Called when an error occurs loading the ad. + final FullScreenAdLoadErrorCallback onAdFailedToLoad; +} + +/// This class holds callbacks for loading a [RewardedAd]. +class RewardedAdLoadCallback extends FullScreenAdLoadCallback { + /// Construct a [RewardedAdLoadCallback]. + const RewardedAdLoadCallback({ + required GenericAdEventCallback onAdLoaded, + required FullScreenAdLoadErrorCallback onAdFailedToLoad, + }) : super(onAdLoaded: onAdLoaded, onAdFailedToLoad: onAdFailedToLoad); +} + +/// This class holds callbacks for loading an [AppOpenAd]. +class AppOpenAdLoadCallback extends FullScreenAdLoadCallback { + /// Construct an [AppOpenAdLoadCallback]. + const AppOpenAdLoadCallback({ + required GenericAdEventCallback onAdLoaded, + required FullScreenAdLoadErrorCallback onAdFailedToLoad, + }) : super(onAdLoaded: onAdLoaded, onAdFailedToLoad: onAdFailedToLoad); +} + +/// This class holds callbacks for loading an [InterstitialAd]. +class InterstitialAdLoadCallback + extends FullScreenAdLoadCallback { + /// Construct a [InterstitialAdLoadCallback]. + const InterstitialAdLoadCallback({ + required GenericAdEventCallback onAdLoaded, + required FullScreenAdLoadErrorCallback onAdFailedToLoad, + }) : super(onAdLoaded: onAdLoaded, onAdFailedToLoad: onAdFailedToLoad); +} + +/// This class holds callbacks for loading an [AdManagerInterstitialAd]. +class AdManagerInterstitialAdLoadCallback + extends FullScreenAdLoadCallback { + /// Construct a [AdManagerInterstitialAdLoadCallback]. + const AdManagerInterstitialAdLoadCallback({ + required GenericAdEventCallback onAdLoaded, + required FullScreenAdLoadErrorCallback onAdFailedToLoad, + }) : super(onAdLoaded: onAdLoaded, onAdFailedToLoad: onAdFailedToLoad); +} + +/// This class holds callbacks for loading a [RewardedInterstitialAd]. +class RewardedInterstitialAdLoadCallback + extends FullScreenAdLoadCallback { + /// Construct a [RewardedInterstitialAdLoadCallback]. + const RewardedInterstitialAdLoadCallback({ + required GenericAdEventCallback onAdLoaded, + required FullScreenAdLoadErrorCallback onAdFailedToLoad, + }) : super(onAdLoaded: onAdLoaded, onAdFailedToLoad: onAdFailedToLoad); +} diff --git a/mih_ui/android/build/ios/SourcePackages/google_mobile_ads-8.0.0/lib/src/app_background_event_notifier.dart b/mih_ui/android/build/ios/SourcePackages/google_mobile_ads-8.0.0/lib/src/app_background_event_notifier.dart new file mode 100644 index 00000000..8c0d1e28 --- /dev/null +++ b/mih_ui/android/build/ios/SourcePackages/google_mobile_ads-8.0.0/lib/src/app_background_event_notifier.dart @@ -0,0 +1,63 @@ +// Copyright 2021 Google LLC +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// https://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +import 'dart:async'; + +import 'package:flutter/cupertino.dart'; +import 'package:flutter/services.dart'; + +/// The app foreground/background state. +enum AppState { + /// App is backgrounded. + background, + + /// App is foregrounded. + foreground, +} + +/// Notifies changes in app foreground/background. +/// +/// Subscribe to [appStateStream] to get notified of changes in [AppState]. +/// Use this when implementing app open ads instead of [WidgetsBindingObserver], +/// because the latter also notifies when the state of the Flutter +/// activity/view controller changes. This makes an interstitial taking control +/// of the screen indistinguishable from the app background/foreground. +class AppStateEventNotifier { + static const _eventChannelName = + 'plugins.flutter.io/google_mobile_ads/app_state_event'; + static const _methodChannelName = + 'plugins.flutter.io/google_mobile_ads/app_state_method'; + static const EventChannel _eventChannel = EventChannel(_eventChannelName); + static const MethodChannel _methodChannel = MethodChannel(_methodChannelName); + + /// Subscribe to this to get notified of changes in [AppState]. + /// + /// Call [startListening] before subscribing to this stream to + /// start listening to background/foreground events on the platform side. + static Stream get appStateStream => + _eventChannel.receiveBroadcastStream().map( + (event) => + event == 'foreground' ? AppState.foreground : AppState.background, + ); + + /// Start listening to background/foreground events. + static Future startListening() async { + return _methodChannel.invokeMethod('start'); + } + + /// Stop listening to background/foreground events. + static Future stopListening() async { + return _methodChannel.invokeMethod('stop'); + } +} diff --git a/mih_ui/android/build/ios/SourcePackages/google_mobile_ads-8.0.0/lib/src/mediation_extras.dart b/mih_ui/android/build/ios/SourcePackages/google_mobile_ads-8.0.0/lib/src/mediation_extras.dart new file mode 100644 index 00000000..c2ecc05f --- /dev/null +++ b/mih_ui/android/build/ios/SourcePackages/google_mobile_ads-8.0.0/lib/src/mediation_extras.dart @@ -0,0 +1,39 @@ +// Copyright 2024 Google LLC +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// https://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +import 'package:google_mobile_ads/src/ad_containers.dart'; + +/// Contains information for a particular ad network set by developer. +abstract class MediationExtras { + /// Fully-qualified name of an Android FlutterMediationExtras class. + /// + /// The name of the class must implement the FlutterMediationExtras interface. + /// The flutter plugin will try to instantiate it via reflection when an + /// [AdRequest] is created and an instance of this class is assigned to its + /// mediationExtras. + String getAndroidClassName(); + + /// Name of an iOS class that conforms to the FLTMediationExtras protocol. + /// + /// The flutter plugin will try to instantiate it via reflection when an + /// [AdRequest] is created and an instance of this class is assigned to its + /// mediationExtras. + String getIOSClassName(); + + /// Key-Value pair to be sent to the host platform to parse. + /// + /// The Android or iOS parse classes are responsible to take these values and + /// parse them to Mediation Extras that the Ad Request can register. + Map getExtras(); +} diff --git a/mih_ui/android/build/ios/SourcePackages/google_mobile_ads-8.0.0/lib/src/mobile_ads.dart b/mih_ui/android/build/ios/SourcePackages/google_mobile_ads-8.0.0/lib/src/mobile_ads.dart new file mode 100644 index 00000000..ab6facb4 --- /dev/null +++ b/mih_ui/android/build/ios/SourcePackages/google_mobile_ads-8.0.0/lib/src/mobile_ads.dart @@ -0,0 +1,186 @@ +// Copyright 2021 Google LLC +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// https://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +import 'package:google_mobile_ads/google_mobile_ads.dart'; + +import 'ad_inspector_containers.dart'; +import 'ad_instance_manager.dart'; +import 'request_configuration.dart'; +import 'package:flutter/foundation.dart'; +import 'package:webview_flutter/webview_flutter.dart'; + +/// The initialization state of the mediation adapter. +enum AdapterInitializationState { + /// The mediation adapter is less likely to fill ad requests. + notReady, + + /// The mediation adapter is ready to service ad requests. + ready, +} + +/// Class contains logic that applies to the Google Mobile Ads SDK as a whole. +/// +/// Right now, the only methods in it are used for initialization. +/// +/// See [instance]. +class MobileAds { + MobileAds._(); + + static final MobileAds _instance = MobileAds._().._init(); + + /// Shared instance to initialize the AdMob SDK. + static MobileAds get instance => _instance; + + /// Initializes the Google Mobile Ads SDK. + /// + /// Call this method as early as possible after the app launches to reduce + /// latency on the session's first ad request. + /// + /// If this method is not called, the first ad request automatically + /// initializes the Google Mobile Ads SDK. + Future initialize() { + return instanceManager.initialize(); + } + + /// Get the current [RequestConfiguration]. + /// + /// On iOS, tagForUnderAgeOfConsent and tagForChildDirectedTreatment are null on + /// the returned [RequestConfiguration]. + Future getRequestConfiguration() { + return instanceManager.getRequestConfiguration(); + } + + /// Update the [RequestConfiguration] to apply for future ad requests. + Future updateRequestConfiguration( + RequestConfiguration requestConfiguration, + ) { + return instanceManager.updateRequestConfiguration(requestConfiguration); + } + + /// Set whether the Google Mobile Ads SDK Same App Key is enabled (iOS only). + /// + /// The value set persists across app sessions. The key is enabled by default. + /// This is a no-op on Android. + /// More documentation on same app key is available at + /// https://developers.google.com/admob/ios/global-settings#same_app_key. + Future setSameAppKeyEnabled(bool isEnabled) { + if (defaultTargetPlatform == TargetPlatform.iOS) { + return instanceManager.setSameAppKeyEnabled(isEnabled); + } else { + return Future.value(); + } + } + + /// Sets whether the app is muted. + /// + /// For more details about the volume control, visit + /// https://developers.google.com/admob/android/global-settings#video_ad_volume_control + Future setAppMuted(bool muted) { + return instanceManager.setAppMuted(muted); + } + + /// Sets the current app volume. + /// + /// [volume] should be from 0 (muted) to 1 (full media volume). + /// The default value is 1. + /// For more details about the volume control, visit + /// https://developers.google.com/android/reference/com/google/android/gms/ads/MobileAds#public-static-void-setappvolume-float-volume + Future setAppVolume(double volume) { + return instanceManager.setAppVolume(volume); + } + + /// Disables automated SDK crash reporting (iOS only). + /// + /// For more details, visit admob (iOS) documentation: + /// https://developers.google.com/admob/ios/api/reference/Classes/GADMobileAds#-disablesdkcrashreporting + Future disableSDKCrashReporting() { + if (defaultTargetPlatform == TargetPlatform.iOS) { + return instanceManager.disableSDKCrashReporting(); + } else { + return Future.value(); + } + } + + /// Disables mediation adapter initialization during initialization of the GMA SDK. + /// + /// For more details, visit admob documentation: + /// https://developers.google.com/admob/ios/api/reference/Classes/GADMobileAds#-disablemediationinitialization + Future disableMediationInitialization() { + return instanceManager.disableMediationInitialization(); + } + + /// Gets the version string of Google Mobile Ads SDK. + Future getVersionString() { + return instanceManager.getVersionString(); + } + + /// Opens the debug menu for the [adUnitId]. + /// + /// Returns a Future that completes when the platform side api has been + /// invoked. + Future openDebugMenu(String adUnitId) { + return instanceManager.openDebugMenu(adUnitId); + } + + /// Registers a `WebViewController` with the Google Mobile Ads SDK. + /// + /// This improves in-app ad monetization of ads within this WebView. + Future registerWebView(WebViewController webViewController) { + return instanceManager.registerWebView(webViewController); + } + + /// Open the ad inspector. + void openAdInspector(OnAdInspectorClosedListener listener) async { + instanceManager.openAdInspector(listener); + } + + /// Internal init to cleanup state for hot restart. + /// This is a workaround for https://github.com/flutter/flutter/issues/7160. + void _init() { + instanceManager.channel.invokeMethod('_init'); + } +} + +/// The status of the SDK initialization. +class InitializationStatus { + /// Default constructor to create an [InitializationStatus]. + /// + /// Returned when calling [MobileAds.initialize]; + InitializationStatus(Map adapterStatuses) + : adapterStatuses = Map.unmodifiable( + adapterStatuses, + ); + + /// Initialization status of each known ad network, keyed by its adapter's class name. + final Map adapterStatuses; +} + +/// An immutable snapshot of a mediation adapter's initialization status. +class AdapterStatus { + /// Default constructor to create an [AdapterStatus]. + /// + /// Returned when calling [MobileAds.initialize]. + AdapterStatus(this.state, this.description, this.latency); + + /// The adapter's initialization state. + final AdapterInitializationState state; + + /// Detailed description of the status. + final String description; + + /// The adapter's initialization latency in seconds. + /// + /// 0 if initialization has not yet ended. + final double latency; +} diff --git a/mih_ui/android/build/ios/SourcePackages/google_mobile_ads-8.0.0/lib/src/nativetemplates/native_template_font_style.dart b/mih_ui/android/build/ios/SourcePackages/google_mobile_ads-8.0.0/lib/src/nativetemplates/native_template_font_style.dart new file mode 100644 index 00000000..451362ff --- /dev/null +++ b/mih_ui/android/build/ios/SourcePackages/google_mobile_ads-8.0.0/lib/src/nativetemplates/native_template_font_style.dart @@ -0,0 +1,28 @@ +// Copyright 2023 Google LLC +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// https://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +/// Font types for native templates. +enum NativeTemplateFontStyle { + /// Default text + normal, + + /// Bold + bold, + + /// Italic + italic, + + /// Monospace + monospace, +} diff --git a/mih_ui/android/build/ios/SourcePackages/google_mobile_ads-8.0.0/lib/src/nativetemplates/native_template_style.dart b/mih_ui/android/build/ios/SourcePackages/google_mobile_ads-8.0.0/lib/src/nativetemplates/native_template_style.dart new file mode 100644 index 00000000..8d6873ee --- /dev/null +++ b/mih_ui/android/build/ios/SourcePackages/google_mobile_ads-8.0.0/lib/src/nativetemplates/native_template_style.dart @@ -0,0 +1,85 @@ +// Copyright 2023 Google LLC +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// https://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +import 'dart:ui'; + +import 'package:google_mobile_ads/src/nativetemplates/template_type.dart'; +import 'package:google_mobile_ads/src/nativetemplates/native_template_text_style.dart'; + +/// Style options for native templates. +/// +/// Can be used when loading a [NativeAd]. +class NativeTemplateStyle { + /// Create a [NativeTemplateStyle]. + /// + /// Only templateType is required. + NativeTemplateStyle({ + required this.templateType, + this.callToActionTextStyle, + this.primaryTextStyle, + this.secondaryTextStyle, + this.tertiaryTextStyle, + this.mainBackgroundColor, + this.cornerRadius, + }); + + /// The [TemplateType] to use. + TemplateType templateType; + + /// The [NativeTemplateTextStyle] for the call to action. + NativeTemplateTextStyle? callToActionTextStyle; + + /// The [NativeTemplateTextStyle] for the primary text. + NativeTemplateTextStyle? primaryTextStyle; + + /// The [NativeTemplateTextStyle] for the second row of text in the template. + /// + /// All templates have a secondary text area which is populated either by the + /// body of the ad or by the rating of the app. + NativeTemplateTextStyle? secondaryTextStyle; + + /// The [NativeTemplateTextStyle] for the third row of text in the template. + /// + /// The third row is used to display store name or the default tertiary text. + NativeTemplateTextStyle? tertiaryTextStyle; + + /// The background color. + Color? mainBackgroundColor; + + /// The corner radius for the icon view and call to action (iOS only). + double? cornerRadius; + + @override + bool operator ==(Object other) { + return other is NativeTemplateStyle && + templateType == other.templateType && + callToActionTextStyle == other.callToActionTextStyle && + primaryTextStyle == other.primaryTextStyle && + secondaryTextStyle == other.secondaryTextStyle && + tertiaryTextStyle == other.tertiaryTextStyle && + mainBackgroundColor == other.mainBackgroundColor && + cornerRadius == other.cornerRadius; + } + + @override + int get hashCode => Object.hashAll([ + templateType, + callToActionTextStyle, + primaryTextStyle, + secondaryTextStyle, + tertiaryTextStyle, + mainBackgroundColor, + cornerRadius, + ]); +} diff --git a/mih_ui/android/build/ios/SourcePackages/google_mobile_ads-8.0.0/lib/src/nativetemplates/native_template_text_style.dart b/mih_ui/android/build/ios/SourcePackages/google_mobile_ads-8.0.0/lib/src/nativetemplates/native_template_text_style.dart new file mode 100644 index 00000000..f2c7b6f2 --- /dev/null +++ b/mih_ui/android/build/ios/SourcePackages/google_mobile_ads-8.0.0/lib/src/nativetemplates/native_template_text_style.dart @@ -0,0 +1,51 @@ +// Copyright 2023 Google LLC +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// https://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +import 'dart:ui'; +import 'package:google_mobile_ads/src/nativetemplates/native_template_font_style.dart'; + +/// Text style options for native templates. +class NativeTemplateTextStyle { + /// Create a [NativeTemplateTextStyle]. + NativeTemplateTextStyle({ + this.textColor, + this.backgroundColor, + this.style, + this.size, + }); + + /// Text color + Color? textColor; + + /// Background color + Color? backgroundColor; + + /// FontStyle] for the text + NativeTemplateFontStyle? style; + + /// Size of the text + double? size; + + @override + bool operator ==(Object other) { + return other is NativeTemplateTextStyle && + textColor == other.textColor && + backgroundColor == other.backgroundColor && + style == other.style && + size == other.size; + } + + @override + int get hashCode => Object.hashAll([textColor, backgroundColor, style, size]); +} diff --git a/mih_ui/android/build/ios/SourcePackages/google_mobile_ads-8.0.0/lib/src/nativetemplates/template_type.dart b/mih_ui/android/build/ios/SourcePackages/google_mobile_ads-8.0.0/lib/src/nativetemplates/template_type.dart new file mode 100644 index 00000000..86b63c5b --- /dev/null +++ b/mih_ui/android/build/ios/SourcePackages/google_mobile_ads-8.0.0/lib/src/nativetemplates/template_type.dart @@ -0,0 +1,22 @@ +// Copyright 2023 Google LLC +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// https://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +/// Template types for [NativeTemplateStyle]. +enum TemplateType { + /// Small layout + small, + + /// Medium layout + medium, +} diff --git a/mih_ui/android/build/ios/SourcePackages/google_mobile_ads-8.0.0/lib/src/request_configuration.dart b/mih_ui/android/build/ios/SourcePackages/google_mobile_ads-8.0.0/lib/src/request_configuration.dart new file mode 100644 index 00000000..47491c7a --- /dev/null +++ b/mih_ui/android/build/ios/SourcePackages/google_mobile_ads-8.0.0/lib/src/request_configuration.dart @@ -0,0 +1,105 @@ +// Copyright 2021 Google LLC +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// https://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +/// Contains targeting information that can be applied to all ad requests. +/// +/// See relevant documentation at +/// https://developers.google.com/ad-manager/mobile-ads-sdk/android/targeting#requestconfiguration. +class RequestConfiguration { + /// Maximum content rating that will be shown. + final String? maxAdContentRating; + + /// Whether to tag as child directed. + final int? tagForChildDirectedTreatment; + + /// Whether to tag as under age of consent. + final int? tagForUnderAgeOfConsent; + + /// List of test device ids to set. + final List? testDeviceIds; + + /// Creates a [RequestConfiguration]. + RequestConfiguration({ + this.maxAdContentRating, + this.tagForChildDirectedTreatment, + this.tagForUnderAgeOfConsent, + this.testDeviceIds, + }); +} + +/// Values for [RequestConfiguration.maxAdContentRating]. +class MaxAdContentRating { + /// No specified content rating. + static final String unspecified = ''; + + /// Content suitable for general audiences, including families. + static final String g = 'G'; + + /// Content suitable for most audiences with parental guidance. + static final String pg = 'PG'; + + /// Content suitable for most audiences with parental guidance. + static final String t = 'T'; + + /// Content suitable only for mature audiences. + static final String ma = 'MA'; +} + +/// Values for [RequestConfiguration.tagForUnderAgeOfConsent]. +class TagForUnderAgeOfConsent { + /// Tag as under age of consent. + /// + /// Indicates the publisher specified that the ad request should receive + /// treatment for users in the European Economic Area (EEA) under the age + /// of consent. + static final int yes = 1; + + /// Tag as NOT under age of consent. + /// + /// Indicates the publisher specified that the ad request should not receive + /// treatment for users in the European Economic Area (EEA) under the age of + /// consent. + static final int no = 0; + + /// Do not specify tag for under age of consent. + /// + /// Indicates that the publisher has not specified whether the ad request + /// should receive treatment for users in the European Economic Area (EEA) + /// under the age of consent. + static final int unspecified = -1; +} + +/// Values for [RequestConfiguration.tagForChildDirectedTreatment]. +class TagForChildDirectedTreatment { + /// Tag for child directed treatment. + /// + /// Indicates the publisher specified that the ad request should receive + /// treatment for users in the European Economic Area (EEA) under the age + /// of consent. + static final int yes = 1; + + /// Tag for NOT child directed treatment. + /// + /// Indicates the publisher specified that the ad request should not receive + /// treatment for users in the European Economic Area (EEA) under the age + /// of consent. + static final int no = 0; + + /// Do not specify tag for child directed treatment. + /// + /// Indicates that the publisher has not specified whether the ad request + /// should receive treatment for users in the European Economic Area (EEA) + /// under the age of consent. + static final int unspecified = -1; +} diff --git a/mih_ui/android/build/ios/SourcePackages/google_mobile_ads-8.0.0/lib/src/ump/consent_form.dart b/mih_ui/android/build/ios/SourcePackages/google_mobile_ads-8.0.0/lib/src/ump/consent_form.dart new file mode 100644 index 00000000..0cd3dd01 --- /dev/null +++ b/mih_ui/android/build/ios/SourcePackages/google_mobile_ads-8.0.0/lib/src/ump/consent_form.dart @@ -0,0 +1,71 @@ +// Copyright 2022 Google LLC +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// https://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +import 'form_error.dart'; +import 'user_messaging_channel.dart'; + +/// Callback to be invoked when a consent form is dismissed. +/// +/// An optional [FormError] is provided if an error occurred. +typedef OnConsentFormDismissedListener = void Function(FormError? formError); + +/// Callback to be invoked when a consent form loads successfully +typedef OnConsentFormLoadSuccessListener = + void Function(ConsentForm consentForm); + +/// Callback to be invoked when a consent form failed to load. +typedef OnConsentFormLoadFailureListener = void Function(FormError formError); + +/// A rendered form for collecting consent from a user. +abstract class ConsentForm { + /// Shows the consent form. + void show(OnConsentFormDismissedListener onConsentFormDismissedListener); + + /// Presents a privacy options form. + static Future showPrivacyOptionsForm( + OnConsentFormDismissedListener onConsentFormDismissedListener, + ) async { + onConsentFormDismissedListener( + await UserMessagingChannel.instance.showPrivacyOptionsForm(), + ); + } + + /// Free platform resources associated with this object. + /// + /// Returns a future that completes when the platform resources are freed. + Future dispose(); + + /// Loads a ConsentForm. + /// + /// Check that [ConsentInformation.isConsentFormAvailable()] returns true + /// prior to calling this method. + static void loadConsentForm( + OnConsentFormLoadSuccessListener successListener, + OnConsentFormLoadFailureListener failureListener, + ) { + UserMessagingChannel.instance.loadConsentForm( + successListener, + failureListener, + ); + } + + /// Loads a consent form and immediately shows it. + static Future loadAndShowConsentFormIfRequired( + OnConsentFormDismissedListener onConsentFormDismissedListener, + ) async { + onConsentFormDismissedListener( + await UserMessagingChannel.instance.loadAndShowConsentFormIfRequired(), + ); + } +} diff --git a/mih_ui/android/build/ios/SourcePackages/google_mobile_ads-8.0.0/lib/src/ump/consent_form_impl.dart b/mih_ui/android/build/ios/SourcePackages/google_mobile_ads-8.0.0/lib/src/ump/consent_form_impl.dart new file mode 100644 index 00000000..8ad486f7 --- /dev/null +++ b/mih_ui/android/build/ios/SourcePackages/google_mobile_ads-8.0.0/lib/src/ump/consent_form_impl.dart @@ -0,0 +1,43 @@ +// Copyright 2022 Google LLC +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// https://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +import 'consent_form.dart'; +import 'user_messaging_channel.dart'; + +/// Implementation for [ConsentForm], +class ConsentFormImpl extends ConsentForm { + /// Construct a [ConsentFormImpl]. + ConsentFormImpl(this.platformHash); + + /// Identifier to the underlying platform object. + final int platformHash; + + @override + void show(OnConsentFormDismissedListener onConsentFormDismissedListener) { + UserMessagingChannel.instance.show(this, onConsentFormDismissedListener); + } + + @override + Future dispose() { + return UserMessagingChannel.instance.disposeConsentForm(this); + } + + @override + bool operator ==(Object other) { + return other is ConsentFormImpl && platformHash == other.platformHash; + } + + @override + int get hashCode => platformHash.hashCode; +} diff --git a/mih_ui/android/build/ios/SourcePackages/google_mobile_ads-8.0.0/lib/src/ump/consent_information.dart b/mih_ui/android/build/ios/SourcePackages/google_mobile_ads-8.0.0/lib/src/ump/consent_information.dart new file mode 100644 index 00000000..5d265941 --- /dev/null +++ b/mih_ui/android/build/ios/SourcePackages/google_mobile_ads-8.0.0/lib/src/ump/consent_information.dart @@ -0,0 +1,85 @@ +// Copyright 2022 Google LLC +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// https://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +import 'package:google_mobile_ads/src/ump/consent_information_impl.dart'; + +import 'consent_request_parameters.dart'; +import 'form_error.dart'; + +/// Callback to be invoked when consent info is successfully updated. +typedef OnConsentInfoUpdateSuccessListener = void Function(); + +/// Callback to be invoked when consent info failed to update. +typedef OnConsentInfoUpdateFailureListener = void Function(FormError error); + +/// Consent status values. +enum ConsentStatus { + /// User consent not required. + notRequired, + + /// User consent obtained. + obtained, + + /// User consent required but not yet obtained. + required, + + /// Consent status is unknown. + unknown, +} + +/// Utility methods for collecting consent from users. +abstract class ConsentInformation { + /// Requests a consent information update. + void requestConsentInfoUpdate( + ConsentRequestParameters params, + OnConsentInfoUpdateSuccessListener successListener, + OnConsentInfoUpdateFailureListener failureListener, + ); + + /// Returns true if a ConsentForm is available, false otherwise. + Future isConsentFormAvailable(); + + /// Get the user’s consent status. + /// + /// This value is cached between app sessions and can be read before + /// requesting updated parameters. + Future getConsentStatus(); + + /// Resets the consent information to initialized status. + /// + /// Should only be used for testing. Returns a [Future] that completes when + /// the platform API has been called. + Future reset(); + + /// Indicates whether the app has completed the necessary steps for gathering updated user consent. + Future canRequestAds(); + + /// Indicates the privacy options requirement status as a [PrivacyOptionsRequirementStatus]. + Future getPrivacyOptionsRequirementStatus(); + + /// The static [ConsentInformation] instance. + static ConsentInformation instance = ConsentInformationImpl(); +} + +/// Values indicate whether a privacy options button is required. +enum PrivacyOptionsRequirementStatus { + /// Privacy options entry point is not required. + notRequired, + + /// Privacy options entry point is required. + required, + + /// Privacy options requirement status is unknown. + unknown, +} diff --git a/mih_ui/android/build/ios/SourcePackages/google_mobile_ads-8.0.0/lib/src/ump/consent_information_impl.dart b/mih_ui/android/build/ios/SourcePackages/google_mobile_ads-8.0.0/lib/src/ump/consent_information_impl.dart new file mode 100644 index 00000000..c2a4fe81 --- /dev/null +++ b/mih_ui/android/build/ios/SourcePackages/google_mobile_ads-8.0.0/lib/src/ump/consent_information_impl.dart @@ -0,0 +1,61 @@ +// Copyright 2022 Google LLC +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// https://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +import 'consent_information.dart'; +import 'consent_request_parameters.dart'; +import 'user_messaging_channel.dart'; + +/// Implementation for ConsentInformation. +class ConsentInformationImpl extends ConsentInformation { + /// Constructor for [ConsentInformationImpl]. + ConsentInformationImpl(); + + @override + void requestConsentInfoUpdate( + ConsentRequestParameters params, + OnConsentInfoUpdateSuccessListener successListener, + OnConsentInfoUpdateFailureListener failureListener, + ) { + UserMessagingChannel.instance.requestConsentInfoUpdate( + params, + successListener, + failureListener, + ); + } + + @override + Future isConsentFormAvailable() { + return UserMessagingChannel.instance.isConsentFormAvailable(); + } + + @override + Future getConsentStatus() { + return UserMessagingChannel.instance.getConsentStatus(); + } + + @override + Future reset() { + return UserMessagingChannel.instance.reset(); + } + + @override + Future canRequestAds() { + return UserMessagingChannel.instance.canRequestAds(); + } + + @override + Future getPrivacyOptionsRequirementStatus() { + return UserMessagingChannel.instance.getPrivacyOptionsRequirementStatus(); + } +} diff --git a/mih_ui/android/build/ios/SourcePackages/google_mobile_ads-8.0.0/lib/src/ump/consent_request_parameters.dart b/mih_ui/android/build/ios/SourcePackages/google_mobile_ads-8.0.0/lib/src/ump/consent_request_parameters.dart new file mode 100644 index 00000000..f9f031a6 --- /dev/null +++ b/mih_ui/android/build/ios/SourcePackages/google_mobile_ads-8.0.0/lib/src/ump/consent_request_parameters.dart @@ -0,0 +1,86 @@ +// Copyright 2022 Google LLC +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// https://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +import 'package:flutter/foundation.dart'; + +/// Parameters sent on updating user consent info. +class ConsentRequestParameters { + /// Construct a [ConsentRequestParameters]. + ConsentRequestParameters({ + this.tagForUnderAgeOfConsent, + this.consentDebugSettings, + }); + + /// Tag for underage of consent. + /// + /// False means users are not underage. + bool? tagForUnderAgeOfConsent; + + /// Debug settings to hardcode in test requests. + ConsentDebugSettings? consentDebugSettings; + + @override + bool operator ==(Object other) { + return other is ConsentRequestParameters && + tagForUnderAgeOfConsent == other.tagForUnderAgeOfConsent && + consentDebugSettings == other.consentDebugSettings; + } + + @override + int get hashCode => + Object.hash(tagForUnderAgeOfConsent, consentDebugSettings); +} + +/// Debug settings to hardcode in test requests. +class ConsentDebugSettings { + /// Construct a [ConsentDebugSettings]. + ConsentDebugSettings({this.debugGeography, this.testIdentifiers}); + + /// Debug geography for testing geography. + DebugGeography? debugGeography; + + /// List of device identifier strings. + /// + /// Debug features are enabled for devices with these identifiers. + List? testIdentifiers; + + @override + bool operator ==(Object other) { + return other is ConsentDebugSettings && + debugGeography == other.debugGeography && + listEquals(testIdentifiers, other.testIdentifiers); + } + + @override + int get hashCode => Object.hash(debugGeography, testIdentifiers); +} + +/// Debug values for testing geography. +enum DebugGeography { + /// Debug geography disabled. + debugGeographyDisabled, + + /// Geography appears as in EEA for debug devices. + debugGeographyEea, + + /// Geography appears as not in EEA for debug devices. + @Deprecated('Use DebugGeography.debugGeographyOther') + debugGeographyNotEea, + + /// Geography appears as in a regulated US State for debug devices. + debugGeographyRegulatedUsState, + + /// Geography appears as in a region with no regulation in force. + debugGeographyOther, +} diff --git a/mih_ui/android/build/ios/SourcePackages/google_mobile_ads-8.0.0/lib/src/ump/form_error.dart b/mih_ui/android/build/ios/SourcePackages/google_mobile_ads-8.0.0/lib/src/ump/form_error.dart new file mode 100644 index 00000000..7ff1c006 --- /dev/null +++ b/mih_ui/android/build/ios/SourcePackages/google_mobile_ads-8.0.0/lib/src/ump/form_error.dart @@ -0,0 +1,43 @@ +// Copyright 2022 Google LLC +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// https://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +/// Error information about why a form operation failed. +class FormError { + /// Init a [FormError] with the errorCode and message. + FormError({required this.errorCode, required this.message}); + + /// Code for the error. + /// + /// A value of 0 means that the error is internal to the Flutter plugin. + /// All other error codes come from the corresponding Android and iOS platform + /// objects. + /// See https://developers.google.com/admob/ump/android/api/reference/com/google/android/ump/FormError.ErrorCode, + /// https://developers.google.com/admob/ump/ios/api/reference/Enums/UMPFormErrorCode, + /// and https://developers.google.com/admob/ump/ios/api/reference/Enums/UMPRequestErrorCode + /// for platform specific error code descriptions. + final int errorCode; + + /// The message describing the error. + final String message; + + @override + bool operator ==(Object other) { + return other is FormError && + errorCode == other.errorCode && + message == other.message; + } + + @override + int get hashCode => Object.hash(errorCode, message); +} diff --git a/mih_ui/android/build/ios/SourcePackages/google_mobile_ads-8.0.0/lib/src/ump/user_messaging_channel.dart b/mih_ui/android/build/ios/SourcePackages/google_mobile_ads-8.0.0/lib/src/ump/user_messaging_channel.dart new file mode 100644 index 00000000..9a64e2f1 --- /dev/null +++ b/mih_ui/android/build/ios/SourcePackages/google_mobile_ads-8.0.0/lib/src/ump/user_messaging_channel.dart @@ -0,0 +1,200 @@ +// Copyright 2022 Google LLC +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// https://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +import 'package:flutter/foundation.dart'; +import 'package:flutter/services.dart'; + +import 'consent_form.dart'; +import 'consent_information.dart'; +import 'consent_request_parameters.dart'; +import 'form_error.dart'; +import 'user_messaging_codec.dart'; + +/// Platform channel for UMP SDK. +class UserMessagingChannel { + static const _methodChannelName = 'plugins.flutter.io/google_mobile_ads/ump'; + + /// Create a [UserMessagingChannel] with the [channel]. + UserMessagingChannel(MethodChannel channel) : _methodChannel = channel; + + /// The shared [UserMessagingChannel] instance. + static UserMessagingChannel instance = UserMessagingChannel( + MethodChannel( + _methodChannelName, + StandardMethodCodec(UserMessagingCodec()), + ), + ); + + final MethodChannel _methodChannel; + + /// Request a consent information update with [params]. + /// + /// Invokes [successListener] or [failureListener] depending on if there was + /// an error. + void requestConsentInfoUpdate( + ConsentRequestParameters params, + OnConsentInfoUpdateSuccessListener successListener, + OnConsentInfoUpdateFailureListener failureListener, + ) async { + try { + await _methodChannel.invokeMethod( + 'ConsentInformation#requestConsentInfoUpdate', + {'params': params}, + ); + successListener(); + } on PlatformException catch (e) { + failureListener(_formErrorFromPlatformException(e)); + } + } + + /// Returns a future indicating whether a consent form is available. + Future isConsentFormAvailable() async { + return (await _methodChannel.invokeMethod( + 'ConsentInformation#isConsentFormAvailable', + ))!; + } + + /// Gets the consent status. + Future getConsentStatus() async { + int consentStatus = (await _methodChannel.invokeMethod( + 'ConsentInformation#getConsentStatus', + ))!; + + if (defaultTargetPlatform == TargetPlatform.iOS) { + switch (consentStatus) { + case 0: + return ConsentStatus.unknown; + case 1: + return ConsentStatus.required; + case 2: + return ConsentStatus.notRequired; + case 3: + return ConsentStatus.obtained; + default: + debugPrint('Error: unknown ConsentStatus value: $consentStatus'); + return ConsentStatus.unknown; + } + } else { + switch (consentStatus) { + case 0: + return ConsentStatus.unknown; + case 1: + return ConsentStatus.notRequired; + case 2: + return ConsentStatus.required; + case 3: + return ConsentStatus.obtained; + default: + debugPrint('Error: unknown ConsentStatus value: $consentStatus'); + return ConsentStatus.unknown; + } + } + } + + /// Invokes reset API, + Future reset() async { + return _methodChannel.invokeMethod('ConsentInformation#reset'); + } + + /// Returns indicating whether it is ok to request ads. + Future canRequestAds() async { + return (await _methodChannel.invokeMethod( + 'ConsentInformation#canRequestAds', + ))!; + } + + /// Indicates the privacy options requirement status as a [PrivacyOptionsRequirementStatus]. + Future + getPrivacyOptionsRequirementStatus() async { + int? privacyOptionsStatusInt = (await _methodChannel.invokeMethod( + 'ConsentInformation#getPrivacyOptionsRequirementStatus', + )); + switch (privacyOptionsStatusInt) { + case 0: + return PrivacyOptionsRequirementStatus.notRequired; + case 1: + return PrivacyOptionsRequirementStatus.required; + default: + return PrivacyOptionsRequirementStatus.unknown; + } + } + + /// Loads a consent form and calls the corresponding listener. + void loadConsentForm( + OnConsentFormLoadSuccessListener successListener, + OnConsentFormLoadFailureListener failureListener, + ) async { + try { + ConsentForm form = (await _methodChannel.invokeMethod( + 'UserMessagingPlatform#loadConsentForm', + ))!; + successListener(form); + } on PlatformException catch (e) { + failureListener(_formErrorFromPlatformException(e)); + } + } + + /// Loads a consent form and calls the listener afterwards. + Future loadAndShowConsentFormIfRequired() async { + try { + return await _methodChannel.invokeMethod( + 'UserMessagingPlatform#loadAndShowConsentFormIfRequired', + ); + } on PlatformException catch (e) { + return _formErrorFromPlatformException(e); + } + } + + /// Show the consent form. + void show( + ConsentForm consentForm, + OnConsentFormDismissedListener onConsentFormDismissedListener, + ) async { + try { + await _methodChannel.invokeMethod( + 'ConsentForm#show', + {'consentForm': consentForm}, + ); + onConsentFormDismissedListener(null); + } on PlatformException catch (e) { + onConsentFormDismissedListener(_formErrorFromPlatformException(e)); + } + } + + /// Presents a privacy options form. + Future showPrivacyOptionsForm() async { + try { + return await _methodChannel.invokeMethod( + 'UserMessagingPlatform#showPrivacyOptionsForm', + ); + } on PlatformException catch (e) { + return _formErrorFromPlatformException(e); + } + } + + FormError _formErrorFromPlatformException(PlatformException e) { + return FormError( + errorCode: int.tryParse(e.code) ?? -1, + message: e.message ?? '', + ); + } + + /// Free platform resources associated with the [ConsentForm]. + Future disposeConsentForm(ConsentForm consentForm) { + return _methodChannel.invokeMethod( + 'ConsentForm#dispose', + {'consentForm': consentForm}, + ); + } +} diff --git a/mih_ui/android/build/ios/SourcePackages/google_mobile_ads-8.0.0/lib/src/ump/user_messaging_codec.dart b/mih_ui/android/build/ios/SourcePackages/google_mobile_ads-8.0.0/lib/src/ump/user_messaging_codec.dart new file mode 100644 index 00000000..f81a5250 --- /dev/null +++ b/mih_ui/android/build/ios/SourcePackages/google_mobile_ads-8.0.0/lib/src/ump/user_messaging_codec.dart @@ -0,0 +1,88 @@ +// Copyright 2022 Google LLC +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// https://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +import 'package:flutter/services.dart'; +import 'package:google_mobile_ads/src/ump/form_error.dart'; + +import 'consent_form_impl.dart'; +import 'consent_request_parameters.dart'; + +/// Codec for coding and decoding types in the UMP SDK. +class UserMessagingCodec extends StandardMessageCodec { + static const int _valueConsentRequestParameters = 129; + static const int _valueConsentDebugSettings = 130; + static const int _valueConsentForm = 131; + static const int _valueFormError = 132; + + @override + void writeValue(WriteBuffer buffer, dynamic value) { + if (value is ConsentRequestParameters) { + buffer.putUint8(_valueConsentRequestParameters); + writeValue(buffer, value.tagForUnderAgeOfConsent); + writeValue(buffer, value.consentDebugSettings); + } else if (value is ConsentDebugSettings) { + buffer.putUint8(_valueConsentDebugSettings); + writeValue(buffer, value.debugGeography?.index); + writeValue(buffer, value.testIdentifiers); + } else if (value is ConsentFormImpl) { + buffer.putUint8(_valueConsentForm); + writeValue(buffer, value.platformHash); + } else if (value is FormError) { + buffer.putUint8(_valueFormError); + writeValue(buffer, value.errorCode); + writeValue(buffer, value.message); + } else { + super.writeValue(buffer, value); + } + } + + @override + dynamic readValueOfType(dynamic type, ReadBuffer buffer) { + switch (type) { + case _valueConsentRequestParameters: + bool? tfuac = readValueOfType(buffer.getUint8(), buffer); + ConsentDebugSettings? debugSettings = readValueOfType( + buffer.getUint8(), + buffer, + ); + return ConsentRequestParameters( + tagForUnderAgeOfConsent: tfuac, + consentDebugSettings: debugSettings, + ); + case _valueConsentDebugSettings: + int? debugGeographyInt = readValueOfType(buffer.getUint8(), buffer); + DebugGeography? debugGeography; + if (debugGeographyInt != null) { + debugGeography = DebugGeography.values[debugGeographyInt]; + } + List? testIds = readValueOfType( + buffer.getUint8(), + buffer, + )?.cast(); + return ConsentDebugSettings( + debugGeography: debugGeography, + testIdentifiers: testIds, + ); + case _valueConsentForm: + final int hashCode = readValueOfType(buffer.getUint8(), buffer); + return ConsentFormImpl(hashCode); + case _valueFormError: + final int errorCode = readValueOfType(buffer.getUint8(), buffer); + final String errorMessage = readValueOfType(buffer.getUint8(), buffer); + return FormError(errorCode: errorCode, message: errorMessage); + default: + return super.readValueOfType(type, buffer); + } + } +} diff --git a/mih_ui/android/build/ios/SourcePackages/google_mobile_ads-8.0.0/lib/src/webview_controller_util.dart b/mih_ui/android/build/ios/SourcePackages/google_mobile_ads-8.0.0/lib/src/webview_controller_util.dart new file mode 100644 index 00000000..d843fc7f --- /dev/null +++ b/mih_ui/android/build/ios/SourcePackages/google_mobile_ads-8.0.0/lib/src/webview_controller_util.dart @@ -0,0 +1,35 @@ +// Copyright 2023 Google LLC +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// https://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +import 'package:webview_flutter/webview_flutter.dart'; +import 'package:webview_flutter_android/webview_flutter_android.dart'; +import 'package:webview_flutter_wkwebview/webview_flutter_wkwebview.dart'; + +/// Util class for `WebViewController`. +class WebViewControllerUtil { + /// Default constructor. + const WebViewControllerUtil(); + + /// Returns the identifier for the underlying webview. + int webViewIdentifier(WebViewController controller) { + if (WebViewPlatform.instance is AndroidWebViewPlatform) { + return (controller.platform as AndroidWebViewController) + .webViewIdentifier; + } else if (WebViewPlatform.instance is WebKitWebViewPlatform) { + return (controller.platform as WebKitWebViewController).webViewIdentifier; + } else { + throw UnsupportedError('This method only supports Android and iOS.'); + } + } +} diff --git a/mih_ui/android/build/ios/SourcePackages/google_mobile_ads-8.0.0/pubspec.yaml b/mih_ui/android/build/ios/SourcePackages/google_mobile_ads-8.0.0/pubspec.yaml new file mode 100644 index 00000000..2dd66048 --- /dev/null +++ b/mih_ui/android/build/ios/SourcePackages/google_mobile_ads-8.0.0/pubspec.yaml @@ -0,0 +1,52 @@ +# Copyright 2021 Google LLC +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# https://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +name: google_mobile_ads +version: 8.0.0 +description: Flutter plugin for Google Mobile Ads, supporting + banner, interstitial (full-screen), rewarded and native ads +repository: https://github.com/googleads/googleads-mobile-flutter/tree/main/packages/google_mobile_ads + +flutter: + plugin: + platforms: + android: + package: io.flutter.plugins.googlemobileads + pluginClass: GoogleMobileAdsPlugin + ios: + pluginClass: FLTGoogleMobileAdsPlugin + +dependencies: + meta: ^1.16.0 + flutter: + sdk: flutter + webview_flutter_android: ^4.10.9 + webview_flutter_wkwebview: ^3.23.4 + webview_flutter: ^4.10.0 + +dev_dependencies: +# e2e: ^0.7.0 + flutter_driver: + sdk: flutter + mockito: ^5.4.5 + build_runner: ^2.4.15 + flutter_lints: ^6.0.0 + flutter_test: + sdk: flutter + webview_flutter_platform_interface: ^2.10.0 + + +environment: + sdk: ">=3.10.0 <4.0.0" + flutter: ">=3.38.1" diff --git a/mih_ui/android/build/ios/SourcePackages/google_mobile_ads-8.0.0/test/ad_containers_test.dart b/mih_ui/android/build/ios/SourcePackages/google_mobile_ads-8.0.0/test/ad_containers_test.dart new file mode 100644 index 00000000..fa8dd0c0 --- /dev/null +++ b/mih_ui/android/build/ios/SourcePackages/google_mobile_ads-8.0.0/test/ad_containers_test.dart @@ -0,0 +1,1573 @@ +// Copyright 2021 Google LLC +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// https://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +import 'dart:async'; + +import 'package:flutter/foundation.dart'; +import 'package:flutter/material.dart'; +import 'package:google_mobile_ads/src/ad_instance_manager.dart'; +import 'package:google_mobile_ads/google_mobile_ads.dart'; +import 'package:flutter_test/flutter_test.dart'; +import 'package:flutter/services.dart'; + +Future handlePlatformMessage(ByteData? data) async { + await TestDefaultBinaryMessengerBinding.instance.defaultBinaryMessenger + .handlePlatformMessage( + 'plugins.flutter.io/google_mobile_ads', + data, + (data) {}, + ); +} + +// ignore_for_file: deprecated_member_use_from_same_package +void main() { + TestWidgetsFlutterBinding.ensureInitialized(); + + group('GoogleMobileAds', () { + final List log = []; + final AdMessageCodec codec = AdMessageCodec(); + + setUp(() async { + log.clear(); + instanceManager = AdInstanceManager( + 'plugins.flutter.io/google_mobile_ads', + ); + TestDefaultBinaryMessengerBinding.instance.defaultBinaryMessenger + .setMockMethodCallHandler(instanceManager.channel, ( + MethodCall methodCall, + ) async { + log.add(methodCall); + switch (methodCall.method) { + case 'MobileAds#updateRequestConfiguration': + case 'MobileAds#setSameAppKeyEnabled': + case 'setImmersiveMode': + case 'loadBannerAd': + case 'loadNativeAd': + case 'showAdWithoutView': + case 'disposeAd': + case 'loadRewardedAd': + case 'loadInterstitialAd': + case 'loadAdManagerInterstitialAd': + case 'loadAdManagerBannerAd': + case 'setServerSideVerificationOptions': + return Future.value(); + case 'getAdSize': + return Future.value(AdSize.banner); + default: + assert(false); + return null; + } + }); + }); + + test('updateRequestConfiguration', () async { + final RequestConfiguration requestConfiguration = RequestConfiguration( + maxAdContentRating: MaxAdContentRating.ma, + tagForChildDirectedTreatment: TagForChildDirectedTreatment.yes, + tagForUnderAgeOfConsent: TagForUnderAgeOfConsent.yes, + testDeviceIds: ['test-device-id'], + ); + await instanceManager.updateRequestConfiguration(requestConfiguration); + expect(log, [ + isMethodCall( + 'MobileAds#updateRequestConfiguration', + arguments: { + 'maxAdContentRating': MaxAdContentRating.ma, + 'tagForChildDirectedTreatment': TagForChildDirectedTreatment.yes, + 'tagForUnderAgeOfConsent': TagForUnderAgeOfConsent.yes, + 'testDeviceIds': ['test-device-id'], + }, + ), + ]); + }); + + test('setSameAppKeyEnabled', () async { + await instanceManager.setSameAppKeyEnabled(true); + + expect(log, [ + isMethodCall( + 'MobileAds#setSameAppKeyEnabled', + arguments: {'isEnabled': true}, + ), + ]); + + await instanceManager.setSameAppKeyEnabled(false); + + expect(log, [ + isMethodCall( + 'MobileAds#setSameAppKeyEnabled', + arguments: {'isEnabled': true}, + ), + isMethodCall( + 'MobileAds#setSameAppKeyEnabled', + arguments: {'isEnabled': false}, + ), + ]); + }); + + test('load rewarded ad and set immersive mode and ssv', () async { + RewardedAd? rewarded; + AdRequest request = AdRequest(); + await RewardedAd.load( + adUnitId: 'test-ad-unit', + request: request, + rewardedAdLoadCallback: RewardedAdLoadCallback( + onAdLoaded: (ad) { + rewarded = ad; + }, + onAdFailedToLoad: (error) => null, + ), + ); + + RewardedAd createdAd = instanceManager.adFor(0) as RewardedAd; + (createdAd).rewardedAdLoadCallback.onAdLoaded(createdAd); + + expect(log, [ + isMethodCall( + 'loadRewardedAd', + arguments: { + 'adId': 0, + 'adUnitId': 'test-ad-unit', + 'request': request, + 'adManagerRequest': null, + }, + ), + ]); + + expect(instanceManager.adFor(0), isNotNull); + expect(rewarded, createdAd); + + // Set immersive mode + log.clear(); + await createdAd.setImmersiveMode(true); + expect(log, [ + isMethodCall( + 'setImmersiveMode', + arguments: {'adId': 0, 'immersiveModeEnabled': true}, + ), + ]); + + // Set ssv + log.clear(); + final ssv = ServerSideVerificationOptions(); + await createdAd.setServerSideOptions(ssv); + expect(log, [ + isMethodCall( + 'setServerSideVerificationOptions', + arguments: {'adId': 0, 'serverSideVerificationOptions': ssv}, + ), + ]); + }); + + test('load interstitial ad and set immersive mode', () async { + InterstitialAd? interstitial; + await InterstitialAd.load( + adUnitId: 'test-ad-unit', + request: AdRequest(), + adLoadCallback: InterstitialAdLoadCallback( + onAdLoaded: (ad) { + interstitial = ad; + }, + onAdFailedToLoad: (error) => null, + ), + ); + + InterstitialAd createdAd = (instanceManager.adFor(0) as InterstitialAd); + (createdAd).adLoadCallback.onAdLoaded(createdAd); + + expect(log, [ + isMethodCall( + 'loadInterstitialAd', + arguments: { + 'adId': 0, + 'adUnitId': 'test-ad-unit', + 'request': interstitial!.request, + }, + ), + ]); + + expect(instanceManager.adFor(0), isNotNull); + + log.clear(); + await createdAd.setImmersiveMode(false); + expect(log, [ + isMethodCall( + 'setImmersiveMode', + arguments: {'adId': 0, 'immersiveModeEnabled': false}, + ), + ]); + }); + + test('load ad manager interstitial and set immersive mode', () async { + AdManagerInterstitialAd? interstitial; + await AdManagerInterstitialAd.load( + adUnitId: 'test-id', + request: AdManagerAdRequest(), + adLoadCallback: AdManagerInterstitialAdLoadCallback( + onAdLoaded: (ad) { + interstitial = ad; + }, + onAdFailedToLoad: (error) => null, + ), + ); + + AdManagerInterstitialAd createdAd = + (instanceManager.adFor(0) as AdManagerInterstitialAd); + (createdAd).adLoadCallback.onAdLoaded(createdAd); + + expect(log, [ + isMethodCall( + 'loadAdManagerInterstitialAd', + arguments: { + 'adId': 0, + 'adUnitId': 'test-id', + 'request': interstitial!.request, + }, + ), + ]); + + expect(instanceManager.adFor(0), isNotNull); + + log.clear(); + await createdAd.setImmersiveMode(true); + expect(log, [ + isMethodCall( + 'setImmersiveMode', + arguments: {'adId': 0, 'immersiveModeEnabled': true}, + ), + ]); + }); + + test('load native', () async { + final Map options = {'a': 1, 'b': 2}; + final NativeAdOptions nativeAdOptions = NativeAdOptions( + adChoicesPlacement: AdChoicesPlacement.bottomLeftCorner, + mediaAspectRatio: MediaAspectRatio.any, + videoOptions: VideoOptions( + clickToExpandRequested: true, + customControlsRequested: true, + startMuted: true, + ), + requestCustomMuteThisAd: false, + shouldRequestMultipleImages: true, + shouldReturnUrlsForImageAssets: false, + ); + final NativeAd native = NativeAd( + adUnitId: 'test-ad-unit', + factoryId: '0', + customOptions: options, + listener: NativeAdListener(), + request: AdRequest(), + nativeAdOptions: nativeAdOptions, + ); + + await native.load(); + expect(log, [ + isMethodCall( + 'loadNativeAd', + arguments: { + 'adId': 0, + 'adUnitId': 'test-ad-unit', + 'request': native.request, + 'adManagerRequest': null, + 'factoryId': '0', + 'nativeAdOptions': nativeAdOptions, + 'customOptions': options, + 'nativeTemplateStyle': null, + }, + ), + ]); + + expect(instanceManager.adFor(0), isNotNull); + }); + + test('load native with $AdManagerAdRequest', () async { + final Map options = {'a': 1, 'b': 2}; + final NativeAd native = NativeAd.fromAdManagerRequest( + adUnitId: 'test-id', + factoryId: '0', + customOptions: options, + listener: NativeAdListener(), + adManagerRequest: AdManagerAdRequest(), + nativeTemplateStyle: NativeTemplateStyle( + templateType: TemplateType.medium, + ), + ); + + await native.load(); + expect(log, [ + isMethodCall( + 'loadNativeAd', + arguments: { + 'adId': 0, + 'adUnitId': 'test-id', + 'request': null, + 'adManagerRequest': native.adManagerRequest, + 'factoryId': '0', + 'nativeAdOptions': null, + 'customOptions': options, + 'nativeTemplateStyle': native.nativeTemplateStyle, + }, + ), + ]); + + expect(instanceManager.adFor(0), isNotNull); + }); + + testWidgets('build ad widget iOS', (WidgetTester tester) async { + debugDefaultTargetPlatformOverride = TargetPlatform.iOS; + final NativeAd native = NativeAd( + adUnitId: 'test-ad-unit', + factoryId: '0', + listener: NativeAdListener(), + request: AdRequest(), + ); + + await native.load(); + + await tester.pumpWidget( + MaterialApp( + home: Material( + child: SingleChildScrollView( + child: Column( + key: UniqueKey(), + children: [ + SizedBox.fromSize(size: Size(200, 1000)), + Container( + height: 200, + width: 200, + child: AdWidget(ad: native), + ), + ], + ), + ), + ), + ), + ); + await tester.pumpAndSettle(); + + final uiKitView = tester.widget(find.byType(UiKitView)); + expect(uiKitView, isNotNull); + + await native.dispose(); + debugDefaultTargetPlatformOverride = null; + }); + + testWidgets('warns when the widget is reused', (WidgetTester tester) async { + final NativeAd ad = NativeAd( + adUnitId: 'test-ad-unit', + factoryId: '0', + listener: NativeAdListener(), + request: AdRequest(), + ); + + await ad.load(); + + final AdWidget widget = AdWidget(ad: ad); + try { + await tester.pumpWidget( + Directionality( + textDirection: TextDirection.ltr, + child: SizedBox( + width: 100, + height: 100, + child: Stack(children: [widget, widget]), + ), + ), + ); + } finally { + dynamic exception = tester.takeException(); + expect(exception, isA()); + expect( + (exception as FlutterError).toStringDeep(), + 'FlutterError\n' + ' This AdWidget is already in the Widget tree\n' + ' If you placed this AdWidget in a list, make sure you create a new\n' + ' instance in the builder function with a unique ad object.\n' + ' Make sure you are not using the same ad object in more than one\n' + ' AdWidget.\n' + '', + ); + } + }); + + testWidgets( + 'ad objects can be reused if the widget holding the object is disposed', + (WidgetTester tester) async { + final NativeAd ad = NativeAd( + adUnitId: 'test-ad-unit', + factoryId: '0', + listener: NativeAdListener(), + request: AdRequest(), + ); + await ad.load(); + final AdWidget widget = AdWidget(ad: ad); + try { + await tester.pumpWidget( + Directionality( + textDirection: TextDirection.ltr, + child: SizedBox(width: 100, height: 100, child: widget), + ), + ); + + await tester.pumpWidget(Container()); + + await tester.pumpWidget( + Directionality( + textDirection: TextDirection.ltr, + child: SizedBox(width: 100, height: 100, child: widget), + ), + ); + } finally { + expect(tester.takeException(), isNull); + } + }, + ); + + test('load show rewarded', () async { + RewardedAd? rewarded; + AdRequest request = AdRequest(); + await RewardedAd.load( + adUnitId: 'test-ad-unit', + request: request, + rewardedAdLoadCallback: RewardedAdLoadCallback( + onAdLoaded: (ad) { + rewarded = ad; + }, + onAdFailedToLoad: (error) => null, + ), + ); + + RewardedAd createdAd = instanceManager.adFor(0) as RewardedAd; + (createdAd).rewardedAdLoadCallback.onAdLoaded(createdAd); + + expect(log, [ + isMethodCall( + 'loadRewardedAd', + arguments: { + 'adId': 0, + 'adUnitId': 'test-ad-unit', + 'request': request, + 'adManagerRequest': null, + }, + ), + ]); + + expect(instanceManager.adFor(0), isNotNull); + expect(rewarded, createdAd); + + log.clear(); + await rewarded!.show(onUserEarnedReward: (ad, reward) => null); + expect(log, [ + isMethodCall( + 'showAdWithoutView', + arguments: {'adId': 0}, + ), + ]); + }); + + test('load show rewarded with $AdManagerAdRequest', () async { + RewardedAd? rewarded; + AdManagerAdRequest request = AdManagerAdRequest(); + await RewardedAd.loadWithAdManagerAdRequest( + adUnitId: 'test-ad-unit', + adManagerRequest: request, + rewardedAdLoadCallback: RewardedAdLoadCallback( + onAdLoaded: (ad) { + rewarded = ad; + }, + onAdFailedToLoad: (error) => null, + ), + ); + + RewardedAd createdAd = instanceManager.adFor(0) as RewardedAd; + (createdAd).rewardedAdLoadCallback.onAdLoaded(createdAd); + + expect(log, [ + isMethodCall( + 'loadRewardedAd', + arguments: { + 'adId': 0, + 'adUnitId': 'test-ad-unit', + 'request': null, + 'adManagerRequest': request, + }, + ), + ]); + + expect(instanceManager.adFor(0), isNotNull); + + log.clear(); + await rewarded!.show(onUserEarnedReward: (ad, reward) => null); + expect(log, [ + isMethodCall( + 'showAdWithoutView', + arguments: {'adId': 0}, + ), + ]); + }); + + test('load show interstitial', () async { + InterstitialAd? interstitial; + await InterstitialAd.load( + adUnitId: 'test-ad-unit', + request: AdRequest(), + adLoadCallback: InterstitialAdLoadCallback( + onAdLoaded: (ad) { + interstitial = ad; + }, + onAdFailedToLoad: (error) => null, + ), + ); + + InterstitialAd createdAd = (instanceManager.adFor(0) as InterstitialAd); + (createdAd).adLoadCallback.onAdLoaded(createdAd); + + expect(log, [ + isMethodCall( + 'loadInterstitialAd', + arguments: { + 'adId': 0, + 'adUnitId': 'test-ad-unit', + 'request': interstitial!.request, + }, + ), + ]); + + expect(instanceManager.adFor(0), isNotNull); + + log.clear(); + await interstitial!.show(); + expect(log, [ + isMethodCall( + 'showAdWithoutView', + arguments: {'adId': 0}, + ), + ]); + }); + + test('load show ad manager interstitial', () async { + AdManagerInterstitialAd? interstitial; + await AdManagerInterstitialAd.load( + adUnitId: 'test-id', + request: AdManagerAdRequest(), + adLoadCallback: AdManagerInterstitialAdLoadCallback( + onAdLoaded: (ad) { + interstitial = ad; + }, + onAdFailedToLoad: (error) => null, + ), + ); + + AdManagerInterstitialAd createdAd = + (instanceManager.adFor(0) as AdManagerInterstitialAd); + (createdAd).adLoadCallback.onAdLoaded(createdAd); + + expect(log, [ + isMethodCall( + 'loadAdManagerInterstitialAd', + arguments: { + 'adId': 0, + 'adUnitId': 'test-id', + 'request': interstitial!.request, + }, + ), + ]); + + expect(instanceManager.adFor(0), isNotNull); + + log.clear(); + await interstitial!.show(); + expect(log, [ + isMethodCall( + 'showAdWithoutView', + arguments: {'adId': 0}, + ), + ]); + }); + + test('onAdFailedToLoad interstitial', () async { + final Completer resultsCompleter = Completer(); + final AdRequest request = AdRequest(); + await InterstitialAd.load( + adUnitId: 'test-ad-unit', + request: request, + adLoadCallback: InterstitialAdLoadCallback( + onAdLoaded: (ad) => null, + onAdFailedToLoad: (error) => resultsCompleter.complete(error), + ), + ); + + expect(log, [ + isMethodCall( + 'loadInterstitialAd', + arguments: { + 'adId': 0, + 'adUnitId': 'test-ad-unit', + 'request': request, + }, + ), + ]); + + expect(instanceManager.adFor(0), isNotNull); + + // Simulate onAdFailedToLoad. + AdError adError = AdError(1, 'domain', 'error-message'); + AdapterResponseInfo adapterResponseInfo = AdapterResponseInfo( + adapterClassName: 'adapter-name', + latencyMillis: 500, + description: 'message', + adUnitMapping: {'key': 'value'}, + adError: adError, + adSourceName: 'adSourceName', + adSourceId: 'adSourceId', + adSourceInstanceName: 'adSourceInstanceName', + adSourceInstanceId: 'adSourceInstanceId', + ); + + List adapterResponses = [adapterResponseInfo]; + ResponseInfo responseInfo = ResponseInfo( + responseId: 'id', + mediationAdapterClassName: 'className', + adapterResponses: adapterResponses, + responseExtras: {'key1': 'value1'}, + ); + + final MethodCall methodCall = MethodCall('onAdEvent', { + 'adId': 0, + 'eventName': 'onAdFailedToLoad', + 'loadAdError': LoadAdError(1, 'domain', 'message', responseInfo), + }); + + final ByteData data = instanceManager.channel.codec.encodeMethodCall( + methodCall, + ); + + await handlePlatformMessage(data); + + // The ad reference should be freed when load failure occurs. + expect(instanceManager.adFor(0), isNull); + + // Check that load error matches. + final LoadAdError result = await resultsCompleter.future; + expect(result.code, 1); + expect(result.domain, 'domain'); + expect(result.message, 'message'); + expect(result.responseInfo!.responseId, responseInfo.responseId); + expect( + result.responseInfo!.mediationAdapterClassName, + responseInfo.mediationAdapterClassName, + ); + expect(result.responseInfo!.responseExtras, responseInfo.responseExtras); + List responses = + result.responseInfo!.adapterResponses!; + expect(responses.first.adapterClassName, 'adapter-name'); + expect(responses.first.latencyMillis, 500); + expect(responses.first.description, 'message'); + expect(responses.first.adUnitMapping, {'key': 'value'}); + expect(responses.first.adError!.code, 1); + expect(responses.first.adError!.message, 'error-message'); + expect(responses.first.adError!.domain, 'domain'); + }); + + test('onAdFailedToLoad ad manager interstitial', () async { + final Completer resultsCompleter = Completer(); + final AdManagerAdRequest request = AdManagerAdRequest(); + await AdManagerInterstitialAd.load( + adUnitId: 'test-ad-unit', + request: request, + adLoadCallback: AdManagerInterstitialAdLoadCallback( + onAdLoaded: (ad) => null, + onAdFailedToLoad: (error) => resultsCompleter.complete(error), + ), + ); + + expect(log, [ + isMethodCall( + 'loadAdManagerInterstitialAd', + arguments: { + 'adId': 0, + 'adUnitId': 'test-ad-unit', + 'request': request, + }, + ), + ]); + + expect(instanceManager.adFor(0), isNotNull); + + // Simulate onAdFailedToLoad. + AdError adError = AdError(1, 'domain', 'error-message'); + AdapterResponseInfo adapterResponseInfo = AdapterResponseInfo( + adapterClassName: 'adapter-name', + latencyMillis: 500, + description: 'message', + adUnitMapping: {'key': 'value'}, + adError: adError, + adSourceName: 'adSourceName', + adSourceId: 'adSourceId', + adSourceInstanceName: 'adSourceInstanceName', + adSourceInstanceId: 'adSourceInstanceId', + ); + + List adapterResponses = [adapterResponseInfo]; + ResponseInfo responseInfo = ResponseInfo( + responseId: 'id', + mediationAdapterClassName: 'className', + adapterResponses: adapterResponses, + responseExtras: {}, + ); + + final MethodCall methodCall = MethodCall('onAdEvent', { + 'adId': 0, + 'eventName': 'onAdFailedToLoad', + 'loadAdError': LoadAdError(1, 'domain', 'message', responseInfo), + }); + + final ByteData data = instanceManager.channel.codec.encodeMethodCall( + methodCall, + ); + await handlePlatformMessage(data); + // The ad reference should be freed when load failure occurs. + expect(instanceManager.adFor(0), isNull); + + // Check that load error matches. + final LoadAdError result = await resultsCompleter.future; + expect(result.code, 1); + expect(result.domain, 'domain'); + expect(result.message, 'message'); + expect(result.responseInfo!.responseId, responseInfo.responseId); + expect( + result.responseInfo!.mediationAdapterClassName, + responseInfo.mediationAdapterClassName, + ); + expect(result.responseInfo!.responseExtras, responseInfo.responseExtras); + List responses = + result.responseInfo!.adapterResponses!; + expect(responses.first.adapterClassName, 'adapter-name'); + expect(responses.first.latencyMillis, 500); + expect(responses.first.description, 'message'); + expect(responses.first.adUnitMapping, {'key': 'value'}); + expect(responses.first.adError!.code, 1); + expect(responses.first.adError!.message, 'error-message'); + expect(responses.first.adError!.domain, 'domain'); + }); + + test('onAdFailedToLoad rewarded', () async { + final Completer resultsCompleter = Completer(); + final AdRequest request = AdRequest(); + await RewardedAd.load( + adUnitId: 'test-ad-unit', + request: request, + rewardedAdLoadCallback: RewardedAdLoadCallback( + onAdLoaded: (ad) => null, + onAdFailedToLoad: (error) => resultsCompleter.complete(error), + ), + ); + + expect(log, [ + isMethodCall( + 'loadRewardedAd', + arguments: { + 'adId': 0, + 'adUnitId': 'test-ad-unit', + 'request': request, + 'adManagerRequest': null, + }, + ), + ]); + + expect(instanceManager.adFor(0), isNotNull); + + // Simulate onAdFailedToLoad. + AdError adError = AdError(1, 'domain', 'error-message'); + AdapterResponseInfo adapterResponseInfo = AdapterResponseInfo( + adapterClassName: 'adapter-name', + latencyMillis: 500, + description: 'message', + adUnitMapping: {'key': 'value'}, + adError: adError, + adSourceName: 'adSourceName', + adSourceId: 'adSourceId', + adSourceInstanceName: 'adSourceInstanceName', + adSourceInstanceId: 'adSourceInstanceId', + ); + + List adapterResponses = [adapterResponseInfo]; + ResponseInfo responseInfo = ResponseInfo( + responseId: 'id', + mediationAdapterClassName: 'className', + adapterResponses: adapterResponses, + responseExtras: {'key1': 1234}, + ); + + final MethodCall methodCall = MethodCall('onAdEvent', { + 'adId': 0, + 'eventName': 'onAdFailedToLoad', + 'loadAdError': LoadAdError(1, 'domain', 'message', responseInfo), + }); + + final ByteData data = instanceManager.channel.codec.encodeMethodCall( + methodCall, + ); + + await handlePlatformMessage(data); + + // The ad reference should be freed when load failure occurs. + expect(instanceManager.adFor(0), isNull); + + // Check that load error matches. + final LoadAdError result = await resultsCompleter.future; + expect(result.code, 1); + expect(result.domain, 'domain'); + expect(result.message, 'message'); + expect(result.responseInfo!.responseId, responseInfo.responseId); + expect( + result.responseInfo!.mediationAdapterClassName, + responseInfo.mediationAdapterClassName, + ); + expect(result.responseInfo!.responseExtras, responseInfo.responseExtras); + List responses = + result.responseInfo!.adapterResponses!; + expect(responses.first.adapterClassName, 'adapter-name'); + expect(responses.first.latencyMillis, 500); + expect(responses.first.description, 'message'); + expect(responses.first.adUnitMapping, {'key': 'value'}); + expect(responses.first.adError!.code, 1); + expect(responses.first.adError!.message, 'error-message'); + expect(responses.first.adError!.domain, 'domain'); + }); + + test('onNativeAdImpression', () async { + final Completer adEventCompleter = Completer(); + + final NativeAd native = NativeAd( + adUnitId: 'test-ad-unit', + factoryId: 'testId', + listener: NativeAdListener( + onAdImpression: (Ad ad) => adEventCompleter.complete(ad), + ), + request: AdRequest(), + ); + + await native.load(); + + final MethodCall methodCall = MethodCall('onAdEvent', { + 'adId': 0, + 'eventName': 'onAdImpression', + }); + + final ByteData data = instanceManager.channel.codec.encodeMethodCall( + methodCall, + ); + + await handlePlatformMessage(data); + + expect(adEventCompleter.future, completion(native)); + }); + + test('AdapterResponseInfo encoding', () async { + var testAdapterResponseInfo = (adId) async { + final Completer loadCompleter = Completer(); + + AdRequest request = AdRequest(); + await RewardedAd.load( + adUnitId: 'test-ad-unit', + request: request, + rewardedAdLoadCallback: RewardedAdLoadCallback( + onAdLoaded: (ad) { + loadCompleter.complete(ad); + }, + onAdFailedToLoad: (error) => null, + ), + ); + + AdapterResponseInfo adapterResponseInfo = AdapterResponseInfo( + adapterClassName: 'adapter-name', + latencyMillis: 500, + description: 'message', + adUnitMapping: {'key': 'value'}, + adSourceName: 'adSourceName', + adSourceId: 'adSourceId', + adSourceInstanceName: 'adSourceInstanceName', + adSourceInstanceId: 'adSourceInstanceId', + ); + final loadedAdapterResponseInfo = AdapterResponseInfo( + adapterClassName: 'adapter-name', + latencyMillis: 500, + description: 'message', + adUnitMapping: {'key': 'value'}, + adSourceName: 'adSourceName', + adSourceId: 'adSourceId', + adSourceInstanceName: 'adSourceInstanceName', + adSourceInstanceId: 'adSourceInstanceId', + ); + + final responseInfo = ResponseInfo( + mediationAdapterClassName: 'adapter', + adapterResponses: [adapterResponseInfo], + responseId: 'id', + loadedAdapterResponseInfo: loadedAdapterResponseInfo, + responseExtras: {}, + ); + final methodCall = MethodCall('onAdEvent', { + 'adId': adId, + 'eventName': 'onAdLoaded', + 'responseInfo': responseInfo, + }); + + ByteData data = instanceManager.channel.codec.encodeMethodCall( + methodCall, + ); + + await handlePlatformMessage(data); + final ad = await loadCompleter.future; + + expect(ad.responseInfo!.mediationAdapterClassName!, 'adapter'); + expect(ad.responseInfo!.responseId!, 'id'); + expect(ad.responseInfo!.responseExtras, responseInfo.responseExtras); + final adapterResponse = ad.responseInfo!.adapterResponses!.first; + expect(adapterResponse.adapterClassName, 'adapter-name'); + expect(adapterResponse.latencyMillis, 500); + expect(adapterResponse.description, 'message'); + expect(adapterResponse.adUnitMapping, {'key': 'value'}); + expect(adapterResponse.adSourceName, 'adSourceName'); + expect(adapterResponse.adSourceId, 'adSourceId'); + expect(adapterResponse.adSourceInstanceName, 'adSourceInstanceName'); + expect(adapterResponse.adSourceInstanceId, 'adSourceInstanceId'); + final loadedResponse = ad.responseInfo!.loadedAdapterResponseInfo!; + expect(loadedResponse.adapterClassName, 'adapter-name'); + expect(loadedResponse.latencyMillis, 500); + expect(loadedResponse.description, 'message'); + expect(loadedResponse.adUnitMapping, {'key': 'value'}); + expect(loadedResponse.adSourceName, 'adSourceName'); + expect(loadedResponse.adSourceId, 'adSourceId'); + expect(loadedResponse.adSourceInstanceName, 'adSourceInstanceName'); + expect(loadedResponse.adSourceInstanceId, 'adSourceInstanceId'); + }; + debugDefaultTargetPlatformOverride = TargetPlatform.iOS; + await testAdapterResponseInfo(0); + + debugDefaultTargetPlatformOverride = TargetPlatform.android; + await testAdapterResponseInfo(1); + }); + + test('onRewardedAdUserEarnedReward', () async { + final Completer> resultCompleter = + Completer>(); + + RewardedAd? rewarded; + await RewardedAd.load( + adUnitId: 'test-ad-unit', + request: AdRequest(), + rewardedAdLoadCallback: RewardedAdLoadCallback( + onAdLoaded: (ad) { + rewarded = ad; + }, + onAdFailedToLoad: (error) => null, + ), + ); + + RewardedAd createdAd = instanceManager.adFor(0) as RewardedAd; + createdAd.rewardedAdLoadCallback.onAdLoaded(createdAd); + // Reward callback is now set when you call show. + await rewarded!.show( + onUserEarnedReward: (ad, item) => + resultCompleter.complete([ad, item]), + ); + + final MethodCall methodCall = MethodCall('onAdEvent', { + 'adId': 0, + 'eventName': 'onRewardedAdUserEarnedReward', + 'rewardItem': RewardItem(1, 'one'), + }); + + final ByteData data = instanceManager.channel.codec.encodeMethodCall( + methodCall, + ); + + await handlePlatformMessage(data); + + final List result = await resultCompleter.future; + expect(result[0], rewarded!); + expect(result[1].amount, 1); + expect(result[1].type, 'one'); + }); + + test('onPaidEvent', () async { + Completer> resultCompleter = Completer>(); + + final BannerAd banner = BannerAd( + adUnitId: 'test-ad-unit', + size: AdSize.banner, + listener: BannerAdListener( + onPaidEvent: (Ad ad, double value, precision, String currencyCode) => + resultCompleter.complete([ + ad, + value, + precision, + currencyCode, + ]), + ), + request: AdRequest(), + ); + + await banner.load(); + + // Check precision type: unknown + MethodCall methodCall = MethodCall('onAdEvent', { + 'adId': 0, + 'eventName': 'onPaidEvent', + 'valueMicros': 1.2345, + 'precision': 0, + 'currencyCode': 'USD', + }); + + ByteData data = instanceManager.channel.codec.encodeMethodCall( + methodCall, + ); + + await handlePlatformMessage(data); + + List result = await resultCompleter.future; + expect(result[0], banner); + expect(result[1], 1.2345); + expect(result[2], PrecisionType.unknown); + expect(result[3], 'USD'); + + // Unknown precision outside 0-3 range. + resultCompleter = Completer>(); + methodCall = MethodCall('onAdEvent', { + 'adId': 0, + 'eventName': 'onPaidEvent', + 'valueMicros': 1.2345, + 'precision': 9999, + 'currencyCode': 'USD', + }); + data = instanceManager.channel.codec.encodeMethodCall(methodCall); + await handlePlatformMessage( + instanceManager.channel.codec.encodeMethodCall(methodCall), + ); + result = await resultCompleter.future; + expect(result[2], PrecisionType.unknown); + + // Check precision type: estimated. + // Also check that callback is invoked successfully for int valueMicros. + resultCompleter = Completer>(); + methodCall = MethodCall('onAdEvent', { + 'adId': 0, + 'eventName': 'onPaidEvent', + 'valueMicros': 12345, // int + 'precision': 1, + 'currencyCode': 'USD', + }); + data = instanceManager.channel.codec.encodeMethodCall(methodCall); + await handlePlatformMessage( + instanceManager.channel.codec.encodeMethodCall(methodCall), + ); + result = await resultCompleter.future; + expect(result[1], 12345); + expect(result[2], PrecisionType.estimated); + + // Check precision type: publisherProvided. + resultCompleter = Completer>(); + methodCall = MethodCall('onAdEvent', { + 'adId': 0, + 'eventName': 'onPaidEvent', + 'valueMicros': 1.2345, + 'precision': 2, + 'currencyCode': 'USD', + }); + data = instanceManager.channel.codec.encodeMethodCall(methodCall); + await handlePlatformMessage(data); + + result = await resultCompleter.future; + expect(result[2], PrecisionType.publisherProvided); + + // Check precision type: precise. + resultCompleter = Completer>(); + methodCall = MethodCall('onAdEvent', { + 'adId': 0, + 'eventName': 'onPaidEvent', + 'valueMicros': 1.2345, + 'precision': 3, + 'currencyCode': 'USD', + }); + data = instanceManager.channel.codec.encodeMethodCall(methodCall); + await handlePlatformMessage(data); + + result = await resultCompleter.future; + expect(result[2], PrecisionType.precise); + }); + + test('encode/decode AdSize', () async { + final ByteData byteData = codec.encodeMessage(AdSize.banner)!; + expect(codec.decodeMessage(byteData), AdSize.banner); + }); + + test('encode/decode AdRequest Android', () async { + debugDefaultTargetPlatformOverride = TargetPlatform.android; + + final AdRequest adRequest = AdRequest( + keywords: ['1', '2', '3'], + contentUrl: 'contentUrl', + nonPersonalizedAds: false, + neighboringContentUrls: ['url1.com', 'url2.com'], + httpTimeoutMillis: 12345, + mediationExtrasIdentifier: 'identifier', + extras: {'key': 'value'}, + ); + + final AdRequest decodedRequest = AdRequest( + keywords: ['1', '2', '3'], + contentUrl: 'contentUrl', + nonPersonalizedAds: false, + neighboringContentUrls: ['url1.com', 'url2.com'], + httpTimeoutMillis: 12345, + mediationExtrasIdentifier: 'identifier', + extras: {'key': 'value'}, + ); + final ByteData byteData = codec.encodeMessage(adRequest)!; + expect(codec.decodeMessage(byteData), decodedRequest); + }); + + test('encode/decode AdRequest iOS', () async { + debugDefaultTargetPlatformOverride = TargetPlatform.iOS; + + final AdRequest adRequest = AdRequest( + keywords: ['1', '2', '3'], + contentUrl: 'contentUrl', + nonPersonalizedAds: false, + neighboringContentUrls: ['url1.com', 'url2.com'], + httpTimeoutMillis: 12345, + mediationExtrasIdentifier: 'identifier', + extras: {'key': 'value'}, + ); + + final ByteData byteData = codec.encodeMessage(adRequest)!; + AdRequest decoded = codec.decodeMessage(byteData); + expect(decoded.httpTimeoutMillis, null); + expect(decoded.neighboringContentUrls, adRequest.neighboringContentUrls); + expect(decoded.contentUrl, adRequest.contentUrl); + expect(decoded.nonPersonalizedAds, adRequest.nonPersonalizedAds); + expect(decoded.keywords, adRequest.keywords); + expect(decoded.mediationExtrasIdentifier, 'identifier'); + }); + + test('encode/decode $LoadAdError', () async { + final ResponseInfo responseInfo = ResponseInfo( + responseId: 'id', + mediationAdapterClassName: 'class', + adapterResponses: null, + responseExtras: {}, + ); + final ByteData byteData = codec.encodeMessage( + LoadAdError(1, 'domain', 'message', responseInfo), + )!; + final LoadAdError error = codec.decodeMessage(byteData); + expect(error.code, 1); + expect(error.domain, 'domain'); + expect(error.message, 'message'); + expect(error.responseInfo?.responseId, responseInfo.responseId); + expect(error.responseInfo?.responseExtras, responseInfo.responseExtras); + expect( + error.responseInfo?.mediationAdapterClassName, + responseInfo.mediationAdapterClassName, + ); + expect(error.responseInfo?.adapterResponses, null); + }); + + test('encode/decode $RewardItem', () async { + final ByteData byteData = codec.encodeMessage(RewardItem(1, 'type'))!; + + final RewardItem result = codec.decodeMessage(byteData); + expect(result.amount, 1); + expect(result.type, 'type'); + }); + + test('encode/decode $InlineAdaptiveSize', () async { + ByteData byteData = codec.encodeMessage( + AdSize.getCurrentOrientationInlineAdaptiveBannerAdSize(100), + )!; + + InlineAdaptiveSize result = codec.decodeMessage(byteData); + expect(result.orientation, null); + expect(result.width, 100); + expect(result.maxHeight, null); + expect(result.height, 0); + + byteData = codec.encodeMessage( + AdSize.getPortraitInlineAdaptiveBannerAdSize(200), + )!; + + result = codec.decodeMessage(byteData); + expect(result.orientation, Orientation.portrait); + expect(result.width, 200); + expect(result.maxHeight, null); + expect(result.height, 0); + + byteData = codec.encodeMessage( + AdSize.getLandscapeInlineAdaptiveBannerAdSize(20), + )!; + + result = codec.decodeMessage(byteData); + expect(result.orientation, Orientation.landscape); + expect(result.width, 20); + expect(result.maxHeight, null); + expect(result.height, 0); + + byteData = codec.encodeMessage( + AdSize.getInlineAdaptiveBannerAdSize(20, 50), + )!; + + result = codec.decodeMessage(byteData); + expect(result.orientation, null); + expect(result.width, 20); + expect(result.maxHeight, 50); + expect(result.height, 0); + }); + + test('encode/decode $AnchoredAdaptiveBannerAdSize', () async { + final ByteData byteDataPortrait = codec.encodeMessage( + AnchoredAdaptiveBannerAdSize( + Orientation.portrait, + width: 23, + height: 34, + ), + )!; + + final AnchoredAdaptiveBannerAdSize resultPortrait = codec.decodeMessage( + byteDataPortrait, + ); + expect(resultPortrait.orientation, Orientation.portrait); + expect(resultPortrait.width, 23); + expect(resultPortrait.height, -1); + + final ByteData byteDataLandscape = codec.encodeMessage( + AnchoredAdaptiveBannerAdSize( + Orientation.landscape, + width: 34, + height: 23, + ), + )!; + + final AnchoredAdaptiveBannerAdSize resultLandscape = codec.decodeMessage( + byteDataLandscape, + ); + expect(resultLandscape.orientation, Orientation.landscape); + expect(resultLandscape.width, 34); + expect(resultLandscape.height, -1); + + final ByteData byteData = codec.encodeMessage( + AnchoredAdaptiveBannerAdSize(null, width: 45, height: 34), + )!; + + final AnchoredAdaptiveBannerAdSize result = codec.decodeMessage(byteData); + expect(result.orientation, null); + expect(result.width, 45); + expect(result.height, -1); + }); + + test('encode/decode $SmartBannerAdSize', () async { + debugDefaultTargetPlatformOverride = TargetPlatform.iOS; + final ByteData byteData = codec.encodeMessage( + SmartBannerAdSize(Orientation.portrait), + )!; + + final SmartBannerAdSize result = codec.decodeMessage(byteData); + expect(result.orientation, Orientation.portrait); + + debugDefaultTargetPlatformOverride = TargetPlatform.android; + final WriteBuffer expectedBuffer = WriteBuffer(); + expectedBuffer.putUint8(143); + + final WriteBuffer actualBuffer = WriteBuffer(); + codec.writeAdSize(actualBuffer, SmartBannerAdSize(Orientation.portrait)); + expect( + expectedBuffer.done().buffer.asInt8List(), + actualBuffer.done().buffer.asInt8List(), + ); + }); + + test('encode/decode $FluidAdSize', () async { + debugDefaultTargetPlatformOverride = TargetPlatform.iOS; + final ByteData byteData = codec.encodeMessage(FluidAdSize())!; + + final FluidAdSize result = codec.decodeMessage(byteData); + expect(result.width, -3); + expect(result.height, -3); + + debugDefaultTargetPlatformOverride = TargetPlatform.android; + final WriteBuffer expectedBuffer = WriteBuffer(); + expectedBuffer.putUint8(130); + + final WriteBuffer actualBuffer = WriteBuffer(); + codec.writeAdSize(actualBuffer, FluidAdSize()); + expect( + expectedBuffer.done().buffer.asInt8List(), + actualBuffer.done().buffer.asInt8List(), + ); + }); + + test('encode/decode $AdManagerAdRequest Android', () async { + debugDefaultTargetPlatformOverride = TargetPlatform.android; + final AdManagerAdRequest request = AdManagerAdRequest( + keywords: ['who'], + contentUrl: 'dat', + customTargeting: {'boy': 'who'}, + customTargetingLists: >{ + 'him': ['is'], + }, + nonPersonalizedAds: true, + neighboringContentUrls: ['url1.com', 'url2.com'], + httpTimeoutMillis: 5000, + publisherProvidedId: 'test-pub-id', + mediationExtrasIdentifier: 'identifier', + extras: {'key': 'value'}, + ); + final ByteData byteData = codec.encodeMessage(request)!; + + final AdManagerAdRequest decodedRequest = AdManagerAdRequest( + keywords: ['who'], + contentUrl: 'dat', + customTargeting: {'boy': 'who'}, + customTargetingLists: >{ + 'him': ['is'], + }, + nonPersonalizedAds: true, + neighboringContentUrls: ['url1.com', 'url2.com'], + httpTimeoutMillis: 5000, + publisherProvidedId: 'test-pub-id', + mediationExtrasIdentifier: 'identifier', + extras: {'key': 'value'}, + ); + expect(codec.decodeMessage(byteData), decodedRequest); + }); + + test('encode/decode $AdManagerAdRequest iOS', () async { + debugDefaultTargetPlatformOverride = TargetPlatform.iOS; + + final AdManagerAdRequest request = AdManagerAdRequest( + keywords: ['who'], + contentUrl: 'dat', + customTargeting: {'boy': 'who'}, + customTargetingLists: >{ + 'him': ['is'], + }, + nonPersonalizedAds: true, + neighboringContentUrls: ['url1.com', 'url2.com'], + httpTimeoutMillis: 5000, + publisherProvidedId: 'test-pub-id', + mediationExtrasIdentifier: 'identifier', + extras: {'key': 'value'}, + ); + + final ByteData byteData = codec.encodeMessage(request)!; + AdManagerAdRequest decoded = codec.decodeMessage(byteData); + expect(decoded.httpTimeoutMillis, null); + expect(decoded.neighboringContentUrls, request.neighboringContentUrls); + expect(decoded.contentUrl, request.contentUrl); + expect(decoded.nonPersonalizedAds, request.nonPersonalizedAds); + expect(decoded.keywords, request.keywords); + expect(decoded.publisherProvidedId, request.publisherProvidedId); + expect(decoded.customTargeting, request.customTargeting); + expect(decoded.customTargetingLists, request.customTargetingLists); + expect(decoded.mediationExtrasIdentifier, 'identifier'); + }); + + test('ad click native', () async { + var testNativeClick = (eventName, adId) async { + final Completer adClickCompleter = Completer(); + + final NativeAd native = NativeAd( + adUnitId: 'test-ad-unit', + factoryId: 'testId', + listener: NativeAdListener( + onAdClicked: (ad) => adClickCompleter.complete(ad), + ), + request: AdRequest(), + ); + + await native.load(); + + final MethodCall methodCall = MethodCall( + 'onAdEvent', + {'adId': adId, 'eventName': eventName}, + ); + + final ByteData data = instanceManager.channel.codec.encodeMethodCall( + methodCall, + ); + await handlePlatformMessage(data); + + expect(adClickCompleter.future, completion(native)); + }; + + debugDefaultTargetPlatformOverride = TargetPlatform.iOS; + await testNativeClick('adDidRecordClick', 0); + + debugDefaultTargetPlatformOverride = TargetPlatform.android; + await testNativeClick('onAdClicked', 1); + }); + + test('ad click rewarded', () async { + var testRewardedClick = (eventName, adId) async { + final Completer adClickCompleter = Completer(); + + // Load an ad + RewardedAd? rewarded; + AdRequest request = AdRequest(); + await RewardedAd.load( + adUnitId: 'test-ad-unit', + request: request, + rewardedAdLoadCallback: RewardedAdLoadCallback( + onAdLoaded: (ad) { + rewarded = ad; + ad.fullScreenContentCallback = FullScreenContentCallback( + onAdClicked: (ad) => adClickCompleter.complete(ad), + ); + }, + onAdFailedToLoad: (error) => null, + ), + ); + + MethodCall methodCall = MethodCall('onAdEvent', { + 'adId': adId, + 'eventName': 'onAdLoaded', + }); + + ByteData data = instanceManager.channel.codec.encodeMethodCall( + methodCall, + ); + await handlePlatformMessage(data); + + // Handle adDidRecordClick method call + methodCall = MethodCall('onAdEvent', { + 'adId': adId, + 'eventName': eventName, + }); + + data = instanceManager.channel.codec.encodeMethodCall(methodCall); + await handlePlatformMessage(data); + + expect(adClickCompleter.future, completion(rewarded!)); + }; + + debugDefaultTargetPlatformOverride = TargetPlatform.iOS; + await testRewardedClick('adDidRecordClick', 0); + + debugDefaultTargetPlatformOverride = TargetPlatform.android; + await testRewardedClick('onAdClicked', 1); + }); + + test('ad click interstitial', () async { + var testClick = (eventName, adId) async { + final Completer adClickCompleter = Completer(); + + // Load an ad + InterstitialAd? interstitialAd; + AdRequest request = AdRequest(); + await InterstitialAd.load( + adUnitId: 'test-ad-unit', + request: request, + adLoadCallback: InterstitialAdLoadCallback( + onAdLoaded: (ad) { + interstitialAd = ad; + ad.fullScreenContentCallback = FullScreenContentCallback( + onAdClicked: (ad) => adClickCompleter.complete(ad), + ); + }, + onAdFailedToLoad: (error) => null, + ), + ); + + MethodCall methodCall = MethodCall('onAdEvent', { + 'adId': adId, + 'eventName': 'onAdLoaded', + }); + + ByteData data = instanceManager.channel.codec.encodeMethodCall( + methodCall, + ); + await handlePlatformMessage(data); + + // Handle adDidRecordClick method call + methodCall = MethodCall('onAdEvent', { + 'adId': adId, + 'eventName': eventName, + }); + + data = instanceManager.channel.codec.encodeMethodCall(methodCall); + await handlePlatformMessage(data); + + expect(adClickCompleter.future, completion(interstitialAd!)); + }; + + debugDefaultTargetPlatformOverride = TargetPlatform.iOS; + await testClick('adDidRecordClick', 0); + + debugDefaultTargetPlatformOverride = TargetPlatform.android; + await testClick('onAdClicked', 1); + }); + + test('ad click interstitial', () async { + var testClick = (eventName, adId) async { + final Completer adClickCompleter = Completer(); + + // Load an ad + InterstitialAd? interstitialAd; + AdRequest request = AdRequest(); + await InterstitialAd.load( + adUnitId: 'test-ad-unit', + request: request, + adLoadCallback: InterstitialAdLoadCallback( + onAdLoaded: (ad) { + interstitialAd = ad; + ad.fullScreenContentCallback = FullScreenContentCallback( + onAdClicked: (ad) => adClickCompleter.complete(ad), + ); + }, + onAdFailedToLoad: (error) => null, + ), + ); + + MethodCall methodCall = MethodCall('onAdEvent', { + 'adId': adId, + 'eventName': 'onAdLoaded', + }); + + ByteData data = instanceManager.channel.codec.encodeMethodCall( + methodCall, + ); + await handlePlatformMessage(data); + + // Handle adDidRecordClick method call + methodCall = MethodCall('onAdEvent', { + 'adId': adId, + 'eventName': eventName, + }); + + data = instanceManager.channel.codec.encodeMethodCall(methodCall); + await handlePlatformMessage(data); + + expect(adClickCompleter.future, completion(interstitialAd!)); + }; + + debugDefaultTargetPlatformOverride = TargetPlatform.iOS; + await testClick('adDidRecordClick', 0); + + debugDefaultTargetPlatformOverride = TargetPlatform.android; + await testClick('onAdClicked', 1); + }); + }); +} diff --git a/mih_ui/android/build/ios/SourcePackages/google_mobile_ads-8.0.0/test/admanager_banner_ad_test.dart b/mih_ui/android/build/ios/SourcePackages/google_mobile_ads-8.0.0/test/admanager_banner_ad_test.dart new file mode 100644 index 00000000..b2fdaa14 --- /dev/null +++ b/mih_ui/android/build/ios/SourcePackages/google_mobile_ads-8.0.0/test/admanager_banner_ad_test.dart @@ -0,0 +1,360 @@ +// Copyright 2021 Google LLC +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// https://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +import 'dart:async'; + +import 'package:flutter/foundation.dart'; +import 'package:flutter/services.dart'; +import 'package:flutter_test/flutter_test.dart'; +import 'package:google_mobile_ads/google_mobile_ads.dart'; +import 'package:google_mobile_ads/src/ad_instance_manager.dart'; +import 'test_util.dart'; + +// ignore_for_file: deprecated_member_use_from_same_package +void main() { + TestWidgetsFlutterBinding.ensureInitialized(); + + group('Ad Manager Banner Ad Tests', () { + final List log = []; + + setUp(() async { + log.clear(); + instanceManager = AdInstanceManager( + 'plugins.flutter.io/google_mobile_ads', + ); + + TestDefaultBinaryMessengerBinding.instance.defaultBinaryMessenger + .setMockMethodCallHandler(instanceManager.channel, ( + MethodCall methodCall, + ) async { + log.add(methodCall); + switch (methodCall.method) { + case 'loadAdManagerBannerAd': + case 'disposeAd': + return Future.value(); + default: + assert(false); + return null; + } + }); + }); + + test('android loaded events', () async { + debugDefaultTargetPlatformOverride = TargetPlatform.android; + AdManagerAdRequest request = AdManagerAdRequest(); + + // Check that listener callbacks are invoked + Completer loaded = Completer(); + Completer> failedToLoad = Completer>(); + Completer opened = Completer(); + Completer clicked = Completer(); + Completer impression = Completer(); + Completer closed = Completer(); + Completer> paidEvent = Completer>(); + + AdManagerBannerAdListener bannerListener = AdManagerBannerAdListener( + onAdLoaded: (ad) => loaded.complete(ad), + onAdFailedToLoad: (ad, error) => + failedToLoad.complete([ad, error]), + onAdImpression: (ad) => impression.complete(ad), + onPaidEvent: (ad, value, precision, currency) => + paidEvent.complete([ad, value, precision, currency]), + onAdClicked: (ad) => clicked.complete(ad), + onAdClosed: (ad) => closed.complete(ad), + onAdOpened: (ad) => opened.complete(ad), + ); + + var bannerAd = AdManagerBannerAd( + sizes: [AdSize.banner], + adUnitId: 'ad-unit', + listener: bannerListener, + request: request, + ); + await bannerAd.load(); + + expect(log, [ + isMethodCall( + 'loadAdManagerBannerAd', + arguments: { + 'adId': 0, + 'adUnitId': 'ad-unit', + 'request': request, + 'sizes': [AdSize.banner], + }, + ), + ]); + + // Simulate load callback + await TestUtil.sendAdEvent(0, 'onAdLoaded', instanceManager); + + AdManagerBannerAd createdAd = + instanceManager.adFor(0) as AdManagerBannerAd; + expect(instanceManager.adFor(0), isNotNull); + expect(bannerAd, createdAd); + expect(await loaded.future, bannerAd); + + await TestUtil.sendAdEvent(0, 'onAdImpression', instanceManager); + expect(await impression.future, bannerAd); + + await TestUtil.sendAdEvent(0, 'onAdClicked', instanceManager); + expect(await clicked.future, bannerAd); + + await TestUtil.sendAdEvent(0, 'onAdOpened', instanceManager); + expect(await opened.future, bannerAd); + + await TestUtil.sendAdEvent(0, 'onAdClosed', instanceManager); + expect(await closed.future, bannerAd); + + await TestUtil.sendAdEvent(0, 'onAdClicked', instanceManager); + expect(await clicked.future, bannerAd); + + const paidEventArgs = { + 'valueMicros': 1.2345, + 'precision': 0, + 'currencyCode': 'USD', + }; + await TestUtil.sendAdEvent( + 0, + 'onPaidEvent', + instanceManager, + paidEventArgs, + ); + List paidEventCallback = await paidEvent.future; + expect(paidEventCallback[0], bannerAd); + expect(paidEventCallback[1], 1.2345); + expect(paidEventCallback[2], PrecisionType.unknown); + expect(paidEventCallback[3], 'USD'); + }); + + test('onAdFailedToLoad banner', () async { + var testOnAdFailedToLoad = (adId) async { + final Completer> resultsCompleter = + Completer>(); + + final AdManagerBannerAd banner = AdManagerBannerAd( + adUnitId: 'test-ad-unit', + sizes: [AdSize.banner], + listener: AdManagerBannerAdListener( + onAdFailedToLoad: (Ad ad, LoadAdError error) => + resultsCompleter.complete([ad, error]), + ), + request: AdManagerAdRequest(), + ); + + await banner.load(); + AdError adError = AdError(1, 'domain', 'error-message'); + AdapterResponseInfo adapterResponseInfo = AdapterResponseInfo( + adapterClassName: 'adapter-name', + latencyMillis: 500, + description: 'message', + adUnitMapping: {'key': 'value'}, + adError: adError, + adSourceName: 'adSourceName', + adSourceId: 'adSourceId', + adSourceInstanceName: 'adSourceInstanceName', + adSourceInstanceId: 'adSourceInstanceId', + ); + + List adapterResponses = [adapterResponseInfo]; + ResponseInfo responseInfo = ResponseInfo( + responseId: 'id', + mediationAdapterClassName: 'className', + adapterResponses: adapterResponses, + responseExtras: {'key': 'value'}, + ); + + final MethodCall methodCall = + MethodCall('onAdEvent', { + 'adId': adId, + 'eventName': 'onAdFailedToLoad', + 'loadAdError': LoadAdError(1, 'domain', 'message', responseInfo), + }); + + final ByteData data = instanceManager.channel.codec.encodeMethodCall( + methodCall, + ); + await TestDefaultBinaryMessengerBinding.instance.defaultBinaryMessenger + .handlePlatformMessage( + 'plugins.flutter.io/google_mobile_ads', + data, + (data) {}, + ); + + final List results = await resultsCompleter.future; + expect(results[0], banner); + expect(results[1].code, 1); + expect(results[1].domain, 'domain'); + expect(results[1].message, 'message'); + expect(results[1].responseInfo.responseId, responseInfo.responseId); + expect( + results[1].responseInfo.mediationAdapterClassName, + responseInfo.mediationAdapterClassName, + ); + expect( + results[1].responseInfo.responseExtras, + responseInfo.responseExtras, + ); + List responses = + results[1].responseInfo.adapterResponses; + expect(responses.first.adapterClassName, 'adapter-name'); + expect(responses.first.latencyMillis, 500); + expect(responses.first.description, 'message'); + expect(responses.first.adUnitMapping, {'key': 'value'}); + expect(responses.first.adError!.code, 1); + expect(responses.first.adError!.message, 'error-message'); + expect(responses.first.adError!.domain, 'domain'); + }; + + debugDefaultTargetPlatformOverride = TargetPlatform.iOS; + await testOnAdFailedToLoad(0); + + debugDefaultTargetPlatformOverride = TargetPlatform.android; + await testOnAdFailedToLoad(1); + }); + + test('ios loaded events', () async { + debugDefaultTargetPlatformOverride = TargetPlatform.iOS; + AdManagerAdRequest request = AdManagerAdRequest(); + + // Check that listener callbacks are invoked + Completer loaded = Completer(); + Completer> failedToLoad = Completer>(); + Completer opened = Completer(); + Completer clicked = Completer(); + Completer impression = Completer(); + Completer closed = Completer(); + Completer willDismiss = Completer(); + Completer> paidEvent = Completer>(); + + AdManagerBannerAdListener bannerListener = AdManagerBannerAdListener( + onAdLoaded: (ad) => loaded.complete(ad), + onAdFailedToLoad: (ad, error) => + failedToLoad.complete([ad, error]), + onAdImpression: (ad) => impression.complete(ad), + onPaidEvent: (ad, value, precision, currency) => + paidEvent.complete([ad, value, precision, currency]), + onAdClicked: (ad) => clicked.complete(ad), + onAdClosed: (ad) => closed.complete(ad), + onAdOpened: (ad) => opened.complete(ad), + onAdWillDismissScreen: (ad) => willDismiss.complete(ad), + ); + + var bannerAd = AdManagerBannerAd( + sizes: [AdSize.banner], + adUnitId: 'ad-unit', + listener: bannerListener, + request: request, + ); + await bannerAd.load(); + + expect(log, [ + isMethodCall( + 'loadAdManagerBannerAd', + arguments: { + 'adId': 0, + 'adUnitId': 'ad-unit', + 'request': request, + 'sizes': [AdSize.banner], + }, + ), + ]); + + // Simulate load callback + await TestUtil.sendAdEvent(0, 'onAdLoaded', instanceManager); + + AdManagerBannerAd createdAd = + instanceManager.adFor(0) as AdManagerBannerAd; + expect(instanceManager.adFor(0), isNotNull); + expect(bannerAd, createdAd); + expect(await loaded.future, bannerAd); + + await TestUtil.sendAdEvent(0, 'onBannerImpression', instanceManager); + expect(await impression.future, bannerAd); + + await TestUtil.sendAdEvent(0, 'adDidRecordClick', instanceManager); + expect(await clicked.future, bannerAd); + + await TestUtil.sendAdEvent( + 0, + 'onBannerWillPresentScreen', + instanceManager, + ); + expect(await opened.future, bannerAd); + + await TestUtil.sendAdEvent( + 0, + 'onBannerDidDismissScreen', + instanceManager, + ); + expect(await closed.future, bannerAd); + + await TestUtil.sendAdEvent( + 0, + 'onBannerWillDismissScreen', + instanceManager, + ); + expect(await willDismiss.future, bannerAd); + + const paidEventArgs = { + 'valueMicros': 1.2345, + 'precision': 0, + 'currencyCode': 'USD', + }; + await TestUtil.sendAdEvent( + 0, + 'onPaidEvent', + instanceManager, + paidEventArgs, + ); + List paidEventCallback = await paidEvent.future; + expect(paidEventCallback[0], bannerAd); + expect(paidEventCallback[1], 1.2345); + expect(paidEventCallback[2], PrecisionType.unknown); + expect(paidEventCallback[3], 'USD'); + }); + + test('dispose banner', () async { + final AdManagerBannerAd banner = AdManagerBannerAd( + adUnitId: 'test-ad-unit', + sizes: [AdSize.banner], + listener: AdManagerBannerAdListener(), + request: AdManagerAdRequest(), + ); + + await banner.load(); + log.clear(); + await banner.dispose(); + expect(log, [ + isMethodCall('disposeAd', arguments: {'adId': 0}), + ]); + + expect(instanceManager.adFor(0), isNull); + expect(instanceManager.adIdFor(banner), isNull); + }); + + test('calling dispose without awaiting load', () { + final AdManagerBannerAd banner = AdManagerBannerAd( + adUnitId: 'test-ad-unit', + sizes: [AdSize.banner], + listener: AdManagerBannerAdListener(), + request: AdManagerAdRequest(), + ); + + banner.load(); + banner.dispose(); + expect(instanceManager.adFor(0), isNull); + expect(instanceManager.adIdFor(banner), isNull); + }); + }); +} diff --git a/mih_ui/android/build/ios/SourcePackages/google_mobile_ads-8.0.0/test/app_open_test.dart b/mih_ui/android/build/ios/SourcePackages/google_mobile_ads-8.0.0/test/app_open_test.dart new file mode 100644 index 00000000..9b38f01b --- /dev/null +++ b/mih_ui/android/build/ios/SourcePackages/google_mobile_ads-8.0.0/test/app_open_test.dart @@ -0,0 +1,292 @@ +// Copyright 2021 Google LLC +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// https://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +import 'dart:async'; + +import 'package:flutter/foundation.dart'; +import 'package:flutter/services.dart'; +import 'package:flutter_test/flutter_test.dart'; +import 'package:google_mobile_ads/google_mobile_ads.dart'; +import 'package:google_mobile_ads/src/ad_instance_manager.dart'; +import 'test_util.dart'; + +// ignore_for_file: deprecated_member_use_from_same_package +void main() { + TestWidgetsFlutterBinding.ensureInitialized(); + + group('App Open Tests', () { + final List log = []; + + setUp(() async { + log.clear(); + instanceManager = AdInstanceManager( + 'plugins.flutter.io/google_mobile_ads', + ); + TestDefaultBinaryMessengerBinding.instance.defaultBinaryMessenger + .setMockMethodCallHandler(instanceManager.channel, ( + MethodCall methodCall, + ) async { + log.add(methodCall); + switch (methodCall.method) { + case 'loadAppOpenAd': + case 'showAdWithoutView': + case 'disposeAd': + return Future.value(); + default: + assert(false); + return null; + } + }); + }); + + test('load show android', () async { + debugDefaultTargetPlatformOverride = TargetPlatform.android; + AppOpenAd? appOpenAd; + AdRequest request = AdRequest(); + await AppOpenAd.load( + adUnitId: 'test-ad-unit', + request: request, + adLoadCallback: AppOpenAdLoadCallback( + onAdLoaded: (ad) { + appOpenAd = ad; + }, + onAdFailedToLoad: (error) {}, + ), + ); + + expect(log, [ + isMethodCall( + 'loadAppOpenAd', + arguments: { + 'adId': 0, + 'adUnitId': 'test-ad-unit', + 'request': request, + 'adManagerRequest': null, + }, + ), + ]); + + // Simulate load callback + await TestUtil.sendAdEvent(0, 'onAdLoaded', instanceManager); + + AppOpenAd createdAd = instanceManager.adFor(0) as AppOpenAd; + (createdAd).adLoadCallback.onAdLoaded(createdAd); + expect(instanceManager.adFor(0), isNotNull); + expect(appOpenAd, createdAd); + + log.clear(); + + // Show the ad and verify method call. + await appOpenAd!.show(); + expect(log, [ + isMethodCall( + 'showAdWithoutView', + arguments: {'adId': 0}, + ), + ]); + + // Check that full screen events are passed correctly. + Completer impressionCompleter = Completer(); + Completer failedToShowCompleter = Completer(); + Completer showedCompleter = Completer(); + Completer dismissedCompleter = Completer(); + Completer clickedCompleter = Completer(); + + appOpenAd!.fullScreenContentCallback = FullScreenContentCallback( + onAdImpression: (ad) => impressionCompleter.complete(ad), + onAdShowedFullScreenContent: (ad) => showedCompleter.complete(ad), + onAdFailedToShowFullScreenContent: (ad, error) => + failedToShowCompleter.complete(ad), + onAdDismissedFullScreenContent: (ad) => dismissedCompleter.complete(ad), + onAdClicked: (ad) => clickedCompleter.complete(ad), + ); + + await TestUtil.sendAdEvent(0, 'onAdImpression', instanceManager); + expect(await impressionCompleter.future, appOpenAd); + + await TestUtil.sendAdEvent(0, 'onAdClicked', instanceManager); + expect(await clickedCompleter.future, appOpenAd); + + await TestUtil.sendAdEvent( + 0, + 'onAdShowedFullScreenContent', + instanceManager, + ); + expect(await showedCompleter.future, appOpenAd); + + await TestUtil.sendAdEvent( + 0, + 'onAdDismissedFullScreenContent', + instanceManager, + ); + expect(await dismissedCompleter.future, appOpenAd); + + await TestUtil.sendAdEvent( + 0, + 'onFailedToShowFullScreenContent', + instanceManager, + {'error': AdError(1, 'domain', 'message')}, + ); + expect(await failedToShowCompleter.future, appOpenAd); + + // Check paid event callback + Completer> paidEventCompleter = Completer>(); + appOpenAd!.onPaidEvent = (ad, value, precision, currency) { + paidEventCompleter.complete([ad, value, precision, currency]); + }; + + const paidEventArgs = { + 'valueMicros': 1.2345, + 'precision': 0, + 'currencyCode': 'USD', + }; + await TestUtil.sendAdEvent( + 0, + 'onPaidEvent', + instanceManager, + paidEventArgs, + ); + List paidEventCallback = await paidEventCompleter.future; + expect(paidEventCallback[0], appOpenAd); + expect(paidEventCallback[1], 1.2345); + expect(paidEventCallback[2], PrecisionType.unknown); + expect(paidEventCallback[3], 'USD'); + }); + + test('load show ios', () async { + debugDefaultTargetPlatformOverride = TargetPlatform.iOS; + + AppOpenAd? appOpenAd; + AdRequest request = AdRequest(); + await AppOpenAd.load( + adUnitId: 'test-ad-unit', + request: request, + adLoadCallback: AppOpenAdLoadCallback( + onAdLoaded: (ad) { + appOpenAd = ad; + }, + onAdFailedToLoad: (error) {}, + ), + ); + + expect(log, [ + isMethodCall( + 'loadAppOpenAd', + arguments: { + 'adId': 0, + 'adUnitId': 'test-ad-unit', + 'request': request, + 'adManagerRequest': null, + }, + ), + ]); + + // Simulate load callback + await TestUtil.sendAdEvent(0, 'onAdLoaded', instanceManager); + + AppOpenAd createdAd = instanceManager.adFor(0) as AppOpenAd; + (createdAd).adLoadCallback.onAdLoaded(createdAd); + expect(instanceManager.adFor(0), isNotNull); + expect(appOpenAd, createdAd); + + log.clear(); + + // Show the ad and verify method call. + await appOpenAd!.show(); + expect(log, [ + isMethodCall( + 'showAdWithoutView', + arguments: {'adId': 0}, + ), + ]); + + // Check that full screen events are passed correctly. + Completer impressionCompleter = Completer(); + Completer failedToShowCompleter = Completer(); + Completer showedCompleter = Completer(); + Completer dismissedCompleter = Completer(); + Completer willDismissCompleter = Completer(); + Completer clickedCompleter = Completer(); + + appOpenAd!.fullScreenContentCallback = FullScreenContentCallback( + onAdImpression: (ad) => impressionCompleter.complete(ad), + onAdShowedFullScreenContent: (ad) => showedCompleter.complete(ad), + onAdFailedToShowFullScreenContent: (ad, error) => + failedToShowCompleter.complete(ad), + onAdDismissedFullScreenContent: (ad) => dismissedCompleter.complete(ad), + onAdWillDismissFullScreenContent: (ad) => + willDismissCompleter.complete(ad), + onAdClicked: (ad) => clickedCompleter.complete(ad), + ); + + await TestUtil.sendAdEvent(0, 'adDidRecordImpression', instanceManager); + expect(await impressionCompleter.future, appOpenAd); + + await TestUtil.sendAdEvent(0, 'adDidRecordClick', instanceManager); + expect(await clickedCompleter.future, appOpenAd); + + await TestUtil.sendAdEvent( + 0, + 'adWillPresentFullScreenContent', + instanceManager, + ); + expect(await showedCompleter.future, appOpenAd); + + await TestUtil.sendAdEvent( + 0, + 'adDidDismissFullScreenContent', + instanceManager, + ); + expect(await dismissedCompleter.future, appOpenAd); + + await TestUtil.sendAdEvent( + 0, + 'adWillDismissFullScreenContent', + instanceManager, + ); + expect(await dismissedCompleter.future, appOpenAd); + + await TestUtil.sendAdEvent( + 0, + 'didFailToPresentFullScreenContentWithError', + instanceManager, + {'error': AdError(1, 'domain', 'message')}, + ); + expect(await failedToShowCompleter.future, appOpenAd); + + // Check paid event callback + Completer> paidEventCompleter = Completer>(); + appOpenAd!.onPaidEvent = (ad, value, precision, currency) { + paidEventCompleter.complete([ad, value, precision, currency]); + }; + + const paidEventArgs = { + 'valueMicros': 1.2345, + 'precision': 0, + 'currencyCode': 'USD', + }; + await TestUtil.sendAdEvent( + 0, + 'onPaidEvent', + instanceManager, + paidEventArgs, + ); + List paidEventCallback = await paidEventCompleter.future; + expect(paidEventCallback[0], appOpenAd); + expect(paidEventCallback[1], 1.2345); + expect(paidEventCallback[2], PrecisionType.unknown); + expect(paidEventCallback[3], 'USD'); + }); + }); +} diff --git a/mih_ui/android/build/ios/SourcePackages/google_mobile_ads-8.0.0/test/banner_ad_test.dart b/mih_ui/android/build/ios/SourcePackages/google_mobile_ads-8.0.0/test/banner_ad_test.dart new file mode 100644 index 00000000..c54b87fb --- /dev/null +++ b/mih_ui/android/build/ios/SourcePackages/google_mobile_ads-8.0.0/test/banner_ad_test.dart @@ -0,0 +1,380 @@ +// Copyright 2021 Google LLC +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// https://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +import 'dart:async'; + +import 'package:flutter/foundation.dart'; +import 'package:flutter/services.dart'; +import 'package:flutter_test/flutter_test.dart'; +import 'package:google_mobile_ads/google_mobile_ads.dart'; +import 'package:google_mobile_ads/src/ad_instance_manager.dart'; +import 'test_util.dart'; + +// ignore_for_file: deprecated_member_use_from_same_package +void main() { + TestWidgetsFlutterBinding.ensureInitialized(); + + group('Banner Ad Tests', () { + final List log = []; + + setUp(() async { + log.clear(); + instanceManager = AdInstanceManager( + 'plugins.flutter.io/google_mobile_ads', + ); + TestDefaultBinaryMessengerBinding.instance.defaultBinaryMessenger + .setMockMethodCallHandler(instanceManager.channel, ( + MethodCall methodCall, + ) async { + log.add(methodCall); + switch (methodCall.method) { + case 'loadBannerAd': + case 'disposeAd': + return Future.value(); + default: + assert(false); + return null; + } + }); + }); + + test('android loaded events', () async { + debugDefaultTargetPlatformOverride = TargetPlatform.android; + AdRequest request = AdRequest(); + + // Check that listener callbacks are invoked + Completer loaded = Completer(); + Completer> failedToLoad = Completer>(); + Completer opened = Completer(); + Completer clicked = Completer(); + Completer impression = Completer(); + Completer closed = Completer(); + Completer> paidEvent = Completer>(); + + BannerAdListener bannerListener = BannerAdListener( + onAdLoaded: (ad) => loaded.complete(ad), + onAdFailedToLoad: (ad, error) => + failedToLoad.complete([ad, error]), + onAdImpression: (ad) => impression.complete(ad), + onPaidEvent: (ad, value, precision, currency) => + paidEvent.complete([ad, value, precision, currency]), + onAdClicked: (ad) => clicked.complete(ad), + onAdClosed: (ad) => closed.complete(ad), + onAdOpened: (ad) => opened.complete(ad), + ); + + var bannerAd = BannerAd( + size: AdSize.banner, + adUnitId: 'ad-unit', + listener: bannerListener, + request: request, + ); + await bannerAd.load(); + + expect(log, [ + isMethodCall( + 'loadBannerAd', + arguments: { + 'adId': 0, + 'adUnitId': 'ad-unit', + 'request': request, + 'size': AdSize.banner, + }, + ), + ]); + + // Simulate load callback + await TestUtil.sendAdEvent(0, 'onAdLoaded', instanceManager); + + BannerAd createdAd = instanceManager.adFor(0) as BannerAd; + expect(instanceManager.adFor(0), isNotNull); + expect(bannerAd, createdAd); + expect(await loaded.future, bannerAd); + + await TestUtil.sendAdEvent(0, 'onAdImpression', instanceManager); + expect(await impression.future, bannerAd); + + await TestUtil.sendAdEvent(0, 'onAdClicked', instanceManager); + expect(await clicked.future, bannerAd); + + await TestUtil.sendAdEvent(0, 'onAdOpened', instanceManager); + expect(await opened.future, bannerAd); + + await TestUtil.sendAdEvent(0, 'onAdClosed', instanceManager); + expect(await closed.future, bannerAd); + + await TestUtil.sendAdEvent(0, 'onAdClicked', instanceManager); + expect(await clicked.future, bannerAd); + + const paidEventArgs = { + 'valueMicros': 1.2345, + 'precision': 0, + 'currencyCode': 'USD', + }; + await TestUtil.sendAdEvent( + 0, + 'onPaidEvent', + instanceManager, + paidEventArgs, + ); + List paidEventCallback = await paidEvent.future; + expect(paidEventCallback[0], bannerAd); + expect(paidEventCallback[1], 1.2345); + expect(paidEventCallback[2], PrecisionType.unknown); + expect(paidEventCallback[3], 'USD'); + }); + + test('onAdFailedToLoad banner', () async { + var testOnAdFailedToLoad = (adId) async { + final Completer> resultsCompleter = + Completer>(); + + final BannerAd banner = BannerAd( + adUnitId: 'test-ad-unit', + size: AdSize.banner, + listener: BannerAdListener( + onAdFailedToLoad: (Ad ad, LoadAdError error) => + resultsCompleter.complete([ad, error]), + ), + request: AdRequest(), + ); + + await banner.load(); + AdError adError = AdError(1, 'domain', 'error-message'); + AdapterResponseInfo adapterResponseInfo = AdapterResponseInfo( + adapterClassName: 'adapter-name', + latencyMillis: 500, + description: 'message', + adUnitMapping: {'key': 'value'}, + adError: adError, + adSourceName: 'adSourceName', + adSourceId: 'adSourceId', + adSourceInstanceName: 'adSourceInstanceName', + adSourceInstanceId: 'adSourceInstanceId', + ); + + List adapterResponses = [adapterResponseInfo]; + ResponseInfo responseInfo = ResponseInfo( + responseId: 'id', + mediationAdapterClassName: 'className', + adapterResponses: adapterResponses, + responseExtras: {'key': 'value'}, + ); + + final MethodCall methodCall = + MethodCall('onAdEvent', { + 'adId': adId, + 'eventName': 'onAdFailedToLoad', + 'loadAdError': LoadAdError(1, 'domain', 'message', responseInfo), + }); + + final ByteData data = instanceManager.channel.codec.encodeMethodCall( + methodCall, + ); + await TestDefaultBinaryMessengerBinding.instance.defaultBinaryMessenger + .handlePlatformMessage( + 'plugins.flutter.io/google_mobile_ads', + data, + (data) {}, + ); + + final List results = await resultsCompleter.future; + expect(results[0], banner); + expect(results[1].code, 1); + expect(results[1].domain, 'domain'); + expect(results[1].message, 'message'); + expect(results[1].responseInfo.responseId, responseInfo.responseId); + expect( + results[1].responseInfo.mediationAdapterClassName, + responseInfo.mediationAdapterClassName, + ); + expect( + results[1].responseInfo.responseExtras, + responseInfo.responseExtras, + ); + List responses = + results[1].responseInfo.adapterResponses; + expect(responses.first.adapterClassName, 'adapter-name'); + expect(responses.first.latencyMillis, 500); + expect(responses.first.description, 'message'); + expect(responses.first.adUnitMapping, {'key': 'value'}); + expect(responses.first.adError!.code, 1); + expect(responses.first.adError!.message, 'error-message'); + expect(responses.first.adError!.domain, 'domain'); + }; + + debugDefaultTargetPlatformOverride = TargetPlatform.iOS; + await testOnAdFailedToLoad(0); + + debugDefaultTargetPlatformOverride = TargetPlatform.android; + await testOnAdFailedToLoad(1); + }); + + test('ios loaded events', () async { + debugDefaultTargetPlatformOverride = TargetPlatform.iOS; + AdRequest request = AdRequest(); + + // Check that listener callbacks are invoked + Completer loaded = Completer(); + Completer> failedToLoad = Completer>(); + Completer opened = Completer(); + Completer clicked = Completer(); + Completer impression = Completer(); + Completer closed = Completer(); + Completer willDismiss = Completer(); + Completer> paidEvent = Completer>(); + + BannerAdListener bannerListener = BannerAdListener( + onAdLoaded: (ad) => loaded.complete(ad), + onAdFailedToLoad: (ad, error) => + failedToLoad.complete([ad, error]), + onAdImpression: (ad) => impression.complete(ad), + onPaidEvent: (ad, value, precision, currency) => + paidEvent.complete([ad, value, precision, currency]), + onAdClicked: (ad) => clicked.complete(ad), + onAdClosed: (ad) => closed.complete(ad), + onAdOpened: (ad) => opened.complete(ad), + onAdWillDismissScreen: (ad) => willDismiss.complete(ad), + ); + + var bannerAd = BannerAd( + size: AdSize.banner, + adUnitId: 'ad-unit', + listener: bannerListener, + request: request, + ); + await bannerAd.load(); + + expect(log, [ + isMethodCall( + 'loadBannerAd', + arguments: { + 'adId': 0, + 'adUnitId': 'ad-unit', + 'request': request, + 'size': AdSize.banner, + }, + ), + ]); + + // Simulate load callback + await TestUtil.sendAdEvent(0, 'onAdLoaded', instanceManager); + + BannerAd createdAd = instanceManager.adFor(0) as BannerAd; + expect(instanceManager.adFor(0), isNotNull); + expect(bannerAd, createdAd); + expect(await loaded.future, bannerAd); + + await TestUtil.sendAdEvent(0, 'onBannerImpression', instanceManager); + expect(await impression.future, bannerAd); + + await TestUtil.sendAdEvent(0, 'adDidRecordClick', instanceManager); + expect(await clicked.future, bannerAd); + + await TestUtil.sendAdEvent( + 0, + 'onBannerWillPresentScreen', + instanceManager, + ); + expect(await opened.future, bannerAd); + + await TestUtil.sendAdEvent( + 0, + 'onBannerDidDismissScreen', + instanceManager, + ); + expect(await closed.future, bannerAd); + + await TestUtil.sendAdEvent( + 0, + 'onBannerWillDismissScreen', + instanceManager, + ); + expect(await willDismiss.future, bannerAd); + + const paidEventArgs = { + 'valueMicros': 1.2345, + 'precision': 0, + 'currencyCode': 'USD', + }; + await TestUtil.sendAdEvent( + 0, + 'onPaidEvent', + instanceManager, + paidEventArgs, + ); + List paidEventCallback = await paidEvent.future; + expect(paidEventCallback[0], bannerAd); + expect(paidEventCallback[1], 1.2345); + expect(paidEventCallback[2], PrecisionType.unknown); + expect(paidEventCallback[3], 'USD'); + }); + + test('dispose banner', () async { + final BannerAd banner = BannerAd( + adUnitId: 'test-ad-unit', + size: AdSize.banner, + listener: BannerAdListener(), + request: AdRequest(), + ); + + await banner.load(); + log.clear(); + await banner.dispose(); + expect(log, [ + isMethodCall('disposeAd', arguments: {'adId': 0}), + ]); + + expect(instanceManager.adFor(0), isNull); + expect(instanceManager.adIdFor(banner), isNull); + }); + + test('calling dispose without awaiting load', () { + final BannerAd banner = BannerAd( + adUnitId: 'test-ad-unit', + size: AdSize.banner, + listener: BannerAdListener(), + request: AdRequest(), + ); + + banner.load(); + banner.dispose(); + expect(instanceManager.adFor(0), isNull); + expect(instanceManager.adIdFor(banner), isNull); + }); + + test('isMounted returns correct value', () { + final BannerAd banner = BannerAd( + adUnitId: 'test-ad-unit', + size: AdSize.banner, + listener: BannerAdListener(), + request: AdRequest(), + ); + + expect(instanceManager.adIdFor(banner), isNull); + expect(banner.isMounted, isFalse); + + banner.load(); + final int? adId = instanceManager.adIdFor(banner); + expect(adId, isNotNull); + expect(banner.isMounted, isFalse); + + instanceManager.mountWidgetAdId(adId!); + expect(banner.isMounted, isTrue); + + instanceManager.unmountWidgetAdId(adId); + expect(banner.isMounted, isFalse); + }); + }); +} diff --git a/mih_ui/android/build/ios/SourcePackages/google_mobile_ads-8.0.0/test/fluid_ad_test.dart b/mih_ui/android/build/ios/SourcePackages/google_mobile_ads-8.0.0/test/fluid_ad_test.dart new file mode 100644 index 00000000..c1e54031 --- /dev/null +++ b/mih_ui/android/build/ios/SourcePackages/google_mobile_ads-8.0.0/test/fluid_ad_test.dart @@ -0,0 +1,268 @@ +// Copyright 2021 Google LLC +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// https://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +import 'dart:async'; + +import 'package:flutter/foundation.dart'; +import 'package:flutter/services.dart'; +import 'package:flutter_test/flutter_test.dart'; +import 'package:google_mobile_ads/google_mobile_ads.dart'; +import 'package:google_mobile_ads/src/ad_instance_manager.dart'; +import 'test_util.dart'; + +// ignore_for_file: deprecated_member_use_from_same_package +void main() { + TestWidgetsFlutterBinding.ensureInitialized(); + + group('Fluid Ad Tests', () { + final List log = []; + + setUp(() async { + log.clear(); + instanceManager = AdInstanceManager( + 'plugins.flutter.io/google_mobile_ads', + ); + TestDefaultBinaryMessengerBinding.instance.defaultBinaryMessenger + .setMockMethodCallHandler(instanceManager.channel, ( + MethodCall methodCall, + ) async { + log.add(methodCall); + switch (methodCall.method) { + case 'loadFluidAd': + case 'disposeAd': + return Future.value(); + default: + assert(false); + return null; + } + }); + }); + + test('load android with callbacks', () async { + debugDefaultTargetPlatformOverride = TargetPlatform.android; + + Completer impressionCompleter = Completer(); + Completer loadedCompleter = Completer(); + Completer> failedToLoadCompleter = + Completer>(); + Completer openedCompleter = Completer(); + Completer closedCompleter = Completer(); + Completer willDismissCompleter = Completer(); + Completer> paidEventCompleter = Completer>(); + Completer> appEventCompleter = Completer>(); + Completer> heightChangedCompleter = + Completer>(); + + final FluidAdManagerBannerAd fluidAd = FluidAdManagerBannerAd( + adUnitId: 'testId', + listener: AdManagerBannerAdListener( + onAdLoaded: (ad) => loadedCompleter.complete(ad), + onAdFailedToLoad: (ad, error) => + failedToLoadCompleter.complete([ad, error]), + onAdImpression: (ad) => impressionCompleter.complete(ad), + onAdOpened: (ad) => openedCompleter.complete(ad), + onAdClosed: (ad) => closedCompleter.complete(ad), + onPaidEvent: (ad, value, precision, currencyCode) => + paidEventCompleter.complete([ad, value, precision, currencyCode]), + onAppEvent: (ad, name, data) => + appEventCompleter.complete([ad, name, data]), + onAdWillDismissScreen: (ad) => willDismissCompleter.complete(ad), + ), + onFluidAdHeightChangedListener: (ad, height) => + heightChangedCompleter.complete([ad, height]), + request: AdManagerAdRequest(), + ); + + await fluidAd.load(); + expect(log, [ + isMethodCall( + 'loadFluidAd', + arguments: { + 'adId': 0, + 'adUnitId': 'testId', + 'sizes': [FluidAdSize()], + 'request': AdManagerAdRequest(), + }, + ), + ]); + + await TestUtil.sendAdEvent(0, 'onAdLoaded', instanceManager); + Ad loadedAd = await loadedCompleter.future; + expect(instanceManager.adFor(0), fluidAd); + expect(loadedAd, loadedAd); + + await TestUtil.sendAdEvent(0, 'onAdImpression', instanceManager); + expect(await impressionCompleter.future, loadedAd); + + await TestUtil.sendAdEvent(0, 'onAdOpened', instanceManager); + expect(await openedCompleter.future, loadedAd); + + await TestUtil.sendAdEvent(0, 'onAdClosed', instanceManager); + expect(await closedCompleter.future, loadedAd); + + const heightChangedArgs = {'height': 25}; + await TestUtil.sendAdEvent( + 0, + 'onFluidAdHeightChanged', + instanceManager, + heightChangedArgs, + ); + expect(await heightChangedCompleter.future, [fluidAd, 25]); + + LoadAdError error = LoadAdError(1, 'domain', 'message', null); + var errorArgs = {'loadAdError': error}; + await TestUtil.sendAdEvent( + 0, + 'onAdFailedToLoad', + instanceManager, + errorArgs, + ); + List adAndError = await failedToLoadCompleter.future; + expect(adAndError[0], loadedAd); + expect(adAndError[1].toString(), error.toString()); + + const appEventArgs = {'name': 'name', 'data': '1234'}; + await TestUtil.sendAdEvent( + 0, + 'onAppEvent', + instanceManager, + appEventArgs, + ); + expect(await appEventCompleter.future, [fluidAd, 'name', '1234']); + + // will dismiss is iOS only event. + var willDismissCompleted = false; + unawaited( + willDismissCompleter.future.whenComplete( + () => willDismissCompleted = true, + ), + ); + await TestUtil.sendAdEvent( + 0, + 'onBannerWillDismissScreen', + instanceManager, + ); + expect(willDismissCompleted, false); + }); + + test('load iOS with callbacks', () async { + debugDefaultTargetPlatformOverride = TargetPlatform.iOS; + + Completer impressionCompleter = Completer(); + Completer loadedCompleter = Completer(); + Completer> failedToLoadCompleter = + Completer>(); + Completer openedCompleter = Completer(); + Completer closedCompleter = Completer(); + Completer willDismissCompleter = Completer(); + Completer> paidEventCompleter = Completer>(); + Completer> appEventCompleter = Completer>(); + Completer> heightChangedCompleter = + Completer>(); + + final FluidAdManagerBannerAd fluidAd = FluidAdManagerBannerAd( + adUnitId: 'testId', + listener: AdManagerBannerAdListener( + onAdLoaded: (ad) => loadedCompleter.complete(ad), + onAdFailedToLoad: (ad, error) => + failedToLoadCompleter.complete([ad, error]), + onAdImpression: (ad) => impressionCompleter.complete(ad), + onAdOpened: (ad) => openedCompleter.complete(ad), + onAdClosed: (ad) => closedCompleter.complete(ad), + onPaidEvent: (ad, value, precision, currencyCode) => + paidEventCompleter.complete([ad, value, precision, currencyCode]), + onAppEvent: (ad, name, data) => + appEventCompleter.complete([ad, name, data]), + onAdWillDismissScreen: (ad) => willDismissCompleter.complete(ad), + ), + onFluidAdHeightChangedListener: (ad, height) => + heightChangedCompleter.complete([ad, height]), + request: AdManagerAdRequest(), + ); + + await fluidAd.load(); + expect(log, [ + isMethodCall( + 'loadFluidAd', + arguments: { + 'adId': 0, + 'adUnitId': 'testId', + 'sizes': [FluidAdSize()], + 'request': AdManagerAdRequest(), + }, + ), + ]); + + await TestUtil.sendAdEvent(0, 'onAdLoaded', instanceManager); + Ad loadedAd = await loadedCompleter.future; + expect(instanceManager.adFor(0), fluidAd); + expect(loadedAd, loadedAd); + + await TestUtil.sendAdEvent(0, 'onBannerImpression', instanceManager); + expect(await impressionCompleter.future, loadedAd); + + await TestUtil.sendAdEvent( + 0, + 'onBannerWillPresentScreen', + instanceManager, + ); + expect(await openedCompleter.future, loadedAd); + + await TestUtil.sendAdEvent( + 0, + 'onBannerDidDismissScreen', + instanceManager, + ); + expect(await closedCompleter.future, loadedAd); + + const heightChangedArgs = {'height': 25}; + await TestUtil.sendAdEvent( + 0, + 'onFluidAdHeightChanged', + instanceManager, + heightChangedArgs, + ); + expect(await heightChangedCompleter.future, [fluidAd, 25]); + + LoadAdError error = LoadAdError(1, 'domain', 'message', null); + var errorArgs = {'loadAdError': error}; + await TestUtil.sendAdEvent( + 0, + 'onAdFailedToLoad', + instanceManager, + errorArgs, + ); + List adAndError = await failedToLoadCompleter.future; + expect(adAndError[0], loadedAd); + expect(adAndError[1].toString(), error.toString()); + + const appEventArgs = {'name': 'name', 'data': '1234'}; + await TestUtil.sendAdEvent( + 0, + 'onAppEvent', + instanceManager, + appEventArgs, + ); + expect(await appEventCompleter.future, [fluidAd, 'name', '1234']); + + // will dismiss is iOS only event. + await TestUtil.sendAdEvent( + 0, + 'onBannerWillDismissScreen', + instanceManager, + ); + expect(await willDismissCompleter.future, fluidAd); + }); + }); +} diff --git a/mih_ui/android/build/ios/SourcePackages/google_mobile_ads-8.0.0/test/mobile_ads_test.dart b/mih_ui/android/build/ios/SourcePackages/google_mobile_ads-8.0.0/test/mobile_ads_test.dart new file mode 100644 index 00000000..ab7eddad --- /dev/null +++ b/mih_ui/android/build/ios/SourcePackages/google_mobile_ads-8.0.0/test/mobile_ads_test.dart @@ -0,0 +1,638 @@ +// Copyright 2021 Google LLC +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// https://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +import 'dart:async'; + +import 'package:flutter/material.dart'; +import 'package:google_mobile_ads/google_mobile_ads.dart'; +import 'package:google_mobile_ads/src/ad_inspector_containers.dart'; +import 'package:google_mobile_ads/src/ad_instance_manager.dart'; +import 'package:flutter/foundation.dart'; +import 'package:flutter/services.dart'; +import 'package:flutter_test/flutter_test.dart'; +import 'package:google_mobile_ads/src/webview_controller_util.dart'; +import 'package:mockito/annotations.dart'; +import 'package:mockito/mockito.dart'; +import 'package:webview_flutter/webview_flutter.dart'; +import 'mobile_ads_test.mocks.dart'; + +@GenerateMocks([WebViewController, AdInstanceManager, WebViewControllerUtil]) +void main() { + group('Mobile Ads', () { + TestWidgetsFlutterBinding.ensureInitialized(); + + final List log = []; + final AdMessageCodec codec = AdMessageCodec(); + + setUpAll(() { + debugDefaultTargetPlatformOverride = TargetPlatform.iOS; + }); + + setUp(() async { + instanceManager = AdInstanceManager( + 'plugins.flutter.io/google_mobile_ads', + ); + log.clear(); + TestDefaultBinaryMessengerBinding.instance.defaultBinaryMessenger + .setMockMethodCallHandler( + MethodChannel( + 'plugins.flutter.io/google_mobile_ads', + StandardMethodCodec(AdMessageCodec()), + ), + (MethodCall methodCall) async { + log.add(methodCall); + switch (methodCall.method) { + case 'MobileAds#initialize': + return InitializationStatus({ + 'aName': AdapterStatus( + AdapterInitializationState.notReady, + 'desc', + 0, + ), + }); + case '_init': + case 'MobileAds#setSameAppKeyEnabled': + case 'MobileAds#setAppMuted': + case 'MobileAds#setAppVolume': + case 'MobileAds#disableSDKCrashReporting': + case 'MobileAds#disableMediationInitialization': + return null; + case 'MobileAds#getVersionString': + return Future.value('Test-SDK-Version'); + case 'MobileAds#updateRequestConfiguration': + return null; + case 'MobileAds#registerWebView': + return null; + case 'MobileAds#getRequestConfiguration': + return RequestConfiguration( + maxAdContentRating: MaxAdContentRating.ma, + tagForChildDirectedTreatment: + TagForChildDirectedTreatment.yes, + tagForUnderAgeOfConsent: TagForUnderAgeOfConsent.no, + testDeviceIds: ['test-device-id'], + ); + case 'AdSize#getAnchoredAdaptiveBannerAdSize': + return null; + default: + assert(false); + return null; + } + }, + ); + }); + + test('encode/decode $AdapterInitializationState', () { + final ByteData byteData = codec.encodeMessage( + AdapterInitializationState.ready, + )!; + + final AdapterInitializationState result = codec.decodeMessage(byteData); + expect(result, AdapterInitializationState.ready); + }); + + test('encode/decode $AdapterStatus', () { + debugDefaultTargetPlatformOverride = TargetPlatform.android; + final ByteData byteData = codec.encodeMessage( + AdapterStatus(AdapterInitializationState.notReady, 'describe', 23), + )!; + + AdapterStatus result = codec.decodeMessage(byteData); + expect(result.state, AdapterInitializationState.notReady); + expect(result.description, 'describe'); + expect(result.latency, 0.023); + + debugDefaultTargetPlatformOverride = TargetPlatform.iOS; + result = codec.decodeMessage(byteData); + expect(result.state, AdapterInitializationState.notReady); + expect(result.description, 'describe'); + expect(result.latency, 23); + }); + + test('handle int values for AdapterStatus', () { + final WriteBuffer buffer = WriteBuffer(); + codec.writeValue(buffer, AdapterInitializationState.ready); + codec.writeValue(buffer, 'aDescription'); + codec.writeValue(buffer, 23); + + expect( + () => codec.readValueOfType( + 136 /* AdMessageCodec._valueAdapterStatus */, + ReadBuffer(buffer.done()), + ), + returnsNormally, + ); + }); + + test('encode/decode $InitializationStatus', () { + final ByteData byteData = codec.encodeMessage( + InitializationStatus({ + 'adMediation': AdapterStatus( + AdapterInitializationState.ready, + 'aDescription', + 0, + ), + }), + )!; + + final InitializationStatus result = codec.decodeMessage(byteData); + expect(result.adapterStatuses, hasLength(1)); + final AdapterStatus status = result.adapterStatuses['adMediation']!; + expect(status.state, AdapterInitializationState.ready); + expect(status.description, 'aDescription'); + expect(status.latency, 0); + }); + + test('$MobileAds.initialize', () async { + final InitializationStatus result = await MobileAds.instance.initialize(); + + expect(log, [ + isMethodCall('_init', arguments: null), + isMethodCall('MobileAds#initialize', arguments: null), + ]); + + expect(result.adapterStatuses, hasLength(1)); + final AdapterStatus status = result.adapterStatuses['aName']!; + expect(status.state, AdapterInitializationState.notReady); + expect(status.description, 'desc'); + expect(status.latency, 0); + }); + + test('$MobileAds.registerWebView', () async { + instanceManager = MockAdInstanceManager(); + final webView = MockWebViewController(); + when( + instanceManager.registerWebView(webView), + ).thenAnswer((realInvocation) => Future.value()); + await MobileAds.instance.registerWebView(webView); + + verify(instanceManager.registerWebView(webView)); + }); + + test('$MobileAds.registerWebView android', () async { + debugDefaultTargetPlatformOverride = TargetPlatform.android; + final mockWebViewControllerUtil = MockWebViewControllerUtil(); + when(mockWebViewControllerUtil.webViewIdentifier(any)).thenReturn(1); + instanceManager = AdInstanceManager( + 'plugins.flutter.io/google_mobile_ads', + webViewControllerUtil: mockWebViewControllerUtil, + ); + final webView = MockWebViewController(); + await MobileAds.instance.registerWebView(webView); + + expect(log, [ + isMethodCall('MobileAds#registerWebView', arguments: {'webViewId': 1}), + ]); + }); + + test('$MobileAds.registerWebView iOS', () async { + debugDefaultTargetPlatformOverride = TargetPlatform.iOS; + final mockWebViewControllerUtil = MockWebViewControllerUtil(); + when(mockWebViewControllerUtil.webViewIdentifier(any)).thenReturn(1); + instanceManager = AdInstanceManager( + 'plugins.flutter.io/google_mobile_ads', + webViewControllerUtil: mockWebViewControllerUtil, + ); + final webView = MockWebViewController(); + await MobileAds.instance.registerWebView(webView); + + expect(log, [ + isMethodCall('MobileAds#registerWebView', arguments: {'webViewId': 1}), + ]); + }); + + test('$MobileAds.openAdInspector success', () async { + TestDefaultBinaryMessengerBinding.instance.defaultBinaryMessenger + .setMockMethodCallHandler( + MethodChannel( + 'plugins.flutter.io/google_mobile_ads', + StandardMethodCodec(AdMessageCodec()), + ), + (MethodCall methodCall) async { + return null; + }, + ); + + Completer completer = Completer(); + MobileAds.instance.openAdInspector((error) { + completer.complete(error); + }); + + AdInspectorError? error = await completer.future; + expect(error, null); + }); + + test('$MobileAds.openAdInspector error', () async { + TestDefaultBinaryMessengerBinding.instance.defaultBinaryMessenger + .setMockMethodCallHandler( + MethodChannel( + 'plugins.flutter.io/google_mobile_ads', + StandardMethodCodec(AdMessageCodec()), + ), + (MethodCall methodCall) async { + throw PlatformException( + code: '1', + details: 'details', + message: 'message', + ); + }, + ); + + Completer completer = Completer(); + MobileAds.instance.openAdInspector((error) { + completer.complete(error); + }); + + AdInspectorError? error = await completer.future; + expect(error!.message, 'message'); + expect(error.code, '1'); + expect(error.domain, 'details'); + }); + + test('$MobileAds.setSameAppKeyEnabled', () async { + debugDefaultTargetPlatformOverride = TargetPlatform.iOS; + + await MobileAds.instance.setSameAppKeyEnabled(true); + + expect(log, [ + isMethodCall( + 'MobileAds#setSameAppKeyEnabled', + arguments: {'isEnabled': true}, + ), + ]); + + await MobileAds.instance.setSameAppKeyEnabled(false); + + expect(log, [ + isMethodCall( + 'MobileAds#setSameAppKeyEnabled', + arguments: {'isEnabled': true}, + ), + isMethodCall( + 'MobileAds#setSameAppKeyEnabled', + arguments: {'isEnabled': false}, + ), + ]); + }); + + test('encode/decode empty native ad options', () { + debugDefaultTargetPlatformOverride = TargetPlatform.android; + ByteData byteData = codec.encodeMessage(NativeAdOptions())!; + + NativeAdOptions result = codec.decodeMessage(byteData); + expect(result.mediaAspectRatio, null); + expect(result.adChoicesPlacement, null); + expect(result.requestCustomMuteThisAd, null); + expect(result.shouldRequestMultipleImages, null); + expect(result.shouldReturnUrlsForImageAssets, null); + expect(result.videoOptions, null); + + byteData = codec.encodeMessage( + NativeAdOptions(videoOptions: VideoOptions()), + )!; + result = codec.decodeMessage(byteData); + expect(result.mediaAspectRatio, null); + expect(result.adChoicesPlacement, null); + expect(result.requestCustomMuteThisAd, null); + expect(result.shouldRequestMultipleImages, null); + expect(result.shouldReturnUrlsForImageAssets, null); + expect(result.videoOptions!.clickToExpandRequested, null); + expect(result.videoOptions!.customControlsRequested, null); + expect(result.videoOptions!.startMuted, null); + }); + + test('encode/decode native ad options', () { + NativeAdOptions nativeAdOptions = NativeAdOptions( + adChoicesPlacement: AdChoicesPlacement.topRightCorner, + mediaAspectRatio: MediaAspectRatio.unknown, + videoOptions: VideoOptions( + clickToExpandRequested: false, + customControlsRequested: false, + startMuted: false, + ), + requestCustomMuteThisAd: false, + shouldRequestMultipleImages: false, + shouldReturnUrlsForImageAssets: false, + ); + + debugDefaultTargetPlatformOverride = TargetPlatform.android; + ByteData byteData = codec.encodeMessage(nativeAdOptions)!; + + NativeAdOptions result = codec.decodeMessage(byteData); + expect(result.mediaAspectRatio, MediaAspectRatio.unknown); + expect(result.adChoicesPlacement, AdChoicesPlacement.topRightCorner); + expect(result.requestCustomMuteThisAd, false); + expect(result.shouldRequestMultipleImages, false); + expect(result.shouldReturnUrlsForImageAssets, false); + expect(result.videoOptions!.startMuted, false); + expect(result.videoOptions!.customControlsRequested, false); + expect(result.videoOptions!.clickToExpandRequested, false); + + nativeAdOptions = NativeAdOptions( + adChoicesPlacement: AdChoicesPlacement.bottomLeftCorner, + mediaAspectRatio: MediaAspectRatio.landscape, + videoOptions: VideoOptions( + clickToExpandRequested: true, + customControlsRequested: true, + startMuted: true, + ), + requestCustomMuteThisAd: true, + shouldRequestMultipleImages: true, + shouldReturnUrlsForImageAssets: true, + ); + + byteData = codec.encodeMessage(nativeAdOptions)!; + result = codec.decodeMessage(byteData); + + expect(result.mediaAspectRatio, MediaAspectRatio.landscape); + expect(result.adChoicesPlacement, AdChoicesPlacement.bottomLeftCorner); + expect(result.requestCustomMuteThisAd, true); + expect(result.shouldRequestMultipleImages, true); + expect(result.shouldReturnUrlsForImageAssets, true); + expect(result.videoOptions!.startMuted, true); + expect(result.videoOptions!.customControlsRequested, true); + expect(result.videoOptions!.clickToExpandRequested, true); + }); + + test('$MobileAds.setAppMuted', () async { + await MobileAds.instance.setAppMuted(true); + + expect(log, [ + isMethodCall('MobileAds#setAppMuted', arguments: {'muted': true}), + ]); + + await MobileAds.instance.setAppMuted(false); + + expect(log, [ + isMethodCall('MobileAds#setAppMuted', arguments: {'muted': true}), + isMethodCall('MobileAds#setAppMuted', arguments: {'muted': false}), + ]); + }); + + test('$MobileAds.setAppVolume', () async { + await MobileAds.instance.setAppVolume(1.0); + + expect(log, [ + isMethodCall('MobileAds#setAppVolume', arguments: {'volume': 1.0}), + ]); + }); + + test('$MobileAds.disableSDKCrashReporting', () async { + debugDefaultTargetPlatformOverride = TargetPlatform.iOS; + await MobileAds.instance.disableSDKCrashReporting(); + + expect(log, [ + isMethodCall('MobileAds#disableSDKCrashReporting', arguments: null), + ]); + }); + + test('$MobileAds.disableMediationInitialization', () async { + await MobileAds.instance.disableMediationInitialization(); + + expect(log, [ + isMethodCall( + 'MobileAds#disableMediationInitialization', + arguments: null, + ), + ]); + }); + + test('$MobileAds.getVersionString', () async { + await MobileAds.instance.getVersionString(); + + expect(log, [ + isMethodCall('MobileAds#getVersionString', arguments: null), + ]); + }); + + test('$AdSize.getAnchoredAdaptiveBannerAdSize', () async { + await AdSize.getAnchoredAdaptiveBannerAdSize(Orientation.portrait, 23); + + expect(log, [ + isMethodCall( + 'AdSize#getAnchoredAdaptiveBannerAdSize', + arguments: {'orientation': 'portrait', 'width': 23}, + ), + ]); + + await AdSize.getAnchoredAdaptiveBannerAdSize(Orientation.landscape, 34); + + expect(log, [ + isMethodCall( + 'AdSize#getAnchoredAdaptiveBannerAdSize', + arguments: {'orientation': 'portrait', 'width': 23}, + ), + isMethodCall( + 'AdSize#getAnchoredAdaptiveBannerAdSize', + arguments: {'orientation': 'landscape', 'width': 34}, + ), + ]); + + await AdSize.getCurrentOrientationAnchoredAdaptiveBannerAdSize(45); + + expect(log, [ + isMethodCall( + 'AdSize#getAnchoredAdaptiveBannerAdSize', + arguments: {'orientation': 'portrait', 'width': 23}, + ), + isMethodCall( + 'AdSize#getAnchoredAdaptiveBannerAdSize', + arguments: {'orientation': 'landscape', 'width': 34}, + ), + isMethodCall( + 'AdSize#getAnchoredAdaptiveBannerAdSize', + arguments: {'width': 45}, + ), + ]); + }); + + test('encode/decode $MobileAds.getRequestConfiguration', () async { + RequestConfiguration requestConfig = await MobileAds.instance + .getRequestConfiguration(); + + debugDefaultTargetPlatformOverride = TargetPlatform.iOS; + ByteData byteData = codec.encodeMessage(requestConfig)!; + RequestConfiguration result = codec.decodeMessage(byteData); + + expect(result.maxAdContentRating, MaxAdContentRating.ma); + expect( + result.tagForChildDirectedTreatment, + TagForChildDirectedTreatment.yes, + ); + expect(result.tagForUnderAgeOfConsent, TagForUnderAgeOfConsent.no); + expect(result.testDeviceIds, ['test-device-id']); + + debugDefaultTargetPlatformOverride = TargetPlatform.android; + byteData = codec.encodeMessage(requestConfig)!; + result = codec.decodeMessage(byteData); + + expect(result.maxAdContentRating, MaxAdContentRating.ma); + expect( + result.tagForChildDirectedTreatment, + TagForChildDirectedTreatment.yes, + ); + expect(result.tagForUnderAgeOfConsent, TagForUnderAgeOfConsent.no); + expect(result.testDeviceIds, ['test-device-id']); + }); + + test('$MobileAds.RequestConfiguration', () async { + RequestConfiguration requestConfiguration = RequestConfiguration( + maxAdContentRating: MaxAdContentRating.ma, + tagForChildDirectedTreatment: TagForChildDirectedTreatment.yes, + tagForUnderAgeOfConsent: TagForUnderAgeOfConsent.no, + testDeviceIds: ['test-device-id'], + ); + + await MobileAds.instance.updateRequestConfiguration(requestConfiguration); + + debugDefaultTargetPlatformOverride = TargetPlatform.iOS; + RequestConfiguration result = await MobileAds.instance + .getRequestConfiguration(); + expect(result.maxAdContentRating, MaxAdContentRating.ma); + expect( + result.tagForChildDirectedTreatment, + TagForChildDirectedTreatment.yes, + ); + expect(result.tagForUnderAgeOfConsent, TagForUnderAgeOfConsent.no); + expect(result.testDeviceIds, ['test-device-id']); + expect(log, [ + isMethodCall( + 'MobileAds#updateRequestConfiguration', + arguments: { + 'maxAdContentRating': MaxAdContentRating.ma, + 'tagForChildDirectedTreatment': TagForChildDirectedTreatment.yes, + 'testDeviceIds': ['test-device-id'], + 'tagForUnderAgeOfConsent': TagForUnderAgeOfConsent.no, + }, + ), + isMethodCall('MobileAds#getRequestConfiguration', arguments: null), + ]); + + debugDefaultTargetPlatformOverride = TargetPlatform.android; + result = await MobileAds.instance.getRequestConfiguration(); + expect(result.maxAdContentRating, MaxAdContentRating.ma); + expect( + result.tagForChildDirectedTreatment, + TagForChildDirectedTreatment.yes, + ); + expect(result.tagForUnderAgeOfConsent, TagForUnderAgeOfConsent.no); + expect(result.testDeviceIds, ['test-device-id']); + expect(log, [ + isMethodCall( + 'MobileAds#updateRequestConfiguration', + arguments: { + 'maxAdContentRating': MaxAdContentRating.ma, + 'tagForChildDirectedTreatment': TagForChildDirectedTreatment.yes, + 'testDeviceIds': ['test-device-id'], + 'tagForUnderAgeOfConsent': TagForUnderAgeOfConsent.no, + }, + ), + isMethodCall('MobileAds#getRequestConfiguration', arguments: null), + isMethodCall('MobileAds#getRequestConfiguration', arguments: null), + ]); + }); + + test('encode/decode native template font style', () { + NativeTemplateFontStyle.values.forEach((fontStyle) { + final byteData = codec.encodeMessage(fontStyle)!; + final result = codec.decodeMessage(byteData); + expect(result, fontStyle); + }); + }); + + test('encode/decode native template type', () { + TemplateType.values.forEach((templateType) { + final byteData = codec.encodeMessage(templateType)!; + final result = codec.decodeMessage(byteData); + expect(result, templateType); + }); + }); + + test('encode/decode empty native text style', () { + final textStyle = NativeTemplateTextStyle(); + final byteData = codec.encodeMessage(textStyle); + final result = codec.decodeMessage(byteData); + expect(result, textStyle); + }); + + test('encode/decode non-empty native text style', () { + final textStyle = NativeTemplateTextStyle( + textColor: Colors.red.shade900, + backgroundColor: Colors.blue.withAlpha(50), + style: NativeTemplateFontStyle.normal, + size: 20, + ); + final byteData = codec.encodeMessage(textStyle); + final result = codec.decodeMessage(byteData); + expect(result, textStyle); + }); + + test('encode/decode empty native template style', () { + final templateStyle = NativeTemplateStyle( + templateType: TemplateType.medium, + ); + final byteData = codec.encodeMessage(templateStyle); + final result = codec.decodeMessage(byteData); + expect(result, templateStyle); + }); + + test('encode/decode non-empty native template style, ios', () { + debugDefaultTargetPlatformOverride = TargetPlatform.iOS; + final templateStyle = NativeTemplateStyle( + templateType: TemplateType.medium, + callToActionTextStyle: NativeTemplateTextStyle(), + primaryTextStyle: NativeTemplateTextStyle( + textColor: Colors.blue.shade900, + ), + secondaryTextStyle: NativeTemplateTextStyle( + backgroundColor: Colors.green.shade900, + style: NativeTemplateFontStyle.italic, + ), + tertiaryTextStyle: NativeTemplateTextStyle(size: 15), + mainBackgroundColor: Colors.cyan.shade900, + cornerRadius: 12, + ); + final byteData = codec.encodeMessage(templateStyle); + final result = codec.decodeMessage(byteData); + expect(result, templateStyle); + }); + + test('encode/decode non-empty native template style, android', () { + debugDefaultTargetPlatformOverride = TargetPlatform.android; + final templateStyle = NativeTemplateStyle( + templateType: TemplateType.medium, + callToActionTextStyle: NativeTemplateTextStyle(), + primaryTextStyle: NativeTemplateTextStyle( + textColor: Colors.blue.shade900, + ), + secondaryTextStyle: NativeTemplateTextStyle( + backgroundColor: Colors.green.shade900, + style: NativeTemplateFontStyle.italic, + ), + tertiaryTextStyle: NativeTemplateTextStyle(size: 15), + mainBackgroundColor: Color.fromARGB(1, 2, 3, 4), + cornerRadius: 12, + ); + final byteData = codec.encodeMessage(templateStyle); + final NativeTemplateStyle result = codec.decodeMessage(byteData); + // cornerRadius is dropped on android + expect(result.cornerRadius, null); + expect(result.templateType, templateStyle.templateType); + expect(result.callToActionTextStyle, templateStyle.callToActionTextStyle); + expect(result.primaryTextStyle, templateStyle.primaryTextStyle); + expect(result.secondaryTextStyle, templateStyle.secondaryTextStyle); + expect(result.tertiaryTextStyle, templateStyle.tertiaryTextStyle); + expect(result.mainBackgroundColor, templateStyle.mainBackgroundColor); + }); + }); +} diff --git a/mih_ui/android/build/ios/SourcePackages/google_mobile_ads-8.0.0/test/mobile_ads_test.mocks.dart b/mih_ui/android/build/ios/SourcePackages/google_mobile_ads-8.0.0/test/mobile_ads_test.mocks.dart new file mode 100644 index 00000000..95d6bd0b --- /dev/null +++ b/mih_ui/android/build/ios/SourcePackages/google_mobile_ads-8.0.0/test/mobile_ads_test.mocks.dart @@ -0,0 +1,754 @@ +// Mocks generated by Mockito 5.4.4 from annotations +// in google_mobile_ads/test/mobile_ads_test.dart. +// Do not manually edit this file. + +// ignore_for_file: no_leading_underscores_for_library_prefixes +import 'dart:async' as _i9; +import 'dart:typed_data' as _i10; +import 'dart:ui' as _i3; + +import 'package:flutter/services.dart' as _i4; +import 'package:google_mobile_ads/src/ad_containers.dart' as _i13; +import 'package:google_mobile_ads/src/ad_inspector_containers.dart' as _i15; +import 'package:google_mobile_ads/src/ad_instance_manager.dart' as _i12; +import 'package:google_mobile_ads/src/mobile_ads.dart' as _i6; +import 'package:google_mobile_ads/src/request_configuration.dart' as _i7; +import 'package:google_mobile_ads/src/webview_controller_util.dart' as _i5; +import 'package:mockito/mockito.dart' as _i1; +import 'package:mockito/src/dummies.dart' as _i14; +import 'package:webview_flutter/src/navigation_delegate.dart' as _i11; +import 'package:webview_flutter/webview_flutter.dart' as _i8; +import 'package:webview_flutter_platform_interface/webview_flutter_platform_interface.dart' + as _i2; + +// ignore_for_file: type=lint +// ignore_for_file: avoid_redundant_argument_values +// ignore_for_file: avoid_setters_without_getters +// ignore_for_file: comment_references +// ignore_for_file: deprecated_member_use +// ignore_for_file: deprecated_member_use_from_same_package +// ignore_for_file: implementation_imports +// ignore_for_file: invalid_use_of_visible_for_testing_member +// ignore_for_file: prefer_const_constructors +// ignore_for_file: unnecessary_parenthesis +// ignore_for_file: camel_case_types +// ignore_for_file: subtype_of_sealed_class + +class _FakePlatformWebViewController_0 extends _i1.SmartFake + implements _i2.PlatformWebViewController { + _FakePlatformWebViewController_0(Object parent, Invocation parentInvocation) + : super(parent, parentInvocation); +} + +class _FakeObject_1 extends _i1.SmartFake implements Object { + _FakeObject_1(Object parent, Invocation parentInvocation) + : super(parent, parentInvocation); +} + +class _FakeOffset_2 extends _i1.SmartFake implements _i3.Offset { + _FakeOffset_2(Object parent, Invocation parentInvocation) + : super(parent, parentInvocation); +} + +class _FakeMethodChannel_3 extends _i1.SmartFake implements _i4.MethodChannel { + _FakeMethodChannel_3(Object parent, Invocation parentInvocation) + : super(parent, parentInvocation); +} + +class _FakeWebViewControllerUtil_4 extends _i1.SmartFake + implements _i5.WebViewControllerUtil { + _FakeWebViewControllerUtil_4(Object parent, Invocation parentInvocation) + : super(parent, parentInvocation); +} + +class _FakeInitializationStatus_5 extends _i1.SmartFake + implements _i6.InitializationStatus { + _FakeInitializationStatus_5(Object parent, Invocation parentInvocation) + : super(parent, parentInvocation); +} + +class _FakeRequestConfiguration_6 extends _i1.SmartFake + implements _i7.RequestConfiguration { + _FakeRequestConfiguration_6(Object parent, Invocation parentInvocation) + : super(parent, parentInvocation); +} + +/// A class which mocks [WebViewController]. +/// +/// See the documentation for Mockito's code generation for more information. +class MockWebViewController extends _i1.Mock implements _i8.WebViewController { + MockWebViewController() { + _i1.throwOnMissingStub(this); + } + + @override + _i2.PlatformWebViewController get platform => + (super.noSuchMethod( + Invocation.getter(#platform), + returnValue: _FakePlatformWebViewController_0( + this, + Invocation.getter(#platform), + ), + ) + as _i2.PlatformWebViewController); + + @override + _i9.Future loadFile(String? absoluteFilePath) => + (super.noSuchMethod( + Invocation.method(#loadFile, [absoluteFilePath]), + returnValue: _i9.Future.value(), + returnValueForMissingStub: _i9.Future.value(), + ) + as _i9.Future); + + @override + _i9.Future loadFlutterAsset(String? key) => + (super.noSuchMethod( + Invocation.method(#loadFlutterAsset, [key]), + returnValue: _i9.Future.value(), + returnValueForMissingStub: _i9.Future.value(), + ) + as _i9.Future); + + @override + _i9.Future loadHtmlString(String? html, {String? baseUrl}) => + (super.noSuchMethod( + Invocation.method(#loadHtmlString, [html], {#baseUrl: baseUrl}), + returnValue: _i9.Future.value(), + returnValueForMissingStub: _i9.Future.value(), + ) + as _i9.Future); + + @override + _i9.Future loadRequest( + Uri? uri, { + _i2.LoadRequestMethod? method = _i2.LoadRequestMethod.get, + Map? headers = const {}, + _i10.Uint8List? body, + }) => + (super.noSuchMethod( + Invocation.method( + #loadRequest, + [uri], + {#method: method, #headers: headers, #body: body}, + ), + returnValue: _i9.Future.value(), + returnValueForMissingStub: _i9.Future.value(), + ) + as _i9.Future); + + @override + _i9.Future currentUrl() => + (super.noSuchMethod( + Invocation.method(#currentUrl, []), + returnValue: _i9.Future.value(), + ) + as _i9.Future); + + @override + _i9.Future canGoBack() => + (super.noSuchMethod( + Invocation.method(#canGoBack, []), + returnValue: _i9.Future.value(false), + ) + as _i9.Future); + + @override + _i9.Future canGoForward() => + (super.noSuchMethod( + Invocation.method(#canGoForward, []), + returnValue: _i9.Future.value(false), + ) + as _i9.Future); + + @override + _i9.Future goBack() => + (super.noSuchMethod( + Invocation.method(#goBack, []), + returnValue: _i9.Future.value(), + returnValueForMissingStub: _i9.Future.value(), + ) + as _i9.Future); + + @override + _i9.Future goForward() => + (super.noSuchMethod( + Invocation.method(#goForward, []), + returnValue: _i9.Future.value(), + returnValueForMissingStub: _i9.Future.value(), + ) + as _i9.Future); + + @override + _i9.Future reload() => + (super.noSuchMethod( + Invocation.method(#reload, []), + returnValue: _i9.Future.value(), + returnValueForMissingStub: _i9.Future.value(), + ) + as _i9.Future); + + @override + _i9.Future setNavigationDelegate(_i11.NavigationDelegate? delegate) => + (super.noSuchMethod( + Invocation.method(#setNavigationDelegate, [delegate]), + returnValue: _i9.Future.value(), + returnValueForMissingStub: _i9.Future.value(), + ) + as _i9.Future); + + @override + _i9.Future clearCache() => + (super.noSuchMethod( + Invocation.method(#clearCache, []), + returnValue: _i9.Future.value(), + returnValueForMissingStub: _i9.Future.value(), + ) + as _i9.Future); + + @override + _i9.Future clearLocalStorage() => + (super.noSuchMethod( + Invocation.method(#clearLocalStorage, []), + returnValue: _i9.Future.value(), + returnValueForMissingStub: _i9.Future.value(), + ) + as _i9.Future); + + @override + _i9.Future runJavaScript(String? javaScript) => + (super.noSuchMethod( + Invocation.method(#runJavaScript, [javaScript]), + returnValue: _i9.Future.value(), + returnValueForMissingStub: _i9.Future.value(), + ) + as _i9.Future); + + @override + _i9.Future runJavaScriptReturningResult(String? javaScript) => + (super.noSuchMethod( + Invocation.method(#runJavaScriptReturningResult, [javaScript]), + returnValue: _i9.Future.value( + _FakeObject_1( + this, + Invocation.method(#runJavaScriptReturningResult, [javaScript]), + ), + ), + ) + as _i9.Future); + + @override + _i9.Future addJavaScriptChannel( + String? name, { + required void Function(_i2.JavaScriptMessage)? onMessageReceived, + }) => + (super.noSuchMethod( + Invocation.method( + #addJavaScriptChannel, + [name], + {#onMessageReceived: onMessageReceived}, + ), + returnValue: _i9.Future.value(), + returnValueForMissingStub: _i9.Future.value(), + ) + as _i9.Future); + + @override + _i9.Future removeJavaScriptChannel(String? javaScriptChannelName) => + (super.noSuchMethod( + Invocation.method(#removeJavaScriptChannel, [ + javaScriptChannelName, + ]), + returnValue: _i9.Future.value(), + returnValueForMissingStub: _i9.Future.value(), + ) + as _i9.Future); + + @override + _i9.Future getTitle() => + (super.noSuchMethod( + Invocation.method(#getTitle, []), + returnValue: _i9.Future.value(), + ) + as _i9.Future); + + @override + _i9.Future scrollTo(int? x, int? y) => + (super.noSuchMethod( + Invocation.method(#scrollTo, [x, y]), + returnValue: _i9.Future.value(), + returnValueForMissingStub: _i9.Future.value(), + ) + as _i9.Future); + + @override + _i9.Future scrollBy(int? x, int? y) => + (super.noSuchMethod( + Invocation.method(#scrollBy, [x, y]), + returnValue: _i9.Future.value(), + returnValueForMissingStub: _i9.Future.value(), + ) + as _i9.Future); + + @override + _i9.Future<_i3.Offset> getScrollPosition() => + (super.noSuchMethod( + Invocation.method(#getScrollPosition, []), + returnValue: _i9.Future<_i3.Offset>.value( + _FakeOffset_2(this, Invocation.method(#getScrollPosition, [])), + ), + ) + as _i9.Future<_i3.Offset>); + + @override + _i9.Future enableZoom(bool? enabled) => + (super.noSuchMethod( + Invocation.method(#enableZoom, [enabled]), + returnValue: _i9.Future.value(), + returnValueForMissingStub: _i9.Future.value(), + ) + as _i9.Future); + + @override + _i9.Future setBackgroundColor(_i3.Color? color) => + (super.noSuchMethod( + Invocation.method(#setBackgroundColor, [color]), + returnValue: _i9.Future.value(), + returnValueForMissingStub: _i9.Future.value(), + ) + as _i9.Future); + + @override + _i9.Future setJavaScriptMode(_i2.JavaScriptMode? javaScriptMode) => + (super.noSuchMethod( + Invocation.method(#setJavaScriptMode, [javaScriptMode]), + returnValue: _i9.Future.value(), + returnValueForMissingStub: _i9.Future.value(), + ) + as _i9.Future); + + @override + _i9.Future setUserAgent(String? userAgent) => + (super.noSuchMethod( + Invocation.method(#setUserAgent, [userAgent]), + returnValue: _i9.Future.value(), + returnValueForMissingStub: _i9.Future.value(), + ) + as _i9.Future); + + @override + _i9.Future setOnConsoleMessage( + void Function(_i2.JavaScriptConsoleMessage)? onConsoleMessage, + ) => + (super.noSuchMethod( + Invocation.method(#setOnConsoleMessage, [onConsoleMessage]), + returnValue: _i9.Future.value(), + returnValueForMissingStub: _i9.Future.value(), + ) + as _i9.Future); + + @override + _i9.Future setOnJavaScriptAlertDialog( + _i9.Future Function(_i2.JavaScriptAlertDialogRequest)? + onJavaScriptAlertDialog, + ) => + (super.noSuchMethod( + Invocation.method(#setOnJavaScriptAlertDialog, [ + onJavaScriptAlertDialog, + ]), + returnValue: _i9.Future.value(), + returnValueForMissingStub: _i9.Future.value(), + ) + as _i9.Future); + + @override + _i9.Future setOnJavaScriptConfirmDialog( + _i9.Future Function(_i2.JavaScriptConfirmDialogRequest)? + onJavaScriptConfirmDialog, + ) => + (super.noSuchMethod( + Invocation.method(#setOnJavaScriptConfirmDialog, [ + onJavaScriptConfirmDialog, + ]), + returnValue: _i9.Future.value(), + returnValueForMissingStub: _i9.Future.value(), + ) + as _i9.Future); + + @override + _i9.Future setOnJavaScriptTextInputDialog( + _i9.Future Function(_i2.JavaScriptTextInputDialogRequest)? + onJavaScriptTextInputDialog, + ) => + (super.noSuchMethod( + Invocation.method(#setOnJavaScriptTextInputDialog, [ + onJavaScriptTextInputDialog, + ]), + returnValue: _i9.Future.value(), + returnValueForMissingStub: _i9.Future.value(), + ) + as _i9.Future); + + @override + _i9.Future getUserAgent() => + (super.noSuchMethod( + Invocation.method(#getUserAgent, []), + returnValue: _i9.Future.value(), + ) + as _i9.Future); + + @override + _i9.Future setOnScrollPositionChange( + void Function(_i2.ScrollPositionChange)? onScrollPositionChange, + ) => + (super.noSuchMethod( + Invocation.method(#setOnScrollPositionChange, [ + onScrollPositionChange, + ]), + returnValue: _i9.Future.value(), + returnValueForMissingStub: _i9.Future.value(), + ) + as _i9.Future); +} + +/// A class which mocks [AdInstanceManager]. +/// +/// See the documentation for Mockito's code generation for more information. +class MockAdInstanceManager extends _i1.Mock implements _i12.AdInstanceManager { + MockAdInstanceManager() { + _i1.throwOnMissingStub(this); + } + + @override + _i4.MethodChannel get channel => + (super.noSuchMethod( + Invocation.getter(#channel), + returnValue: _FakeMethodChannel_3( + this, + Invocation.getter(#channel), + ), + ) + as _i4.MethodChannel); + + @override + _i5.WebViewControllerUtil get webViewControllerUtil => + (super.noSuchMethod( + Invocation.getter(#webViewControllerUtil), + returnValue: _FakeWebViewControllerUtil_4( + this, + Invocation.getter(#webViewControllerUtil), + ), + ) + as _i5.WebViewControllerUtil); + + @override + _i9.Future<_i6.InitializationStatus> initialize() => + (super.noSuchMethod( + Invocation.method(#initialize, []), + returnValue: _i9.Future<_i6.InitializationStatus>.value( + _FakeInitializationStatus_5( + this, + Invocation.method(#initialize, []), + ), + ), + ) + as _i9.Future<_i6.InitializationStatus>); + + @override + _i9.Future<_i13.AdSize?> getAdSize(_i13.Ad? ad) => + (super.noSuchMethod( + Invocation.method(#getAdSize, [ad]), + returnValue: _i9.Future<_i13.AdSize?>.value(), + ) + as _i9.Future<_i13.AdSize?>); + + @override + _i13.Ad? adFor(int? adId) => + (super.noSuchMethod(Invocation.method(#adFor, [adId])) as _i13.Ad?); + + @override + int? adIdFor(_i13.Ad? ad) => + (super.noSuchMethod(Invocation.method(#adIdFor, [ad])) as int?); + + @override + bool isWidgetAdIdMounted(int? adId) => + (super.noSuchMethod( + Invocation.method(#isWidgetAdIdMounted, [adId]), + returnValue: false, + ) + as bool); + + @override + void mountWidgetAdId(int? adId) => super.noSuchMethod( + Invocation.method(#mountWidgetAdId, [adId]), + returnValueForMissingStub: null, + ); + + @override + void unmountWidgetAdId(int? adId) => super.noSuchMethod( + Invocation.method(#unmountWidgetAdId, [adId]), + returnValueForMissingStub: null, + ); + + @override + _i9.Future loadBannerAd(_i13.BannerAd? ad) => + (super.noSuchMethod( + Invocation.method(#loadBannerAd, [ad]), + returnValue: _i9.Future.value(), + returnValueForMissingStub: _i9.Future.value(), + ) + as _i9.Future); + + @override + _i9.Future loadInterstitialAd(_i13.InterstitialAd? ad) => + (super.noSuchMethod( + Invocation.method(#loadInterstitialAd, [ad]), + returnValue: _i9.Future.value(), + returnValueForMissingStub: _i9.Future.value(), + ) + as _i9.Future); + + @override + _i9.Future loadNativeAd(_i13.NativeAd? ad) => + (super.noSuchMethod( + Invocation.method(#loadNativeAd, [ad]), + returnValue: _i9.Future.value(), + returnValueForMissingStub: _i9.Future.value(), + ) + as _i9.Future); + + @override + _i9.Future loadRewardedAd(_i13.RewardedAd? ad) => + (super.noSuchMethod( + Invocation.method(#loadRewardedAd, [ad]), + returnValue: _i9.Future.value(), + returnValueForMissingStub: _i9.Future.value(), + ) + as _i9.Future); + + @override + _i9.Future loadRewardedInterstitialAd( + _i13.RewardedInterstitialAd? ad, + ) => + (super.noSuchMethod( + Invocation.method(#loadRewardedInterstitialAd, [ad]), + returnValue: _i9.Future.value(), + returnValueForMissingStub: _i9.Future.value(), + ) + as _i9.Future); + + @override + _i9.Future loadAppOpenAd(_i13.AppOpenAd? ad) => + (super.noSuchMethod( + Invocation.method(#loadAppOpenAd, [ad]), + returnValue: _i9.Future.value(), + returnValueForMissingStub: _i9.Future.value(), + ) + as _i9.Future); + + @override + _i9.Future loadAdManagerBannerAd(_i13.AdManagerBannerAd? ad) => + (super.noSuchMethod( + Invocation.method(#loadAdManagerBannerAd, [ad]), + returnValue: _i9.Future.value(), + returnValueForMissingStub: _i9.Future.value(), + ) + as _i9.Future); + + @override + _i9.Future loadFluidAd(_i13.FluidAdManagerBannerAd? ad) => + (super.noSuchMethod( + Invocation.method(#loadFluidAd, [ad]), + returnValue: _i9.Future.value(), + returnValueForMissingStub: _i9.Future.value(), + ) + as _i9.Future); + + @override + _i9.Future loadAdManagerInterstitialAd( + _i13.AdManagerInterstitialAd? ad, + ) => + (super.noSuchMethod( + Invocation.method(#loadAdManagerInterstitialAd, [ad]), + returnValue: _i9.Future.value(), + returnValueForMissingStub: _i9.Future.value(), + ) + as _i9.Future); + + @override + _i9.Future disposeAd(_i13.Ad? ad) => + (super.noSuchMethod( + Invocation.method(#disposeAd, [ad]), + returnValue: _i9.Future.value(), + returnValueForMissingStub: _i9.Future.value(), + ) + as _i9.Future); + + @override + _i9.Future showAdWithoutView(_i13.AdWithoutView? ad) => + (super.noSuchMethod( + Invocation.method(#showAdWithoutView, [ad]), + returnValue: _i9.Future.value(), + returnValueForMissingStub: _i9.Future.value(), + ) + as _i9.Future); + + @override + _i9.Future<_i7.RequestConfiguration> getRequestConfiguration() => + (super.noSuchMethod( + Invocation.method(#getRequestConfiguration, []), + returnValue: _i9.Future<_i7.RequestConfiguration>.value( + _FakeRequestConfiguration_6( + this, + Invocation.method(#getRequestConfiguration, []), + ), + ), + ) + as _i9.Future<_i7.RequestConfiguration>); + + @override + _i9.Future updateRequestConfiguration( + _i7.RequestConfiguration? requestConfiguration, + ) => + (super.noSuchMethod( + Invocation.method(#updateRequestConfiguration, [ + requestConfiguration, + ]), + returnValue: _i9.Future.value(), + returnValueForMissingStub: _i9.Future.value(), + ) + as _i9.Future); + + @override + _i9.Future setSameAppKeyEnabled(bool? isEnabled) => + (super.noSuchMethod( + Invocation.method(#setSameAppKeyEnabled, [isEnabled]), + returnValue: _i9.Future.value(), + returnValueForMissingStub: _i9.Future.value(), + ) + as _i9.Future); + + @override + _i9.Future setAppMuted(bool? muted) => + (super.noSuchMethod( + Invocation.method(#setAppMuted, [muted]), + returnValue: _i9.Future.value(), + returnValueForMissingStub: _i9.Future.value(), + ) + as _i9.Future); + + @override + _i9.Future setAppVolume(double? volume) => + (super.noSuchMethod( + Invocation.method(#setAppVolume, [volume]), + returnValue: _i9.Future.value(), + returnValueForMissingStub: _i9.Future.value(), + ) + as _i9.Future); + + @override + _i9.Future setImmersiveMode( + _i13.AdWithoutView? ad, + bool? immersiveModeEnabled, + ) => + (super.noSuchMethod( + Invocation.method(#setImmersiveMode, [ad, immersiveModeEnabled]), + returnValue: _i9.Future.value(), + returnValueForMissingStub: _i9.Future.value(), + ) + as _i9.Future); + + @override + _i9.Future disableSDKCrashReporting() => + (super.noSuchMethod( + Invocation.method(#disableSDKCrashReporting, []), + returnValue: _i9.Future.value(), + returnValueForMissingStub: _i9.Future.value(), + ) + as _i9.Future); + + @override + _i9.Future disableMediationInitialization() => + (super.noSuchMethod( + Invocation.method(#disableMediationInitialization, []), + returnValue: _i9.Future.value(), + returnValueForMissingStub: _i9.Future.value(), + ) + as _i9.Future); + + @override + _i9.Future getVersionString() => + (super.noSuchMethod( + Invocation.method(#getVersionString, []), + returnValue: _i9.Future.value( + _i14.dummyValue( + this, + Invocation.method(#getVersionString, []), + ), + ), + ) + as _i9.Future); + + @override + _i9.Future setServerSideVerificationOptions( + _i13.ServerSideVerificationOptions? options, + _i13.Ad? ad, + ) => + (super.noSuchMethod( + Invocation.method(#setServerSideVerificationOptions, [options, ad]), + returnValue: _i9.Future.value(), + returnValueForMissingStub: _i9.Future.value(), + ) + as _i9.Future); + + @override + _i9.Future openDebugMenu(String? adUnitId) => + (super.noSuchMethod( + Invocation.method(#openDebugMenu, [adUnitId]), + returnValue: _i9.Future.value(), + returnValueForMissingStub: _i9.Future.value(), + ) + as _i9.Future); + + @override + _i9.Future registerWebView(_i8.WebViewController? controller) => + (super.noSuchMethod( + Invocation.method(#registerWebView, [controller]), + returnValue: _i9.Future.value(), + returnValueForMissingStub: _i9.Future.value(), + ) + as _i9.Future); + + @override + int getWebViewId(_i8.WebViewController? controller) => + (super.noSuchMethod( + Invocation.method(#getWebViewId, [controller]), + returnValue: 0, + ) + as int); + + @override + void openAdInspector(_i15.OnAdInspectorClosedListener? listener) => + super.noSuchMethod( + Invocation.method(#openAdInspector, [listener]), + returnValueForMissingStub: null, + ); +} + +/// A class which mocks [WebViewControllerUtil]. +/// +/// See the documentation for Mockito's code generation for more information. +class MockWebViewControllerUtil extends _i1.Mock + implements _i5.WebViewControllerUtil { + MockWebViewControllerUtil() { + _i1.throwOnMissingStub(this); + } + + @override + int webViewIdentifier(_i8.WebViewController? controller) => + (super.noSuchMethod( + Invocation.method(#webViewIdentifier, [controller]), + returnValue: 0, + ) + as int); +} diff --git a/mih_ui/android/build/ios/SourcePackages/google_mobile_ads-8.0.0/test/rewarded_interstitial_ad_test.dart b/mih_ui/android/build/ios/SourcePackages/google_mobile_ads-8.0.0/test/rewarded_interstitial_ad_test.dart new file mode 100644 index 00000000..96bf75db --- /dev/null +++ b/mih_ui/android/build/ios/SourcePackages/google_mobile_ads-8.0.0/test/rewarded_interstitial_ad_test.dart @@ -0,0 +1,519 @@ +// Copyright 2021 Google LLC +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// https://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +import 'dart:async'; + +import 'package:flutter/services.dart'; +import 'package:flutter/foundation.dart'; +import 'package:flutter_test/flutter_test.dart'; +import 'package:google_mobile_ads/google_mobile_ads.dart'; +import 'package:google_mobile_ads/src/ad_instance_manager.dart'; +import 'test_util.dart'; + +// ignore_for_file: deprecated_member_use_from_same_package +void main() { + TestWidgetsFlutterBinding.ensureInitialized(); + + group('Rewarded Interstitial Ad Tests', () { + final List log = []; + + setUp(() async { + log.clear(); + instanceManager = AdInstanceManager( + 'plugins.flutter.io/google_mobile_ads', + ); + TestDefaultBinaryMessengerBinding.instance.defaultBinaryMessenger + .setMockMethodCallHandler(instanceManager.channel, ( + MethodCall methodCall, + ) async { + log.add(methodCall); + switch (methodCall.method) { + case 'loadRewardedInterstitialAd': + case 'showAdWithoutView': + case 'disposeAd': + case 'setServerSideVerificationOptions': + return Future.value(); + default: + assert(false); + return null; + } + }); + }); + + test('load show rewarded interstitial android', () async { + debugDefaultTargetPlatformOverride = TargetPlatform.android; + RewardedInterstitialAd? rewardedInterstitial; + AdRequest request = AdRequest(); + await RewardedInterstitialAd.load( + adUnitId: 'test-ad-unit', + request: request, + rewardedInterstitialAdLoadCallback: RewardedInterstitialAdLoadCallback( + onAdLoaded: (ad) { + rewardedInterstitial = ad; + }, + onAdFailedToLoad: (error) => null, + ), + ); + + RewardedInterstitialAd createdAd = + instanceManager.adFor(0) as RewardedInterstitialAd; + (createdAd).rewardedInterstitialAdLoadCallback.onAdLoaded(createdAd); + + expect(log, [ + isMethodCall( + 'loadRewardedInterstitialAd', + arguments: { + 'adId': 0, + 'adUnitId': 'test-ad-unit', + 'request': request, + 'adManagerRequest': null, + }, + ), + ]); + + expect(instanceManager.adFor(0), isNotNull); + expect(rewardedInterstitial, createdAd); + + log.clear(); + await rewardedInterstitial!.show( + onUserEarnedReward: (ad, reward) => null, + ); + expect(log, [ + isMethodCall( + 'showAdWithoutView', + arguments: {'adId': 0}, + ), + ]); + + // Check that full screen events are passed correctly. + Completer impressionCompleter = + Completer(); + Completer failedToShowCompleter = + Completer(); + Completer showedCompleter = + Completer(); + Completer dismissedCompleter = + Completer(); + Completer clickedCompleter = + Completer(); + + rewardedInterstitial!.fullScreenContentCallback = + FullScreenContentCallback( + onAdImpression: (ad) => impressionCompleter.complete(ad), + onAdShowedFullScreenContent: (ad) => showedCompleter.complete(ad), + onAdFailedToShowFullScreenContent: (ad, error) => + failedToShowCompleter.complete(ad), + onAdDismissedFullScreenContent: (ad) => + dismissedCompleter.complete(ad), + onAdClicked: (ad) => clickedCompleter.complete(ad), + ); + + await TestUtil.sendAdEvent(0, 'onAdImpression', instanceManager); + expect(await impressionCompleter.future, rewardedInterstitial); + + await TestUtil.sendAdEvent( + 0, + 'onAdShowedFullScreenContent', + instanceManager, + ); + expect(await showedCompleter.future, rewardedInterstitial); + + await TestUtil.sendAdEvent( + 0, + 'onAdDismissedFullScreenContent', + instanceManager, + ); + expect(await dismissedCompleter.future, rewardedInterstitial); + + await TestUtil.sendAdEvent(0, 'onAdClicked', instanceManager); + expect(await clickedCompleter.future, rewardedInterstitial); + + await TestUtil.sendAdEvent( + 0, + 'onFailedToShowFullScreenContent', + instanceManager, + {'error': AdError(1, 'domain', 'message')}, + ); + expect(await failedToShowCompleter.future, rewardedInterstitial); + + // Check paid event callback + Completer> paidEventCompleter = Completer>(); + rewardedInterstitial!.onPaidEvent = (ad, value, precision, currency) { + paidEventCompleter.complete([ad, value, precision, currency]); + }; + + const paidEventArgs = { + 'valueMicros': 1.2345, + 'precision': 0, + 'currencyCode': 'USD', + }; + await TestUtil.sendAdEvent( + 0, + 'onPaidEvent', + instanceManager, + paidEventArgs, + ); + List paidEventCallback = await paidEventCompleter.future; + expect(paidEventCallback[0], rewardedInterstitial); + expect(paidEventCallback[1], 1.2345); + expect(paidEventCallback[2], PrecisionType.unknown); + expect(paidEventCallback[3], 'USD'); + }); + + test('load show rewarded interstitial ios', () async { + debugDefaultTargetPlatformOverride = TargetPlatform.iOS; + RewardedInterstitialAd? rewardedInterstitial; + AdRequest request = AdRequest(); + await RewardedInterstitialAd.load( + adUnitId: 'test-ad-unit', + request: request, + rewardedInterstitialAdLoadCallback: RewardedInterstitialAdLoadCallback( + onAdLoaded: (ad) { + rewardedInterstitial = ad; + }, + onAdFailedToLoad: (error) => null, + ), + ); + + RewardedInterstitialAd createdAd = + instanceManager.adFor(0) as RewardedInterstitialAd; + (createdAd).rewardedInterstitialAdLoadCallback.onAdLoaded(createdAd); + + expect(log, [ + isMethodCall( + 'loadRewardedInterstitialAd', + arguments: { + 'adId': 0, + 'adUnitId': 'test-ad-unit', + 'request': request, + 'adManagerRequest': null, + }, + ), + ]); + + expect(instanceManager.adFor(0), isNotNull); + expect(rewardedInterstitial, createdAd); + + log.clear(); + await rewardedInterstitial!.show( + onUserEarnedReward: (ad, reward) => null, + ); + expect(log, [ + isMethodCall( + 'showAdWithoutView', + arguments: {'adId': 0}, + ), + ]); + + // Check that full screen events are passed correctly. + Completer impressionCompleter = + Completer(); + Completer failedToShowCompleter = + Completer(); + Completer showedCompleter = + Completer(); + Completer dismissedCompleter = + Completer(); + Completer clickedCompleter = + Completer(); + Completer willDismissCompleter = + Completer(); + + rewardedInterstitial!.fullScreenContentCallback = + FullScreenContentCallback( + onAdImpression: (ad) => impressionCompleter.complete(ad), + onAdShowedFullScreenContent: (ad) => showedCompleter.complete(ad), + onAdFailedToShowFullScreenContent: (ad, error) => + failedToShowCompleter.complete(ad), + onAdDismissedFullScreenContent: (ad) => + dismissedCompleter.complete(ad), + onAdClicked: (ad) => clickedCompleter.complete(ad), + onAdWillDismissFullScreenContent: (ad) => + willDismissCompleter.complete(ad), + ); + + await TestUtil.sendAdEvent(0, 'adDidRecordImpression', instanceManager); + expect(await impressionCompleter.future, rewardedInterstitial); + + await TestUtil.sendAdEvent( + 0, + 'adWillPresentFullScreenContent', + instanceManager, + ); + expect(await showedCompleter.future, rewardedInterstitial); + + await TestUtil.sendAdEvent( + 0, + 'adDidDismissFullScreenContent', + instanceManager, + ); + expect(await dismissedCompleter.future, rewardedInterstitial); + + await TestUtil.sendAdEvent( + 0, + 'adWillDismissFullScreenContent', + instanceManager, + ); + expect(await dismissedCompleter.future, rewardedInterstitial); + + await TestUtil.sendAdEvent(0, 'adDidRecordClick', instanceManager); + expect(await clickedCompleter.future, rewardedInterstitial); + + await TestUtil.sendAdEvent( + 0, + 'didFailToPresentFullScreenContentWithError', + instanceManager, + {'error': AdError(1, 'domain', 'message')}, + ); + expect(await failedToShowCompleter.future, rewardedInterstitial); + + // Check paid event callback + Completer> paidEventCompleter = Completer>(); + rewardedInterstitial!.onPaidEvent = (ad, value, precision, currency) { + paidEventCompleter.complete([ad, value, precision, currency]); + }; + + const paidEventArgs = { + 'valueMicros': 1.2345, + 'precision': 0, + 'currencyCode': 'USD', + }; + await TestUtil.sendAdEvent( + 0, + 'onPaidEvent', + instanceManager, + paidEventArgs, + ); + List paidEventCallback = await paidEventCompleter.future; + expect(paidEventCallback[0], rewardedInterstitial); + expect(paidEventCallback[1], 1.2345); + expect(paidEventCallback[2], PrecisionType.unknown); + expect(paidEventCallback[3], 'USD'); + }); + + test('load show rewarded interstitial with $AdManagerAdRequest', () async { + RewardedInterstitialAd? rewardedInterstitial; + AdManagerAdRequest request = AdManagerAdRequest(); + await RewardedInterstitialAd.loadWithAdManagerAdRequest( + adUnitId: 'test-ad-unit', + adManagerRequest: request, + rewardedInterstitialAdLoadCallback: RewardedInterstitialAdLoadCallback( + onAdLoaded: (ad) { + rewardedInterstitial = ad; + }, + onAdFailedToLoad: (error) => null, + ), + ); + + RewardedInterstitialAd createdAd = + instanceManager.adFor(0) as RewardedInterstitialAd; + (createdAd).rewardedInterstitialAdLoadCallback.onAdLoaded(createdAd); + + expect(log, [ + isMethodCall( + 'loadRewardedInterstitialAd', + arguments: { + 'adId': 0, + 'adUnitId': 'test-ad-unit', + 'request': null, + 'adManagerRequest': request, + }, + ), + ]); + + expect(instanceManager.adFor(0), isNotNull); + + log.clear(); + await rewardedInterstitial!.show( + onUserEarnedReward: (ad, reward) => null, + ); + expect(log, [ + isMethodCall( + 'showAdWithoutView', + arguments: {'adId': 0}, + ), + ]); + }); + + test('onAdFailedToLoad rewarded interstitial', () async { + final Completer resultsCompleter = Completer(); + final AdRequest request = AdRequest(); + await RewardedInterstitialAd.load( + adUnitId: 'test-ad-unit', + request: request, + rewardedInterstitialAdLoadCallback: RewardedInterstitialAdLoadCallback( + onAdLoaded: (ad) => null, + onAdFailedToLoad: (error) => resultsCompleter.complete(error), + ), + ); + + expect(log, [ + isMethodCall( + 'loadRewardedInterstitialAd', + arguments: { + 'adId': 0, + 'adUnitId': 'test-ad-unit', + 'request': request, + 'adManagerRequest': null, + }, + ), + ]); + + expect(instanceManager.adFor(0), isNotNull); + + // Simulate onAdFailedToLoad. + AdError adError = AdError(1, 'domain', 'error-message'); + AdapterResponseInfo adapterResponseInfo = AdapterResponseInfo( + adapterClassName: 'adapter-name', + latencyMillis: 500, + description: 'message', + adUnitMapping: {'key': 'value'}, + adError: adError, + adSourceName: 'adSourceName', + adSourceId: 'adSourceId', + adSourceInstanceName: 'adSourceInstanceName', + adSourceInstanceId: 'adSourceInstanceId', + ); + + List adapterResponses = [adapterResponseInfo]; + ResponseInfo responseInfo = ResponseInfo( + responseId: 'id', + mediationAdapterClassName: 'className', + adapterResponses: adapterResponses, + responseExtras: {'key': 12345}, + ); + + final MethodCall methodCall = MethodCall('onAdEvent', { + 'adId': 0, + 'eventName': 'onAdFailedToLoad', + 'loadAdError': LoadAdError(1, 'domain', 'message', responseInfo), + }); + + final ByteData data = instanceManager.channel.codec.encodeMethodCall( + methodCall, + ); + await TestDefaultBinaryMessengerBinding.instance.defaultBinaryMessenger + .handlePlatformMessage( + 'plugins.flutter.io/google_mobile_ads', + data, + (data) {}, + ); + + // The ad reference should be freed when load failure occurs. + expect(instanceManager.adFor(0), isNull); + + // Check that load error matches. + final LoadAdError result = await resultsCompleter.future; + expect(result.code, 1); + expect(result.domain, 'domain'); + expect(result.message, 'message'); + expect(result.responseInfo!.responseId, responseInfo.responseId); + expect( + result.responseInfo!.mediationAdapterClassName, + responseInfo.mediationAdapterClassName, + ); + expect(result.responseInfo!.responseExtras, responseInfo.responseExtras); + List responses = + result.responseInfo!.adapterResponses!; + expect(responses.first.adapterClassName, 'adapter-name'); + expect(responses.first.latencyMillis, 500); + expect(responses.first.description, 'message'); + expect(responses.first.adUnitMapping, {'key': 'value'}); + expect(responses.first.adError!.code, 1); + expect(responses.first.adError!.message, 'error-message'); + expect(responses.first.adError!.domain, 'domain'); + }); + + test('onRewardedInterstitialAdUserEarnedReward', () async { + final Completer> resultCompleter = + Completer>(); + + RewardedInterstitialAd? rewardedInterstitial; + await RewardedInterstitialAd.load( + adUnitId: 'test-ad-unit', + request: AdRequest(), + rewardedInterstitialAdLoadCallback: RewardedInterstitialAdLoadCallback( + onAdLoaded: (ad) { + rewardedInterstitial = ad; + }, + onAdFailedToLoad: (error) => null, + ), + ); + + RewardedInterstitialAd createdAd = + instanceManager.adFor(0) as RewardedInterstitialAd; + createdAd.rewardedInterstitialAdLoadCallback.onAdLoaded(createdAd); + // Reward callback is now set when you call show. + await rewardedInterstitial!.show( + onUserEarnedReward: (ad, item) => + resultCompleter.complete([ad, item]), + ); + + final MethodCall methodCall = MethodCall('onAdEvent', { + 'adId': 0, + 'eventName': 'onRewardedInterstitialAdUserEarnedReward', + 'rewardItem': RewardItem(1, 'one'), + }); + + final ByteData data = instanceManager.channel.codec.encodeMethodCall( + methodCall, + ); + await TestDefaultBinaryMessengerBinding.instance.defaultBinaryMessenger + .handlePlatformMessage( + 'plugins.flutter.io/google_mobile_ads', + data, + (data) {}, + ); + + final List result = await resultCompleter.future; + expect(result[0], rewardedInterstitial!); + expect(result[1].amount, 1); + expect(result[1].type, 'one'); + }); + + test('setServerSideVerificationOptions', () async { + final adLoadCompleter = Completer(); + await RewardedInterstitialAd.load( + adUnitId: 'test-ad-unit', + request: AdRequest(), + rewardedInterstitialAdLoadCallback: RewardedInterstitialAdLoadCallback( + onAdLoaded: (ad) { + adLoadCompleter.complete(ad); + }, + onAdFailedToLoad: (_) => null, + ), + ); + + await TestUtil.sendAdEvent(0, 'onAdLoaded', instanceManager); + expect(adLoadCompleter.isCompleted, true); + final ad = await adLoadCompleter.future; + + log.clear(); + final ssv = ServerSideVerificationOptions( + userId: 'id', + customData: 'data', + ); + await ad.setServerSideOptions(ssv); + expect(log, [ + isMethodCall( + 'setServerSideVerificationOptions', + arguments: { + 'adId': 0, + 'serverSideVerificationOptions': ssv, + }, + ), + ]); + }); + }); +} diff --git a/mih_ui/android/build/ios/SourcePackages/google_mobile_ads-8.0.0/test/test_util.dart b/mih_ui/android/build/ios/SourcePackages/google_mobile_ads-8.0.0/test/test_util.dart new file mode 100644 index 00000000..cfaa6b6e --- /dev/null +++ b/mih_ui/android/build/ios/SourcePackages/google_mobile_ads-8.0.0/test/test_util.dart @@ -0,0 +1,47 @@ +// Copyright 2021 Google LLC +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// https://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +import 'package:flutter/services.dart'; +import 'package:flutter_test/flutter_test.dart'; +import 'package:google_mobile_ads/src/ad_instance_manager.dart'; + +/// Shared test functions. +class TestUtil { + /// Mocks sending an ad event to [instanceManager]. + /// + /// Creates an `onAdEvent` [MethodCall] with [adId], [eventName] and + /// [additionalArgs], encodes it into [ByteData] and sends it as a platform + /// message to [instanceManager]. + static Future sendAdEvent( + int adId, + String eventName, + AdInstanceManager instanceManager, [ + Map? additionalArgs, + ]) async { + Map args = {'adId': adId, 'eventName': eventName}; + additionalArgs?.entries.forEach( + (element) => args[element.key] = element.value, + ); + final MethodCall methodCall = MethodCall('onAdEvent', args); + final ByteData data = instanceManager.channel.codec.encodeMethodCall( + methodCall, + ); + await TestDefaultBinaryMessengerBinding.instance.defaultBinaryMessenger + .handlePlatformMessage( + 'plugins.flutter.io/google_mobile_ads', + data, + (data) {}, + ); + } +} diff --git a/mih_ui/android/build/ios/SourcePackages/google_mobile_ads-8.0.0/test/ump/consent_form_impl_test.dart b/mih_ui/android/build/ios/SourcePackages/google_mobile_ads-8.0.0/test/ump/consent_form_impl_test.dart new file mode 100644 index 00000000..4f44551e --- /dev/null +++ b/mih_ui/android/build/ios/SourcePackages/google_mobile_ads-8.0.0/test/ump/consent_form_impl_test.dart @@ -0,0 +1,80 @@ +// Copyright 2022 Google LLC +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// https://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +import 'dart:async'; + +import 'package:google_mobile_ads/src/ump/consent_form_impl.dart'; +import 'package:google_mobile_ads/src/ump/form_error.dart'; +import 'package:flutter_test/flutter_test.dart'; +import 'package:google_mobile_ads/src/ump/user_messaging_channel.dart'; +import 'package:mockito/annotations.dart'; +import 'package:mockito/mockito.dart'; + +import 'consent_form_impl_test.mocks.dart'; + +@GenerateMocks([UserMessagingChannel]) +void main() { + TestWidgetsFlutterBinding.ensureInitialized(); + + group('ConsentFormImpl', () { + late MockUserMessagingChannel mockChannel; + + setUp(() async { + mockChannel = MockUserMessagingChannel(); + UserMessagingChannel.instance = mockChannel; + }); + + test('show() success', () async { + when(mockChannel.show(any, any)).thenAnswer((realInvocation) { + realInvocation.positionalArguments[1](null); + }); + ConsentFormImpl form = ConsentFormImpl(1); + Completer errorCompleter = Completer(); + + form.show((formError) => errorCompleter.complete(formError)); + + FormError? error = await errorCompleter.future; + + expect(errorCompleter.isCompleted, true); + expect(error, null); + }); + + test('show() failure', () async { + FormError error = FormError(errorCode: 1, message: 'msg'); + when(mockChannel.show(any, any)).thenAnswer((realInvocation) { + realInvocation.positionalArguments[1](error); + }); + ConsentFormImpl form = ConsentFormImpl(1); + Completer errorCompleter = Completer(); + + form.show((formError) => errorCompleter.complete(formError)); + + FormError? completedError = await errorCompleter.future; + + expect(errorCompleter.isCompleted, true); + expect(error, completedError); + }); + + test('dispose()', () async { + ConsentFormImpl form = ConsentFormImpl(1); + + when( + mockChannel.disposeConsentForm(form), + ).thenAnswer((realInvocation) => Future.value()); + + await form.dispose(); + verify(mockChannel.disposeConsentForm(form)); + }); + }); +} diff --git a/mih_ui/android/build/ios/SourcePackages/google_mobile_ads-8.0.0/test/ump/consent_form_impl_test.mocks.dart b/mih_ui/android/build/ios/SourcePackages/google_mobile_ads-8.0.0/test/ump/consent_form_impl_test.mocks.dart new file mode 100644 index 00000000..72bb79f7 --- /dev/null +++ b/mih_ui/android/build/ios/SourcePackages/google_mobile_ads-8.0.0/test/ump/consent_form_impl_test.mocks.dart @@ -0,0 +1,140 @@ +// Mocks generated by Mockito 5.4.4 from annotations +// in google_mobile_ads/test/ump/consent_form_impl_test.dart. +// Do not manually edit this file. + +// ignore_for_file: no_leading_underscores_for_library_prefixes +import 'dart:async' as _i5; + +import 'package:google_mobile_ads/src/ump/consent_form.dart' as _i6; +import 'package:google_mobile_ads/src/ump/consent_information.dart' as _i4; +import 'package:google_mobile_ads/src/ump/consent_request_parameters.dart' + as _i3; +import 'package:google_mobile_ads/src/ump/form_error.dart' as _i7; +import 'package:google_mobile_ads/src/ump/user_messaging_channel.dart' as _i2; +import 'package:mockito/mockito.dart' as _i1; + +// ignore_for_file: type=lint +// ignore_for_file: avoid_redundant_argument_values +// ignore_for_file: avoid_setters_without_getters +// ignore_for_file: comment_references +// ignore_for_file: deprecated_member_use +// ignore_for_file: deprecated_member_use_from_same_package +// ignore_for_file: implementation_imports +// ignore_for_file: invalid_use_of_visible_for_testing_member +// ignore_for_file: prefer_const_constructors +// ignore_for_file: unnecessary_parenthesis +// ignore_for_file: camel_case_types +// ignore_for_file: subtype_of_sealed_class + +/// A class which mocks [UserMessagingChannel]. +/// +/// See the documentation for Mockito's code generation for more information. +class MockUserMessagingChannel extends _i1.Mock + implements _i2.UserMessagingChannel { + MockUserMessagingChannel() { + _i1.throwOnMissingStub(this); + } + + @override + void requestConsentInfoUpdate( + _i3.ConsentRequestParameters? params, + _i4.OnConsentInfoUpdateSuccessListener? successListener, + _i4.OnConsentInfoUpdateFailureListener? failureListener, + ) => super.noSuchMethod( + Invocation.method(#requestConsentInfoUpdate, [ + params, + successListener, + failureListener, + ]), + returnValueForMissingStub: null, + ); + + @override + _i5.Future isConsentFormAvailable() => + (super.noSuchMethod( + Invocation.method(#isConsentFormAvailable, []), + returnValue: _i5.Future.value(false), + ) + as _i5.Future); + + @override + _i5.Future<_i4.ConsentStatus> getConsentStatus() => + (super.noSuchMethod( + Invocation.method(#getConsentStatus, []), + returnValue: _i5.Future<_i4.ConsentStatus>.value( + _i4.ConsentStatus.notRequired, + ), + ) + as _i5.Future<_i4.ConsentStatus>); + + @override + _i5.Future reset() => + (super.noSuchMethod( + Invocation.method(#reset, []), + returnValue: _i5.Future.value(), + returnValueForMissingStub: _i5.Future.value(), + ) + as _i5.Future); + + @override + _i5.Future canRequestAds() => + (super.noSuchMethod( + Invocation.method(#canRequestAds, []), + returnValue: _i5.Future.value(false), + ) + as _i5.Future); + + @override + _i5.Future<_i4.PrivacyOptionsRequirementStatus> + getPrivacyOptionsRequirementStatus() => + (super.noSuchMethod( + Invocation.method(#getPrivacyOptionsRequirementStatus, []), + returnValue: _i5.Future<_i4.PrivacyOptionsRequirementStatus>.value( + _i4.PrivacyOptionsRequirementStatus.notRequired, + ), + ) + as _i5.Future<_i4.PrivacyOptionsRequirementStatus>); + + @override + void loadConsentForm( + _i6.OnConsentFormLoadSuccessListener? successListener, + _i6.OnConsentFormLoadFailureListener? failureListener, + ) => super.noSuchMethod( + Invocation.method(#loadConsentForm, [successListener, failureListener]), + returnValueForMissingStub: null, + ); + + @override + _i5.Future<_i7.FormError?> loadAndShowConsentFormIfRequired() => + (super.noSuchMethod( + Invocation.method(#loadAndShowConsentFormIfRequired, []), + returnValue: _i5.Future<_i7.FormError?>.value(), + ) + as _i5.Future<_i7.FormError?>); + + @override + void show( + _i6.ConsentForm? consentForm, + _i6.OnConsentFormDismissedListener? onConsentFormDismissedListener, + ) => super.noSuchMethod( + Invocation.method(#show, [consentForm, onConsentFormDismissedListener]), + returnValueForMissingStub: null, + ); + + @override + _i5.Future<_i7.FormError?> showPrivacyOptionsForm() => + (super.noSuchMethod( + Invocation.method(#showPrivacyOptionsForm, []), + returnValue: _i5.Future<_i7.FormError?>.value(), + ) + as _i5.Future<_i7.FormError?>); + + @override + _i5.Future disposeConsentForm(_i6.ConsentForm? consentForm) => + (super.noSuchMethod( + Invocation.method(#disposeConsentForm, [consentForm]), + returnValue: _i5.Future.value(), + returnValueForMissingStub: _i5.Future.value(), + ) + as _i5.Future); +} diff --git a/mih_ui/android/build/ios/SourcePackages/google_mobile_ads-8.0.0/test/ump/consent_form_test.dart b/mih_ui/android/build/ios/SourcePackages/google_mobile_ads-8.0.0/test/ump/consent_form_test.dart new file mode 100644 index 00000000..27a510aa --- /dev/null +++ b/mih_ui/android/build/ios/SourcePackages/google_mobile_ads-8.0.0/test/ump/consent_form_test.dart @@ -0,0 +1,133 @@ +// Copyright 2022 Google LLC +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// https://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +import 'dart:async'; + +import 'package:google_mobile_ads/src/ump/consent_form.dart'; +import 'package:google_mobile_ads/src/ump/consent_form_impl.dart'; +import 'package:google_mobile_ads/src/ump/form_error.dart'; +import 'package:flutter_test/flutter_test.dart'; +import 'package:google_mobile_ads/src/ump/user_messaging_channel.dart'; +import 'package:mockito/annotations.dart'; +import 'package:mockito/mockito.dart'; + +import 'consent_form_test.mocks.dart'; + +@GenerateNiceMocks(>[MockSpec()]) +void main() { + TestWidgetsFlutterBinding.ensureInitialized(); + + group('ConsentForm', () { + late MockUserMessagingChannel mockChannel; + + setUp(() async { + mockChannel = MockUserMessagingChannel(); + UserMessagingChannel.instance = mockChannel; + }); + + test('showPrivacyOptionsForm success', () async { + Completer formCompleter = Completer(); + + await ConsentForm.showPrivacyOptionsForm( + (formError) => formCompleter.complete(formError), + ); + + FormError? formError = await formCompleter.future; + expect(formError, null); + }); + + test('showPrivacyOptionsForm failure', () async { + FormError? testError = FormError(errorCode: 1, message: 'testErrorMsg'); + when( + mockChannel.showPrivacyOptionsForm(), + ).thenAnswer((realInvocation) => Future.value(testError)); + Completer formCompleter = Completer(); + + await ConsentForm.showPrivacyOptionsForm( + (formError) => formCompleter.complete(formError), + ); + + FormError? formError = await formCompleter.future; + expect(formError, testError); + }); + + test('loadConsentForm() success', () async { + ConsentForm form = ConsentFormImpl(2); + + when(mockChannel.loadConsentForm(any, any)).thenAnswer( + (realInvocation) => realInvocation.positionalArguments[0](form), + ); + + Completer successCompleter = Completer(); + Completer errorCompleter = Completer(); + + ConsentForm.loadConsentForm( + (consentForm) => successCompleter.complete(consentForm), + (formError) => errorCompleter.complete(formError), + ); + + ConsentForm responseForm = await successCompleter.future; + expect(successCompleter.isCompleted, true); + expect(errorCompleter.isCompleted, false); + expect(form, responseForm); + }); + + test('loadConsentForm() failure', () async { + FormError formError = FormError(errorCode: 1, message: 'message'); + + when(mockChannel.loadConsentForm(any, any)).thenAnswer( + (realInvocation) => realInvocation.positionalArguments[1](formError), + ); + + Completer successCompleter = Completer(); + Completer errorCompleter = Completer(); + + ConsentForm.loadConsentForm( + (consentForm) => successCompleter.complete(consentForm), + (formError) => errorCompleter.complete(formError), + ); + + FormError responseError = await errorCompleter.future; + expect(formError, responseError); + expect(successCompleter.isCompleted, false); + expect(errorCompleter.isCompleted, true); + }); + + test('loadAndShowConsentFormIfRequired success', () async { + Completer formCompleter = Completer(); + + await ConsentForm.loadAndShowConsentFormIfRequired( + (formError) => formCompleter.complete(formError), + ); + + FormError? formError = await formCompleter.future; + expect(formError, null); + }); + + test('loadAndShowConsentFormIfRequired failure', () async { + FormError? testError = FormError(errorCode: 1, message: 'testErrorMsg'); + when( + mockChannel.loadAndShowConsentFormIfRequired(), + ).thenAnswer((realInvocation) => Future.value(testError)); + Completer formCompleter = Completer(); + + await ConsentForm.loadAndShowConsentFormIfRequired( + (formError) => formCompleter.complete(formError), + ); + + FormError? formError = await formCompleter.future; + expect(formError, testError); + }); + }); +} diff --git a/mih_ui/android/build/ios/SourcePackages/google_mobile_ads-8.0.0/test/ump/consent_form_test.mocks.dart b/mih_ui/android/build/ios/SourcePackages/google_mobile_ads-8.0.0/test/ump/consent_form_test.mocks.dart new file mode 100644 index 00000000..301aee2f --- /dev/null +++ b/mih_ui/android/build/ios/SourcePackages/google_mobile_ads-8.0.0/test/ump/consent_form_test.mocks.dart @@ -0,0 +1,147 @@ +// Mocks generated by Mockito 5.4.4 from annotations +// in google_mobile_ads/test/ump/consent_form_test.dart. +// Do not manually edit this file. + +// ignore_for_file: no_leading_underscores_for_library_prefixes +import 'dart:async' as _i5; + +import 'package:google_mobile_ads/src/ump/consent_form.dart' as _i6; +import 'package:google_mobile_ads/src/ump/consent_information.dart' as _i4; +import 'package:google_mobile_ads/src/ump/consent_request_parameters.dart' + as _i3; +import 'package:google_mobile_ads/src/ump/form_error.dart' as _i7; +import 'package:google_mobile_ads/src/ump/user_messaging_channel.dart' as _i2; +import 'package:mockito/mockito.dart' as _i1; + +// ignore_for_file: type=lint +// ignore_for_file: avoid_redundant_argument_values +// ignore_for_file: avoid_setters_without_getters +// ignore_for_file: comment_references +// ignore_for_file: deprecated_member_use +// ignore_for_file: deprecated_member_use_from_same_package +// ignore_for_file: implementation_imports +// ignore_for_file: invalid_use_of_visible_for_testing_member +// ignore_for_file: prefer_const_constructors +// ignore_for_file: unnecessary_parenthesis +// ignore_for_file: camel_case_types +// ignore_for_file: subtype_of_sealed_class + +/// A class which mocks [UserMessagingChannel]. +/// +/// See the documentation for Mockito's code generation for more information. +class MockUserMessagingChannel extends _i1.Mock + implements _i2.UserMessagingChannel { + @override + void requestConsentInfoUpdate( + _i3.ConsentRequestParameters? params, + _i4.OnConsentInfoUpdateSuccessListener? successListener, + _i4.OnConsentInfoUpdateFailureListener? failureListener, + ) => super.noSuchMethod( + Invocation.method(#requestConsentInfoUpdate, [ + params, + successListener, + failureListener, + ]), + returnValueForMissingStub: null, + ); + + @override + _i5.Future isConsentFormAvailable() => + (super.noSuchMethod( + Invocation.method(#isConsentFormAvailable, []), + returnValue: _i5.Future.value(false), + returnValueForMissingStub: _i5.Future.value(false), + ) + as _i5.Future); + + @override + _i5.Future<_i4.ConsentStatus> getConsentStatus() => + (super.noSuchMethod( + Invocation.method(#getConsentStatus, []), + returnValue: _i5.Future<_i4.ConsentStatus>.value( + _i4.ConsentStatus.notRequired, + ), + returnValueForMissingStub: _i5.Future<_i4.ConsentStatus>.value( + _i4.ConsentStatus.notRequired, + ), + ) + as _i5.Future<_i4.ConsentStatus>); + + @override + _i5.Future reset() => + (super.noSuchMethod( + Invocation.method(#reset, []), + returnValue: _i5.Future.value(), + returnValueForMissingStub: _i5.Future.value(), + ) + as _i5.Future); + + @override + _i5.Future canRequestAds() => + (super.noSuchMethod( + Invocation.method(#canRequestAds, []), + returnValue: _i5.Future.value(false), + returnValueForMissingStub: _i5.Future.value(false), + ) + as _i5.Future); + + @override + _i5.Future<_i4.PrivacyOptionsRequirementStatus> + getPrivacyOptionsRequirementStatus() => + (super.noSuchMethod( + Invocation.method(#getPrivacyOptionsRequirementStatus, []), + returnValue: _i5.Future<_i4.PrivacyOptionsRequirementStatus>.value( + _i4.PrivacyOptionsRequirementStatus.notRequired, + ), + returnValueForMissingStub: + _i5.Future<_i4.PrivacyOptionsRequirementStatus>.value( + _i4.PrivacyOptionsRequirementStatus.notRequired, + ), + ) + as _i5.Future<_i4.PrivacyOptionsRequirementStatus>); + + @override + void loadConsentForm( + _i6.OnConsentFormLoadSuccessListener? successListener, + _i6.OnConsentFormLoadFailureListener? failureListener, + ) => super.noSuchMethod( + Invocation.method(#loadConsentForm, [successListener, failureListener]), + returnValueForMissingStub: null, + ); + + @override + _i5.Future<_i7.FormError?> loadAndShowConsentFormIfRequired() => + (super.noSuchMethod( + Invocation.method(#loadAndShowConsentFormIfRequired, []), + returnValue: _i5.Future<_i7.FormError?>.value(), + returnValueForMissingStub: _i5.Future<_i7.FormError?>.value(), + ) + as _i5.Future<_i7.FormError?>); + + @override + void show( + _i6.ConsentForm? consentForm, + _i6.OnConsentFormDismissedListener? onConsentFormDismissedListener, + ) => super.noSuchMethod( + Invocation.method(#show, [consentForm, onConsentFormDismissedListener]), + returnValueForMissingStub: null, + ); + + @override + _i5.Future<_i7.FormError?> showPrivacyOptionsForm() => + (super.noSuchMethod( + Invocation.method(#showPrivacyOptionsForm, []), + returnValue: _i5.Future<_i7.FormError?>.value(), + returnValueForMissingStub: _i5.Future<_i7.FormError?>.value(), + ) + as _i5.Future<_i7.FormError?>); + + @override + _i5.Future disposeConsentForm(_i6.ConsentForm? consentForm) => + (super.noSuchMethod( + Invocation.method(#disposeConsentForm, [consentForm]), + returnValue: _i5.Future.value(), + returnValueForMissingStub: _i5.Future.value(), + ) + as _i5.Future); +} diff --git a/mih_ui/android/build/ios/SourcePackages/google_mobile_ads-8.0.0/test/ump/consent_information_impl_test.dart b/mih_ui/android/build/ios/SourcePackages/google_mobile_ads-8.0.0/test/ump/consent_information_impl_test.dart new file mode 100644 index 00000000..9e8027e7 --- /dev/null +++ b/mih_ui/android/build/ios/SourcePackages/google_mobile_ads-8.0.0/test/ump/consent_information_impl_test.dart @@ -0,0 +1,140 @@ +// Copyright 2022 Google LLC +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// https://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +import 'dart:async'; + +import 'package:google_mobile_ads/google_mobile_ads.dart'; +import 'package:google_mobile_ads/src/ump/consent_information_impl.dart'; +import 'package:flutter_test/flutter_test.dart'; +import 'package:google_mobile_ads/src/ump/user_messaging_channel.dart'; +import 'package:mockito/annotations.dart'; +import 'package:mockito/mockito.dart'; + +import 'consent_information_impl_test.mocks.dart'; + +@GenerateMocks([UserMessagingChannel]) +void main() { + TestWidgetsFlutterBinding.ensureInitialized(); + + group('ConsentInformationImpl', () { + late MockUserMessagingChannel mockChannel; + late ConsentInformationImpl consentInfo; + + setUp(() async { + mockChannel = MockUserMessagingChannel(); + UserMessagingChannel.instance = mockChannel; + consentInfo = ConsentInformationImpl(); + }); + + test('reset()', () async { + when(mockChannel.reset()).thenAnswer((_) => Future.value()); + + await consentInfo.reset(); + + verify(mockChannel.reset()); + }); + + test('getConsentStatus()', () async { + ConsentStatus status = ConsentStatus.required; + when( + mockChannel.getConsentStatus(), + ).thenAnswer((_) => Future.value(status)); + + ConsentStatus responseStatus = await consentInfo.getConsentStatus(); + + verify(mockChannel.getConsentStatus()); + expect(responseStatus, status); + }); + + test('isConsentFormAvailable()', () async { + when( + mockChannel.isConsentFormAvailable(), + ).thenAnswer((_) => Future.value(false)); + + bool isConsentFormAvailable = await consentInfo.isConsentFormAvailable(); + + verify(mockChannel.isConsentFormAvailable()); + expect(isConsentFormAvailable, false); + }); + + test('requestConsentInfoUpdate() success', () async { + when(mockChannel.requestConsentInfoUpdate(any, any, any)).thenAnswer(( + invocation, + ) { + invocation.positionalArguments[1](); + }); + + ConsentRequestParameters params = ConsentRequestParameters(); + Completer successCompleter = Completer(); + Completer errorCompleter = Completer(); + + consentInfo.requestConsentInfoUpdate( + params, + () => successCompleter.complete(), + (error) => errorCompleter.complete(error), + ); + + await successCompleter.future; + verify(mockChannel.requestConsentInfoUpdate(params, any, any)); + expect(successCompleter.isCompleted, true); + expect(errorCompleter.isCompleted, false); + }); + + test('requestConsentInfoUpdate() failure', () async { + FormError formError = FormError(errorCode: 1, message: 'msg'); + when(mockChannel.requestConsentInfoUpdate(any, any, any)).thenAnswer(( + invocation, + ) { + invocation.positionalArguments[2](formError); + }); + + ConsentRequestParameters params = ConsentRequestParameters(); + Completer successCompleter = Completer(); + Completer errorCompleter = Completer(); + + consentInfo.requestConsentInfoUpdate( + params, + () => successCompleter.complete(), + (error) => errorCompleter.complete(error), + ); + + FormError responseError = await errorCompleter.future; + verify(mockChannel.requestConsentInfoUpdate(params, any, any)); + expect(successCompleter.isCompleted, false); + expect(errorCompleter.isCompleted, true); + expect(responseError, formError); + }); + + test('canRequestAds()', () async { + when(mockChannel.canRequestAds()).thenAnswer((_) => Future.value(true)); + + bool canRequestAds = await consentInfo.canRequestAds(); + + verify(mockChannel.canRequestAds()); + expect(canRequestAds, true); + }); + + test('getPrivacyOptionsRequirementStatus()', () async { + when(mockChannel.getPrivacyOptionsRequirementStatus()).thenAnswer( + (_) => Future.value(PrivacyOptionsRequirementStatus.required), + ); + + PrivacyOptionsRequirementStatus status = await consentInfo + .getPrivacyOptionsRequirementStatus(); + + verify(mockChannel.getPrivacyOptionsRequirementStatus()); + expect(status, PrivacyOptionsRequirementStatus.required); + }); + }); +} diff --git a/mih_ui/android/build/ios/SourcePackages/google_mobile_ads-8.0.0/test/ump/consent_information_impl_test.mocks.dart b/mih_ui/android/build/ios/SourcePackages/google_mobile_ads-8.0.0/test/ump/consent_information_impl_test.mocks.dart new file mode 100644 index 00000000..3edbd3b1 --- /dev/null +++ b/mih_ui/android/build/ios/SourcePackages/google_mobile_ads-8.0.0/test/ump/consent_information_impl_test.mocks.dart @@ -0,0 +1,140 @@ +// Mocks generated by Mockito 5.4.4 from annotations +// in google_mobile_ads/test/ump/consent_information_impl_test.dart. +// Do not manually edit this file. + +// ignore_for_file: no_leading_underscores_for_library_prefixes +import 'dart:async' as _i5; + +import 'package:google_mobile_ads/src/ump/consent_form.dart' as _i6; +import 'package:google_mobile_ads/src/ump/consent_information.dart' as _i4; +import 'package:google_mobile_ads/src/ump/consent_request_parameters.dart' + as _i3; +import 'package:google_mobile_ads/src/ump/form_error.dart' as _i7; +import 'package:google_mobile_ads/src/ump/user_messaging_channel.dart' as _i2; +import 'package:mockito/mockito.dart' as _i1; + +// ignore_for_file: type=lint +// ignore_for_file: avoid_redundant_argument_values +// ignore_for_file: avoid_setters_without_getters +// ignore_for_file: comment_references +// ignore_for_file: deprecated_member_use +// ignore_for_file: deprecated_member_use_from_same_package +// ignore_for_file: implementation_imports +// ignore_for_file: invalid_use_of_visible_for_testing_member +// ignore_for_file: prefer_const_constructors +// ignore_for_file: unnecessary_parenthesis +// ignore_for_file: camel_case_types +// ignore_for_file: subtype_of_sealed_class + +/// A class which mocks [UserMessagingChannel]. +/// +/// See the documentation for Mockito's code generation for more information. +class MockUserMessagingChannel extends _i1.Mock + implements _i2.UserMessagingChannel { + MockUserMessagingChannel() { + _i1.throwOnMissingStub(this); + } + + @override + void requestConsentInfoUpdate( + _i3.ConsentRequestParameters? params, + _i4.OnConsentInfoUpdateSuccessListener? successListener, + _i4.OnConsentInfoUpdateFailureListener? failureListener, + ) => super.noSuchMethod( + Invocation.method(#requestConsentInfoUpdate, [ + params, + successListener, + failureListener, + ]), + returnValueForMissingStub: null, + ); + + @override + _i5.Future isConsentFormAvailable() => + (super.noSuchMethod( + Invocation.method(#isConsentFormAvailable, []), + returnValue: _i5.Future.value(false), + ) + as _i5.Future); + + @override + _i5.Future<_i4.ConsentStatus> getConsentStatus() => + (super.noSuchMethod( + Invocation.method(#getConsentStatus, []), + returnValue: _i5.Future<_i4.ConsentStatus>.value( + _i4.ConsentStatus.notRequired, + ), + ) + as _i5.Future<_i4.ConsentStatus>); + + @override + _i5.Future reset() => + (super.noSuchMethod( + Invocation.method(#reset, []), + returnValue: _i5.Future.value(), + returnValueForMissingStub: _i5.Future.value(), + ) + as _i5.Future); + + @override + _i5.Future canRequestAds() => + (super.noSuchMethod( + Invocation.method(#canRequestAds, []), + returnValue: _i5.Future.value(false), + ) + as _i5.Future); + + @override + _i5.Future<_i4.PrivacyOptionsRequirementStatus> + getPrivacyOptionsRequirementStatus() => + (super.noSuchMethod( + Invocation.method(#getPrivacyOptionsRequirementStatus, []), + returnValue: _i5.Future<_i4.PrivacyOptionsRequirementStatus>.value( + _i4.PrivacyOptionsRequirementStatus.notRequired, + ), + ) + as _i5.Future<_i4.PrivacyOptionsRequirementStatus>); + + @override + void loadConsentForm( + _i6.OnConsentFormLoadSuccessListener? successListener, + _i6.OnConsentFormLoadFailureListener? failureListener, + ) => super.noSuchMethod( + Invocation.method(#loadConsentForm, [successListener, failureListener]), + returnValueForMissingStub: null, + ); + + @override + _i5.Future<_i7.FormError?> loadAndShowConsentFormIfRequired() => + (super.noSuchMethod( + Invocation.method(#loadAndShowConsentFormIfRequired, []), + returnValue: _i5.Future<_i7.FormError?>.value(), + ) + as _i5.Future<_i7.FormError?>); + + @override + void show( + _i6.ConsentForm? consentForm, + _i6.OnConsentFormDismissedListener? onConsentFormDismissedListener, + ) => super.noSuchMethod( + Invocation.method(#show, [consentForm, onConsentFormDismissedListener]), + returnValueForMissingStub: null, + ); + + @override + _i5.Future<_i7.FormError?> showPrivacyOptionsForm() => + (super.noSuchMethod( + Invocation.method(#showPrivacyOptionsForm, []), + returnValue: _i5.Future<_i7.FormError?>.value(), + ) + as _i5.Future<_i7.FormError?>); + + @override + _i5.Future disposeConsentForm(_i6.ConsentForm? consentForm) => + (super.noSuchMethod( + Invocation.method(#disposeConsentForm, [consentForm]), + returnValue: _i5.Future.value(), + returnValueForMissingStub: _i5.Future.value(), + ) + as _i5.Future); +} diff --git a/mih_ui/android/build/ios/SourcePackages/google_mobile_ads-8.0.0/test/ump/user_messaging_channel_test.dart b/mih_ui/android/build/ios/SourcePackages/google_mobile_ads-8.0.0/test/ump/user_messaging_channel_test.dart new file mode 100644 index 00000000..0b92a19e --- /dev/null +++ b/mih_ui/android/build/ios/SourcePackages/google_mobile_ads-8.0.0/test/ump/user_messaging_channel_test.dart @@ -0,0 +1,460 @@ +// Copyright 2022 Google LLC +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// https://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +import 'dart:async'; + +import 'package:google_mobile_ads/src/ump/consent_form_impl.dart'; +import 'package:flutter/services.dart'; +import 'package:flutter_test/flutter_test.dart'; +import 'package:google_mobile_ads/google_mobile_ads.dart'; +import 'package:google_mobile_ads/src/ump/user_messaging_channel.dart'; +import 'package:google_mobile_ads/src/ump/user_messaging_codec.dart'; + +void main() { + TestWidgetsFlutterBinding.ensureInitialized(); + + group('UserMessagingChannel', () { + late MethodChannel methodChannel; + late UserMessagingChannel channel; + setUp(() async { + methodChannel = MethodChannel( + 'test-channel', + StandardMethodCodec(UserMessagingCodec()), + ); + channel = UserMessagingChannel(methodChannel); + }); + + test('requestConsentInfoUpdate() success', () async { + ConsentRequestParameters params = ConsentRequestParameters( + tagForUnderAgeOfConsent: true, + consentDebugSettings: ConsentDebugSettings(), + ); + + TestDefaultBinaryMessengerBinding.instance.defaultBinaryMessenger + .setMockMethodCallHandler(methodChannel, (MethodCall call) async { + expect( + call.method, + equals('ConsentInformation#requestConsentInfoUpdate'), + ); + expect(call.arguments, equals({'params': params})); + return Future.value(); + }); + + Completer successCompleter = Completer(); + Completer failureCompleter = Completer(); + // Test function + channel.requestConsentInfoUpdate( + params, + () { + successCompleter.complete(); + }, + (error) { + failureCompleter.complete(error); + }, + ); + await successCompleter.future; + + expect(successCompleter.isCompleted, true); + expect(failureCompleter.isCompleted, false); + }); + + test('requestConsentInfoUpdate() failure', () async { + ConsentRequestParameters params = ConsentRequestParameters( + tagForUnderAgeOfConsent: true, + consentDebugSettings: ConsentDebugSettings(), + ); + + TestDefaultBinaryMessengerBinding.instance.defaultBinaryMessenger + .setMockMethodCallHandler(methodChannel, (MethodCall call) async { + expect( + call.method, + equals('ConsentInformation#requestConsentInfoUpdate'), + ); + expect(call.arguments, equals({'params': params})); + return Future.error( + PlatformException( + code: '1', + message: 'message', + details: 'details', + ), + ); + }); + + Completer successCompleter = Completer(); + Completer failureCompleter = Completer(); + + // Test function + channel.requestConsentInfoUpdate( + params, + () { + successCompleter.complete(); + }, + (error) { + failureCompleter.complete(error); + }, + ); + + FormError error = await failureCompleter.future; + expect(successCompleter.isCompleted, false); + expect(failureCompleter.isCompleted, true); + FormError expectedError = FormError(errorCode: 1, message: 'message'); + expect(error, equals(expectedError)); + }); + + test('isConsentFormAvailable() true', () async { + TestDefaultBinaryMessengerBinding.instance.defaultBinaryMessenger + .setMockMethodCallHandler(methodChannel, (MethodCall call) async { + expect( + call.method, + equals('ConsentInformation#isConsentFormAvailable'), + ); + expect(call.arguments, null); + return Future.value(true); + }); + + bool isAvailable = await channel.isConsentFormAvailable(); + + expect(isAvailable, true); + }); + + test('isConsentFormAvailable() false', () async { + TestDefaultBinaryMessengerBinding.instance.defaultBinaryMessenger + .setMockMethodCallHandler(methodChannel, (MethodCall call) async { + expect( + call.method, + equals('ConsentInformation#isConsentFormAvailable'), + ); + expect(call.arguments, null); + return Future.value(false); + }); + + bool isAvailable = await channel.isConsentFormAvailable(); + + expect(isAvailable, false); + }); + + test('getConsentStatus()', () async { + TestDefaultBinaryMessengerBinding.instance.defaultBinaryMessenger + .setMockMethodCallHandler(methodChannel, (MethodCall call) async { + expect(call.method, equals('ConsentInformation#getConsentStatus')); + expect(call.arguments, null); + return Future.value(1); + }); + + ConsentStatus status = await channel.getConsentStatus(); + + expect(status, ConsentStatus.notRequired); + }); + + test('reset()', () async { + String? method; + dynamic arguments; + TestDefaultBinaryMessengerBinding.instance.defaultBinaryMessenger + .setMockMethodCallHandler(methodChannel, (MethodCall call) async { + method = call.method; + arguments = call.arguments; + return Future.value(); + }); + + await channel.reset(); + + expect(method, equals('ConsentInformation#reset')); + expect(arguments, null); + }); + + test('loadConsentForm() success', () async { + String? method; + dynamic arguments; + ConsentForm consentForm = ConsentFormImpl(1); + TestDefaultBinaryMessengerBinding.instance.defaultBinaryMessenger + .setMockMethodCallHandler(methodChannel, (MethodCall call) async { + method = call.method; + arguments = call.arguments; + return Future.value(consentForm); + }); + + Completer successCompleter = Completer(); + Completer failureCompleter = Completer(); + + // Test function + channel.loadConsentForm( + (consentForm) => successCompleter.complete(consentForm), + (formError) => failureCompleter.complete(formError), + ); + + ConsentForm response = await successCompleter.future; + expect(successCompleter.isCompleted, true); + expect(failureCompleter.isCompleted, false); + expect(method, equals('UserMessagingPlatform#loadConsentForm')); + expect(arguments, null); + expect(response, equals(consentForm)); + }); + + test('loadConsentForm() error', () async { + String? method; + dynamic arguments; + TestDefaultBinaryMessengerBinding.instance.defaultBinaryMessenger + .setMockMethodCallHandler(methodChannel, (MethodCall call) async { + method = call.method; + arguments = call.arguments; + return Future.error( + PlatformException(code: '2', message: 'message'), + ); + }); + + Completer successCompleter = Completer(); + Completer failureCompleter = Completer(); + + // Test function + channel.loadConsentForm( + (consentForm) => successCompleter.complete(consentForm), + (formError) => failureCompleter.complete(formError), + ); + + FormError error = await failureCompleter.future; + expect(successCompleter.isCompleted, false); + expect(failureCompleter.isCompleted, true); + expect(method, equals('UserMessagingPlatform#loadConsentForm')); + expect(arguments, null); + expect(error, FormError(errorCode: 2, message: 'message')); + }); + + test('show() success', () async { + String? method; + dynamic arguments; + ConsentFormImpl consentForm = ConsentFormImpl(1); + TestDefaultBinaryMessengerBinding.instance.defaultBinaryMessenger + .setMockMethodCallHandler(methodChannel, (MethodCall call) async { + method = call.method; + arguments = call.arguments; + return Future.value(); + }); + + Completer successCompleter = Completer(); + + // Test function + channel.show(consentForm, (error) => successCompleter.complete(error)); + + FormError? error = await successCompleter.future; + expect(successCompleter.isCompleted, true); + expect(method, equals('ConsentForm#show')); + expect(arguments, {'consentForm': consentForm}); + expect(error, null); + }); + + test('show() error', () async { + String? method; + dynamic arguments; + ConsentFormImpl consentForm = ConsentFormImpl(1); + TestDefaultBinaryMessengerBinding.instance.defaultBinaryMessenger + .setMockMethodCallHandler(methodChannel, (MethodCall call) async { + method = call.method; + arguments = call.arguments; + return Future.error(PlatformException(code: '55', message: 'msg')); + }); + + Completer successCompleter = Completer(); + + // Test function + channel.show(consentForm, (error) => successCompleter.complete(error)); + + FormError? error = await successCompleter.future; + expect(successCompleter.isCompleted, true); + expect(method, equals('ConsentForm#show')); + expect(arguments, {'consentForm': consentForm}); + expect(error, FormError(errorCode: 55, message: 'msg')); + }); + + test('disposeConsentForm()', () async { + String? method; + dynamic arguments; + TestDefaultBinaryMessengerBinding.instance.defaultBinaryMessenger + .setMockMethodCallHandler(methodChannel, (MethodCall call) async { + method = call.method; + arguments = call.arguments; + return Future.value(); + }); + + ConsentForm consentForm = ConsentFormImpl(1); + await channel.disposeConsentForm(consentForm); + + expect(method, equals('ConsentForm#dispose')); + expect(arguments, {'consentForm': consentForm}); + }); + + test('canRequestAds()', () async { + TestDefaultBinaryMessengerBinding.instance.defaultBinaryMessenger + .setMockMethodCallHandler(methodChannel, (call) async { + expect(call.method, equals('ConsentInformation#canRequestAds')); + expect(call.arguments, null); + return Future.value(true); + }); + + bool canRequestAds = await channel.canRequestAds(); + + expect(canRequestAds, true); + }); + + test('getPrivacyOptionsRequirementStatus() maps 1 to required', () async { + TestDefaultBinaryMessengerBinding.instance.defaultBinaryMessenger + .setMockMethodCallHandler(methodChannel, (call) async { + expect( + call.method, + equals('ConsentInformation#getPrivacyOptionsRequirementStatus'), + ); + expect(call.arguments, null); + return Future.value(1); + }); + + PrivacyOptionsRequirementStatus privacyStatus = await channel + .getPrivacyOptionsRequirementStatus(); + + expect(privacyStatus, PrivacyOptionsRequirementStatus.required); + }); + + test( + 'getPrivacyOptionsRequirementStatus() maps 0 to notRequired', + () async { + TestDefaultBinaryMessengerBinding.instance.defaultBinaryMessenger + .setMockMethodCallHandler(methodChannel, (call) async { + expect( + call.method, + equals('ConsentInformation#getPrivacyOptionsRequirementStatus'), + ); + expect(call.arguments, null); + return Future.value(0); + }); + + PrivacyOptionsRequirementStatus privacyStatus = await channel + .getPrivacyOptionsRequirementStatus(); + + expect(privacyStatus, PrivacyOptionsRequirementStatus.notRequired); + }, + ); + + test('loadAndShowConsentFormIfRequired() success', () async { + TestDefaultBinaryMessengerBinding.instance.defaultBinaryMessenger + .setMockMethodCallHandler(methodChannel, (call) async { + expect( + call.method, + equals('UserMessagingPlatform#loadAndShowConsentFormIfRequired'), + ); + expect(call.arguments, null); + return Future.value(); + }); + Completer successCompleter = Completer(); + + successCompleter.complete(channel.loadAndShowConsentFormIfRequired()); + + FormError? error = await successCompleter.future; + expect(error, null); + }); + + test('loadAndShowConsentFormIfRequired() failure', () async { + FormError? testError = FormError(errorCode: 55, message: 'msg'); + TestDefaultBinaryMessengerBinding.instance.defaultBinaryMessenger + .setMockMethodCallHandler(methodChannel, (call) async { + expect( + call.method, + equals('UserMessagingPlatform#loadAndShowConsentFormIfRequired'), + ); + expect(call.arguments, null); + return Future.value(testError); + }); + Completer failureCompleter = Completer(); + + failureCompleter.complete(channel.loadAndShowConsentFormIfRequired()); + + FormError? error = await failureCompleter.future; + expect(failureCompleter.isCompleted, true); + expect(error, testError); + }); + + test('loadAndShowConsentFormIfRequired() error', () async { + TestDefaultBinaryMessengerBinding.instance.defaultBinaryMessenger + .setMockMethodCallHandler(methodChannel, (call) async { + expect( + call.method, + equals('UserMessagingPlatform#loadAndShowConsentFormIfRequired'), + ); + expect(call.arguments, null); + return Future.error(PlatformException(code: '55', message: 'msg')); + }); + Completer errorCompleter = Completer(); + + errorCompleter.complete(channel.loadAndShowConsentFormIfRequired()); + + FormError? error = await errorCompleter.future; + expect(errorCompleter.isCompleted, true); + expect(error, FormError(errorCode: 55, message: 'msg')); + }); + + test('showPrivacyOptionsForm() success', () async { + TestDefaultBinaryMessengerBinding.instance.defaultBinaryMessenger + .setMockMethodCallHandler(methodChannel, (call) async { + expect( + call.method, + equals('UserMessagingPlatform#showPrivacyOptionsForm'), + ); + expect(call.arguments, null); + return Future.value(); + }); + Completer successCompleter = Completer(); + + successCompleter.complete(channel.showPrivacyOptionsForm()); + + FormError? error = await successCompleter.future; + expect(error, null); + }); + + test('showPrivacyOptionsForm() failure', () async { + FormError? testError = FormError(errorCode: 55, message: 'msg'); + TestDefaultBinaryMessengerBinding.instance.defaultBinaryMessenger + .setMockMethodCallHandler(methodChannel, (call) async { + expect( + call.method, + equals('UserMessagingPlatform#showPrivacyOptionsForm'), + ); + expect(call.arguments, null); + return Future.value(testError); + }); + Completer failureCompleter = Completer(); + + failureCompleter.complete(channel.showPrivacyOptionsForm()); + + FormError? error = await failureCompleter.future; + expect(failureCompleter.isCompleted, true); + expect(error, testError); + }); + + test('showPrivacyOptionsForm() error', () async { + TestDefaultBinaryMessengerBinding.instance.defaultBinaryMessenger + .setMockMethodCallHandler(methodChannel, (call) async { + expect( + call.method, + equals('UserMessagingPlatform#showPrivacyOptionsForm'), + ); + expect(call.arguments, null); + return Future.error(PlatformException(code: '55', message: 'msg')); + }); + Completer errorCompleter = Completer(); + + errorCompleter.complete(channel.showPrivacyOptionsForm()); + + FormError? error = await errorCompleter.future; + expect(errorCompleter.isCompleted, true); + expect(error, FormError(errorCode: 55, message: 'msg')); + }); + }); +} diff --git a/mih_ui/android/build/ios/SourcePackages/google_mobile_ads-8.0.0/test/ump/user_messaging_codec_test.dart b/mih_ui/android/build/ios/SourcePackages/google_mobile_ads-8.0.0/test/ump/user_messaging_codec_test.dart new file mode 100644 index 00000000..6f89bc14 --- /dev/null +++ b/mih_ui/android/build/ios/SourcePackages/google_mobile_ads-8.0.0/test/ump/user_messaging_codec_test.dart @@ -0,0 +1,84 @@ +// Copyright 2022 Google LLC +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// https://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +import 'package:flutter/services.dart'; +import 'package:flutter_test/flutter_test.dart'; +import 'package:google_mobile_ads/google_mobile_ads.dart'; +import 'package:google_mobile_ads/src/ump/consent_form_impl.dart'; +import 'package:google_mobile_ads/src/ump/user_messaging_codec.dart'; + +void main() { + TestWidgetsFlutterBinding.ensureInitialized(); + + group('UserMessagingCodec', () { + /// Sut. + final UserMessagingCodec codec = UserMessagingCodec(); + + test('encode and decode empty ConsentRequestParameters', () async { + ConsentRequestParameters params = ConsentRequestParameters(); + final ByteData? byteData = codec.encodeMessage(params); + ConsentRequestParameters decodedParams = codec.decodeMessage(byteData); + expect(params, decodedParams); + }); + + test('encode and decode empty ConsentDebugSettings', () async { + ConsentDebugSettings debugSettings = ConsentDebugSettings(); + ByteData? byteData = codec.encodeMessage(debugSettings); + ConsentDebugSettings decodedDebugSettings = codec.decodeMessage(byteData); + expect(debugSettings, decodedDebugSettings); + }); + + test('encode and decode ConsentDebugSettings only geography', () async { + ConsentDebugSettings debugSettings = ConsentDebugSettings( + debugGeography: DebugGeography.debugGeographyDisabled, + ); + ByteData? byteData = codec.encodeMessage(debugSettings); + ConsentDebugSettings decodedDebugSettings = codec.decodeMessage(byteData); + expect(debugSettings, decodedDebugSettings); + }); + + test('encode and decode ConsentDebugSettings only testIds', () async { + ConsentDebugSettings debugSettings = ConsentDebugSettings( + testIdentifiers: ['test-identifier1', 'test-identifier2'], + ); + ByteData? byteData = codec.encodeMessage(debugSettings); + ConsentDebugSettings decodedDebugSettings = codec.decodeMessage(byteData); + expect(debugSettings, equals(decodedDebugSettings)); + }); + + test('encode and decode ConsentDebugSettings testIds and geo', () async { + ConsentDebugSettings debugSettings = ConsentDebugSettings( + debugGeography: DebugGeography.debugGeographyEea, + testIdentifiers: ['test-identifier1', 'test-identifier2'], + ); + ByteData? byteData = codec.encodeMessage(debugSettings); + ConsentDebugSettings decodedDebugSettings = codec.decodeMessage(byteData); + expect(debugSettings, equals(decodedDebugSettings)); + }); + + test('encode and decode ConsentForm', () async { + ConsentFormImpl consentFormImpl = ConsentFormImpl(1); + ByteData? byteData = codec.encodeMessage(consentFormImpl); + ConsentForm decodedConsentForm = codec.decodeMessage(byteData); + expect(decodedConsentForm, equals(consentFormImpl)); + }); + + test('encode and decode FormError', () async { + FormError formError = FormError(errorCode: 123, message: 'testError'); + ByteData? byteData = codec.encodeMessage(formError); + FormError decodedFormError = codec.decodeMessage(byteData); + expect(decodedFormError, equals(formError)); + }); + }); +} diff --git a/mih_ui/android/build/ios/XCBuildData/PIFCache/project/PROJECT@v11_mod=d0293ee0112d0357cf900112c05ab991_hash=bfdfe7dc352907fc980b868725387e98plugins=1OJSG6M1FOV3XYQCBH7Z29RZ0FPR9XDE1-json b/mih_ui/android/build/ios/XCBuildData/PIFCache/project/PROJECT@v11_mod=d0293ee0112d0357cf900112c05ab991_hash=bfdfe7dc352907fc980b868725387e98plugins=1OJSG6M1FOV3XYQCBH7Z29RZ0FPR9XDE1-json new file mode 100644 index 00000000..50cd74b5 --- /dev/null +++ b/mih_ui/android/build/ios/XCBuildData/PIFCache/project/PROJECT@v11_mod=d0293ee0112d0357cf900112c05ab991_hash=bfdfe7dc352907fc980b868725387e98plugins=1OJSG6M1FOV3XYQCBH7Z29RZ0FPR9XDE1-json @@ -0,0 +1 @@ +{"appPreferencesBuildSettings":{},"buildConfigurations":[{"buildSettings":{"ALWAYS_SEARCH_USER_PATHS":"NO","CLANG_ANALYZER_LOCALIZABILITY_NONLOCALIZED":"YES","CLANG_ANALYZER_NONNULL":"YES","CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION":"YES_AGGRESSIVE","CLANG_CXX_LANGUAGE_STANDARD":"gnu++14","CLANG_CXX_LIBRARY":"libc++","CLANG_ENABLE_MODULES":"YES","CLANG_ENABLE_OBJC_ARC":"YES","CLANG_ENABLE_OBJC_WEAK":"YES","CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING":"YES","CLANG_WARN_BOOL_CONVERSION":"YES","CLANG_WARN_COMMA":"YES","CLANG_WARN_CONSTANT_CONVERSION":"YES","CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS":"YES","CLANG_WARN_DIRECT_OBJC_ISA_USAGE":"YES_ERROR","CLANG_WARN_DOCUMENTATION_COMMENTS":"YES","CLANG_WARN_EMPTY_BODY":"YES","CLANG_WARN_ENUM_CONVERSION":"YES","CLANG_WARN_INFINITE_RECURSION":"YES","CLANG_WARN_INT_CONVERSION":"YES","CLANG_WARN_NON_LITERAL_NULL_CONVERSION":"YES","CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF":"YES","CLANG_WARN_OBJC_LITERAL_CONVERSION":"YES","CLANG_WARN_OBJC_ROOT_CLASS":"YES_ERROR","CLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER":"YES","CLANG_WARN_RANGE_LOOP_ANALYSIS":"YES","CLANG_WARN_STRICT_PROTOTYPES":"YES","CLANG_WARN_SUSPICIOUS_MOVE":"YES","CLANG_WARN_UNGUARDED_AVAILABILITY":"YES_AGGRESSIVE","CLANG_WARN_UNREACHABLE_CODE":"YES","CLANG_WARN__DUPLICATE_METHOD_MATCH":"YES","COPY_PHASE_STRIP":"NO","DEBUG_INFORMATION_FORMAT":"dwarf","ENABLE_STRICT_OBJC_MSGSEND":"YES","ENABLE_TESTABILITY":"YES","GCC_C_LANGUAGE_STANDARD":"gnu11","GCC_DYNAMIC_NO_PIC":"NO","GCC_NO_COMMON_BLOCKS":"YES","GCC_OPTIMIZATION_LEVEL":"0","GCC_PREPROCESSOR_DEFINITIONS":"POD_CONFIGURATION_DEBUG=1 DEBUG=1 $(inherited)","GCC_WARN_64_TO_32_BIT_CONVERSION":"YES","GCC_WARN_ABOUT_RETURN_TYPE":"YES_ERROR","GCC_WARN_UNDECLARED_SELECTOR":"YES","GCC_WARN_UNINITIALIZED_AUTOS":"YES_AGGRESSIVE","GCC_WARN_UNUSED_FUNCTION":"YES","GCC_WARN_UNUSED_VARIABLE":"YES","IPHONEOS_DEPLOYMENT_TARGET":"15.5.0","MTL_ENABLE_DEBUG_INFO":"INCLUDE_SOURCE","MTL_FAST_MATH":"YES","ONLY_ACTIVE_ARCH":"YES","PRODUCT_NAME":"$(TARGET_NAME)","STRIP_INSTALLED_PRODUCT":"NO","SWIFT_ACTIVE_COMPILATION_CONDITIONS":"DEBUG","SWIFT_OPTIMIZATION_LEVEL":"-Onone","SWIFT_VERSION":"5.0","SYMROOT":"${SRCROOT}/../build"},"guid":"bfdfe7dc352907fc980b868725387e98aa7a69c2bf65b07ec18c8dbe4d98a7bc","name":"Debug"},{"buildSettings":{"ALWAYS_SEARCH_USER_PATHS":"NO","CLANG_ANALYZER_LOCALIZABILITY_NONLOCALIZED":"YES","CLANG_ANALYZER_NONNULL":"YES","CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION":"YES_AGGRESSIVE","CLANG_CXX_LANGUAGE_STANDARD":"gnu++14","CLANG_CXX_LIBRARY":"libc++","CLANG_ENABLE_MODULES":"YES","CLANG_ENABLE_OBJC_ARC":"YES","CLANG_ENABLE_OBJC_WEAK":"YES","CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING":"YES","CLANG_WARN_BOOL_CONVERSION":"YES","CLANG_WARN_COMMA":"YES","CLANG_WARN_CONSTANT_CONVERSION":"YES","CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS":"YES","CLANG_WARN_DIRECT_OBJC_ISA_USAGE":"YES_ERROR","CLANG_WARN_DOCUMENTATION_COMMENTS":"YES","CLANG_WARN_EMPTY_BODY":"YES","CLANG_WARN_ENUM_CONVERSION":"YES","CLANG_WARN_INFINITE_RECURSION":"YES","CLANG_WARN_INT_CONVERSION":"YES","CLANG_WARN_NON_LITERAL_NULL_CONVERSION":"YES","CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF":"YES","CLANG_WARN_OBJC_LITERAL_CONVERSION":"YES","CLANG_WARN_OBJC_ROOT_CLASS":"YES_ERROR","CLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER":"YES","CLANG_WARN_RANGE_LOOP_ANALYSIS":"YES","CLANG_WARN_STRICT_PROTOTYPES":"YES","CLANG_WARN_SUSPICIOUS_MOVE":"YES","CLANG_WARN_UNGUARDED_AVAILABILITY":"YES_AGGRESSIVE","CLANG_WARN_UNREACHABLE_CODE":"YES","CLANG_WARN__DUPLICATE_METHOD_MATCH":"YES","COPY_PHASE_STRIP":"NO","DEBUG_INFORMATION_FORMAT":"dwarf-with-dsym","ENABLE_NS_ASSERTIONS":"NO","ENABLE_STRICT_OBJC_MSGSEND":"YES","GCC_C_LANGUAGE_STANDARD":"gnu11","GCC_NO_COMMON_BLOCKS":"YES","GCC_PREPROCESSOR_DEFINITIONS":"POD_CONFIGURATION_PROFILE=1 $(inherited)","GCC_WARN_64_TO_32_BIT_CONVERSION":"YES","GCC_WARN_ABOUT_RETURN_TYPE":"YES_ERROR","GCC_WARN_UNDECLARED_SELECTOR":"YES","GCC_WARN_UNINITIALIZED_AUTOS":"YES_AGGRESSIVE","GCC_WARN_UNUSED_FUNCTION":"YES","GCC_WARN_UNUSED_VARIABLE":"YES","IPHONEOS_DEPLOYMENT_TARGET":"15.5.0","MTL_ENABLE_DEBUG_INFO":"NO","MTL_FAST_MATH":"YES","PRODUCT_NAME":"$(TARGET_NAME)","STRIP_INSTALLED_PRODUCT":"NO","SWIFT_COMPILATION_MODE":"wholemodule","SWIFT_OPTIMIZATION_LEVEL":"-O","SWIFT_VERSION":"5.0","SYMROOT":"${SRCROOT}/../build"},"guid":"bfdfe7dc352907fc980b868725387e983e0e781737f05c4d662f1beac8315a77","name":"Profile"},{"buildSettings":{"ALWAYS_SEARCH_USER_PATHS":"NO","CLANG_ANALYZER_LOCALIZABILITY_NONLOCALIZED":"YES","CLANG_ANALYZER_NONNULL":"YES","CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION":"YES_AGGRESSIVE","CLANG_CXX_LANGUAGE_STANDARD":"gnu++14","CLANG_CXX_LIBRARY":"libc++","CLANG_ENABLE_MODULES":"YES","CLANG_ENABLE_OBJC_ARC":"YES","CLANG_ENABLE_OBJC_WEAK":"YES","CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING":"YES","CLANG_WARN_BOOL_CONVERSION":"YES","CLANG_WARN_COMMA":"YES","CLANG_WARN_CONSTANT_CONVERSION":"YES","CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS":"YES","CLANG_WARN_DIRECT_OBJC_ISA_USAGE":"YES_ERROR","CLANG_WARN_DOCUMENTATION_COMMENTS":"YES","CLANG_WARN_EMPTY_BODY":"YES","CLANG_WARN_ENUM_CONVERSION":"YES","CLANG_WARN_INFINITE_RECURSION":"YES","CLANG_WARN_INT_CONVERSION":"YES","CLANG_WARN_NON_LITERAL_NULL_CONVERSION":"YES","CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF":"YES","CLANG_WARN_OBJC_LITERAL_CONVERSION":"YES","CLANG_WARN_OBJC_ROOT_CLASS":"YES_ERROR","CLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER":"YES","CLANG_WARN_RANGE_LOOP_ANALYSIS":"YES","CLANG_WARN_STRICT_PROTOTYPES":"YES","CLANG_WARN_SUSPICIOUS_MOVE":"YES","CLANG_WARN_UNGUARDED_AVAILABILITY":"YES_AGGRESSIVE","CLANG_WARN_UNREACHABLE_CODE":"YES","CLANG_WARN__DUPLICATE_METHOD_MATCH":"YES","COPY_PHASE_STRIP":"NO","DEBUG_INFORMATION_FORMAT":"dwarf-with-dsym","ENABLE_NS_ASSERTIONS":"NO","ENABLE_STRICT_OBJC_MSGSEND":"YES","GCC_C_LANGUAGE_STANDARD":"gnu11","GCC_NO_COMMON_BLOCKS":"YES","GCC_PREPROCESSOR_DEFINITIONS":"POD_CONFIGURATION_RELEASE=1 $(inherited)","GCC_WARN_64_TO_32_BIT_CONVERSION":"YES","GCC_WARN_ABOUT_RETURN_TYPE":"YES_ERROR","GCC_WARN_UNDECLARED_SELECTOR":"YES","GCC_WARN_UNINITIALIZED_AUTOS":"YES_AGGRESSIVE","GCC_WARN_UNUSED_FUNCTION":"YES","GCC_WARN_UNUSED_VARIABLE":"YES","IPHONEOS_DEPLOYMENT_TARGET":"15.5.0","MTL_ENABLE_DEBUG_INFO":"NO","MTL_FAST_MATH":"YES","PRODUCT_NAME":"$(TARGET_NAME)","STRIP_INSTALLED_PRODUCT":"NO","SWIFT_COMPILATION_MODE":"wholemodule","SWIFT_OPTIMIZATION_LEVEL":"-O","SWIFT_VERSION":"5.0","SYMROOT":"${SRCROOT}/../build"},"guid":"bfdfe7dc352907fc980b868725387e9880fffdb081d1ceb505494a2f72912a5f","name":"Release"}],"classPrefix":"","defaultConfigurationName":"Release","developmentRegion":"en","groupTree":{"children":[{"fileType":"text.script.ruby","guid":"bfdfe7dc352907fc980b868725387e98d0b25d39b515a574839e998df229c3cb","path":"../Podfile","sourceTree":"SOURCE_ROOT","type":"file"},{"children":[{"children":[{"children":[{"children":[{"children":[{"children":[{"children":[{"children":[{"children":[{"children":[{"children":[{"children":[{"children":[{"children":[{"children":[{"children":[{"children":[{"children":[{"children":[{"children":[{"children":[{"children":[{"fileType":"sourcecode.swift","guid":"bfdfe7dc352907fc980b868725387e98f5e4ec7c8e38b008f7f7c3a9bd4a401e","path":"../../../../../../../../../../../../.pub-cache/hosted/pub.dev/app_settings-7.0.0/ios/app_settings/Sources/app_settings/AppSettingsPlugin.swift","sourceTree":"","type":"file"}],"guid":"bfdfe7dc352907fc980b868725387e9888e3ab526532341a5b566628d447ac8f","name":"app_settings","path":"app_settings","sourceTree":"","type":"group"}],"guid":"bfdfe7dc352907fc980b868725387e98fa9a31af2f04da80e43125746faef349","name":"Sources","path":"Sources","sourceTree":"","type":"group"}],"guid":"bfdfe7dc352907fc980b868725387e988841ff692007360f2f6b51e07273427a","name":"app_settings","path":"app_settings","sourceTree":"","type":"group"}],"guid":"bfdfe7dc352907fc980b868725387e98433728c6157b2b64fd28c84306daac04","name":"ios","path":"ios","sourceTree":"","type":"group"}],"guid":"bfdfe7dc352907fc980b868725387e9811229002c85d49c31b190a8db8a11e71","name":"app_settings","path":"app_settings","sourceTree":"","type":"group"}],"guid":"bfdfe7dc352907fc980b868725387e983c55a8a126d11bd35cae1348f60d554b","name":"plugins","path":"plugins","sourceTree":"","type":"group"}],"guid":"bfdfe7dc352907fc980b868725387e9831fe13b405e0c87b865873dff48b574c","name":".symlinks","path":".symlinks","sourceTree":"","type":"group"}],"guid":"bfdfe7dc352907fc980b868725387e98b8efedc672f6cecced7a7a1cac7b8799","name":"ios","path":"ios","sourceTree":"","type":"group"}],"guid":"bfdfe7dc352907fc980b868725387e981d028851cf57fc21af3531e2bfee8600","name":"mih_ui","path":"mih_ui","sourceTree":"","type":"group"}],"guid":"bfdfe7dc352907fc980b868725387e98227668d37a4e895dcda5f82093546f64","name":"mih-project","path":"mih-project","sourceTree":"","type":"group"}],"guid":"bfdfe7dc352907fc980b868725387e986ef8aaca5b7de7bce54c598e8136ebf9","name":"mih_main","path":"mih_main","sourceTree":"","type":"group"}],"guid":"bfdfe7dc352907fc980b868725387e980e0d8d16aabf77aeacf7563312cbe86d","name":"Git","path":"Git","sourceTree":"","type":"group"}],"guid":"bfdfe7dc352907fc980b868725387e9860bed12f143a445c4879038194fea56b","name":"..","path":"..","sourceTree":"","type":"group"},{"children":[{"children":[{"children":[{"children":[{"children":[{"children":[{"children":[{"children":[{"children":[{"children":[{"children":[{"fileType":"text.xml","guid":"bfdfe7dc352907fc980b868725387e98a3dc3576e1e38afd167d6415d986fe47","path":"../../../../../../../../../../../.pub-cache/hosted/pub.dev/app_settings-7.0.0/ios/app_settings/Resources/PrivacyInfo.xcprivacy","sourceTree":"","type":"file"}],"guid":"bfdfe7dc352907fc980b868725387e9868b0c4e5d81cecb53e406903944533e3","name":"Resources","path":"Resources","sourceTree":"","type":"group"}],"guid":"bfdfe7dc352907fc980b868725387e98c6626661d52970110983c57d13deceb4","name":"app_settings","path":"app_settings","sourceTree":"","type":"group"}],"guid":"bfdfe7dc352907fc980b868725387e98eb8795f1f7151238c44c70dc43aa70be","name":"ios","path":"ios","sourceTree":"","type":"group"}],"guid":"bfdfe7dc352907fc980b868725387e98f146fefad0d90e99ebd9c232f62a7925","name":"app_settings","path":"app_settings","sourceTree":"","type":"group"}],"guid":"bfdfe7dc352907fc980b868725387e98cec0a1ed7f47956a474953fc4595c551","name":"plugins","path":"plugins","sourceTree":"","type":"group"}],"guid":"bfdfe7dc352907fc980b868725387e986bf009729d094b4f8c44d33c297f40c5","name":".symlinks","path":".symlinks","sourceTree":"","type":"group"}],"guid":"bfdfe7dc352907fc980b868725387e98e04242359af722fe7de72e861cbe5f20","name":"ios","path":"ios","sourceTree":"","type":"group"}],"guid":"bfdfe7dc352907fc980b868725387e9834162d784f785b84b8aefde7689d859d","name":"mih_ui","path":"mih_ui","sourceTree":"","type":"group"}],"guid":"bfdfe7dc352907fc980b868725387e98465c04ca24d1ea5fed26f17551a07563","name":"mih-project","path":"mih-project","sourceTree":"","type":"group"}],"guid":"bfdfe7dc352907fc980b868725387e9875a4364cd191c4f15d02ee6ac1a23193","name":"mih_main","path":"mih_main","sourceTree":"","type":"group"}],"guid":"bfdfe7dc352907fc980b868725387e9881237af5c353e7cf1051943341d47a0b","name":"Git","path":"../Git","sourceTree":"","type":"group"}],"guid":"bfdfe7dc352907fc980b868725387e98f0745151330f19fa5281176df81811de","name":"..","path":"..","sourceTree":"","type":"group"}],"guid":"bfdfe7dc352907fc980b868725387e988f68cfb9804603a3e611363fa6727915","name":"..","path":"..","sourceTree":"","type":"group"}],"guid":"bfdfe7dc352907fc980b868725387e987a3b2e728f9d6fdd7f85065429a8bf93","name":"..","path":"..","sourceTree":"","type":"group"}],"guid":"bfdfe7dc352907fc980b868725387e983fb14232318f920208fe4162aadd1e42","name":"..","path":"..","sourceTree":"","type":"group"}],"guid":"bfdfe7dc352907fc980b868725387e9832cc7db1f950bd66acb8879b4f1bccb1","name":"..","path":"..","sourceTree":"","type":"group"}],"guid":"bfdfe7dc352907fc980b868725387e98f09f0f24b4e38959d65a45c04af00e37","name":"..","path":"..","sourceTree":"","type":"group"}],"guid":"bfdfe7dc352907fc980b868725387e98a6c57b90ec41cc06d89a82a177a49b04","name":"..","path":"../../../../../../../../../.pub-cache/hosted/pub.dev/app_settings-7.0.0/ios/app_settings/Sources","sourceTree":"","type":"group"},{"children":[{"fileType":"text.script.ruby","guid":"bfdfe7dc352907fc980b868725387e989a44a427d1e6525a95450fa77cdd8d17","path":"../../../../../../../../../.pub-cache/hosted/pub.dev/app_settings-7.0.0/ios/app_settings.podspec","sourceTree":"","type":"file"},{"fileType":"text","guid":"bfdfe7dc352907fc980b868725387e980fcd13aaefa26396d8acba43ed0bf89e","path":"../../../../../../../../../.pub-cache/hosted/pub.dev/app_settings-7.0.0/LICENSE","sourceTree":"","type":"file"}],"guid":"bfdfe7dc352907fc980b868725387e9865b949ba7b72894e728c5e156a244e6c","name":"Pod","path":"","sourceTree":"","type":"group"},{"children":[{"fileType":"sourcecode.module-map","guid":"bfdfe7dc352907fc980b868725387e9828c6e8a90a7a09ef2ea9c1a65a1ad213","path":"app_settings.modulemap","sourceTree":"","type":"file"},{"fileType":"sourcecode.c.objc","guid":"bfdfe7dc352907fc980b868725387e98b8ecd436f5a48de64e24bcea345336fb","path":"app_settings-dummy.m","sourceTree":"","type":"file"},{"fileType":"text.plist.xml","guid":"bfdfe7dc352907fc980b868725387e9886184509472824a8712d952bd3a1d25a","path":"app_settings-Info.plist","sourceTree":"","type":"file"},{"fileType":"sourcecode.c.h","guid":"bfdfe7dc352907fc980b868725387e9840ba091849ac80d1d21b8288461fefa1","path":"app_settings-prefix.pch","sourceTree":"","type":"file"},{"fileType":"sourcecode.c.h","guid":"bfdfe7dc352907fc980b868725387e98fdf0be27e7b47159d9d8b87c584ea45f","path":"app_settings-umbrella.h","sourceTree":"","type":"file"},{"fileType":"text.xcconfig","guid":"bfdfe7dc352907fc980b868725387e98e9790273c34cf01756c3ac2cbd541c6d","path":"app_settings.debug.xcconfig","sourceTree":"","type":"file"},{"fileType":"text.xcconfig","guid":"bfdfe7dc352907fc980b868725387e981916adc978ad471261fb8f5e1e97ed3a","path":"app_settings.release.xcconfig","sourceTree":"","type":"file"},{"fileType":"text.plist.xml","guid":"bfdfe7dc352907fc980b868725387e9804f728d4825970c34fec2208e196d4ad","path":"ResourceBundle-app_settings_privacy-app_settings-Info.plist","sourceTree":"","type":"file"}],"guid":"bfdfe7dc352907fc980b868725387e98aaa57944349cafc01450ca9ee326bed4","name":"Support Files","path":"../../../../Pods/Target Support Files/app_settings","sourceTree":"","type":"group"}],"guid":"bfdfe7dc352907fc980b868725387e98e04b5323e0d0bdf3b22fdaa14ce45ae3","name":"app_settings","path":"../.symlinks/plugins/app_settings/ios","sourceTree":"","type":"group"},{"children":[{"children":[{"children":[{"children":[{"children":[{"children":[{"children":[{"children":[{"children":[{"children":[{"children":[{"children":[{"children":[{"children":[{"children":[{"children":[{"children":[{"children":[{"children":[{"children":[{"children":[{"children":[{"children":[{"fileType":"text.xml","guid":"bfdfe7dc352907fc980b868725387e982f6dd2634fb467a93787bdea5788bf12","path":"../../../../../../../../../../../../../.pub-cache/hosted/pub.dev/camera_avfoundation-0.9.21+2/ios/camera_avfoundation/Sources/camera_avfoundation/Resources/PrivacyInfo.xcprivacy","sourceTree":"","type":"file"}],"guid":"bfdfe7dc352907fc980b868725387e98907782cde961601e7eb5c0486a5b08fc","name":"Resources","path":"Resources","sourceTree":"","type":"group"}],"guid":"bfdfe7dc352907fc980b868725387e988b277c50dfc4a3e82554f2a10e35eda7","name":"camera_avfoundation","path":"camera_avfoundation","sourceTree":"","type":"group"}],"guid":"bfdfe7dc352907fc980b868725387e983ef0ea0d8027d33bfaabcb40b6b63fca","name":"Sources","path":"Sources","sourceTree":"","type":"group"}],"guid":"bfdfe7dc352907fc980b868725387e98f76a3f826db660164ea4e58a8e9db313","name":"camera_avfoundation","path":"camera_avfoundation","sourceTree":"","type":"group"}],"guid":"bfdfe7dc352907fc980b868725387e98241b0eb8251c7ab8760735e4b7231185","name":"ios","path":"ios","sourceTree":"","type":"group"}],"guid":"bfdfe7dc352907fc980b868725387e981cddc05486d742776651509876719ffb","name":"camera_avfoundation","path":"camera_avfoundation","sourceTree":"","type":"group"}],"guid":"bfdfe7dc352907fc980b868725387e98f163409ae91c50e2c1f69fbadc8821f3","name":"plugins","path":"plugins","sourceTree":"","type":"group"}],"guid":"bfdfe7dc352907fc980b868725387e981214cf7b70026b3b7133e703a3e81b3c","name":".symlinks","path":".symlinks","sourceTree":"","type":"group"}],"guid":"bfdfe7dc352907fc980b868725387e98d82881cb26a943fa58b54b71c0b83c22","name":"ios","path":"ios","sourceTree":"","type":"group"}],"guid":"bfdfe7dc352907fc980b868725387e98ccc38113989cb0b1fbb7305caa3b369e","name":"mih_ui","path":"mih_ui","sourceTree":"","type":"group"}],"guid":"bfdfe7dc352907fc980b868725387e983f47ad0c78c21eaa69ac826aaaf10a6e","name":"mih-project","path":"mih-project","sourceTree":"","type":"group"}],"guid":"bfdfe7dc352907fc980b868725387e98099d298f0f61dcbb06e078f11764f1ef","name":"mih_main","path":"mih_main","sourceTree":"","type":"group"}],"guid":"bfdfe7dc352907fc980b868725387e984a851565313bd39d4f6b6112f363422c","name":"Git","path":"Git","sourceTree":"","type":"group"}],"guid":"bfdfe7dc352907fc980b868725387e9862555adfe5832a41f6fc4b1a79cfd9e9","name":"..","path":"..","sourceTree":"","type":"group"}],"guid":"bfdfe7dc352907fc980b868725387e98a6be0c65d0b3b994d6569761ec2f228e","name":"..","path":".pub-cache","sourceTree":"","type":"group"},{"children":[{"children":[{"children":[{"children":[{"children":[{"children":[{"children":[{"children":[{"children":[{"children":[{"children":[{"children":[{"fileType":"sourcecode.swift","guid":"bfdfe7dc352907fc980b868725387e982078aae39ae683382f05de711a185375","path":"../../../../../../../../../../../../.pub-cache/hosted/pub.dev/camera_avfoundation-0.9.21+2/ios/camera_avfoundation/Sources/camera_avfoundation/Camera.swift","sourceTree":"","type":"file"},{"fileType":"sourcecode.swift","guid":"bfdfe7dc352907fc980b868725387e98f60a8d6ef410a8896e992632f5a8d7ab","path":"../../../../../../../../../../../../.pub-cache/hosted/pub.dev/camera_avfoundation-0.9.21+2/ios/camera_avfoundation/Sources/camera_avfoundation/CameraPlugin.swift","sourceTree":"","type":"file"},{"fileType":"sourcecode.swift","guid":"bfdfe7dc352907fc980b868725387e9831ffb27713bc35caf090dde2758982a0","path":"../../../../../../../../../../../../.pub-cache/hosted/pub.dev/camera_avfoundation-0.9.21+2/ios/camera_avfoundation/Sources/camera_avfoundation/DefaultCamera.swift","sourceTree":"","type":"file"},{"fileType":"sourcecode.swift","guid":"bfdfe7dc352907fc980b868725387e98e5dd02315188486cffb3b793528ee079","path":"../../../../../../../../../../../../.pub-cache/hosted/pub.dev/camera_avfoundation-0.9.21+2/ios/camera_avfoundation/Sources/camera_avfoundation/QueueUtils.swift","sourceTree":"","type":"file"}],"guid":"bfdfe7dc352907fc980b868725387e98f6c9672891824c16c7e6f777ea17fc85","name":"camera_avfoundation","path":"camera_avfoundation","sourceTree":"","type":"group"},{"children":[{"fileType":"sourcecode.c.objc","guid":"bfdfe7dc352907fc980b868725387e98405619e08eb70b9dac88141b45809428","path":"../../../../../../../../../../../../.pub-cache/hosted/pub.dev/camera_avfoundation-0.9.21+2/ios/camera_avfoundation/Sources/camera_avfoundation_objc/CameraProperties.m","sourceTree":"","type":"file"},{"fileType":"sourcecode.c.objc","guid":"bfdfe7dc352907fc980b868725387e98dcb3e4b3f551bf7e25dfd5bbe6837c44","path":"../../../../../../../../../../../../.pub-cache/hosted/pub.dev/camera_avfoundation-0.9.21+2/ios/camera_avfoundation/Sources/camera_avfoundation_objc/FLTAssetWriter.m","sourceTree":"","type":"file"},{"fileType":"sourcecode.c.objc","guid":"bfdfe7dc352907fc980b868725387e98a03e14e92e8450839f90b1192ebe60f9","path":"../../../../../../../../../../../../.pub-cache/hosted/pub.dev/camera_avfoundation-0.9.21+2/ios/camera_avfoundation/Sources/camera_avfoundation_objc/FLTCam.m","sourceTree":"","type":"file"},{"fileType":"sourcecode.c.objc","guid":"bfdfe7dc352907fc980b868725387e989ae78c91c7fe89bf08cd07030744a390","path":"../../../../../../../../../../../../.pub-cache/hosted/pub.dev/camera_avfoundation-0.9.21+2/ios/camera_avfoundation/Sources/camera_avfoundation_objc/FLTCamConfiguration.m","sourceTree":"","type":"file"},{"fileType":"sourcecode.c.objc","guid":"bfdfe7dc352907fc980b868725387e987cc915a467358158a059f6a1005df343","path":"../../../../../../../../../../../../.pub-cache/hosted/pub.dev/camera_avfoundation-0.9.21+2/ios/camera_avfoundation/Sources/camera_avfoundation_objc/FLTCameraDeviceDiscovering.m","sourceTree":"","type":"file"},{"fileType":"sourcecode.c.objc","guid":"bfdfe7dc352907fc980b868725387e981c411b19a591008768a1751626bec02c","path":"../../../../../../../../../../../../.pub-cache/hosted/pub.dev/camera_avfoundation-0.9.21+2/ios/camera_avfoundation/Sources/camera_avfoundation_objc/FLTCameraPermissionManager.m","sourceTree":"","type":"file"},{"fileType":"sourcecode.c.objc","guid":"bfdfe7dc352907fc980b868725387e98e7037d382b9763757e10e512c62f1916","path":"../../../../../../../../../../../../.pub-cache/hosted/pub.dev/camera_avfoundation-0.9.21+2/ios/camera_avfoundation/Sources/camera_avfoundation_objc/FLTCamMediaSettingsAVWrapper.m","sourceTree":"","type":"file"},{"fileType":"sourcecode.c.objc","guid":"bfdfe7dc352907fc980b868725387e98121c74ca9aaca4dbb8b55621309a9732","path":"../../../../../../../../../../../../.pub-cache/hosted/pub.dev/camera_avfoundation-0.9.21+2/ios/camera_avfoundation/Sources/camera_avfoundation_objc/FLTCaptureConnection.m","sourceTree":"","type":"file"},{"fileType":"sourcecode.c.objc","guid":"bfdfe7dc352907fc980b868725387e980bd9f3a524e2e4dba9733fa90f4aac3b","path":"../../../../../../../../../../../../.pub-cache/hosted/pub.dev/camera_avfoundation-0.9.21+2/ios/camera_avfoundation/Sources/camera_avfoundation_objc/FLTCaptureDevice.m","sourceTree":"","type":"file"},{"fileType":"sourcecode.c.objc","guid":"bfdfe7dc352907fc980b868725387e98903b72cc5b5c782aaff128c3205f4efe","path":"../../../../../../../../../../../../.pub-cache/hosted/pub.dev/camera_avfoundation-0.9.21+2/ios/camera_avfoundation/Sources/camera_avfoundation_objc/FLTCaptureDeviceFormat.m","sourceTree":"","type":"file"},{"fileType":"sourcecode.c.objc","guid":"bfdfe7dc352907fc980b868725387e989d8f330e18415a31deb52b2bed8a2137","path":"../../../../../../../../../../../../.pub-cache/hosted/pub.dev/camera_avfoundation-0.9.21+2/ios/camera_avfoundation/Sources/camera_avfoundation_objc/FLTCapturePhotoOutput.m","sourceTree":"","type":"file"},{"fileType":"sourcecode.c.objc","guid":"bfdfe7dc352907fc980b868725387e984824be8742f3e743f090fe6c33d6ef75","path":"../../../../../../../../../../../../.pub-cache/hosted/pub.dev/camera_avfoundation-0.9.21+2/ios/camera_avfoundation/Sources/camera_avfoundation_objc/FLTCaptureSession.m","sourceTree":"","type":"file"},{"fileType":"sourcecode.c.objc","guid":"bfdfe7dc352907fc980b868725387e98ea07288fba88427eaf97221cb0a082ea","path":"../../../../../../../../../../../../.pub-cache/hosted/pub.dev/camera_avfoundation-0.9.21+2/ios/camera_avfoundation/Sources/camera_avfoundation_objc/FLTCaptureVideoDataOutput.m","sourceTree":"","type":"file"},{"fileType":"sourcecode.c.objc","guid":"bfdfe7dc352907fc980b868725387e98c741b00c0189ecdcede99a30c61cf5ca","path":"../../../../../../../../../../../../.pub-cache/hosted/pub.dev/camera_avfoundation-0.9.21+2/ios/camera_avfoundation/Sources/camera_avfoundation_objc/FLTDeviceOrientationProviding.m","sourceTree":"","type":"file"},{"fileType":"sourcecode.c.objc","guid":"bfdfe7dc352907fc980b868725387e98b6418130a13953d8c503f48653d8efa3","path":"../../../../../../../../../../../../.pub-cache/hosted/pub.dev/camera_avfoundation-0.9.21+2/ios/camera_avfoundation/Sources/camera_avfoundation_objc/FLTFormatUtils.m","sourceTree":"","type":"file"},{"fileType":"sourcecode.c.objc","guid":"bfdfe7dc352907fc980b868725387e98b2170aed3422e923d0c594950dc68411","path":"../../../../../../../../../../../../.pub-cache/hosted/pub.dev/camera_avfoundation-0.9.21+2/ios/camera_avfoundation/Sources/camera_avfoundation_objc/FLTImageStreamHandler.m","sourceTree":"","type":"file"},{"fileType":"sourcecode.c.objc","guid":"bfdfe7dc352907fc980b868725387e98df6cdfb488e9420dcab5902c4835df8f","path":"../../../../../../../../../../../../.pub-cache/hosted/pub.dev/camera_avfoundation-0.9.21+2/ios/camera_avfoundation/Sources/camera_avfoundation_objc/FLTPermissionServicing.m","sourceTree":"","type":"file"},{"fileType":"sourcecode.c.objc","guid":"bfdfe7dc352907fc980b868725387e982a862aae24ada2357f02abc8f69dfd4e","path":"../../../../../../../../../../../../.pub-cache/hosted/pub.dev/camera_avfoundation-0.9.21+2/ios/camera_avfoundation/Sources/camera_avfoundation_objc/FLTSavePhotoDelegate.m","sourceTree":"","type":"file"},{"fileType":"sourcecode.c.objc","guid":"bfdfe7dc352907fc980b868725387e9867161938a759dfccd8e5a78c167a3c1d","path":"../../../../../../../../../../../../.pub-cache/hosted/pub.dev/camera_avfoundation-0.9.21+2/ios/camera_avfoundation/Sources/camera_avfoundation_objc/FLTThreadSafeEventChannel.m","sourceTree":"","type":"file"},{"fileType":"sourcecode.c.objc","guid":"bfdfe7dc352907fc980b868725387e9805a0d5448fe595b27ad6b8273406e808","path":"../../../../../../../../../../../../.pub-cache/hosted/pub.dev/camera_avfoundation-0.9.21+2/ios/camera_avfoundation/Sources/camera_avfoundation_objc/FLTWritableData.m","sourceTree":"","type":"file"},{"fileType":"sourcecode.c.objc","guid":"bfdfe7dc352907fc980b868725387e983e9ded2512976d1035610e24a7a82a62","path":"../../../../../../../../../../../../.pub-cache/hosted/pub.dev/camera_avfoundation-0.9.21+2/ios/camera_avfoundation/Sources/camera_avfoundation_objc/messages.g.m","sourceTree":"","type":"file"},{"fileType":"sourcecode.c.objc","guid":"bfdfe7dc352907fc980b868725387e9851599d94c80ec88693114889217d19ec","path":"../../../../../../../../../../../../.pub-cache/hosted/pub.dev/camera_avfoundation-0.9.21+2/ios/camera_avfoundation/Sources/camera_avfoundation_objc/QueueUtils.m","sourceTree":"","type":"file"},{"children":[{"children":[{"fileType":"sourcecode.c.h","guid":"bfdfe7dc352907fc980b868725387e988a496b0b1313fdf74b9c7b937fa522af","path":"../../../../../../../../../../../../../../.pub-cache/hosted/pub.dev/camera_avfoundation-0.9.21+2/ios/camera_avfoundation/Sources/camera_avfoundation_objc/include/camera_avfoundation/camera_avfoundation.h","sourceTree":"","type":"file"},{"fileType":"sourcecode.c.h","guid":"bfdfe7dc352907fc980b868725387e98bec2388e2d0f9bf3dcc989355dae261c","path":"../../../../../../../../../../../../../../.pub-cache/hosted/pub.dev/camera_avfoundation-0.9.21+2/ios/camera_avfoundation/Sources/camera_avfoundation_objc/include/camera_avfoundation/CameraProperties.h","sourceTree":"","type":"file"},{"fileType":"sourcecode.c.h","guid":"bfdfe7dc352907fc980b868725387e982d376cf7afbf6b4a27ea861e42e9e18a","path":"../../../../../../../../../../../../../../.pub-cache/hosted/pub.dev/camera_avfoundation-0.9.21+2/ios/camera_avfoundation/Sources/camera_avfoundation_objc/include/camera_avfoundation/FLTAssetWriter.h","sourceTree":"","type":"file"},{"fileType":"sourcecode.c.h","guid":"bfdfe7dc352907fc980b868725387e98bdcc6ea8f95ca3d31fda7ca6d0ec07bf","path":"../../../../../../../../../../../../../../.pub-cache/hosted/pub.dev/camera_avfoundation-0.9.21+2/ios/camera_avfoundation/Sources/camera_avfoundation_objc/include/camera_avfoundation/FLTCam.h","sourceTree":"","type":"file"},{"fileType":"sourcecode.c.h","guid":"bfdfe7dc352907fc980b868725387e98061b944840a544e7c2244b7dec0cea3c","path":"../../../../../../../../../../../../../../.pub-cache/hosted/pub.dev/camera_avfoundation-0.9.21+2/ios/camera_avfoundation/Sources/camera_avfoundation_objc/include/camera_avfoundation/FLTCam_Test.h","sourceTree":"","type":"file"},{"fileType":"sourcecode.c.h","guid":"bfdfe7dc352907fc980b868725387e9884ca4421e20e7795c8f05c67c31cd7a6","path":"../../../../../../../../../../../../../../.pub-cache/hosted/pub.dev/camera_avfoundation-0.9.21+2/ios/camera_avfoundation/Sources/camera_avfoundation_objc/include/camera_avfoundation/FLTCamConfiguration.h","sourceTree":"","type":"file"},{"fileType":"sourcecode.c.h","guid":"bfdfe7dc352907fc980b868725387e981307d949f1eec051061c3f81e12003be","path":"../../../../../../../../../../../../../../.pub-cache/hosted/pub.dev/camera_avfoundation-0.9.21+2/ios/camera_avfoundation/Sources/camera_avfoundation_objc/include/camera_avfoundation/FLTCameraDeviceDiscovering.h","sourceTree":"","type":"file"},{"fileType":"sourcecode.c.h","guid":"bfdfe7dc352907fc980b868725387e98b73d4fa19990e40f5ed65965564379bb","path":"../../../../../../../../../../../../../../.pub-cache/hosted/pub.dev/camera_avfoundation-0.9.21+2/ios/camera_avfoundation/Sources/camera_avfoundation_objc/include/camera_avfoundation/FLTCameraPermissionManager.h","sourceTree":"","type":"file"},{"fileType":"sourcecode.c.h","guid":"bfdfe7dc352907fc980b868725387e9806d75717294b36105ee335141a42c17c","path":"../../../../../../../../../../../../../../.pub-cache/hosted/pub.dev/camera_avfoundation-0.9.21+2/ios/camera_avfoundation/Sources/camera_avfoundation_objc/include/camera_avfoundation/FLTCamMediaSettingsAVWrapper.h","sourceTree":"","type":"file"},{"fileType":"sourcecode.c.h","guid":"bfdfe7dc352907fc980b868725387e981fbc9e9c8a4aa0a1eaacee019fdbf2f4","path":"../../../../../../../../../../../../../../.pub-cache/hosted/pub.dev/camera_avfoundation-0.9.21+2/ios/camera_avfoundation/Sources/camera_avfoundation_objc/include/camera_avfoundation/FLTCaptureConnection.h","sourceTree":"","type":"file"},{"fileType":"sourcecode.c.h","guid":"bfdfe7dc352907fc980b868725387e989b272d09f5b565b076e8b0a8a66fb95c","path":"../../../../../../../../../../../../../../.pub-cache/hosted/pub.dev/camera_avfoundation-0.9.21+2/ios/camera_avfoundation/Sources/camera_avfoundation_objc/include/camera_avfoundation/FLTCaptureDevice.h","sourceTree":"","type":"file"},{"fileType":"sourcecode.c.h","guid":"bfdfe7dc352907fc980b868725387e98bbc3cd20c75ab4d15083fe2822084151","path":"../../../../../../../../../../../../../../.pub-cache/hosted/pub.dev/camera_avfoundation-0.9.21+2/ios/camera_avfoundation/Sources/camera_avfoundation_objc/include/camera_avfoundation/FLTCaptureDeviceFormat.h","sourceTree":"","type":"file"},{"fileType":"sourcecode.c.h","guid":"bfdfe7dc352907fc980b868725387e9827732205233ea745d3d17d702bae0902","path":"../../../../../../../../../../../../../../.pub-cache/hosted/pub.dev/camera_avfoundation-0.9.21+2/ios/camera_avfoundation/Sources/camera_avfoundation_objc/include/camera_avfoundation/FLTCaptureOutput.h","sourceTree":"","type":"file"},{"fileType":"sourcecode.c.h","guid":"bfdfe7dc352907fc980b868725387e98aa00a66f606a5894ff7b9c4193c2336d","path":"../../../../../../../../../../../../../../.pub-cache/hosted/pub.dev/camera_avfoundation-0.9.21+2/ios/camera_avfoundation/Sources/camera_avfoundation_objc/include/camera_avfoundation/FLTCapturePhotoOutput.h","sourceTree":"","type":"file"},{"fileType":"sourcecode.c.h","guid":"bfdfe7dc352907fc980b868725387e9805f59dff71b98dff44bcb35e99826611","path":"../../../../../../../../../../../../../../.pub-cache/hosted/pub.dev/camera_avfoundation-0.9.21+2/ios/camera_avfoundation/Sources/camera_avfoundation_objc/include/camera_avfoundation/FLTCaptureSession.h","sourceTree":"","type":"file"},{"fileType":"sourcecode.c.h","guid":"bfdfe7dc352907fc980b868725387e98f88bdf71c2ece055e64ef37dfcb946a1","path":"../../../../../../../../../../../../../../.pub-cache/hosted/pub.dev/camera_avfoundation-0.9.21+2/ios/camera_avfoundation/Sources/camera_avfoundation_objc/include/camera_avfoundation/FLTCaptureVideoDataOutput.h","sourceTree":"","type":"file"},{"fileType":"sourcecode.c.h","guid":"bfdfe7dc352907fc980b868725387e98b5b5f640e4853c81fca0b5da550bdcf5","path":"../../../../../../../../../../../../../../.pub-cache/hosted/pub.dev/camera_avfoundation-0.9.21+2/ios/camera_avfoundation/Sources/camera_avfoundation_objc/include/camera_avfoundation/FLTDeviceOrientationProviding.h","sourceTree":"","type":"file"},{"fileType":"sourcecode.c.h","guid":"bfdfe7dc352907fc980b868725387e9841f506e6acdddbc3a5d078988dde4c22","path":"../../../../../../../../../../../../../../.pub-cache/hosted/pub.dev/camera_avfoundation-0.9.21+2/ios/camera_avfoundation/Sources/camera_avfoundation_objc/include/camera_avfoundation/FLTEventChannel.h","sourceTree":"","type":"file"},{"fileType":"sourcecode.c.h","guid":"bfdfe7dc352907fc980b868725387e9877689363904fdc263f22d395bf46b7ff","path":"../../../../../../../../../../../../../../.pub-cache/hosted/pub.dev/camera_avfoundation-0.9.21+2/ios/camera_avfoundation/Sources/camera_avfoundation_objc/include/camera_avfoundation/FLTFormatUtils.h","sourceTree":"","type":"file"},{"fileType":"sourcecode.c.h","guid":"bfdfe7dc352907fc980b868725387e98dc0df62ffc0de3ec3f484ffd1a9ef4da","path":"../../../../../../../../../../../../../../.pub-cache/hosted/pub.dev/camera_avfoundation-0.9.21+2/ios/camera_avfoundation/Sources/camera_avfoundation_objc/include/camera_avfoundation/FLTImageStreamHandler.h","sourceTree":"","type":"file"},{"fileType":"sourcecode.c.h","guid":"bfdfe7dc352907fc980b868725387e98d2795a25b9f9f995f8a6605e26802aa1","path":"../../../../../../../../../../../../../../.pub-cache/hosted/pub.dev/camera_avfoundation-0.9.21+2/ios/camera_avfoundation/Sources/camera_avfoundation_objc/include/camera_avfoundation/FLTPermissionServicing.h","sourceTree":"","type":"file"},{"fileType":"sourcecode.c.h","guid":"bfdfe7dc352907fc980b868725387e98c013c9fa841e7f4843f3a4bde01ca879","path":"../../../../../../../../../../../../../../.pub-cache/hosted/pub.dev/camera_avfoundation-0.9.21+2/ios/camera_avfoundation/Sources/camera_avfoundation_objc/include/camera_avfoundation/FLTSavePhotoDelegate.h","sourceTree":"","type":"file"},{"fileType":"sourcecode.c.h","guid":"bfdfe7dc352907fc980b868725387e98646bcd0bc1969f167312816d9267a516","path":"../../../../../../../../../../../../../../.pub-cache/hosted/pub.dev/camera_avfoundation-0.9.21+2/ios/camera_avfoundation/Sources/camera_avfoundation_objc/include/camera_avfoundation/FLTSavePhotoDelegate_Test.h","sourceTree":"","type":"file"},{"fileType":"sourcecode.c.h","guid":"bfdfe7dc352907fc980b868725387e98d35201bc6359822c132fbf3930cae9a9","path":"../../../../../../../../../../../../../../.pub-cache/hosted/pub.dev/camera_avfoundation-0.9.21+2/ios/camera_avfoundation/Sources/camera_avfoundation_objc/include/camera_avfoundation/FLTThreadSafeEventChannel.h","sourceTree":"","type":"file"},{"fileType":"sourcecode.c.h","guid":"bfdfe7dc352907fc980b868725387e98df47c568f003e0086d5a88268b6eb7a7","path":"../../../../../../../../../../../../../../.pub-cache/hosted/pub.dev/camera_avfoundation-0.9.21+2/ios/camera_avfoundation/Sources/camera_avfoundation_objc/include/camera_avfoundation/FLTWritableData.h","sourceTree":"","type":"file"},{"fileType":"sourcecode.c.h","guid":"bfdfe7dc352907fc980b868725387e98bd068a0e6483485d78dc23696eba3638","path":"../../../../../../../../../../../../../../.pub-cache/hosted/pub.dev/camera_avfoundation-0.9.21+2/ios/camera_avfoundation/Sources/camera_avfoundation_objc/include/camera_avfoundation/messages.g.h","sourceTree":"","type":"file"},{"fileType":"sourcecode.c.h","guid":"bfdfe7dc352907fc980b868725387e9809496e61d8f399d92800b33bdded072b","path":"../../../../../../../../../../../../../../.pub-cache/hosted/pub.dev/camera_avfoundation-0.9.21+2/ios/camera_avfoundation/Sources/camera_avfoundation_objc/include/camera_avfoundation/QueueUtils.h","sourceTree":"","type":"file"}],"guid":"bfdfe7dc352907fc980b868725387e98720dd63de74ad024614aa4abb19e519d","name":"camera_avfoundation","path":"camera_avfoundation","sourceTree":"","type":"group"}],"guid":"bfdfe7dc352907fc980b868725387e9833e1da7d2aa110d3c3d45110325a6233","name":"include","path":"include","sourceTree":"","type":"group"}],"guid":"bfdfe7dc352907fc980b868725387e980fb268c16bb3797c2019ef9db59e0048","name":"camera_avfoundation_objc","path":"camera_avfoundation_objc","sourceTree":"","type":"group"}],"guid":"bfdfe7dc352907fc980b868725387e9849f52d038cfbc22f3b9dacdb87e6e2de","name":"Sources","path":"Sources","sourceTree":"","type":"group"}],"guid":"bfdfe7dc352907fc980b868725387e9873401c8405e805e3bc3993de725e7df2","name":"camera_avfoundation","path":"camera_avfoundation","sourceTree":"","type":"group"}],"guid":"bfdfe7dc352907fc980b868725387e985a688ab6bfba7266f08b9f5e5c53dbec","name":"ios","path":"ios","sourceTree":"","type":"group"}],"guid":"bfdfe7dc352907fc980b868725387e98867ada4264934aebf36f89cb19518fb0","name":"camera_avfoundation","path":"camera_avfoundation","sourceTree":"","type":"group"}],"guid":"bfdfe7dc352907fc980b868725387e98eb40b1e369b2fcc9a5eec48da27f28ba","name":"plugins","path":"plugins","sourceTree":"","type":"group"}],"guid":"bfdfe7dc352907fc980b868725387e9838b67d3e6e5a6033efe85aaf811aef69","name":".symlinks","path":".symlinks","sourceTree":"","type":"group"}],"guid":"bfdfe7dc352907fc980b868725387e98e9c1db63f6999b893a6331e42325c7d7","name":"ios","path":"ios","sourceTree":"","type":"group"}],"guid":"bfdfe7dc352907fc980b868725387e983270c1ce1714080d15920ec308e831da","name":"mih_ui","path":"mih_ui","sourceTree":"","type":"group"}],"guid":"bfdfe7dc352907fc980b868725387e9814e32b562c195bfdc400e4a9d9e51712","name":"mih-project","path":"mih-project","sourceTree":"","type":"group"}],"guid":"bfdfe7dc352907fc980b868725387e98dbb3e378d0e8174deba4355285c9e1da","name":"mih_main","path":"mih_main","sourceTree":"","type":"group"}],"guid":"bfdfe7dc352907fc980b868725387e98900ef292b8660e0c41c98d05dcf446f4","name":"Git","path":"Git","sourceTree":"","type":"group"}],"guid":"bfdfe7dc352907fc980b868725387e987f5cd018d276006bc73477d3afda0cf0","name":"..","path":"..","sourceTree":"","type":"group"}],"guid":"bfdfe7dc352907fc980b868725387e9842880957de531609d7c9f73bd4d95f3c","name":"..","path":"..","sourceTree":"","type":"group"}],"guid":"bfdfe7dc352907fc980b868725387e9896535628810cd04acd2a97306ca82274","name":"..","path":"..","sourceTree":"","type":"group"}],"guid":"bfdfe7dc352907fc980b868725387e98c73ca0370b3b8cdb5a88e7f675303ccc","name":"..","path":"..","sourceTree":"","type":"group"}],"guid":"bfdfe7dc352907fc980b868725387e98d2d84f26aae453043067979ccdc88d7b","name":"..","path":"..","sourceTree":"","type":"group"}],"guid":"bfdfe7dc352907fc980b868725387e9823dcb1c7b5c292debaa1ba714d4913ac","name":"..","path":"..","sourceTree":"","type":"group"}],"guid":"bfdfe7dc352907fc980b868725387e98fa32e371169eb70bcc78011edeffdce2","name":"..","path":"../../../../../../../../../.pub-cache/hosted/pub.dev/camera_avfoundation-0.9.21+2/ios/camera_avfoundation","sourceTree":"","type":"group"},{"children":[{"fileType":"text.script.ruby","guid":"bfdfe7dc352907fc980b868725387e9848a3f6690a788534c9add8c45820fd84","path":"../../../../../../../../../.pub-cache/hosted/pub.dev/camera_avfoundation-0.9.21+2/ios/camera_avfoundation.podspec","sourceTree":"","type":"file"},{"fileType":"text","guid":"bfdfe7dc352907fc980b868725387e9843698f9b7a15e52408cc7c1082d32940","path":"../../../../../../../../../.pub-cache/hosted/pub.dev/camera_avfoundation-0.9.21+2/LICENSE","sourceTree":"","type":"file"}],"guid":"bfdfe7dc352907fc980b868725387e98e32012cf02cb775fd480ab488b49aa25","name":"Pod","path":"","sourceTree":"","type":"group"},{"children":[{"fileType":"sourcecode.module-map","guid":"bfdfe7dc352907fc980b868725387e98b075b472a37c0cb498df8a9c1bbfabb6","path":"camera_avfoundation.modulemap","sourceTree":"","type":"file"},{"fileType":"sourcecode.c.objc","guid":"bfdfe7dc352907fc980b868725387e986340a78c7da800e0528a24e97f21d303","path":"camera_avfoundation-dummy.m","sourceTree":"","type":"file"},{"fileType":"text.plist.xml","guid":"bfdfe7dc352907fc980b868725387e98e9d27d157c4759fc3f852f5aaf9f770f","path":"camera_avfoundation-Info.plist","sourceTree":"","type":"file"},{"fileType":"sourcecode.c.h","guid":"bfdfe7dc352907fc980b868725387e98cdce89c428e61807b80568c28f8cf4df","path":"camera_avfoundation-prefix.pch","sourceTree":"","type":"file"},{"fileType":"sourcecode.c.h","guid":"bfdfe7dc352907fc980b868725387e98571a31becba8fba4259df5e7da0ef95b","path":"camera_avfoundation-umbrella.h","sourceTree":"","type":"file"},{"fileType":"text.xcconfig","guid":"bfdfe7dc352907fc980b868725387e983535bec86897f82e29e35c2a37087d79","path":"camera_avfoundation.debug.xcconfig","sourceTree":"","type":"file"},{"fileType":"text.xcconfig","guid":"bfdfe7dc352907fc980b868725387e989ea7a1b7622f37728c5db7b6902fabc9","path":"camera_avfoundation.release.xcconfig","sourceTree":"","type":"file"},{"fileType":"text.plist.xml","guid":"bfdfe7dc352907fc980b868725387e98ba4b8152da8f221e2c3ae3f513312ae3","path":"ResourceBundle-camera_avfoundation_privacy-camera_avfoundation-Info.plist","sourceTree":"","type":"file"}],"guid":"bfdfe7dc352907fc980b868725387e981b9b5b0f8efbde555b4b2d16e08422df","name":"Support Files","path":"../../../../Pods/Target Support Files/camera_avfoundation","sourceTree":"","type":"group"}],"guid":"bfdfe7dc352907fc980b868725387e98868ea2c0aec702c3eb3c44293cfe342b","name":"camera_avfoundation","path":"../.symlinks/plugins/camera_avfoundation/ios","sourceTree":"","type":"group"},{"children":[{"children":[{"children":[{"children":[{"children":[{"children":[{"children":[{"children":[{"children":[{"children":[{"children":[{"children":[{"children":[{"children":[{"children":[{"children":[{"children":[{"children":[{"children":[{"children":[{"children":[{"fileType":"sourcecode.c.objc","guid":"bfdfe7dc352907fc980b868725387e98a14950a917a0df000272111b3af00e58","path":"../../../../../../../../../../../../.pub-cache/hosted/pub.dev/device_info_plus-11.4.0/ios/device_info_plus/Sources/device_info_plus/DeviceIdentifiers.m","sourceTree":"","type":"file"},{"fileType":"sourcecode.c.objc","guid":"bfdfe7dc352907fc980b868725387e98f1edbc3ed8b2196eaa0d7f969ebdde47","path":"../../../../../../../../../../../../.pub-cache/hosted/pub.dev/device_info_plus-11.4.0/ios/device_info_plus/Sources/device_info_plus/FPPDeviceInfoPlusPlugin.m","sourceTree":"","type":"file"},{"fileType":"text.xml","guid":"bfdfe7dc352907fc980b868725387e98c10991a7301e313966d8722e62961e70","path":"../../../../../../../../../../../../.pub-cache/hosted/pub.dev/device_info_plus-11.4.0/ios/device_info_plus/Sources/device_info_plus/PrivacyInfo.xcprivacy","sourceTree":"","type":"file"},{"children":[{"children":[{"fileType":"sourcecode.c.h","guid":"bfdfe7dc352907fc980b868725387e98bd45822b13e3ce1eed9c6622596d0bb0","path":"../../../../../../../../../../../../../../.pub-cache/hosted/pub.dev/device_info_plus-11.4.0/ios/device_info_plus/Sources/device_info_plus/include/device_info_plus/DeviceIdentifiers.h","sourceTree":"","type":"file"},{"fileType":"sourcecode.c.h","guid":"bfdfe7dc352907fc980b868725387e98c2d16edfd8321a1d2a6421b3cbc221c7","path":"../../../../../../../../../../../../../../.pub-cache/hosted/pub.dev/device_info_plus-11.4.0/ios/device_info_plus/Sources/device_info_plus/include/device_info_plus/FPPDeviceInfoPlusPlugin.h","sourceTree":"","type":"file"}],"guid":"bfdfe7dc352907fc980b868725387e98a36f478c28e4c74c87e6789b6bda487b","name":"device_info_plus","path":"device_info_plus","sourceTree":"","type":"group"}],"guid":"bfdfe7dc352907fc980b868725387e988ccc673f6900230d346706c867dff96c","name":"include","path":"include","sourceTree":"","type":"group"}],"guid":"bfdfe7dc352907fc980b868725387e983114e333923452f967f09fd557bec68c","name":"device_info_plus","path":"device_info_plus","sourceTree":"","type":"group"}],"guid":"bfdfe7dc352907fc980b868725387e98a48dad5e47a6c3b4008dd269a358f2dc","name":"Sources","path":"Sources","sourceTree":"","type":"group"}],"guid":"bfdfe7dc352907fc980b868725387e9892a23ed194e0fbac325f6866b93f390a","name":"device_info_plus","path":"device_info_plus","sourceTree":"","type":"group"}],"guid":"bfdfe7dc352907fc980b868725387e983b2b17f4bf00ad4702021bf744c70b33","name":"ios","path":"ios","sourceTree":"","type":"group"}],"guid":"bfdfe7dc352907fc980b868725387e98fe5b97c828eb8d8d42456a4d3d485187","name":"device_info_plus","path":"device_info_plus","sourceTree":"","type":"group"}],"guid":"bfdfe7dc352907fc980b868725387e98232f37c0ef599d3c2a7a9ff7af2c9eb9","name":"plugins","path":"plugins","sourceTree":"","type":"group"}],"guid":"bfdfe7dc352907fc980b868725387e9805222b040a2619c7ab29391e344a705d","name":".symlinks","path":".symlinks","sourceTree":"","type":"group"}],"guid":"bfdfe7dc352907fc980b868725387e9895fded9ebca0746ccb4be19405fbf727","name":"ios","path":"ios","sourceTree":"","type":"group"}],"guid":"bfdfe7dc352907fc980b868725387e98241b2e715d2657ff7f9a34c2f332cd25","name":"mih_ui","path":"mih_ui","sourceTree":"","type":"group"}],"guid":"bfdfe7dc352907fc980b868725387e98d57295f821f5d909f74a1e93793bf30a","name":"mih-project","path":"mih-project","sourceTree":"","type":"group"}],"guid":"bfdfe7dc352907fc980b868725387e986248d8602b7dff2c11a5e9c877bcbd7a","name":"mih_main","path":"mih_main","sourceTree":"","type":"group"}],"guid":"bfdfe7dc352907fc980b868725387e981819dbd6c107d3de474ab2728b424117","name":"Git","path":"Git","sourceTree":"","type":"group"}],"guid":"bfdfe7dc352907fc980b868725387e982070bfc5818879e8e22cae46e614aa5b","name":"..","path":"..","sourceTree":"","type":"group"}],"guid":"bfdfe7dc352907fc980b868725387e98e5e96b78a60f6211aeee0b626360de68","name":"..","path":"..","sourceTree":"","type":"group"}],"guid":"bfdfe7dc352907fc980b868725387e98edd2f48e225e6aaa855ea062d46604d3","name":"..","path":"..","sourceTree":"","type":"group"}],"guid":"bfdfe7dc352907fc980b868725387e9807f3830ccb1a100cca5b3cd98ecfb9c4","name":"..","path":"..","sourceTree":"","type":"group"}],"guid":"bfdfe7dc352907fc980b868725387e989dd701511f33509e51d9d787c4a844b7","name":"..","path":"..","sourceTree":"","type":"group"}],"guid":"bfdfe7dc352907fc980b868725387e98c3f3a9b09503921fb15ebb9377f8c928","name":"..","path":"..","sourceTree":"","type":"group"}],"guid":"bfdfe7dc352907fc980b868725387e983cd44b39da9ed60b459eaeab065e1f3f","name":"..","path":"..","sourceTree":"","type":"group"}],"guid":"bfdfe7dc352907fc980b868725387e9880ed93f98b6c01706770e2e4ae63126c","name":"..","path":"../../../../../../../../../.pub-cache/hosted/pub.dev/device_info_plus-11.4.0/ios/device_info_plus/Sources","sourceTree":"","type":"group"},{"children":[{"fileType":"text.script.ruby","guid":"bfdfe7dc352907fc980b868725387e98e99d8fc33ed917a25369652f285edca4","path":"../../../../../../../../../.pub-cache/hosted/pub.dev/device_info_plus-11.4.0/ios/device_info_plus.podspec","sourceTree":"","type":"file"},{"fileType":"text","guid":"bfdfe7dc352907fc980b868725387e98ac11e22a794ad2d0d45851ed7b46b7c7","path":"../../../../../../../../../.pub-cache/hosted/pub.dev/device_info_plus-11.4.0/LICENSE","sourceTree":"","type":"file"}],"guid":"bfdfe7dc352907fc980b868725387e98007e8ca70d89e97ce0481f2cd3db9d21","name":"Pod","path":"","sourceTree":"","type":"group"},{"children":[{"fileType":"sourcecode.module-map","guid":"bfdfe7dc352907fc980b868725387e980cf749b6e02f8e783a05b1810ab2520a","path":"device_info_plus.modulemap","sourceTree":"","type":"file"},{"fileType":"sourcecode.c.objc","guid":"bfdfe7dc352907fc980b868725387e9807f6b982d3ceb175b963a37c743705ca","path":"device_info_plus-dummy.m","sourceTree":"","type":"file"},{"fileType":"text.plist.xml","guid":"bfdfe7dc352907fc980b868725387e984b05d44895ac38c0aee2a39267e26c58","path":"device_info_plus-Info.plist","sourceTree":"","type":"file"},{"fileType":"sourcecode.c.h","guid":"bfdfe7dc352907fc980b868725387e9855d928725338010b58bc023bf60c7982","path":"device_info_plus-prefix.pch","sourceTree":"","type":"file"},{"fileType":"sourcecode.c.h","guid":"bfdfe7dc352907fc980b868725387e9835406ea787e507a99238a6afb0ce83bf","path":"device_info_plus-umbrella.h","sourceTree":"","type":"file"},{"fileType":"text.xcconfig","guid":"bfdfe7dc352907fc980b868725387e98c5ea3636852338c982e52209ddd197d0","path":"device_info_plus.debug.xcconfig","sourceTree":"","type":"file"},{"fileType":"text.xcconfig","guid":"bfdfe7dc352907fc980b868725387e98c321042b295c1853a19a7fc9918a7454","path":"device_info_plus.release.xcconfig","sourceTree":"","type":"file"},{"fileType":"text.plist.xml","guid":"bfdfe7dc352907fc980b868725387e98e560abfc525c03080899e7db2c340f05","path":"ResourceBundle-device_info_plus_privacy-device_info_plus-Info.plist","sourceTree":"","type":"file"}],"guid":"bfdfe7dc352907fc980b868725387e980a0143b7abe232a638c3e436c9c85b04","name":"Support Files","path":"../../../../Pods/Target Support Files/device_info_plus","sourceTree":"","type":"group"}],"guid":"bfdfe7dc352907fc980b868725387e989c60fe42b61655fae2fe43bdf7932aaf","name":"device_info_plus","path":"../.symlinks/plugins/device_info_plus/ios","sourceTree":"","type":"group"},{"children":[{"children":[{"children":[{"children":[{"children":[{"children":[{"children":[{"children":[{"children":[{"children":[{"children":[{"children":[{"children":[{"children":[{"children":[{"children":[{"children":[{"children":[{"children":[{"children":[{"children":[{"fileType":"sourcecode.c.objc","guid":"bfdfe7dc352907fc980b868725387e981339c3a7ce270306613c6cbf72ac67cd","path":"../../../../../../../../../../../../.pub-cache/hosted/pub.dev/file_picker-10.1.9/ios/file_picker/Sources/file_picker/FileInfo.m","sourceTree":"","type":"file"},{"fileType":"sourcecode.c.objc","guid":"bfdfe7dc352907fc980b868725387e9801fd6a14089a47c1e1b32718bdf22178","path":"../../../../../../../../../../../../.pub-cache/hosted/pub.dev/file_picker-10.1.9/ios/file_picker/Sources/file_picker/FilePickerPlugin.m","sourceTree":"","type":"file"},{"fileType":"sourcecode.c.objc","guid":"bfdfe7dc352907fc980b868725387e986778635029f602b4f750099540bf2fc6","path":"../../../../../../../../../../../../.pub-cache/hosted/pub.dev/file_picker-10.1.9/ios/file_picker/Sources/file_picker/FileUtils.m","sourceTree":"","type":"file"},{"fileType":"sourcecode.c.objc","guid":"bfdfe7dc352907fc980b868725387e98bfd42a1232cd7e5dc79651040aca6fa8","path":"../../../../../../../../../../../../.pub-cache/hosted/pub.dev/file_picker-10.1.9/ios/file_picker/Sources/file_picker/ImageUtils.m","sourceTree":"","type":"file"},{"fileType":"text.xml","guid":"bfdfe7dc352907fc980b868725387e98b551b0a25b90abd62be165059ca67d67","path":"../../../../../../../../../../../../.pub-cache/hosted/pub.dev/file_picker-10.1.9/ios/file_picker/Sources/file_picker/PrivacyInfo.xcprivacy","sourceTree":"","type":"file"},{"children":[{"fileType":"sourcecode.c.h","guid":"bfdfe7dc352907fc980b868725387e98194a7baf55c88f6759045c696de2d397","path":"../../../../../../../../../../../../../.pub-cache/hosted/pub.dev/file_picker-10.1.9/ios/file_picker/Sources/file_picker/include/file_picker-umbrella.h","sourceTree":"","type":"file"},{"children":[{"fileType":"sourcecode.c.h","guid":"bfdfe7dc352907fc980b868725387e98f2597b2bfcfbe350f782de7028884db9","path":"../../../../../../../../../../../../../../.pub-cache/hosted/pub.dev/file_picker-10.1.9/ios/file_picker/Sources/file_picker/include/file_picker/FileInfo.h","sourceTree":"","type":"file"},{"fileType":"sourcecode.c.h","guid":"bfdfe7dc352907fc980b868725387e9848c85bbc8fed7f463b54a8a831976dcb","path":"../../../../../../../../../../../../../../.pub-cache/hosted/pub.dev/file_picker-10.1.9/ios/file_picker/Sources/file_picker/include/file_picker/FilePickerPlugin.h","sourceTree":"","type":"file"},{"fileType":"sourcecode.c.h","guid":"bfdfe7dc352907fc980b868725387e980bb97ec29a5da2b10289db8377230b28","path":"../../../../../../../../../../../../../../.pub-cache/hosted/pub.dev/file_picker-10.1.9/ios/file_picker/Sources/file_picker/include/file_picker/FileUtils.h","sourceTree":"","type":"file"},{"fileType":"sourcecode.c.h","guid":"bfdfe7dc352907fc980b868725387e9815da8454f786c30d7b23218e31792c1f","path":"../../../../../../../../../../../../../../.pub-cache/hosted/pub.dev/file_picker-10.1.9/ios/file_picker/Sources/file_picker/include/file_picker/ImageUtils.h","sourceTree":"","type":"file"}],"guid":"bfdfe7dc352907fc980b868725387e987ec33e1da9908dbb8ee4c30e837b13e3","name":"file_picker","path":"file_picker","sourceTree":"","type":"group"}],"guid":"bfdfe7dc352907fc980b868725387e98508440893bd5066e3ed1a7c01d72713f","name":"include","path":"include","sourceTree":"","type":"group"}],"guid":"bfdfe7dc352907fc980b868725387e98876ccbed581dfb1ccf9cb46b0dcef1ac","name":"file_picker","path":"file_picker","sourceTree":"","type":"group"}],"guid":"bfdfe7dc352907fc980b868725387e9876238cc084bb01942c389c823e08ba8e","name":"Sources","path":"Sources","sourceTree":"","type":"group"}],"guid":"bfdfe7dc352907fc980b868725387e9825253bdf39f4939aa9d309bad44cd90e","name":"file_picker","path":"file_picker","sourceTree":"","type":"group"}],"guid":"bfdfe7dc352907fc980b868725387e98204b4c48a8401aeeb2c66d9da2dc6406","name":"ios","path":"ios","sourceTree":"","type":"group"}],"guid":"bfdfe7dc352907fc980b868725387e987af8e00fed6cfb19c85be586fb50af29","name":"file_picker","path":"file_picker","sourceTree":"","type":"group"}],"guid":"bfdfe7dc352907fc980b868725387e98af20fe2d494dee2b229dff5de201c31d","name":"plugins","path":"plugins","sourceTree":"","type":"group"}],"guid":"bfdfe7dc352907fc980b868725387e98b8d348eb13875215537f678da0e57cd9","name":".symlinks","path":".symlinks","sourceTree":"","type":"group"}],"guid":"bfdfe7dc352907fc980b868725387e98c329f592babb941bd0763b1c29ce4315","name":"ios","path":"ios","sourceTree":"","type":"group"}],"guid":"bfdfe7dc352907fc980b868725387e98ae0c00c2af685d25f88eb893e62a30b9","name":"mih_ui","path":"mih_ui","sourceTree":"","type":"group"}],"guid":"bfdfe7dc352907fc980b868725387e98adc3e4d983100667be4dee2b80d0dfc6","name":"mih-project","path":"mih-project","sourceTree":"","type":"group"}],"guid":"bfdfe7dc352907fc980b868725387e984571879cbdba5837952da95d61733458","name":"mih_main","path":"mih_main","sourceTree":"","type":"group"}],"guid":"bfdfe7dc352907fc980b868725387e98086cdd35191d4e5c012daa4ec75a907a","name":"Git","path":"Git","sourceTree":"","type":"group"}],"guid":"bfdfe7dc352907fc980b868725387e988f4b179bf3118ebc76c9bd5515b59302","name":"..","path":"..","sourceTree":"","type":"group"}],"guid":"bfdfe7dc352907fc980b868725387e98753ef7b019af866f654b60914c737b0b","name":"..","path":"..","sourceTree":"","type":"group"}],"guid":"bfdfe7dc352907fc980b868725387e98cf4df5d694361eaf7ac7886f24593f44","name":"..","path":"..","sourceTree":"","type":"group"}],"guid":"bfdfe7dc352907fc980b868725387e9853314b05f9d7966a9967a7b09d288fda","name":"..","path":"..","sourceTree":"","type":"group"}],"guid":"bfdfe7dc352907fc980b868725387e98d08d2178502ea4607f6e2f4952d5dd61","name":"..","path":"..","sourceTree":"","type":"group"}],"guid":"bfdfe7dc352907fc980b868725387e98b370b5aeb90be8635fad89141f9cb533","name":"..","path":"..","sourceTree":"","type":"group"}],"guid":"bfdfe7dc352907fc980b868725387e98ef196c3b56089166e1172c7e48cb7973","name":"..","path":"..","sourceTree":"","type":"group"}],"guid":"bfdfe7dc352907fc980b868725387e98ced152461fa73008f07b089d6eadb4f3","name":"..","path":"../../../../../../../../../.pub-cache/hosted/pub.dev/file_picker-10.1.9/ios/file_picker/Sources","sourceTree":"","type":"group"},{"children":[{"fileType":"sourcecode.module-map","guid":"bfdfe7dc352907fc980b868725387e984dcd2513e8f43ff19eec26a338dd1a2b","path":"../../../../../../../../../.pub-cache/hosted/pub.dev/file_picker-10.1.9/ios/file_picker/Sources/file_picker/include/file_picker.modulemap","sourceTree":"","type":"file"},{"fileType":"text.script.ruby","guid":"bfdfe7dc352907fc980b868725387e985f9564a0a4b3e872fc7a2dd8cd1eb5ff","path":"../../../../../../../../../.pub-cache/hosted/pub.dev/file_picker-10.1.9/ios/file_picker.podspec","sourceTree":"","type":"file"},{"fileType":"text","guid":"bfdfe7dc352907fc980b868725387e989fdf3c52996ab43f52e59c5173f22c1d","path":"../../../../../../../../../.pub-cache/hosted/pub.dev/file_picker-10.1.9/LICENSE","sourceTree":"","type":"file"}],"guid":"bfdfe7dc352907fc980b868725387e989432d8dee89a4175d16eba8758c97325","name":"Pod","path":"","sourceTree":"","type":"group"},{"children":[{"fileType":"sourcecode.module-map","guid":"bfdfe7dc352907fc980b868725387e9824779eff23f0e074f7df07c4155cef03","path":"file_picker.modulemap","sourceTree":"","type":"file"},{"fileType":"sourcecode.c.objc","guid":"bfdfe7dc352907fc980b868725387e98d5f93b22efc88a714a54d4c0f0e25b81","path":"file_picker-dummy.m","sourceTree":"","type":"file"},{"fileType":"text.plist.xml","guid":"bfdfe7dc352907fc980b868725387e98e77bdbd62eeb428668775386c90f3736","path":"file_picker-Info.plist","sourceTree":"","type":"file"},{"fileType":"sourcecode.c.h","guid":"bfdfe7dc352907fc980b868725387e980b7fc2d4c6b3db79d638479249afd0ba","path":"file_picker-prefix.pch","sourceTree":"","type":"file"},{"fileType":"text.xcconfig","guid":"bfdfe7dc352907fc980b868725387e980e6a79d9461f52673e9cd16e5e9ce12b","path":"file_picker.debug.xcconfig","sourceTree":"","type":"file"},{"fileType":"text.xcconfig","guid":"bfdfe7dc352907fc980b868725387e9855ea28d68c6105425b28b0dc67fbf53b","path":"file_picker.release.xcconfig","sourceTree":"","type":"file"},{"fileType":"text.plist.xml","guid":"bfdfe7dc352907fc980b868725387e98ef2de4f3fb1ffd72ab2c607dd8196a86","path":"ResourceBundle-file_picker_ios_privacy-file_picker-Info.plist","sourceTree":"","type":"file"}],"guid":"bfdfe7dc352907fc980b868725387e98ed67d9ccf470b161929b2089bd3d76e0","name":"Support Files","path":"../../../../Pods/Target Support Files/file_picker","sourceTree":"","type":"group"}],"guid":"bfdfe7dc352907fc980b868725387e98457261c914b5712a0c81b7b673210d45","name":"file_picker","path":"../.symlinks/plugins/file_picker/ios","sourceTree":"","type":"group"},{"children":[{"children":[{"children":[{"children":[{"children":[{"children":[{"children":[{"children":[{"children":[{"children":[{"children":[{"children":[{"children":[{"children":[{"children":[{"children":[{"children":[{"fileType":"sourcecode.swift","guid":"bfdfe7dc352907fc980b868725387e98dc2b0e58e1746182ef03bafc59d5834f","path":"../../../../../../../../../../.pub-cache/hosted/pub.dev/file_saver-0.3.1/ios/Classes/Dialog.swift","sourceTree":"","type":"file"},{"fileType":"sourcecode.c.h","guid":"bfdfe7dc352907fc980b868725387e98ff33475189cdb687ddb89ac3219b5661","path":"../../../../../../../../../../.pub-cache/hosted/pub.dev/file_saver-0.3.1/ios/Classes/FileSaverPlugin.h","sourceTree":"","type":"file"},{"fileType":"sourcecode.c.objc","guid":"bfdfe7dc352907fc980b868725387e98ddd81e0874cadf29b2be4336e4173aaf","path":"../../../../../../../../../../.pub-cache/hosted/pub.dev/file_saver-0.3.1/ios/Classes/FileSaverPlugin.m","sourceTree":"","type":"file"},{"fileType":"sourcecode.swift","guid":"bfdfe7dc352907fc980b868725387e986d800696c536df7c30346254f4e8cf2a","path":"../../../../../../../../../../.pub-cache/hosted/pub.dev/file_saver-0.3.1/ios/Classes/SwiftFileSaverPlugin.swift","sourceTree":"","type":"file"}],"guid":"bfdfe7dc352907fc980b868725387e9815659e089ff36a5bee530818f43fbcb7","name":"Classes","path":"Classes","sourceTree":"","type":"group"}],"guid":"bfdfe7dc352907fc980b868725387e98d4aebdd7893e3b8cb089d50ca9b4bc78","name":"ios","path":"ios","sourceTree":"","type":"group"}],"guid":"bfdfe7dc352907fc980b868725387e98e6d7d8cbf3b5ec411c67c1f03fe81ead","name":"file_saver","path":"file_saver","sourceTree":"","type":"group"}],"guid":"bfdfe7dc352907fc980b868725387e98aafb9d1e47f6452625d310831d69dddf","name":"plugins","path":"plugins","sourceTree":"","type":"group"}],"guid":"bfdfe7dc352907fc980b868725387e98099c89238181468086df85246b398b85","name":".symlinks","path":".symlinks","sourceTree":"","type":"group"}],"guid":"bfdfe7dc352907fc980b868725387e9847f9e04d2f254a8af26cb75921d3299b","name":"ios","path":"ios","sourceTree":"","type":"group"}],"guid":"bfdfe7dc352907fc980b868725387e98ab82ab63c3848d1a0a7ed78d67d5da4e","name":"mih_ui","path":"mih_ui","sourceTree":"","type":"group"}],"guid":"bfdfe7dc352907fc980b868725387e98b7cf840946693dab6a74f830612074e9","name":"mih-project","path":"mih-project","sourceTree":"","type":"group"}],"guid":"bfdfe7dc352907fc980b868725387e9860ffc888692e201c70ed64468e588547","name":"mih_main","path":"mih_main","sourceTree":"","type":"group"}],"guid":"bfdfe7dc352907fc980b868725387e98c2d1131dc6f4976e4d3ab6f4176bb3de","name":"Git","path":"Git","sourceTree":"","type":"group"}],"guid":"bfdfe7dc352907fc980b868725387e984c791f289c18e2e4a16e5d8fa411c975","name":"..","path":"..","sourceTree":"","type":"group"}],"guid":"bfdfe7dc352907fc980b868725387e983faeb485f301a9e52bf1bb69ba50ad91","name":"..","path":"..","sourceTree":"","type":"group"}],"guid":"bfdfe7dc352907fc980b868725387e98b434ad4133669ae4f6a08cb4e16d1b46","name":"..","path":"..","sourceTree":"","type":"group"}],"guid":"bfdfe7dc352907fc980b868725387e98cbcf96434e5a7a4b6d5a57177315499a","name":"..","path":"..","sourceTree":"","type":"group"}],"guid":"bfdfe7dc352907fc980b868725387e980343e6b54eb1617a0d8fe398a6533dcb","name":"..","path":"..","sourceTree":"","type":"group"}],"guid":"bfdfe7dc352907fc980b868725387e988198233d35ce8b6c3ebb9ad34b8bbd83","name":"..","path":"../../../../../../../../../.pub-cache/hosted/pub.dev/file_saver-0.3.1/ios","sourceTree":"","type":"group"},{"children":[{"fileType":"text.script.ruby","guid":"bfdfe7dc352907fc980b868725387e9825bd1584ea6cd4b633f757b2d188df26","path":"../../../../../../../../../.pub-cache/hosted/pub.dev/file_saver-0.3.1/ios/file_saver.podspec","sourceTree":"","type":"file"},{"fileType":"text","guid":"bfdfe7dc352907fc980b868725387e98be8ad76d02f75772a3daccc4dc4bd919","path":"../../../../../../../../../.pub-cache/hosted/pub.dev/file_saver-0.3.1/LICENSE","sourceTree":"","type":"file"}],"guid":"bfdfe7dc352907fc980b868725387e98d51c541c07ea154916a1264b33490194","name":"Pod","path":"","sourceTree":"","type":"group"},{"children":[{"fileType":"sourcecode.module-map","guid":"bfdfe7dc352907fc980b868725387e989257c31a5aedd8cbb19c763c9e8f796e","path":"file_saver.modulemap","sourceTree":"","type":"file"},{"fileType":"sourcecode.c.objc","guid":"bfdfe7dc352907fc980b868725387e98e9b49b292faafa97f299b4d375bb94e8","path":"file_saver-dummy.m","sourceTree":"","type":"file"},{"fileType":"text.plist.xml","guid":"bfdfe7dc352907fc980b868725387e98afdb65ab8153857d00d3058fef46ef65","path":"file_saver-Info.plist","sourceTree":"","type":"file"},{"fileType":"sourcecode.c.h","guid":"bfdfe7dc352907fc980b868725387e98c3048b85162d65fa5f89103599a57d7f","path":"file_saver-prefix.pch","sourceTree":"","type":"file"},{"fileType":"sourcecode.c.h","guid":"bfdfe7dc352907fc980b868725387e988f5f13c3729537a5e4850a3184ef1504","path":"file_saver-umbrella.h","sourceTree":"","type":"file"},{"fileType":"text.xcconfig","guid":"bfdfe7dc352907fc980b868725387e9862b76e562a43dac8471f624a5cd9d3f8","path":"file_saver.debug.xcconfig","sourceTree":"","type":"file"},{"fileType":"text.xcconfig","guid":"bfdfe7dc352907fc980b868725387e98344086c33f6b20ad518611d4b42807b0","path":"file_saver.release.xcconfig","sourceTree":"","type":"file"}],"guid":"bfdfe7dc352907fc980b868725387e98400a94e16fad4b8af7b4e60ab51c11df","name":"Support Files","path":"../../../../Pods/Target Support Files/file_saver","sourceTree":"","type":"group"}],"guid":"bfdfe7dc352907fc980b868725387e984bfa932ae3b4edac96a7310960837f24","name":"file_saver","path":"../.symlinks/plugins/file_saver/ios","sourceTree":"","type":"group"},{"children":[{"children":[{"children":[{"children":[{"children":[{"children":[{"children":[{"children":[{"children":[{"children":[{"children":[{"children":[{"children":[{"children":[{"children":[{"children":[{"children":[{"children":[{"children":[{"children":[{"children":[{"children":[{"children":[{"fileType":"text.xml","guid":"bfdfe7dc352907fc980b868725387e9829fbee1379c76a8f9639197078562c42","path":"../../../../../../../../../../../../../.pub-cache/hosted/pub.dev/file_selector_ios-0.5.3+2/ios/file_selector_ios/Sources/file_selector_ios/Resources/PrivacyInfo.xcprivacy","sourceTree":"","type":"file"}],"guid":"bfdfe7dc352907fc980b868725387e98507f8f34c468201e4a5bd4c96ef42b4b","name":"Resources","path":"Resources","sourceTree":"","type":"group"}],"guid":"bfdfe7dc352907fc980b868725387e986ee0a3df2feb3af8fc441fe81a045863","name":"file_selector_ios","path":"file_selector_ios","sourceTree":"","type":"group"}],"guid":"bfdfe7dc352907fc980b868725387e98afe351d95e6d56fb7d6e1926d0bc16c1","name":"Sources","path":"Sources","sourceTree":"","type":"group"}],"guid":"bfdfe7dc352907fc980b868725387e98e2bb22e2b6e057e7a42bfecc709a093f","name":"file_selector_ios","path":"file_selector_ios","sourceTree":"","type":"group"}],"guid":"bfdfe7dc352907fc980b868725387e98f8f4bdacf126ec47df60ba4953e1eb6e","name":"ios","path":"ios","sourceTree":"","type":"group"}],"guid":"bfdfe7dc352907fc980b868725387e982e7e37300e43e96cb98a05aadc3bbc49","name":"file_selector_ios","path":"file_selector_ios","sourceTree":"","type":"group"}],"guid":"bfdfe7dc352907fc980b868725387e988551db43a644178c4426a752151e8daf","name":"plugins","path":"plugins","sourceTree":"","type":"group"}],"guid":"bfdfe7dc352907fc980b868725387e989b41c5a386d48a0b9781d40539831e9d","name":".symlinks","path":".symlinks","sourceTree":"","type":"group"}],"guid":"bfdfe7dc352907fc980b868725387e9860e60b3396bf587cf7e3881b72ff918a","name":"ios","path":"ios","sourceTree":"","type":"group"}],"guid":"bfdfe7dc352907fc980b868725387e98dc89a1a75464472b23df731aee581a25","name":"mih_ui","path":"mih_ui","sourceTree":"","type":"group"}],"guid":"bfdfe7dc352907fc980b868725387e980311fb2e79751151e623b7fd57d7fdff","name":"mih-project","path":"mih-project","sourceTree":"","type":"group"}],"guid":"bfdfe7dc352907fc980b868725387e989a8e9a9d9f60722b296838fc82cf42ab","name":"mih_main","path":"mih_main","sourceTree":"","type":"group"}],"guid":"bfdfe7dc352907fc980b868725387e98256aa9c17d570110e0beabc2f63ed1be","name":"Git","path":"Git","sourceTree":"","type":"group"}],"guid":"bfdfe7dc352907fc980b868725387e98295899a4f9811e1bf954b10afc74c580","name":"..","path":".","sourceTree":"","type":"group"},{"children":[{"children":[{"children":[{"children":[{"children":[{"children":[{"children":[{"children":[{"children":[{"children":[{"children":[{"children":[{"fileType":"sourcecode.swift","guid":"bfdfe7dc352907fc980b868725387e98f0ea88b68751cab794b769dc586bd419","path":"../../../../../../../../../../../../.pub-cache/hosted/pub.dev/file_selector_ios-0.5.3+2/ios/file_selector_ios/Sources/file_selector_ios/FileSelectorPlugin.swift","sourceTree":"","type":"file"},{"fileType":"sourcecode.swift","guid":"bfdfe7dc352907fc980b868725387e981d83a354ff745f0961d1610ff6de246a","path":"../../../../../../../../../../../../.pub-cache/hosted/pub.dev/file_selector_ios-0.5.3+2/ios/file_selector_ios/Sources/file_selector_ios/messages.g.swift","sourceTree":"","type":"file"},{"fileType":"sourcecode.swift","guid":"bfdfe7dc352907fc980b868725387e98179ec458b3b02e28a62624469e6b3a80","path":"../../../../../../../../../../../../.pub-cache/hosted/pub.dev/file_selector_ios-0.5.3+2/ios/file_selector_ios/Sources/file_selector_ios/ViewPresenter.swift","sourceTree":"","type":"file"}],"guid":"bfdfe7dc352907fc980b868725387e985325558c396579d5a0998664ac0536ce","name":"file_selector_ios","path":"file_selector_ios","sourceTree":"","type":"group"}],"guid":"bfdfe7dc352907fc980b868725387e9852ed467fbc4a63c5a9875642f31ac8d8","name":"Sources","path":"Sources","sourceTree":"","type":"group"}],"guid":"bfdfe7dc352907fc980b868725387e98f73f6a770a7a6bde630a133ebafed198","name":"file_selector_ios","path":"file_selector_ios","sourceTree":"","type":"group"}],"guid":"bfdfe7dc352907fc980b868725387e985f061352dd57853318525a163e622d61","name":"ios","path":"ios","sourceTree":"","type":"group"}],"guid":"bfdfe7dc352907fc980b868725387e98de7c5b0b652730d3cef22285ad226ace","name":"file_selector_ios","path":"file_selector_ios","sourceTree":"","type":"group"}],"guid":"bfdfe7dc352907fc980b868725387e981fde57e4d630f694ad318aa71b0c0ac2","name":"plugins","path":"plugins","sourceTree":"","type":"group"}],"guid":"bfdfe7dc352907fc980b868725387e980daa7ba2676ab006d9bdaa50e8bf3e7f","name":".symlinks","path":".symlinks","sourceTree":"","type":"group"}],"guid":"bfdfe7dc352907fc980b868725387e9898c49504ad2de913f1c38e3802a21ed8","name":"ios","path":"ios","sourceTree":"","type":"group"}],"guid":"bfdfe7dc352907fc980b868725387e9840dc9570b973353d8fafc8b5f6bb4020","name":"mih_ui","path":"mih_ui","sourceTree":"","type":"group"}],"guid":"bfdfe7dc352907fc980b868725387e98a36c35510ef07657da1eda88c2ad136e","name":"mih-project","path":"mih-project","sourceTree":"","type":"group"}],"guid":"bfdfe7dc352907fc980b868725387e9800bdb19987b89731ec900cf46c7d72fb","name":"mih_main","path":"mih_main","sourceTree":"","type":"group"}],"guid":"bfdfe7dc352907fc980b868725387e98fc436f922c705674880aa06b040181b9","name":"Git","path":"Git","sourceTree":"","type":"group"}],"guid":"bfdfe7dc352907fc980b868725387e98567f33f5ac28e20caa07498eb380b103","name":"..","path":"..","sourceTree":"","type":"group"}],"guid":"bfdfe7dc352907fc980b868725387e98bc048ab2780b32d4a6b86c99601be916","name":"..","path":"..","sourceTree":"","type":"group"}],"guid":"bfdfe7dc352907fc980b868725387e9816e498c459b4f09f5c4c2feb907c85d6","name":"..","path":"..","sourceTree":"","type":"group"}],"guid":"bfdfe7dc352907fc980b868725387e9802aa9bfe13ebb25b8fb6245d7d520a0d","name":"..","path":"..","sourceTree":"","type":"group"}],"guid":"bfdfe7dc352907fc980b868725387e982bd06e41d732a5c90627c4807cd83d4d","name":"..","path":"..","sourceTree":"","type":"group"}],"guid":"bfdfe7dc352907fc980b868725387e9874cffb2cc2072f394f34138a88466826","name":"..","path":"..","sourceTree":"","type":"group"}],"guid":"bfdfe7dc352907fc980b868725387e98733c2da0ac2206061d0f27c458e2a4eb","name":"..","path":"..","sourceTree":"","type":"group"}],"guid":"bfdfe7dc352907fc980b868725387e988977a0a3c8225e1d387342c56f44688c","name":"..","path":"../../../../../../../../../.pub-cache/hosted/pub.dev/file_selector_ios-0.5.3+2/ios/file_selector_ios/Sources","sourceTree":"","type":"group"},{"children":[{"fileType":"text.script.ruby","guid":"bfdfe7dc352907fc980b868725387e98359cebf352a3518635389663c1f7a510","path":"../../../../../../../../../.pub-cache/hosted/pub.dev/file_selector_ios-0.5.3+2/ios/file_selector_ios.podspec","sourceTree":"","type":"file"},{"fileType":"text","guid":"bfdfe7dc352907fc980b868725387e98ed9f8e4fd8e348d71e2afdc4b73c98bb","path":"../../../../../../../../../.pub-cache/hosted/pub.dev/file_selector_ios-0.5.3+2/LICENSE","sourceTree":"","type":"file"}],"guid":"bfdfe7dc352907fc980b868725387e98c5dee314251dd376898dcecc730dea89","name":"Pod","path":"","sourceTree":"","type":"group"},{"children":[{"fileType":"sourcecode.module-map","guid":"bfdfe7dc352907fc980b868725387e98b3f56de7e9056dca05895f8157e6d185","path":"file_selector_ios.modulemap","sourceTree":"","type":"file"},{"fileType":"sourcecode.c.objc","guid":"bfdfe7dc352907fc980b868725387e98c109472dcd25a3e59c31080f0ebdf811","path":"file_selector_ios-dummy.m","sourceTree":"","type":"file"},{"fileType":"text.plist.xml","guid":"bfdfe7dc352907fc980b868725387e983d14e1b4813a27bcd54316850245ae19","path":"file_selector_ios-Info.plist","sourceTree":"","type":"file"},{"fileType":"sourcecode.c.h","guid":"bfdfe7dc352907fc980b868725387e9870d9c2c42e712e711980fdc6bb373bf6","path":"file_selector_ios-prefix.pch","sourceTree":"","type":"file"},{"fileType":"sourcecode.c.h","guid":"bfdfe7dc352907fc980b868725387e9844d411eb7b3f7cc8e9589148720c721a","path":"file_selector_ios-umbrella.h","sourceTree":"","type":"file"},{"fileType":"text.xcconfig","guid":"bfdfe7dc352907fc980b868725387e982b66b547d250357cf91d1817df7cb423","path":"file_selector_ios.debug.xcconfig","sourceTree":"","type":"file"},{"fileType":"text.xcconfig","guid":"bfdfe7dc352907fc980b868725387e98f68cdcb857b34033c4bd7d63083cfeef","path":"file_selector_ios.release.xcconfig","sourceTree":"","type":"file"},{"fileType":"text.plist.xml","guid":"bfdfe7dc352907fc980b868725387e9812c099916240a2b77dcfb319effe267a","path":"ResourceBundle-file_selector_ios_privacy-file_selector_ios-Info.plist","sourceTree":"","type":"file"}],"guid":"bfdfe7dc352907fc980b868725387e985babe41be37b5ab0444cb57623720986","name":"Support Files","path":"../../../../Pods/Target Support Files/file_selector_ios","sourceTree":"","type":"group"}],"guid":"bfdfe7dc352907fc980b868725387e98107535039bfff6c5c3c358e9a299f06e","name":"file_selector_ios","path":"../.symlinks/plugins/file_selector_ios/ios","sourceTree":"","type":"group"},{"children":[{"children":[{"children":[{"children":[{"children":[{"children":[{"children":[{"children":[{"children":[{"children":[{"children":[{"children":[{"children":[{"children":[{"children":[{"children":[{"children":[{"children":[{"children":[{"children":[{"children":[{"fileType":"sourcecode.c.objc","guid":"bfdfe7dc352907fc980b868725387e98157eaa509705c5a0a8cf3ea2683f01c3","path":"../../../../../../../../../../../../.pub-cache/hosted/pub.dev/firebase_app_check-0.4.1+2/ios/firebase_app_check/Sources/firebase_app_check/FLTAppCheckProvider.m","sourceTree":"","type":"file"},{"fileType":"sourcecode.c.objc","guid":"bfdfe7dc352907fc980b868725387e9811391913961f2b0ab6847057591d15a2","path":"../../../../../../../../../../../../.pub-cache/hosted/pub.dev/firebase_app_check-0.4.1+2/ios/firebase_app_check/Sources/firebase_app_check/FLTAppCheckProviderFactory.m","sourceTree":"","type":"file"},{"fileType":"sourcecode.c.objc","guid":"bfdfe7dc352907fc980b868725387e988426fad311447aa6640aeb8b4fe3b1d2","path":"../../../../../../../../../../../../.pub-cache/hosted/pub.dev/firebase_app_check-0.4.1+2/ios/firebase_app_check/Sources/firebase_app_check/FLTFirebaseAppCheckPlugin.m","sourceTree":"","type":"file"},{"fileType":"sourcecode.c.objc","guid":"bfdfe7dc352907fc980b868725387e986cf945052e9a5cc9cf921ff7b6631624","path":"../../../../../../../../../../../../.pub-cache/hosted/pub.dev/firebase_app_check-0.4.1+2/ios/firebase_app_check/Sources/firebase_app_check/FLTTokenRefreshStreamHandler.m","sourceTree":"","type":"file"},{"children":[{"fileType":"sourcecode.c.h","guid":"bfdfe7dc352907fc980b868725387e987257dfc73b43963823ab3e833020d53b","path":"../../../../../../../../../../../../../.pub-cache/hosted/pub.dev/firebase_app_check-0.4.1+2/ios/firebase_app_check/Sources/firebase_app_check/include/FLTAppCheckProvider.h","sourceTree":"","type":"file"},{"fileType":"sourcecode.c.h","guid":"bfdfe7dc352907fc980b868725387e98e6e862ae88920fd2aa08c4d49b573983","path":"../../../../../../../../../../../../../.pub-cache/hosted/pub.dev/firebase_app_check-0.4.1+2/ios/firebase_app_check/Sources/firebase_app_check/include/FLTAppCheckProviderFactory.h","sourceTree":"","type":"file"},{"fileType":"sourcecode.c.h","guid":"bfdfe7dc352907fc980b868725387e9872317cb485910fd1580965e87f2fb858","path":"../../../../../../../../../../../../../.pub-cache/hosted/pub.dev/firebase_app_check-0.4.1+2/ios/firebase_app_check/Sources/firebase_app_check/include/FLTFirebaseAppCheckPlugin.h","sourceTree":"","type":"file"},{"fileType":"sourcecode.c.h","guid":"bfdfe7dc352907fc980b868725387e980c7e27df05ae77bf0663c37468ec4d68","path":"../../../../../../../../../../../../../.pub-cache/hosted/pub.dev/firebase_app_check-0.4.1+2/ios/firebase_app_check/Sources/firebase_app_check/include/FLTTokenRefreshStreamHandler.h","sourceTree":"","type":"file"}],"guid":"bfdfe7dc352907fc980b868725387e98564cbd84e342d2634ffbe1403141db62","name":"include","path":"include","sourceTree":"","type":"group"}],"guid":"bfdfe7dc352907fc980b868725387e98f83b499872a81ddce8a470a21cd946dc","name":"firebase_app_check","path":"firebase_app_check","sourceTree":"","type":"group"}],"guid":"bfdfe7dc352907fc980b868725387e981ec7b586de1bbbfb2e5eb5afd0e6deba","name":"Sources","path":"Sources","sourceTree":"","type":"group"}],"guid":"bfdfe7dc352907fc980b868725387e98981359a205b2897b4a0d0e46108f0341","name":"firebase_app_check","path":"firebase_app_check","sourceTree":"","type":"group"}],"guid":"bfdfe7dc352907fc980b868725387e98d3d0143f5e5f4a3ce09b9b7e63d97e56","name":"ios","path":"ios","sourceTree":"","type":"group"}],"guid":"bfdfe7dc352907fc980b868725387e987d4475d9485b3f2a9a12772af3ed9894","name":"firebase_app_check","path":"firebase_app_check","sourceTree":"","type":"group"}],"guid":"bfdfe7dc352907fc980b868725387e98bb1b77d43ad6ecddb49404e1d3682124","name":"plugins","path":"plugins","sourceTree":"","type":"group"}],"guid":"bfdfe7dc352907fc980b868725387e98f36e3f7d6876ec318283ffecdab3107b","name":".symlinks","path":".symlinks","sourceTree":"","type":"group"}],"guid":"bfdfe7dc352907fc980b868725387e98aa9a1a5f3db45001bebdce1fde36d727","name":"ios","path":"ios","sourceTree":"","type":"group"}],"guid":"bfdfe7dc352907fc980b868725387e98aba650793e06d81d390c0775d7a81b29","name":"mih_ui","path":"mih_ui","sourceTree":"","type":"group"}],"guid":"bfdfe7dc352907fc980b868725387e983a52d319578d9d10b8d52643bed7e195","name":"mih-project","path":"mih-project","sourceTree":"","type":"group"}],"guid":"bfdfe7dc352907fc980b868725387e98a638b971fcad8c56f52b163de6f696b8","name":"mih_main","path":"mih_main","sourceTree":"","type":"group"}],"guid":"bfdfe7dc352907fc980b868725387e984e18da2ecf2e80176dcb9cb8b29d310c","name":"Git","path":"Git","sourceTree":"","type":"group"}],"guid":"bfdfe7dc352907fc980b868725387e983658cf26719deeda9913fc12baf6d77b","name":"..","path":"..","sourceTree":"","type":"group"}],"guid":"bfdfe7dc352907fc980b868725387e98735a4ee8c6a39809e6473f773fcd82e4","name":"..","path":"..","sourceTree":"","type":"group"}],"guid":"bfdfe7dc352907fc980b868725387e987fdb79a4ac09a13bebcf786f26aaed22","name":"..","path":"..","sourceTree":"","type":"group"}],"guid":"bfdfe7dc352907fc980b868725387e9890da5e363aa4e4f2945eb226a050a96d","name":"..","path":"..","sourceTree":"","type":"group"}],"guid":"bfdfe7dc352907fc980b868725387e983c71bc945af531d92aa843a6039c94c9","name":"..","path":"..","sourceTree":"","type":"group"}],"guid":"bfdfe7dc352907fc980b868725387e987b761a8f9efe17c9331540deab200caa","name":"..","path":"..","sourceTree":"","type":"group"}],"guid":"bfdfe7dc352907fc980b868725387e98ffd3ab3d1b3687a2fe92b627fda8631e","name":"..","path":"..","sourceTree":"","type":"group"}],"guid":"bfdfe7dc352907fc980b868725387e98511b0c271f946a7bcd65c0200b4c4ba7","name":"..","path":"../../../../../../../../../.pub-cache/hosted/pub.dev/firebase_app_check-0.4.1+2/ios/firebase_app_check/Sources","sourceTree":"","type":"group"},{"children":[{"fileType":"text.script.ruby","guid":"bfdfe7dc352907fc980b868725387e98612a9b3c58bbaa0aac92bb05e45f03c0","path":"../../../../../../../../../.pub-cache/hosted/pub.dev/firebase_app_check-0.4.1+2/ios/firebase_app_check.podspec","sourceTree":"","type":"file"},{"fileType":"text","guid":"bfdfe7dc352907fc980b868725387e98349e639efc819bf8f3b41a18d6c0c6ad","path":"../../../../../../../../../.pub-cache/hosted/pub.dev/firebase_app_check-0.4.1+2/LICENSE","sourceTree":"","type":"file"}],"guid":"bfdfe7dc352907fc980b868725387e985a160f4e68a8315154c9105d8fa9512e","name":"Pod","path":"","sourceTree":"","type":"group"},{"children":[{"fileType":"sourcecode.module-map","guid":"bfdfe7dc352907fc980b868725387e98e110ba9f039db5afe23ccf33b7dd7621","path":"firebase_app_check.modulemap","sourceTree":"","type":"file"},{"fileType":"sourcecode.c.objc","guid":"bfdfe7dc352907fc980b868725387e98b3b0eb48012053daff698e8d2eecd384","path":"firebase_app_check-dummy.m","sourceTree":"","type":"file"},{"fileType":"text.plist.xml","guid":"bfdfe7dc352907fc980b868725387e9850170c0ec5e7dd0abfa10964ebf7e97d","path":"firebase_app_check-Info.plist","sourceTree":"","type":"file"},{"fileType":"sourcecode.c.h","guid":"bfdfe7dc352907fc980b868725387e9885d0d93c676ce6b51858cb35fc28982f","path":"firebase_app_check-prefix.pch","sourceTree":"","type":"file"},{"fileType":"sourcecode.c.h","guid":"bfdfe7dc352907fc980b868725387e98d6d26726976b2e08a5c89968805d3304","path":"firebase_app_check-umbrella.h","sourceTree":"","type":"file"},{"fileType":"text.xcconfig","guid":"bfdfe7dc352907fc980b868725387e98c25cf455db1669644df3712dd48f7fb4","path":"firebase_app_check.debug.xcconfig","sourceTree":"","type":"file"},{"fileType":"text.xcconfig","guid":"bfdfe7dc352907fc980b868725387e98e912e07d424cdf8e7522667434d5bd3f","path":"firebase_app_check.release.xcconfig","sourceTree":"","type":"file"}],"guid":"bfdfe7dc352907fc980b868725387e983e873219b4c28f6aa94cae144a02fbc2","name":"Support Files","path":"../../../../Pods/Target Support Files/firebase_app_check","sourceTree":"","type":"group"}],"guid":"bfdfe7dc352907fc980b868725387e9872628f55a9c36767bf41234cfc6edce2","name":"firebase_app_check","path":"../.symlinks/plugins/firebase_app_check/ios","sourceTree":"","type":"group"},{"children":[{"children":[{"children":[{"children":[{"children":[{"children":[{"children":[{"children":[{"children":[{"children":[{"children":[{"children":[{"children":[{"children":[{"children":[{"children":[{"children":[{"children":[{"children":[{"children":[{"children":[{"fileType":"sourcecode.c.objc","guid":"bfdfe7dc352907fc980b868725387e985f541d6ffe1082b2902e65204c08509d","path":"../../../../../../../../../../../../.pub-cache/hosted/pub.dev/firebase_auth-6.1.2/ios/firebase_auth/Sources/firebase_auth/firebase_auth_messages.g.m","sourceTree":"","type":"file"},{"fileType":"sourcecode.c.objc","guid":"bfdfe7dc352907fc980b868725387e98eb223ecb002d14c77278863d78c4c318","path":"../../../../../../../../../../../../.pub-cache/hosted/pub.dev/firebase_auth-6.1.2/ios/firebase_auth/Sources/firebase_auth/FLTAuthStateChannelStreamHandler.m","sourceTree":"","type":"file"},{"fileType":"sourcecode.c.objc","guid":"bfdfe7dc352907fc980b868725387e9810eacf503f471242fc9c2cd78a82403c","path":"../../../../../../../../../../../../.pub-cache/hosted/pub.dev/firebase_auth-6.1.2/ios/firebase_auth/Sources/firebase_auth/FLTFirebaseAuthPlugin.m","sourceTree":"","type":"file"},{"fileType":"sourcecode.c.objc","guid":"bfdfe7dc352907fc980b868725387e982532bb5826be388841ede9effca1df18","path":"../../../../../../../../../../../../.pub-cache/hosted/pub.dev/firebase_auth-6.1.2/ios/firebase_auth/Sources/firebase_auth/FLTIdTokenChannelStreamHandler.m","sourceTree":"","type":"file"},{"fileType":"sourcecode.c.objc","guid":"bfdfe7dc352907fc980b868725387e988936fde4a4450628a9e214e0ddf0d394","path":"../../../../../../../../../../../../.pub-cache/hosted/pub.dev/firebase_auth-6.1.2/ios/firebase_auth/Sources/firebase_auth/FLTPhoneNumberVerificationStreamHandler.m","sourceTree":"","type":"file"},{"fileType":"sourcecode.c.objc","guid":"bfdfe7dc352907fc980b868725387e98347fb9c4a5c7c79fec72e40d077e4345","path":"../../../../../../../../../../../../.pub-cache/hosted/pub.dev/firebase_auth-6.1.2/ios/firebase_auth/Sources/firebase_auth/PigeonParser.m","sourceTree":"","type":"file"},{"children":[{"children":[{"fileType":"sourcecode.c.h","guid":"bfdfe7dc352907fc980b868725387e9827bee845e2266de322863f00bfdc2a26","path":"../../../../../../../../../../../../../../.pub-cache/hosted/pub.dev/firebase_auth-6.1.2/ios/firebase_auth/Sources/firebase_auth/include/Private/FLTAuthStateChannelStreamHandler.h","sourceTree":"","type":"file"},{"fileType":"sourcecode.c.h","guid":"bfdfe7dc352907fc980b868725387e983b118aa12a63ca9f9945efeaf253ff7b","path":"../../../../../../../../../../../../../../.pub-cache/hosted/pub.dev/firebase_auth-6.1.2/ios/firebase_auth/Sources/firebase_auth/include/Private/FLTIdTokenChannelStreamHandler.h","sourceTree":"","type":"file"},{"fileType":"sourcecode.c.h","guid":"bfdfe7dc352907fc980b868725387e98e5b528b032881616d1c665dec13dafa8","path":"../../../../../../../../../../../../../../.pub-cache/hosted/pub.dev/firebase_auth-6.1.2/ios/firebase_auth/Sources/firebase_auth/include/Private/FLTPhoneNumberVerificationStreamHandler.h","sourceTree":"","type":"file"},{"fileType":"sourcecode.c.h","guid":"bfdfe7dc352907fc980b868725387e982864d491b842dd5124ecf14b972d65b6","path":"../../../../../../../../../../../../../../.pub-cache/hosted/pub.dev/firebase_auth-6.1.2/ios/firebase_auth/Sources/firebase_auth/include/Private/PigeonParser.h","sourceTree":"","type":"file"}],"guid":"bfdfe7dc352907fc980b868725387e981e72e46c04aafea5aa972ae5ea48241d","name":"Private","path":"Private","sourceTree":"","type":"group"},{"children":[{"fileType":"sourcecode.c.h","guid":"bfdfe7dc352907fc980b868725387e98f0e96d34aebeddb83a8166ed2181b114","path":"../../../../../../../../../../../../../../.pub-cache/hosted/pub.dev/firebase_auth-6.1.2/ios/firebase_auth/Sources/firebase_auth/include/Public/CustomPigeonHeader.h","sourceTree":"","type":"file"},{"fileType":"sourcecode.c.h","guid":"bfdfe7dc352907fc980b868725387e98c3935a7024d5af57e2ec647f59ad2f2d","path":"../../../../../../../../../../../../../../.pub-cache/hosted/pub.dev/firebase_auth-6.1.2/ios/firebase_auth/Sources/firebase_auth/include/Public/firebase_auth_messages.g.h","sourceTree":"","type":"file"},{"fileType":"sourcecode.c.h","guid":"bfdfe7dc352907fc980b868725387e98a49b0809685262c84b0c7c8e57a010be","path":"../../../../../../../../../../../../../../.pub-cache/hosted/pub.dev/firebase_auth-6.1.2/ios/firebase_auth/Sources/firebase_auth/include/Public/FLTFirebaseAuthPlugin.h","sourceTree":"","type":"file"}],"guid":"bfdfe7dc352907fc980b868725387e988689674edf888352c71bf40c2d6f06d8","name":"Public","path":"Public","sourceTree":"","type":"group"}],"guid":"bfdfe7dc352907fc980b868725387e9890cc3cf56c4ecf56185609200fef724d","name":"include","path":"include","sourceTree":"","type":"group"}],"guid":"bfdfe7dc352907fc980b868725387e98b91537a86d8ff142a9a71b8543239399","name":"firebase_auth","path":"firebase_auth","sourceTree":"","type":"group"}],"guid":"bfdfe7dc352907fc980b868725387e980c63fca4d0b30ac0d7cfade6fd7baa20","name":"Sources","path":"Sources","sourceTree":"","type":"group"}],"guid":"bfdfe7dc352907fc980b868725387e983a2957f31c0fb614c2422385ab6155f4","name":"firebase_auth","path":"firebase_auth","sourceTree":"","type":"group"}],"guid":"bfdfe7dc352907fc980b868725387e981d60c05c946f47724bdb454d7de281ef","name":"ios","path":"ios","sourceTree":"","type":"group"}],"guid":"bfdfe7dc352907fc980b868725387e98229e2b9089e61e9eabb1f4a499a64615","name":"firebase_auth","path":"firebase_auth","sourceTree":"","type":"group"}],"guid":"bfdfe7dc352907fc980b868725387e986a0fa468b029d67c97345fb834bc931a","name":"plugins","path":"plugins","sourceTree":"","type":"group"}],"guid":"bfdfe7dc352907fc980b868725387e98741c70ed9ad1eb5fbdd778fd4484be0a","name":".symlinks","path":".symlinks","sourceTree":"","type":"group"}],"guid":"bfdfe7dc352907fc980b868725387e98dd9bf61fb0655d366bbc1c3e855eac94","name":"ios","path":"ios","sourceTree":"","type":"group"}],"guid":"bfdfe7dc352907fc980b868725387e98478621876b3c3d888f232c66debf4bec","name":"mih_ui","path":"mih_ui","sourceTree":"","type":"group"}],"guid":"bfdfe7dc352907fc980b868725387e98b66211302ba1386603286639e59770c4","name":"mih-project","path":"mih-project","sourceTree":"","type":"group"}],"guid":"bfdfe7dc352907fc980b868725387e98228eedd3ba4ec4acd830d20161e362cc","name":"mih_main","path":"mih_main","sourceTree":"","type":"group"}],"guid":"bfdfe7dc352907fc980b868725387e98b185c6679d8573a0ffd09d5579ae11f8","name":"Git","path":"Git","sourceTree":"","type":"group"}],"guid":"bfdfe7dc352907fc980b868725387e98a1e73a8aaf7ce19a5d84eeeaccc32dfb","name":"..","path":"..","sourceTree":"","type":"group"}],"guid":"bfdfe7dc352907fc980b868725387e987fe2023fc5ff68aa1da0fdeca7b0df29","name":"..","path":"..","sourceTree":"","type":"group"}],"guid":"bfdfe7dc352907fc980b868725387e987647079dd59585983c77beee248d10e7","name":"..","path":"..","sourceTree":"","type":"group"}],"guid":"bfdfe7dc352907fc980b868725387e986b054a87f6e233291b07e9f149bc3a0e","name":"..","path":"..","sourceTree":"","type":"group"}],"guid":"bfdfe7dc352907fc980b868725387e98ce4ff64aeb7fe05be2de2df043bdfa3b","name":"..","path":"..","sourceTree":"","type":"group"}],"guid":"bfdfe7dc352907fc980b868725387e98b62dae0d7686e4c073aa785c0a7d688a","name":"..","path":"..","sourceTree":"","type":"group"}],"guid":"bfdfe7dc352907fc980b868725387e988b12bbefe94fd8ef4e4519d37fd1749a","name":"..","path":"..","sourceTree":"","type":"group"}],"guid":"bfdfe7dc352907fc980b868725387e9887b26a9570a167c9446e05aeab24c807","name":"..","path":"../../../../../../../../../.pub-cache/hosted/pub.dev/firebase_auth-6.1.2/ios/firebase_auth/Sources","sourceTree":"","type":"group"},{"children":[{"fileType":"text.script.ruby","guid":"bfdfe7dc352907fc980b868725387e98ce17bcb37ce91b48392f21e3b8f53153","path":"../../../../../../../../../.pub-cache/hosted/pub.dev/firebase_auth-6.1.2/ios/firebase_auth.podspec","sourceTree":"","type":"file"},{"fileType":"text","guid":"bfdfe7dc352907fc980b868725387e9878d157505d191a41a233bd57c85dc7c6","path":"../../../../../../../../../.pub-cache/hosted/pub.dev/firebase_auth-6.1.2/LICENSE","sourceTree":"","type":"file"}],"guid":"bfdfe7dc352907fc980b868725387e98250a038d829d93037b230634d8fcfe74","name":"Pod","path":"","sourceTree":"","type":"group"},{"children":[{"fileType":"sourcecode.module-map","guid":"bfdfe7dc352907fc980b868725387e989de135d90bfbb20369e2dc6ad3c0745d","path":"firebase_auth.modulemap","sourceTree":"","type":"file"},{"fileType":"sourcecode.c.objc","guid":"bfdfe7dc352907fc980b868725387e98f9755ae3b2d4cab1fb3158b533f2c9d1","path":"firebase_auth-dummy.m","sourceTree":"","type":"file"},{"fileType":"text.plist.xml","guid":"bfdfe7dc352907fc980b868725387e98c7f50bbff88343cda26e3c4a52387742","path":"firebase_auth-Info.plist","sourceTree":"","type":"file"},{"fileType":"sourcecode.c.h","guid":"bfdfe7dc352907fc980b868725387e9851c7bbdf5b67faf577e1d1d8eddb6f2a","path":"firebase_auth-prefix.pch","sourceTree":"","type":"file"},{"fileType":"sourcecode.c.h","guid":"bfdfe7dc352907fc980b868725387e983fadff5bdce928842849d4dcd99e8422","path":"firebase_auth-umbrella.h","sourceTree":"","type":"file"},{"fileType":"text.xcconfig","guid":"bfdfe7dc352907fc980b868725387e9895b607e38dd439202402e1eb97e7bfe3","path":"firebase_auth.debug.xcconfig","sourceTree":"","type":"file"},{"fileType":"text.xcconfig","guid":"bfdfe7dc352907fc980b868725387e987f882ba03ab88d6bb0c7d3cbdee44856","path":"firebase_auth.release.xcconfig","sourceTree":"","type":"file"}],"guid":"bfdfe7dc352907fc980b868725387e98016135d329d6ef78ce73bc76958be3d5","name":"Support Files","path":"../../../../Pods/Target Support Files/firebase_auth","sourceTree":"","type":"group"}],"guid":"bfdfe7dc352907fc980b868725387e98c171ded7240f41b51a6f2138ba58edc7","name":"firebase_auth","path":"../.symlinks/plugins/firebase_auth/ios","sourceTree":"","type":"group"},{"children":[{"children":[{"children":[{"children":[{"children":[{"children":[{"children":[{"children":[{"children":[{"children":[{"children":[{"children":[{"children":[{"children":[{"children":[{"children":[{"children":[{"children":[{"children":[{"children":[{"children":[{"fileType":"sourcecode.c.objc","guid":"bfdfe7dc352907fc980b868725387e98601b2da428ba75eb289e1c54c7e54ac2","path":"../../../../../../../../../../../../.pub-cache/hosted/pub.dev/firebase_core-4.4.0/ios/firebase_core/Sources/firebase_core/dummy.m","sourceTree":"","type":"file"},{"fileType":"sourcecode.c.objc","guid":"bfdfe7dc352907fc980b868725387e9807da482b8ec6e4d8948d658c8bdf02e5","path":"../../../../../../../../../../../../.pub-cache/hosted/pub.dev/firebase_core-4.4.0/ios/firebase_core/Sources/firebase_core/FLTFirebaseCorePlugin.m","sourceTree":"","type":"file"},{"fileType":"sourcecode.c.objc","guid":"bfdfe7dc352907fc980b868725387e989977ba840e207e56a3bdbda80a4d8615","path":"../../../../../../../../../../../../.pub-cache/hosted/pub.dev/firebase_core-4.4.0/ios/firebase_core/Sources/firebase_core/FLTFirebasePlugin.m","sourceTree":"","type":"file"},{"fileType":"sourcecode.c.objc","guid":"bfdfe7dc352907fc980b868725387e98f5cce0e89494288c3baf0f38b30e399f","path":"../../../../../../../../../../../../.pub-cache/hosted/pub.dev/firebase_core-4.4.0/ios/firebase_core/Sources/firebase_core/FLTFirebasePluginRegistry.m","sourceTree":"","type":"file"},{"fileType":"sourcecode.c.objc","guid":"bfdfe7dc352907fc980b868725387e9878e159148fb5c54711d45b5262f445b4","path":"../../../../../../../../../../../../.pub-cache/hosted/pub.dev/firebase_core-4.4.0/ios/firebase_core/Sources/firebase_core/messages.g.m","sourceTree":"","type":"file"},{"children":[{"children":[{"fileType":"sourcecode.c.h","guid":"bfdfe7dc352907fc980b868725387e987dfea0c140a7a0ea66e66dcf646b175b","path":"../../../../../../../../../../../../../../.pub-cache/hosted/pub.dev/firebase_core-4.4.0/ios/firebase_core/Sources/firebase_core/include/firebase_core/dummy.h","sourceTree":"","type":"file"},{"fileType":"sourcecode.c.h","guid":"bfdfe7dc352907fc980b868725387e98b2eb7b9f5e3786b97a3a72dd22421a5e","path":"../../../../../../../../../../../../../../.pub-cache/hosted/pub.dev/firebase_core-4.4.0/ios/firebase_core/Sources/firebase_core/include/firebase_core/FLTFirebaseCorePlugin.h","sourceTree":"","type":"file"},{"fileType":"sourcecode.c.h","guid":"bfdfe7dc352907fc980b868725387e98f772990796156a555335464dc3c777ca","path":"../../../../../../../../../../../../../../.pub-cache/hosted/pub.dev/firebase_core-4.4.0/ios/firebase_core/Sources/firebase_core/include/firebase_core/FLTFirebasePlugin.h","sourceTree":"","type":"file"},{"fileType":"sourcecode.c.h","guid":"bfdfe7dc352907fc980b868725387e98f3bd2cacbaac9079f1396cb3fa6d0e27","path":"../../../../../../../../../../../../../../.pub-cache/hosted/pub.dev/firebase_core-4.4.0/ios/firebase_core/Sources/firebase_core/include/firebase_core/FLTFirebasePluginRegistry.h","sourceTree":"","type":"file"},{"fileType":"sourcecode.c.h","guid":"bfdfe7dc352907fc980b868725387e9867153d6814ea6c8bee7037d6d146ce78","path":"../../../../../../../../../../../../../../.pub-cache/hosted/pub.dev/firebase_core-4.4.0/ios/firebase_core/Sources/firebase_core/include/firebase_core/messages.g.h","sourceTree":"","type":"file"}],"guid":"bfdfe7dc352907fc980b868725387e9865b7968e761564e08d12c9baa7a054db","name":"firebase_core","path":"firebase_core","sourceTree":"","type":"group"}],"guid":"bfdfe7dc352907fc980b868725387e9883a0b4ef9a2e69c000683ea94de10c73","name":"include","path":"include","sourceTree":"","type":"group"}],"guid":"bfdfe7dc352907fc980b868725387e9892eccf4f3b7fa905e15ef08d0ece99fa","name":"firebase_core","path":"firebase_core","sourceTree":"","type":"group"}],"guid":"bfdfe7dc352907fc980b868725387e98c2dffe17be86963f22d459ed1d86418b","name":"Sources","path":"Sources","sourceTree":"","type":"group"}],"guid":"bfdfe7dc352907fc980b868725387e9891358efa3d3e96f174405fead3a13ae2","name":"firebase_core","path":"firebase_core","sourceTree":"","type":"group"}],"guid":"bfdfe7dc352907fc980b868725387e98502b12fb82269c9c0b8fb45094229336","name":"ios","path":"ios","sourceTree":"","type":"group"}],"guid":"bfdfe7dc352907fc980b868725387e981bbb0d29bf97b1d72e684b0b138cda31","name":"firebase_core","path":"firebase_core","sourceTree":"","type":"group"}],"guid":"bfdfe7dc352907fc980b868725387e98448bc5db7077b4318118247985e9706c","name":"plugins","path":"plugins","sourceTree":"","type":"group"}],"guid":"bfdfe7dc352907fc980b868725387e98a8c1e5487da4a3a2b3cc746df3c71d97","name":".symlinks","path":".symlinks","sourceTree":"","type":"group"}],"guid":"bfdfe7dc352907fc980b868725387e9850fe7df43146e3a935e2a013f5ca1764","name":"ios","path":"ios","sourceTree":"","type":"group"}],"guid":"bfdfe7dc352907fc980b868725387e98135505935bca92d9516e6903e6b1571a","name":"mih_ui","path":"mih_ui","sourceTree":"","type":"group"}],"guid":"bfdfe7dc352907fc980b868725387e98692ed695e9bf9ef940975e909acd6638","name":"mih-project","path":"mih-project","sourceTree":"","type":"group"}],"guid":"bfdfe7dc352907fc980b868725387e9890f352f6bbf5e1270326ef1fe0d88d88","name":"mih_main","path":"mih_main","sourceTree":"","type":"group"}],"guid":"bfdfe7dc352907fc980b868725387e9801539e7991909202027b2e1fc36bdf88","name":"Git","path":"Git","sourceTree":"","type":"group"}],"guid":"bfdfe7dc352907fc980b868725387e98a30283f68c11da265135eb85954528f5","name":"..","path":"..","sourceTree":"","type":"group"}],"guid":"bfdfe7dc352907fc980b868725387e98178b6dde2c1b75f36da1ef9fa891985b","name":"..","path":"..","sourceTree":"","type":"group"}],"guid":"bfdfe7dc352907fc980b868725387e987a6b9ef64f37e718251dd126ecc57e99","name":"..","path":"..","sourceTree":"","type":"group"}],"guid":"bfdfe7dc352907fc980b868725387e981b7e3d9c7086a471cf27b040c59ab89f","name":"..","path":"..","sourceTree":"","type":"group"}],"guid":"bfdfe7dc352907fc980b868725387e98d5c64535fce20f343aadb66d204e6778","name":"..","path":"..","sourceTree":"","type":"group"}],"guid":"bfdfe7dc352907fc980b868725387e9836f9e6541249e85036c90cafd1fd27c8","name":"..","path":"..","sourceTree":"","type":"group"}],"guid":"bfdfe7dc352907fc980b868725387e98cc7654428522c87bf7bea58d5fc1c95d","name":"..","path":"..","sourceTree":"","type":"group"}],"guid":"bfdfe7dc352907fc980b868725387e9897d6d766394d9dba4af94ccd75caf4b8","name":"..","path":"../../../../../../../../../.pub-cache/hosted/pub.dev/firebase_core-4.4.0/ios/firebase_core/Sources","sourceTree":"","type":"group"},{"children":[{"fileType":"text.script.ruby","guid":"bfdfe7dc352907fc980b868725387e9853ba03282c86f64e463a449b10b6feb1","path":"../../../../../../../../../.pub-cache/hosted/pub.dev/firebase_core-4.4.0/ios/firebase_core.podspec","sourceTree":"","type":"file"},{"fileType":"text","guid":"bfdfe7dc352907fc980b868725387e981c7364f8c5643856b3049712de31e099","path":"../../../../../../../../../.pub-cache/hosted/pub.dev/firebase_core-4.4.0/LICENSE","sourceTree":"","type":"file"}],"guid":"bfdfe7dc352907fc980b868725387e98f99ef99c04ea749b9b7bc097d01f2c2d","name":"Pod","path":"","sourceTree":"","type":"group"},{"children":[{"fileType":"sourcecode.module-map","guid":"bfdfe7dc352907fc980b868725387e986cbc2b6bb34ce8d05827fd1947dc4b53","path":"firebase_core.modulemap","sourceTree":"","type":"file"},{"fileType":"sourcecode.c.objc","guid":"bfdfe7dc352907fc980b868725387e98a993adacba3286d6cf47f3ca504b1406","path":"firebase_core-dummy.m","sourceTree":"","type":"file"},{"fileType":"text.plist.xml","guid":"bfdfe7dc352907fc980b868725387e98007f03499a039437f1f99bde28395952","path":"firebase_core-Info.plist","sourceTree":"","type":"file"},{"fileType":"sourcecode.c.h","guid":"bfdfe7dc352907fc980b868725387e98aecf6fabd4fa4b1c8ffda5f839904465","path":"firebase_core-prefix.pch","sourceTree":"","type":"file"},{"fileType":"sourcecode.c.h","guid":"bfdfe7dc352907fc980b868725387e98b775542e692f38065f43634092d616ce","path":"firebase_core-umbrella.h","sourceTree":"","type":"file"},{"fileType":"text.xcconfig","guid":"bfdfe7dc352907fc980b868725387e98b022d73df32750d90180fee080a0f7d1","path":"firebase_core.debug.xcconfig","sourceTree":"","type":"file"},{"fileType":"text.xcconfig","guid":"bfdfe7dc352907fc980b868725387e9808ccd97494fd54f1603a316a163aab94","path":"firebase_core.release.xcconfig","sourceTree":"","type":"file"}],"guid":"bfdfe7dc352907fc980b868725387e9877290915f01301806d110f784aa47c34","name":"Support Files","path":"../../../../Pods/Target Support Files/firebase_core","sourceTree":"","type":"group"}],"guid":"bfdfe7dc352907fc980b868725387e982c77c79f8d278ef39cf766a1ab2e35c4","name":"firebase_core","path":"../.symlinks/plugins/firebase_core/ios","sourceTree":"","type":"group"},{"children":[{"children":[{"children":[{"children":[{"children":[{"children":[{"children":[{"children":[{"children":[{"children":[{"children":[{"children":[{"children":[{"children":[{"children":[{"children":[{"children":[{"fileType":"sourcecode.c.h","guid":"bfdfe7dc352907fc980b868725387e98a8bcf9b778aff46eca5e22cafa52131b","path":"../../../../../../../../../../.pub-cache/hosted/pub.dev/fl_downloader-2.0.2/ios/Classes/FlDownloaderPlugin.h","sourceTree":"","type":"file"},{"fileType":"sourcecode.c.objc","guid":"bfdfe7dc352907fc980b868725387e98914c048b53a42f42ba49718548e5cd81","path":"../../../../../../../../../../.pub-cache/hosted/pub.dev/fl_downloader-2.0.2/ios/Classes/FlDownloaderPlugin.m","sourceTree":"","type":"file"},{"fileType":"sourcecode.swift","guid":"bfdfe7dc352907fc980b868725387e9851df058efa51527351690153e2e7a913","path":"../../../../../../../../../../.pub-cache/hosted/pub.dev/fl_downloader-2.0.2/ios/Classes/SwiftFlDownloaderPlugin.swift","sourceTree":"","type":"file"}],"guid":"bfdfe7dc352907fc980b868725387e98d475df7a54432602f65236f0001dcb78","name":"Classes","path":"Classes","sourceTree":"","type":"group"},{"children":[{"fileType":"text.xml","guid":"bfdfe7dc352907fc980b868725387e9831fe485b45a69a8422a609fface14279","path":"../../../../../../../../../../.pub-cache/hosted/pub.dev/fl_downloader-2.0.2/ios/Resources/PrivacyInfo.xcprivacy","sourceTree":"","type":"file"}],"guid":"bfdfe7dc352907fc980b868725387e9803405e5102a3ee40cbb4583ab5ca6eec","name":"Resources","path":"Resources","sourceTree":"","type":"group"}],"guid":"bfdfe7dc352907fc980b868725387e98fef6ddba1b5e1232a9d6d37983179d87","name":"ios","path":"ios","sourceTree":"","type":"group"}],"guid":"bfdfe7dc352907fc980b868725387e98964ba06116a1df14720bb9048a88f165","name":"fl_downloader","path":"fl_downloader","sourceTree":"","type":"group"}],"guid":"bfdfe7dc352907fc980b868725387e98f34f778596ab56ad4e8931ed917554f7","name":"plugins","path":"plugins","sourceTree":"","type":"group"}],"guid":"bfdfe7dc352907fc980b868725387e9817008544f61b16a1efdcc47dbaba93be","name":".symlinks","path":".symlinks","sourceTree":"","type":"group"}],"guid":"bfdfe7dc352907fc980b868725387e98297a87ebe04307afc7e2d74dd6dcab72","name":"ios","path":"ios","sourceTree":"","type":"group"}],"guid":"bfdfe7dc352907fc980b868725387e9882ae3c175903986a074928722796df5a","name":"mih_ui","path":"mih_ui","sourceTree":"","type":"group"}],"guid":"bfdfe7dc352907fc980b868725387e98cf035c538d2f0b99ec303fb4744ef49e","name":"mih-project","path":"mih-project","sourceTree":"","type":"group"}],"guid":"bfdfe7dc352907fc980b868725387e98f3e54afb40aae197eddcd74c76d2df0f","name":"mih_main","path":"mih_main","sourceTree":"","type":"group"}],"guid":"bfdfe7dc352907fc980b868725387e9876dbca351375c820c41118bb9cf9561c","name":"Git","path":"Git","sourceTree":"","type":"group"}],"guid":"bfdfe7dc352907fc980b868725387e98e7ec519797345e1f834899777e5441ea","name":"..","path":"..","sourceTree":"","type":"group"}],"guid":"bfdfe7dc352907fc980b868725387e98c1408300b02654c8b20066c91bc8b79c","name":"..","path":"..","sourceTree":"","type":"group"}],"guid":"bfdfe7dc352907fc980b868725387e98dc96525f14f17580f9e3a5051189fa9c","name":"..","path":"..","sourceTree":"","type":"group"}],"guid":"bfdfe7dc352907fc980b868725387e98b1adba523e0f600659236656a2385897","name":"..","path":"..","sourceTree":"","type":"group"}],"guid":"bfdfe7dc352907fc980b868725387e980d2e7dc4cebf78c19af905a8474b3d9e","name":"..","path":"..","sourceTree":"","type":"group"}],"guid":"bfdfe7dc352907fc980b868725387e98ae79df9b7e9fb8e31f39f9c108119a8b","name":"..","path":"../../../../../../../../../.pub-cache/hosted/pub.dev/fl_downloader-2.0.2/ios","sourceTree":"","type":"group"},{"children":[{"fileType":"text.script.ruby","guid":"bfdfe7dc352907fc980b868725387e98ddb20a4fc1d66afd701be5f8a445437f","path":"../../../../../../../../../.pub-cache/hosted/pub.dev/fl_downloader-2.0.2/ios/fl_downloader.podspec","sourceTree":"","type":"file"},{"fileType":"text","guid":"bfdfe7dc352907fc980b868725387e9868eecf589861f1e12ff1b3335e246971","path":"../../../../../../../../../.pub-cache/hosted/pub.dev/fl_downloader-2.0.2/LICENSE","sourceTree":"","type":"file"}],"guid":"bfdfe7dc352907fc980b868725387e98161c2e9c04b3bb3a64da701c20bd918d","name":"Pod","path":"","sourceTree":"","type":"group"},{"children":[{"fileType":"sourcecode.module-map","guid":"bfdfe7dc352907fc980b868725387e982efdc85ce2f64d67f95747c395e92b1d","path":"fl_downloader.modulemap","sourceTree":"","type":"file"},{"fileType":"sourcecode.c.objc","guid":"bfdfe7dc352907fc980b868725387e9841face9f91cced866f2eca4a4b6c1da2","path":"fl_downloader-dummy.m","sourceTree":"","type":"file"},{"fileType":"text.plist.xml","guid":"bfdfe7dc352907fc980b868725387e988fccddba73755faa02856c09466bd235","path":"fl_downloader-Info.plist","sourceTree":"","type":"file"},{"fileType":"sourcecode.c.h","guid":"bfdfe7dc352907fc980b868725387e98289ec58bc3b1befc6553881b2fb56fc8","path":"fl_downloader-prefix.pch","sourceTree":"","type":"file"},{"fileType":"sourcecode.c.h","guid":"bfdfe7dc352907fc980b868725387e98e9683ad27cd35a81b03f764dc06cfad0","path":"fl_downloader-umbrella.h","sourceTree":"","type":"file"},{"fileType":"text.xcconfig","guid":"bfdfe7dc352907fc980b868725387e984e4a588da55ed3c53fbd1e10e58fd1c6","path":"fl_downloader.debug.xcconfig","sourceTree":"","type":"file"},{"fileType":"text.xcconfig","guid":"bfdfe7dc352907fc980b868725387e98c91d9e268657e7dd6c060d3e603cc2b1","path":"fl_downloader.release.xcconfig","sourceTree":"","type":"file"},{"fileType":"text.plist.xml","guid":"bfdfe7dc352907fc980b868725387e9889b843431f88debf830b71694c181718","path":"ResourceBundle-fl_downloader_privacy-fl_downloader-Info.plist","sourceTree":"","type":"file"}],"guid":"bfdfe7dc352907fc980b868725387e98770c68ab7d9e26ed5320fdf79e4127eb","name":"Support Files","path":"../../../../Pods/Target Support Files/fl_downloader","sourceTree":"","type":"group"}],"guid":"bfdfe7dc352907fc980b868725387e98e535f7f89dcf23e627ce560fcbf27f07","name":"fl_downloader","path":"../.symlinks/plugins/fl_downloader/ios","sourceTree":"","type":"group"},{"children":[{"children":[{"fileType":"text.script.ruby","guid":"bfdfe7dc352907fc980b868725387e98878ac19076103d7e2a82471b805965be","path":"Flutter.podspec","sourceTree":"","type":"file"}],"guid":"bfdfe7dc352907fc980b868725387e98d5cf7725c652e90a9f4af34bcd4e69ed","name":"Pod","path":"","sourceTree":"","type":"group"},{"children":[{"fileType":"text.xcconfig","guid":"bfdfe7dc352907fc980b868725387e98dcbcbc7a5e77c993122880547c8ba2bb","path":"Flutter.debug.xcconfig","sourceTree":"","type":"file"},{"fileType":"text.xcconfig","guid":"bfdfe7dc352907fc980b868725387e982275ed66a3f7f3088878aa0c9e2d181a","path":"Flutter.release.xcconfig","sourceTree":"","type":"file"}],"guid":"bfdfe7dc352907fc980b868725387e988e42623e005514899b0b1ea654daa4be","name":"Support Files","path":"../Pods/Target Support Files/Flutter","sourceTree":"","type":"group"}],"guid":"bfdfe7dc352907fc980b868725387e9848bfce14ccc39b7a75fedcbde12a921f","name":"Flutter","path":"../Flutter","sourceTree":"","type":"group"},{"children":[{"children":[{"children":[{"children":[{"children":[{"children":[{"children":[{"children":[{"children":[{"children":[{"children":[{"children":[{"children":[{"children":[{"children":[{"children":[{"children":[{"children":[{"children":[{"children":[{"children":[{"fileType":"sourcecode.c.objc","guid":"bfdfe7dc352907fc980b868725387e98ed4c5781f08ac474801af38d03dae69c","path":"../../../../../../../../../../../../.pub-cache/hosted/pub.dev/flutter_native_splash-2.4.6/ios/flutter_native_splash/Sources/flutter_native_splash/FlutterNativeSplashPlugin.m","sourceTree":"","type":"file"},{"fileType":"text.xml","guid":"bfdfe7dc352907fc980b868725387e98fe3a5ec7d39edfd3a806d5f27e4564cd","path":"../../../../../../../../../../../../.pub-cache/hosted/pub.dev/flutter_native_splash-2.4.6/ios/flutter_native_splash/Sources/flutter_native_splash/PrivacyInfo.xcprivacy","sourceTree":"","type":"file"},{"children":[{"children":[{"fileType":"sourcecode.c.h","guid":"bfdfe7dc352907fc980b868725387e98f50f5cea49c7a2be171197f72c2cb1ad","path":"../../../../../../../../../../../../../../.pub-cache/hosted/pub.dev/flutter_native_splash-2.4.6/ios/flutter_native_splash/Sources/flutter_native_splash/include/flutter_native_splash/FlutterNativeSplashPlugin.h","sourceTree":"","type":"file"}],"guid":"bfdfe7dc352907fc980b868725387e9808f268d5b9df60bba67b9fd0c29c05b6","name":"flutter_native_splash","path":"flutter_native_splash","sourceTree":"","type":"group"}],"guid":"bfdfe7dc352907fc980b868725387e983d680a884a248fe65950f39cc3768e67","name":"include","path":"include","sourceTree":"","type":"group"}],"guid":"bfdfe7dc352907fc980b868725387e98be78d0783dec2c0a89a792d5f05ce8dd","name":"flutter_native_splash","path":"flutter_native_splash","sourceTree":"","type":"group"}],"guid":"bfdfe7dc352907fc980b868725387e98e31a8fab07e05142c7d46ee4b405919e","name":"Sources","path":"Sources","sourceTree":"","type":"group"}],"guid":"bfdfe7dc352907fc980b868725387e98b418bce29d3313ae0a404593276dedf9","name":"flutter_native_splash","path":"flutter_native_splash","sourceTree":"","type":"group"}],"guid":"bfdfe7dc352907fc980b868725387e98ff5e907fed81d0e3e5a3a0555f6349ac","name":"ios","path":"ios","sourceTree":"","type":"group"}],"guid":"bfdfe7dc352907fc980b868725387e983d4d7725d200341bb229a31bdbe06958","name":"flutter_native_splash","path":"flutter_native_splash","sourceTree":"","type":"group"}],"guid":"bfdfe7dc352907fc980b868725387e9878799cdc0318e044f92f5a91b35a1096","name":"plugins","path":"plugins","sourceTree":"","type":"group"}],"guid":"bfdfe7dc352907fc980b868725387e98c0ccd530353d852c3a7ed6a0279249e6","name":".symlinks","path":".symlinks","sourceTree":"","type":"group"}],"guid":"bfdfe7dc352907fc980b868725387e980dd3d0903b6a73e305a08084dff245ec","name":"ios","path":"ios","sourceTree":"","type":"group"}],"guid":"bfdfe7dc352907fc980b868725387e98376cae92cf402a27fcecfee7d6dcc1cb","name":"mih_ui","path":"mih_ui","sourceTree":"","type":"group"}],"guid":"bfdfe7dc352907fc980b868725387e98a00410193349da21cc2b1f3c4034ba10","name":"mih-project","path":"mih-project","sourceTree":"","type":"group"}],"guid":"bfdfe7dc352907fc980b868725387e9865cc46cc97efdb21a1483fc13cf87f48","name":"mih_main","path":"mih_main","sourceTree":"","type":"group"}],"guid":"bfdfe7dc352907fc980b868725387e984022d2e4ee99326725df8769e42d4a3c","name":"Git","path":"Git","sourceTree":"","type":"group"}],"guid":"bfdfe7dc352907fc980b868725387e98d69b98052ba5a4014becc316ac8cc287","name":"..","path":"..","sourceTree":"","type":"group"}],"guid":"bfdfe7dc352907fc980b868725387e98d10a9c1d4dc219af77c81eacc7cbfe98","name":"..","path":"..","sourceTree":"","type":"group"}],"guid":"bfdfe7dc352907fc980b868725387e98bfd72b3f36ffda8878b61c12b3d69748","name":"..","path":"..","sourceTree":"","type":"group"}],"guid":"bfdfe7dc352907fc980b868725387e98c9c621363dc6b8d5e20e054054e36150","name":"..","path":"..","sourceTree":"","type":"group"}],"guid":"bfdfe7dc352907fc980b868725387e98951a6a7df7346cf226cf7a4b0d152f1c","name":"..","path":"..","sourceTree":"","type":"group"}],"guid":"bfdfe7dc352907fc980b868725387e984eb6a970107be74df6b904b39de0b6ba","name":"..","path":"..","sourceTree":"","type":"group"}],"guid":"bfdfe7dc352907fc980b868725387e98140cd6a7644ab36f518bf4ad22a7d3eb","name":"..","path":"..","sourceTree":"","type":"group"}],"guid":"bfdfe7dc352907fc980b868725387e989e2ff8efe01edbed51decf543222911c","name":"..","path":"../../../../../../../../../.pub-cache/hosted/pub.dev/flutter_native_splash-2.4.6/ios/flutter_native_splash/Sources","sourceTree":"","type":"group"},{"children":[{"fileType":"text.script.ruby","guid":"bfdfe7dc352907fc980b868725387e9839bcba16f3a4b5b55a1c4dbae6818d09","path":"../../../../../../../../../.pub-cache/hosted/pub.dev/flutter_native_splash-2.4.6/ios/flutter_native_splash.podspec","sourceTree":"","type":"file"},{"fileType":"text","guid":"bfdfe7dc352907fc980b868725387e9816d242432067f169fb5e634b8da553a4","path":"../../../../../../../../../.pub-cache/hosted/pub.dev/flutter_native_splash-2.4.6/LICENSE","sourceTree":"","type":"file"}],"guid":"bfdfe7dc352907fc980b868725387e981644d34b5ba12a8fcbca4e962da1a49c","name":"Pod","path":"","sourceTree":"","type":"group"},{"children":[{"fileType":"sourcecode.module-map","guid":"bfdfe7dc352907fc980b868725387e9831bb9f78ecf54ee2f2ca2622a012015a","path":"flutter_native_splash.modulemap","sourceTree":"","type":"file"},{"fileType":"sourcecode.c.objc","guid":"bfdfe7dc352907fc980b868725387e98c166ee5988b20398d317d310c58eb4b1","path":"flutter_native_splash-dummy.m","sourceTree":"","type":"file"},{"fileType":"text.plist.xml","guid":"bfdfe7dc352907fc980b868725387e98eb2ed9da81ceef0af7f4a8b579f6dc40","path":"flutter_native_splash-Info.plist","sourceTree":"","type":"file"},{"fileType":"sourcecode.c.h","guid":"bfdfe7dc352907fc980b868725387e98a242fee531fc9ef1ddaaaa74fcf205ae","path":"flutter_native_splash-prefix.pch","sourceTree":"","type":"file"},{"fileType":"sourcecode.c.h","guid":"bfdfe7dc352907fc980b868725387e98c086e8c7ed209047f486aa181b9d15d3","path":"flutter_native_splash-umbrella.h","sourceTree":"","type":"file"},{"fileType":"text.xcconfig","guid":"bfdfe7dc352907fc980b868725387e984615091c333da42672bfd26263153e2c","path":"flutter_native_splash.debug.xcconfig","sourceTree":"","type":"file"},{"fileType":"text.xcconfig","guid":"bfdfe7dc352907fc980b868725387e98eccf4b0b561ffd1dcb573fa88f797247","path":"flutter_native_splash.release.xcconfig","sourceTree":"","type":"file"},{"fileType":"text.plist.xml","guid":"bfdfe7dc352907fc980b868725387e98e47fc30ab84ee592f9392f7679ce4df2","path":"ResourceBundle-flutter_native_splash_privacy-flutter_native_splash-Info.plist","sourceTree":"","type":"file"}],"guid":"bfdfe7dc352907fc980b868725387e98ba002b704616ff51eccbbf740cc19d4a","name":"Support Files","path":"../../../../Pods/Target Support Files/flutter_native_splash","sourceTree":"","type":"group"}],"guid":"bfdfe7dc352907fc980b868725387e9884625c55b5029f9d3ac00695d3ec4f1d","name":"flutter_native_splash","path":"../.symlinks/plugins/flutter_native_splash/ios","sourceTree":"","type":"group"},{"children":[{"children":[{"children":[{"children":[{"children":[{"children":[{"children":[{"children":[{"children":[{"children":[{"children":[{"children":[{"children":[{"children":[{"children":[{"children":[{"children":[{"fileType":"sourcecode.swift","guid":"bfdfe7dc352907fc980b868725387e98273545ef5ac201300b0bb57c4690f008","path":"../../../../../../../../../../.pub-cache/hosted/pub.dev/flutter_tts-4.2.3/ios/Classes/AudioCategory.swift","sourceTree":"","type":"file"},{"fileType":"sourcecode.swift","guid":"bfdfe7dc352907fc980b868725387e988f4f0b636ec4f957216c6e152d4e6b99","path":"../../../../../../../../../../.pub-cache/hosted/pub.dev/flutter_tts-4.2.3/ios/Classes/AudioCategoryOptions.swift","sourceTree":"","type":"file"},{"fileType":"sourcecode.swift","guid":"bfdfe7dc352907fc980b868725387e98497ea7215b16a92c8bf53dd577da1a03","path":"../../../../../../../../../../.pub-cache/hosted/pub.dev/flutter_tts-4.2.3/ios/Classes/AudioModes.swift","sourceTree":"","type":"file"},{"fileType":"sourcecode.c.h","guid":"bfdfe7dc352907fc980b868725387e98df53373bea73f458559a5c4b8e8a4d93","path":"../../../../../../../../../../.pub-cache/hosted/pub.dev/flutter_tts-4.2.3/ios/Classes/FlutterTtsPlugin.h","sourceTree":"","type":"file"},{"fileType":"sourcecode.c.objc","guid":"bfdfe7dc352907fc980b868725387e98bfeb1e815de07bb393e068cd889f2c82","path":"../../../../../../../../../../.pub-cache/hosted/pub.dev/flutter_tts-4.2.3/ios/Classes/FlutterTtsPlugin.m","sourceTree":"","type":"file"},{"fileType":"sourcecode.swift","guid":"bfdfe7dc352907fc980b868725387e989645eb0ac136e2e344e1b31f8f5743b7","path":"../../../../../../../../../../.pub-cache/hosted/pub.dev/flutter_tts-4.2.3/ios/Classes/SwiftFlutterTtsPlugin.swift","sourceTree":"","type":"file"}],"guid":"bfdfe7dc352907fc980b868725387e98e795de7ad9d01eca4e8106970b494fc2","name":"Classes","path":"Classes","sourceTree":"","type":"group"}],"guid":"bfdfe7dc352907fc980b868725387e9896bf9785b74e587bc9e91fbb4da8a435","name":"ios","path":"ios","sourceTree":"","type":"group"}],"guid":"bfdfe7dc352907fc980b868725387e9858a83b402bb384dd6952816528fa7bbf","name":"flutter_tts","path":"flutter_tts","sourceTree":"","type":"group"}],"guid":"bfdfe7dc352907fc980b868725387e98025b02f52f99e3decaab62aa1a291023","name":"plugins","path":"plugins","sourceTree":"","type":"group"}],"guid":"bfdfe7dc352907fc980b868725387e9836d8083626fc0dc75b7b8e541ffd9e45","name":".symlinks","path":".symlinks","sourceTree":"","type":"group"}],"guid":"bfdfe7dc352907fc980b868725387e982c279b3e418919ef5f065730bf07a3c1","name":"ios","path":"ios","sourceTree":"","type":"group"}],"guid":"bfdfe7dc352907fc980b868725387e98b3c3cf9f62fc1da56d8b6bff85524539","name":"mih_ui","path":"mih_ui","sourceTree":"","type":"group"}],"guid":"bfdfe7dc352907fc980b868725387e98a0b564e42e305c647ab1881da5a03693","name":"mih-project","path":"mih-project","sourceTree":"","type":"group"}],"guid":"bfdfe7dc352907fc980b868725387e98299ed66fcf0e4be7c0ec188b0d43e29f","name":"mih_main","path":"mih_main","sourceTree":"","type":"group"}],"guid":"bfdfe7dc352907fc980b868725387e98a3cf26d212ebef093548b626061332e3","name":"Git","path":"Git","sourceTree":"","type":"group"}],"guid":"bfdfe7dc352907fc980b868725387e98269a01fd0639d9a3e9e948f82caf0f60","name":"..","path":"..","sourceTree":"","type":"group"}],"guid":"bfdfe7dc352907fc980b868725387e98941778a8285fce310defd4a5d3efddf1","name":"..","path":"..","sourceTree":"","type":"group"}],"guid":"bfdfe7dc352907fc980b868725387e9813b3dae129ca362ee7543b76405999f1","name":"..","path":"..","sourceTree":"","type":"group"}],"guid":"bfdfe7dc352907fc980b868725387e98e94adf6fc7d648ea52858ddd73e2e4a5","name":"..","path":"..","sourceTree":"","type":"group"}],"guid":"bfdfe7dc352907fc980b868725387e98a4697b90150da6f09c432db7f33c8897","name":"..","path":"..","sourceTree":"","type":"group"}],"guid":"bfdfe7dc352907fc980b868725387e98966cd8c92fd96e89dc448540e3d8724f","name":"..","path":"../../../../../../../../../.pub-cache/hosted/pub.dev/flutter_tts-4.2.3/ios","sourceTree":"","type":"group"},{"children":[{"fileType":"text.script.ruby","guid":"bfdfe7dc352907fc980b868725387e984197658a19c08e23c61b5ca21864856e","path":"../../../../../../../../../.pub-cache/hosted/pub.dev/flutter_tts-4.2.3/ios/flutter_tts.podspec","sourceTree":"","type":"file"},{"fileType":"text","guid":"bfdfe7dc352907fc980b868725387e9850213c3e5ab4d6823caa18df0c548483","path":"../../../../../../../../../.pub-cache/hosted/pub.dev/flutter_tts-4.2.3/LICENSE","sourceTree":"","type":"file"}],"guid":"bfdfe7dc352907fc980b868725387e982c885b13886e6ac5b7c770330e1994b4","name":"Pod","path":"","sourceTree":"","type":"group"},{"children":[{"fileType":"sourcecode.module-map","guid":"bfdfe7dc352907fc980b868725387e98664d028a9be00addb39c144173cd67aa","path":"flutter_tts.modulemap","sourceTree":"","type":"file"},{"fileType":"sourcecode.c.objc","guid":"bfdfe7dc352907fc980b868725387e98b11e2a9ab729e7e8322eb0a54ccd2fb5","path":"flutter_tts-dummy.m","sourceTree":"","type":"file"},{"fileType":"text.plist.xml","guid":"bfdfe7dc352907fc980b868725387e98bb1e92c4af064ddec8a8064aea018b35","path":"flutter_tts-Info.plist","sourceTree":"","type":"file"},{"fileType":"sourcecode.c.h","guid":"bfdfe7dc352907fc980b868725387e98ba1a138da2847d5260f85431acbaf697","path":"flutter_tts-prefix.pch","sourceTree":"","type":"file"},{"fileType":"sourcecode.c.h","guid":"bfdfe7dc352907fc980b868725387e9825cfe228bef73c17089a941802e513b1","path":"flutter_tts-umbrella.h","sourceTree":"","type":"file"},{"fileType":"text.xcconfig","guid":"bfdfe7dc352907fc980b868725387e98b8e89d3c9864142bc7587bc7895448f7","path":"flutter_tts.debug.xcconfig","sourceTree":"","type":"file"},{"fileType":"text.xcconfig","guid":"bfdfe7dc352907fc980b868725387e98111c994b75369b574157edb8fabcd0dc","path":"flutter_tts.release.xcconfig","sourceTree":"","type":"file"}],"guid":"bfdfe7dc352907fc980b868725387e9850a5c296a4de5727af3ec2b788a12c81","name":"Support Files","path":"../../../../Pods/Target Support Files/flutter_tts","sourceTree":"","type":"group"}],"guid":"bfdfe7dc352907fc980b868725387e985664ee4df152ddc248af7315dbd9e2a9","name":"flutter_tts","path":"../.symlinks/plugins/flutter_tts/ios","sourceTree":"","type":"group"},{"children":[{"children":[{"children":[{"children":[{"children":[{"children":[{"children":[{"children":[{"children":[{"children":[{"children":[{"children":[{"children":[{"children":[{"children":[{"children":[{"children":[{"children":[{"children":[{"children":[{"children":[{"fileType":"sourcecode.c.objc","guid":"bfdfe7dc352907fc980b868725387e98ecf8248839ba4e6f17d3532feb14821b","path":"../../../../../../../../../../../../.pub-cache/hosted/pub.dev/geolocator_apple-2.3.13/darwin/geolocator_apple/Sources/geolocator_apple/GeolocatorPlugin.m","sourceTree":"","type":"file"},{"fileType":"text.xml","guid":"bfdfe7dc352907fc980b868725387e98a5e5404fb09ecfe1c9c3cd85e3ab5448","path":"../../../../../../../../../../../../.pub-cache/hosted/pub.dev/geolocator_apple-2.3.13/darwin/geolocator_apple/Sources/geolocator_apple/PrivacyInfo.xcprivacy","sourceTree":"","type":"file"},{"children":[{"fileType":"sourcecode.c.objc","guid":"bfdfe7dc352907fc980b868725387e98e067790bbee9fb9376d0c77605d73661","path":"../../../../../../../../../../../../../.pub-cache/hosted/pub.dev/geolocator_apple-2.3.13/darwin/geolocator_apple/Sources/geolocator_apple/Constants/ErrorCodes.m","sourceTree":"","type":"file"}],"guid":"bfdfe7dc352907fc980b868725387e98f389d7590be5e9db0ca57c059ca0108b","name":"Constants","path":"Constants","sourceTree":"","type":"group"},{"children":[{"fileType":"sourcecode.c.objc","guid":"bfdfe7dc352907fc980b868725387e9825eb273bb3a088732d81eeb1c19af553","path":"../../../../../../../../../../../../../.pub-cache/hosted/pub.dev/geolocator_apple-2.3.13/darwin/geolocator_apple/Sources/geolocator_apple/Handlers/GeolocationHandler.m","sourceTree":"","type":"file"},{"fileType":"sourcecode.c.objc","guid":"bfdfe7dc352907fc980b868725387e98a8a273d3c64641ffd71fe5f8c04b4132","path":"../../../../../../../../../../../../../.pub-cache/hosted/pub.dev/geolocator_apple-2.3.13/darwin/geolocator_apple/Sources/geolocator_apple/Handlers/LocationAccuracyHandler.m","sourceTree":"","type":"file"},{"fileType":"sourcecode.c.objc","guid":"bfdfe7dc352907fc980b868725387e988c15f7293e9ecd2b1063ce877015924a","path":"../../../../../../../../../../../../../.pub-cache/hosted/pub.dev/geolocator_apple-2.3.13/darwin/geolocator_apple/Sources/geolocator_apple/Handlers/LocationServiceStreamHandler.m","sourceTree":"","type":"file"},{"fileType":"sourcecode.c.objc","guid":"bfdfe7dc352907fc980b868725387e989c2cb05698df9b731b1c1c1e59a898de","path":"../../../../../../../../../../../../../.pub-cache/hosted/pub.dev/geolocator_apple-2.3.13/darwin/geolocator_apple/Sources/geolocator_apple/Handlers/PermissionHandler.m","sourceTree":"","type":"file"},{"fileType":"sourcecode.c.objc","guid":"bfdfe7dc352907fc980b868725387e98d01f765a57f90a102cc78be24a15233c","path":"../../../../../../../../../../../../../.pub-cache/hosted/pub.dev/geolocator_apple-2.3.13/darwin/geolocator_apple/Sources/geolocator_apple/Handlers/PositionStreamHandler.m","sourceTree":"","type":"file"}],"guid":"bfdfe7dc352907fc980b868725387e98e66506db49d7cfd1dafabb24cf81fa67","name":"Handlers","path":"Handlers","sourceTree":"","type":"group"},{"children":[{"fileType":"sourcecode.c.h","guid":"bfdfe7dc352907fc980b868725387e9817d4eb1b3c3ac1e9ddcfc14974bec284","path":"../../../../../../../../../../../../../.pub-cache/hosted/pub.dev/geolocator_apple-2.3.13/darwin/geolocator_apple/Sources/geolocator_apple/include/geolocator-umbrella.h","sourceTree":"","type":"file"},{"children":[{"fileType":"sourcecode.c.h","guid":"bfdfe7dc352907fc980b868725387e986f7ca76bd9fb989518a0786f66daa730","path":"../../../../../../../../../../../../../../.pub-cache/hosted/pub.dev/geolocator_apple-2.3.13/darwin/geolocator_apple/Sources/geolocator_apple/include/geolocator_apple/GeolocatorPlugin.h","sourceTree":"","type":"file"},{"fileType":"sourcecode.c.h","guid":"bfdfe7dc352907fc980b868725387e98e8c93c09dbe016d2a985868756c3daf2","path":"../../../../../../../../../../../../../../.pub-cache/hosted/pub.dev/geolocator_apple-2.3.13/darwin/geolocator_apple/Sources/geolocator_apple/include/geolocator_apple/GeolocatorPlugin_Test.h","sourceTree":"","type":"file"},{"children":[{"fileType":"sourcecode.c.h","guid":"bfdfe7dc352907fc980b868725387e98b8a07e04f908cc8061e28409eec78500","path":"../../../../../../../../../../../../../../../.pub-cache/hosted/pub.dev/geolocator_apple-2.3.13/darwin/geolocator_apple/Sources/geolocator_apple/include/geolocator_apple/Constants/ErrorCodes.h","sourceTree":"","type":"file"}],"guid":"bfdfe7dc352907fc980b868725387e98564b47353e7d1bdd7258fa20cf38a285","name":"Constants","path":"Constants","sourceTree":"","type":"group"},{"children":[{"fileType":"sourcecode.c.h","guid":"bfdfe7dc352907fc980b868725387e985d7e5bf3eb3e1529ebbb131e40709a84","path":"../../../../../../../../../../../../../../../.pub-cache/hosted/pub.dev/geolocator_apple-2.3.13/darwin/geolocator_apple/Sources/geolocator_apple/include/geolocator_apple/Handlers/GeolocationHandler.h","sourceTree":"","type":"file"},{"fileType":"sourcecode.c.h","guid":"bfdfe7dc352907fc980b868725387e982a3cc027245753495848a1caefc6d9f4","path":"../../../../../../../../../../../../../../../.pub-cache/hosted/pub.dev/geolocator_apple-2.3.13/darwin/geolocator_apple/Sources/geolocator_apple/include/geolocator_apple/Handlers/GeolocationHandler_Test.h","sourceTree":"","type":"file"},{"fileType":"sourcecode.c.h","guid":"bfdfe7dc352907fc980b868725387e983f42416849bce11b33d814523ade52b1","path":"../../../../../../../../../../../../../../../.pub-cache/hosted/pub.dev/geolocator_apple-2.3.13/darwin/geolocator_apple/Sources/geolocator_apple/include/geolocator_apple/Handlers/LocationAccuracyHandler.h","sourceTree":"","type":"file"},{"fileType":"sourcecode.c.h","guid":"bfdfe7dc352907fc980b868725387e981f6af95e734f0e05952c002243f2cb28","path":"../../../../../../../../../../../../../../../.pub-cache/hosted/pub.dev/geolocator_apple-2.3.13/darwin/geolocator_apple/Sources/geolocator_apple/include/geolocator_apple/Handlers/LocationServiceStreamHandler.h","sourceTree":"","type":"file"},{"fileType":"sourcecode.c.h","guid":"bfdfe7dc352907fc980b868725387e98892d93e77cafda119e30c32988406d93","path":"../../../../../../../../../../../../../../../.pub-cache/hosted/pub.dev/geolocator_apple-2.3.13/darwin/geolocator_apple/Sources/geolocator_apple/include/geolocator_apple/Handlers/PermissionHandler.h","sourceTree":"","type":"file"},{"fileType":"sourcecode.c.h","guid":"bfdfe7dc352907fc980b868725387e98184bfb0fe7b895691bee4935d2b5d50f","path":"../../../../../../../../../../../../../../../.pub-cache/hosted/pub.dev/geolocator_apple-2.3.13/darwin/geolocator_apple/Sources/geolocator_apple/include/geolocator_apple/Handlers/PositionStreamHandler.h","sourceTree":"","type":"file"}],"guid":"bfdfe7dc352907fc980b868725387e981536bb489c24983c514c14d4cc16e595","name":"Handlers","path":"Handlers","sourceTree":"","type":"group"},{"children":[{"fileType":"sourcecode.c.h","guid":"bfdfe7dc352907fc980b868725387e98ae7e46b06e0aeb71210643f8094d1b27","path":"../../../../../../../../../../../../../../../.pub-cache/hosted/pub.dev/geolocator_apple-2.3.13/darwin/geolocator_apple/Sources/geolocator_apple/include/geolocator_apple/Utils/ActivityTypeMapper.h","sourceTree":"","type":"file"},{"fileType":"sourcecode.c.h","guid":"bfdfe7dc352907fc980b868725387e9894545c5eb4d21f54d2b3ad4447240a56","path":"../../../../../../../../../../../../../../../.pub-cache/hosted/pub.dev/geolocator_apple-2.3.13/darwin/geolocator_apple/Sources/geolocator_apple/include/geolocator_apple/Utils/AuthorizationStatusMapper.h","sourceTree":"","type":"file"},{"fileType":"sourcecode.c.h","guid":"bfdfe7dc352907fc980b868725387e98d79d9d7f2df01bec5fd1e10cbe9b2f76","path":"../../../../../../../../../../../../../../../.pub-cache/hosted/pub.dev/geolocator_apple-2.3.13/darwin/geolocator_apple/Sources/geolocator_apple/include/geolocator_apple/Utils/LocationAccuracyMapper.h","sourceTree":"","type":"file"},{"fileType":"sourcecode.c.h","guid":"bfdfe7dc352907fc980b868725387e981fc28c232ec55d2d1c2305e98d7bd92a","path":"../../../../../../../../../../../../../../../.pub-cache/hosted/pub.dev/geolocator_apple-2.3.13/darwin/geolocator_apple/Sources/geolocator_apple/include/geolocator_apple/Utils/LocationDistanceMapper.h","sourceTree":"","type":"file"},{"fileType":"sourcecode.c.h","guid":"bfdfe7dc352907fc980b868725387e98d33e281aa21213bf9ee3ca2d26a8cb52","path":"../../../../../../../../../../../../../../../.pub-cache/hosted/pub.dev/geolocator_apple-2.3.13/darwin/geolocator_apple/Sources/geolocator_apple/include/geolocator_apple/Utils/LocationMapper.h","sourceTree":"","type":"file"},{"fileType":"sourcecode.c.h","guid":"bfdfe7dc352907fc980b868725387e981700891532905651a54cc9a07dd2c6b3","path":"../../../../../../../../../../../../../../../.pub-cache/hosted/pub.dev/geolocator_apple-2.3.13/darwin/geolocator_apple/Sources/geolocator_apple/include/geolocator_apple/Utils/PermissionUtils.h","sourceTree":"","type":"file"},{"fileType":"sourcecode.c.h","guid":"bfdfe7dc352907fc980b868725387e98e2f51025ce37ba6eff3a96efa381b796","path":"../../../../../../../../../../../../../../../.pub-cache/hosted/pub.dev/geolocator_apple-2.3.13/darwin/geolocator_apple/Sources/geolocator_apple/include/geolocator_apple/Utils/ServiceStatus.h","sourceTree":"","type":"file"}],"guid":"bfdfe7dc352907fc980b868725387e985667aa0966b78f13fc94b8d52ef07069","name":"Utils","path":"Utils","sourceTree":"","type":"group"}],"guid":"bfdfe7dc352907fc980b868725387e98ac40486a435ceade9d60db208ec16e1b","name":"geolocator_apple","path":"geolocator_apple","sourceTree":"","type":"group"}],"guid":"bfdfe7dc352907fc980b868725387e98b84b1441d770b214bd709d8f5b1d3248","name":"include","path":"include","sourceTree":"","type":"group"},{"children":[{"fileType":"sourcecode.c.objc","guid":"bfdfe7dc352907fc980b868725387e98394614911d329fd59c3c1e287c4f7ac2","path":"../../../../../../../../../../../../../.pub-cache/hosted/pub.dev/geolocator_apple-2.3.13/darwin/geolocator_apple/Sources/geolocator_apple/Utils/ActivityTypeMapper.m","sourceTree":"","type":"file"},{"fileType":"sourcecode.c.objc","guid":"bfdfe7dc352907fc980b868725387e98acbd88adba80f77ca7a9d08f07fa7223","path":"../../../../../../../../../../../../../.pub-cache/hosted/pub.dev/geolocator_apple-2.3.13/darwin/geolocator_apple/Sources/geolocator_apple/Utils/AuthorizationStatusMapper.m","sourceTree":"","type":"file"},{"fileType":"sourcecode.c.objc","guid":"bfdfe7dc352907fc980b868725387e982ea9c75e15c2f0e5172d62007ca22170","path":"../../../../../../../../../../../../../.pub-cache/hosted/pub.dev/geolocator_apple-2.3.13/darwin/geolocator_apple/Sources/geolocator_apple/Utils/LocationAccuracyMapper.m","sourceTree":"","type":"file"},{"fileType":"sourcecode.c.objc","guid":"bfdfe7dc352907fc980b868725387e98230a202d71e90bc984b72ad2f09fb2f4","path":"../../../../../../../../../../../../../.pub-cache/hosted/pub.dev/geolocator_apple-2.3.13/darwin/geolocator_apple/Sources/geolocator_apple/Utils/LocationDistanceMapper.m","sourceTree":"","type":"file"},{"fileType":"sourcecode.c.objc","guid":"bfdfe7dc352907fc980b868725387e98c64b3141b3e00a1e02e21e19f1e7eaab","path":"../../../../../../../../../../../../../.pub-cache/hosted/pub.dev/geolocator_apple-2.3.13/darwin/geolocator_apple/Sources/geolocator_apple/Utils/LocationMapper.m","sourceTree":"","type":"file"},{"fileType":"sourcecode.c.objc","guid":"bfdfe7dc352907fc980b868725387e982631bb95675558dfb73b76bfc58028b0","path":"../../../../../../../../../../../../../.pub-cache/hosted/pub.dev/geolocator_apple-2.3.13/darwin/geolocator_apple/Sources/geolocator_apple/Utils/PermissionUtils.m","sourceTree":"","type":"file"}],"guid":"bfdfe7dc352907fc980b868725387e981cc49838fe0b164a24b0497426ed1872","name":"Utils","path":"Utils","sourceTree":"","type":"group"}],"guid":"bfdfe7dc352907fc980b868725387e9845a18a64d01086b3a5e03e0726c72ad5","name":"geolocator_apple","path":"geolocator_apple","sourceTree":"","type":"group"}],"guid":"bfdfe7dc352907fc980b868725387e98f8f310240676888551cbce2c4a38ad04","name":"Sources","path":"Sources","sourceTree":"","type":"group"}],"guid":"bfdfe7dc352907fc980b868725387e985ae39fd60e91694e50d5459c5ee7554b","name":"geolocator_apple","path":"geolocator_apple","sourceTree":"","type":"group"}],"guid":"bfdfe7dc352907fc980b868725387e98d5416b91657cb5aadd074a2eafcb298e","name":"darwin","path":"darwin","sourceTree":"","type":"group"}],"guid":"bfdfe7dc352907fc980b868725387e9850beea1f1eb7e3285a009c040ac337c0","name":"geolocator_apple","path":"geolocator_apple","sourceTree":"","type":"group"}],"guid":"bfdfe7dc352907fc980b868725387e988381e2d6db0934bae3374082488deb07","name":"plugins","path":"plugins","sourceTree":"","type":"group"}],"guid":"bfdfe7dc352907fc980b868725387e985987c10e62d5ae59c4d30cdfbf7dcd0c","name":".symlinks","path":".symlinks","sourceTree":"","type":"group"}],"guid":"bfdfe7dc352907fc980b868725387e98a675fc008b4ccd74ed68303bc64d51d3","name":"ios","path":"ios","sourceTree":"","type":"group"}],"guid":"bfdfe7dc352907fc980b868725387e98b262dff1a6946a390062fb8d44e8f00b","name":"mih_ui","path":"mih_ui","sourceTree":"","type":"group"}],"guid":"bfdfe7dc352907fc980b868725387e98792dfcec259d0cb8e896589f0772723f","name":"mih-project","path":"mih-project","sourceTree":"","type":"group"}],"guid":"bfdfe7dc352907fc980b868725387e986be7bd9b69c24b311636c049fd830ced","name":"mih_main","path":"mih_main","sourceTree":"","type":"group"}],"guid":"bfdfe7dc352907fc980b868725387e98c86148aec55a4345d66ce5d25dee1fc5","name":"Git","path":"Git","sourceTree":"","type":"group"}],"guid":"bfdfe7dc352907fc980b868725387e98ee55db4b9ab3c92c4677f00cc66f472f","name":"..","path":"..","sourceTree":"","type":"group"}],"guid":"bfdfe7dc352907fc980b868725387e98a4cc776aa809ddbed08a35eba77ff870","name":"..","path":"..","sourceTree":"","type":"group"}],"guid":"bfdfe7dc352907fc980b868725387e98b192d0a4c1d3cbab73af086e3bc29707","name":"..","path":"..","sourceTree":"","type":"group"}],"guid":"bfdfe7dc352907fc980b868725387e98443c081a5b6c842b7c474b70b1b6a0b1","name":"..","path":"..","sourceTree":"","type":"group"}],"guid":"bfdfe7dc352907fc980b868725387e989fdf0343f9596072ec5a0e066bd81b3d","name":"..","path":"..","sourceTree":"","type":"group"}],"guid":"bfdfe7dc352907fc980b868725387e983c0b90a4c6156242cbdc6088a1ac2755","name":"..","path":"..","sourceTree":"","type":"group"}],"guid":"bfdfe7dc352907fc980b868725387e9893bce549659923dc4c5c1624e81ca6c8","name":"..","path":"..","sourceTree":"","type":"group"}],"guid":"bfdfe7dc352907fc980b868725387e981227750ff5a7875e98c4bf141d19a15a","name":"..","path":"../../../../../../../../../.pub-cache/hosted/pub.dev/geolocator_apple-2.3.13/darwin/geolocator_apple/Sources","sourceTree":"","type":"group"},{"children":[{"fileType":"text.script.ruby","guid":"bfdfe7dc352907fc980b868725387e9876a2864167e24de1f0fa64edb99c0ffb","path":"../../../../../../../../../.pub-cache/hosted/pub.dev/geolocator_apple-2.3.13/darwin/geolocator_apple.podspec","sourceTree":"","type":"file"},{"fileType":"sourcecode.module-map","guid":"bfdfe7dc352907fc980b868725387e98820d0afbd7a010746242a58f46799999","path":"../../../../../../../../../.pub-cache/hosted/pub.dev/geolocator_apple-2.3.13/darwin/geolocator_apple/Sources/geolocator_apple/include/GeolocatorPlugin.modulemap","sourceTree":"","type":"file"},{"fileType":"text","guid":"bfdfe7dc352907fc980b868725387e98011268945c36b9ceebbfbccceda6605e","path":"../../../../../../../../../.pub-cache/hosted/pub.dev/geolocator_apple-2.3.13/LICENSE","sourceTree":"","type":"file"}],"guid":"bfdfe7dc352907fc980b868725387e9804b6f8c808c7283afff93f2ea8ea9951","name":"Pod","path":"","sourceTree":"","type":"group"},{"children":[{"fileType":"sourcecode.module-map","guid":"bfdfe7dc352907fc980b868725387e980fd6cecba834abe29b2f15b93f28d8dc","path":"geolocator_apple.modulemap","sourceTree":"","type":"file"},{"fileType":"sourcecode.c.objc","guid":"bfdfe7dc352907fc980b868725387e9820b9343c256beee0a1c63afec1a67796","path":"geolocator_apple-dummy.m","sourceTree":"","type":"file"},{"fileType":"text.plist.xml","guid":"bfdfe7dc352907fc980b868725387e98be534d3a4f1db11fbd07c81b7ce20a53","path":"geolocator_apple-Info.plist","sourceTree":"","type":"file"},{"fileType":"sourcecode.c.h","guid":"bfdfe7dc352907fc980b868725387e982f75c0f88f4beefbabfbdf79c68646d4","path":"geolocator_apple-prefix.pch","sourceTree":"","type":"file"},{"fileType":"text.xcconfig","guid":"bfdfe7dc352907fc980b868725387e98cca55d6c772db4d637cf770c880e5bab","path":"geolocator_apple.debug.xcconfig","sourceTree":"","type":"file"},{"fileType":"text.xcconfig","guid":"bfdfe7dc352907fc980b868725387e98563a39b273a0c88e1e2a4a289bb4eff2","path":"geolocator_apple.release.xcconfig","sourceTree":"","type":"file"},{"fileType":"text.plist.xml","guid":"bfdfe7dc352907fc980b868725387e98228627942149fc66c3cc7f2f156393bc","path":"ResourceBundle-geolocator_apple_privacy-geolocator_apple-Info.plist","sourceTree":"","type":"file"}],"guid":"bfdfe7dc352907fc980b868725387e9802ee4e2e69248bd9f3bc1cc7df1b2a72","name":"Support Files","path":"../../../../Pods/Target Support Files/geolocator_apple","sourceTree":"","type":"group"}],"guid":"bfdfe7dc352907fc980b868725387e9883ddda10d177543347d7414387e6b93f","name":"geolocator_apple","path":"../.symlinks/plugins/geolocator_apple/darwin","sourceTree":"","type":"group"},{"children":[{"children":[{"children":[{"children":[{"children":[{"children":[{"children":[{"children":[{"children":[{"children":[{"children":[{"children":[{"children":[{"children":[{"children":[{"children":[{"children":[{"fileType":"sourcecode.swift","guid":"bfdfe7dc352907fc980b868725387e98de6a43df899eca99ef9a76eb3ad60a9b","path":"../../../../../../../../../../.pub-cache/hosted/pub.dev/gma_mediation_meta-1.4.1/ios/Classes/GmaMediationMetaPlugin.swift","sourceTree":"","type":"file"}],"guid":"bfdfe7dc352907fc980b868725387e988a3b9138be85eef20087693f3733b9f7","name":"Classes","path":"Classes","sourceTree":"","type":"group"}],"guid":"bfdfe7dc352907fc980b868725387e982d2a97b6721af734cb336d4d9d14a978","name":"ios","path":"ios","sourceTree":"","type":"group"}],"guid":"bfdfe7dc352907fc980b868725387e981f344dd3f0f476e94dc4032988ad21c8","name":"gma_mediation_meta","path":"gma_mediation_meta","sourceTree":"","type":"group"}],"guid":"bfdfe7dc352907fc980b868725387e98dde06cdf7aa79311d49d807bef0624e1","name":"plugins","path":"plugins","sourceTree":"","type":"group"}],"guid":"bfdfe7dc352907fc980b868725387e98f7c585e7d69cd1784bc451798af821ba","name":".symlinks","path":".symlinks","sourceTree":"","type":"group"}],"guid":"bfdfe7dc352907fc980b868725387e98ca3755d9ea9e625f6b0e1c9595df0e73","name":"ios","path":"ios","sourceTree":"","type":"group"}],"guid":"bfdfe7dc352907fc980b868725387e98cd07de7ece829229a5cd7f4589e9aa1b","name":"mih_ui","path":"mih_ui","sourceTree":"","type":"group"}],"guid":"bfdfe7dc352907fc980b868725387e986c0eb47a69c5ef033ed2c06578cd755f","name":"mih-project","path":"mih-project","sourceTree":"","type":"group"}],"guid":"bfdfe7dc352907fc980b868725387e98610ddb3253d894b958fd8caac55fb7c2","name":"mih_main","path":"mih_main","sourceTree":"","type":"group"}],"guid":"bfdfe7dc352907fc980b868725387e98be22ace52c66610bf4fa74c9371763ee","name":"Git","path":"Git","sourceTree":"","type":"group"}],"guid":"bfdfe7dc352907fc980b868725387e98fc76fa81069a6d2456610d26c09ad29a","name":"..","path":"..","sourceTree":"","type":"group"}],"guid":"bfdfe7dc352907fc980b868725387e98f54631f5283fc4486540a839cd548473","name":"..","path":"..","sourceTree":"","type":"group"}],"guid":"bfdfe7dc352907fc980b868725387e9838bf4e5370d028d02019f69e624fb766","name":"..","path":"..","sourceTree":"","type":"group"}],"guid":"bfdfe7dc352907fc980b868725387e98ce9da887ab31570c31b5be39af990c99","name":"..","path":"..","sourceTree":"","type":"group"}],"guid":"bfdfe7dc352907fc980b868725387e987794cbefd29dcd5b55d4f24c0eb9b86b","name":"..","path":"..","sourceTree":"","type":"group"}],"guid":"bfdfe7dc352907fc980b868725387e98266a86b0874d5a77fcb3f14df27a7dad","name":"..","path":"../../../../../../../../../.pub-cache/hosted/pub.dev/gma_mediation_meta-1.4.1/ios","sourceTree":"","type":"group"},{"children":[{"fileType":"text.script.ruby","guid":"bfdfe7dc352907fc980b868725387e984c9a371b4768a47036f74a85762a5756","path":"../../../../../../../../../.pub-cache/hosted/pub.dev/gma_mediation_meta-1.4.1/ios/gma_mediation_meta.podspec","sourceTree":"","type":"file"},{"fileType":"text","guid":"bfdfe7dc352907fc980b868725387e98d440111c4f17e6cc15039d3a647ca4a1","path":"../../../../../../../../../.pub-cache/hosted/pub.dev/gma_mediation_meta-1.4.1/LICENSE","sourceTree":"","type":"file"}],"guid":"bfdfe7dc352907fc980b868725387e986a11c846835b0464eedb907d8a69504c","name":"Pod","path":"","sourceTree":"","type":"group"},{"children":[{"fileType":"sourcecode.module-map","guid":"bfdfe7dc352907fc980b868725387e9840c032e476c20c8ce93e53da92990570","path":"gma_mediation_meta.modulemap","sourceTree":"","type":"file"},{"fileType":"sourcecode.c.objc","guid":"bfdfe7dc352907fc980b868725387e984dfc7910e2cd9fac3233404165834daa","path":"gma_mediation_meta-dummy.m","sourceTree":"","type":"file"},{"fileType":"text.plist.xml","guid":"bfdfe7dc352907fc980b868725387e984c4389c03478134caa5f9063a397ed56","path":"gma_mediation_meta-Info.plist","sourceTree":"","type":"file"},{"fileType":"sourcecode.c.h","guid":"bfdfe7dc352907fc980b868725387e98c0926e1ab9cccf8e6f6be6ce2d92d03c","path":"gma_mediation_meta-prefix.pch","sourceTree":"","type":"file"},{"fileType":"sourcecode.c.h","guid":"bfdfe7dc352907fc980b868725387e98f8de3b0000f893d550dd9f3b81ebc5cf","path":"gma_mediation_meta-umbrella.h","sourceTree":"","type":"file"},{"fileType":"text.xcconfig","guid":"bfdfe7dc352907fc980b868725387e984313c60e6f9802ff746f03392a8606c6","path":"gma_mediation_meta.debug.xcconfig","sourceTree":"","type":"file"},{"fileType":"text.xcconfig","guid":"bfdfe7dc352907fc980b868725387e98a3553afa0a155f1b7d0b159f832c1bdf","path":"gma_mediation_meta.release.xcconfig","sourceTree":"","type":"file"}],"guid":"bfdfe7dc352907fc980b868725387e986f31c7fc7caf3bdd20a857979520b8b4","name":"Support Files","path":"../../../../Pods/Target Support Files/gma_mediation_meta","sourceTree":"","type":"group"}],"guid":"bfdfe7dc352907fc980b868725387e98d7acdcb1524eae7cf10e61cf08cb5fdb","name":"gma_mediation_meta","path":"../.symlinks/plugins/gma_mediation_meta/ios","sourceTree":"","type":"group"},{"children":[{"children":[{"children":[{"children":[{"children":[{"children":[{"children":[{"children":[{"children":[{"children":[{"children":[{"children":[{"children":[{"children":[{"children":[{"children":[{"children":[{"children":[{"children":[{"children":[{"children":[{"fileType":"file.xib","guid":"bfdfe7dc352907fc980b868725387e982d53de7511db5a956fe99a4cfd6a3fc6","path":"../../../../../../../../../../../../.pub-cache/hosted/pub.dev/google_mobile_ads-6.0.0/ios/Classes/NativeTemplates/GoogleAdsMobileIosNativeTemplates/GADTFullScreenTemplateView.xib","sourceTree":"","type":"file"},{"fileType":"file.xib","guid":"bfdfe7dc352907fc980b868725387e98fb4a1331e3e12b4a42dc22a871d90dbc","path":"../../../../../../../../../../../../.pub-cache/hosted/pub.dev/google_mobile_ads-6.0.0/ios/Classes/NativeTemplates/GoogleAdsMobileIosNativeTemplates/GADTMediumTemplateView.xib","sourceTree":"","type":"file"},{"fileType":"file.xib","guid":"bfdfe7dc352907fc980b868725387e983b2fa426a77c6733b0fe8cfa17eaaa44","path":"../../../../../../../../../../../../.pub-cache/hosted/pub.dev/google_mobile_ads-6.0.0/ios/Classes/NativeTemplates/GoogleAdsMobileIosNativeTemplates/GADTSmallTemplateView.xib","sourceTree":"","type":"file"}],"guid":"bfdfe7dc352907fc980b868725387e9884fa7ea4fe0a8f9617c20bf588117864","name":"GoogleAdsMobileIosNativeTemplates","path":"GoogleAdsMobileIosNativeTemplates","sourceTree":"","type":"group"}],"guid":"bfdfe7dc352907fc980b868725387e98d4f0f60e1ddab0be85f75b22ed409506","name":"NativeTemplates","path":"NativeTemplates","sourceTree":"","type":"group"}],"guid":"bfdfe7dc352907fc980b868725387e98b9015572d98d9472a3d4483c35531f25","name":"Classes","path":"Classes","sourceTree":"","type":"group"}],"guid":"bfdfe7dc352907fc980b868725387e98aa53af110a5d2ca85b38a84f94ac5b9a","name":"ios","path":"ios","sourceTree":"","type":"group"}],"guid":"bfdfe7dc352907fc980b868725387e98ec9b1a5199f447b986e2adf8d0d674f4","name":"google_mobile_ads","path":"google_mobile_ads","sourceTree":"","type":"group"}],"guid":"bfdfe7dc352907fc980b868725387e98376b309d1833fec568dfaf24eb9421ae","name":"plugins","path":"plugins","sourceTree":"","type":"group"}],"guid":"bfdfe7dc352907fc980b868725387e984bb13b21c45d4120ba0107eae0515b20","name":".symlinks","path":".symlinks","sourceTree":"","type":"group"}],"guid":"bfdfe7dc352907fc980b868725387e98031bd58572f072f627e4717b1dd7302d","name":"ios","path":"ios","sourceTree":"","type":"group"}],"guid":"bfdfe7dc352907fc980b868725387e988adf2653fd4903237dc0df4428ff7586","name":"mih_ui","path":"mih_ui","sourceTree":"","type":"group"}],"guid":"bfdfe7dc352907fc980b868725387e9822338e4ddc0acc85067c540dca84ad25","name":"mih-project","path":"mih-project","sourceTree":"","type":"group"}],"guid":"bfdfe7dc352907fc980b868725387e98aaf47f53e032b61400089f260cbd02c4","name":"mih_main","path":"mih_main","sourceTree":"","type":"group"}],"guid":"bfdfe7dc352907fc980b868725387e98408c01383c6581d63d2bf947b72a631a","name":"Git","path":"Git","sourceTree":"","type":"group"}],"guid":"bfdfe7dc352907fc980b868725387e988d96046b8193b5a333e1c55964adf092","name":"..","path":"..","sourceTree":"","type":"group"}],"guid":"bfdfe7dc352907fc980b868725387e98e32f3ed8f4797a454f2dd4902f43b22f","name":"..","path":".pub-cache","sourceTree":"","type":"group"},{"children":[{"children":[{"children":[{"children":[{"children":[{"children":[{"children":[{"children":[{"children":[{"children":[{"fileType":"sourcecode.c.h","guid":"bfdfe7dc352907fc980b868725387e984240dfeec000ca8d0ac4a90a031aaf0a","path":"../../../../../../../../../../.pub-cache/hosted/pub.dev/google_mobile_ads-6.0.0/ios/Classes/FLTAd_Internal.h","sourceTree":"","type":"file"},{"fileType":"sourcecode.c.objc","guid":"bfdfe7dc352907fc980b868725387e98f5aab5940ee683a0f59b1e8870b802dc","path":"../../../../../../../../../../.pub-cache/hosted/pub.dev/google_mobile_ads-6.0.0/ios/Classes/FLTAd_Internal.m","sourceTree":"","type":"file"},{"fileType":"sourcecode.c.h","guid":"bfdfe7dc352907fc980b868725387e9890fd4326c9f214196bd5a0490007afcd","path":"../../../../../../../../../../.pub-cache/hosted/pub.dev/google_mobile_ads-6.0.0/ios/Classes/FLTAdInstanceManager_Internal.h","sourceTree":"","type":"file"},{"fileType":"sourcecode.c.objc","guid":"bfdfe7dc352907fc980b868725387e9806b9260a8591ca252226b8bacbb7c485","path":"../../../../../../../../../../.pub-cache/hosted/pub.dev/google_mobile_ads-6.0.0/ios/Classes/FLTAdInstanceManager_Internal.m","sourceTree":"","type":"file"},{"fileType":"sourcecode.c.h","guid":"bfdfe7dc352907fc980b868725387e984d482976b92aa362238438f33e1d3847","path":"../../../../../../../../../../.pub-cache/hosted/pub.dev/google_mobile_ads-6.0.0/ios/Classes/FLTAdUtil.h","sourceTree":"","type":"file"},{"fileType":"sourcecode.c.objc","guid":"bfdfe7dc352907fc980b868725387e981c6389e12e9d4a39af9fc2b794895960","path":"../../../../../../../../../../.pub-cache/hosted/pub.dev/google_mobile_ads-6.0.0/ios/Classes/FLTAdUtil.m","sourceTree":"","type":"file"},{"fileType":"sourcecode.c.h","guid":"bfdfe7dc352907fc980b868725387e9835c6106e9c677e5754054f0a9010d0fb","path":"../../../../../../../../../../.pub-cache/hosted/pub.dev/google_mobile_ads-6.0.0/ios/Classes/FLTAppStateNotifier.h","sourceTree":"","type":"file"},{"fileType":"sourcecode.c.objc","guid":"bfdfe7dc352907fc980b868725387e986b6b176839f0b199c05b9bfda1b0289a","path":"../../../../../../../../../../.pub-cache/hosted/pub.dev/google_mobile_ads-6.0.0/ios/Classes/FLTAppStateNotifier.m","sourceTree":"","type":"file"},{"fileType":"sourcecode.c.h","guid":"bfdfe7dc352907fc980b868725387e981f6abf8441aeddf38e2ee5b6e097cc8f","path":"../../../../../../../../../../.pub-cache/hosted/pub.dev/google_mobile_ads-6.0.0/ios/Classes/FLTConstants.h","sourceTree":"","type":"file"},{"fileType":"sourcecode.c.h","guid":"bfdfe7dc352907fc980b868725387e989cc1f81c38bb9851f4050d8234e27827","path":"../../../../../../../../../../.pub-cache/hosted/pub.dev/google_mobile_ads-6.0.0/ios/Classes/FLTGoogleMobileAdsCollection_Internal.h","sourceTree":"","type":"file"},{"fileType":"sourcecode.c.objc","guid":"bfdfe7dc352907fc980b868725387e98e42ceda20f7996f4f1db9cb68f5f0e82","path":"../../../../../../../../../../.pub-cache/hosted/pub.dev/google_mobile_ads-6.0.0/ios/Classes/FLTGoogleMobileAdsCollection_Internal.m","sourceTree":"","type":"file"},{"fileType":"sourcecode.c.h","guid":"bfdfe7dc352907fc980b868725387e98b3f9c06c5fdf0e42530f281cca9fc44f","path":"../../../../../../../../../../.pub-cache/hosted/pub.dev/google_mobile_ads-6.0.0/ios/Classes/FLTGoogleMobileAdsPlugin.h","sourceTree":"","type":"file"},{"fileType":"sourcecode.c.objc","guid":"bfdfe7dc352907fc980b868725387e98220dcc23917995a27d0f53057040c555","path":"../../../../../../../../../../.pub-cache/hosted/pub.dev/google_mobile_ads-6.0.0/ios/Classes/FLTGoogleMobileAdsPlugin.m","sourceTree":"","type":"file"},{"fileType":"sourcecode.c.h","guid":"bfdfe7dc352907fc980b868725387e98c6a0457f533d1b1ca15ab8a5364ef37b","path":"../../../../../../../../../../.pub-cache/hosted/pub.dev/google_mobile_ads-6.0.0/ios/Classes/FLTGoogleMobileAdsReaderWriter_Internal.h","sourceTree":"","type":"file"},{"fileType":"sourcecode.c.objc","guid":"bfdfe7dc352907fc980b868725387e981d5d659ea3fece667574bfd04ef72e19","path":"../../../../../../../../../../.pub-cache/hosted/pub.dev/google_mobile_ads-6.0.0/ios/Classes/FLTGoogleMobileAdsReaderWriter_Internal.m","sourceTree":"","type":"file"},{"fileType":"sourcecode.c.h","guid":"bfdfe7dc352907fc980b868725387e9864b4634ab3a98b02e906a6583e29134f","path":"../../../../../../../../../../.pub-cache/hosted/pub.dev/google_mobile_ads-6.0.0/ios/Classes/FLTMediationExtras.h","sourceTree":"","type":"file"},{"fileType":"sourcecode.c.h","guid":"bfdfe7dc352907fc980b868725387e985ef5b1cd5b86a3e538a197c1ab9a9812","path":"../../../../../../../../../../.pub-cache/hosted/pub.dev/google_mobile_ads-6.0.0/ios/Classes/FLTMediationNetworkExtrasProvider.h","sourceTree":"","type":"file"},{"fileType":"sourcecode.c.h","guid":"bfdfe7dc352907fc980b868725387e98d65e11739777d0c59cb6a89a4b9c2e57","path":"../../../../../../../../../../.pub-cache/hosted/pub.dev/google_mobile_ads-6.0.0/ios/Classes/FLTMobileAds_Internal.h","sourceTree":"","type":"file"},{"fileType":"sourcecode.c.objc","guid":"bfdfe7dc352907fc980b868725387e986b796972877c18df3d6f5af3cab27e5c","path":"../../../../../../../../../../.pub-cache/hosted/pub.dev/google_mobile_ads-6.0.0/ios/Classes/FLTMobileAds_Internal.m","sourceTree":"","type":"file"},{"fileType":"sourcecode.c.h","guid":"bfdfe7dc352907fc980b868725387e9816ecde728aa88cc29920a74c71a2d3db","path":"../../../../../../../../../../.pub-cache/hosted/pub.dev/google_mobile_ads-6.0.0/ios/Classes/FLTNSString.h","sourceTree":"","type":"file"},{"fileType":"sourcecode.c.objc","guid":"bfdfe7dc352907fc980b868725387e9815cfebf454d95d6d62ffbab198236c6c","path":"../../../../../../../../../../.pub-cache/hosted/pub.dev/google_mobile_ads-6.0.0/ios/Classes/FLTNSString.m","sourceTree":"","type":"file"},{"children":[{"fileType":"sourcecode.c.h","guid":"bfdfe7dc352907fc980b868725387e9881de238705aaccdfd3c39ad39d8a29c1","path":"../../../../../../../../../../../.pub-cache/hosted/pub.dev/google_mobile_ads-6.0.0/ios/Classes/NativeTemplates/FLTNativeTemplateColor.h","sourceTree":"","type":"file"},{"fileType":"sourcecode.c.objc","guid":"bfdfe7dc352907fc980b868725387e988d7783f13036a505334aa6f36adb89c1","path":"../../../../../../../../../../../.pub-cache/hosted/pub.dev/google_mobile_ads-6.0.0/ios/Classes/NativeTemplates/FLTNativeTemplateColor.m","sourceTree":"","type":"file"},{"fileType":"sourcecode.c.h","guid":"bfdfe7dc352907fc980b868725387e9885218f34df8f4718b80b621799778241","path":"../../../../../../../../../../../.pub-cache/hosted/pub.dev/google_mobile_ads-6.0.0/ios/Classes/NativeTemplates/FLTNativeTemplateFontStyle.h","sourceTree":"","type":"file"},{"fileType":"sourcecode.c.objc","guid":"bfdfe7dc352907fc980b868725387e983ac31ec6480613fd151e1b624e682774","path":"../../../../../../../../../../../.pub-cache/hosted/pub.dev/google_mobile_ads-6.0.0/ios/Classes/NativeTemplates/FLTNativeTemplateFontStyle.m","sourceTree":"","type":"file"},{"fileType":"sourcecode.c.h","guid":"bfdfe7dc352907fc980b868725387e98ae8af11166b7347d9e0d43f78afdb3c0","path":"../../../../../../../../../../../.pub-cache/hosted/pub.dev/google_mobile_ads-6.0.0/ios/Classes/NativeTemplates/FLTNativeTemplateStyle.h","sourceTree":"","type":"file"},{"fileType":"sourcecode.c.objc","guid":"bfdfe7dc352907fc980b868725387e982281f17e05329e9e471231e98f942168","path":"../../../../../../../../../../../.pub-cache/hosted/pub.dev/google_mobile_ads-6.0.0/ios/Classes/NativeTemplates/FLTNativeTemplateStyle.m","sourceTree":"","type":"file"},{"fileType":"sourcecode.c.h","guid":"bfdfe7dc352907fc980b868725387e9832d9b8c3de108888f7fc0fad5d829a47","path":"../../../../../../../../../../../.pub-cache/hosted/pub.dev/google_mobile_ads-6.0.0/ios/Classes/NativeTemplates/FLTNativeTemplateTextStyle.h","sourceTree":"","type":"file"},{"fileType":"sourcecode.c.objc","guid":"bfdfe7dc352907fc980b868725387e98147317a5801ba72c5dde82a8e257712f","path":"../../../../../../../../../../../.pub-cache/hosted/pub.dev/google_mobile_ads-6.0.0/ios/Classes/NativeTemplates/FLTNativeTemplateTextStyle.m","sourceTree":"","type":"file"},{"fileType":"sourcecode.c.h","guid":"bfdfe7dc352907fc980b868725387e98809c667f0a0b2817398014a088224434","path":"../../../../../../../../../../../.pub-cache/hosted/pub.dev/google_mobile_ads-6.0.0/ios/Classes/NativeTemplates/FLTNativeTemplateType.h","sourceTree":"","type":"file"},{"fileType":"sourcecode.c.objc","guid":"bfdfe7dc352907fc980b868725387e98760f6bc37adfc3ac8632fa54f20c218f","path":"../../../../../../../../../../../.pub-cache/hosted/pub.dev/google_mobile_ads-6.0.0/ios/Classes/NativeTemplates/FLTNativeTemplateType.m","sourceTree":"","type":"file"},{"children":[{"fileType":"sourcecode.c.h","guid":"bfdfe7dc352907fc980b868725387e987a51e4f40d97cb9adc27b2e42cc25b62","path":"../../../../../../../../../../../../.pub-cache/hosted/pub.dev/google_mobile_ads-6.0.0/ios/Classes/NativeTemplates/GoogleAdsMobileIosNativeTemplates/GADTFullScreenTemplateView.h","sourceTree":"","type":"file"},{"fileType":"sourcecode.c.objc","guid":"bfdfe7dc352907fc980b868725387e985ae4ef538e0272a808791bf1392f7c73","path":"../../../../../../../../../../../../.pub-cache/hosted/pub.dev/google_mobile_ads-6.0.0/ios/Classes/NativeTemplates/GoogleAdsMobileIosNativeTemplates/GADTFullScreenTemplateView.m","sourceTree":"","type":"file"},{"fileType":"sourcecode.c.h","guid":"bfdfe7dc352907fc980b868725387e9864317c934a174460acab2d786935fa3a","path":"../../../../../../../../../../../../.pub-cache/hosted/pub.dev/google_mobile_ads-6.0.0/ios/Classes/NativeTemplates/GoogleAdsMobileIosNativeTemplates/GADTMediumTemplateView.h","sourceTree":"","type":"file"},{"fileType":"sourcecode.c.objc","guid":"bfdfe7dc352907fc980b868725387e981bf4bcbaf79a603383c23645090bc955","path":"../../../../../../../../../../../../.pub-cache/hosted/pub.dev/google_mobile_ads-6.0.0/ios/Classes/NativeTemplates/GoogleAdsMobileIosNativeTemplates/GADTMediumTemplateView.m","sourceTree":"","type":"file"},{"fileType":"sourcecode.c.h","guid":"bfdfe7dc352907fc980b868725387e98fd894f45ca741629b38f8f4692bca46a","path":"../../../../../../../../../../../../.pub-cache/hosted/pub.dev/google_mobile_ads-6.0.0/ios/Classes/NativeTemplates/GoogleAdsMobileIosNativeTemplates/GADTSmallTemplateView.h","sourceTree":"","type":"file"},{"fileType":"sourcecode.c.objc","guid":"bfdfe7dc352907fc980b868725387e98bb573db16d21ecd76a77b185c52f7253","path":"../../../../../../../../../../../../.pub-cache/hosted/pub.dev/google_mobile_ads-6.0.0/ios/Classes/NativeTemplates/GoogleAdsMobileIosNativeTemplates/GADTSmallTemplateView.m","sourceTree":"","type":"file"},{"fileType":"sourcecode.c.h","guid":"bfdfe7dc352907fc980b868725387e98b98042b15a1b65a5f73b8fcdf63acd94","path":"../../../../../../../../../../../../.pub-cache/hosted/pub.dev/google_mobile_ads-6.0.0/ios/Classes/NativeTemplates/GoogleAdsMobileIosNativeTemplates/GADTTemplateView.h","sourceTree":"","type":"file"},{"fileType":"sourcecode.c.objc","guid":"bfdfe7dc352907fc980b868725387e98e50cbcfd7237202c92423678a691838b","path":"../../../../../../../../../../../../.pub-cache/hosted/pub.dev/google_mobile_ads-6.0.0/ios/Classes/NativeTemplates/GoogleAdsMobileIosNativeTemplates/GADTTemplateView.m","sourceTree":"","type":"file"}],"guid":"bfdfe7dc352907fc980b868725387e98e22d2696fa4128be851081cad482c8ca","name":"GoogleAdsMobileIosNativeTemplates","path":"GoogleAdsMobileIosNativeTemplates","sourceTree":"","type":"group"}],"guid":"bfdfe7dc352907fc980b868725387e9878f5abbe620b2e8f6a4390b145252a4d","name":"NativeTemplates","path":"NativeTemplates","sourceTree":"","type":"group"},{"children":[{"fileType":"sourcecode.c.h","guid":"bfdfe7dc352907fc980b868725387e98ef6f527da899ce3d0d655df4fdba772c","path":"../../../../../../../../../../../.pub-cache/hosted/pub.dev/google_mobile_ads-6.0.0/ios/Classes/UserMessagingPlatform/FLTUserMessagingPlatformManager.h","sourceTree":"","type":"file"},{"fileType":"sourcecode.c.objc","guid":"bfdfe7dc352907fc980b868725387e98048f3e8812e4b1dbde8a2d474f511920","path":"../../../../../../../../../../../.pub-cache/hosted/pub.dev/google_mobile_ads-6.0.0/ios/Classes/UserMessagingPlatform/FLTUserMessagingPlatformManager.m","sourceTree":"","type":"file"},{"fileType":"sourcecode.c.h","guid":"bfdfe7dc352907fc980b868725387e988b4c2f093c31a9f200c8f45161df3c2a","path":"../../../../../../../../../../../.pub-cache/hosted/pub.dev/google_mobile_ads-6.0.0/ios/Classes/UserMessagingPlatform/FLTUserMessagingPlatformReaderWriter.h","sourceTree":"","type":"file"},{"fileType":"sourcecode.c.objc","guid":"bfdfe7dc352907fc980b868725387e98e0475a3f5954ad23ef9e699046810e3b","path":"../../../../../../../../../../../.pub-cache/hosted/pub.dev/google_mobile_ads-6.0.0/ios/Classes/UserMessagingPlatform/FLTUserMessagingPlatformReaderWriter.m","sourceTree":"","type":"file"}],"guid":"bfdfe7dc352907fc980b868725387e98dad257b2dc557b5727b68304c8db7c68","name":"UserMessagingPlatform","path":"UserMessagingPlatform","sourceTree":"","type":"group"}],"guid":"bfdfe7dc352907fc980b868725387e98652188a5dadc38381ce172c0a890a2d9","name":"Classes","path":"Classes","sourceTree":"","type":"group"}],"guid":"bfdfe7dc352907fc980b868725387e98316dd38887a1f93cdd4aed18b9206ca3","name":"ios","path":"ios","sourceTree":"","type":"group"}],"guid":"bfdfe7dc352907fc980b868725387e989f5def3f99247a4e5f3306e4cd362673","name":"google_mobile_ads","path":"google_mobile_ads","sourceTree":"","type":"group"}],"guid":"bfdfe7dc352907fc980b868725387e98b5ac357f74183bc9482ddcd74b572bbd","name":"plugins","path":"plugins","sourceTree":"","type":"group"}],"guid":"bfdfe7dc352907fc980b868725387e98c2893b7d24aa0fd3a648431c7b0e9c82","name":".symlinks","path":".symlinks","sourceTree":"","type":"group"}],"guid":"bfdfe7dc352907fc980b868725387e98dd4d05261f2ae641fa61ddd23af5d353","name":"ios","path":"ios","sourceTree":"","type":"group"}],"guid":"bfdfe7dc352907fc980b868725387e981f6ebd6d176bba55713745781b8387aa","name":"mih_ui","path":"mih_ui","sourceTree":"","type":"group"}],"guid":"bfdfe7dc352907fc980b868725387e98b37d2e32904d4a0ea297c1f290b7c606","name":"mih-project","path":"mih-project","sourceTree":"","type":"group"}],"guid":"bfdfe7dc352907fc980b868725387e9887d41874091dbc0baa25eba67d3771a1","name":"mih_main","path":"mih_main","sourceTree":"","type":"group"}],"guid":"bfdfe7dc352907fc980b868725387e98e01d7aea4e1c42e5ae031ae391df8bee","name":"Git","path":"Git","sourceTree":"","type":"group"}],"guid":"bfdfe7dc352907fc980b868725387e980b14ece76648d45a7694fdd53bc1b89e","name":"..","path":"..","sourceTree":"","type":"group"}],"guid":"bfdfe7dc352907fc980b868725387e98b52f528a2d23a47141a16e12ee3bb5f5","name":"..","path":"..","sourceTree":"","type":"group"}],"guid":"bfdfe7dc352907fc980b868725387e983e09922b13fb7922db913c5cecb6dfc9","name":"..","path":"..","sourceTree":"","type":"group"}],"guid":"bfdfe7dc352907fc980b868725387e98dcca5929f51f2ff75f3c6665deaca4b7","name":"..","path":"..","sourceTree":"","type":"group"}],"guid":"bfdfe7dc352907fc980b868725387e9832a0b2d76a5eb8bc4df634032ddb094b","name":"..","path":"..","sourceTree":"","type":"group"}],"guid":"bfdfe7dc352907fc980b868725387e98d586424c2adfb4f169f17da152584525","name":"..","path":"../../../../../../../../../.pub-cache/hosted/pub.dev/google_mobile_ads-6.0.0/ios","sourceTree":"","type":"group"},{"children":[{"fileType":"text.script.ruby","guid":"bfdfe7dc352907fc980b868725387e98df51c537cbbedf201548e3015c045e25","path":"../../../../../../../../../.pub-cache/hosted/pub.dev/google_mobile_ads-6.0.0/ios/google_mobile_ads.podspec","sourceTree":"","type":"file"},{"fileType":"text","guid":"bfdfe7dc352907fc980b868725387e9862400f15c02a5ef1ec8ecfaef3f7ced3","path":"../../../../../../../../../.pub-cache/hosted/pub.dev/google_mobile_ads-6.0.0/LICENSE","sourceTree":"","type":"file"}],"guid":"bfdfe7dc352907fc980b868725387e988615fe3270ee13fa5314e4dbb4ab6e06","name":"Pod","path":"","sourceTree":"","type":"group"},{"children":[{"fileType":"sourcecode.module-map","guid":"bfdfe7dc352907fc980b868725387e98e39985f68bed7c23f6357cd57514a24d","path":"google_mobile_ads.modulemap","sourceTree":"","type":"file"},{"fileType":"sourcecode.c.objc","guid":"bfdfe7dc352907fc980b868725387e987e0d2c8d0bc0abdac28d339bd37fbf90","path":"google_mobile_ads-dummy.m","sourceTree":"","type":"file"},{"fileType":"text.plist.xml","guid":"bfdfe7dc352907fc980b868725387e982abb331ffa780984b732eed18ee28a91","path":"google_mobile_ads-Info.plist","sourceTree":"","type":"file"},{"fileType":"sourcecode.c.h","guid":"bfdfe7dc352907fc980b868725387e98d5e12e1d3c3b1f23c6cd830e343dc6d1","path":"google_mobile_ads-prefix.pch","sourceTree":"","type":"file"},{"fileType":"sourcecode.c.h","guid":"bfdfe7dc352907fc980b868725387e989f6df57e9714d47de1bef126b3e8e39b","path":"google_mobile_ads-umbrella.h","sourceTree":"","type":"file"},{"fileType":"text.xcconfig","guid":"bfdfe7dc352907fc980b868725387e988dc0dcaabffa36a9e85d057769df808d","path":"google_mobile_ads.debug.xcconfig","sourceTree":"","type":"file"},{"fileType":"text.xcconfig","guid":"bfdfe7dc352907fc980b868725387e987e81c25c7cd2ea8e1b445f8bd4d6b142","path":"google_mobile_ads.release.xcconfig","sourceTree":"","type":"file"},{"fileType":"text.plist.xml","guid":"bfdfe7dc352907fc980b868725387e98f38de7551f2125889ef78735a231e53e","path":"ResourceBundle-google_mobile_ads-google_mobile_ads-Info.plist","sourceTree":"","type":"file"}],"guid":"bfdfe7dc352907fc980b868725387e9891034568da8507d682335bda04778476","name":"Support Files","path":"../../../../Pods/Target Support Files/google_mobile_ads","sourceTree":"","type":"group"}],"guid":"bfdfe7dc352907fc980b868725387e98d9941c6f385413bb79945672657edd9a","name":"google_mobile_ads","path":"../.symlinks/plugins/google_mobile_ads/ios","sourceTree":"","type":"group"},{"children":[{"children":[{"children":[{"children":[{"children":[{"children":[{"children":[{"children":[{"children":[{"children":[{"children":[{"children":[{"children":[{"children":[{"children":[{"children":[{"children":[{"children":[{"children":[{"children":[{"children":[{"children":[{"children":[{"fileType":"text.xml","guid":"bfdfe7dc352907fc980b868725387e981c0fc8adcffe31e3d3685bd10445f9cd","path":"../../../../../../../../../../../../../.pub-cache/hosted/pub.dev/image_picker_ios-0.8.13/ios/image_picker_ios/Sources/image_picker_ios/Resources/PrivacyInfo.xcprivacy","sourceTree":"","type":"file"}],"guid":"bfdfe7dc352907fc980b868725387e98da07b66e687bcbf99c81507f3fa9e64e","name":"Resources","path":"Resources","sourceTree":"","type":"group"}],"guid":"bfdfe7dc352907fc980b868725387e982d4f84dfc677164f81435cfa43940016","name":"image_picker_ios","path":"image_picker_ios","sourceTree":"","type":"group"}],"guid":"bfdfe7dc352907fc980b868725387e983e11ed30721e5a2cee7bce29ccffe730","name":"Sources","path":"Sources","sourceTree":"","type":"group"}],"guid":"bfdfe7dc352907fc980b868725387e982ae8c257e1efdca417b1c8f0012899cc","name":"image_picker_ios","path":"image_picker_ios","sourceTree":"","type":"group"}],"guid":"bfdfe7dc352907fc980b868725387e982ae444c9a0418625fe9e141afe81ea26","name":"ios","path":"ios","sourceTree":"","type":"group"}],"guid":"bfdfe7dc352907fc980b868725387e984a3ab10da857c080e1cc9e25d33b2fde","name":"image_picker_ios","path":"image_picker_ios","sourceTree":"","type":"group"}],"guid":"bfdfe7dc352907fc980b868725387e983fd00daa76d564c345b637deda52955b","name":"plugins","path":"plugins","sourceTree":"","type":"group"}],"guid":"bfdfe7dc352907fc980b868725387e98096bcae33ae335715cbe3cb8ce9d0e13","name":".symlinks","path":".symlinks","sourceTree":"","type":"group"}],"guid":"bfdfe7dc352907fc980b868725387e986e563f61e104a3d28b8404f1e8a1f7a3","name":"ios","path":"ios","sourceTree":"","type":"group"}],"guid":"bfdfe7dc352907fc980b868725387e989617cecf02203d772cf081fa0c6f0f58","name":"mih_ui","path":"mih_ui","sourceTree":"","type":"group"}],"guid":"bfdfe7dc352907fc980b868725387e981f43c77ddeb048b032cc259322695d32","name":"mih-project","path":"mih-project","sourceTree":"","type":"group"}],"guid":"bfdfe7dc352907fc980b868725387e9871a2f55396f5166c5ff56b22cb4b755a","name":"mih_main","path":"mih_main","sourceTree":"","type":"group"}],"guid":"bfdfe7dc352907fc980b868725387e98bb74272151f913340680065928af3ce7","name":"Git","path":"Git","sourceTree":"","type":"group"}],"guid":"bfdfe7dc352907fc980b868725387e981f0e16b10198c8a690a982ff263b28dd","name":"..","path":".","sourceTree":"","type":"group"},{"children":[{"children":[{"children":[{"children":[{"children":[{"children":[{"children":[{"children":[{"children":[{"children":[{"children":[{"children":[{"fileType":"sourcecode.c.objc","guid":"bfdfe7dc352907fc980b868725387e98566106fb34bacfb516ebf07d57920aa6","path":"../../../../../../../../../../../../.pub-cache/hosted/pub.dev/image_picker_ios-0.8.13/ios/image_picker_ios/Sources/image_picker_ios/FLTImagePickerImageUtil.m","sourceTree":"","type":"file"},{"fileType":"sourcecode.c.objc","guid":"bfdfe7dc352907fc980b868725387e98f8dc4d6581fb8f5b5c907ac0b21fbb8c","path":"../../../../../../../../../../../../.pub-cache/hosted/pub.dev/image_picker_ios-0.8.13/ios/image_picker_ios/Sources/image_picker_ios/FLTImagePickerMetaDataUtil.m","sourceTree":"","type":"file"},{"fileType":"sourcecode.c.objc","guid":"bfdfe7dc352907fc980b868725387e98247c332c7d249620a850bd09f2121a84","path":"../../../../../../../../../../../../.pub-cache/hosted/pub.dev/image_picker_ios-0.8.13/ios/image_picker_ios/Sources/image_picker_ios/FLTImagePickerPhotoAssetUtil.m","sourceTree":"","type":"file"},{"fileType":"sourcecode.c.objc","guid":"bfdfe7dc352907fc980b868725387e98d989ee30069916d663cfe91d1c5986fe","path":"../../../../../../../../../../../../.pub-cache/hosted/pub.dev/image_picker_ios-0.8.13/ios/image_picker_ios/Sources/image_picker_ios/FLTImagePickerPlugin.m","sourceTree":"","type":"file"},{"fileType":"sourcecode.c.objc","guid":"bfdfe7dc352907fc980b868725387e9851702874b3473204d01c1a11a3c97351","path":"../../../../../../../../../../../../.pub-cache/hosted/pub.dev/image_picker_ios-0.8.13/ios/image_picker_ios/Sources/image_picker_ios/FLTPHPickerSaveImageToPathOperation.m","sourceTree":"","type":"file"},{"fileType":"sourcecode.c.objc","guid":"bfdfe7dc352907fc980b868725387e9822975da8370cfc43e8dbd1e7dc4f64f1","path":"../../../../../../../../../../../../.pub-cache/hosted/pub.dev/image_picker_ios-0.8.13/ios/image_picker_ios/Sources/image_picker_ios/messages.g.m","sourceTree":"","type":"file"},{"children":[{"fileType":"sourcecode.c.h","guid":"bfdfe7dc352907fc980b868725387e987912c452cf5c073488f6736d535565ca","path":"../../../../../../../../../../../../../.pub-cache/hosted/pub.dev/image_picker_ios-0.8.13/ios/image_picker_ios/Sources/image_picker_ios/include/image_picker_ios-umbrella.h","sourceTree":"","type":"file"},{"children":[{"fileType":"sourcecode.c.h","guid":"bfdfe7dc352907fc980b868725387e98455184b1ebf4d6916746f5fbc500d738","path":"../../../../../../../../../../../../../../.pub-cache/hosted/pub.dev/image_picker_ios-0.8.13/ios/image_picker_ios/Sources/image_picker_ios/include/image_picker_ios/FLTImagePickerImageUtil.h","sourceTree":"","type":"file"},{"fileType":"sourcecode.c.h","guid":"bfdfe7dc352907fc980b868725387e98c324ea36454852a92ca5c1e7c63badd3","path":"../../../../../../../../../../../../../../.pub-cache/hosted/pub.dev/image_picker_ios-0.8.13/ios/image_picker_ios/Sources/image_picker_ios/include/image_picker_ios/FLTImagePickerMetaDataUtil.h","sourceTree":"","type":"file"},{"fileType":"sourcecode.c.h","guid":"bfdfe7dc352907fc980b868725387e9874d33145b4eb026db783767a8627f331","path":"../../../../../../../../../../../../../../.pub-cache/hosted/pub.dev/image_picker_ios-0.8.13/ios/image_picker_ios/Sources/image_picker_ios/include/image_picker_ios/FLTImagePickerPhotoAssetUtil.h","sourceTree":"","type":"file"},{"fileType":"sourcecode.c.h","guid":"bfdfe7dc352907fc980b868725387e989aa410188bb1b807675bd70c43b501ec","path":"../../../../../../../../../../../../../../.pub-cache/hosted/pub.dev/image_picker_ios-0.8.13/ios/image_picker_ios/Sources/image_picker_ios/include/image_picker_ios/FLTImagePickerPlugin.h","sourceTree":"","type":"file"},{"fileType":"sourcecode.c.h","guid":"bfdfe7dc352907fc980b868725387e98bb38f172fc4f9f4727a3dedcca07fc48","path":"../../../../../../../../../../../../../../.pub-cache/hosted/pub.dev/image_picker_ios-0.8.13/ios/image_picker_ios/Sources/image_picker_ios/include/image_picker_ios/FLTImagePickerPlugin_Test.h","sourceTree":"","type":"file"},{"fileType":"sourcecode.c.h","guid":"bfdfe7dc352907fc980b868725387e98ee2e909a182ee943c5a04d5112d38a65","path":"../../../../../../../../../../../../../../.pub-cache/hosted/pub.dev/image_picker_ios-0.8.13/ios/image_picker_ios/Sources/image_picker_ios/include/image_picker_ios/FLTPHPickerSaveImageToPathOperation.h","sourceTree":"","type":"file"},{"fileType":"sourcecode.c.h","guid":"bfdfe7dc352907fc980b868725387e9866acc8882d2e86af3542c91447a63240","path":"../../../../../../../../../../../../../../.pub-cache/hosted/pub.dev/image_picker_ios-0.8.13/ios/image_picker_ios/Sources/image_picker_ios/include/image_picker_ios/messages.g.h","sourceTree":"","type":"file"}],"guid":"bfdfe7dc352907fc980b868725387e984bff86a4ae208acca7e8f3edde3349a8","name":"image_picker_ios","path":"image_picker_ios","sourceTree":"","type":"group"}],"guid":"bfdfe7dc352907fc980b868725387e98d92d06a2a7dfd824112b881a81eb823e","name":"include","path":"include","sourceTree":"","type":"group"}],"guid":"bfdfe7dc352907fc980b868725387e984055f0fd326256f2a5690ea71673950e","name":"image_picker_ios","path":"image_picker_ios","sourceTree":"","type":"group"}],"guid":"bfdfe7dc352907fc980b868725387e981fde58f25a799138a5f1aa130753e79a","name":"Sources","path":"Sources","sourceTree":"","type":"group"}],"guid":"bfdfe7dc352907fc980b868725387e982ab17ac8f24bde6143c8e649d4fba7eb","name":"image_picker_ios","path":"image_picker_ios","sourceTree":"","type":"group"}],"guid":"bfdfe7dc352907fc980b868725387e98e7c37ffdfa773622116c690b4cb90ddb","name":"ios","path":"ios","sourceTree":"","type":"group"}],"guid":"bfdfe7dc352907fc980b868725387e983fbadda5b97589ce7268d233dafdb4e4","name":"image_picker_ios","path":"image_picker_ios","sourceTree":"","type":"group"}],"guid":"bfdfe7dc352907fc980b868725387e987020ad53317b6ccf0b145ed56f4d3cc2","name":"plugins","path":"plugins","sourceTree":"","type":"group"}],"guid":"bfdfe7dc352907fc980b868725387e989226fd8b91f9ec19c7f8883460b0781d","name":".symlinks","path":".symlinks","sourceTree":"","type":"group"}],"guid":"bfdfe7dc352907fc980b868725387e98307c7c089d35d30d4487bc7cac15a713","name":"ios","path":"ios","sourceTree":"","type":"group"}],"guid":"bfdfe7dc352907fc980b868725387e981bc570ede355a302a3befc3cb8689d8f","name":"mih_ui","path":"mih_ui","sourceTree":"","type":"group"}],"guid":"bfdfe7dc352907fc980b868725387e98cea525b9106a703dc0ad2bff81a1dfbc","name":"mih-project","path":"mih-project","sourceTree":"","type":"group"}],"guid":"bfdfe7dc352907fc980b868725387e98f0cee4536b4fb3adb61d85704a1f7f37","name":"mih_main","path":"mih_main","sourceTree":"","type":"group"}],"guid":"bfdfe7dc352907fc980b868725387e9822f241e08519d18a55baf464a3f21051","name":"Git","path":"Git","sourceTree":"","type":"group"}],"guid":"bfdfe7dc352907fc980b868725387e98d84b2c5672fb971b765f6064f815a455","name":"..","path":"..","sourceTree":"","type":"group"}],"guid":"bfdfe7dc352907fc980b868725387e98e31e3e08e801da744827fba265a26f14","name":"..","path":"..","sourceTree":"","type":"group"}],"guid":"bfdfe7dc352907fc980b868725387e98dfdd704e537a3b57bf99d1e132a355c0","name":"..","path":"..","sourceTree":"","type":"group"}],"guid":"bfdfe7dc352907fc980b868725387e983e3a7ae225290a3dde92676b7accd9f9","name":"..","path":"..","sourceTree":"","type":"group"}],"guid":"bfdfe7dc352907fc980b868725387e98e039bdc8098998efc62c8e03514ae442","name":"..","path":"..","sourceTree":"","type":"group"}],"guid":"bfdfe7dc352907fc980b868725387e98a64c00a081e4cb1a1757f594c24dfe21","name":"..","path":"..","sourceTree":"","type":"group"}],"guid":"bfdfe7dc352907fc980b868725387e983903c77482219b08cba6bc6dc17fe368","name":"..","path":"..","sourceTree":"","type":"group"}],"guid":"bfdfe7dc352907fc980b868725387e98d643500561c05175a0ac846b0b9e173e","name":"..","path":"../../../../../../../../../.pub-cache/hosted/pub.dev/image_picker_ios-0.8.13/ios/image_picker_ios/Sources","sourceTree":"","type":"group"},{"children":[{"fileType":"text.script.ruby","guid":"bfdfe7dc352907fc980b868725387e9800c91b577b618860a700212250b82834","path":"../../../../../../../../../.pub-cache/hosted/pub.dev/image_picker_ios-0.8.13/ios/image_picker_ios.podspec","sourceTree":"","type":"file"},{"fileType":"sourcecode.module-map","guid":"bfdfe7dc352907fc980b868725387e98722af0b7732a4475f77425bc1a36494d","path":"../../../../../../../../../.pub-cache/hosted/pub.dev/image_picker_ios-0.8.13/ios/image_picker_ios/Sources/image_picker_ios/include/ImagePickerPlugin.modulemap","sourceTree":"","type":"file"},{"fileType":"text","guid":"bfdfe7dc352907fc980b868725387e986feda6f198332eb63fb859e5c1c63de4","path":"../../../../../../../../../.pub-cache/hosted/pub.dev/image_picker_ios-0.8.13/LICENSE","sourceTree":"","type":"file"}],"guid":"bfdfe7dc352907fc980b868725387e984b54b854d4e2f20fe857df8c0d5359e9","name":"Pod","path":"","sourceTree":"","type":"group"},{"children":[{"fileType":"sourcecode.module-map","guid":"bfdfe7dc352907fc980b868725387e9863b7488f95b6a6719ccb5d551e115df2","path":"image_picker_ios.modulemap","sourceTree":"","type":"file"},{"fileType":"sourcecode.c.objc","guid":"bfdfe7dc352907fc980b868725387e981b14112e34d16a8429f88ce19e8279b2","path":"image_picker_ios-dummy.m","sourceTree":"","type":"file"},{"fileType":"text.plist.xml","guid":"bfdfe7dc352907fc980b868725387e98ee7633b1ae300ba0c6b6fd48ae71897f","path":"image_picker_ios-Info.plist","sourceTree":"","type":"file"},{"fileType":"sourcecode.c.h","guid":"bfdfe7dc352907fc980b868725387e9866bdc7888bc2d2fad11e557d980f6a89","path":"image_picker_ios-prefix.pch","sourceTree":"","type":"file"},{"fileType":"text.xcconfig","guid":"bfdfe7dc352907fc980b868725387e98be516318204b40d33cd2aae70dc8508d","path":"image_picker_ios.debug.xcconfig","sourceTree":"","type":"file"},{"fileType":"text.xcconfig","guid":"bfdfe7dc352907fc980b868725387e988b179e3ba3eb0643314ef47fd544fc52","path":"image_picker_ios.release.xcconfig","sourceTree":"","type":"file"},{"fileType":"text.plist.xml","guid":"bfdfe7dc352907fc980b868725387e9891c072d768664a665bd917d9fb86b64b","path":"ResourceBundle-image_picker_ios_privacy-image_picker_ios-Info.plist","sourceTree":"","type":"file"}],"guid":"bfdfe7dc352907fc980b868725387e986005838bae7db4ccd23bb111860ed544","name":"Support Files","path":"../../../../Pods/Target Support Files/image_picker_ios","sourceTree":"","type":"group"}],"guid":"bfdfe7dc352907fc980b868725387e983e707e67ff9de078598cf378ca36c302","name":"image_picker_ios","path":"../.symlinks/plugins/image_picker_ios/ios","sourceTree":"","type":"group"},{"children":[{"children":[{"children":[{"children":[{"children":[{"children":[{"children":[{"children":[{"children":[{"children":[{"children":[{"children":[{"children":[{"children":[{"children":[{"children":[{"children":[{"children":[{"children":[{"children":[{"children":[{"children":[{"children":[{"fileType":"text.xml","guid":"bfdfe7dc352907fc980b868725387e988634a8b747b6724232b5af5f382a225c","path":"../../../../../../../../../../../../../.pub-cache/hosted/pub.dev/local_auth_darwin-1.4.3/darwin/local_auth_darwin/Sources/local_auth_darwin/Resources/PrivacyInfo.xcprivacy","sourceTree":"","type":"file"}],"guid":"bfdfe7dc352907fc980b868725387e986a59cf187a3c389807c4fd95e2dfffd9","name":"Resources","path":"Resources","sourceTree":"","type":"group"}],"guid":"bfdfe7dc352907fc980b868725387e987117cc34deea68ff28e2dda88711d4f4","name":"local_auth_darwin","path":"local_auth_darwin","sourceTree":"","type":"group"}],"guid":"bfdfe7dc352907fc980b868725387e988b85f2b2839d7d2859e9dc8a9da51090","name":"Sources","path":"Sources","sourceTree":"","type":"group"}],"guid":"bfdfe7dc352907fc980b868725387e98c12f07efaf9181201809923dcfd2387a","name":"local_auth_darwin","path":"local_auth_darwin","sourceTree":"","type":"group"}],"guid":"bfdfe7dc352907fc980b868725387e989b1517a0932ce9821210d415a0fe71c8","name":"darwin","path":"darwin","sourceTree":"","type":"group"}],"guid":"bfdfe7dc352907fc980b868725387e98aabae4d6b4484cb02e890b2ee4dd3796","name":"local_auth_darwin","path":"local_auth_darwin","sourceTree":"","type":"group"}],"guid":"bfdfe7dc352907fc980b868725387e98bdb2a8d13a6a5e260c48f1c8ea0fc5d4","name":"plugins","path":"plugins","sourceTree":"","type":"group"}],"guid":"bfdfe7dc352907fc980b868725387e9840d7bb21ee580dca1b4349e00408e602","name":".symlinks","path":".symlinks","sourceTree":"","type":"group"}],"guid":"bfdfe7dc352907fc980b868725387e98d43d768a039f5c5c1c302bb39594b5dd","name":"ios","path":"ios","sourceTree":"","type":"group"}],"guid":"bfdfe7dc352907fc980b868725387e98983f0809aae4ffeb577b2755b857d656","name":"mih_ui","path":"mih_ui","sourceTree":"","type":"group"}],"guid":"bfdfe7dc352907fc980b868725387e98420655301fc25a8ad87e1c88daaf5158","name":"mih-project","path":"mih-project","sourceTree":"","type":"group"}],"guid":"bfdfe7dc352907fc980b868725387e9868386d84ba8a5631aadc2e4a93e253ea","name":"mih_main","path":"mih_main","sourceTree":"","type":"group"}],"guid":"bfdfe7dc352907fc980b868725387e980245b4fc742e1c55d360d159e4d043b9","name":"Git","path":"Git","sourceTree":"","type":"group"}],"guid":"bfdfe7dc352907fc980b868725387e98474060547ad5e3dd080fc0e1f3443e66","name":"..","path":".","sourceTree":"","type":"group"},{"children":[{"children":[{"children":[{"children":[{"children":[{"children":[{"children":[{"children":[{"children":[{"children":[{"children":[{"children":[{"fileType":"sourcecode.c.objc","guid":"bfdfe7dc352907fc980b868725387e98ae1aa1da940b2cf3059d58fa5aeb575e","path":"../../../../../../../../../../../../.pub-cache/hosted/pub.dev/local_auth_darwin-1.4.3/darwin/local_auth_darwin/Sources/local_auth_darwin/FLALocalAuthPlugin.m","sourceTree":"","type":"file"},{"fileType":"sourcecode.c.objc","guid":"bfdfe7dc352907fc980b868725387e98cd73448a566c5be29cdf42df00abfae5","path":"../../../../../../../../../../../../.pub-cache/hosted/pub.dev/local_auth_darwin-1.4.3/darwin/local_auth_darwin/Sources/local_auth_darwin/messages.g.m","sourceTree":"","type":"file"},{"children":[{"children":[{"fileType":"sourcecode.c.h","guid":"bfdfe7dc352907fc980b868725387e98ad898343d17a563826d8df8267c2a015","path":"../../../../../../../../../../../../../../.pub-cache/hosted/pub.dev/local_auth_darwin-1.4.3/darwin/local_auth_darwin/Sources/local_auth_darwin/include/local_auth_darwin/FLALocalAuthPlugin.h","sourceTree":"","type":"file"},{"fileType":"sourcecode.c.h","guid":"bfdfe7dc352907fc980b868725387e9851693e394b4c9a3739669bc6f2853f65","path":"../../../../../../../../../../../../../../.pub-cache/hosted/pub.dev/local_auth_darwin-1.4.3/darwin/local_auth_darwin/Sources/local_auth_darwin/include/local_auth_darwin/FLALocalAuthPlugin_Test.h","sourceTree":"","type":"file"},{"fileType":"sourcecode.c.h","guid":"bfdfe7dc352907fc980b868725387e98448a4b5517b9d1847c69072fe92810da","path":"../../../../../../../../../../../../../../.pub-cache/hosted/pub.dev/local_auth_darwin-1.4.3/darwin/local_auth_darwin/Sources/local_auth_darwin/include/local_auth_darwin/messages.g.h","sourceTree":"","type":"file"}],"guid":"bfdfe7dc352907fc980b868725387e98a161d315eb479673f14f048ecec71ace","name":"local_auth_darwin","path":"local_auth_darwin","sourceTree":"","type":"group"}],"guid":"bfdfe7dc352907fc980b868725387e98e0993c0c0c14992f88f3a12bb073566c","name":"include","path":"include","sourceTree":"","type":"group"}],"guid":"bfdfe7dc352907fc980b868725387e981e08ed4b60b83e7e8e7b2fda795cd7d4","name":"local_auth_darwin","path":"local_auth_darwin","sourceTree":"","type":"group"}],"guid":"bfdfe7dc352907fc980b868725387e98a664ca07bd86e12815faa8f3d3f0d536","name":"Sources","path":"Sources","sourceTree":"","type":"group"}],"guid":"bfdfe7dc352907fc980b868725387e98d954f47e5d84ec48455aa08747c33827","name":"local_auth_darwin","path":"local_auth_darwin","sourceTree":"","type":"group"}],"guid":"bfdfe7dc352907fc980b868725387e987f541783438bad867179de50aa657f05","name":"darwin","path":"darwin","sourceTree":"","type":"group"}],"guid":"bfdfe7dc352907fc980b868725387e98b2455ccb25cc63d20f4dd630f777c090","name":"local_auth_darwin","path":"local_auth_darwin","sourceTree":"","type":"group"}],"guid":"bfdfe7dc352907fc980b868725387e98f955c1d915f5ff1e58eb09e0c8607b1a","name":"plugins","path":"plugins","sourceTree":"","type":"group"}],"guid":"bfdfe7dc352907fc980b868725387e98a104ccd45ce06bf5900d08c1c796370a","name":".symlinks","path":".symlinks","sourceTree":"","type":"group"}],"guid":"bfdfe7dc352907fc980b868725387e986cde0c65c9d1dc7e54c9aefa046e52e0","name":"ios","path":"ios","sourceTree":"","type":"group"}],"guid":"bfdfe7dc352907fc980b868725387e98859c5dd5bbc9fb3c911d4835f2176ddb","name":"mih_ui","path":"mih_ui","sourceTree":"","type":"group"}],"guid":"bfdfe7dc352907fc980b868725387e985789b4ec5c32a92659c4f54a96654ff8","name":"mih-project","path":"mih-project","sourceTree":"","type":"group"}],"guid":"bfdfe7dc352907fc980b868725387e9882fd9a1cb48c89cf7db806d60b639688","name":"mih_main","path":"mih_main","sourceTree":"","type":"group"}],"guid":"bfdfe7dc352907fc980b868725387e987da109f3fcd566c68d0a71053e79e9e2","name":"Git","path":"Git","sourceTree":"","type":"group"}],"guid":"bfdfe7dc352907fc980b868725387e989ece9917c7a78b655d96d54d73b52b5f","name":"..","path":"..","sourceTree":"","type":"group"}],"guid":"bfdfe7dc352907fc980b868725387e98ea18ee006ddd6cc0f30cc3cefe94bca1","name":"..","path":"..","sourceTree":"","type":"group"}],"guid":"bfdfe7dc352907fc980b868725387e98362c091e5bb0c5c1f7d1108694d1981f","name":"..","path":"..","sourceTree":"","type":"group"}],"guid":"bfdfe7dc352907fc980b868725387e989ed423038afdece5f9060eed156c53c8","name":"..","path":"..","sourceTree":"","type":"group"}],"guid":"bfdfe7dc352907fc980b868725387e98938a3b76dab16da59e842d15467d1f1d","name":"..","path":"..","sourceTree":"","type":"group"}],"guid":"bfdfe7dc352907fc980b868725387e98b5a571a7306c7692a4f06783193986a8","name":"..","path":"..","sourceTree":"","type":"group"}],"guid":"bfdfe7dc352907fc980b868725387e9895a9a2debccd059637563251bfd9a4b5","name":"..","path":"..","sourceTree":"","type":"group"}],"guid":"bfdfe7dc352907fc980b868725387e9849f9ad3572f69a73197f55ddc28ea453","name":"..","path":"../../../../../../../../../.pub-cache/hosted/pub.dev/local_auth_darwin-1.4.3/darwin/local_auth_darwin/Sources","sourceTree":"","type":"group"},{"children":[{"fileType":"text","guid":"bfdfe7dc352907fc980b868725387e98644dcfa7bd2b0106a6c8d2d8476a9817","path":"../../../../../../../../../.pub-cache/hosted/pub.dev/local_auth_darwin-1.4.3/LICENSE","sourceTree":"","type":"file"},{"fileType":"text.script.ruby","guid":"bfdfe7dc352907fc980b868725387e98209a4fdd5d9ae4cbea101fd4b9ac1b61","path":"../../../../../../../../../.pub-cache/hosted/pub.dev/local_auth_darwin-1.4.3/darwin/local_auth_darwin.podspec","sourceTree":"","type":"file"}],"guid":"bfdfe7dc352907fc980b868725387e988518b601351060613d86cf587996dc0a","name":"Pod","path":"","sourceTree":"","type":"group"},{"children":[{"fileType":"sourcecode.module-map","guid":"bfdfe7dc352907fc980b868725387e985ca8dbb907229aaa2ebbeceda59847e5","path":"local_auth_darwin.modulemap","sourceTree":"","type":"file"},{"fileType":"sourcecode.c.objc","guid":"bfdfe7dc352907fc980b868725387e9824eab6a2af2aa1812cce719f02ee9fd4","path":"local_auth_darwin-dummy.m","sourceTree":"","type":"file"},{"fileType":"text.plist.xml","guid":"bfdfe7dc352907fc980b868725387e989cba074aefbb8832b5cb7321632706bb","path":"local_auth_darwin-Info.plist","sourceTree":"","type":"file"},{"fileType":"sourcecode.c.h","guid":"bfdfe7dc352907fc980b868725387e980618c0f1ad79cdd311f394dff3967355","path":"local_auth_darwin-prefix.pch","sourceTree":"","type":"file"},{"fileType":"sourcecode.c.h","guid":"bfdfe7dc352907fc980b868725387e9842b9afd398f7b12fdbd878a1e1fdb5cb","path":"local_auth_darwin-umbrella.h","sourceTree":"","type":"file"},{"fileType":"text.xcconfig","guid":"bfdfe7dc352907fc980b868725387e9826aabbf6d6b2201c6400dd7fc8a0967f","path":"local_auth_darwin.debug.xcconfig","sourceTree":"","type":"file"},{"fileType":"text.xcconfig","guid":"bfdfe7dc352907fc980b868725387e9835c7588ceebde0ed281cc6f972ef1ccc","path":"local_auth_darwin.release.xcconfig","sourceTree":"","type":"file"},{"fileType":"text.plist.xml","guid":"bfdfe7dc352907fc980b868725387e986bb45d983e17d10ea3b7cdd19dd7e38f","path":"ResourceBundle-local_auth_darwin_privacy-local_auth_darwin-Info.plist","sourceTree":"","type":"file"}],"guid":"bfdfe7dc352907fc980b868725387e986578359082dc6ffe2e1830deffedbce8","name":"Support Files","path":"../../../../Pods/Target Support Files/local_auth_darwin","sourceTree":"","type":"group"}],"guid":"bfdfe7dc352907fc980b868725387e9818f43d70ae5ae68bc8fbc41d640bbea8","name":"local_auth_darwin","path":"../.symlinks/plugins/local_auth_darwin/darwin","sourceTree":"","type":"group"},{"children":[{"children":[{"children":[{"children":[{"children":[{"children":[{"children":[{"children":[{"children":[{"children":[{"children":[{"children":[{"children":[{"children":[{"children":[{"children":[{"children":[{"children":[{"children":[{"children":[{"children":[{"children":[{"children":[{"fileType":"text.xml","guid":"bfdfe7dc352907fc980b868725387e9824acc442c11de2383c5d3273c1b19a5c","path":"../../../../../../../../../../../../../.pub-cache/hosted/pub.dev/mobile_scanner-7.0.1/darwin/mobile_scanner/Sources/mobile_scanner/Resources/PrivacyInfo.xcprivacy","sourceTree":"","type":"file"}],"guid":"bfdfe7dc352907fc980b868725387e988aba2706d98ddd7a6dc31a5499defbf2","name":"Resources","path":"Resources","sourceTree":"","type":"group"}],"guid":"bfdfe7dc352907fc980b868725387e98e9ed8d07101f9db66a96a1c9cef85c30","name":"mobile_scanner","path":"mobile_scanner","sourceTree":"","type":"group"}],"guid":"bfdfe7dc352907fc980b868725387e9805dd8c75e5ea0befbef77f45cbd86e60","name":"Sources","path":"Sources","sourceTree":"","type":"group"}],"guid":"bfdfe7dc352907fc980b868725387e98d871d584c248036aaed46ca4fa429edb","name":"mobile_scanner","path":"mobile_scanner","sourceTree":"","type":"group"}],"guid":"bfdfe7dc352907fc980b868725387e98044c1ac090289fed3b759322d50cedb7","name":"darwin","path":"darwin","sourceTree":"","type":"group"}],"guid":"bfdfe7dc352907fc980b868725387e98b6a779c28a3f4efedd949b4f1e4c6191","name":"mobile_scanner","path":"mobile_scanner","sourceTree":"","type":"group"}],"guid":"bfdfe7dc352907fc980b868725387e985f3d8b477830437ce4ada19e1b5722c8","name":"plugins","path":"plugins","sourceTree":"","type":"group"}],"guid":"bfdfe7dc352907fc980b868725387e982c7261caca783852ebd35ec0f0422291","name":".symlinks","path":".symlinks","sourceTree":"","type":"group"}],"guid":"bfdfe7dc352907fc980b868725387e9841017bf02c854f15b2d686e0ae208bc1","name":"ios","path":"ios","sourceTree":"","type":"group"}],"guid":"bfdfe7dc352907fc980b868725387e982e01021d8d491102b55805698b184b15","name":"mih_ui","path":"mih_ui","sourceTree":"","type":"group"}],"guid":"bfdfe7dc352907fc980b868725387e982c51bbf17124dc9c1cf3f9ba3717551b","name":"mih-project","path":"mih-project","sourceTree":"","type":"group"}],"guid":"bfdfe7dc352907fc980b868725387e98eaefceff45c680b6e71184a855e019cf","name":"mih_main","path":"mih_main","sourceTree":"","type":"group"}],"guid":"bfdfe7dc352907fc980b868725387e987f87522472d02d87c6ddbef97f318073","name":"Git","path":"Git","sourceTree":"","type":"group"}],"guid":"bfdfe7dc352907fc980b868725387e98861976a212c011927ae4f88525c96a69","name":"..","path":".","sourceTree":"","type":"group"},{"children":[{"children":[{"children":[{"children":[{"children":[{"children":[{"children":[{"children":[{"children":[{"children":[{"children":[{"children":[{"fileType":"sourcecode.swift","guid":"bfdfe7dc352907fc980b868725387e98883be13daebbdfdcf10e362bc3ef4ebb","path":"../../../../../../../../../../../../.pub-cache/hosted/pub.dev/mobile_scanner-7.0.1/darwin/mobile_scanner/Sources/mobile_scanner/DetectionSpeed.swift","sourceTree":"","type":"file"},{"fileType":"sourcecode.swift","guid":"bfdfe7dc352907fc980b868725387e98e4be4892db4744593107b72e6b06cf75","path":"../../../../../../../../../../../../.pub-cache/hosted/pub.dev/mobile_scanner-7.0.1/darwin/mobile_scanner/Sources/mobile_scanner/DeviceOrientationStreamHandler.swift","sourceTree":"","type":"file"},{"fileType":"sourcecode.swift","guid":"bfdfe7dc352907fc980b868725387e982f3d32c7820c33deaf24eed4a2774a69","path":"../../../../../../../../../../../../.pub-cache/hosted/pub.dev/mobile_scanner-7.0.1/darwin/mobile_scanner/Sources/mobile_scanner/MobileScannerError.swift","sourceTree":"","type":"file"},{"fileType":"sourcecode.swift","guid":"bfdfe7dc352907fc980b868725387e98c373041b232771156d382a714478862a","path":"../../../../../../../../../../../../.pub-cache/hosted/pub.dev/mobile_scanner-7.0.1/darwin/mobile_scanner/Sources/mobile_scanner/MobileScannerErrorCodes.swift","sourceTree":"","type":"file"},{"fileType":"sourcecode.swift","guid":"bfdfe7dc352907fc980b868725387e98168d2dc9c91bbc22b520b7c63b90d589","path":"../../../../../../../../../../../../.pub-cache/hosted/pub.dev/mobile_scanner-7.0.1/darwin/mobile_scanner/Sources/mobile_scanner/MobileScannerPlugin.swift","sourceTree":"","type":"file"}],"guid":"bfdfe7dc352907fc980b868725387e987e52e71ae15abca9499d22d731e79093","name":"mobile_scanner","path":"mobile_scanner","sourceTree":"","type":"group"}],"guid":"bfdfe7dc352907fc980b868725387e981034511db0e33593a7e24a8689e03dc5","name":"Sources","path":"Sources","sourceTree":"","type":"group"}],"guid":"bfdfe7dc352907fc980b868725387e98fb8decc8a3ee62d5c8bd8d6ff4e6a8d1","name":"mobile_scanner","path":"mobile_scanner","sourceTree":"","type":"group"}],"guid":"bfdfe7dc352907fc980b868725387e980344bf8982bcf4491bc008234ff0fcc8","name":"darwin","path":"darwin","sourceTree":"","type":"group"}],"guid":"bfdfe7dc352907fc980b868725387e98a65e0fad22390424b48a01758cef44da","name":"mobile_scanner","path":"mobile_scanner","sourceTree":"","type":"group"}],"guid":"bfdfe7dc352907fc980b868725387e98805362ab01323890c2f101180aac3146","name":"plugins","path":"plugins","sourceTree":"","type":"group"}],"guid":"bfdfe7dc352907fc980b868725387e98dcaf8c0f1c406b771b601bd03bd05ffc","name":".symlinks","path":".symlinks","sourceTree":"","type":"group"}],"guid":"bfdfe7dc352907fc980b868725387e98febfbba35bcd28b5c786aa01f98775fd","name":"ios","path":"ios","sourceTree":"","type":"group"}],"guid":"bfdfe7dc352907fc980b868725387e98ce592632bfd50415262d6073599edf4c","name":"mih_ui","path":"mih_ui","sourceTree":"","type":"group"}],"guid":"bfdfe7dc352907fc980b868725387e98c4e401ec77efc9baaf7de1c0a08b6afb","name":"mih-project","path":"mih-project","sourceTree":"","type":"group"}],"guid":"bfdfe7dc352907fc980b868725387e98503199427b7f6244bb4275ac5f5c326b","name":"mih_main","path":"mih_main","sourceTree":"","type":"group"}],"guid":"bfdfe7dc352907fc980b868725387e987dd94584331a980095c2e60245c1ee96","name":"Git","path":"Git","sourceTree":"","type":"group"}],"guid":"bfdfe7dc352907fc980b868725387e98324797d58b9def5767a0745d8c5609d9","name":"..","path":"..","sourceTree":"","type":"group"}],"guid":"bfdfe7dc352907fc980b868725387e98eab1b30239eeeb221fca4cfda1345842","name":"..","path":"..","sourceTree":"","type":"group"}],"guid":"bfdfe7dc352907fc980b868725387e98e01b6bb8d3e8a8f49e5d0d75a4a82171","name":"..","path":"..","sourceTree":"","type":"group"}],"guid":"bfdfe7dc352907fc980b868725387e98f3309c2dbd9ef1c343168ea2097bc4f0","name":"..","path":"..","sourceTree":"","type":"group"}],"guid":"bfdfe7dc352907fc980b868725387e98c9da9563e708c27be8c99c4d410e8efc","name":"..","path":"..","sourceTree":"","type":"group"}],"guid":"bfdfe7dc352907fc980b868725387e9887a70e30388ce53e62499fbc0fce9069","name":"..","path":"..","sourceTree":"","type":"group"}],"guid":"bfdfe7dc352907fc980b868725387e980c14abc1bde0bd3b2bdc0e29c685e757","name":"..","path":"..","sourceTree":"","type":"group"}],"guid":"bfdfe7dc352907fc980b868725387e98ad5334b6bac4ad344aa880b4601fc04b","name":"..","path":"../../../../../../../../../.pub-cache/hosted/pub.dev/mobile_scanner-7.0.1/darwin/mobile_scanner/Sources","sourceTree":"","type":"group"},{"children":[{"fileType":"text","guid":"bfdfe7dc352907fc980b868725387e98bb78f53d6ab63b17ee387b790371faac","path":"../../../../../../../../../.pub-cache/hosted/pub.dev/mobile_scanner-7.0.1/LICENSE","sourceTree":"","type":"file"},{"fileType":"text.script.ruby","guid":"bfdfe7dc352907fc980b868725387e98ced8939ee4857b8341f6cf6e5bb5d63b","path":"../../../../../../../../../.pub-cache/hosted/pub.dev/mobile_scanner-7.0.1/darwin/mobile_scanner.podspec","sourceTree":"","type":"file"}],"guid":"bfdfe7dc352907fc980b868725387e98cbaa519368773b3e3b95c7685deaa37c","name":"Pod","path":"","sourceTree":"","type":"group"},{"children":[{"fileType":"sourcecode.module-map","guid":"bfdfe7dc352907fc980b868725387e9870e66361762eade18fd3880b17b645a3","path":"mobile_scanner.modulemap","sourceTree":"","type":"file"},{"fileType":"sourcecode.c.objc","guid":"bfdfe7dc352907fc980b868725387e98cbd2a7736d3f622183620d97dabb51d6","path":"mobile_scanner-dummy.m","sourceTree":"","type":"file"},{"fileType":"text.plist.xml","guid":"bfdfe7dc352907fc980b868725387e98752d460c6673671f9a3d8fc5de663580","path":"mobile_scanner-Info.plist","sourceTree":"","type":"file"},{"fileType":"sourcecode.c.h","guid":"bfdfe7dc352907fc980b868725387e985e33baa0fee6473a955354e7f8cc33f6","path":"mobile_scanner-prefix.pch","sourceTree":"","type":"file"},{"fileType":"sourcecode.c.h","guid":"bfdfe7dc352907fc980b868725387e98be2efddfa0659e6c19ce1a5acc94ec6d","path":"mobile_scanner-umbrella.h","sourceTree":"","type":"file"},{"fileType":"text.xcconfig","guid":"bfdfe7dc352907fc980b868725387e981144f00ce89ffa4e0260914a9ffec527","path":"mobile_scanner.debug.xcconfig","sourceTree":"","type":"file"},{"fileType":"text.xcconfig","guid":"bfdfe7dc352907fc980b868725387e98227c1f919eedf604acd47c56a9ef7ec4","path":"mobile_scanner.release.xcconfig","sourceTree":"","type":"file"},{"fileType":"text.plist.xml","guid":"bfdfe7dc352907fc980b868725387e9880348f8db14a00e978804a7a30575ab9","path":"ResourceBundle-mobile_scanner_privacy-mobile_scanner-Info.plist","sourceTree":"","type":"file"}],"guid":"bfdfe7dc352907fc980b868725387e9850c49c9a619d580948e905f1396f2052","name":"Support Files","path":"../../../../Pods/Target Support Files/mobile_scanner","sourceTree":"","type":"group"}],"guid":"bfdfe7dc352907fc980b868725387e986660600985587db3f4fd512ec43f00df","name":"mobile_scanner","path":"../.symlinks/plugins/mobile_scanner/darwin","sourceTree":"","type":"group"},{"children":[{"children":[{"children":[{"children":[{"children":[{"children":[{"children":[{"children":[{"children":[{"children":[{"children":[{"children":[{"children":[{"children":[{"children":[{"children":[{"children":[{"children":[{"children":[{"children":[{"children":[{"fileType":"sourcecode.c.objc","guid":"bfdfe7dc352907fc980b868725387e98fc1d853ed7c38ec64399121ac6e96d53","path":"../../../../../../../../../../../../.pub-cache/hosted/pub.dev/package_info_plus-9.0.0/ios/package_info_plus/Sources/package_info_plus/FPPPackageInfoPlusPlugin.m","sourceTree":"","type":"file"},{"fileType":"text.xml","guid":"bfdfe7dc352907fc980b868725387e98acc94a90b20547c25ffbe2fd16f0028a","path":"../../../../../../../../../../../../.pub-cache/hosted/pub.dev/package_info_plus-9.0.0/ios/package_info_plus/Sources/package_info_plus/PrivacyInfo.xcprivacy","sourceTree":"","type":"file"},{"children":[{"children":[{"fileType":"sourcecode.c.h","guid":"bfdfe7dc352907fc980b868725387e9863bbc9af63b79ccfc69082c52a621490","path":"../../../../../../../../../../../../../../.pub-cache/hosted/pub.dev/package_info_plus-9.0.0/ios/package_info_plus/Sources/package_info_plus/include/package_info_plus/FPPPackageInfoPlusPlugin.h","sourceTree":"","type":"file"}],"guid":"bfdfe7dc352907fc980b868725387e98ec26db8cff8be69e06208096a9126930","name":"package_info_plus","path":"package_info_plus","sourceTree":"","type":"group"}],"guid":"bfdfe7dc352907fc980b868725387e98a1a67ddde90d066ba2022a927b4e98eb","name":"include","path":"include","sourceTree":"","type":"group"}],"guid":"bfdfe7dc352907fc980b868725387e988699e4da4becaef0a1ac36f07d8776bd","name":"package_info_plus","path":"package_info_plus","sourceTree":"","type":"group"}],"guid":"bfdfe7dc352907fc980b868725387e9842eb7b6c3e22c7afc5dfa288fabe15bd","name":"Sources","path":"Sources","sourceTree":"","type":"group"}],"guid":"bfdfe7dc352907fc980b868725387e981816d6915b070b17d0288bc02767d225","name":"package_info_plus","path":"package_info_plus","sourceTree":"","type":"group"}],"guid":"bfdfe7dc352907fc980b868725387e98bad84403344a2a37869eba2ab8207792","name":"ios","path":"ios","sourceTree":"","type":"group"}],"guid":"bfdfe7dc352907fc980b868725387e98681ce0736a8210205eb8f0ed9dc2db2b","name":"package_info_plus","path":"package_info_plus","sourceTree":"","type":"group"}],"guid":"bfdfe7dc352907fc980b868725387e98964df0280cd77c6908661090e0e0b166","name":"plugins","path":"plugins","sourceTree":"","type":"group"}],"guid":"bfdfe7dc352907fc980b868725387e9853581a26e5697f1c1ec9c0629bd83adc","name":".symlinks","path":".symlinks","sourceTree":"","type":"group"}],"guid":"bfdfe7dc352907fc980b868725387e98ec85ce4148ac92bd095e375b17d95e4f","name":"ios","path":"ios","sourceTree":"","type":"group"}],"guid":"bfdfe7dc352907fc980b868725387e9871a06ec8240d9376a36b7220b3c94d40","name":"mih_ui","path":"mih_ui","sourceTree":"","type":"group"}],"guid":"bfdfe7dc352907fc980b868725387e983344d09607e5a6c28315d3f3bd8f7091","name":"mih-project","path":"mih-project","sourceTree":"","type":"group"}],"guid":"bfdfe7dc352907fc980b868725387e987ac3b022cec7952e060c896e6fe17d37","name":"mih_main","path":"mih_main","sourceTree":"","type":"group"}],"guid":"bfdfe7dc352907fc980b868725387e98470eb399928e70cacf78873b8757f16d","name":"Git","path":"Git","sourceTree":"","type":"group"}],"guid":"bfdfe7dc352907fc980b868725387e9873f3362bc730baeb2fd566fde4263650","name":"..","path":"..","sourceTree":"","type":"group"}],"guid":"bfdfe7dc352907fc980b868725387e982b69b96c034fb5c4b33f4f8bef6056c6","name":"..","path":"..","sourceTree":"","type":"group"}],"guid":"bfdfe7dc352907fc980b868725387e98bd70896a280a65efe7aa4b3dfc1532be","name":"..","path":"..","sourceTree":"","type":"group"}],"guid":"bfdfe7dc352907fc980b868725387e98c78aa5e5e2721974953cd630ba85bef0","name":"..","path":"..","sourceTree":"","type":"group"}],"guid":"bfdfe7dc352907fc980b868725387e98d3c6ade55cf67bcc5f4061a618229940","name":"..","path":"..","sourceTree":"","type":"group"}],"guid":"bfdfe7dc352907fc980b868725387e98c1e9dbd83409eb01531ec5f1890c0aef","name":"..","path":"..","sourceTree":"","type":"group"}],"guid":"bfdfe7dc352907fc980b868725387e988b26e1bf28ece0a5abd348ad25e5999f","name":"..","path":"..","sourceTree":"","type":"group"}],"guid":"bfdfe7dc352907fc980b868725387e9818577de128738c0001838f30d3ffe53e","name":"..","path":"../../../../../../../../../.pub-cache/hosted/pub.dev/package_info_plus-9.0.0/ios/package_info_plus/Sources","sourceTree":"","type":"group"},{"children":[{"fileType":"text","guid":"bfdfe7dc352907fc980b868725387e987408988d1ac9cd58bc6fa8fc72dbf5e3","path":"../../../../../../../../../.pub-cache/hosted/pub.dev/package_info_plus-9.0.0/LICENSE","sourceTree":"","type":"file"},{"fileType":"text.script.ruby","guid":"bfdfe7dc352907fc980b868725387e98197f1bc65ac62ab93395d8f362167b7c","path":"../../../../../../../../../.pub-cache/hosted/pub.dev/package_info_plus-9.0.0/ios/package_info_plus.podspec","sourceTree":"","type":"file"}],"guid":"bfdfe7dc352907fc980b868725387e980d9ce43aa4051118d4ba16e97a1ad789","name":"Pod","path":"","sourceTree":"","type":"group"},{"children":[{"fileType":"sourcecode.module-map","guid":"bfdfe7dc352907fc980b868725387e98b89c2ba62b22f68dd279ae606bb8ae54","path":"package_info_plus.modulemap","sourceTree":"","type":"file"},{"fileType":"sourcecode.c.objc","guid":"bfdfe7dc352907fc980b868725387e98c0d03884f20c6bbb2234aee407c81ed1","path":"package_info_plus-dummy.m","sourceTree":"","type":"file"},{"fileType":"text.plist.xml","guid":"bfdfe7dc352907fc980b868725387e98a6d3c99877b2803f710cde83388bb691","path":"package_info_plus-Info.plist","sourceTree":"","type":"file"},{"fileType":"sourcecode.c.h","guid":"bfdfe7dc352907fc980b868725387e98f21428ed2f4991c32f54ad4813e1185c","path":"package_info_plus-prefix.pch","sourceTree":"","type":"file"},{"fileType":"sourcecode.c.h","guid":"bfdfe7dc352907fc980b868725387e9833f3c33eca65f1240c201c729d3fbde7","path":"package_info_plus-umbrella.h","sourceTree":"","type":"file"},{"fileType":"text.xcconfig","guid":"bfdfe7dc352907fc980b868725387e98089a265d15a8f52f9e25ea32540ea5cd","path":"package_info_plus.debug.xcconfig","sourceTree":"","type":"file"},{"fileType":"text.xcconfig","guid":"bfdfe7dc352907fc980b868725387e9811034d0cd45341ec5fddd8ae14b45098","path":"package_info_plus.release.xcconfig","sourceTree":"","type":"file"},{"fileType":"text.plist.xml","guid":"bfdfe7dc352907fc980b868725387e989ec4e8aeff1ecfcc0a71c01da47fc909","path":"ResourceBundle-package_info_plus_privacy-package_info_plus-Info.plist","sourceTree":"","type":"file"}],"guid":"bfdfe7dc352907fc980b868725387e985c2e5b22608ecf3b4083bc02d2510b75","name":"Support Files","path":"../../../../Pods/Target Support Files/package_info_plus","sourceTree":"","type":"group"}],"guid":"bfdfe7dc352907fc980b868725387e987d881465b8818ec65e6dcbeb956ffa8c","name":"package_info_plus","path":"../.symlinks/plugins/package_info_plus/ios","sourceTree":"","type":"group"},{"children":[{"children":[{"children":[{"children":[{"children":[{"children":[{"children":[{"children":[{"children":[{"children":[{"children":[{"children":[{"children":[{"children":[{"children":[{"children":[{"children":[{"children":[{"children":[{"children":[{"children":[{"children":[{"children":[{"fileType":"text.xml","guid":"bfdfe7dc352907fc980b868725387e9874c74ec17bfbd10a54d1903d5290b3df","path":"../../../../../../../../../../../../../.pub-cache/hosted/pub.dev/path_provider_foundation-2.4.1/darwin/path_provider_foundation/Sources/path_provider_foundation/Resources/PrivacyInfo.xcprivacy","sourceTree":"","type":"file"}],"guid":"bfdfe7dc352907fc980b868725387e9838811231718361e03f6a6f5b0e7ddb99","name":"Resources","path":"Resources","sourceTree":"","type":"group"}],"guid":"bfdfe7dc352907fc980b868725387e984642c6d2ebf224ba3de29d6821cbcc10","name":"path_provider_foundation","path":"path_provider_foundation","sourceTree":"","type":"group"}],"guid":"bfdfe7dc352907fc980b868725387e98677fd2a57575d5131eff5d425348c887","name":"Sources","path":"Sources","sourceTree":"","type":"group"}],"guid":"bfdfe7dc352907fc980b868725387e982d5632d83ca8d57f349dada054228591","name":"path_provider_foundation","path":"path_provider_foundation","sourceTree":"","type":"group"}],"guid":"bfdfe7dc352907fc980b868725387e98786becd39f6681899ae2dd404dd1f78c","name":"darwin","path":"darwin","sourceTree":"","type":"group"}],"guid":"bfdfe7dc352907fc980b868725387e9857dfc698f7a79bcd9f319cd4c2d98140","name":"path_provider_foundation","path":"path_provider_foundation","sourceTree":"","type":"group"}],"guid":"bfdfe7dc352907fc980b868725387e98432314e81e7092b11184c1a7d181bc81","name":"plugins","path":"plugins","sourceTree":"","type":"group"}],"guid":"bfdfe7dc352907fc980b868725387e9816fbe7da58336d952d041f94a1bc85b6","name":".symlinks","path":".symlinks","sourceTree":"","type":"group"}],"guid":"bfdfe7dc352907fc980b868725387e98a098541608a7f9e1c5817ac9132b47a7","name":"ios","path":"ios","sourceTree":"","type":"group"}],"guid":"bfdfe7dc352907fc980b868725387e9852b81003c0995afdb0000259d0f4594a","name":"mih_ui","path":"mih_ui","sourceTree":"","type":"group"}],"guid":"bfdfe7dc352907fc980b868725387e989afb5afec06430c97b3b2f61cff07fc7","name":"mih-project","path":"mih-project","sourceTree":"","type":"group"}],"guid":"bfdfe7dc352907fc980b868725387e989b2b67c4bc239098b0503a1df083cecf","name":"mih_main","path":"mih_main","sourceTree":"","type":"group"}],"guid":"bfdfe7dc352907fc980b868725387e9800a7b873701d158826c9cb8ce11131a3","name":"Git","path":"Git","sourceTree":"","type":"group"}],"guid":"bfdfe7dc352907fc980b868725387e988c0f0d00966b5e9aff4694328c464698","name":"..","path":".","sourceTree":"","type":"group"},{"children":[{"children":[{"children":[{"children":[{"children":[{"children":[{"children":[{"children":[{"children":[{"children":[{"children":[{"children":[{"fileType":"sourcecode.swift","guid":"bfdfe7dc352907fc980b868725387e9803bb7f63530cdb500ba84b0a1a44af44","path":"../../../../../../../../../../../../.pub-cache/hosted/pub.dev/path_provider_foundation-2.4.1/darwin/path_provider_foundation/Sources/path_provider_foundation/messages.g.swift","sourceTree":"","type":"file"},{"fileType":"sourcecode.swift","guid":"bfdfe7dc352907fc980b868725387e9840d362b89ea106c24e2dbcd47a7474bd","path":"../../../../../../../../../../../../.pub-cache/hosted/pub.dev/path_provider_foundation-2.4.1/darwin/path_provider_foundation/Sources/path_provider_foundation/PathProviderPlugin.swift","sourceTree":"","type":"file"}],"guid":"bfdfe7dc352907fc980b868725387e98d9bf38d48d544173972c22a616404b57","name":"path_provider_foundation","path":"path_provider_foundation","sourceTree":"","type":"group"}],"guid":"bfdfe7dc352907fc980b868725387e984b8c8ffd0faca63eb7b740929479e246","name":"Sources","path":"Sources","sourceTree":"","type":"group"}],"guid":"bfdfe7dc352907fc980b868725387e98405871963a7cd1eb0117dea12841dd5e","name":"path_provider_foundation","path":"path_provider_foundation","sourceTree":"","type":"group"}],"guid":"bfdfe7dc352907fc980b868725387e98aa680aeb5c3feeea2fd5b86a2f1b5869","name":"darwin","path":"darwin","sourceTree":"","type":"group"}],"guid":"bfdfe7dc352907fc980b868725387e98e856ee72c0490dfb0bd61a8fcfb5d861","name":"path_provider_foundation","path":"path_provider_foundation","sourceTree":"","type":"group"}],"guid":"bfdfe7dc352907fc980b868725387e988e14b8283940a6fd396ece6b42eaec65","name":"plugins","path":"plugins","sourceTree":"","type":"group"}],"guid":"bfdfe7dc352907fc980b868725387e98f7aab821e6f39bdf50bec325bee76914","name":".symlinks","path":".symlinks","sourceTree":"","type":"group"}],"guid":"bfdfe7dc352907fc980b868725387e9814166559beb12033812190a1a8e7c2b3","name":"ios","path":"ios","sourceTree":"","type":"group"}],"guid":"bfdfe7dc352907fc980b868725387e98cd32eff5e58575df2c6e82645aa2d5f6","name":"mih_ui","path":"mih_ui","sourceTree":"","type":"group"}],"guid":"bfdfe7dc352907fc980b868725387e987286b835751e66eb2f992e11073b616b","name":"mih-project","path":"mih-project","sourceTree":"","type":"group"}],"guid":"bfdfe7dc352907fc980b868725387e98dbd02bff4315677521cea12777433d2a","name":"mih_main","path":"mih_main","sourceTree":"","type":"group"}],"guid":"bfdfe7dc352907fc980b868725387e98b692cb638bace96a65b3ca97ebf10032","name":"Git","path":"Git","sourceTree":"","type":"group"}],"guid":"bfdfe7dc352907fc980b868725387e983fe85b685e60662e755230f70f3bfeb8","name":"..","path":"..","sourceTree":"","type":"group"}],"guid":"bfdfe7dc352907fc980b868725387e9884b00bc54c753a42df0619e849eaced0","name":"..","path":"..","sourceTree":"","type":"group"}],"guid":"bfdfe7dc352907fc980b868725387e987e2667ec713d517158a2455f95ad1646","name":"..","path":"..","sourceTree":"","type":"group"}],"guid":"bfdfe7dc352907fc980b868725387e980a4f8d189879c752b0dcd6d8c3394588","name":"..","path":"..","sourceTree":"","type":"group"}],"guid":"bfdfe7dc352907fc980b868725387e98fec6efcb827e519915cba9aa364233ce","name":"..","path":"..","sourceTree":"","type":"group"}],"guid":"bfdfe7dc352907fc980b868725387e9807bf2e9671f046ff64af3dd3d3a0b990","name":"..","path":"..","sourceTree":"","type":"group"}],"guid":"bfdfe7dc352907fc980b868725387e98075f7c62fe07db619950a060ebb46575","name":"..","path":"..","sourceTree":"","type":"group"}],"guid":"bfdfe7dc352907fc980b868725387e98b2e1cadbf8bb9cf184f0fe169903860a","name":"..","path":"../../../../../../../../../.pub-cache/hosted/pub.dev/path_provider_foundation-2.4.1/darwin/path_provider_foundation/Sources","sourceTree":"","type":"group"},{"children":[{"fileType":"text","guid":"bfdfe7dc352907fc980b868725387e98e2e6372384412b0830fc2ca98b25a530","path":"../../../../../../../../../.pub-cache/hosted/pub.dev/path_provider_foundation-2.4.1/LICENSE","sourceTree":"","type":"file"},{"fileType":"text.script.ruby","guid":"bfdfe7dc352907fc980b868725387e98f17f32406d0dccbc459b441bafec6243","path":"../../../../../../../../../.pub-cache/hosted/pub.dev/path_provider_foundation-2.4.1/darwin/path_provider_foundation.podspec","sourceTree":"","type":"file"}],"guid":"bfdfe7dc352907fc980b868725387e98222477848e7b9efbb61cc198ff1b7f21","name":"Pod","path":"","sourceTree":"","type":"group"},{"children":[{"fileType":"sourcecode.module-map","guid":"bfdfe7dc352907fc980b868725387e985cfaea5a640b1a62dc651b7f529211e5","path":"path_provider_foundation.modulemap","sourceTree":"","type":"file"},{"fileType":"sourcecode.c.objc","guid":"bfdfe7dc352907fc980b868725387e9854c6536298ac986565a978d13cd2d6f9","path":"path_provider_foundation-dummy.m","sourceTree":"","type":"file"},{"fileType":"text.plist.xml","guid":"bfdfe7dc352907fc980b868725387e98d6d45e0d7553ba58d1a7877e9b3f96fe","path":"path_provider_foundation-Info.plist","sourceTree":"","type":"file"},{"fileType":"sourcecode.c.h","guid":"bfdfe7dc352907fc980b868725387e98a289b076da08725fe00774cd7ad8b4c4","path":"path_provider_foundation-prefix.pch","sourceTree":"","type":"file"},{"fileType":"sourcecode.c.h","guid":"bfdfe7dc352907fc980b868725387e98b67bc92c615d1dba3ac53bf7b30bdb94","path":"path_provider_foundation-umbrella.h","sourceTree":"","type":"file"},{"fileType":"text.xcconfig","guid":"bfdfe7dc352907fc980b868725387e98237671cfe20903d6f94682d7135ab52a","path":"path_provider_foundation.debug.xcconfig","sourceTree":"","type":"file"},{"fileType":"text.xcconfig","guid":"bfdfe7dc352907fc980b868725387e980e0c5fa0e8218bd665f72f14cbfc898f","path":"path_provider_foundation.release.xcconfig","sourceTree":"","type":"file"},{"fileType":"text.plist.xml","guid":"bfdfe7dc352907fc980b868725387e98373e4c3054ae7574a3dd7a706f79e106","path":"ResourceBundle-path_provider_foundation_privacy-path_provider_foundation-Info.plist","sourceTree":"","type":"file"}],"guid":"bfdfe7dc352907fc980b868725387e98628498300c79d88e3fcb7b7bf656ec9e","name":"Support Files","path":"../../../../Pods/Target Support Files/path_provider_foundation","sourceTree":"","type":"group"}],"guid":"bfdfe7dc352907fc980b868725387e9820447c1054b9b30460031f2917861ec9","name":"path_provider_foundation","path":"../.symlinks/plugins/path_provider_foundation/darwin","sourceTree":"","type":"group"},{"children":[{"children":[{"children":[{"children":[{"children":[{"children":[{"children":[{"children":[{"children":[{"children":[{"children":[{"children":[{"children":[{"children":[{"children":[{"children":[{"children":[{"fileType":"sourcecode.swift","guid":"bfdfe7dc352907fc980b868725387e983df66a6182a9ad3e5e664af1554596bb","path":"../../../../../../../../../../.pub-cache/hosted/pub.dev/printing-5.14.2/ios/Classes/CustomPrintPaper.swift","sourceTree":"","type":"file"},{"fileType":"sourcecode.c.objc","guid":"bfdfe7dc352907fc980b868725387e98f47fd36e52148ce929fdb4b957af7e73","path":"../../../../../../../../../../.pub-cache/hosted/pub.dev/printing-5.14.2/ios/Classes/PrintingPlugin.m","sourceTree":"","type":"file"},{"fileType":"sourcecode.swift","guid":"bfdfe7dc352907fc980b868725387e98176d3062b5d63f50555ac516d1a7b762","path":"../../../../../../../../../../.pub-cache/hosted/pub.dev/printing-5.14.2/ios/Classes/PrintingPlugin.swift","sourceTree":"","type":"file"},{"fileType":"sourcecode.swift","guid":"bfdfe7dc352907fc980b868725387e98151367d82561314a10d2c18601c9b287","path":"../../../../../../../../../../.pub-cache/hosted/pub.dev/printing-5.14.2/ios/Classes/PrintJob.swift","sourceTree":"","type":"file"}],"guid":"bfdfe7dc352907fc980b868725387e98ab0392ba39c134b3ec6f8601d9893489","name":"Classes","path":"Classes","sourceTree":"","type":"group"}],"guid":"bfdfe7dc352907fc980b868725387e98087e5486c2e156481ea05814c260f972","name":"ios","path":"ios","sourceTree":"","type":"group"}],"guid":"bfdfe7dc352907fc980b868725387e9882d75c73cb6db70eb7b4d9d6ea67f1ba","name":"printing","path":"printing","sourceTree":"","type":"group"}],"guid":"bfdfe7dc352907fc980b868725387e981cf5798b87794211255574b3785f8d2c","name":"plugins","path":"plugins","sourceTree":"","type":"group"}],"guid":"bfdfe7dc352907fc980b868725387e98b69aa20c54da6a7ca61f71f9f5154fe1","name":".symlinks","path":".symlinks","sourceTree":"","type":"group"}],"guid":"bfdfe7dc352907fc980b868725387e986ffb7d697cc617ae171b2be9d286f81e","name":"ios","path":"ios","sourceTree":"","type":"group"}],"guid":"bfdfe7dc352907fc980b868725387e98cec35e0e83294cb99d373197a425e43d","name":"mih_ui","path":"mih_ui","sourceTree":"","type":"group"}],"guid":"bfdfe7dc352907fc980b868725387e98a13f52c383f6cbe98f720592bdadbb56","name":"mih-project","path":"mih-project","sourceTree":"","type":"group"}],"guid":"bfdfe7dc352907fc980b868725387e98198b537365c6899d60087aba11560af1","name":"mih_main","path":"mih_main","sourceTree":"","type":"group"}],"guid":"bfdfe7dc352907fc980b868725387e987baad726cba30fef8a460bb3ff176ac8","name":"Git","path":"Git","sourceTree":"","type":"group"}],"guid":"bfdfe7dc352907fc980b868725387e98f6ce5004c3020cecac483e257ccc5bc0","name":"..","path":"..","sourceTree":"","type":"group"}],"guid":"bfdfe7dc352907fc980b868725387e98a5c58f67cc012876091c336dc3da5edb","name":"..","path":"..","sourceTree":"","type":"group"}],"guid":"bfdfe7dc352907fc980b868725387e9825cef2983a4c7eb4445dfeea6dd00791","name":"..","path":"..","sourceTree":"","type":"group"}],"guid":"bfdfe7dc352907fc980b868725387e9857d0c815ce8304db09febb9a7b580835","name":"..","path":"..","sourceTree":"","type":"group"}],"guid":"bfdfe7dc352907fc980b868725387e98e10cf535c11c2cd9ad5f43f9d3dfa130","name":"..","path":"..","sourceTree":"","type":"group"}],"guid":"bfdfe7dc352907fc980b868725387e98e2d292fce55a6e7f60dbeb231266dc0b","name":"..","path":"../../../../../../../../../.pub-cache/hosted/pub.dev/printing-5.14.2/ios","sourceTree":"","type":"group"},{"children":[{"fileType":"text.script.ruby","guid":"bfdfe7dc352907fc980b868725387e98d162ae822bd46ba05b9f0f48df1b68f4","path":"../../../../../../../../../.pub-cache/hosted/pub.dev/printing-5.14.2/ios/printing.podspec","sourceTree":"","type":"file"}],"guid":"bfdfe7dc352907fc980b868725387e98303dc51b6e656d9629205c0eaefb4951","name":"Pod","path":"","sourceTree":"","type":"group"},{"children":[{"fileType":"sourcecode.module-map","guid":"bfdfe7dc352907fc980b868725387e989d8bf593c88fe175d14008f9be275fa3","path":"printing.modulemap","sourceTree":"","type":"file"},{"fileType":"sourcecode.c.objc","guid":"bfdfe7dc352907fc980b868725387e986c7db250b8f3f408d66f6e7a19972379","path":"printing-dummy.m","sourceTree":"","type":"file"},{"fileType":"text.plist.xml","guid":"bfdfe7dc352907fc980b868725387e98d630bb7df80c590d187e195052024cfc","path":"printing-Info.plist","sourceTree":"","type":"file"},{"fileType":"sourcecode.c.h","guid":"bfdfe7dc352907fc980b868725387e98b72932e33a788d6a5520d61abf413bac","path":"printing-prefix.pch","sourceTree":"","type":"file"},{"fileType":"sourcecode.c.h","guid":"bfdfe7dc352907fc980b868725387e98bd71f2ad20b6a88b723ff05b2d7e23ad","path":"printing-umbrella.h","sourceTree":"","type":"file"},{"fileType":"text.xcconfig","guid":"bfdfe7dc352907fc980b868725387e98c744f4c75270e1fd52589ff556e2583a","path":"printing.debug.xcconfig","sourceTree":"","type":"file"},{"fileType":"text.xcconfig","guid":"bfdfe7dc352907fc980b868725387e9848711414c4cdd6db7086eae6ec63ab7b","path":"printing.release.xcconfig","sourceTree":"","type":"file"}],"guid":"bfdfe7dc352907fc980b868725387e98e51f17e1ca8b4a6152a5489b5664a1e8","name":"Support Files","path":"../../../../Pods/Target Support Files/printing","sourceTree":"","type":"group"}],"guid":"bfdfe7dc352907fc980b868725387e9873c0ad2aa32b467fea9afa937b4c7089","name":"printing","path":"../.symlinks/plugins/printing/ios","sourceTree":"","type":"group"},{"children":[{"children":[{"children":[{"children":[{"children":[{"children":[{"children":[{"children":[{"children":[{"children":[{"children":[{"children":[{"children":[{"children":[{"children":[{"children":[{"children":[{"children":[{"children":[{"children":[{"children":[{"children":[{"children":[{"fileType":"text.xml","guid":"bfdfe7dc352907fc980b868725387e9897ece101e217083edce53455b9b44d62","path":"../../../../../../../../../../../../../.pub-cache/hosted/pub.dev/quick_actions_ios-1.2.1/ios/quick_actions_ios/Sources/quick_actions_ios/Resources/PrivacyInfo.xcprivacy","sourceTree":"","type":"file"}],"guid":"bfdfe7dc352907fc980b868725387e98cb5590f03822fc53833c734b124287c7","name":"Resources","path":"Resources","sourceTree":"","type":"group"}],"guid":"bfdfe7dc352907fc980b868725387e98c586bf8ceb44d835c3c3e2f5ae36f722","name":"quick_actions_ios","path":"quick_actions_ios","sourceTree":"","type":"group"}],"guid":"bfdfe7dc352907fc980b868725387e98de0320573ce6b2fab8c8b43255e3bf25","name":"Sources","path":"Sources","sourceTree":"","type":"group"}],"guid":"bfdfe7dc352907fc980b868725387e9804f476290fe72ac5d72b9b771ac0d59b","name":"quick_actions_ios","path":"quick_actions_ios","sourceTree":"","type":"group"}],"guid":"bfdfe7dc352907fc980b868725387e98ceb67ec1fdcb7621eae1c0326030a557","name":"ios","path":"ios","sourceTree":"","type":"group"}],"guid":"bfdfe7dc352907fc980b868725387e98ca0624caccb146211d1cc30d20bcf033","name":"quick_actions_ios","path":"quick_actions_ios","sourceTree":"","type":"group"}],"guid":"bfdfe7dc352907fc980b868725387e98bd86253e8a8990ab69fc34ab8c330cad","name":"plugins","path":"plugins","sourceTree":"","type":"group"}],"guid":"bfdfe7dc352907fc980b868725387e987b2a49136fab89a1e971c745460e15e5","name":".symlinks","path":".symlinks","sourceTree":"","type":"group"}],"guid":"bfdfe7dc352907fc980b868725387e982aac00b04ab468ee9299762af8fb0ca5","name":"ios","path":"ios","sourceTree":"","type":"group"}],"guid":"bfdfe7dc352907fc980b868725387e98fad47c95356407bf4ee2ad99a7549394","name":"mih_ui","path":"mih_ui","sourceTree":"","type":"group"}],"guid":"bfdfe7dc352907fc980b868725387e98ac9b51e6d29980808b011122a8773610","name":"mih-project","path":"mih-project","sourceTree":"","type":"group"}],"guid":"bfdfe7dc352907fc980b868725387e98d76b040de2101ea72db53418a885f6c2","name":"mih_main","path":"mih_main","sourceTree":"","type":"group"}],"guid":"bfdfe7dc352907fc980b868725387e9857713be709b36c3e1348273355d3bb02","name":"Git","path":"Git","sourceTree":"","type":"group"}],"guid":"bfdfe7dc352907fc980b868725387e9820ac54803a9034ce057fb85ec67eaf61","name":"..","path":".","sourceTree":"","type":"group"},{"children":[{"children":[{"children":[{"children":[{"children":[{"children":[{"children":[{"children":[{"children":[{"children":[{"children":[{"children":[{"fileType":"sourcecode.swift","guid":"bfdfe7dc352907fc980b868725387e98e0db4c45eaeb1548f9f07595cdd1ca45","path":"../../../../../../../../../../../../.pub-cache/hosted/pub.dev/quick_actions_ios-1.2.1/ios/quick_actions_ios/Sources/quick_actions_ios/messages.g.swift","sourceTree":"","type":"file"},{"fileType":"sourcecode.swift","guid":"bfdfe7dc352907fc980b868725387e98775d552104d6921b0e48e28110e132e4","path":"../../../../../../../../../../../../.pub-cache/hosted/pub.dev/quick_actions_ios-1.2.1/ios/quick_actions_ios/Sources/quick_actions_ios/QuickActionsPlugin.swift","sourceTree":"","type":"file"},{"fileType":"sourcecode.swift","guid":"bfdfe7dc352907fc980b868725387e98a6e06b4bf97089fc1190fe51ed103c37","path":"../../../../../../../../../../../../.pub-cache/hosted/pub.dev/quick_actions_ios-1.2.1/ios/quick_actions_ios/Sources/quick_actions_ios/ShortcutItemProviding.swift","sourceTree":"","type":"file"}],"guid":"bfdfe7dc352907fc980b868725387e98406147dfb0affea230b8d4b68c704012","name":"quick_actions_ios","path":"quick_actions_ios","sourceTree":"","type":"group"}],"guid":"bfdfe7dc352907fc980b868725387e98ad7ed4966235ad5dc8474dfbb54a5b3f","name":"Sources","path":"Sources","sourceTree":"","type":"group"}],"guid":"bfdfe7dc352907fc980b868725387e98cb105d7b20bdf97d72e09129ff2aae15","name":"quick_actions_ios","path":"quick_actions_ios","sourceTree":"","type":"group"}],"guid":"bfdfe7dc352907fc980b868725387e98f5d3d629332cee98d197a685473ef6f3","name":"ios","path":"ios","sourceTree":"","type":"group"}],"guid":"bfdfe7dc352907fc980b868725387e98fedb4eab167925f8f5f0454da1e6de29","name":"quick_actions_ios","path":"quick_actions_ios","sourceTree":"","type":"group"}],"guid":"bfdfe7dc352907fc980b868725387e98f58981ceda09bb778384630d970b0d94","name":"plugins","path":"plugins","sourceTree":"","type":"group"}],"guid":"bfdfe7dc352907fc980b868725387e98ea5d5bbda5e005716443f89447c6145e","name":".symlinks","path":".symlinks","sourceTree":"","type":"group"}],"guid":"bfdfe7dc352907fc980b868725387e98738fe071c432a1e9dedd58870ef2210e","name":"ios","path":"ios","sourceTree":"","type":"group"}],"guid":"bfdfe7dc352907fc980b868725387e987ad13f6004a3230b786732c0d108733e","name":"mih_ui","path":"mih_ui","sourceTree":"","type":"group"}],"guid":"bfdfe7dc352907fc980b868725387e98b8e825af6478872c567eb724bf0ae5dd","name":"mih-project","path":"mih-project","sourceTree":"","type":"group"}],"guid":"bfdfe7dc352907fc980b868725387e982511764bc99cbad0017358f152bb63a1","name":"mih_main","path":"mih_main","sourceTree":"","type":"group"}],"guid":"bfdfe7dc352907fc980b868725387e983cf3ac36805ad5a1caaeb64ef2ab3211","name":"Git","path":"Git","sourceTree":"","type":"group"}],"guid":"bfdfe7dc352907fc980b868725387e98347f1caadbeb57701a3f277701db1173","name":"..","path":"..","sourceTree":"","type":"group"}],"guid":"bfdfe7dc352907fc980b868725387e98e1deffa7d429deec9db4eae11ee53dfa","name":"..","path":"..","sourceTree":"","type":"group"}],"guid":"bfdfe7dc352907fc980b868725387e98eabe60d52a9e59cb6f5a31e3c98b6e12","name":"..","path":"..","sourceTree":"","type":"group"}],"guid":"bfdfe7dc352907fc980b868725387e98dbd7856a89b8ca57db500cacaab432dc","name":"..","path":"..","sourceTree":"","type":"group"}],"guid":"bfdfe7dc352907fc980b868725387e9870774b2885d4245155f8909378712f3d","name":"..","path":"..","sourceTree":"","type":"group"}],"guid":"bfdfe7dc352907fc980b868725387e98a18d5206c296d845d0371fd278376225","name":"..","path":"..","sourceTree":"","type":"group"}],"guid":"bfdfe7dc352907fc980b868725387e9830f0dc0b053620845dafc314a2efef9b","name":"..","path":"..","sourceTree":"","type":"group"}],"guid":"bfdfe7dc352907fc980b868725387e9825e5ca8176fa252a5fd570fdc41edddb","name":"..","path":"../../../../../../../../../.pub-cache/hosted/pub.dev/quick_actions_ios-1.2.1/ios/quick_actions_ios/Sources","sourceTree":"","type":"group"},{"children":[{"fileType":"text","guid":"bfdfe7dc352907fc980b868725387e981a23fd7e5b6cc9532a52bfbd111d23d1","path":"../../../../../../../../../.pub-cache/hosted/pub.dev/quick_actions_ios-1.2.1/LICENSE","sourceTree":"","type":"file"},{"fileType":"text.script.ruby","guid":"bfdfe7dc352907fc980b868725387e9833bf9fcf313f2973d53fd78116cbb315","path":"../../../../../../../../../.pub-cache/hosted/pub.dev/quick_actions_ios-1.2.1/ios/quick_actions_ios.podspec","sourceTree":"","type":"file"}],"guid":"bfdfe7dc352907fc980b868725387e9803d03268848b7474d601e1b9e470aace","name":"Pod","path":"","sourceTree":"","type":"group"},{"children":[{"fileType":"sourcecode.module-map","guid":"bfdfe7dc352907fc980b868725387e983f087e6d1e8105ea50e5369b77dd3b08","path":"quick_actions_ios.modulemap","sourceTree":"","type":"file"},{"fileType":"sourcecode.c.objc","guid":"bfdfe7dc352907fc980b868725387e98dac7ee7a1bbc4495acb5a734dbbf08a0","path":"quick_actions_ios-dummy.m","sourceTree":"","type":"file"},{"fileType":"text.plist.xml","guid":"bfdfe7dc352907fc980b868725387e985a208a09642b31e8de604d9a38c86ba0","path":"quick_actions_ios-Info.plist","sourceTree":"","type":"file"},{"fileType":"sourcecode.c.h","guid":"bfdfe7dc352907fc980b868725387e98671d96aa09413e195a8533cd8379d33d","path":"quick_actions_ios-prefix.pch","sourceTree":"","type":"file"},{"fileType":"sourcecode.c.h","guid":"bfdfe7dc352907fc980b868725387e98da1a1802428a351085dc1c5dc1b95b0e","path":"quick_actions_ios-umbrella.h","sourceTree":"","type":"file"},{"fileType":"text.xcconfig","guid":"bfdfe7dc352907fc980b868725387e9899a3c545d51db50c0cf261030b824669","path":"quick_actions_ios.debug.xcconfig","sourceTree":"","type":"file"},{"fileType":"text.xcconfig","guid":"bfdfe7dc352907fc980b868725387e98968b3bc9ee9e49b2679f77b1c2b31c1d","path":"quick_actions_ios.release.xcconfig","sourceTree":"","type":"file"},{"fileType":"text.plist.xml","guid":"bfdfe7dc352907fc980b868725387e98aa75aaf2a1cb28f231d27bcb0722d697","path":"ResourceBundle-quick_actions_ios_privacy-quick_actions_ios-Info.plist","sourceTree":"","type":"file"}],"guid":"bfdfe7dc352907fc980b868725387e980b133fb8ee737cd0f2c62147871f7db0","name":"Support Files","path":"../../../../Pods/Target Support Files/quick_actions_ios","sourceTree":"","type":"group"}],"guid":"bfdfe7dc352907fc980b868725387e98bee18466b48e125b26e27b89d0966163","name":"quick_actions_ios","path":"../.symlinks/plugins/quick_actions_ios/ios","sourceTree":"","type":"group"},{"children":[{"children":[{"children":[{"children":[{"children":[{"children":[{"children":[{"children":[{"children":[{"children":[{"children":[{"children":[{"children":[{"children":[{"children":[{"children":[{"children":[{"children":[{"children":[{"children":[{"children":[{"children":[{"children":[{"fileType":"text.xml","guid":"bfdfe7dc352907fc980b868725387e98174d15dc574e8aee233cdb78708e065d","path":"../../../../../../../../../../../../../.pub-cache/hosted/pub.dev/record_ios-1.1.4/ios/record_ios/Sources/record_ios/Resources/PrivacyInfo.xcprivacy","sourceTree":"","type":"file"}],"guid":"bfdfe7dc352907fc980b868725387e981b45d40a383cdedf63df1f3c52747e07","name":"Resources","path":"Resources","sourceTree":"","type":"group"}],"guid":"bfdfe7dc352907fc980b868725387e9895d1e15f4e90ff4d93f2b2392cf5816f","name":"record_ios","path":"record_ios","sourceTree":"","type":"group"}],"guid":"bfdfe7dc352907fc980b868725387e984864a3169b57ad9e28db829a6c0f8cb1","name":"Sources","path":"Sources","sourceTree":"","type":"group"}],"guid":"bfdfe7dc352907fc980b868725387e982b0061c1d71d45db1a09a76c8c651424","name":"record_ios","path":"record_ios","sourceTree":"","type":"group"}],"guid":"bfdfe7dc352907fc980b868725387e98d53bdd44fdf3dd6aa5ce089e9c70f604","name":"ios","path":"ios","sourceTree":"","type":"group"}],"guid":"bfdfe7dc352907fc980b868725387e98c41d459fcb9fa21cfeecdc707f41b610","name":"record_ios","path":"record_ios","sourceTree":"","type":"group"}],"guid":"bfdfe7dc352907fc980b868725387e9812a9dfb700e2028e311f72b17fc895fe","name":"plugins","path":"plugins","sourceTree":"","type":"group"}],"guid":"bfdfe7dc352907fc980b868725387e983b055601b6561b145460fd9e83f51fdf","name":".symlinks","path":".symlinks","sourceTree":"","type":"group"}],"guid":"bfdfe7dc352907fc980b868725387e98d44f75339d1c97dd77d3fcd0d0461ec2","name":"ios","path":"ios","sourceTree":"","type":"group"}],"guid":"bfdfe7dc352907fc980b868725387e982cf8dcda7b3d0c6826390782a818f4dd","name":"mih_ui","path":"mih_ui","sourceTree":"","type":"group"}],"guid":"bfdfe7dc352907fc980b868725387e98dbfe5a0cfdccfaa97756c27c11a1163b","name":"mih-project","path":"mih-project","sourceTree":"","type":"group"}],"guid":"bfdfe7dc352907fc980b868725387e98be05ef96388bfaf7d25af31c78bc46dc","name":"mih_main","path":"mih_main","sourceTree":"","type":"group"}],"guid":"bfdfe7dc352907fc980b868725387e98ab43803dcddfc883a4c5289aee2c263e","name":"Git","path":"Git","sourceTree":"","type":"group"}],"guid":"bfdfe7dc352907fc980b868725387e984c5e9c2213310378a70ddcb21a5dd955","name":"..","path":".","sourceTree":"","type":"group"},{"children":[{"children":[{"children":[{"children":[{"children":[{"children":[{"children":[{"children":[{"children":[{"children":[{"children":[{"children":[{"fileType":"sourcecode.swift","guid":"bfdfe7dc352907fc980b868725387e98d529b9317f808bc4a0526a0decb58f08","path":"../../../../../../../../../../../../.pub-cache/hosted/pub.dev/record_ios-1.1.4/ios/record_ios/Sources/record_ios/InputHelper.swift","sourceTree":"","type":"file"},{"fileType":"sourcecode.swift","guid":"bfdfe7dc352907fc980b868725387e98d73a5e56d5e68038cb1377eaa90fae0d","path":"../../../../../../../../../../../../.pub-cache/hosted/pub.dev/record_ios-1.1.4/ios/record_ios/Sources/record_ios/RecordConfig.swift","sourceTree":"","type":"file"},{"fileType":"sourcecode.swift","guid":"bfdfe7dc352907fc980b868725387e98f53359071b6f1be5f1da4cef27596689","path":"../../../../../../../../../../../../.pub-cache/hosted/pub.dev/record_ios-1.1.4/ios/record_ios/Sources/record_ios/Recorder.swift","sourceTree":"","type":"file"},{"fileType":"sourcecode.swift","guid":"bfdfe7dc352907fc980b868725387e98298a93bc02eef963b4228ac4db4f6bb8","path":"../../../../../../../../../../../../.pub-cache/hosted/pub.dev/record_ios-1.1.4/ios/record_ios/Sources/record_ios/RecordIosPlugin.swift","sourceTree":"","type":"file"},{"children":[{"fileType":"sourcecode.swift","guid":"bfdfe7dc352907fc980b868725387e98b298ec0b59e4cce28ccc0be3e7f0e5e7","path":"../../../../../../../../../../../../../.pub-cache/hosted/pub.dev/record_ios-1.1.4/ios/record_ios/Sources/record_ios/delegate/RecorderDelegateProtocols.swift","sourceTree":"","type":"file"},{"fileType":"sourcecode.swift","guid":"bfdfe7dc352907fc980b868725387e982241e0e04227dc7964af065d6a2bbc3c","path":"../../../../../../../../../../../../../.pub-cache/hosted/pub.dev/record_ios-1.1.4/ios/record_ios/Sources/record_ios/delegate/RecorderFileDelegate.swift","sourceTree":"","type":"file"},{"fileType":"sourcecode.swift","guid":"bfdfe7dc352907fc980b868725387e98a41a7891113627a2fa24db24ce22900a","path":"../../../../../../../../../../../../../.pub-cache/hosted/pub.dev/record_ios-1.1.4/ios/record_ios/Sources/record_ios/delegate/RecorderStreamDelegate.swift","sourceTree":"","type":"file"}],"guid":"bfdfe7dc352907fc980b868725387e98102a207de48aa6b7865bb655255eb97d","name":"delegate","path":"delegate","sourceTree":"","type":"group"},{"children":[{"fileType":"sourcecode.swift","guid":"bfdfe7dc352907fc980b868725387e983a371912ff4d411448f255abead2ed59","path":"../../../../../../../../../../../../../.pub-cache/hosted/pub.dev/record_ios-1.1.4/ios/record_ios/Sources/record_ios/extension/RecorderFormatExtension.swift","sourceTree":"","type":"file"},{"fileType":"sourcecode.swift","guid":"bfdfe7dc352907fc980b868725387e98b47ae3223bc0ccc52b53627d750e2de0","path":"../../../../../../../../../../../../../.pub-cache/hosted/pub.dev/record_ios-1.1.4/ios/record_ios/Sources/record_ios/extension/RecorderSessionExtension.swift","sourceTree":"","type":"file"}],"guid":"bfdfe7dc352907fc980b868725387e9832324292047684aa08caf2ce0ae9bb1f","name":"extension","path":"extension","sourceTree":"","type":"group"}],"guid":"bfdfe7dc352907fc980b868725387e987fcf899c133497aaccaa04d4acf3681b","name":"record_ios","path":"record_ios","sourceTree":"","type":"group"}],"guid":"bfdfe7dc352907fc980b868725387e98557123c7f4bafc3f9d1f9184dc85c36c","name":"Sources","path":"Sources","sourceTree":"","type":"group"}],"guid":"bfdfe7dc352907fc980b868725387e982cd4f595c2c50ffa8f12eb71f4b8bddb","name":"record_ios","path":"record_ios","sourceTree":"","type":"group"}],"guid":"bfdfe7dc352907fc980b868725387e98878c508b646e6248b458c11f23244e69","name":"ios","path":"ios","sourceTree":"","type":"group"}],"guid":"bfdfe7dc352907fc980b868725387e988d938106dc88ee8f285b1e5486f6edf0","name":"record_ios","path":"record_ios","sourceTree":"","type":"group"}],"guid":"bfdfe7dc352907fc980b868725387e981447272ccca9ab7d3f9477f564d18ccf","name":"plugins","path":"plugins","sourceTree":"","type":"group"}],"guid":"bfdfe7dc352907fc980b868725387e9833105a495e73929ac21221ace3f8cefa","name":".symlinks","path":".symlinks","sourceTree":"","type":"group"}],"guid":"bfdfe7dc352907fc980b868725387e983792ec2fe8d3bf6bd7b3820f8e05659b","name":"ios","path":"ios","sourceTree":"","type":"group"}],"guid":"bfdfe7dc352907fc980b868725387e98fe2d04969e4e34e300424e28e3c5749b","name":"mih_ui","path":"mih_ui","sourceTree":"","type":"group"}],"guid":"bfdfe7dc352907fc980b868725387e98ffcbf189e92121eafab95990787d8ee3","name":"mih-project","path":"mih-project","sourceTree":"","type":"group"}],"guid":"bfdfe7dc352907fc980b868725387e98676b00d49ca97bf8dd1dd8b9aa44ea6a","name":"mih_main","path":"mih_main","sourceTree":"","type":"group"}],"guid":"bfdfe7dc352907fc980b868725387e9880282f9e9a0852b43d2d1b8f2bc6da0c","name":"Git","path":"Git","sourceTree":"","type":"group"}],"guid":"bfdfe7dc352907fc980b868725387e9871180fe05d2c8572c124b71c6461cb92","name":"..","path":"..","sourceTree":"","type":"group"}],"guid":"bfdfe7dc352907fc980b868725387e9878189e5be9adb9fc9b73ebbb47d8a97e","name":"..","path":"..","sourceTree":"","type":"group"}],"guid":"bfdfe7dc352907fc980b868725387e98466b7514ab90b5afb3b8278924713411","name":"..","path":"..","sourceTree":"","type":"group"}],"guid":"bfdfe7dc352907fc980b868725387e9887a1fcbcd2589d5a6e3516393b1db1ba","name":"..","path":"..","sourceTree":"","type":"group"}],"guid":"bfdfe7dc352907fc980b868725387e983efc6897fae7cf668bcbc35d168b51a1","name":"..","path":"..","sourceTree":"","type":"group"}],"guid":"bfdfe7dc352907fc980b868725387e98edcba3aae3bd37e2218d1089ea173bb4","name":"..","path":"..","sourceTree":"","type":"group"}],"guid":"bfdfe7dc352907fc980b868725387e98c281712cdfd17fee37b4bd5b1841992b","name":"..","path":"..","sourceTree":"","type":"group"}],"guid":"bfdfe7dc352907fc980b868725387e98a03a4b35be5d9e85a7fb7aa0339d6aa0","name":"..","path":"../../../../../../../../../.pub-cache/hosted/pub.dev/record_ios-1.1.4/ios/record_ios/Sources","sourceTree":"","type":"group"},{"children":[{"fileType":"text","guid":"bfdfe7dc352907fc980b868725387e98e1d6b96b4af9220b0f65082f541a6aa4","path":"../../../../../../../../../.pub-cache/hosted/pub.dev/record_ios-1.1.4/LICENSE","sourceTree":"","type":"file"},{"fileType":"text.script.ruby","guid":"bfdfe7dc352907fc980b868725387e98ce484c2575078cc12acbdde631a99151","path":"../../../../../../../../../.pub-cache/hosted/pub.dev/record_ios-1.1.4/ios/record_ios.podspec","sourceTree":"","type":"file"}],"guid":"bfdfe7dc352907fc980b868725387e981d5a61ddabdfd430bfcfcd290130190f","name":"Pod","path":"","sourceTree":"","type":"group"},{"children":[{"fileType":"sourcecode.module-map","guid":"bfdfe7dc352907fc980b868725387e9834ac0094b64a1032543b289ff0408be0","path":"record_ios.modulemap","sourceTree":"","type":"file"},{"fileType":"sourcecode.c.objc","guid":"bfdfe7dc352907fc980b868725387e98255804e028753f5b8536b2b911ccb620","path":"record_ios-dummy.m","sourceTree":"","type":"file"},{"fileType":"text.plist.xml","guid":"bfdfe7dc352907fc980b868725387e98e4be1a427c54a06ffabcaa130de2c968","path":"record_ios-Info.plist","sourceTree":"","type":"file"},{"fileType":"sourcecode.c.h","guid":"bfdfe7dc352907fc980b868725387e98480e6a92f83c6bb52a5901f688fc7040","path":"record_ios-prefix.pch","sourceTree":"","type":"file"},{"fileType":"sourcecode.c.h","guid":"bfdfe7dc352907fc980b868725387e980c4abcf4c655f36e0d31f147be4ed645","path":"record_ios-umbrella.h","sourceTree":"","type":"file"},{"fileType":"text.xcconfig","guid":"bfdfe7dc352907fc980b868725387e983daf253e7f620ff0705af75496c7b612","path":"record_ios.debug.xcconfig","sourceTree":"","type":"file"},{"fileType":"text.xcconfig","guid":"bfdfe7dc352907fc980b868725387e985629505f5ce763e2c6637f93384c9362","path":"record_ios.release.xcconfig","sourceTree":"","type":"file"},{"fileType":"text.plist.xml","guid":"bfdfe7dc352907fc980b868725387e98e5ca843c47a9788b2db2b9dde08c3daa","path":"ResourceBundle-record_ios_privacy-record_ios-Info.plist","sourceTree":"","type":"file"}],"guid":"bfdfe7dc352907fc980b868725387e9816bac2eecba87f20264d1ae2a9bc5e69","name":"Support Files","path":"../../../../Pods/Target Support Files/record_ios","sourceTree":"","type":"group"}],"guid":"bfdfe7dc352907fc980b868725387e985d22b1f5e2b6fe75edd6191c37e39101","name":"record_ios","path":"../.symlinks/plugins/record_ios/ios","sourceTree":"","type":"group"},{"children":[{"children":[{"children":[{"children":[{"children":[{"children":[{"children":[{"children":[{"children":[{"children":[{"children":[{"children":[{"children":[{"children":[{"children":[{"children":[{"children":[{"children":[{"children":[{"children":[{"children":[{"fileType":"text.xml","guid":"bfdfe7dc352907fc980b868725387e98b567af24496618e3e6787600e87a49bf","path":"../../../../../../../../../../../../.pub-cache/hosted/pub.dev/screen_brightness_ios-2.1.2/ios/screen_brightness_ios/Sources/screen_brightness_ios/PrivacyInfo.xcprivacy","sourceTree":"","type":"file"},{"fileType":"sourcecode.swift","guid":"bfdfe7dc352907fc980b868725387e982068862e6717c819c4fbc09fb536b24a","path":"../../../../../../../../../../../../.pub-cache/hosted/pub.dev/screen_brightness_ios-2.1.2/ios/screen_brightness_ios/Sources/screen_brightness_ios/ScreenBrightnessIosPlugin.swift","sourceTree":"","type":"file"},{"children":[{"fileType":"sourcecode.swift","guid":"bfdfe7dc352907fc980b868725387e98cf5aede3c3831b4f8bb98fbaee4e8fbb","path":"../../../../../../../../../../../../../.pub-cache/hosted/pub.dev/screen_brightness_ios-2.1.2/ios/screen_brightness_ios/Sources/screen_brightness_ios/StreamHandler/BaseStreamHandler.swift","sourceTree":"","type":"file"},{"fileType":"sourcecode.swift","guid":"bfdfe7dc352907fc980b868725387e988e75d6c80cb6aa025440d7188964cd4c","path":"../../../../../../../../../../../../../.pub-cache/hosted/pub.dev/screen_brightness_ios-2.1.2/ios/screen_brightness_ios/Sources/screen_brightness_ios/StreamHandler/ScreenBrightnessChangedStreamHandler.swift","sourceTree":"","type":"file"}],"guid":"bfdfe7dc352907fc980b868725387e9874d1a6d58b9d742f0585bd07182b814f","name":"StreamHandler","path":"StreamHandler","sourceTree":"","type":"group"}],"guid":"bfdfe7dc352907fc980b868725387e984fa668abf7c9619e3cfe68413bfd3c48","name":"screen_brightness_ios","path":"screen_brightness_ios","sourceTree":"","type":"group"}],"guid":"bfdfe7dc352907fc980b868725387e982cf65bc832853db0a77191533efb77f5","name":"Sources","path":"Sources","sourceTree":"","type":"group"}],"guid":"bfdfe7dc352907fc980b868725387e9896fc17dd81a5a10e141e106731f514b2","name":"screen_brightness_ios","path":"screen_brightness_ios","sourceTree":"","type":"group"}],"guid":"bfdfe7dc352907fc980b868725387e98cfb23e79d351931fbdc8641f383a954c","name":"ios","path":"ios","sourceTree":"","type":"group"}],"guid":"bfdfe7dc352907fc980b868725387e98ddc4bc6bfd114d83e9b0659cf9de43b0","name":"screen_brightness_ios","path":"screen_brightness_ios","sourceTree":"","type":"group"}],"guid":"bfdfe7dc352907fc980b868725387e9828bf95cf7cce1890fee4a38f487eb5c7","name":"plugins","path":"plugins","sourceTree":"","type":"group"}],"guid":"bfdfe7dc352907fc980b868725387e983335bbe674626a01d75a3742e0c48ab0","name":".symlinks","path":".symlinks","sourceTree":"","type":"group"}],"guid":"bfdfe7dc352907fc980b868725387e988c161eae72ee6134907b93514654e3af","name":"ios","path":"ios","sourceTree":"","type":"group"}],"guid":"bfdfe7dc352907fc980b868725387e98e8dd8457b68b460a7f872aa003429071","name":"mih_ui","path":"mih_ui","sourceTree":"","type":"group"}],"guid":"bfdfe7dc352907fc980b868725387e980de842c1d6652e7b8883117ed2154cdb","name":"mih-project","path":"mih-project","sourceTree":"","type":"group"}],"guid":"bfdfe7dc352907fc980b868725387e98dbf8dd493f43a4598e0c517f04c088bb","name":"mih_main","path":"mih_main","sourceTree":"","type":"group"}],"guid":"bfdfe7dc352907fc980b868725387e985a1723fa7f75edf0af67129e8a9a562b","name":"Git","path":"Git","sourceTree":"","type":"group"}],"guid":"bfdfe7dc352907fc980b868725387e98a3a4fb3b74e4a8c4a47f9240d537a611","name":"..","path":"..","sourceTree":"","type":"group"}],"guid":"bfdfe7dc352907fc980b868725387e98c60ae4642ba11e10aaeb77c209af10bb","name":"..","path":"..","sourceTree":"","type":"group"}],"guid":"bfdfe7dc352907fc980b868725387e98aaad6c0e344dc634c87ef0e4bc1c9a03","name":"..","path":"..","sourceTree":"","type":"group"}],"guid":"bfdfe7dc352907fc980b868725387e988eb364ca3ffbb4de057b6804cd163394","name":"..","path":"..","sourceTree":"","type":"group"}],"guid":"bfdfe7dc352907fc980b868725387e983142062fc9cde280e9c55f45fee3b7fa","name":"..","path":"..","sourceTree":"","type":"group"}],"guid":"bfdfe7dc352907fc980b868725387e9885c050b29381cffdbca0b90e5592ea71","name":"..","path":"..","sourceTree":"","type":"group"}],"guid":"bfdfe7dc352907fc980b868725387e989c3590c2a3270d996dbb84227e1e1876","name":"..","path":"..","sourceTree":"","type":"group"}],"guid":"bfdfe7dc352907fc980b868725387e98c6ade37d3c830a7144d5ac6398170d1c","name":"..","path":"../../../../../../../../../.pub-cache/hosted/pub.dev/screen_brightness_ios-2.1.2/ios/screen_brightness_ios/Sources","sourceTree":"","type":"group"},{"children":[{"fileType":"text","guid":"bfdfe7dc352907fc980b868725387e98b0915e66297459a9e12167487802adf1","path":"../../../../../../../../../.pub-cache/hosted/pub.dev/screen_brightness_ios-2.1.2/LICENSE","sourceTree":"","type":"file"},{"fileType":"text.script.ruby","guid":"bfdfe7dc352907fc980b868725387e98a59d5ae9e26912fde3acebf778deaaca","path":"../../../../../../../../../.pub-cache/hosted/pub.dev/screen_brightness_ios-2.1.2/ios/screen_brightness_ios.podspec","sourceTree":"","type":"file"}],"guid":"bfdfe7dc352907fc980b868725387e98498dca81558e0027ed3f0baace98590b","name":"Pod","path":"","sourceTree":"","type":"group"},{"children":[{"fileType":"text.plist.xml","guid":"bfdfe7dc352907fc980b868725387e983400f120914c24945cfbd231fe5c63e2","path":"ResourceBundle-screen_brightness_ios_privacy-screen_brightness_ios-Info.plist","sourceTree":"","type":"file"},{"fileType":"sourcecode.module-map","guid":"bfdfe7dc352907fc980b868725387e988d824f7ca473d4d9de96b1e3c06e9dd0","path":"screen_brightness_ios.modulemap","sourceTree":"","type":"file"},{"fileType":"sourcecode.c.objc","guid":"bfdfe7dc352907fc980b868725387e98d17b81a48ac298f16189bcd229ac4ecc","path":"screen_brightness_ios-dummy.m","sourceTree":"","type":"file"},{"fileType":"text.plist.xml","guid":"bfdfe7dc352907fc980b868725387e98c3fc5c181f687f7753a51ddd197f3105","path":"screen_brightness_ios-Info.plist","sourceTree":"","type":"file"},{"fileType":"sourcecode.c.h","guid":"bfdfe7dc352907fc980b868725387e98c8d1b3771b7963ecdf65329021b3b33a","path":"screen_brightness_ios-prefix.pch","sourceTree":"","type":"file"},{"fileType":"sourcecode.c.h","guid":"bfdfe7dc352907fc980b868725387e987ab43a0db493d8c4b0f8700a9bfc1b25","path":"screen_brightness_ios-umbrella.h","sourceTree":"","type":"file"},{"fileType":"text.xcconfig","guid":"bfdfe7dc352907fc980b868725387e98bcd767e09eacb2538a5dd8f4781036cb","path":"screen_brightness_ios.debug.xcconfig","sourceTree":"","type":"file"},{"fileType":"text.xcconfig","guid":"bfdfe7dc352907fc980b868725387e98e478cdbb3210aa9b19b78eddddb7437c","path":"screen_brightness_ios.release.xcconfig","sourceTree":"","type":"file"}],"guid":"bfdfe7dc352907fc980b868725387e98904b687b3fa631fbc1440c9a46f2ee8f","name":"Support Files","path":"../../../../Pods/Target Support Files/screen_brightness_ios","sourceTree":"","type":"group"}],"guid":"bfdfe7dc352907fc980b868725387e981579436772685ebdac93ede5e1d42a63","name":"screen_brightness_ios","path":"../.symlinks/plugins/screen_brightness_ios/ios","sourceTree":"","type":"group"},{"children":[{"children":[{"children":[{"children":[{"children":[{"children":[{"children":[{"children":[{"children":[{"children":[{"children":[{"children":[{"children":[{"children":[{"children":[{"children":[{"children":[{"children":[{"children":[{"children":[{"children":[{"fileType":"sourcecode.c.objc","guid":"bfdfe7dc352907fc980b868725387e98119c9eb9886f3635874ecb6a94a2f0d4","path":"../../../../../../../../../../../../.pub-cache/hosted/pub.dev/share_plus-11.0.0/ios/share_plus/Sources/share_plus/FPPSharePlusPlugin.m","sourceTree":"","type":"file"},{"fileType":"text.xml","guid":"bfdfe7dc352907fc980b868725387e98599bbd5b1a4bdbf5bed39a964d34f18c","path":"../../../../../../../../../../../../.pub-cache/hosted/pub.dev/share_plus-11.0.0/ios/share_plus/Sources/share_plus/PrivacyInfo.xcprivacy","sourceTree":"","type":"file"},{"children":[{"children":[{"fileType":"sourcecode.c.h","guid":"bfdfe7dc352907fc980b868725387e986c6ddc4ee2f3ea412c1028067a0fee4c","path":"../../../../../../../../../../../../../../.pub-cache/hosted/pub.dev/share_plus-11.0.0/ios/share_plus/Sources/share_plus/include/share_plus/FPPSharePlusPlugin.h","sourceTree":"","type":"file"}],"guid":"bfdfe7dc352907fc980b868725387e983d4f6b4b3ea9373c5507d9353d49b7e0","name":"share_plus","path":"share_plus","sourceTree":"","type":"group"}],"guid":"bfdfe7dc352907fc980b868725387e98b70fe759825ed1ee9c375ad6032721d9","name":"include","path":"include","sourceTree":"","type":"group"}],"guid":"bfdfe7dc352907fc980b868725387e98c031457ec4352cc7b1e0b422667da097","name":"share_plus","path":"share_plus","sourceTree":"","type":"group"}],"guid":"bfdfe7dc352907fc980b868725387e98c202cfd8b8c92dd0bf2b027958aaa905","name":"Sources","path":"Sources","sourceTree":"","type":"group"}],"guid":"bfdfe7dc352907fc980b868725387e98ff5021a81a1d8e99cd5f9ce177d63508","name":"share_plus","path":"share_plus","sourceTree":"","type":"group"}],"guid":"bfdfe7dc352907fc980b868725387e9809db9d2a512ef8f094061ebd6fbd54f2","name":"ios","path":"ios","sourceTree":"","type":"group"}],"guid":"bfdfe7dc352907fc980b868725387e989f483b4be001cca9d711aa2ba566d331","name":"share_plus","path":"share_plus","sourceTree":"","type":"group"}],"guid":"bfdfe7dc352907fc980b868725387e98bfc043e3f7c2c8921db3de166162ac8e","name":"plugins","path":"plugins","sourceTree":"","type":"group"}],"guid":"bfdfe7dc352907fc980b868725387e98e2b5b0f7d41421ffee952d9daf7dc83f","name":".symlinks","path":".symlinks","sourceTree":"","type":"group"}],"guid":"bfdfe7dc352907fc980b868725387e9869808550973ecb112263c763e971f956","name":"ios","path":"ios","sourceTree":"","type":"group"}],"guid":"bfdfe7dc352907fc980b868725387e98c08eb0711ab0623c4a4c8d45359e060a","name":"mih_ui","path":"mih_ui","sourceTree":"","type":"group"}],"guid":"bfdfe7dc352907fc980b868725387e98c6af78477aa25f5d330368714d1a895f","name":"mih-project","path":"mih-project","sourceTree":"","type":"group"}],"guid":"bfdfe7dc352907fc980b868725387e98365ca200dffc26fa46d745e2b3b25f4c","name":"mih_main","path":"mih_main","sourceTree":"","type":"group"}],"guid":"bfdfe7dc352907fc980b868725387e981ef0a29baaac601f8f19b64dd0f7cdf0","name":"Git","path":"Git","sourceTree":"","type":"group"}],"guid":"bfdfe7dc352907fc980b868725387e985e4cac157b5628bf4d3788068f4f375d","name":"..","path":"..","sourceTree":"","type":"group"}],"guid":"bfdfe7dc352907fc980b868725387e98ab42ea15b65127fe5712c39f6b592998","name":"..","path":"..","sourceTree":"","type":"group"}],"guid":"bfdfe7dc352907fc980b868725387e98396db10edc10cd3116c133d05df79e3c","name":"..","path":"..","sourceTree":"","type":"group"}],"guid":"bfdfe7dc352907fc980b868725387e98c8199d891ae54b218d13c73dc7d3c057","name":"..","path":"..","sourceTree":"","type":"group"}],"guid":"bfdfe7dc352907fc980b868725387e98f7798944d5b1e1f39fe75418851c56f4","name":"..","path":"..","sourceTree":"","type":"group"}],"guid":"bfdfe7dc352907fc980b868725387e98e3f7ac5a05b261acd5a1730475ff0b8b","name":"..","path":"..","sourceTree":"","type":"group"}],"guid":"bfdfe7dc352907fc980b868725387e985cc0a390af6375cb0ad89dc0475dc657","name":"..","path":"..","sourceTree":"","type":"group"}],"guid":"bfdfe7dc352907fc980b868725387e9891a8faf7db2593973fe985b900554efd","name":"..","path":"../../../../../../../../../.pub-cache/hosted/pub.dev/share_plus-11.0.0/ios/share_plus/Sources","sourceTree":"","type":"group"},{"children":[{"fileType":"text","guid":"bfdfe7dc352907fc980b868725387e9868445a1bb92ff184a5e20b5e5a3a39a9","path":"../../../../../../../../../.pub-cache/hosted/pub.dev/share_plus-11.0.0/LICENSE","sourceTree":"","type":"file"},{"fileType":"text.script.ruby","guid":"bfdfe7dc352907fc980b868725387e98ef64afb2023c5878036dc7c6817e9ba1","path":"../../../../../../../../../.pub-cache/hosted/pub.dev/share_plus-11.0.0/ios/share_plus.podspec","sourceTree":"","type":"file"}],"guid":"bfdfe7dc352907fc980b868725387e98154c936dc6036ad046d6363c8f61bd43","name":"Pod","path":"","sourceTree":"","type":"group"},{"children":[{"fileType":"text.plist.xml","guid":"bfdfe7dc352907fc980b868725387e98378bbd516f5eec2de41e524e24bc7e49","path":"ResourceBundle-share_plus_privacy-share_plus-Info.plist","sourceTree":"","type":"file"},{"fileType":"sourcecode.module-map","guid":"bfdfe7dc352907fc980b868725387e98906e870770dfa375bc32a874a460571b","path":"share_plus.modulemap","sourceTree":"","type":"file"},{"fileType":"sourcecode.c.objc","guid":"bfdfe7dc352907fc980b868725387e98ac3d4b3149126b081d5bc50806117e1a","path":"share_plus-dummy.m","sourceTree":"","type":"file"},{"fileType":"text.plist.xml","guid":"bfdfe7dc352907fc980b868725387e98ff64f8e5620d92a1fb974b44aaf31a50","path":"share_plus-Info.plist","sourceTree":"","type":"file"},{"fileType":"sourcecode.c.h","guid":"bfdfe7dc352907fc980b868725387e98e22c09ce8800821b844c11a9a207132d","path":"share_plus-prefix.pch","sourceTree":"","type":"file"},{"fileType":"sourcecode.c.h","guid":"bfdfe7dc352907fc980b868725387e983a3ff60a16fd5c441672e7e40ef2e624","path":"share_plus-umbrella.h","sourceTree":"","type":"file"},{"fileType":"text.xcconfig","guid":"bfdfe7dc352907fc980b868725387e98de35fcdac3f67fe0119b4d27e7b7c6d4","path":"share_plus.debug.xcconfig","sourceTree":"","type":"file"},{"fileType":"text.xcconfig","guid":"bfdfe7dc352907fc980b868725387e98d3219dc3abe23add073ba57e4e5929db","path":"share_plus.release.xcconfig","sourceTree":"","type":"file"}],"guid":"bfdfe7dc352907fc980b868725387e98d48a2ad2172506e2edc53483822fde13","name":"Support Files","path":"../../../../Pods/Target Support Files/share_plus","sourceTree":"","type":"group"}],"guid":"bfdfe7dc352907fc980b868725387e987bc749703266092de2678c42954db62e","name":"share_plus","path":"../.symlinks/plugins/share_plus/ios","sourceTree":"","type":"group"},{"children":[{"children":[{"children":[{"children":[{"children":[{"children":[{"children":[{"children":[{"children":[{"children":[{"children":[{"children":[{"children":[{"children":[{"children":[{"children":[{"children":[{"children":[{"children":[{"children":[{"children":[{"children":[{"children":[{"fileType":"text.xml","guid":"bfdfe7dc352907fc980b868725387e98251f6f0c0dfa900ccd058f8d5f09e39b","path":"../../../../../../../../../../../../../.pub-cache/hosted/pub.dev/shared_preferences_foundation-2.5.4/darwin/shared_preferences_foundation/Sources/shared_preferences_foundation/Resources/PrivacyInfo.xcprivacy","sourceTree":"","type":"file"}],"guid":"bfdfe7dc352907fc980b868725387e98874a84db9ab4c0b9f22d421b7cd204c7","name":"Resources","path":"Resources","sourceTree":"","type":"group"}],"guid":"bfdfe7dc352907fc980b868725387e98d260bd6770b72dfa4da36eadfee166df","name":"shared_preferences_foundation","path":"shared_preferences_foundation","sourceTree":"","type":"group"}],"guid":"bfdfe7dc352907fc980b868725387e98e3e39e128c5809bd49040f00361eae7c","name":"Sources","path":"Sources","sourceTree":"","type":"group"}],"guid":"bfdfe7dc352907fc980b868725387e9850ffa628d1919f0ec705f9de24bda6c1","name":"shared_preferences_foundation","path":"shared_preferences_foundation","sourceTree":"","type":"group"}],"guid":"bfdfe7dc352907fc980b868725387e985e64e7994fe3fdc22525b6459b9f48cd","name":"darwin","path":"darwin","sourceTree":"","type":"group"}],"guid":"bfdfe7dc352907fc980b868725387e988cad9c321014aed10048c97d530dfc9e","name":"shared_preferences_foundation","path":"shared_preferences_foundation","sourceTree":"","type":"group"}],"guid":"bfdfe7dc352907fc980b868725387e98ce1edebbcbeb4dc57286acae03d36057","name":"plugins","path":"plugins","sourceTree":"","type":"group"}],"guid":"bfdfe7dc352907fc980b868725387e988f8bdc4d5afea8e36320c0e1e34946cb","name":".symlinks","path":".symlinks","sourceTree":"","type":"group"}],"guid":"bfdfe7dc352907fc980b868725387e98e25e360fe18b437b2db3a93fa43b847a","name":"ios","path":"ios","sourceTree":"","type":"group"}],"guid":"bfdfe7dc352907fc980b868725387e986a22bf476083da0ba2e2549f7102806f","name":"mih_ui","path":"mih_ui","sourceTree":"","type":"group"}],"guid":"bfdfe7dc352907fc980b868725387e98fd58d2e1a8250ce2aa53840a0efebd81","name":"mih-project","path":"mih-project","sourceTree":"","type":"group"}],"guid":"bfdfe7dc352907fc980b868725387e986d5878a7dc724f2c66e8f251b07ed4dc","name":"mih_main","path":"mih_main","sourceTree":"","type":"group"}],"guid":"bfdfe7dc352907fc980b868725387e98cca72625c4f27b28e95966284d25a066","name":"Git","path":"Git","sourceTree":"","type":"group"}],"guid":"bfdfe7dc352907fc980b868725387e9880a7725720f6588f2fa64a41717c07f3","name":"..","path":".","sourceTree":"","type":"group"},{"children":[{"children":[{"children":[{"children":[{"children":[{"children":[{"children":[{"children":[{"children":[{"children":[{"children":[{"children":[{"fileType":"sourcecode.swift","guid":"bfdfe7dc352907fc980b868725387e98d7fd3cf0401e3393c461b2ae7c1591c7","path":"../../../../../../../../../../../../.pub-cache/hosted/pub.dev/shared_preferences_foundation-2.5.4/darwin/shared_preferences_foundation/Sources/shared_preferences_foundation/messages.g.swift","sourceTree":"","type":"file"},{"fileType":"sourcecode.swift","guid":"bfdfe7dc352907fc980b868725387e98f19bf67647b9b4da54e0115f35b62be4","path":"../../../../../../../../../../../../.pub-cache/hosted/pub.dev/shared_preferences_foundation-2.5.4/darwin/shared_preferences_foundation/Sources/shared_preferences_foundation/SharedPreferencesPlugin.swift","sourceTree":"","type":"file"}],"guid":"bfdfe7dc352907fc980b868725387e986d6f4d0088b7c72652b95fc0ebb93926","name":"shared_preferences_foundation","path":"shared_preferences_foundation","sourceTree":"","type":"group"}],"guid":"bfdfe7dc352907fc980b868725387e982f66ae4f5b415172e3dca64e9e8e5a4e","name":"Sources","path":"Sources","sourceTree":"","type":"group"}],"guid":"bfdfe7dc352907fc980b868725387e982ac4dff249a7528e93cd77a7f162f234","name":"shared_preferences_foundation","path":"shared_preferences_foundation","sourceTree":"","type":"group"}],"guid":"bfdfe7dc352907fc980b868725387e986e413e350fae1f0103b443a6a45fb56b","name":"darwin","path":"darwin","sourceTree":"","type":"group"}],"guid":"bfdfe7dc352907fc980b868725387e98986cd207c1e8622480ebb094be785bc4","name":"shared_preferences_foundation","path":"shared_preferences_foundation","sourceTree":"","type":"group"}],"guid":"bfdfe7dc352907fc980b868725387e9831549fc1ad6b0e5fe2b6dbae6500a1a5","name":"plugins","path":"plugins","sourceTree":"","type":"group"}],"guid":"bfdfe7dc352907fc980b868725387e98c53c5f7a985e5d8906fa525678a4ed74","name":".symlinks","path":".symlinks","sourceTree":"","type":"group"}],"guid":"bfdfe7dc352907fc980b868725387e987fee99b78dd5109cdba3de5751dad705","name":"ios","path":"ios","sourceTree":"","type":"group"}],"guid":"bfdfe7dc352907fc980b868725387e989e87820aba3f967f8f414a3668bc8c32","name":"mih_ui","path":"mih_ui","sourceTree":"","type":"group"}],"guid":"bfdfe7dc352907fc980b868725387e983424e39400373f6dfe6b3293723b2d63","name":"mih-project","path":"mih-project","sourceTree":"","type":"group"}],"guid":"bfdfe7dc352907fc980b868725387e9890236d39b36a50b18dfee2b67a45863e","name":"mih_main","path":"mih_main","sourceTree":"","type":"group"}],"guid":"bfdfe7dc352907fc980b868725387e98f5c4325e1db9ad21e4acf5deb1a99531","name":"Git","path":"Git","sourceTree":"","type":"group"}],"guid":"bfdfe7dc352907fc980b868725387e9863074831eac277e55e30016b23204e0b","name":"..","path":"..","sourceTree":"","type":"group"}],"guid":"bfdfe7dc352907fc980b868725387e98093130e99afc1f5f553deb94624455a9","name":"..","path":"..","sourceTree":"","type":"group"}],"guid":"bfdfe7dc352907fc980b868725387e988be645abfbd88edc4f33f359acd532f1","name":"..","path":"..","sourceTree":"","type":"group"}],"guid":"bfdfe7dc352907fc980b868725387e984434ce912622f5061aa4c626b2217185","name":"..","path":"..","sourceTree":"","type":"group"}],"guid":"bfdfe7dc352907fc980b868725387e98ca7021dd2115aeea2deec8d2f69b6bc9","name":"..","path":"..","sourceTree":"","type":"group"}],"guid":"bfdfe7dc352907fc980b868725387e98570f6c2adb30c44a00ee3c91c056c116","name":"..","path":"..","sourceTree":"","type":"group"}],"guid":"bfdfe7dc352907fc980b868725387e98c835a8cb19147cf0930aaca9c0e17f92","name":"..","path":"..","sourceTree":"","type":"group"}],"guid":"bfdfe7dc352907fc980b868725387e9859a08326d1ab9bd0425c51f76de45d5a","name":"..","path":"../../../../../../../../../.pub-cache/hosted/pub.dev/shared_preferences_foundation-2.5.4/darwin/shared_preferences_foundation/Sources","sourceTree":"","type":"group"},{"children":[{"fileType":"text","guid":"bfdfe7dc352907fc980b868725387e98ce1dd3ced01a13751360e124369d38d6","path":"../../../../../../../../../.pub-cache/hosted/pub.dev/shared_preferences_foundation-2.5.4/LICENSE","sourceTree":"","type":"file"},{"fileType":"text.script.ruby","guid":"bfdfe7dc352907fc980b868725387e9898024370ef0cf83a515f865ba5f18b1f","path":"../../../../../../../../../.pub-cache/hosted/pub.dev/shared_preferences_foundation-2.5.4/darwin/shared_preferences_foundation.podspec","sourceTree":"","type":"file"}],"guid":"bfdfe7dc352907fc980b868725387e98b4363ea9f157c04918d640a76ca81521","name":"Pod","path":"","sourceTree":"","type":"group"},{"children":[{"fileType":"text.plist.xml","guid":"bfdfe7dc352907fc980b868725387e98c65a8a036f40f9a6657c7c81348dd3ff","path":"ResourceBundle-shared_preferences_foundation_privacy-shared_preferences_foundation-Info.plist","sourceTree":"","type":"file"},{"fileType":"sourcecode.module-map","guid":"bfdfe7dc352907fc980b868725387e9878a138126e157c84d17eb1152493dc20","path":"shared_preferences_foundation.modulemap","sourceTree":"","type":"file"},{"fileType":"sourcecode.c.objc","guid":"bfdfe7dc352907fc980b868725387e9857a0115412b61e72a46155af7b48b848","path":"shared_preferences_foundation-dummy.m","sourceTree":"","type":"file"},{"fileType":"text.plist.xml","guid":"bfdfe7dc352907fc980b868725387e9805edc661fdbdf6644df331c393174c01","path":"shared_preferences_foundation-Info.plist","sourceTree":"","type":"file"},{"fileType":"sourcecode.c.h","guid":"bfdfe7dc352907fc980b868725387e981bfa857f3b9b99abe02ca6fc7b5bd990","path":"shared_preferences_foundation-prefix.pch","sourceTree":"","type":"file"},{"fileType":"sourcecode.c.h","guid":"bfdfe7dc352907fc980b868725387e98d9c07036facadf4c2fe7142051423416","path":"shared_preferences_foundation-umbrella.h","sourceTree":"","type":"file"},{"fileType":"text.xcconfig","guid":"bfdfe7dc352907fc980b868725387e981ea619c6c09d50e42998ac2381b017c9","path":"shared_preferences_foundation.debug.xcconfig","sourceTree":"","type":"file"},{"fileType":"text.xcconfig","guid":"bfdfe7dc352907fc980b868725387e988abaddbc7dac244a9dd3a827969bb097","path":"shared_preferences_foundation.release.xcconfig","sourceTree":"","type":"file"}],"guid":"bfdfe7dc352907fc980b868725387e98ef7e6af9b5bd6c7f5706ccb9a18c5adf","name":"Support Files","path":"../../../../Pods/Target Support Files/shared_preferences_foundation","sourceTree":"","type":"group"}],"guid":"bfdfe7dc352907fc980b868725387e980d9e95ccc7793f6ae3460b9735cb8db8","name":"shared_preferences_foundation","path":"../.symlinks/plugins/shared_preferences_foundation/darwin","sourceTree":"","type":"group"},{"children":[{"children":[{"children":[{"children":[{"children":[{"children":[{"children":[{"children":[{"children":[{"children":[{"children":[{"children":[{"children":[{"children":[{"children":[{"children":[{"children":[{"children":[{"children":[{"children":[{"children":[{"children":[{"children":[{"fileType":"text.xml","guid":"bfdfe7dc352907fc980b868725387e9853ec5b69fdc2191f1ca7a8b03970be07","path":"../../../../../../../../../../../../../.pub-cache/hosted/pub.dev/sqflite_darwin-2.4.2/darwin/sqflite_darwin/Sources/sqflite_darwin/Resources/PrivacyInfo.xcprivacy","sourceTree":"","type":"file"}],"guid":"bfdfe7dc352907fc980b868725387e98200d0fa3707fc5ee74afc160d893d31d","name":"Resources","path":"Resources","sourceTree":"","type":"group"}],"guid":"bfdfe7dc352907fc980b868725387e985dcda6b1cb6811b67d0e643bc9f80b04","name":"sqflite_darwin","path":"sqflite_darwin","sourceTree":"","type":"group"}],"guid":"bfdfe7dc352907fc980b868725387e981e185c6bd005e3d15397062c4574f504","name":"Sources","path":"Sources","sourceTree":"","type":"group"}],"guid":"bfdfe7dc352907fc980b868725387e98a482ae21cd5e935a49125ee7f4334a4f","name":"sqflite_darwin","path":"sqflite_darwin","sourceTree":"","type":"group"}],"guid":"bfdfe7dc352907fc980b868725387e984d9b6acbccf02f63b8c74455872502ad","name":"darwin","path":"darwin","sourceTree":"","type":"group"}],"guid":"bfdfe7dc352907fc980b868725387e9827b2476097951d4ba4a438df6bdab0c3","name":"sqflite_darwin","path":"sqflite_darwin","sourceTree":"","type":"group"}],"guid":"bfdfe7dc352907fc980b868725387e98d9e91246b255bd2e9e7a0efaec4a6ae0","name":"plugins","path":"plugins","sourceTree":"","type":"group"}],"guid":"bfdfe7dc352907fc980b868725387e98f73a85e7ab7083d26c1cae3a39f97d28","name":".symlinks","path":".symlinks","sourceTree":"","type":"group"}],"guid":"bfdfe7dc352907fc980b868725387e98bcc6e45d9dccbce5db97a93454702552","name":"ios","path":"ios","sourceTree":"","type":"group"}],"guid":"bfdfe7dc352907fc980b868725387e985e4092a639794880dacb330ad8d18b90","name":"mih_ui","path":"mih_ui","sourceTree":"","type":"group"}],"guid":"bfdfe7dc352907fc980b868725387e9802c8af15eb3ab80ccbae2168af891649","name":"mih-project","path":"mih-project","sourceTree":"","type":"group"}],"guid":"bfdfe7dc352907fc980b868725387e987e2b6109c38b758dc68f384f773a778f","name":"mih_main","path":"mih_main","sourceTree":"","type":"group"}],"guid":"bfdfe7dc352907fc980b868725387e9885f86e0d5bd71fdf4bd51f069cb5a8d4","name":"Git","path":"Git","sourceTree":"","type":"group"}],"guid":"bfdfe7dc352907fc980b868725387e987fab1129b9c51c893011735af55b4bf7","name":"..","path":".","sourceTree":"","type":"group"},{"children":[{"children":[{"children":[{"children":[{"children":[{"children":[{"children":[{"children":[{"children":[{"children":[{"children":[{"children":[{"fileType":"sourcecode.c.h","guid":"bfdfe7dc352907fc980b868725387e9879477fd65084cc006d19101f02256fe0","path":"../../../../../../../../../../../../.pub-cache/hosted/pub.dev/sqflite_darwin-2.4.2/darwin/sqflite_darwin/Sources/sqflite_darwin/SqfliteCursor.h","sourceTree":"","type":"file"},{"fileType":"sourcecode.c.objc","guid":"bfdfe7dc352907fc980b868725387e9830c704358e50b5466ffb0fa7d6c2e209","path":"../../../../../../../../../../../../.pub-cache/hosted/pub.dev/sqflite_darwin-2.4.2/darwin/sqflite_darwin/Sources/sqflite_darwin/SqfliteCursor.m","sourceTree":"","type":"file"},{"fileType":"sourcecode.c.h","guid":"bfdfe7dc352907fc980b868725387e980e35fc805e7942676dde7f6a6cceca96","path":"../../../../../../../../../../../../.pub-cache/hosted/pub.dev/sqflite_darwin-2.4.2/darwin/sqflite_darwin/Sources/sqflite_darwin/SqfliteDarwinDatabase.h","sourceTree":"","type":"file"},{"fileType":"sourcecode.c.objc","guid":"bfdfe7dc352907fc980b868725387e982ce4fd3b13126d36c4c105bebc0d9fd1","path":"../../../../../../../../../../../../.pub-cache/hosted/pub.dev/sqflite_darwin-2.4.2/darwin/sqflite_darwin/Sources/sqflite_darwin/SqfliteDarwinDatabase.m","sourceTree":"","type":"file"},{"fileType":"sourcecode.c.h","guid":"bfdfe7dc352907fc980b868725387e98592da7f3a49d3059663aa71a58cd0a4a","path":"../../../../../../../../../../../../.pub-cache/hosted/pub.dev/sqflite_darwin-2.4.2/darwin/sqflite_darwin/Sources/sqflite_darwin/SqfliteDarwinDatabaseAdditions.h","sourceTree":"","type":"file"},{"fileType":"sourcecode.c.objc","guid":"bfdfe7dc352907fc980b868725387e98c6a0774da49442d88e4fb061e345fcbf","path":"../../../../../../../../../../../../.pub-cache/hosted/pub.dev/sqflite_darwin-2.4.2/darwin/sqflite_darwin/Sources/sqflite_darwin/SqfliteDarwinDatabaseAdditions.m","sourceTree":"","type":"file"},{"fileType":"sourcecode.c.h","guid":"bfdfe7dc352907fc980b868725387e98ac0abeeeb91ccc5902df814d398020ae","path":"../../../../../../../../../../../../.pub-cache/hosted/pub.dev/sqflite_darwin-2.4.2/darwin/sqflite_darwin/Sources/sqflite_darwin/SqfliteDarwinDatabaseQueue.h","sourceTree":"","type":"file"},{"fileType":"sourcecode.c.objc","guid":"bfdfe7dc352907fc980b868725387e98018efb908ca6e0716b824fc860f61c9b","path":"../../../../../../../../../../../../.pub-cache/hosted/pub.dev/sqflite_darwin-2.4.2/darwin/sqflite_darwin/Sources/sqflite_darwin/SqfliteDarwinDatabaseQueue.m","sourceTree":"","type":"file"},{"fileType":"sourcecode.c.h","guid":"bfdfe7dc352907fc980b868725387e980c6eff3a04d8f600b147b66f518c810b","path":"../../../../../../../../../../../../.pub-cache/hosted/pub.dev/sqflite_darwin-2.4.2/darwin/sqflite_darwin/Sources/sqflite_darwin/SqfliteDarwinDB.h","sourceTree":"","type":"file"},{"fileType":"sourcecode.c.h","guid":"bfdfe7dc352907fc980b868725387e9812a82c89a68ff3aa4668003694edb150","path":"../../../../../../../../../../../../.pub-cache/hosted/pub.dev/sqflite_darwin-2.4.2/darwin/sqflite_darwin/Sources/sqflite_darwin/SqfliteDarwinImport.h","sourceTree":"","type":"file"},{"fileType":"sourcecode.c.h","guid":"bfdfe7dc352907fc980b868725387e987a187bee2cf8e65d0c11cbf842b8d0a7","path":"../../../../../../../../../../../../.pub-cache/hosted/pub.dev/sqflite_darwin-2.4.2/darwin/sqflite_darwin/Sources/sqflite_darwin/SqfliteDarwinResultSet.h","sourceTree":"","type":"file"},{"fileType":"sourcecode.c.objc","guid":"bfdfe7dc352907fc980b868725387e9853e6f394a4d03f7b423702095b9e1482","path":"../../../../../../../../../../../../.pub-cache/hosted/pub.dev/sqflite_darwin-2.4.2/darwin/sqflite_darwin/Sources/sqflite_darwin/SqfliteDarwinResultSet.m","sourceTree":"","type":"file"},{"fileType":"sourcecode.c.h","guid":"bfdfe7dc352907fc980b868725387e985d2f0271270070876a34fb6538811993","path":"../../../../../../../../../../../../.pub-cache/hosted/pub.dev/sqflite_darwin-2.4.2/darwin/sqflite_darwin/Sources/sqflite_darwin/SqfliteDatabase.h","sourceTree":"","type":"file"},{"fileType":"sourcecode.c.objc","guid":"bfdfe7dc352907fc980b868725387e98c8dd825ce814e57bbe46ce1cda93d700","path":"../../../../../../../../../../../../.pub-cache/hosted/pub.dev/sqflite_darwin-2.4.2/darwin/sqflite_darwin/Sources/sqflite_darwin/SqfliteDatabase.m","sourceTree":"","type":"file"},{"fileType":"sourcecode.c.h","guid":"bfdfe7dc352907fc980b868725387e985e37b28cf8fbbaa7f69a2cadcd43d21c","path":"../../../../../../../../../../../../.pub-cache/hosted/pub.dev/sqflite_darwin-2.4.2/darwin/sqflite_darwin/Sources/sqflite_darwin/SqfliteImport.h","sourceTree":"","type":"file"},{"fileType":"sourcecode.c.h","guid":"bfdfe7dc352907fc980b868725387e988b79e3ba836e166f4d2c19a363e77ef6","path":"../../../../../../../../../../../../.pub-cache/hosted/pub.dev/sqflite_darwin-2.4.2/darwin/sqflite_darwin/Sources/sqflite_darwin/SqfliteOperation.h","sourceTree":"","type":"file"},{"fileType":"sourcecode.c.objc","guid":"bfdfe7dc352907fc980b868725387e98f0b4b8929472bef1ea1691b2d60d35bb","path":"../../../../../../../../../../../../.pub-cache/hosted/pub.dev/sqflite_darwin-2.4.2/darwin/sqflite_darwin/Sources/sqflite_darwin/SqfliteOperation.m","sourceTree":"","type":"file"},{"fileType":"sourcecode.c.h","guid":"bfdfe7dc352907fc980b868725387e98c9475c24e421f8b84743f5f595dcf902","path":"../../../../../../../../../../../../.pub-cache/hosted/pub.dev/sqflite_darwin-2.4.2/darwin/sqflite_darwin/Sources/sqflite_darwin/SqflitePlugin.h","sourceTree":"","type":"file"},{"fileType":"sourcecode.c.objc","guid":"bfdfe7dc352907fc980b868725387e98e7fb17279cf291b6e4e53390f27f299e","path":"../../../../../../../../../../../../.pub-cache/hosted/pub.dev/sqflite_darwin-2.4.2/darwin/sqflite_darwin/Sources/sqflite_darwin/SqflitePlugin.m","sourceTree":"","type":"file"},{"children":[{"children":[{"fileType":"sourcecode.c.h","guid":"bfdfe7dc352907fc980b868725387e98d68895a313533798394d82163692c629","path":"../../../../../../../../../../../../../../.pub-cache/hosted/pub.dev/sqflite_darwin-2.4.2/darwin/sqflite_darwin/Sources/sqflite_darwin/include/sqflite_darwin/SqfliteImportPublic.h","sourceTree":"","type":"file"},{"fileType":"sourcecode.c.h","guid":"bfdfe7dc352907fc980b868725387e985cac4af7f944cc0b3df8c11a0e43e286","path":"../../../../../../../../../../../../../../.pub-cache/hosted/pub.dev/sqflite_darwin-2.4.2/darwin/sqflite_darwin/Sources/sqflite_darwin/include/sqflite_darwin/SqflitePluginPublic.h","sourceTree":"","type":"file"}],"guid":"bfdfe7dc352907fc980b868725387e983846aced2fd599b48a93ac2106e72ea4","name":"sqflite_darwin","path":"sqflite_darwin","sourceTree":"","type":"group"}],"guid":"bfdfe7dc352907fc980b868725387e987f0259db830b9d38038571b93242197e","name":"include","path":"include","sourceTree":"","type":"group"}],"guid":"bfdfe7dc352907fc980b868725387e9807c4dffe6a0500abb6cc0bb91e07e058","name":"sqflite_darwin","path":"sqflite_darwin","sourceTree":"","type":"group"}],"guid":"bfdfe7dc352907fc980b868725387e98f974f7c51012fce9ac1b91791d37afe3","name":"Sources","path":"Sources","sourceTree":"","type":"group"}],"guid":"bfdfe7dc352907fc980b868725387e983d081cb1752b8ebe9a76fadf13026796","name":"sqflite_darwin","path":"sqflite_darwin","sourceTree":"","type":"group"}],"guid":"bfdfe7dc352907fc980b868725387e98dbc9fe22e4ef90d187fd3abafc65457b","name":"darwin","path":"darwin","sourceTree":"","type":"group"}],"guid":"bfdfe7dc352907fc980b868725387e98945dcff18e1f67dcfd7037cbd18b50c4","name":"sqflite_darwin","path":"sqflite_darwin","sourceTree":"","type":"group"}],"guid":"bfdfe7dc352907fc980b868725387e981410346a0e55a9c7843f10860bad76f2","name":"plugins","path":"plugins","sourceTree":"","type":"group"}],"guid":"bfdfe7dc352907fc980b868725387e981a6a34cd1c98dc3ad701f6eb02d8dbe5","name":".symlinks","path":".symlinks","sourceTree":"","type":"group"}],"guid":"bfdfe7dc352907fc980b868725387e989fcf587fd16f1f9a48d3555a22e1b458","name":"ios","path":"ios","sourceTree":"","type":"group"}],"guid":"bfdfe7dc352907fc980b868725387e98e46648f321b2c1f4b91db77505e08f30","name":"mih_ui","path":"mih_ui","sourceTree":"","type":"group"}],"guid":"bfdfe7dc352907fc980b868725387e98f6fd94c2b590faa93e53f862ea2ee79e","name":"mih-project","path":"mih-project","sourceTree":"","type":"group"}],"guid":"bfdfe7dc352907fc980b868725387e980e25c3aaf34ca14c48b2996219026a75","name":"mih_main","path":"mih_main","sourceTree":"","type":"group"}],"guid":"bfdfe7dc352907fc980b868725387e98848fee2ce1a3a8df150c97e859589977","name":"Git","path":"Git","sourceTree":"","type":"group"}],"guid":"bfdfe7dc352907fc980b868725387e9832c2025d830b21b09a6f91d377e96ec6","name":"..","path":"..","sourceTree":"","type":"group"}],"guid":"bfdfe7dc352907fc980b868725387e985fb2cee421f991423182d3789b3dff5b","name":"..","path":"..","sourceTree":"","type":"group"}],"guid":"bfdfe7dc352907fc980b868725387e988e34517bb9c674813ab2b4b2286d24c8","name":"..","path":"..","sourceTree":"","type":"group"}],"guid":"bfdfe7dc352907fc980b868725387e9835007b95f817704dba1eeceed30c9fcb","name":"..","path":"..","sourceTree":"","type":"group"}],"guid":"bfdfe7dc352907fc980b868725387e9893e83fc7d01a44b30af889d682c66137","name":"..","path":"..","sourceTree":"","type":"group"}],"guid":"bfdfe7dc352907fc980b868725387e9836406f81de276cf028bf598208c2e046","name":"..","path":"..","sourceTree":"","type":"group"}],"guid":"bfdfe7dc352907fc980b868725387e983f2adab1decb9579e798ade3e8f94b41","name":"..","path":"..","sourceTree":"","type":"group"}],"guid":"bfdfe7dc352907fc980b868725387e9836faaaa2c50b49a85977ed4562d12b6b","name":"..","path":"../../../../../../../../../.pub-cache/hosted/pub.dev/sqflite_darwin-2.4.2/darwin/sqflite_darwin/Sources","sourceTree":"","type":"group"},{"children":[{"fileType":"text","guid":"bfdfe7dc352907fc980b868725387e98d6dae8f9e68af4ae0bfa937e10346c24","path":"../../../../../../../../../.pub-cache/hosted/pub.dev/sqflite_darwin-2.4.2/LICENSE","sourceTree":"","type":"file"},{"fileType":"net.daringfireball.markdown","guid":"bfdfe7dc352907fc980b868725387e983d2cf05e8641bfb9bd4e0c8a0d9acb1e","path":"../../../../../../../../../.pub-cache/hosted/pub.dev/sqflite_darwin-2.4.2/darwin/README.md","sourceTree":"","type":"file"},{"fileType":"text.script.ruby","guid":"bfdfe7dc352907fc980b868725387e98cd6558be7189756cef630598ee7d2bb0","path":"../../../../../../../../../.pub-cache/hosted/pub.dev/sqflite_darwin-2.4.2/darwin/sqflite_darwin.podspec","sourceTree":"","type":"file"}],"guid":"bfdfe7dc352907fc980b868725387e98ecbba56932b85a43762bec99b6225df1","name":"Pod","path":"","sourceTree":"","type":"group"},{"children":[{"fileType":"text.plist.xml","guid":"bfdfe7dc352907fc980b868725387e98f4c1bfaaeeabeda1e584c9b61c8588cd","path":"ResourceBundle-sqflite_darwin_privacy-sqflite_darwin-Info.plist","sourceTree":"","type":"file"},{"fileType":"sourcecode.module-map","guid":"bfdfe7dc352907fc980b868725387e988dc8cfd8a4a13f0f776d30a86da3a4c4","path":"sqflite_darwin.modulemap","sourceTree":"","type":"file"},{"fileType":"sourcecode.c.objc","guid":"bfdfe7dc352907fc980b868725387e982eb21757b507687455f8acb8e01017e3","path":"sqflite_darwin-dummy.m","sourceTree":"","type":"file"},{"fileType":"text.plist.xml","guid":"bfdfe7dc352907fc980b868725387e98c5b713749c67afaec2446d918bc88dec","path":"sqflite_darwin-Info.plist","sourceTree":"","type":"file"},{"fileType":"sourcecode.c.h","guid":"bfdfe7dc352907fc980b868725387e984350c2c970d218895c0b6757b272d815","path":"sqflite_darwin-prefix.pch","sourceTree":"","type":"file"},{"fileType":"sourcecode.c.h","guid":"bfdfe7dc352907fc980b868725387e983e7d9fa60b774739ab0d6568bf07a351","path":"sqflite_darwin-umbrella.h","sourceTree":"","type":"file"},{"fileType":"text.xcconfig","guid":"bfdfe7dc352907fc980b868725387e9875a911280513a51a1fcc833a02e1e86d","path":"sqflite_darwin.debug.xcconfig","sourceTree":"","type":"file"},{"fileType":"text.xcconfig","guid":"bfdfe7dc352907fc980b868725387e98b2e50aea12e109eb95c45970b36f8a43","path":"sqflite_darwin.release.xcconfig","sourceTree":"","type":"file"}],"guid":"bfdfe7dc352907fc980b868725387e984b076e246ad5a420d39bd8da89e9420a","name":"Support Files","path":"../../../../Pods/Target Support Files/sqflite_darwin","sourceTree":"","type":"group"}],"guid":"bfdfe7dc352907fc980b868725387e98311733b06bfed642b6f8f4347779ecf3","name":"sqflite_darwin","path":"../.symlinks/plugins/sqflite_darwin/darwin","sourceTree":"","type":"group"},{"children":[{"children":[{"children":[{"children":[{"children":[{"children":[{"children":[{"children":[{"children":[{"children":[{"children":[{"children":[{"children":[{"children":[{"children":[{"children":[{"children":[{"children":[{"children":[{"children":[{"children":[{"fileType":"sourcecode.swift","guid":"bfdfe7dc352907fc980b868725387e9853502a1c45cb54adc332a8b75ff6be4e","path":"../../../../../../../../../../../../.pub-cache/hosted/pub.dev/syncfusion_flutter_pdfviewer-29.2.10/ios/syncfusion_flutter_pdfviewer/Sources/syncfusion_flutter_pdfviewer/SyncfusionFlutterPdfViewerPlugin.swift","sourceTree":"","type":"file"}],"guid":"bfdfe7dc352907fc980b868725387e987361f6fd54e39b6be5032d54d3249f45","name":"syncfusion_flutter_pdfviewer","path":"syncfusion_flutter_pdfviewer","sourceTree":"","type":"group"}],"guid":"bfdfe7dc352907fc980b868725387e9803debb445f6700abe7749ae6aee19411","name":"Sources","path":"Sources","sourceTree":"","type":"group"}],"guid":"bfdfe7dc352907fc980b868725387e9888c353835eb8ac179d64e97ed5dd2d1c","name":"syncfusion_flutter_pdfviewer","path":"syncfusion_flutter_pdfviewer","sourceTree":"","type":"group"}],"guid":"bfdfe7dc352907fc980b868725387e9829d95cda9e4e6450a4ac6fb90943c7e9","name":"ios","path":"ios","sourceTree":"","type":"group"}],"guid":"bfdfe7dc352907fc980b868725387e98a190abdb74ac76152a243d43c1608ed3","name":"syncfusion_flutter_pdfviewer","path":"syncfusion_flutter_pdfviewer","sourceTree":"","type":"group"}],"guid":"bfdfe7dc352907fc980b868725387e98febf987d2ebbbed1a6084dfb281decc4","name":"plugins","path":"plugins","sourceTree":"","type":"group"}],"guid":"bfdfe7dc352907fc980b868725387e981169ca70ca26e5814cf73ad7de6b4451","name":".symlinks","path":".symlinks","sourceTree":"","type":"group"}],"guid":"bfdfe7dc352907fc980b868725387e9881968911210413bf0459a1a6f921df0e","name":"ios","path":"ios","sourceTree":"","type":"group"}],"guid":"bfdfe7dc352907fc980b868725387e9876e9964386e015101a3090fcf115536e","name":"mih_ui","path":"mih_ui","sourceTree":"","type":"group"}],"guid":"bfdfe7dc352907fc980b868725387e98cc01a49f34442ae45ba994342cfb1704","name":"mih-project","path":"mih-project","sourceTree":"","type":"group"}],"guid":"bfdfe7dc352907fc980b868725387e98a7aa0d77acd4da36a80bd7da7daf9573","name":"mih_main","path":"mih_main","sourceTree":"","type":"group"}],"guid":"bfdfe7dc352907fc980b868725387e98038a90b861a28e5b4b8dd5aa24bc0b5f","name":"Git","path":"Git","sourceTree":"","type":"group"}],"guid":"bfdfe7dc352907fc980b868725387e985846007afd74f6d4389c61c2f76b19a7","name":"..","path":"..","sourceTree":"","type":"group"}],"guid":"bfdfe7dc352907fc980b868725387e98c98f66cdb2c668eb9c9535e3b005afc8","name":"..","path":"..","sourceTree":"","type":"group"}],"guid":"bfdfe7dc352907fc980b868725387e989d999538e9f35e3be808f783dbe6f043","name":"..","path":"..","sourceTree":"","type":"group"}],"guid":"bfdfe7dc352907fc980b868725387e98d6e839cb13db77a3fccadfa0deeb4f79","name":"..","path":"..","sourceTree":"","type":"group"}],"guid":"bfdfe7dc352907fc980b868725387e980af197b92723af06582e4ddbdef77b89","name":"..","path":"..","sourceTree":"","type":"group"}],"guid":"bfdfe7dc352907fc980b868725387e989f762b6a7039344e7f57bba56b844b07","name":"..","path":"..","sourceTree":"","type":"group"}],"guid":"bfdfe7dc352907fc980b868725387e980ad2d568d7cc8d3f2d64dc169cf65208","name":"..","path":"..","sourceTree":"","type":"group"}],"guid":"bfdfe7dc352907fc980b868725387e98afaac2d6f80c35a2f08aa0e9cd39ae94","name":"..","path":"../../../../../../../../../.pub-cache/hosted/pub.dev/syncfusion_flutter_pdfviewer-29.2.10/ios/syncfusion_flutter_pdfviewer/Sources","sourceTree":"","type":"group"},{"children":[{"fileType":"text","guid":"bfdfe7dc352907fc980b868725387e986fbd8db7f6bd33265d8a0fbc7bf95baa","path":"../../../../../../../../../.pub-cache/hosted/pub.dev/syncfusion_flutter_pdfviewer-29.2.10/LICENSE","sourceTree":"","type":"file"},{"fileType":"text.script.ruby","guid":"bfdfe7dc352907fc980b868725387e98bb18158157998dde524ca6578c72094d","path":"../../../../../../../../../.pub-cache/hosted/pub.dev/syncfusion_flutter_pdfviewer-29.2.10/ios/syncfusion_flutter_pdfviewer.podspec","sourceTree":"","type":"file"}],"guid":"bfdfe7dc352907fc980b868725387e9854f9fda2b4b51ecd1bc53558d995bc7a","name":"Pod","path":"","sourceTree":"","type":"group"},{"children":[{"fileType":"sourcecode.module-map","guid":"bfdfe7dc352907fc980b868725387e98ca3b4a62b17a3dd6a49cf8261bef40b3","path":"syncfusion_flutter_pdfviewer.modulemap","sourceTree":"","type":"file"},{"fileType":"sourcecode.c.objc","guid":"bfdfe7dc352907fc980b868725387e98532284d033f3de271a1fd34a6aa57476","path":"syncfusion_flutter_pdfviewer-dummy.m","sourceTree":"","type":"file"},{"fileType":"text.plist.xml","guid":"bfdfe7dc352907fc980b868725387e9891436df15c3476add531fc85739f9a58","path":"syncfusion_flutter_pdfviewer-Info.plist","sourceTree":"","type":"file"},{"fileType":"sourcecode.c.h","guid":"bfdfe7dc352907fc980b868725387e980d895796e7cf3b42d3e6950740583b8a","path":"syncfusion_flutter_pdfviewer-prefix.pch","sourceTree":"","type":"file"},{"fileType":"sourcecode.c.h","guid":"bfdfe7dc352907fc980b868725387e98d31e2d30267b93d0385170731adefbb0","path":"syncfusion_flutter_pdfviewer-umbrella.h","sourceTree":"","type":"file"},{"fileType":"text.xcconfig","guid":"bfdfe7dc352907fc980b868725387e98e09431f2c48fb9c271b2728be33c6101","path":"syncfusion_flutter_pdfviewer.debug.xcconfig","sourceTree":"","type":"file"},{"fileType":"text.xcconfig","guid":"bfdfe7dc352907fc980b868725387e98029debb13536e6240d86d056b253ac21","path":"syncfusion_flutter_pdfviewer.release.xcconfig","sourceTree":"","type":"file"}],"guid":"bfdfe7dc352907fc980b868725387e9800c0f9f91c852b221b37cecf2f479c3f","name":"Support Files","path":"../../../../Pods/Target Support Files/syncfusion_flutter_pdfviewer","sourceTree":"","type":"group"}],"guid":"bfdfe7dc352907fc980b868725387e986405124520db5bbc660c502b34a6f3b1","name":"syncfusion_flutter_pdfviewer","path":"../.symlinks/plugins/syncfusion_flutter_pdfviewer/ios","sourceTree":"","type":"group"},{"children":[{"children":[{"children":[{"children":[{"children":[{"children":[{"children":[{"children":[{"children":[{"children":[{"children":[{"children":[{"children":[{"children":[{"children":[{"children":[{"children":[{"children":[{"children":[{"children":[{"children":[{"children":[{"children":[{"fileType":"text.xml","guid":"bfdfe7dc352907fc980b868725387e980ee24ebd45c579186ae60d129b553bed","path":"../../../../../../../../../../../../../.pub-cache/hosted/pub.dev/url_launcher_ios-6.3.3/ios/url_launcher_ios/Sources/url_launcher_ios/Resources/PrivacyInfo.xcprivacy","sourceTree":"","type":"file"}],"guid":"bfdfe7dc352907fc980b868725387e983d2890ba5d2b8b269c748965a331730f","name":"Resources","path":"Resources","sourceTree":"","type":"group"}],"guid":"bfdfe7dc352907fc980b868725387e987520c262b6c2e979764aed69fdf32580","name":"url_launcher_ios","path":"url_launcher_ios","sourceTree":"","type":"group"}],"guid":"bfdfe7dc352907fc980b868725387e989c722067f6a359083dda4e1536613554","name":"Sources","path":"Sources","sourceTree":"","type":"group"}],"guid":"bfdfe7dc352907fc980b868725387e9858c8c92512b49fbe6824f8b48f6c0dc6","name":"url_launcher_ios","path":"url_launcher_ios","sourceTree":"","type":"group"}],"guid":"bfdfe7dc352907fc980b868725387e98d87575751022a51df7df777f5818d930","name":"ios","path":"ios","sourceTree":"","type":"group"}],"guid":"bfdfe7dc352907fc980b868725387e9819e6d8989c33a6c0f519379ed13a2963","name":"url_launcher_ios","path":"url_launcher_ios","sourceTree":"","type":"group"}],"guid":"bfdfe7dc352907fc980b868725387e98d3ecfc14f6db2f1e8f0cef6667055759","name":"plugins","path":"plugins","sourceTree":"","type":"group"}],"guid":"bfdfe7dc352907fc980b868725387e98df65b3e5e40d04dc670a86423b2533e3","name":".symlinks","path":".symlinks","sourceTree":"","type":"group"}],"guid":"bfdfe7dc352907fc980b868725387e9859baa4fef5a224f6957b22b0e5995c23","name":"ios","path":"ios","sourceTree":"","type":"group"}],"guid":"bfdfe7dc352907fc980b868725387e986cbb1861a8f18a765aad58ce5f42505d","name":"mih_ui","path":"mih_ui","sourceTree":"","type":"group"}],"guid":"bfdfe7dc352907fc980b868725387e98f6c7572d23448bd4432b9a80fa50c814","name":"mih-project","path":"mih-project","sourceTree":"","type":"group"}],"guid":"bfdfe7dc352907fc980b868725387e980170d6e7944e19473dc55e89ca1efe4e","name":"mih_main","path":"mih_main","sourceTree":"","type":"group"}],"guid":"bfdfe7dc352907fc980b868725387e98b15defc0cd422ee3772c3c0fca9df85c","name":"Git","path":"Git","sourceTree":"","type":"group"}],"guid":"bfdfe7dc352907fc980b868725387e9849d868a4281d70fcc25e81e90964831e","name":"..","path":".","sourceTree":"","type":"group"},{"children":[{"children":[{"children":[{"children":[{"children":[{"children":[{"children":[{"children":[{"children":[{"children":[{"children":[{"children":[{"fileType":"sourcecode.swift","guid":"bfdfe7dc352907fc980b868725387e988b923c7f69904073f11cfb33f486be4e","path":"../../../../../../../../../../../../.pub-cache/hosted/pub.dev/url_launcher_ios-6.3.3/ios/url_launcher_ios/Sources/url_launcher_ios/Launcher.swift","sourceTree":"","type":"file"},{"fileType":"sourcecode.swift","guid":"bfdfe7dc352907fc980b868725387e981f993b8fa34154c706d827a98b25e1b7","path":"../../../../../../../../../../../../.pub-cache/hosted/pub.dev/url_launcher_ios-6.3.3/ios/url_launcher_ios/Sources/url_launcher_ios/messages.g.swift","sourceTree":"","type":"file"},{"fileType":"sourcecode.swift","guid":"bfdfe7dc352907fc980b868725387e984136e6ab77e9cac49cc5bb8eca9cdee4","path":"../../../../../../../../../../../../.pub-cache/hosted/pub.dev/url_launcher_ios-6.3.3/ios/url_launcher_ios/Sources/url_launcher_ios/URLLauncherPlugin.swift","sourceTree":"","type":"file"},{"fileType":"sourcecode.swift","guid":"bfdfe7dc352907fc980b868725387e9873c2ef5634c43bf05dc1b4493b3cc0b5","path":"../../../../../../../../../../../../.pub-cache/hosted/pub.dev/url_launcher_ios-6.3.3/ios/url_launcher_ios/Sources/url_launcher_ios/URLLaunchSession.swift","sourceTree":"","type":"file"}],"guid":"bfdfe7dc352907fc980b868725387e98f7a951a8e510f5c77a167fa5f406f30b","name":"url_launcher_ios","path":"url_launcher_ios","sourceTree":"","type":"group"}],"guid":"bfdfe7dc352907fc980b868725387e988076b64b29be3aa0ae63152231c08121","name":"Sources","path":"Sources","sourceTree":"","type":"group"}],"guid":"bfdfe7dc352907fc980b868725387e984333c1daf9320db8d4305234533ac190","name":"url_launcher_ios","path":"url_launcher_ios","sourceTree":"","type":"group"}],"guid":"bfdfe7dc352907fc980b868725387e98b21c586a7e355d208732425a25de3120","name":"ios","path":"ios","sourceTree":"","type":"group"}],"guid":"bfdfe7dc352907fc980b868725387e9846c810908615f89ab4002301193dabdd","name":"url_launcher_ios","path":"url_launcher_ios","sourceTree":"","type":"group"}],"guid":"bfdfe7dc352907fc980b868725387e980dc4bca2f03c988785c812e28bcb6977","name":"plugins","path":"plugins","sourceTree":"","type":"group"}],"guid":"bfdfe7dc352907fc980b868725387e9819edfc49fd527d321efc12a0ece4ebc5","name":".symlinks","path":".symlinks","sourceTree":"","type":"group"}],"guid":"bfdfe7dc352907fc980b868725387e984e76f9c29de1caa99df42e1843192668","name":"ios","path":"ios","sourceTree":"","type":"group"}],"guid":"bfdfe7dc352907fc980b868725387e986c2696a5a32da72599133df7fcbb834e","name":"mih_ui","path":"mih_ui","sourceTree":"","type":"group"}],"guid":"bfdfe7dc352907fc980b868725387e98696f7e811412224e394426b9c2d2d0b3","name":"mih-project","path":"mih-project","sourceTree":"","type":"group"}],"guid":"bfdfe7dc352907fc980b868725387e985658e8b040b574f365203f09537074bf","name":"mih_main","path":"mih_main","sourceTree":"","type":"group"}],"guid":"bfdfe7dc352907fc980b868725387e98ece97ae1843dbb5501f96a0f66b436e7","name":"Git","path":"Git","sourceTree":"","type":"group"}],"guid":"bfdfe7dc352907fc980b868725387e984535507c482b7d2a985b233a26beefa0","name":"..","path":"..","sourceTree":"","type":"group"}],"guid":"bfdfe7dc352907fc980b868725387e9827ebd5bbdcb0658dcdca8d6fe4694f59","name":"..","path":"..","sourceTree":"","type":"group"}],"guid":"bfdfe7dc352907fc980b868725387e9894fa141c55a394fd3e5af8000bf7171a","name":"..","path":"..","sourceTree":"","type":"group"}],"guid":"bfdfe7dc352907fc980b868725387e9805ff6868c01273fe2b08de00332fd407","name":"..","path":"..","sourceTree":"","type":"group"}],"guid":"bfdfe7dc352907fc980b868725387e98305d7b742e47a78e158d75cc79761002","name":"..","path":"..","sourceTree":"","type":"group"}],"guid":"bfdfe7dc352907fc980b868725387e9867d1b2556e9e5a7f8c774f33c555d794","name":"..","path":"..","sourceTree":"","type":"group"}],"guid":"bfdfe7dc352907fc980b868725387e989c312a0089ac5da7bc277df82ce310c9","name":"..","path":"..","sourceTree":"","type":"group"}],"guid":"bfdfe7dc352907fc980b868725387e987569535e74f4a5e60b7fb32576cd6292","name":"..","path":"../../../../../../../../../.pub-cache/hosted/pub.dev/url_launcher_ios-6.3.3/ios/url_launcher_ios/Sources","sourceTree":"","type":"group"},{"children":[{"fileType":"text","guid":"bfdfe7dc352907fc980b868725387e983fc96bbb2314238fd6b66a3010e2da59","path":"../../../../../../../../../.pub-cache/hosted/pub.dev/url_launcher_ios-6.3.3/LICENSE","sourceTree":"","type":"file"},{"fileType":"text.script.ruby","guid":"bfdfe7dc352907fc980b868725387e981b8afb2a57a8b22a69787c6c3021c344","path":"../../../../../../../../../.pub-cache/hosted/pub.dev/url_launcher_ios-6.3.3/ios/url_launcher_ios.podspec","sourceTree":"","type":"file"}],"guid":"bfdfe7dc352907fc980b868725387e98e7e46da2c78b474b1f377a2a5200b24e","name":"Pod","path":"","sourceTree":"","type":"group"},{"children":[{"fileType":"text.plist.xml","guid":"bfdfe7dc352907fc980b868725387e981afd7e37c2302b41538c45325ea46350","path":"ResourceBundle-url_launcher_ios_privacy-url_launcher_ios-Info.plist","sourceTree":"","type":"file"},{"fileType":"sourcecode.module-map","guid":"bfdfe7dc352907fc980b868725387e98801fa898db7d7e32d77d6db2a1f7cecd","path":"url_launcher_ios.modulemap","sourceTree":"","type":"file"},{"fileType":"sourcecode.c.objc","guid":"bfdfe7dc352907fc980b868725387e98dfc96d715d809f6ba8cb9e157b3e9dea","path":"url_launcher_ios-dummy.m","sourceTree":"","type":"file"},{"fileType":"text.plist.xml","guid":"bfdfe7dc352907fc980b868725387e9834025b90949043ebbfb75a96412e3376","path":"url_launcher_ios-Info.plist","sourceTree":"","type":"file"},{"fileType":"sourcecode.c.h","guid":"bfdfe7dc352907fc980b868725387e98a71cb6b5b12314ddf260df4fa2971d1b","path":"url_launcher_ios-prefix.pch","sourceTree":"","type":"file"},{"fileType":"sourcecode.c.h","guid":"bfdfe7dc352907fc980b868725387e9806f3adb2e55f13bf793c40eca5d3b6b1","path":"url_launcher_ios-umbrella.h","sourceTree":"","type":"file"},{"fileType":"text.xcconfig","guid":"bfdfe7dc352907fc980b868725387e986b056fb7813eab8b622dbbdb4b6201da","path":"url_launcher_ios.debug.xcconfig","sourceTree":"","type":"file"},{"fileType":"text.xcconfig","guid":"bfdfe7dc352907fc980b868725387e982e8b062cb2e7d8455d114188a1500a94","path":"url_launcher_ios.release.xcconfig","sourceTree":"","type":"file"}],"guid":"bfdfe7dc352907fc980b868725387e98d70cf7d694633b07145f76f63d1daf60","name":"Support Files","path":"../../../../Pods/Target Support Files/url_launcher_ios","sourceTree":"","type":"group"}],"guid":"bfdfe7dc352907fc980b868725387e98154d1a1da41b6ca907f1f93121bbccc3","name":"url_launcher_ios","path":"../.symlinks/plugins/url_launcher_ios/ios","sourceTree":"","type":"group"},{"children":[{"children":[{"children":[{"children":[{"children":[{"children":[{"children":[{"children":[{"children":[{"children":[{"children":[{"children":[{"children":[{"children":[{"children":[{"children":[{"children":[{"children":[{"children":[{"children":[{"children":[{"children":[{"children":[{"fileType":"text.xml","guid":"bfdfe7dc352907fc980b868725387e9835179e6884138d623d1c2669625be172","path":"../../../../../../../../../../../../../.pub-cache/hosted/pub.dev/webview_flutter_wkwebview-3.22.0/darwin/webview_flutter_wkwebview/Sources/webview_flutter_wkwebview/Resources/PrivacyInfo.xcprivacy","sourceTree":"","type":"file"}],"guid":"bfdfe7dc352907fc980b868725387e98b58196d6d929cb727eca51ff4a3f332e","name":"Resources","path":"Resources","sourceTree":"","type":"group"}],"guid":"bfdfe7dc352907fc980b868725387e986cf8af6e1da86e64d914f5c16f15dc58","name":"webview_flutter_wkwebview","path":"webview_flutter_wkwebview","sourceTree":"","type":"group"}],"guid":"bfdfe7dc352907fc980b868725387e9834c41063a580fdcf4a173c7fded36c8a","name":"Sources","path":"Sources","sourceTree":"","type":"group"}],"guid":"bfdfe7dc352907fc980b868725387e98dcd89bf8cb2381907f4c2e0d445ddac7","name":"webview_flutter_wkwebview","path":"webview_flutter_wkwebview","sourceTree":"","type":"group"}],"guid":"bfdfe7dc352907fc980b868725387e98330bb9bfeba52568e79ebcb765dd5382","name":"darwin","path":"darwin","sourceTree":"","type":"group"}],"guid":"bfdfe7dc352907fc980b868725387e98bf1ded961775c6e8cba10375b2d2c67d","name":"webview_flutter_wkwebview","path":"webview_flutter_wkwebview","sourceTree":"","type":"group"}],"guid":"bfdfe7dc352907fc980b868725387e98b026a2e46c415bd79f19fdadefd611d6","name":"plugins","path":"plugins","sourceTree":"","type":"group"}],"guid":"bfdfe7dc352907fc980b868725387e98875b65cbcdaa1429e932dd3b8a651800","name":".symlinks","path":".symlinks","sourceTree":"","type":"group"}],"guid":"bfdfe7dc352907fc980b868725387e98220e4856ff0e495cfe0fbe92563b05ad","name":"ios","path":"ios","sourceTree":"","type":"group"}],"guid":"bfdfe7dc352907fc980b868725387e981ee67f07af35a222236d2e377be24584","name":"mih_ui","path":"mih_ui","sourceTree":"","type":"group"}],"guid":"bfdfe7dc352907fc980b868725387e981dbf8ebc1fd79bffb781145e48542a3c","name":"mih-project","path":"mih-project","sourceTree":"","type":"group"}],"guid":"bfdfe7dc352907fc980b868725387e98505954285a7918a2eb0b12e43345cffb","name":"mih_main","path":"mih_main","sourceTree":"","type":"group"}],"guid":"bfdfe7dc352907fc980b868725387e98715ead64085d97a2cf3d2582b3016b5a","name":"Git","path":"Git","sourceTree":"","type":"group"}],"guid":"bfdfe7dc352907fc980b868725387e98235da93c52be11c66c714582d9ea97b3","name":"..","path":".","sourceTree":"","type":"group"},{"children":[{"children":[{"children":[{"children":[{"children":[{"children":[{"children":[{"children":[{"children":[{"children":[{"children":[{"children":[{"fileType":"sourcecode.swift","guid":"bfdfe7dc352907fc980b868725387e986ae0ecde56284e1c58ce266e014e4407","path":"../../../../../../../../../../../../.pub-cache/hosted/pub.dev/webview_flutter_wkwebview-3.22.0/darwin/webview_flutter_wkwebview/Sources/webview_flutter_wkwebview/AuthenticationChallengeResponse.swift","sourceTree":"","type":"file"},{"fileType":"sourcecode.swift","guid":"bfdfe7dc352907fc980b868725387e98ffad4f1ea24597bdb838ed18709ce0bc","path":"../../../../../../../../../../../../.pub-cache/hosted/pub.dev/webview_flutter_wkwebview-3.22.0/darwin/webview_flutter_wkwebview/Sources/webview_flutter_wkwebview/AuthenticationChallengeResponseProxyAPIDelegate.swift","sourceTree":"","type":"file"},{"fileType":"sourcecode.swift","guid":"bfdfe7dc352907fc980b868725387e986cf40d51c23844c27b2d3847574a999b","path":"../../../../../../../../../../../../.pub-cache/hosted/pub.dev/webview_flutter_wkwebview-3.22.0/darwin/webview_flutter_wkwebview/Sources/webview_flutter_wkwebview/ErrorProxyAPIDelegate.swift","sourceTree":"","type":"file"},{"fileType":"sourcecode.swift","guid":"bfdfe7dc352907fc980b868725387e98ccb07914d3f2ac2700b37e1af527dcb6","path":"../../../../../../../../../../../../.pub-cache/hosted/pub.dev/webview_flutter_wkwebview-3.22.0/darwin/webview_flutter_wkwebview/Sources/webview_flutter_wkwebview/FlutterAssetManager.swift","sourceTree":"","type":"file"},{"fileType":"sourcecode.swift","guid":"bfdfe7dc352907fc980b868725387e98c274a9bb2f458649df20b73def238a31","path":"../../../../../../../../../../../../.pub-cache/hosted/pub.dev/webview_flutter_wkwebview-3.22.0/darwin/webview_flutter_wkwebview/Sources/webview_flutter_wkwebview/FlutterViewFactory.swift","sourceTree":"","type":"file"},{"fileType":"sourcecode.swift","guid":"bfdfe7dc352907fc980b868725387e98b087fab6a6147e88ea8188b98eb479b2","path":"../../../../../../../../../../../../.pub-cache/hosted/pub.dev/webview_flutter_wkwebview-3.22.0/darwin/webview_flutter_wkwebview/Sources/webview_flutter_wkwebview/FrameInfoProxyAPIDelegate.swift","sourceTree":"","type":"file"},{"fileType":"sourcecode.swift","guid":"bfdfe7dc352907fc980b868725387e983f800f06f13b5c13b4116ae2800ebd62","path":"../../../../../../../../../../../../.pub-cache/hosted/pub.dev/webview_flutter_wkwebview-3.22.0/darwin/webview_flutter_wkwebview/Sources/webview_flutter_wkwebview/GetTrustResultResponse.swift","sourceTree":"","type":"file"},{"fileType":"sourcecode.swift","guid":"bfdfe7dc352907fc980b868725387e9858a1908524c1677a38ba9bec48112f5d","path":"../../../../../../../../../../../../.pub-cache/hosted/pub.dev/webview_flutter_wkwebview-3.22.0/darwin/webview_flutter_wkwebview/Sources/webview_flutter_wkwebview/GetTrustResultResponseProxyAPIDelegate.swift","sourceTree":"","type":"file"},{"fileType":"sourcecode.swift","guid":"bfdfe7dc352907fc980b868725387e98936d1a39e1338c5cff1f46f1bdcbd970","path":"../../../../../../../../../../../../.pub-cache/hosted/pub.dev/webview_flutter_wkwebview-3.22.0/darwin/webview_flutter_wkwebview/Sources/webview_flutter_wkwebview/HTTPCookieProxyAPIDelegate.swift","sourceTree":"","type":"file"},{"fileType":"sourcecode.swift","guid":"bfdfe7dc352907fc980b868725387e98b7c272896c5e5a1f7466f96e730ef7f7","path":"../../../../../../../../../../../../.pub-cache/hosted/pub.dev/webview_flutter_wkwebview-3.22.0/darwin/webview_flutter_wkwebview/Sources/webview_flutter_wkwebview/HTTPCookieStoreProxyAPIDelegate.swift","sourceTree":"","type":"file"},{"fileType":"sourcecode.swift","guid":"bfdfe7dc352907fc980b868725387e98c92dad67cbc17d9bb7df16017787161e","path":"../../../../../../../../../../../../.pub-cache/hosted/pub.dev/webview_flutter_wkwebview-3.22.0/darwin/webview_flutter_wkwebview/Sources/webview_flutter_wkwebview/HTTPURLResponseProxyAPIDelegate.swift","sourceTree":"","type":"file"},{"fileType":"sourcecode.swift","guid":"bfdfe7dc352907fc980b868725387e989c9816f986731e3e1d1441ad2f76dc0e","path":"../../../../../../../../../../../../.pub-cache/hosted/pub.dev/webview_flutter_wkwebview-3.22.0/darwin/webview_flutter_wkwebview/Sources/webview_flutter_wkwebview/NavigationActionProxyAPIDelegate.swift","sourceTree":"","type":"file"},{"fileType":"sourcecode.swift","guid":"bfdfe7dc352907fc980b868725387e9880ed52f43c3c027879cb9c6fa4a7ad00","path":"../../../../../../../../../../../../.pub-cache/hosted/pub.dev/webview_flutter_wkwebview-3.22.0/darwin/webview_flutter_wkwebview/Sources/webview_flutter_wkwebview/NavigationDelegateProxyAPIDelegate.swift","sourceTree":"","type":"file"},{"fileType":"sourcecode.swift","guid":"bfdfe7dc352907fc980b868725387e98978f7d76a4c8e6fe24dc8571670abd23","path":"../../../../../../../../../../../../.pub-cache/hosted/pub.dev/webview_flutter_wkwebview-3.22.0/darwin/webview_flutter_wkwebview/Sources/webview_flutter_wkwebview/NavigationResponseProxyAPIDelegate.swift","sourceTree":"","type":"file"},{"fileType":"sourcecode.swift","guid":"bfdfe7dc352907fc980b868725387e986681d4e22fff219fca4ec770df70c9e1","path":"../../../../../../../../../../../../.pub-cache/hosted/pub.dev/webview_flutter_wkwebview-3.22.0/darwin/webview_flutter_wkwebview/Sources/webview_flutter_wkwebview/NSObjectProxyAPIDelegate.swift","sourceTree":"","type":"file"},{"fileType":"sourcecode.swift","guid":"bfdfe7dc352907fc980b868725387e98d4eec0353bf3d879db362a265046b0e7","path":"../../../../../../../../../../../../.pub-cache/hosted/pub.dev/webview_flutter_wkwebview-3.22.0/darwin/webview_flutter_wkwebview/Sources/webview_flutter_wkwebview/PreferencesProxyAPIDelegate.swift","sourceTree":"","type":"file"},{"fileType":"sourcecode.swift","guid":"bfdfe7dc352907fc980b868725387e980d2fd3010d16903a103f41c3d714b7e9","path":"../../../../../../../../../../../../.pub-cache/hosted/pub.dev/webview_flutter_wkwebview-3.22.0/darwin/webview_flutter_wkwebview/Sources/webview_flutter_wkwebview/ProxyAPIRegistrar.swift","sourceTree":"","type":"file"},{"fileType":"sourcecode.swift","guid":"bfdfe7dc352907fc980b868725387e988a05d69eb8d96765483690bed6c8821a","path":"../../../../../../../../../../../../.pub-cache/hosted/pub.dev/webview_flutter_wkwebview-3.22.0/darwin/webview_flutter_wkwebview/Sources/webview_flutter_wkwebview/ScriptMessageHandlerProxyAPIDelegate.swift","sourceTree":"","type":"file"},{"fileType":"sourcecode.swift","guid":"bfdfe7dc352907fc980b868725387e98758323be30595585a4e9d22cb3236be5","path":"../../../../../../../../../../../../.pub-cache/hosted/pub.dev/webview_flutter_wkwebview-3.22.0/darwin/webview_flutter_wkwebview/Sources/webview_flutter_wkwebview/ScriptMessageProxyAPIDelegate.swift","sourceTree":"","type":"file"},{"fileType":"sourcecode.swift","guid":"bfdfe7dc352907fc980b868725387e98b4d68270040b8330c48a9bfda2ee1f78","path":"../../../../../../../../../../../../.pub-cache/hosted/pub.dev/webview_flutter_wkwebview-3.22.0/darwin/webview_flutter_wkwebview/Sources/webview_flutter_wkwebview/ScrollViewDelegateProxyAPIDelegate.swift","sourceTree":"","type":"file"},{"fileType":"sourcecode.swift","guid":"bfdfe7dc352907fc980b868725387e98e3f1b198c65452c6f005bd694e225209","path":"../../../../../../../../../../../../.pub-cache/hosted/pub.dev/webview_flutter_wkwebview-3.22.0/darwin/webview_flutter_wkwebview/Sources/webview_flutter_wkwebview/ScrollViewProxyAPIDelegate.swift","sourceTree":"","type":"file"},{"fileType":"sourcecode.swift","guid":"bfdfe7dc352907fc980b868725387e983ea44e48c15b67058eab146e81a72a1b","path":"../../../../../../../../../../../../.pub-cache/hosted/pub.dev/webview_flutter_wkwebview-3.22.0/darwin/webview_flutter_wkwebview/Sources/webview_flutter_wkwebview/SecCertificateProxyAPIDelegate.swift","sourceTree":"","type":"file"},{"fileType":"sourcecode.swift","guid":"bfdfe7dc352907fc980b868725387e9847e082023cbf1f0ad654c010c16055b9","path":"../../../../../../../../../../../../.pub-cache/hosted/pub.dev/webview_flutter_wkwebview-3.22.0/darwin/webview_flutter_wkwebview/Sources/webview_flutter_wkwebview/SecTrustProxyAPIDelegate.swift","sourceTree":"","type":"file"},{"fileType":"sourcecode.swift","guid":"bfdfe7dc352907fc980b868725387e9888e40043e949782763c5e735d32e3a70","path":"../../../../../../../../../../../../.pub-cache/hosted/pub.dev/webview_flutter_wkwebview-3.22.0/darwin/webview_flutter_wkwebview/Sources/webview_flutter_wkwebview/SecurityOriginProxyAPIDelegate.swift","sourceTree":"","type":"file"},{"fileType":"sourcecode.swift","guid":"bfdfe7dc352907fc980b868725387e9881237e59a4bd058f54f8676a7cd5b107","path":"../../../../../../../../../../../../.pub-cache/hosted/pub.dev/webview_flutter_wkwebview-3.22.0/darwin/webview_flutter_wkwebview/Sources/webview_flutter_wkwebview/SecWrappers.swift","sourceTree":"","type":"file"},{"fileType":"sourcecode.swift","guid":"bfdfe7dc352907fc980b868725387e985a450fed3b83a420034fb96375aeaa79","path":"../../../../../../../../../../../../.pub-cache/hosted/pub.dev/webview_flutter_wkwebview-3.22.0/darwin/webview_flutter_wkwebview/Sources/webview_flutter_wkwebview/StructWrappers.swift","sourceTree":"","type":"file"},{"fileType":"sourcecode.swift","guid":"bfdfe7dc352907fc980b868725387e98f452d1e497caac321e297e891b43bdb8","path":"../../../../../../../../../../../../.pub-cache/hosted/pub.dev/webview_flutter_wkwebview-3.22.0/darwin/webview_flutter_wkwebview/Sources/webview_flutter_wkwebview/UIDelegateProxyAPIDelegate.swift","sourceTree":"","type":"file"},{"fileType":"sourcecode.swift","guid":"bfdfe7dc352907fc980b868725387e9813ac29d09ae3837e5525c4b1de95e553","path":"../../../../../../../../../../../../.pub-cache/hosted/pub.dev/webview_flutter_wkwebview-3.22.0/darwin/webview_flutter_wkwebview/Sources/webview_flutter_wkwebview/UIViewProxyAPIDelegate.swift","sourceTree":"","type":"file"},{"fileType":"sourcecode.swift","guid":"bfdfe7dc352907fc980b868725387e98fb109f357f6fb05d543e2466bcb69c4d","path":"../../../../../../../../../../../../.pub-cache/hosted/pub.dev/webview_flutter_wkwebview-3.22.0/darwin/webview_flutter_wkwebview/Sources/webview_flutter_wkwebview/URLAuthenticationChallengeProxyAPIDelegate.swift","sourceTree":"","type":"file"},{"fileType":"sourcecode.swift","guid":"bfdfe7dc352907fc980b868725387e98823c5c55a09222a1e95e42f7723b1e09","path":"../../../../../../../../../../../../.pub-cache/hosted/pub.dev/webview_flutter_wkwebview-3.22.0/darwin/webview_flutter_wkwebview/Sources/webview_flutter_wkwebview/URLCredentialProxyAPIDelegate.swift","sourceTree":"","type":"file"},{"fileType":"sourcecode.swift","guid":"bfdfe7dc352907fc980b868725387e98d37a1bf89227943cc5f9bf8dedaec4de","path":"../../../../../../../../../../../../.pub-cache/hosted/pub.dev/webview_flutter_wkwebview-3.22.0/darwin/webview_flutter_wkwebview/Sources/webview_flutter_wkwebview/URLProtectionSpaceProxyAPIDelegate.swift","sourceTree":"","type":"file"},{"fileType":"sourcecode.swift","guid":"bfdfe7dc352907fc980b868725387e9809ccb0b60ddd3aa24d201b1fbbf78872","path":"../../../../../../../../../../../../.pub-cache/hosted/pub.dev/webview_flutter_wkwebview-3.22.0/darwin/webview_flutter_wkwebview/Sources/webview_flutter_wkwebview/URLProxyAPIDelegate.swift","sourceTree":"","type":"file"},{"fileType":"sourcecode.swift","guid":"bfdfe7dc352907fc980b868725387e985e9a33b760a4323436cf8a2ac5237f2c","path":"../../../../../../../../../../../../.pub-cache/hosted/pub.dev/webview_flutter_wkwebview-3.22.0/darwin/webview_flutter_wkwebview/Sources/webview_flutter_wkwebview/URLRequestProxyAPIDelegate.swift","sourceTree":"","type":"file"},{"fileType":"sourcecode.swift","guid":"bfdfe7dc352907fc980b868725387e98507cc65c36bbdd5e0f5f59644120aa86","path":"../../../../../../../../../../../../.pub-cache/hosted/pub.dev/webview_flutter_wkwebview-3.22.0/darwin/webview_flutter_wkwebview/Sources/webview_flutter_wkwebview/UserContentControllerProxyAPIDelegate.swift","sourceTree":"","type":"file"},{"fileType":"sourcecode.swift","guid":"bfdfe7dc352907fc980b868725387e985144a306910625f395b522423bd48599","path":"../../../../../../../../../../../../.pub-cache/hosted/pub.dev/webview_flutter_wkwebview-3.22.0/darwin/webview_flutter_wkwebview/Sources/webview_flutter_wkwebview/UserScriptProxyAPIDelegate.swift","sourceTree":"","type":"file"},{"fileType":"sourcecode.swift","guid":"bfdfe7dc352907fc980b868725387e983eb7aeab09594d1843bdb8ee61e437b3","path":"../../../../../../../../../../../../.pub-cache/hosted/pub.dev/webview_flutter_wkwebview-3.22.0/darwin/webview_flutter_wkwebview/Sources/webview_flutter_wkwebview/WebKitLibrary.g.swift","sourceTree":"","type":"file"},{"fileType":"sourcecode.swift","guid":"bfdfe7dc352907fc980b868725387e98d5f967adad441e2ff1ad91ba479d4fcd","path":"../../../../../../../../../../../../.pub-cache/hosted/pub.dev/webview_flutter_wkwebview-3.22.0/darwin/webview_flutter_wkwebview/Sources/webview_flutter_wkwebview/WebpagePreferencesProxyAPIDelegate.swift","sourceTree":"","type":"file"},{"fileType":"sourcecode.swift","guid":"bfdfe7dc352907fc980b868725387e987d4bd25f4b769d8f640b3dd0b8ae5a1c","path":"../../../../../../../../../../../../.pub-cache/hosted/pub.dev/webview_flutter_wkwebview-3.22.0/darwin/webview_flutter_wkwebview/Sources/webview_flutter_wkwebview/WebsiteDataStoreProxyAPIDelegate.swift","sourceTree":"","type":"file"},{"fileType":"sourcecode.swift","guid":"bfdfe7dc352907fc980b868725387e986201e1488ad29294b96f9cba25c0615c","path":"../../../../../../../../../../../../.pub-cache/hosted/pub.dev/webview_flutter_wkwebview-3.22.0/darwin/webview_flutter_wkwebview/Sources/webview_flutter_wkwebview/WebViewConfigurationProxyAPIDelegate.swift","sourceTree":"","type":"file"},{"fileType":"sourcecode.swift","guid":"bfdfe7dc352907fc980b868725387e9861f6692e45bf40cd6897b227a33ace1d","path":"../../../../../../../../../../../../.pub-cache/hosted/pub.dev/webview_flutter_wkwebview-3.22.0/darwin/webview_flutter_wkwebview/Sources/webview_flutter_wkwebview/WebViewFlutterPlugin.swift","sourceTree":"","type":"file"},{"fileType":"sourcecode.swift","guid":"bfdfe7dc352907fc980b868725387e98639301e9eea43149be010207d55747c9","path":"../../../../../../../../../../../../.pub-cache/hosted/pub.dev/webview_flutter_wkwebview-3.22.0/darwin/webview_flutter_wkwebview/Sources/webview_flutter_wkwebview/WebViewFlutterWKWebViewExternalAPI.swift","sourceTree":"","type":"file"},{"fileType":"sourcecode.swift","guid":"bfdfe7dc352907fc980b868725387e98494f5fc7ec16230a398c9f181fa0e807","path":"../../../../../../../../../../../../.pub-cache/hosted/pub.dev/webview_flutter_wkwebview-3.22.0/darwin/webview_flutter_wkwebview/Sources/webview_flutter_wkwebview/WebViewProxyAPIDelegate.swift","sourceTree":"","type":"file"}],"guid":"bfdfe7dc352907fc980b868725387e9887ed74d2206a86b64035c6235eb880f6","name":"webview_flutter_wkwebview","path":"webview_flutter_wkwebview","sourceTree":"","type":"group"}],"guid":"bfdfe7dc352907fc980b868725387e98f837658afc62b58eb35f97b4aed0911b","name":"Sources","path":"Sources","sourceTree":"","type":"group"}],"guid":"bfdfe7dc352907fc980b868725387e98cc1df8469fe93283799d16ba719853cd","name":"webview_flutter_wkwebview","path":"webview_flutter_wkwebview","sourceTree":"","type":"group"}],"guid":"bfdfe7dc352907fc980b868725387e984b895be428eb62faecfa1d08b3027c3e","name":"darwin","path":"darwin","sourceTree":"","type":"group"}],"guid":"bfdfe7dc352907fc980b868725387e982f3ce22c660c05014650f2141be351cb","name":"webview_flutter_wkwebview","path":"webview_flutter_wkwebview","sourceTree":"","type":"group"}],"guid":"bfdfe7dc352907fc980b868725387e98f7efc2891320ad7d23a9595c044f24c9","name":"plugins","path":"plugins","sourceTree":"","type":"group"}],"guid":"bfdfe7dc352907fc980b868725387e98998268b88352c706bd623fa125d78e14","name":".symlinks","path":".symlinks","sourceTree":"","type":"group"}],"guid":"bfdfe7dc352907fc980b868725387e98abca3298a5bbc0bb4dd9d8cf1a74bdfe","name":"ios","path":"ios","sourceTree":"","type":"group"}],"guid":"bfdfe7dc352907fc980b868725387e983142103ba60fc80021c44c082cbb2085","name":"mih_ui","path":"mih_ui","sourceTree":"","type":"group"}],"guid":"bfdfe7dc352907fc980b868725387e98bfddf9a72add8798c0680e3a822bd3a3","name":"mih-project","path":"mih-project","sourceTree":"","type":"group"}],"guid":"bfdfe7dc352907fc980b868725387e98903a8d20c712a7208dee388e7930522c","name":"mih_main","path":"mih_main","sourceTree":"","type":"group"}],"guid":"bfdfe7dc352907fc980b868725387e98fd91bff3257c874eb7cab94656aec62a","name":"Git","path":"Git","sourceTree":"","type":"group"}],"guid":"bfdfe7dc352907fc980b868725387e980f7aca0d0e8ccada61efb73023ffbee1","name":"..","path":"..","sourceTree":"","type":"group"}],"guid":"bfdfe7dc352907fc980b868725387e98f2a10bc8d167cbe076b355a408fa1528","name":"..","path":"..","sourceTree":"","type":"group"}],"guid":"bfdfe7dc352907fc980b868725387e983684033a11df7c3dbdc9173f2b967a01","name":"..","path":"..","sourceTree":"","type":"group"}],"guid":"bfdfe7dc352907fc980b868725387e98dad8d4d48da518b4832fe56aa6d7ff26","name":"..","path":"..","sourceTree":"","type":"group"}],"guid":"bfdfe7dc352907fc980b868725387e981f702a8f32c7edf17307d7f348f4da1b","name":"..","path":"..","sourceTree":"","type":"group"}],"guid":"bfdfe7dc352907fc980b868725387e984ac2a3f47720a624cda98c6c63a91a1b","name":"..","path":"..","sourceTree":"","type":"group"}],"guid":"bfdfe7dc352907fc980b868725387e983f1a4db6964609522e21e9f0a5118001","name":"..","path":"..","sourceTree":"","type":"group"}],"guid":"bfdfe7dc352907fc980b868725387e98e2cb78a131c73a2e02585d8c14d7b887","name":"..","path":"../../../../../../../../../.pub-cache/hosted/pub.dev/webview_flutter_wkwebview-3.22.0/darwin/webview_flutter_wkwebview/Sources","sourceTree":"","type":"group"},{"children":[{"fileType":"text","guid":"bfdfe7dc352907fc980b868725387e9824ff62429bccb22ecfe1ee60ed3f0072","path":"../../../../../../../../../.pub-cache/hosted/pub.dev/webview_flutter_wkwebview-3.22.0/LICENSE","sourceTree":"","type":"file"},{"fileType":"text.script.ruby","guid":"bfdfe7dc352907fc980b868725387e986ce959ed8b55c93c838e281b49f59f62","path":"../../../../../../../../../.pub-cache/hosted/pub.dev/webview_flutter_wkwebview-3.22.0/darwin/webview_flutter_wkwebview.podspec","sourceTree":"","type":"file"}],"guid":"bfdfe7dc352907fc980b868725387e9850235b1d0bbef722e3fc04cc5177d23c","name":"Pod","path":"","sourceTree":"","type":"group"},{"children":[{"fileType":"text.plist.xml","guid":"bfdfe7dc352907fc980b868725387e98383792c148c7b66f5320330479ad4069","path":"ResourceBundle-webview_flutter_wkwebview_privacy-webview_flutter_wkwebview-Info.plist","sourceTree":"","type":"file"},{"fileType":"sourcecode.module-map","guid":"bfdfe7dc352907fc980b868725387e9833349cd22b47af494bc42934f0744298","path":"webview_flutter_wkwebview.modulemap","sourceTree":"","type":"file"},{"fileType":"sourcecode.c.objc","guid":"bfdfe7dc352907fc980b868725387e9859611e05685d6f3b5c95a6eec6a330ea","path":"webview_flutter_wkwebview-dummy.m","sourceTree":"","type":"file"},{"fileType":"text.plist.xml","guid":"bfdfe7dc352907fc980b868725387e98a6ceb29d6c56ef325d1f665bba652df2","path":"webview_flutter_wkwebview-Info.plist","sourceTree":"","type":"file"},{"fileType":"sourcecode.c.h","guid":"bfdfe7dc352907fc980b868725387e981acb8967a15abebef01740364c041793","path":"webview_flutter_wkwebview-prefix.pch","sourceTree":"","type":"file"},{"fileType":"sourcecode.c.h","guid":"bfdfe7dc352907fc980b868725387e98be6867ee97e573510941c1420420ae39","path":"webview_flutter_wkwebview-umbrella.h","sourceTree":"","type":"file"},{"fileType":"text.xcconfig","guid":"bfdfe7dc352907fc980b868725387e98d8979ec56d38d5f43a66a4cc2fbcb401","path":"webview_flutter_wkwebview.debug.xcconfig","sourceTree":"","type":"file"},{"fileType":"text.xcconfig","guid":"bfdfe7dc352907fc980b868725387e984206827662d5208f461a0eccfc0e621b","path":"webview_flutter_wkwebview.release.xcconfig","sourceTree":"","type":"file"}],"guid":"bfdfe7dc352907fc980b868725387e980c4cd0ca3d3ff6fcb84398d2a3358a0a","name":"Support Files","path":"../../../../Pods/Target Support Files/webview_flutter_wkwebview","sourceTree":"","type":"group"}],"guid":"bfdfe7dc352907fc980b868725387e984dba023a8957e9dc8093649b3d3333da","name":"webview_flutter_wkwebview","path":"../.symlinks/plugins/webview_flutter_wkwebview/darwin","sourceTree":"","type":"group"}],"guid":"bfdfe7dc352907fc980b868725387e989b4d6c5fa47ecb7daee271dbede5ad52","name":"Development Pods","path":"","sourceTree":"","type":"group"},{"children":[{"children":[{"fileType":"wrapper.framework","guid":"bfdfe7dc352907fc980b868725387e98d6bdeaa5b175cb64de0845531dd3a07a","path":"Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS18.0.sdk/System/Library/Frameworks/AVFoundation.framework","sourceTree":"DEVELOPER_DIR","type":"file"},{"fileType":"wrapper.framework","guid":"bfdfe7dc352907fc980b868725387e98f85abfcd8b98daa4c08612ae63641e69","path":"Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS18.0.sdk/System/Library/Frameworks/AVKit.framework","sourceTree":"DEVELOPER_DIR","type":"file"},{"fileType":"wrapper.framework","guid":"bfdfe7dc352907fc980b868725387e98b14af7c49882340ad551cb13b0a1e06d","path":"Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS18.0.sdk/System/Library/Frameworks/Foundation.framework","sourceTree":"DEVELOPER_DIR","type":"file"},{"fileType":"wrapper.framework","guid":"bfdfe7dc352907fc980b868725387e982680e93f57d9a3d8e73bd93b7e3e0f36","path":"Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS18.0.sdk/System/Library/Frameworks/ImageIO.framework","sourceTree":"DEVELOPER_DIR","type":"file"},{"fileType":"wrapper.framework","guid":"bfdfe7dc352907fc980b868725387e98fc74d0fed09821b42c8c83fca08fddb2","path":"Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS18.0.sdk/System/Library/Frameworks/Photos.framework","sourceTree":"DEVELOPER_DIR","type":"file"},{"fileType":"wrapper.framework","guid":"bfdfe7dc352907fc980b868725387e98e4170aa7f984f5a13b58a3c42c24b3e6","path":"Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS18.0.sdk/System/Library/Frameworks/SafariServices.framework","sourceTree":"DEVELOPER_DIR","type":"file"},{"fileType":"wrapper.framework","guid":"bfdfe7dc352907fc980b868725387e9820c167798bdb228b4ab52bb2aa7eb24b","path":"Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS18.0.sdk/System/Library/Frameworks/Security.framework","sourceTree":"DEVELOPER_DIR","type":"file"},{"fileType":"wrapper.framework","guid":"bfdfe7dc352907fc980b868725387e98e0217d662efb0603efc52f1254a3c7a8","path":"Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS18.0.sdk/System/Library/Frameworks/SystemConfiguration.framework","sourceTree":"DEVELOPER_DIR","type":"file"},{"fileType":"wrapper.framework","guid":"bfdfe7dc352907fc980b868725387e98f2f44ab0d0f0ce315b53d31757eb8db6","path":"Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS18.0.sdk/System/Library/Frameworks/UIKit.framework","sourceTree":"DEVELOPER_DIR","type":"file"}],"guid":"bfdfe7dc352907fc980b868725387e984edace956042c415757881081562809b","name":"iOS","path":"","sourceTree":"","type":"group"}],"guid":"bfdfe7dc352907fc980b868725387e986f57df5597ed36b645cb934c885be56d","name":"Frameworks","path":"","sourceTree":"","type":"group"},{"children":[{"children":[{"fileType":"sourcecode.c.h","guid":"bfdfe7dc352907fc980b868725387e98014d81339f7078c553aad067e2c1e542","path":"AppCheckCore/Sources/Public/AppCheckCore/AppCheckCore.h","sourceTree":"","type":"file"},{"fileType":"sourcecode.c.h","guid":"bfdfe7dc352907fc980b868725387e9828b098957cb273088cb9694f57f6aa9b","path":"AppCheckCore/Sources/AppAttestProvider/DCAppAttestService+GACAppAttestService.h","sourceTree":"","type":"file"},{"fileType":"sourcecode.c.objc","guid":"bfdfe7dc352907fc980b868725387e98eda68ffa8acf6341bdd6764dc69f14ea","path":"AppCheckCore/Sources/AppAttestProvider/DCAppAttestService+GACAppAttestService.m","sourceTree":"","type":"file"},{"fileType":"sourcecode.c.h","guid":"bfdfe7dc352907fc980b868725387e982d5afb74f6affa743e0f460b5372128c","path":"AppCheckCore/Sources/DeviceCheckProvider/DCDevice+GACDeviceCheckTokenGenerator.h","sourceTree":"","type":"file"},{"fileType":"sourcecode.c.objc","guid":"bfdfe7dc352907fc980b868725387e98c82d9f039480b6a3f302f98e59983983","path":"AppCheckCore/Sources/DeviceCheckProvider/DCDevice+GACDeviceCheckTokenGenerator.m","sourceTree":"","type":"file"},{"fileType":"sourcecode.c.h","guid":"bfdfe7dc352907fc980b868725387e98c693a9d5b43f3dd47c9a722b20606f0d","path":"AppCheckCore/Sources/AppAttestProvider/API/GACAppAttestAPIService.h","sourceTree":"","type":"file"},{"fileType":"sourcecode.c.objc","guid":"bfdfe7dc352907fc980b868725387e98539f97205232fdc1451a9f7c8097d9f6","path":"AppCheckCore/Sources/AppAttestProvider/API/GACAppAttestAPIService.m","sourceTree":"","type":"file"},{"fileType":"sourcecode.c.h","guid":"bfdfe7dc352907fc980b868725387e9895fad991994f740ea3a0d0ae15aa1ae4","path":"AppCheckCore/Sources/AppAttestProvider/Storage/GACAppAttestArtifactStorage.h","sourceTree":"","type":"file"},{"fileType":"sourcecode.c.objc","guid":"bfdfe7dc352907fc980b868725387e98b83a24afd65346b2bf12ca652c517f99","path":"AppCheckCore/Sources/AppAttestProvider/Storage/GACAppAttestArtifactStorage.m","sourceTree":"","type":"file"},{"fileType":"sourcecode.c.h","guid":"bfdfe7dc352907fc980b868725387e9879746c4764bdf06155261adb67d0ecda","path":"AppCheckCore/Sources/AppAttestProvider/API/GACAppAttestAttestationResponse.h","sourceTree":"","type":"file"},{"fileType":"sourcecode.c.objc","guid":"bfdfe7dc352907fc980b868725387e98087e9537dc37fc002b865cca978e783c","path":"AppCheckCore/Sources/AppAttestProvider/API/GACAppAttestAttestationResponse.m","sourceTree":"","type":"file"},{"fileType":"sourcecode.c.h","guid":"bfdfe7dc352907fc980b868725387e9858fc7456770843d79df60a4fac1e1f21","path":"AppCheckCore/Sources/AppAttestProvider/Storage/GACAppAttestKeyIDStorage.h","sourceTree":"","type":"file"},{"fileType":"sourcecode.c.objc","guid":"bfdfe7dc352907fc980b868725387e988feba12f52eda30148e94b936a418633","path":"AppCheckCore/Sources/AppAttestProvider/Storage/GACAppAttestKeyIDStorage.m","sourceTree":"","type":"file"},{"fileType":"sourcecode.c.h","guid":"bfdfe7dc352907fc980b868725387e98881b0a9e4c6413cc3a4330c7764cb89e","path":"AppCheckCore/Sources/Public/AppCheckCore/GACAppAttestProvider.h","sourceTree":"","type":"file"},{"fileType":"sourcecode.c.objc","guid":"bfdfe7dc352907fc980b868725387e98577f1fe42e5dc5c2e7e55299acf301aa","path":"AppCheckCore/Sources/AppAttestProvider/GACAppAttestProvider.m","sourceTree":"","type":"file"},{"fileType":"sourcecode.c.h","guid":"bfdfe7dc352907fc980b868725387e98fb187d533907cbad809ebd88436c4a78","path":"AppCheckCore/Sources/AppAttestProvider/GACAppAttestProviderState.h","sourceTree":"","type":"file"},{"fileType":"sourcecode.c.objc","guid":"bfdfe7dc352907fc980b868725387e98358267319aee2a1f6097c2d48c844228","path":"AppCheckCore/Sources/AppAttestProvider/GACAppAttestProviderState.m","sourceTree":"","type":"file"},{"fileType":"sourcecode.c.h","guid":"bfdfe7dc352907fc980b868725387e987f13dc02d10ed5c4ba105bb7b6fbc4e4","path":"AppCheckCore/Sources/AppAttestProvider/Errors/GACAppAttestRejectionError.h","sourceTree":"","type":"file"},{"fileType":"sourcecode.c.objc","guid":"bfdfe7dc352907fc980b868725387e98ca28cb9281f2e84ed045a06550b0e564","path":"AppCheckCore/Sources/AppAttestProvider/Errors/GACAppAttestRejectionError.m","sourceTree":"","type":"file"},{"fileType":"sourcecode.c.h","guid":"bfdfe7dc352907fc980b868725387e98492f8c730664e908ffe340f7496c9f79","path":"AppCheckCore/Sources/AppAttestProvider/GACAppAttestService.h","sourceTree":"","type":"file"},{"fileType":"sourcecode.c.h","guid":"bfdfe7dc352907fc980b868725387e98aea1bf88784f644740e8ef1f765d1763","path":"AppCheckCore/Sources/AppAttestProvider/Storage/GACAppAttestStoredArtifact.h","sourceTree":"","type":"file"},{"fileType":"sourcecode.c.objc","guid":"bfdfe7dc352907fc980b868725387e985813b18e8935c4f95e05bcd74f837249","path":"AppCheckCore/Sources/AppAttestProvider/Storage/GACAppAttestStoredArtifact.m","sourceTree":"","type":"file"},{"fileType":"sourcecode.c.h","guid":"bfdfe7dc352907fc980b868725387e98f0b1f732a61c77e8d848d5868deb0b62","path":"AppCheckCore/Sources/Public/AppCheckCore/GACAppCheck.h","sourceTree":"","type":"file"},{"fileType":"sourcecode.c.objc","guid":"bfdfe7dc352907fc980b868725387e9827ca8bd13e7ceee923e143162527ddf4","path":"AppCheckCore/Sources/Core/GACAppCheck.m","sourceTree":"","type":"file"},{"fileType":"sourcecode.c.h","guid":"bfdfe7dc352907fc980b868725387e9837bc6335678372d578e6d02db1629af0","path":"AppCheckCore/Sources/Core/APIService/GACAppCheckAPIService.h","sourceTree":"","type":"file"},{"fileType":"sourcecode.c.objc","guid":"bfdfe7dc352907fc980b868725387e984e54641bd8600d981f2b8ae39a870e00","path":"AppCheckCore/Sources/Core/APIService/GACAppCheckAPIService.m","sourceTree":"","type":"file"},{"fileType":"sourcecode.c.h","guid":"bfdfe7dc352907fc980b868725387e98c61395722d06659205139c45a25e2676","path":"AppCheckCore/Sources/Public/AppCheckCore/GACAppCheckAvailability.h","sourceTree":"","type":"file"},{"fileType":"sourcecode.c.h","guid":"bfdfe7dc352907fc980b868725387e98da0f4edada96d01491b50b373b8e2d17","path":"AppCheckCore/Sources/Core/Backoff/GACAppCheckBackoffWrapper.h","sourceTree":"","type":"file"},{"fileType":"sourcecode.c.objc","guid":"bfdfe7dc352907fc980b868725387e98174dfe48f0936468875402ed704dabc2","path":"AppCheckCore/Sources/Core/Backoff/GACAppCheckBackoffWrapper.m","sourceTree":"","type":"file"},{"fileType":"sourcecode.c.h","guid":"bfdfe7dc352907fc980b868725387e98b1e121e7f892a1088bfc28fd83c4b2dc","path":"AppCheckCore/Sources/Core/Utils/GACAppCheckCryptoUtils.h","sourceTree":"","type":"file"},{"fileType":"sourcecode.c.objc","guid":"bfdfe7dc352907fc980b868725387e9829007e4ebcafeb1e46a41c025d1c75c6","path":"AppCheckCore/Sources/Core/Utils/GACAppCheckCryptoUtils.m","sourceTree":"","type":"file"},{"fileType":"sourcecode.c.h","guid":"bfdfe7dc352907fc980b868725387e9838ab10c273a7e47d831e4ac8a3a5ac4c","path":"AppCheckCore/Sources/Public/AppCheckCore/GACAppCheckDebugProvider.h","sourceTree":"","type":"file"},{"fileType":"sourcecode.c.objc","guid":"bfdfe7dc352907fc980b868725387e984be13140013cec049e7b151fd1988622","path":"AppCheckCore/Sources/DebugProvider/GACAppCheckDebugProvider.m","sourceTree":"","type":"file"},{"fileType":"sourcecode.c.h","guid":"bfdfe7dc352907fc980b868725387e98dac18db19a745421b5c65b10b4f4d79a","path":"AppCheckCore/Sources/DebugProvider/API/GACAppCheckDebugProviderAPIService.h","sourceTree":"","type":"file"},{"fileType":"sourcecode.c.objc","guid":"bfdfe7dc352907fc980b868725387e9808d0d0571ccc4b7e15d946a45268ab43","path":"AppCheckCore/Sources/DebugProvider/API/GACAppCheckDebugProviderAPIService.m","sourceTree":"","type":"file"},{"fileType":"sourcecode.c.h","guid":"bfdfe7dc352907fc980b868725387e98e1dae2413b60766fd26fdafb05789b08","path":"AppCheckCore/Sources/Public/AppCheckCore/GACAppCheckErrors.h","sourceTree":"","type":"file"},{"fileType":"sourcecode.c.objc","guid":"bfdfe7dc352907fc980b868725387e98f3de26ba5b5c36f5aeffb5c06f1623ec","path":"AppCheckCore/Sources/Core/Errors/GACAppCheckErrors.m","sourceTree":"","type":"file"},{"fileType":"sourcecode.c.h","guid":"bfdfe7dc352907fc980b868725387e9829d2cfb34695f3b70daac392c3ac42be","path":"AppCheckCore/Sources/Core/Errors/GACAppCheckErrorUtil.h","sourceTree":"","type":"file"},{"fileType":"sourcecode.c.objc","guid":"bfdfe7dc352907fc980b868725387e981cf6381f55e9ecb15799f109ba22813e","path":"AppCheckCore/Sources/Core/Errors/GACAppCheckErrorUtil.m","sourceTree":"","type":"file"},{"fileType":"sourcecode.c.h","guid":"bfdfe7dc352907fc980b868725387e9840d287a87e37c64d0a718e1abe22ea0b","path":"AppCheckCore/Sources/Core/Errors/GACAppCheckHTTPError.h","sourceTree":"","type":"file"},{"fileType":"sourcecode.c.objc","guid":"bfdfe7dc352907fc980b868725387e9893049ceada4e29aa457dfc968b35d04d","path":"AppCheckCore/Sources/Core/Errors/GACAppCheckHTTPError.m","sourceTree":"","type":"file"},{"fileType":"sourcecode.c.h","guid":"bfdfe7dc352907fc980b868725387e98cd2ca0d4f82d3b33ee4ad429fe8459b0","path":"AppCheckCore/Sources/Public/AppCheckCore/GACAppCheckLogger.h","sourceTree":"","type":"file"},{"fileType":"sourcecode.c.objc","guid":"bfdfe7dc352907fc980b868725387e983ef18a79e17b5bdc30cb4f2b4274fdb9","path":"AppCheckCore/Sources/Core/GACAppCheckLogger.m","sourceTree":"","type":"file"},{"fileType":"sourcecode.c.h","guid":"bfdfe7dc352907fc980b868725387e98bd9686f220f85a0a984b226ac6bf56e2","path":"AppCheckCore/Sources/Core/GACAppCheckLogger+Internal.h","sourceTree":"","type":"file"},{"fileType":"sourcecode.c.h","guid":"bfdfe7dc352907fc980b868725387e9874128677a6ece04c6192ff43793cd2a3","path":"AppCheckCore/Sources/Public/AppCheckCore/GACAppCheckProvider.h","sourceTree":"","type":"file"},{"fileType":"sourcecode.c.h","guid":"bfdfe7dc352907fc980b868725387e98782156c69d76c8c6493e13d013c7ce68","path":"AppCheckCore/Sources/Public/AppCheckCore/GACAppCheckSettings.h","sourceTree":"","type":"file"},{"fileType":"sourcecode.c.objc","guid":"bfdfe7dc352907fc980b868725387e982441595d23425e7fc95dc3f4a540e4da","path":"AppCheckCore/Sources/Core/GACAppCheckSettings.m","sourceTree":"","type":"file"},{"fileType":"sourcecode.c.h","guid":"bfdfe7dc352907fc980b868725387e986a8e8f52ce1983fc319f91887811f274","path":"AppCheckCore/Sources/Core/Storage/GACAppCheckStorage.h","sourceTree":"","type":"file"},{"fileType":"sourcecode.c.objc","guid":"bfdfe7dc352907fc980b868725387e982b8462cd169d1e0749ac27072f89f63e","path":"AppCheckCore/Sources/Core/Storage/GACAppCheckStorage.m","sourceTree":"","type":"file"},{"fileType":"sourcecode.c.h","guid":"bfdfe7dc352907fc980b868725387e9829195948780728699af6ecdf82603694","path":"AppCheckCore/Sources/Core/Storage/GACAppCheckStoredToken.h","sourceTree":"","type":"file"},{"fileType":"sourcecode.c.objc","guid":"bfdfe7dc352907fc980b868725387e9828e7a28a227cdf431de4bf2858a41bbe","path":"AppCheckCore/Sources/Core/Storage/GACAppCheckStoredToken.m","sourceTree":"","type":"file"},{"fileType":"sourcecode.c.h","guid":"bfdfe7dc352907fc980b868725387e98e10e47fb86648c98be3656c0ccca10e5","path":"AppCheckCore/Sources/Core/Storage/GACAppCheckStoredToken+GACAppCheckToken.h","sourceTree":"","type":"file"},{"fileType":"sourcecode.c.objc","guid":"bfdfe7dc352907fc980b868725387e987533d8eadf98de75a39414c45f84c97a","path":"AppCheckCore/Sources/Core/Storage/GACAppCheckStoredToken+GACAppCheckToken.m","sourceTree":"","type":"file"},{"fileType":"sourcecode.c.h","guid":"bfdfe7dc352907fc980b868725387e9818e104a51a5ccc214c42f6a98edeef45","path":"AppCheckCore/Sources/Core/TokenRefresh/GACAppCheckTimer.h","sourceTree":"","type":"file"},{"fileType":"sourcecode.c.objc","guid":"bfdfe7dc352907fc980b868725387e98f4e9b20932af00aaa09e6fad037bc675","path":"AppCheckCore/Sources/Core/TokenRefresh/GACAppCheckTimer.m","sourceTree":"","type":"file"},{"fileType":"sourcecode.c.h","guid":"bfdfe7dc352907fc980b868725387e98a20441f218b6e5f9df32f6fd2cd3c3a6","path":"AppCheckCore/Sources/Public/AppCheckCore/GACAppCheckToken.h","sourceTree":"","type":"file"},{"fileType":"sourcecode.c.objc","guid":"bfdfe7dc352907fc980b868725387e988d91cc71f5ce438497a6057117f8c354","path":"AppCheckCore/Sources/Core/GACAppCheckToken.m","sourceTree":"","type":"file"},{"fileType":"sourcecode.c.h","guid":"bfdfe7dc352907fc980b868725387e98ab95d45482b4f15cf9b35a49cabce56a","path":"AppCheckCore/Sources/Core/APIService/GACAppCheckToken+APIResponse.h","sourceTree":"","type":"file"},{"fileType":"sourcecode.c.objc","guid":"bfdfe7dc352907fc980b868725387e985f834f5e6923ec908549b8f62a618c71","path":"AppCheckCore/Sources/Core/APIService/GACAppCheckToken+APIResponse.m","sourceTree":"","type":"file"},{"fileType":"sourcecode.c.h","guid":"bfdfe7dc352907fc980b868725387e98ed76d12f5c543a6a57822cdb488c14fc","path":"AppCheckCore/Sources/Public/AppCheckCore/GACAppCheckTokenDelegate.h","sourceTree":"","type":"file"},{"fileType":"sourcecode.c.h","guid":"bfdfe7dc352907fc980b868725387e98835e9bec84d11ab061c8232c82eb1d7e","path":"AppCheckCore/Sources/Core/TokenRefresh/GACAppCheckTokenRefresher.h","sourceTree":"","type":"file"},{"fileType":"sourcecode.c.objc","guid":"bfdfe7dc352907fc980b868725387e98234709d52c7321a4980d4abdb69bdab2","path":"AppCheckCore/Sources/Core/TokenRefresh/GACAppCheckTokenRefresher.m","sourceTree":"","type":"file"},{"fileType":"sourcecode.c.h","guid":"bfdfe7dc352907fc980b868725387e9806f6d128aff99460ffc6c94ba1bc162c","path":"AppCheckCore/Sources/Core/TokenRefresh/GACAppCheckTokenRefreshResult.h","sourceTree":"","type":"file"},{"fileType":"sourcecode.c.objc","guid":"bfdfe7dc352907fc980b868725387e98c749ee5587e64f95f2b09ed09f61b050","path":"AppCheckCore/Sources/Core/TokenRefresh/GACAppCheckTokenRefreshResult.m","sourceTree":"","type":"file"},{"fileType":"sourcecode.c.h","guid":"bfdfe7dc352907fc980b868725387e980c5f74743a1066c09331ff78287d8b6a","path":"AppCheckCore/Sources/Public/AppCheckCore/GACAppCheckTokenResult.h","sourceTree":"","type":"file"},{"fileType":"sourcecode.c.objc","guid":"bfdfe7dc352907fc980b868725387e9848eaaee93b51e8f77bc9842360a966dd","path":"AppCheckCore/Sources/Core/GACAppCheckTokenResult.m","sourceTree":"","type":"file"},{"fileType":"sourcecode.c.h","guid":"bfdfe7dc352907fc980b868725387e98b18aaaf052e27db0b53d9fa8af58d2c2","path":"AppCheckCore/Sources/DeviceCheckProvider/API/GACDeviceCheckAPIService.h","sourceTree":"","type":"file"},{"fileType":"sourcecode.c.objc","guid":"bfdfe7dc352907fc980b868725387e98a68711618db6b4b78c1e1f9eba53a069","path":"AppCheckCore/Sources/DeviceCheckProvider/API/GACDeviceCheckAPIService.m","sourceTree":"","type":"file"},{"fileType":"sourcecode.c.h","guid":"bfdfe7dc352907fc980b868725387e98ea3377b1e0c0bdef3341745d6980d9c2","path":"AppCheckCore/Sources/Public/AppCheckCore/GACDeviceCheckProvider.h","sourceTree":"","type":"file"},{"fileType":"sourcecode.c.objc","guid":"bfdfe7dc352907fc980b868725387e9827dd64bc5511da2695473b94ff768e19","path":"AppCheckCore/Sources/DeviceCheckProvider/GACDeviceCheckProvider.m","sourceTree":"","type":"file"},{"fileType":"sourcecode.c.h","guid":"bfdfe7dc352907fc980b868725387e986d751b4b66302242538b97dc19e6cc3c","path":"AppCheckCore/Sources/DeviceCheckProvider/GACDeviceCheckTokenGenerator.h","sourceTree":"","type":"file"},{"fileType":"sourcecode.c.h","guid":"bfdfe7dc352907fc980b868725387e98a451f8861c61957089616af539f9e48b","path":"AppCheckCore/Sources/Core/APIService/GACURLSessionDataResponse.h","sourceTree":"","type":"file"},{"fileType":"sourcecode.c.objc","guid":"bfdfe7dc352907fc980b868725387e98c0bd7a1ba78b0e4556aa605a1ba1a2e1","path":"AppCheckCore/Sources/Core/APIService/GACURLSessionDataResponse.m","sourceTree":"","type":"file"},{"fileType":"sourcecode.c.h","guid":"bfdfe7dc352907fc980b868725387e98695cb111b5ba9a097c1007af207f49de","path":"AppCheckCore/Sources/Core/APIService/NSURLSession+GACPromises.h","sourceTree":"","type":"file"},{"fileType":"sourcecode.c.objc","guid":"bfdfe7dc352907fc980b868725387e98bbce17ed01d5c32b82156eaf7a9cc458","path":"AppCheckCore/Sources/Core/APIService/NSURLSession+GACPromises.m","sourceTree":"","type":"file"},{"children":[{"fileType":"sourcecode.module-map","guid":"bfdfe7dc352907fc980b868725387e98672f89e6abf7bc498589f929ef4ce877","path":"AppCheckCore.modulemap","sourceTree":"","type":"file"},{"fileType":"sourcecode.c.objc","guid":"bfdfe7dc352907fc980b868725387e98c7d21c3328d9ad46039795667d6cc430","path":"AppCheckCore-dummy.m","sourceTree":"","type":"file"},{"fileType":"text.plist.xml","guid":"bfdfe7dc352907fc980b868725387e98e7dec041b2f08935fbb856955fc66d96","path":"AppCheckCore-Info.plist","sourceTree":"","type":"file"},{"fileType":"sourcecode.c.h","guid":"bfdfe7dc352907fc980b868725387e981b9edf1174753b93be76528df893f4d1","path":"AppCheckCore-umbrella.h","sourceTree":"","type":"file"},{"fileType":"text.xcconfig","guid":"bfdfe7dc352907fc980b868725387e989ea1b5ad8cedbe34b515d7efe8552fea","path":"AppCheckCore.debug.xcconfig","sourceTree":"","type":"file"},{"fileType":"text.xcconfig","guid":"bfdfe7dc352907fc980b868725387e98bc298d5906127a42ca6675d4cbce0891","path":"AppCheckCore.release.xcconfig","sourceTree":"","type":"file"}],"guid":"bfdfe7dc352907fc980b868725387e98ec495a89e7a8b257ccadbb7eaf4c3523","name":"Support Files","path":"../Target Support Files/AppCheckCore","sourceTree":"","type":"group"}],"guid":"bfdfe7dc352907fc980b868725387e988bcb684524b48bade77ba348047cfd68","name":"AppCheckCore","path":"AppCheckCore","sourceTree":"","type":"group"},{"children":[{"children":[{"fileType":"sourcecode.swift","guid":"bfdfe7dc352907fc980b868725387e98a7167b35e446804e288fc5f3108fd0e0","path":"Sources/DKImagePickerController/View/Cell/DKAssetGroupCellItemProtocol.swift","sourceTree":"","type":"file"},{"fileType":"sourcecode.swift","guid":"bfdfe7dc352907fc980b868725387e984737ea76e0a4c76036af3b355fdec0ed","path":"Sources/DKImagePickerController/View/Cell/DKAssetGroupDetailBaseCell.swift","sourceTree":"","type":"file"},{"fileType":"sourcecode.swift","guid":"bfdfe7dc352907fc980b868725387e98eba5be275263271fcd1bf32ee797809b","path":"Sources/DKImagePickerController/View/Cell/DKAssetGroupDetailCameraCell.swift","sourceTree":"","type":"file"},{"fileType":"sourcecode.swift","guid":"bfdfe7dc352907fc980b868725387e98b76a64655dc550f5ebec2f9ff3200413","path":"Sources/DKImagePickerController/View/Cell/DKAssetGroupDetailImageCell.swift","sourceTree":"","type":"file"},{"fileType":"sourcecode.swift","guid":"bfdfe7dc352907fc980b868725387e980f1347790a1fae83f056fa4b808c3cd0","path":"Sources/DKImagePickerController/View/DKAssetGroupDetailVC.swift","sourceTree":"","type":"file"},{"fileType":"sourcecode.swift","guid":"bfdfe7dc352907fc980b868725387e9876da5a8044ee25187970ba558822731d","path":"Sources/DKImagePickerController/View/Cell/DKAssetGroupDetailVideoCell.swift","sourceTree":"","type":"file"},{"fileType":"sourcecode.swift","guid":"bfdfe7dc352907fc980b868725387e9849e6729fc1e44edf7426ac54b962a26b","path":"Sources/DKImagePickerController/View/DKAssetGroupGridLayout.swift","sourceTree":"","type":"file"},{"fileType":"sourcecode.swift","guid":"bfdfe7dc352907fc980b868725387e98a8ca137552a3696b8a3ae1c151998fe9","path":"Sources/DKImagePickerController/View/DKAssetGroupListVC.swift","sourceTree":"","type":"file"},{"fileType":"sourcecode.swift","guid":"bfdfe7dc352907fc980b868725387e98add192413820866011e7588ab8d50a1b","path":"Sources/DKImagePickerController/DKImageAssetExporter.swift","sourceTree":"","type":"file"},{"fileType":"sourcecode.swift","guid":"bfdfe7dc352907fc980b868725387e986747ae603292c978ec451164346bb561","path":"Sources/DKImagePickerController/DKImageExtensionController.swift","sourceTree":"","type":"file"},{"fileType":"sourcecode.swift","guid":"bfdfe7dc352907fc980b868725387e9804eba36085f83cab0f06e047a1723201","path":"Sources/DKImagePickerController/DKImagePickerController.swift","sourceTree":"","type":"file"},{"fileType":"sourcecode.swift","guid":"bfdfe7dc352907fc980b868725387e985f34fcdb8acab7b808291804ea4c93a4","path":"Sources/DKImagePickerController/DKImagePickerControllerBaseUIDelegate.swift","sourceTree":"","type":"file"},{"fileType":"sourcecode.swift","guid":"bfdfe7dc352907fc980b868725387e9804fc4899b4975caa6c83b0bcabd7bdcd","path":"Sources/DKImagePickerController/View/DKPermissionView.swift","sourceTree":"","type":"file"},{"fileType":"sourcecode.swift","guid":"bfdfe7dc352907fc980b868725387e9847c7fe098b50f268068840c428bc95bc","path":"Sources/DKImagePickerController/DKPopoverViewController.swift","sourceTree":"","type":"file"}],"guid":"bfdfe7dc352907fc980b868725387e98ee77237c63b5b2d99fb3bff9d88bdbac","name":"Core","path":"","sourceTree":"","type":"group"},{"children":[{"fileType":"sourcecode.swift","guid":"bfdfe7dc352907fc980b868725387e98335a94dbe483545144593a747bf57488","path":"Sources/DKImageDataManager/Model/DKAsset.swift","sourceTree":"","type":"file"},{"fileType":"sourcecode.swift","guid":"bfdfe7dc352907fc980b868725387e98c856fc1f1a5df75e1f335a24f80a324c","path":"Sources/DKImageDataManager/Model/DKAsset+Export.swift","sourceTree":"","type":"file"},{"fileType":"sourcecode.swift","guid":"bfdfe7dc352907fc980b868725387e9883b700d4c655a66d2eb0ecd5009867cc","path":"Sources/DKImageDataManager/Model/DKAsset+Fetch.swift","sourceTree":"","type":"file"},{"fileType":"sourcecode.swift","guid":"bfdfe7dc352907fc980b868725387e98227220f91dfab4c4322ac4ed581b024b","path":"Sources/DKImageDataManager/Model/DKAssetGroup.swift","sourceTree":"","type":"file"},{"fileType":"sourcecode.swift","guid":"bfdfe7dc352907fc980b868725387e98df6555ed20370a218636d2d1ef042bff","path":"Sources/DKImageDataManager/DKImageBaseManager.swift","sourceTree":"","type":"file"},{"fileType":"sourcecode.swift","guid":"bfdfe7dc352907fc980b868725387e983c5b7868d9cf3226bd45e2f7fde341f2","path":"Sources/DKImageDataManager/DKImageDataManager.swift","sourceTree":"","type":"file"},{"fileType":"sourcecode.swift","guid":"bfdfe7dc352907fc980b868725387e98034544f799334fac9753d3c062ac4eb5","path":"Sources/DKImageDataManager/DKImageGroupDataManager.swift","sourceTree":"","type":"file"}],"guid":"bfdfe7dc352907fc980b868725387e980b04c7ce3b4c4fc3cdc8d706c268e067","name":"ImageDataManager","path":"","sourceTree":"","type":"group"},{"children":[{"fileType":"sourcecode.swift","guid":"bfdfe7dc352907fc980b868725387e9873c16ebd0704c7e74ef2732a8617faf4","path":"Sources/Extensions/DKImageExtensionGallery.swift","sourceTree":"","type":"file"}],"guid":"bfdfe7dc352907fc980b868725387e98803813ee40633c05ccd6363e45670f9a","name":"PhotoGallery","path":"","sourceTree":"","type":"group"},{"children":[{"fileType":"sourcecode.swift","guid":"bfdfe7dc352907fc980b868725387e98c04e1fef39dccde86db40118bcaf63f7","path":"Sources/DKImagePickerController/Resource/DKImagePickerControllerResource.swift","sourceTree":"","type":"file"},{"children":[{"fileType":"folder","guid":"bfdfe7dc352907fc980b868725387e98992e20e5c86d6ccae38bdf84a625f178","path":"Sources/DKImagePickerController/Resource/Resources/ar.lproj","sourceTree":"","type":"file"},{"fileType":"folder","guid":"bfdfe7dc352907fc980b868725387e98fc42f53bf0b263eb43dfba42d468c1ee","path":"Sources/DKImagePickerController/Resource/Resources/Base.lproj","sourceTree":"","type":"file"},{"fileType":"folder","guid":"bfdfe7dc352907fc980b868725387e98c0e0c44805bf91b9ddacc8f5c5de5887","path":"Sources/DKImagePickerController/Resource/Resources/da.lproj","sourceTree":"","type":"file"},{"fileType":"folder","guid":"bfdfe7dc352907fc980b868725387e985b7ec0450262a9573a0cb306273bc343","path":"Sources/DKImagePickerController/Resource/Resources/de.lproj","sourceTree":"","type":"file"},{"fileType":"folder","guid":"bfdfe7dc352907fc980b868725387e98a0d3580855f196150587aeedde49d8ee","path":"Sources/DKImagePickerController/Resource/Resources/en.lproj","sourceTree":"","type":"file"},{"fileType":"folder","guid":"bfdfe7dc352907fc980b868725387e988591a2b29b958ca4ab9f3147bafa7a8a","path":"Sources/DKImagePickerController/Resource/Resources/es.lproj","sourceTree":"","type":"file"},{"fileType":"folder","guid":"bfdfe7dc352907fc980b868725387e98d68c0474e2f03eb8c7fccab1413bcc77","path":"Sources/DKImagePickerController/Resource/Resources/fr.lproj","sourceTree":"","type":"file"},{"fileType":"folder","guid":"bfdfe7dc352907fc980b868725387e98418e94a9d7a67843e706121817b95d23","path":"Sources/DKImagePickerController/Resource/Resources/hu.lproj","sourceTree":"","type":"file"},{"fileType":"folder.assetcatalog","guid":"bfdfe7dc352907fc980b868725387e9844ff420afcb298679dede65a45ffceb5","path":"Sources/DKImagePickerController/Resource/Resources/Images.xcassets","sourceTree":"","type":"file"},{"fileType":"folder","guid":"bfdfe7dc352907fc980b868725387e987692caa5c901fbd366ce9848d0c1274c","path":"Sources/DKImagePickerController/Resource/Resources/it.lproj","sourceTree":"","type":"file"},{"fileType":"folder","guid":"bfdfe7dc352907fc980b868725387e9865b6e35f95ede252c917f53224dfc704","path":"Sources/DKImagePickerController/Resource/Resources/ja.lproj","sourceTree":"","type":"file"},{"fileType":"folder","guid":"bfdfe7dc352907fc980b868725387e983f2cd8e2aab8a62e70cd896c9a4fea53","path":"Sources/DKImagePickerController/Resource/Resources/ko.lproj","sourceTree":"","type":"file"},{"fileType":"folder","guid":"bfdfe7dc352907fc980b868725387e98ca220a32ab2fe66aa595eba98989e624","path":"Sources/DKImagePickerController/Resource/Resources/nb-NO.lproj","sourceTree":"","type":"file"},{"fileType":"folder","guid":"bfdfe7dc352907fc980b868725387e98c97c449e1eb67deb67ddecb8dcb88dc6","path":"Sources/DKImagePickerController/Resource/Resources/nl.lproj","sourceTree":"","type":"file"},{"fileType":"text.xml","guid":"bfdfe7dc352907fc980b868725387e988a7e09ab3fb0bccf3d6a0840f20edb02","path":"Sources/DKImagePickerController/Resource/Resources/PrivacyInfo.xcprivacy","sourceTree":"","type":"file"},{"fileType":"folder","guid":"bfdfe7dc352907fc980b868725387e98360580afc3ea1e4816652b09373a6cd3","path":"Sources/DKImagePickerController/Resource/Resources/pt_BR.lproj","sourceTree":"","type":"file"},{"fileType":"folder","guid":"bfdfe7dc352907fc980b868725387e985edb9444e98b58b1ebe6043fbb03795f","path":"Sources/DKImagePickerController/Resource/Resources/ru.lproj","sourceTree":"","type":"file"},{"fileType":"folder","guid":"bfdfe7dc352907fc980b868725387e9882faf104037eae2f0a55bac80109a69f","path":"Sources/DKImagePickerController/Resource/Resources/tr.lproj","sourceTree":"","type":"file"},{"fileType":"folder","guid":"bfdfe7dc352907fc980b868725387e98aa7d745938a0d9db3a2c382f9c57b33b","path":"Sources/DKImagePickerController/Resource/Resources/ur.lproj","sourceTree":"","type":"file"},{"fileType":"folder","guid":"bfdfe7dc352907fc980b868725387e98693b26471f52ca7316a1d3e0c7dc0a7f","path":"Sources/DKImagePickerController/Resource/Resources/vi.lproj","sourceTree":"","type":"file"},{"fileType":"folder","guid":"bfdfe7dc352907fc980b868725387e98e7d19f0ec38ff637cbd1084684e63ad4","path":"Sources/DKImagePickerController/Resource/Resources/zh-Hans.lproj","sourceTree":"","type":"file"},{"fileType":"folder","guid":"bfdfe7dc352907fc980b868725387e9822323136a1b52bdd7900e18b364dee99","path":"Sources/DKImagePickerController/Resource/Resources/zh-Hant.lproj","sourceTree":"","type":"file"}],"guid":"bfdfe7dc352907fc980b868725387e987d5cec5b9da575e4dd76fbfa813ffc1d","name":"Resources","path":"","sourceTree":"","type":"group"}],"guid":"bfdfe7dc352907fc980b868725387e9861ce1ecae12f6109ffdab5f33b0e688d","name":"Resource","path":"","sourceTree":"","type":"group"},{"children":[{"fileType":"sourcecode.module-map","guid":"bfdfe7dc352907fc980b868725387e987600b5d2e35ca259d6e8b8af16e2d27d","path":"DKImagePickerController.modulemap","sourceTree":"","type":"file"},{"fileType":"sourcecode.c.objc","guid":"bfdfe7dc352907fc980b868725387e9805cbd30dca7799b8a62e2c9aa2908321","path":"DKImagePickerController-dummy.m","sourceTree":"","type":"file"},{"fileType":"text.plist.xml","guid":"bfdfe7dc352907fc980b868725387e9871dfdaf22b47e644dabb30196ab019f0","path":"DKImagePickerController-Info.plist","sourceTree":"","type":"file"},{"fileType":"sourcecode.c.h","guid":"bfdfe7dc352907fc980b868725387e989f5bf9014f82c89ae940c2faeb8de5ca","path":"DKImagePickerController-prefix.pch","sourceTree":"","type":"file"},{"fileType":"sourcecode.c.h","guid":"bfdfe7dc352907fc980b868725387e98e6b5d8425df9cc686639898d81ab29bb","path":"DKImagePickerController-umbrella.h","sourceTree":"","type":"file"},{"fileType":"text.xcconfig","guid":"bfdfe7dc352907fc980b868725387e9837b4eae1f2290b03d7d4aabded8138b2","path":"DKImagePickerController.debug.xcconfig","sourceTree":"","type":"file"},{"fileType":"text.xcconfig","guid":"bfdfe7dc352907fc980b868725387e98c17784c5efe37bcec77e0c17b5660c20","path":"DKImagePickerController.release.xcconfig","sourceTree":"","type":"file"},{"fileType":"text.plist.xml","guid":"bfdfe7dc352907fc980b868725387e98cdaff8cf03e757205e0ffa1c64376011","path":"ResourceBundle-DKImagePickerController-DKImagePickerController-Info.plist","sourceTree":"","type":"file"}],"guid":"bfdfe7dc352907fc980b868725387e98a2d4a00dbd51b88aae84475703fcbe2e","name":"Support Files","path":"../Target Support Files/DKImagePickerController","sourceTree":"","type":"group"}],"guid":"bfdfe7dc352907fc980b868725387e98b5ebc6f84912f477d46cfde0025e47ab","name":"DKImagePickerController","path":"DKImagePickerController","sourceTree":"","type":"group"},{"children":[{"children":[{"fileType":"sourcecode.swift","guid":"bfdfe7dc352907fc980b868725387e98eb4d56e39dcd3c8f709fb6323e177298","path":"DKPhotoGallery/DKPhotoGallery.swift","sourceTree":"","type":"file"},{"fileType":"sourcecode.swift","guid":"bfdfe7dc352907fc980b868725387e98df24cc6698371aecc8afd7cf313cac20","path":"DKPhotoGallery/DKPhotoGalleryContentVC.swift","sourceTree":"","type":"file"},{"fileType":"sourcecode.swift","guid":"bfdfe7dc352907fc980b868725387e987ad73074b99776b1116f9c2856ac5552","path":"DKPhotoGallery/Transition/DKPhotoGalleryInteractiveTransition.swift","sourceTree":"","type":"file"},{"fileType":"sourcecode.swift","guid":"bfdfe7dc352907fc980b868725387e98e4d9272c60986ce5118264cb92283548","path":"DKPhotoGallery/DKPhotoGalleryScrollView.swift","sourceTree":"","type":"file"},{"fileType":"sourcecode.swift","guid":"bfdfe7dc352907fc980b868725387e98cb2b24e4cd6fc396c5a1d3e43868d95f","path":"DKPhotoGallery/Transition/DKPhotoGalleryTransitionController.swift","sourceTree":"","type":"file"},{"fileType":"sourcecode.swift","guid":"bfdfe7dc352907fc980b868725387e9843f4159faf9603bb660cb95efdf095b3","path":"DKPhotoGallery/Transition/DKPhotoGalleryTransitionDismiss.swift","sourceTree":"","type":"file"},{"fileType":"sourcecode.swift","guid":"bfdfe7dc352907fc980b868725387e98932cc722dd747e8adbcbd5e18fd5fb02","path":"DKPhotoGallery/Transition/DKPhotoGalleryTransitionPresent.swift","sourceTree":"","type":"file"},{"fileType":"sourcecode.swift","guid":"bfdfe7dc352907fc980b868725387e9827f7ef5f3ea80d79b40d7a4ac9588235","path":"DKPhotoGallery/DKPhotoIncrementalIndicator.swift","sourceTree":"","type":"file"},{"fileType":"sourcecode.swift","guid":"bfdfe7dc352907fc980b868725387e98b77caf2d5e3738f780e1b59e29eabe0d","path":"DKPhotoGallery/DKPhotoPreviewFactory.swift","sourceTree":"","type":"file"}],"guid":"bfdfe7dc352907fc980b868725387e981b7dc05cd0d4c5bc74f25b88576cdaa2","name":"Core","path":"","sourceTree":"","type":"group"},{"children":[{"fileType":"sourcecode.swift","guid":"bfdfe7dc352907fc980b868725387e98d0cc75a3c72b5f298ace8a3bf41f9195","path":"DKPhotoGallery/DKPhotoGalleryItem.swift","sourceTree":"","type":"file"}],"guid":"bfdfe7dc352907fc980b868725387e985adb8b3d068c6073592d841630e83ffb","name":"Model","path":"","sourceTree":"","type":"group"},{"children":[{"fileType":"sourcecode.swift","guid":"bfdfe7dc352907fc980b868725387e98eb71b1871db14bddb34f3b6dc48f5d95","path":"DKPhotoGallery/Preview/PDFPreview/DKPDFView.swift","sourceTree":"","type":"file"},{"fileType":"sourcecode.swift","guid":"bfdfe7dc352907fc980b868725387e983ba539f64005bde8f3a4c989c13457f6","path":"DKPhotoGallery/Preview/ImagePreview/DKPhotoBaseImagePreviewVC.swift","sourceTree":"","type":"file"},{"fileType":"sourcecode.swift","guid":"bfdfe7dc352907fc980b868725387e98dfa1e27846c545f78585767f808c0290","path":"DKPhotoGallery/Preview/DKPhotoBasePreviewVC.swift","sourceTree":"","type":"file"},{"fileType":"sourcecode.swift","guid":"bfdfe7dc352907fc980b868725387e98925864836a0b949ba0125aac269b941d","path":"DKPhotoGallery/Preview/DKPhotoContentAnimationView.swift","sourceTree":"","type":"file"},{"fileType":"sourcecode.swift","guid":"bfdfe7dc352907fc980b868725387e9828fa2d719018a25fe1fb3c6ebb4ff951","path":"DKPhotoGallery/Preview/ImagePreview/DKPhotoImageDownloader.swift","sourceTree":"","type":"file"},{"fileType":"sourcecode.swift","guid":"bfdfe7dc352907fc980b868725387e98f64f20afd463bd999a742dc203b790bd","path":"DKPhotoGallery/Preview/ImagePreview/DKPhotoImagePreviewVC.swift","sourceTree":"","type":"file"},{"fileType":"sourcecode.swift","guid":"bfdfe7dc352907fc980b868725387e98358107a82ec5ef5b395911951930fb60","path":"DKPhotoGallery/Preview/ImagePreview/DKPhotoImageUtility.swift","sourceTree":"","type":"file"},{"fileType":"sourcecode.swift","guid":"bfdfe7dc352907fc980b868725387e983e59331f8189f5e055881857d7ab4a95","path":"DKPhotoGallery/Preview/ImagePreview/DKPhotoImageView.swift","sourceTree":"","type":"file"},{"fileType":"sourcecode.swift","guid":"bfdfe7dc352907fc980b868725387e9894ebedd554142c9762ffe051143f601a","path":"DKPhotoGallery/Preview/PDFPreview/DKPhotoPDFPreviewVC.swift","sourceTree":"","type":"file"},{"fileType":"sourcecode.swift","guid":"bfdfe7dc352907fc980b868725387e9824f019a6799511e6df48ed4fa1051373","path":"DKPhotoGallery/Preview/PlayerPreview/DKPhotoPlayerPreviewVC.swift","sourceTree":"","type":"file"},{"fileType":"sourcecode.swift","guid":"bfdfe7dc352907fc980b868725387e9857c00b0d4565e7a6a12ffd669506d74d","path":"DKPhotoGallery/Preview/DKPhotoProgressIndicator.swift","sourceTree":"","type":"file"},{"fileType":"sourcecode.swift","guid":"bfdfe7dc352907fc980b868725387e9817c7f07dc865de8893a20abc3a232f83","path":"DKPhotoGallery/Preview/DKPhotoProgressIndicatorProtocol.swift","sourceTree":"","type":"file"},{"fileType":"sourcecode.swift","guid":"bfdfe7dc352907fc980b868725387e98bd8325023686436108c1116ee7b5d7bd","path":"DKPhotoGallery/Preview/QRCode/DKPhotoQRCodeResultVC.swift","sourceTree":"","type":"file"},{"fileType":"sourcecode.swift","guid":"bfdfe7dc352907fc980b868725387e98fef5a0935c29cb454c05b9981615539b","path":"DKPhotoGallery/Preview/QRCode/DKPhotoWebVC.swift","sourceTree":"","type":"file"},{"fileType":"sourcecode.swift","guid":"bfdfe7dc352907fc980b868725387e98941a4bd773c66feec3ba05f2f39973b3","path":"DKPhotoGallery/Preview/PlayerPreview/DKPlayerView.swift","sourceTree":"","type":"file"}],"guid":"bfdfe7dc352907fc980b868725387e988e489eb1556188456366f3c28023a578","name":"Preview","path":"","sourceTree":"","type":"group"},{"children":[{"fileType":"sourcecode.swift","guid":"bfdfe7dc352907fc980b868725387e9828fefd0d3317647420ee3f37c82ec4a2","path":"DKPhotoGallery/Resource/DKPhotoGalleryResource.swift","sourceTree":"","type":"file"},{"children":[{"fileType":"folder","guid":"bfdfe7dc352907fc980b868725387e9803baa2fc67f8d76b2b108bf635be93dc","path":"DKPhotoGallery/Resource/Resources/Base.lproj","sourceTree":"","type":"file"},{"fileType":"folder","guid":"bfdfe7dc352907fc980b868725387e982a3b28f4eed66179cc3316238b0b3ee7","path":"DKPhotoGallery/Resource/Resources/en.lproj","sourceTree":"","type":"file"},{"fileType":"folder.assetcatalog","guid":"bfdfe7dc352907fc980b868725387e98812489e746316b8b3716cadbcf8878f0","path":"DKPhotoGallery/Resource/Resources/Images.xcassets","sourceTree":"","type":"file"},{"fileType":"text.xml","guid":"bfdfe7dc352907fc980b868725387e988c57c65d211d763f44ecd815974cdf8f","path":"DKPhotoGallery/Resource/Resources/PrivacyInfo.xcprivacy","sourceTree":"","type":"file"},{"fileType":"folder","guid":"bfdfe7dc352907fc980b868725387e98af5703700ee022e99305baf3e4656a2c","path":"DKPhotoGallery/Resource/Resources/zh-Hans.lproj","sourceTree":"","type":"file"}],"guid":"bfdfe7dc352907fc980b868725387e981d1847f8aecbab7065793b6ed1d78cc9","name":"Resources","path":"","sourceTree":"","type":"group"}],"guid":"bfdfe7dc352907fc980b868725387e98484ddf673e797dcb2ebabd9096caa83a","name":"Resource","path":"","sourceTree":"","type":"group"},{"children":[{"fileType":"sourcecode.module-map","guid":"bfdfe7dc352907fc980b868725387e9828fd93070011af01c11522753663222e","path":"DKPhotoGallery.modulemap","sourceTree":"","type":"file"},{"fileType":"sourcecode.c.objc","guid":"bfdfe7dc352907fc980b868725387e98ed6773dc19e610851f0ce6e641b9b3b5","path":"DKPhotoGallery-dummy.m","sourceTree":"","type":"file"},{"fileType":"text.plist.xml","guid":"bfdfe7dc352907fc980b868725387e98eca3c28d80db4703659c7505a841fd5e","path":"DKPhotoGallery-Info.plist","sourceTree":"","type":"file"},{"fileType":"sourcecode.c.h","guid":"bfdfe7dc352907fc980b868725387e984803f882072ffd350875889f6fd00ced","path":"DKPhotoGallery-prefix.pch","sourceTree":"","type":"file"},{"fileType":"sourcecode.c.h","guid":"bfdfe7dc352907fc980b868725387e983e0ca2b7d01325e2be94eb703cc8834c","path":"DKPhotoGallery-umbrella.h","sourceTree":"","type":"file"},{"fileType":"text.xcconfig","guid":"bfdfe7dc352907fc980b868725387e98284ffc1eae91e8f4cf71938bb6a26644","path":"DKPhotoGallery.debug.xcconfig","sourceTree":"","type":"file"},{"fileType":"text.xcconfig","guid":"bfdfe7dc352907fc980b868725387e986051e77661008cd9b8c42c9db89a8f91","path":"DKPhotoGallery.release.xcconfig","sourceTree":"","type":"file"},{"fileType":"text.plist.xml","guid":"bfdfe7dc352907fc980b868725387e984d1dd876bf56120c5d4824839cdd4023","path":"ResourceBundle-DKPhotoGallery-DKPhotoGallery-Info.plist","sourceTree":"","type":"file"}],"guid":"bfdfe7dc352907fc980b868725387e98791b452afe930675ebc7f222d389f86f","name":"Support Files","path":"../Target Support Files/DKPhotoGallery","sourceTree":"","type":"group"}],"guid":"bfdfe7dc352907fc980b868725387e98f6df08f909024b7f852c8e54decac825","name":"DKPhotoGallery","path":"DKPhotoGallery","sourceTree":"","type":"group"},{"children":[{"fileType":"sourcecode.c.h","guid":"bfdfe7dc352907fc980b868725387e985f30da1e2858747ff1d5dbb8e614fcde","path":"Static/FBAudienceNetwork.xcframework/ios-arm64/FBAudienceNetwork.framework/Headers/FBAdBridgeCommon.h","sourceTree":"","type":"file"},{"fileType":"sourcecode.c.h","guid":"bfdfe7dc352907fc980b868725387e98378f51297868f822d06d3dbf7066e8a7","path":"Static/FBAudienceNetwork.xcframework/ios-arm64_x86_64-simulator/FBAudienceNetwork.framework/Headers/FBAdBridgeCommon.h","sourceTree":"","type":"file"},{"fileType":"sourcecode.c.h","guid":"bfdfe7dc352907fc980b868725387e98e1632d1666deb7ab4a20a9807837b175","path":"Static/FBAudienceNetwork.xcframework/ios-arm64/FBAudienceNetwork.framework/Headers/FBAdBridgeContainer.h","sourceTree":"","type":"file"},{"fileType":"sourcecode.c.h","guid":"bfdfe7dc352907fc980b868725387e980916d710f55a6510ec2236d4ca2eddad","path":"Static/FBAudienceNetwork.xcframework/ios-arm64_x86_64-simulator/FBAudienceNetwork.framework/Headers/FBAdBridgeContainer.h","sourceTree":"","type":"file"},{"fileType":"sourcecode.c.h","guid":"bfdfe7dc352907fc980b868725387e98b23f67914e22c93b5725e10243dbc413","path":"Static/FBAudienceNetwork.xcframework/ios-arm64/FBAudienceNetwork.framework/Headers/FBAdChoicesView.h","sourceTree":"","type":"file"},{"fileType":"sourcecode.c.h","guid":"bfdfe7dc352907fc980b868725387e9859b9f4877a45e0020b0f013a3353c82e","path":"Static/FBAudienceNetwork.xcframework/ios-arm64_x86_64-simulator/FBAudienceNetwork.framework/Headers/FBAdChoicesView.h","sourceTree":"","type":"file"},{"fileType":"sourcecode.c.h","guid":"bfdfe7dc352907fc980b868725387e9865fb7d078872e4377946c879dcd12c79","path":"Static/FBAudienceNetwork.xcframework/ios-arm64/FBAudienceNetwork.framework/Headers/FBAdCompanionView.h","sourceTree":"","type":"file"},{"fileType":"sourcecode.c.h","guid":"bfdfe7dc352907fc980b868725387e980675651369bb073acbd08fe42a5161e6","path":"Static/FBAudienceNetwork.xcframework/ios-arm64_x86_64-simulator/FBAudienceNetwork.framework/Headers/FBAdCompanionView.h","sourceTree":"","type":"file"},{"fileType":"sourcecode.c.h","guid":"bfdfe7dc352907fc980b868725387e98ce93cdcc5205742b8a45336107ecc2dd","path":"Static/FBAudienceNetwork.xcframework/ios-arm64/FBAudienceNetwork.framework/Headers/FBAdDefines.h","sourceTree":"","type":"file"},{"fileType":"sourcecode.c.h","guid":"bfdfe7dc352907fc980b868725387e9884ed10fcc262f319abf0a7bac72d51aa","path":"Static/FBAudienceNetwork.xcframework/ios-arm64_x86_64-simulator/FBAudienceNetwork.framework/Headers/FBAdDefines.h","sourceTree":"","type":"file"},{"fileType":"sourcecode.c.h","guid":"bfdfe7dc352907fc980b868725387e98a82c28710dc0e35dc980cc2c0008a5c0","path":"Static/FBAudienceNetwork.xcframework/ios-arm64/FBAudienceNetwork.framework/Headers/FBAdExperienceConfig.h","sourceTree":"","type":"file"},{"fileType":"sourcecode.c.h","guid":"bfdfe7dc352907fc980b868725387e981749539587073f7a0900dbff0a8d251e","path":"Static/FBAudienceNetwork.xcframework/ios-arm64_x86_64-simulator/FBAudienceNetwork.framework/Headers/FBAdExperienceConfig.h","sourceTree":"","type":"file"},{"fileType":"sourcecode.c.h","guid":"bfdfe7dc352907fc980b868725387e98787dcf0e51bdc42d1bdb1190490b5640","path":"Static/FBAudienceNetwork.xcframework/ios-arm64/FBAudienceNetwork.framework/Headers/FBAdExtraHint.h","sourceTree":"","type":"file"},{"fileType":"sourcecode.c.h","guid":"bfdfe7dc352907fc980b868725387e986e9b8e2679b837ca9e6c0972d070db5e","path":"Static/FBAudienceNetwork.xcframework/ios-arm64_x86_64-simulator/FBAudienceNetwork.framework/Headers/FBAdExtraHint.h","sourceTree":"","type":"file"},{"fileType":"sourcecode.c.h","guid":"bfdfe7dc352907fc980b868725387e982e3093a68f23522d3acaaa37b752de2d","path":"Static/FBAudienceNetwork.xcframework/ios-arm64/FBAudienceNetwork.framework/Headers/FBAdIconView.h","sourceTree":"","type":"file"},{"fileType":"sourcecode.c.h","guid":"bfdfe7dc352907fc980b868725387e983bfb569f93d8319e00ac1512bdefd996","path":"Static/FBAudienceNetwork.xcframework/ios-arm64_x86_64-simulator/FBAudienceNetwork.framework/Headers/FBAdIconView.h","sourceTree":"","type":"file"},{"fileType":"sourcecode.c.h","guid":"bfdfe7dc352907fc980b868725387e98eab5c7282e1bf65ccf39aac6e370833d","path":"Static/FBAudienceNetwork.xcframework/ios-arm64/FBAudienceNetwork.framework/Headers/FBAdImage.h","sourceTree":"","type":"file"},{"fileType":"sourcecode.c.h","guid":"bfdfe7dc352907fc980b868725387e9862d7edaa240d37690ac717f9db024e93","path":"Static/FBAudienceNetwork.xcframework/ios-arm64_x86_64-simulator/FBAudienceNetwork.framework/Headers/FBAdImage.h","sourceTree":"","type":"file"},{"fileType":"sourcecode.c.h","guid":"bfdfe7dc352907fc980b868725387e98ff5b60756d3f16f21bef0e4419dab4e2","path":"Static/FBAudienceNetwork.xcframework/ios-arm64/FBAudienceNetwork.framework/Headers/FBAdOptionsView.h","sourceTree":"","type":"file"},{"fileType":"sourcecode.c.h","guid":"bfdfe7dc352907fc980b868725387e98acc102a6a3f0c3a99f9f310b737b794a","path":"Static/FBAudienceNetwork.xcframework/ios-arm64_x86_64-simulator/FBAudienceNetwork.framework/Headers/FBAdOptionsView.h","sourceTree":"","type":"file"},{"fileType":"sourcecode.c.h","guid":"bfdfe7dc352907fc980b868725387e985b1ee4b7dcc2a5a46b3d73399605cc3b","path":"Static/FBAudienceNetwork.xcframework/ios-arm64/FBAudienceNetwork.framework/Headers/FBAdSDKNotificationManager.h","sourceTree":"","type":"file"},{"fileType":"sourcecode.c.h","guid":"bfdfe7dc352907fc980b868725387e98e5041176a7f353afe09c75449a32b9c8","path":"Static/FBAudienceNetwork.xcframework/ios-arm64_x86_64-simulator/FBAudienceNetwork.framework/Headers/FBAdSDKNotificationManager.h","sourceTree":"","type":"file"},{"fileType":"sourcecode.c.h","guid":"bfdfe7dc352907fc980b868725387e988841e75bc2b6f7c6bcd5a69a0fa54a78","path":"Static/FBAudienceNetwork.xcframework/ios-arm64/FBAudienceNetwork.framework/Headers/FBAdSettings.h","sourceTree":"","type":"file"},{"fileType":"sourcecode.c.h","guid":"bfdfe7dc352907fc980b868725387e981d46dfedeaf7f3980eca81be375a0655","path":"Static/FBAudienceNetwork.xcframework/ios-arm64_x86_64-simulator/FBAudienceNetwork.framework/Headers/FBAdSettings.h","sourceTree":"","type":"file"},{"fileType":"sourcecode.c.h","guid":"bfdfe7dc352907fc980b868725387e98be89424a1488672629ee4b0155524fa4","path":"Static/FBAudienceNetwork.xcframework/ios-arm64/FBAudienceNetwork.framework/Headers/FBAdSettingsBridge.h","sourceTree":"","type":"file"},{"fileType":"sourcecode.c.h","guid":"bfdfe7dc352907fc980b868725387e98ce0df0afa7ddd4e666c26da1a00cdb48","path":"Static/FBAudienceNetwork.xcframework/ios-arm64_x86_64-simulator/FBAudienceNetwork.framework/Headers/FBAdSettingsBridge.h","sourceTree":"","type":"file"},{"fileType":"sourcecode.c.h","guid":"bfdfe7dc352907fc980b868725387e980754644fc65b4c16ee2210deaffdbe88","path":"Static/FBAudienceNetwork.xcframework/ios-arm64/FBAudienceNetwork.framework/Headers/FBAdSize.h","sourceTree":"","type":"file"},{"fileType":"sourcecode.c.h","guid":"bfdfe7dc352907fc980b868725387e98938f0fe0781310ac7bd714edeeaa8a19","path":"Static/FBAudienceNetwork.xcframework/ios-arm64_x86_64-simulator/FBAudienceNetwork.framework/Headers/FBAdSize.h","sourceTree":"","type":"file"},{"fileType":"sourcecode.c.h","guid":"bfdfe7dc352907fc980b868725387e9882f56ec957cfab6c2450547c39edd26d","path":"Static/FBAudienceNetwork.xcframework/ios-arm64/FBAudienceNetwork.framework/Headers/FBAdUtilityBridge.h","sourceTree":"","type":"file"},{"fileType":"sourcecode.c.h","guid":"bfdfe7dc352907fc980b868725387e98b87e6e0d84621887ceebd551f81ff9da","path":"Static/FBAudienceNetwork.xcframework/ios-arm64_x86_64-simulator/FBAudienceNetwork.framework/Headers/FBAdUtilityBridge.h","sourceTree":"","type":"file"},{"fileType":"sourcecode.c.h","guid":"bfdfe7dc352907fc980b868725387e9810de2bb9ec9aef610292ca5539c3e89e","path":"Static/FBAudienceNetwork.xcframework/ios-arm64/FBAudienceNetwork.framework/Headers/FBAdView.h","sourceTree":"","type":"file"},{"fileType":"sourcecode.c.h","guid":"bfdfe7dc352907fc980b868725387e98ed3bb26eb03a937908d954cae64ed8a2","path":"Static/FBAudienceNetwork.xcframework/ios-arm64_x86_64-simulator/FBAudienceNetwork.framework/Headers/FBAdView.h","sourceTree":"","type":"file"},{"fileType":"sourcecode.c.h","guid":"bfdfe7dc352907fc980b868725387e989a3b5e8381d205fc6b202e0b75b735fb","path":"Static/FBAudienceNetwork.xcframework/ios-arm64/FBAudienceNetwork.framework/Headers/FBAdViewBridge.h","sourceTree":"","type":"file"},{"fileType":"sourcecode.c.h","guid":"bfdfe7dc352907fc980b868725387e98e03b39ffef677af5616a11f258df7dee","path":"Static/FBAudienceNetwork.xcframework/ios-arm64_x86_64-simulator/FBAudienceNetwork.framework/Headers/FBAdViewBridge.h","sourceTree":"","type":"file"},{"fileType":"sourcecode.c.h","guid":"bfdfe7dc352907fc980b868725387e98bb5e5cebb2bd53d1a04b0c6d5594c823","path":"Static/FBAudienceNetwork.xcframework/ios-arm64/FBAudienceNetwork.framework/Headers/FBAudienceNetwork.h","sourceTree":"","type":"file"},{"fileType":"sourcecode.c.h","guid":"bfdfe7dc352907fc980b868725387e98506d278cacc7e4336081071dd136e827","path":"Static/FBAudienceNetwork.xcframework/ios-arm64_x86_64-simulator/FBAudienceNetwork.framework/Headers/FBAudienceNetwork.h","sourceTree":"","type":"file"},{"fileType":"sourcecode.c.h","guid":"bfdfe7dc352907fc980b868725387e98a10ed5f31977972ae2c8ced6c11a89c2","path":"Static/FBAudienceNetwork.xcframework/ios-arm64/FBAudienceNetwork.framework/Headers/FBAudienceNetworkAds.h","sourceTree":"","type":"file"},{"fileType":"sourcecode.c.h","guid":"bfdfe7dc352907fc980b868725387e98b24c1436c3603b36737083c21557dea9","path":"Static/FBAudienceNetwork.xcframework/ios-arm64_x86_64-simulator/FBAudienceNetwork.framework/Headers/FBAudienceNetworkAds.h","sourceTree":"","type":"file"},{"fileType":"sourcecode.c.h","guid":"bfdfe7dc352907fc980b868725387e98fd25fe14e890c20de44d70fb3c90cc7c","path":"Static/FBAudienceNetwork.xcframework/ios-arm64/FBAudienceNetwork.framework/Headers/FBDynamicBannerAd.h","sourceTree":"","type":"file"},{"fileType":"sourcecode.c.h","guid":"bfdfe7dc352907fc980b868725387e980b35feb2a3784024bf1e5c1694479204","path":"Static/FBAudienceNetwork.xcframework/ios-arm64_x86_64-simulator/FBAudienceNetwork.framework/Headers/FBDynamicBannerAd.h","sourceTree":"","type":"file"},{"fileType":"sourcecode.c.h","guid":"bfdfe7dc352907fc980b868725387e98d767e2834dc93d5a04636fa588e54934","path":"Static/FBAudienceNetwork.xcframework/ios-arm64/FBAudienceNetwork.framework/Headers/FBInterstitialAd.h","sourceTree":"","type":"file"},{"fileType":"sourcecode.c.h","guid":"bfdfe7dc352907fc980b868725387e98bce0521375e6f481a5770a663c2d94cb","path":"Static/FBAudienceNetwork.xcframework/ios-arm64_x86_64-simulator/FBAudienceNetwork.framework/Headers/FBInterstitialAd.h","sourceTree":"","type":"file"},{"fileType":"sourcecode.c.h","guid":"bfdfe7dc352907fc980b868725387e986895a62035a3ab073d663f6308f4b142","path":"Static/FBAudienceNetwork.xcframework/ios-arm64/FBAudienceNetwork.framework/Headers/FBInterstitialAdBridge.h","sourceTree":"","type":"file"},{"fileType":"sourcecode.c.h","guid":"bfdfe7dc352907fc980b868725387e98e0233cc8f48f164f6dcccd8d5fafa5bf","path":"Static/FBAudienceNetwork.xcframework/ios-arm64_x86_64-simulator/FBAudienceNetwork.framework/Headers/FBInterstitialAdBridge.h","sourceTree":"","type":"file"},{"fileType":"sourcecode.c.h","guid":"bfdfe7dc352907fc980b868725387e98395f0d28522f5b911327253718a41b88","path":"Static/FBAudienceNetwork.xcframework/ios-arm64/FBAudienceNetwork.framework/Headers/FBMediaView.h","sourceTree":"","type":"file"},{"fileType":"sourcecode.c.h","guid":"bfdfe7dc352907fc980b868725387e98a3f76cb39078f642b2e02dd716dbf8ff","path":"Static/FBAudienceNetwork.xcframework/ios-arm64_x86_64-simulator/FBAudienceNetwork.framework/Headers/FBMediaView.h","sourceTree":"","type":"file"},{"fileType":"sourcecode.c.h","guid":"bfdfe7dc352907fc980b868725387e980030f8b77e5cc7dc6d71308836ff866c","path":"Static/FBAudienceNetwork.xcframework/ios-arm64/FBAudienceNetwork.framework/Headers/FBMediaViewVideoRenderer.h","sourceTree":"","type":"file"},{"fileType":"sourcecode.c.h","guid":"bfdfe7dc352907fc980b868725387e98bc7f79f4355b89c586490b5c9f289bb3","path":"Static/FBAudienceNetwork.xcframework/ios-arm64_x86_64-simulator/FBAudienceNetwork.framework/Headers/FBMediaViewVideoRenderer.h","sourceTree":"","type":"file"},{"fileType":"sourcecode.c.h","guid":"bfdfe7dc352907fc980b868725387e98a475ad9b2f52c40641abee2c56198121","path":"Static/FBAudienceNetwork.xcframework/ios-arm64/FBAudienceNetwork.framework/Headers/FBNativeAd.h","sourceTree":"","type":"file"},{"fileType":"sourcecode.c.h","guid":"bfdfe7dc352907fc980b868725387e98fba50ba6b35c2f37f8efd2f9f4daacca","path":"Static/FBAudienceNetwork.xcframework/ios-arm64_x86_64-simulator/FBAudienceNetwork.framework/Headers/FBNativeAd.h","sourceTree":"","type":"file"},{"fileType":"sourcecode.c.h","guid":"bfdfe7dc352907fc980b868725387e9856ac906686f9dc6db5ae72b054836ccc","path":"Static/FBAudienceNetwork.xcframework/ios-arm64/FBAudienceNetwork.framework/Headers/FBNativeAdBase.h","sourceTree":"","type":"file"},{"fileType":"sourcecode.c.h","guid":"bfdfe7dc352907fc980b868725387e982295e6dfe4ff004bd85d907e7a55d4fb","path":"Static/FBAudienceNetwork.xcframework/ios-arm64_x86_64-simulator/FBAudienceNetwork.framework/Headers/FBNativeAdBase.h","sourceTree":"","type":"file"},{"fileType":"sourcecode.c.h","guid":"bfdfe7dc352907fc980b868725387e98740f359db1d0a268a509fe6d47112efa","path":"Static/FBAudienceNetwork.xcframework/ios-arm64/FBAudienceNetwork.framework/Headers/FBNativeAdBaseView.h","sourceTree":"","type":"file"},{"fileType":"sourcecode.c.h","guid":"bfdfe7dc352907fc980b868725387e986492f403cfeb0644ec43f03c121c3679","path":"Static/FBAudienceNetwork.xcframework/ios-arm64_x86_64-simulator/FBAudienceNetwork.framework/Headers/FBNativeAdBaseView.h","sourceTree":"","type":"file"},{"fileType":"sourcecode.c.h","guid":"bfdfe7dc352907fc980b868725387e98edc65ca557d7a9060300ab67b9662859","path":"Static/FBAudienceNetwork.xcframework/ios-arm64/FBAudienceNetwork.framework/Headers/FBNativeAdCollectionViewAdProvider.h","sourceTree":"","type":"file"},{"fileType":"sourcecode.c.h","guid":"bfdfe7dc352907fc980b868725387e98b36055abf1129d808ab6cacdcbccaba1","path":"Static/FBAudienceNetwork.xcframework/ios-arm64_x86_64-simulator/FBAudienceNetwork.framework/Headers/FBNativeAdCollectionViewAdProvider.h","sourceTree":"","type":"file"},{"fileType":"sourcecode.c.h","guid":"bfdfe7dc352907fc980b868725387e98199a1e1340aa6e60b29907f26ead9bc1","path":"Static/FBAudienceNetwork.xcframework/ios-arm64/FBAudienceNetwork.framework/Headers/FBNativeAdCollectionViewCellProvider.h","sourceTree":"","type":"file"},{"fileType":"sourcecode.c.h","guid":"bfdfe7dc352907fc980b868725387e98925bf2b00da26726de88e93a2a4f1e56","path":"Static/FBAudienceNetwork.xcframework/ios-arm64_x86_64-simulator/FBAudienceNetwork.framework/Headers/FBNativeAdCollectionViewCellProvider.h","sourceTree":"","type":"file"},{"fileType":"sourcecode.c.h","guid":"bfdfe7dc352907fc980b868725387e9814d3ba6df6d42e539acc6c93ef6bfc94","path":"Static/FBAudienceNetwork.xcframework/ios-arm64/FBAudienceNetwork.framework/Headers/FBNativeAdScrollView.h","sourceTree":"","type":"file"},{"fileType":"sourcecode.c.h","guid":"bfdfe7dc352907fc980b868725387e983ae60eade3baf6d8e906aba844054b57","path":"Static/FBAudienceNetwork.xcframework/ios-arm64_x86_64-simulator/FBAudienceNetwork.framework/Headers/FBNativeAdScrollView.h","sourceTree":"","type":"file"},{"fileType":"sourcecode.c.h","guid":"bfdfe7dc352907fc980b868725387e98ee4b4f4292b85e609c35c3dcb9248912","path":"Static/FBAudienceNetwork.xcframework/ios-arm64/FBAudienceNetwork.framework/Headers/FBNativeAdsManager.h","sourceTree":"","type":"file"},{"fileType":"sourcecode.c.h","guid":"bfdfe7dc352907fc980b868725387e980d45db556b84ae94ce4e46078f0df85b","path":"Static/FBAudienceNetwork.xcframework/ios-arm64_x86_64-simulator/FBAudienceNetwork.framework/Headers/FBNativeAdsManager.h","sourceTree":"","type":"file"},{"fileType":"sourcecode.c.h","guid":"bfdfe7dc352907fc980b868725387e9824e49f1279dd45180ece3fc08c75ba36","path":"Static/FBAudienceNetwork.xcframework/ios-arm64/FBAudienceNetwork.framework/Headers/FBNativeAdTableViewAdProvider.h","sourceTree":"","type":"file"},{"fileType":"sourcecode.c.h","guid":"bfdfe7dc352907fc980b868725387e9812b63f693d659db8569076d6ccb7353e","path":"Static/FBAudienceNetwork.xcframework/ios-arm64_x86_64-simulator/FBAudienceNetwork.framework/Headers/FBNativeAdTableViewAdProvider.h","sourceTree":"","type":"file"},{"fileType":"sourcecode.c.h","guid":"bfdfe7dc352907fc980b868725387e98c9dd1a4cec0ea7cdae22d9e61a25bc30","path":"Static/FBAudienceNetwork.xcframework/ios-arm64/FBAudienceNetwork.framework/Headers/FBNativeAdTableViewCellProvider.h","sourceTree":"","type":"file"},{"fileType":"sourcecode.c.h","guid":"bfdfe7dc352907fc980b868725387e98c41991b564f93766aaba04b99bc121eb","path":"Static/FBAudienceNetwork.xcframework/ios-arm64_x86_64-simulator/FBAudienceNetwork.framework/Headers/FBNativeAdTableViewCellProvider.h","sourceTree":"","type":"file"},{"fileType":"sourcecode.c.h","guid":"bfdfe7dc352907fc980b868725387e987205755b85acf72129f49800e910012f","path":"Static/FBAudienceNetwork.xcframework/ios-arm64/FBAudienceNetwork.framework/Headers/FBNativeAdView.h","sourceTree":"","type":"file"},{"fileType":"sourcecode.c.h","guid":"bfdfe7dc352907fc980b868725387e9803f2f55fd6116a4615e87684de21e3ab","path":"Static/FBAudienceNetwork.xcframework/ios-arm64_x86_64-simulator/FBAudienceNetwork.framework/Headers/FBNativeAdView.h","sourceTree":"","type":"file"},{"fileType":"sourcecode.c.h","guid":"bfdfe7dc352907fc980b868725387e984c54b733109f64120a65729950f711a7","path":"Static/FBAudienceNetwork.xcframework/ios-arm64/FBAudienceNetwork.framework/Headers/FBNativeAdViewAttributes.h","sourceTree":"","type":"file"},{"fileType":"sourcecode.c.h","guid":"bfdfe7dc352907fc980b868725387e983cf2b16f2c77a8946792104145320308","path":"Static/FBAudienceNetwork.xcframework/ios-arm64_x86_64-simulator/FBAudienceNetwork.framework/Headers/FBNativeAdViewAttributes.h","sourceTree":"","type":"file"},{"fileType":"sourcecode.c.h","guid":"bfdfe7dc352907fc980b868725387e987c997a3be6362831c8aa6e0286fd3688","path":"Static/FBAudienceNetwork.xcframework/ios-arm64/FBAudienceNetwork.framework/Headers/FBNativeBannerAd.h","sourceTree":"","type":"file"},{"fileType":"sourcecode.c.h","guid":"bfdfe7dc352907fc980b868725387e987c8570d006f483f0c3aa0e9c727e4c7d","path":"Static/FBAudienceNetwork.xcframework/ios-arm64_x86_64-simulator/FBAudienceNetwork.framework/Headers/FBNativeBannerAd.h","sourceTree":"","type":"file"},{"fileType":"sourcecode.c.h","guid":"bfdfe7dc352907fc980b868725387e989ed7a853d1365d7b9e2a8004207f79eb","path":"Static/FBAudienceNetwork.xcframework/ios-arm64/FBAudienceNetwork.framework/Headers/FBNativeBannerAdView.h","sourceTree":"","type":"file"},{"fileType":"sourcecode.c.h","guid":"bfdfe7dc352907fc980b868725387e987f17328259bed7b032673765c4ff2f52","path":"Static/FBAudienceNetwork.xcframework/ios-arm64_x86_64-simulator/FBAudienceNetwork.framework/Headers/FBNativeBannerAdView.h","sourceTree":"","type":"file"},{"fileType":"sourcecode.c.h","guid":"bfdfe7dc352907fc980b868725387e98b05774fa05fa68e72bbeca3f94034371","path":"Static/FBAudienceNetwork.xcframework/ios-arm64/FBAudienceNetwork.framework/Headers/FBRewardedInterstitialAd.h","sourceTree":"","type":"file"},{"fileType":"sourcecode.c.h","guid":"bfdfe7dc352907fc980b868725387e98ee2a542ba58a57e7d86e354e6608a3c9","path":"Static/FBAudienceNetwork.xcframework/ios-arm64_x86_64-simulator/FBAudienceNetwork.framework/Headers/FBRewardedInterstitialAd.h","sourceTree":"","type":"file"},{"fileType":"sourcecode.c.h","guid":"bfdfe7dc352907fc980b868725387e98fc3cd5089234a53e65e9a84efd8b67bf","path":"Static/FBAudienceNetwork.xcframework/ios-arm64/FBAudienceNetwork.framework/Headers/FBRewardedVideoAd.h","sourceTree":"","type":"file"},{"fileType":"sourcecode.c.h","guid":"bfdfe7dc352907fc980b868725387e9835e0c14be76420016208797d6f238e19","path":"Static/FBAudienceNetwork.xcframework/ios-arm64_x86_64-simulator/FBAudienceNetwork.framework/Headers/FBRewardedVideoAd.h","sourceTree":"","type":"file"},{"fileType":"sourcecode.c.h","guid":"bfdfe7dc352907fc980b868725387e980aaf99a60f6d67a0d28487a35e128cf0","path":"Static/FBAudienceNetwork.xcframework/ios-arm64/FBAudienceNetwork.framework/Headers/FBRewardedVideoAdBridge.h","sourceTree":"","type":"file"},{"fileType":"sourcecode.c.h","guid":"bfdfe7dc352907fc980b868725387e98d0f0451fd494e057354cbeee896cfbc3","path":"Static/FBAudienceNetwork.xcframework/ios-arm64_x86_64-simulator/FBAudienceNetwork.framework/Headers/FBRewardedVideoAdBridge.h","sourceTree":"","type":"file"},{"fileType":"sourcecode.c.h","guid":"bfdfe7dc352907fc980b868725387e98e38db7fa44e01f33905356808fb82d8f","path":"Static/FBAudienceNetwork.xcframework/ios-arm64/FBAudienceNetwork.framework/Headers/UIView+FBNativeAdViewTag.h","sourceTree":"","type":"file"},{"fileType":"sourcecode.c.h","guid":"bfdfe7dc352907fc980b868725387e9859499c8cfe7e945035978a3a32243767","path":"Static/FBAudienceNetwork.xcframework/ios-arm64_x86_64-simulator/FBAudienceNetwork.framework/Headers/UIView+FBNativeAdViewTag.h","sourceTree":"","type":"file"},{"children":[{"fileType":"wrapper.xcframework","guid":"bfdfe7dc352907fc980b868725387e9884b95a9dece22dff00b910decf728631","path":"Static/FBAudienceNetwork.xcframework","sourceTree":"","type":"file"}],"guid":"bfdfe7dc352907fc980b868725387e9830aaa3b2cc6399b4cf4102e834790539","name":"Frameworks","path":"","sourceTree":"","type":"group"},{"children":[{"fileType":"text.xml","guid":"bfdfe7dc352907fc980b868725387e9800817c14be55ffe583e047275a4b3cda","path":"Static/FBAudienceNetwork.xcframework/ios-arm64/FBAudienceNetwork.framework/PrivacyInfo.xcprivacy","sourceTree":"","type":"file"}],"guid":"bfdfe7dc352907fc980b868725387e98be01a3e6e0756a45e82b4c77d2a75889","name":"Resources","path":"","sourceTree":"","type":"group"},{"children":[{"fileType":"text.script.sh","guid":"bfdfe7dc352907fc980b868725387e9885d367cde416a3b67a0542ca00669a48","path":"FBAudienceNetwork-xcframeworks.sh","sourceTree":"","type":"file"},{"fileType":"text.xcconfig","guid":"bfdfe7dc352907fc980b868725387e98ae2b6e690d9c19a64378428b59f82e0b","path":"FBAudienceNetwork.debug.xcconfig","sourceTree":"","type":"file"},{"fileType":"text.xcconfig","guid":"bfdfe7dc352907fc980b868725387e98bf594d3cbb3ba4c66c475a7d56edf012","path":"FBAudienceNetwork.release.xcconfig","sourceTree":"","type":"file"},{"fileType":"text.plist.xml","guid":"bfdfe7dc352907fc980b868725387e981b5b96984ff9136807c0f71d7f491493","path":"ResourceBundle-FBAudienceNetwork-FBAudienceNetwork-Info.plist","sourceTree":"","type":"file"}],"guid":"bfdfe7dc352907fc980b868725387e98e01f03beafa1c2122fceb6d19e38b2ba","name":"Support Files","path":"../Target Support Files/FBAudienceNetwork","sourceTree":"","type":"group"}],"guid":"bfdfe7dc352907fc980b868725387e987cd62d1eeef7de115a08dd9fda096c73","name":"FBAudienceNetwork","path":"FBAudienceNetwork","sourceTree":"","type":"group"},{"children":[{"children":[{"fileType":"sourcecode.c.h","guid":"bfdfe7dc352907fc980b868725387e989cdf761bfdb923827837a9ef42356175","path":"CoreOnly/Sources/Firebase.h","sourceTree":"","type":"file"}],"guid":"bfdfe7dc352907fc980b868725387e98438f94efac4794553543cf1349c1431a","name":"CoreOnly","path":"","sourceTree":"","type":"group"},{"children":[{"fileType":"text.xcconfig","guid":"bfdfe7dc352907fc980b868725387e98e7f2a28e7b8ddc8b338bf3b440155a56","path":"Firebase.debug.xcconfig","sourceTree":"","type":"file"},{"fileType":"text.xcconfig","guid":"bfdfe7dc352907fc980b868725387e984c35e946ddb98e62c2ccb9cc1055f1ac","path":"Firebase.release.xcconfig","sourceTree":"","type":"file"}],"guid":"bfdfe7dc352907fc980b868725387e98c34cf5b01a9396117142bd03e118dc61","name":"Support Files","path":"../Target Support Files/Firebase","sourceTree":"","type":"group"}],"guid":"bfdfe7dc352907fc980b868725387e981b20b2d72239884cf9cd9a46246cecf1","name":"Firebase","path":"Firebase","sourceTree":"","type":"group"},{"children":[{"fileType":"sourcecode.c.h","guid":"bfdfe7dc352907fc980b868725387e98cc62704582d6538d2c8174cc4716bd01","path":"FirebaseAppCheck/Sources/Core/FIRApp+AppCheck.h","sourceTree":"","type":"file"},{"fileType":"sourcecode.c.objc","guid":"bfdfe7dc352907fc980b868725387e985a9877f895a7208fca1225e9aac58deb","path":"FirebaseAppCheck/Sources/Core/FIRApp+AppCheck.m","sourceTree":"","type":"file"},{"fileType":"sourcecode.c.h","guid":"bfdfe7dc352907fc980b868725387e98fbd90d23a9844d554e6c9a88b7a47396","path":"FirebaseAppCheck/Sources/Public/FirebaseAppCheck/FIRAppAttestProvider.h","sourceTree":"","type":"file"},{"fileType":"sourcecode.c.objc","guid":"bfdfe7dc352907fc980b868725387e984f7216d9ae43747c39f20e03ebed994a","path":"FirebaseAppCheck/Sources/AppAttestProvider/FIRAppAttestProvider.m","sourceTree":"","type":"file"},{"fileType":"sourcecode.c.h","guid":"bfdfe7dc352907fc980b868725387e983bc0545c109603b43fe7a712a18dd4ed","path":"FirebaseAppCheck/Sources/Public/FirebaseAppCheck/FIRAppCheck.h","sourceTree":"","type":"file"},{"fileType":"sourcecode.c.objc","guid":"bfdfe7dc352907fc980b868725387e98e5c73c8c1278df91bc0ad8f58764b0ca","path":"FirebaseAppCheck/Sources/Core/FIRAppCheck.m","sourceTree":"","type":"file"},{"fileType":"sourcecode.c.h","guid":"bfdfe7dc352907fc980b868725387e980969a6e00d9b9e9eadd3837e5f867ec2","path":"FirebaseAppCheck/Sources/Core/FIRAppCheck+Internal.h","sourceTree":"","type":"file"},{"fileType":"sourcecode.c.h","guid":"bfdfe7dc352907fc980b868725387e9876546db88afa14aa0230a40315a8e9cb","path":"FirebaseAppCheck/Sources/Public/FirebaseAppCheck/FIRAppCheckAvailability.h","sourceTree":"","type":"file"},{"fileType":"sourcecode.c.objc","guid":"bfdfe7dc352907fc980b868725387e98d015c60cb1e8278e460e203665420af4","path":"FirebaseAppCheck/Sources/Core/FIRAppCheckComponent.m","sourceTree":"","type":"file"},{"fileType":"sourcecode.c.h","guid":"bfdfe7dc352907fc980b868725387e986055f501457bc6efb35bf3aa8c3a44a4","path":"FirebaseAppCheck/Sources/Public/FirebaseAppCheck/FIRAppCheckDebugProvider.h","sourceTree":"","type":"file"},{"fileType":"sourcecode.c.objc","guid":"bfdfe7dc352907fc980b868725387e984db12fbce05cdb1e7d06a4628004dfee","path":"FirebaseAppCheck/Sources/DebugProvider/FIRAppCheckDebugProvider.m","sourceTree":"","type":"file"},{"fileType":"sourcecode.c.h","guid":"bfdfe7dc352907fc980b868725387e98868da319a13b4790783057bfbc4a8856","path":"FirebaseAppCheck/Sources/Public/FirebaseAppCheck/FIRAppCheckDebugProviderFactory.h","sourceTree":"","type":"file"},{"fileType":"sourcecode.c.objc","guid":"bfdfe7dc352907fc980b868725387e98bac4d0c002f00c3c0aadb1f86bea4db4","path":"FirebaseAppCheck/Sources/DebugProvider/FIRAppCheckDebugProviderFactory.m","sourceTree":"","type":"file"},{"fileType":"sourcecode.c.h","guid":"bfdfe7dc352907fc980b868725387e983250e0568fe4851d28a49a6f1cda2099","path":"FirebaseAppCheck/Sources/Public/FirebaseAppCheck/FIRAppCheckErrors.h","sourceTree":"","type":"file"},{"fileType":"sourcecode.c.objc","guid":"bfdfe7dc352907fc980b868725387e9879f6b6f0297ecaf4f94f56f86cbecd39","path":"FirebaseAppCheck/Sources/Core/Errors/FIRAppCheckErrors.m","sourceTree":"","type":"file"},{"fileType":"sourcecode.c.h","guid":"bfdfe7dc352907fc980b868725387e98af65f253db51a8a01b417fbacaee2077","path":"FirebaseAppCheck/Sources/Core/Errors/FIRAppCheckErrorUtil.h","sourceTree":"","type":"file"},{"fileType":"sourcecode.c.objc","guid":"bfdfe7dc352907fc980b868725387e98a467dc7f67b13c6f382fc0476ecf3578","path":"FirebaseAppCheck/Sources/Core/Errors/FIRAppCheckErrorUtil.m","sourceTree":"","type":"file"},{"fileType":"sourcecode.c.h","guid":"bfdfe7dc352907fc980b868725387e982b2d142e274ac25a0561c078b47b5010","path":"FirebaseAppCheck/Sources/Core/FIRAppCheckLogger.h","sourceTree":"","type":"file"},{"fileType":"sourcecode.c.objc","guid":"bfdfe7dc352907fc980b868725387e988c010400b28cbe56f5bc69ec4f46feac","path":"FirebaseAppCheck/Sources/Core/FIRAppCheckLogger.m","sourceTree":"","type":"file"},{"fileType":"sourcecode.c.h","guid":"bfdfe7dc352907fc980b868725387e98355bf2abe13f0f83f9f3bb625c809df7","path":"FirebaseAppCheck/Sources/Public/FirebaseAppCheck/FIRAppCheckProvider.h","sourceTree":"","type":"file"},{"fileType":"sourcecode.c.h","guid":"bfdfe7dc352907fc980b868725387e980d7be89019113857f905dea093b1ce52","path":"FirebaseAppCheck/Sources/Public/FirebaseAppCheck/FIRAppCheckProviderFactory.h","sourceTree":"","type":"file"},{"fileType":"sourcecode.c.h","guid":"bfdfe7dc352907fc980b868725387e98f01ba42cf03b5479cb00e8e2f1e498f0","path":"FirebaseAppCheck/Sources/Core/FIRAppCheckSettings.h","sourceTree":"","type":"file"},{"fileType":"sourcecode.c.objc","guid":"bfdfe7dc352907fc980b868725387e98e83b31792a4a77b69618b6c4e11a7b1e","path":"FirebaseAppCheck/Sources/Core/FIRAppCheckSettings.m","sourceTree":"","type":"file"},{"fileType":"sourcecode.c.h","guid":"bfdfe7dc352907fc980b868725387e98d719dfabd618a96b66dbf19219ed765b","path":"FirebaseAppCheck/Sources/Public/FirebaseAppCheck/FIRAppCheckToken.h","sourceTree":"","type":"file"},{"fileType":"sourcecode.c.objc","guid":"bfdfe7dc352907fc980b868725387e9814f775d5813351265e9acad2e605cec6","path":"FirebaseAppCheck/Sources/Core/FIRAppCheckToken.m","sourceTree":"","type":"file"},{"fileType":"sourcecode.c.h","guid":"bfdfe7dc352907fc980b868725387e98d668922bc499462306878885b18a5df3","path":"FirebaseAppCheck/Sources/Core/FIRAppCheckToken+Internal.h","sourceTree":"","type":"file"},{"fileType":"sourcecode.c.h","guid":"bfdfe7dc352907fc980b868725387e9876df4e8ca94b5e724a4e852778743c1e","path":"FirebaseAppCheck/Sources/Core/FIRAppCheckTokenResult.h","sourceTree":"","type":"file"},{"fileType":"sourcecode.c.objc","guid":"bfdfe7dc352907fc980b868725387e98ee9616d51dbd0978b6b1160bde75c0fe","path":"FirebaseAppCheck/Sources/Core/FIRAppCheckTokenResult.m","sourceTree":"","type":"file"},{"fileType":"sourcecode.c.h","guid":"bfdfe7dc352907fc980b868725387e986ae26e21f215969b335fcf089dce8a46","path":"FirebaseAppCheck/Sources/Core/FIRAppCheckValidator.h","sourceTree":"","type":"file"},{"fileType":"sourcecode.c.objc","guid":"bfdfe7dc352907fc980b868725387e98e48ac13f4b49e42bf03aa112e4b5d6e7","path":"FirebaseAppCheck/Sources/Core/FIRAppCheckValidator.m","sourceTree":"","type":"file"},{"fileType":"sourcecode.c.h","guid":"bfdfe7dc352907fc980b868725387e98b169de74071925d7b12305e13c960697","path":"FirebaseCore/Extension/FIRAppInternal.h","sourceTree":"","type":"file"},{"fileType":"sourcecode.c.h","guid":"bfdfe7dc352907fc980b868725387e982d03e6a9e16ca15419865ec53d554960","path":"FirebaseCore/Extension/FIRComponent.h","sourceTree":"","type":"file"},{"fileType":"sourcecode.c.h","guid":"bfdfe7dc352907fc980b868725387e98955d9460628f5b5da0340d52b3be53ca","path":"FirebaseCore/Extension/FIRComponentContainer.h","sourceTree":"","type":"file"},{"fileType":"sourcecode.c.h","guid":"bfdfe7dc352907fc980b868725387e982d929aa8b59449447362db17859560b7","path":"FirebaseCore/Extension/FIRComponentType.h","sourceTree":"","type":"file"},{"fileType":"sourcecode.c.h","guid":"bfdfe7dc352907fc980b868725387e981059d7aa812d14711b030e28c61bcb6e","path":"FirebaseAppCheck/Sources/Public/FirebaseAppCheck/FIRDeviceCheckProvider.h","sourceTree":"","type":"file"},{"fileType":"sourcecode.c.objc","guid":"bfdfe7dc352907fc980b868725387e9852fe7745f4b2772e6cd3cba24e695be8","path":"FirebaseAppCheck/Sources/DeviceCheckProvider/FIRDeviceCheckProvider.m","sourceTree":"","type":"file"},{"fileType":"sourcecode.c.h","guid":"bfdfe7dc352907fc980b868725387e98c74baa67d92d7c59a439c5411d5e8e6b","path":"FirebaseAppCheck/Sources/Public/FirebaseAppCheck/FIRDeviceCheckProviderFactory.h","sourceTree":"","type":"file"},{"fileType":"sourcecode.c.objc","guid":"bfdfe7dc352907fc980b868725387e98b99858e5d1ba7051c08bda553f5cbabe","path":"FirebaseAppCheck/Sources/DeviceCheckProvider/FIRDeviceCheckProviderFactory.m","sourceTree":"","type":"file"},{"fileType":"sourcecode.c.h","guid":"bfdfe7dc352907fc980b868725387e988d83ba06705aee54c5af980140a6c893","path":"FirebaseAppCheck/Sources/Public/FirebaseAppCheck/FirebaseAppCheck.h","sourceTree":"","type":"file"},{"fileType":"sourcecode.c.h","guid":"bfdfe7dc352907fc980b868725387e98fd3fc54900e75a3cfcce7c2bb219927b","path":"FirebaseCore/Extension/FirebaseCoreInternal.h","sourceTree":"","type":"file"},{"fileType":"sourcecode.c.h","guid":"bfdfe7dc352907fc980b868725387e9852e8ed178d953a6776178ef48ee2814d","path":"FirebaseCore/Extension/FIRHeartbeatLogger.h","sourceTree":"","type":"file"},{"fileType":"sourcecode.c.h","guid":"bfdfe7dc352907fc980b868725387e9816e853290c59ddfa95048f95507f1212","path":"FirebaseAppCheck/Sources/Core/FIRHeartbeatLogger+AppCheck.h","sourceTree":"","type":"file"},{"fileType":"sourcecode.c.objc","guid":"bfdfe7dc352907fc980b868725387e9809a30ce0fe1dd3695686a996a065f387","path":"FirebaseAppCheck/Sources/Core/FIRHeartbeatLogger+AppCheck.m","sourceTree":"","type":"file"},{"fileType":"sourcecode.c.h","guid":"bfdfe7dc352907fc980b868725387e989213e7824c44f61ef818503291e680e0","path":"FirebaseAppCheck/Sources/Core/FIRInternalAppCheckProvider.h","sourceTree":"","type":"file"},{"fileType":"sourcecode.c.objc","guid":"bfdfe7dc352907fc980b868725387e985c461ab6a7e9879b6fa6169adaab3d61","path":"FirebaseAppCheck/Sources/Core/FIRInternalAppCheckProvider.m","sourceTree":"","type":"file"},{"fileType":"sourcecode.c.h","guid":"bfdfe7dc352907fc980b868725387e982afb2c662f2c43daeead1d89b85cc4be","path":"FirebaseCore/Extension/FIRLibrary.h","sourceTree":"","type":"file"},{"fileType":"sourcecode.c.h","guid":"bfdfe7dc352907fc980b868725387e9889e260595c9bb6055f19e49c4ac1de2a","path":"FirebaseCore/Extension/FIRLogger.h","sourceTree":"","type":"file"},{"children":[{"fileType":"sourcecode.module-map","guid":"bfdfe7dc352907fc980b868725387e980211d9daa87a7ac73f52199f3828d9bc","path":"FirebaseAppCheck.modulemap","sourceTree":"","type":"file"},{"fileType":"sourcecode.c.objc","guid":"bfdfe7dc352907fc980b868725387e98c97cf347ee33ebdbcaaf450c07f28d2e","path":"FirebaseAppCheck-dummy.m","sourceTree":"","type":"file"},{"fileType":"text.plist.xml","guid":"bfdfe7dc352907fc980b868725387e98aee35db10f9e9681f7d55fd50f470494","path":"FirebaseAppCheck-Info.plist","sourceTree":"","type":"file"},{"fileType":"sourcecode.c.h","guid":"bfdfe7dc352907fc980b868725387e9804717059d9181565ee5576a9e39236df","path":"FirebaseAppCheck-umbrella.h","sourceTree":"","type":"file"},{"fileType":"text.xcconfig","guid":"bfdfe7dc352907fc980b868725387e98dcc81be3bb552d5ea4561a1ae5bb7340","path":"FirebaseAppCheck.debug.xcconfig","sourceTree":"","type":"file"},{"fileType":"text.xcconfig","guid":"bfdfe7dc352907fc980b868725387e9858ca2cea4d0cfb89402980161e9a9cd8","path":"FirebaseAppCheck.release.xcconfig","sourceTree":"","type":"file"}],"guid":"bfdfe7dc352907fc980b868725387e98d5af18d2974cf2b5dcf20db5050fc6dc","name":"Support Files","path":"../Target Support Files/FirebaseAppCheck","sourceTree":"","type":"group"}],"guid":"bfdfe7dc352907fc980b868725387e983560308e098e7b342a3809e629740fd6","name":"FirebaseAppCheck","path":"FirebaseAppCheck","sourceTree":"","type":"group"},{"children":[{"fileType":"sourcecode.c.objc","guid":"bfdfe7dc352907fc980b868725387e98c0c7690085e912d942bf2e237c7d1c7b","path":"FirebaseAppCheck/Interop/dummy.m","sourceTree":"","type":"file"},{"fileType":"sourcecode.c.h","guid":"bfdfe7dc352907fc980b868725387e98a7311458b4843df9e67745481ba7c0e5","path":"FirebaseAppCheck/Interop/Public/FirebaseAppCheckInterop/FIRAppCheckInterop.h","sourceTree":"","type":"file"},{"fileType":"sourcecode.c.h","guid":"bfdfe7dc352907fc980b868725387e9829de89cb8f108e22ea823c6be6f50bb8","path":"FirebaseAppCheck/Interop/Public/FirebaseAppCheckInterop/FIRAppCheckTokenResultInterop.h","sourceTree":"","type":"file"},{"fileType":"sourcecode.c.h","guid":"bfdfe7dc352907fc980b868725387e9844c414003af70893691ff86752a3f856","path":"FirebaseAppCheck/Interop/Public/FirebaseAppCheckInterop/FirebaseAppCheckInterop.h","sourceTree":"","type":"file"},{"children":[{"fileType":"sourcecode.module-map","guid":"bfdfe7dc352907fc980b868725387e9872b498b3776044752bd0c53d637ca81b","path":"FirebaseAppCheckInterop.modulemap","sourceTree":"","type":"file"},{"fileType":"sourcecode.c.objc","guid":"bfdfe7dc352907fc980b868725387e982a30bb5a8768c4121de0072fc14d52a0","path":"FirebaseAppCheckInterop-dummy.m","sourceTree":"","type":"file"},{"fileType":"text.plist.xml","guid":"bfdfe7dc352907fc980b868725387e980c7d6880ccab0cfe81163d5223da4b7c","path":"FirebaseAppCheckInterop-Info.plist","sourceTree":"","type":"file"},{"fileType":"sourcecode.c.h","guid":"bfdfe7dc352907fc980b868725387e98d9599bd862208bd721e00a4a12690380","path":"FirebaseAppCheckInterop-prefix.pch","sourceTree":"","type":"file"},{"fileType":"sourcecode.c.h","guid":"bfdfe7dc352907fc980b868725387e985a1fa15e8a7202370ebafaea17bc9527","path":"FirebaseAppCheckInterop-umbrella.h","sourceTree":"","type":"file"},{"fileType":"text.xcconfig","guid":"bfdfe7dc352907fc980b868725387e98421994bc5dd043094766f7b84b26a0c6","path":"FirebaseAppCheckInterop.debug.xcconfig","sourceTree":"","type":"file"},{"fileType":"text.xcconfig","guid":"bfdfe7dc352907fc980b868725387e98b37eb9d9e658784e2a78517cf0f13af6","path":"FirebaseAppCheckInterop.release.xcconfig","sourceTree":"","type":"file"}],"guid":"bfdfe7dc352907fc980b868725387e980f3ab6077c6847a34ed9d8382cee65ce","name":"Support Files","path":"../Target Support Files/FirebaseAppCheckInterop","sourceTree":"","type":"group"}],"guid":"bfdfe7dc352907fc980b868725387e98a2ec04a7a30518162198b66acd03a635","name":"FirebaseAppCheckInterop","path":"FirebaseAppCheckInterop","sourceTree":"","type":"group"},{"children":[{"fileType":"sourcecode.swift","guid":"bfdfe7dc352907fc980b868725387e986ed0fe803e5e9f958a7a9c4d9341682d","path":"FirebaseAuth/Sources/Swift/ActionCode/ActionCodeInfo.swift","sourceTree":"","type":"file"},{"fileType":"sourcecode.swift","guid":"bfdfe7dc352907fc980b868725387e98df840a4cc19a73fbfc9de23d95ea4708","path":"FirebaseAuth/Sources/Swift/ActionCode/ActionCodeOperation.swift","sourceTree":"","type":"file"},{"fileType":"sourcecode.swift","guid":"bfdfe7dc352907fc980b868725387e9812e153f43d8c8c8f356f5148e516cca0","path":"FirebaseAuth/Sources/Swift/ActionCode/ActionCodeSettings.swift","sourceTree":"","type":"file"},{"fileType":"sourcecode.swift","guid":"bfdfe7dc352907fc980b868725387e98ee0255ea1e007a5b0217b62542c6b70d","path":"FirebaseAuth/Sources/Swift/ActionCode/ActionCodeURL.swift","sourceTree":"","type":"file"},{"fileType":"sourcecode.swift","guid":"bfdfe7dc352907fc980b868725387e98dbe0c047f7ef2bbaa652ae3dc458a985","path":"FirebaseAuth/Sources/Swift/User/AdditionalUserInfo.swift","sourceTree":"","type":"file"},{"fileType":"sourcecode.swift","guid":"bfdfe7dc352907fc980b868725387e9841946e8c5c51d7ff21c3c09451da596d","path":"FirebaseAuth/Sources/Swift/Auth/Auth.swift","sourceTree":"","type":"file"},{"fileType":"sourcecode.swift","guid":"bfdfe7dc352907fc980b868725387e98245f1ef0e5ded755952473e4d2276030","path":"FirebaseAuth/Sources/Swift/SystemService/AuthAPNSToken.swift","sourceTree":"","type":"file"},{"fileType":"sourcecode.swift","guid":"bfdfe7dc352907fc980b868725387e9895a020d668ee677ee2edc02b024aa625","path":"FirebaseAuth/Sources/Swift/SystemService/AuthAPNSTokenManager.swift","sourceTree":"","type":"file"},{"fileType":"sourcecode.swift","guid":"bfdfe7dc352907fc980b868725387e98f171b0d6e6d7265241cf0eb8f4f3f584","path":"FirebaseAuth/Sources/Swift/SystemService/AuthAPNSTokenType.swift","sourceTree":"","type":"file"},{"fileType":"sourcecode.swift","guid":"bfdfe7dc352907fc980b868725387e98341d38a094f897cf5dd0a4918c8865f2","path":"FirebaseAuth/Sources/Swift/SystemService/AuthAppCredential.swift","sourceTree":"","type":"file"},{"fileType":"sourcecode.swift","guid":"bfdfe7dc352907fc980b868725387e98f415edf05761e36c2f309be524c1706d","path":"FirebaseAuth/Sources/Swift/SystemService/AuthAppCredentialManager.swift","sourceTree":"","type":"file"},{"fileType":"sourcecode.swift","guid":"bfdfe7dc352907fc980b868725387e980f6007ab2b4227db8a90954c2fe0bd54","path":"FirebaseAuth/Sources/Swift/Backend/AuthBackend.swift","sourceTree":"","type":"file"},{"fileType":"sourcecode.swift","guid":"bfdfe7dc352907fc980b868725387e980771b86e7c5c94837366efba22ffc771","path":"FirebaseAuth/Sources/Swift/Backend/AuthBackendRPCIssuer.swift","sourceTree":"","type":"file"},{"fileType":"sourcecode.swift","guid":"bfdfe7dc352907fc980b868725387e985a832d2cff79b53693ec89e1007060f4","path":"FirebaseAuth/Sources/Swift/Auth/AuthComponent.swift","sourceTree":"","type":"file"},{"fileType":"sourcecode.swift","guid":"bfdfe7dc352907fc980b868725387e98929647b475e2c223c9e642a49d717b03","path":"FirebaseAuth/Sources/Swift/Utilities/AuthCondition.swift","sourceTree":"","type":"file"},{"fileType":"sourcecode.swift","guid":"bfdfe7dc352907fc980b868725387e981f237ef3f88f70d2cea687a28fb706a9","path":"FirebaseAuth/Sources/Swift/AuthProvider/AuthCredential.swift","sourceTree":"","type":"file"},{"fileType":"sourcecode.swift","guid":"bfdfe7dc352907fc980b868725387e9878d4a02f39de63e3d1106735da970ca7","path":"FirebaseAuth/Sources/Swift/Auth/AuthDataResult.swift","sourceTree":"","type":"file"},{"fileType":"sourcecode.swift","guid":"bfdfe7dc352907fc980b868725387e987dcc3a7b3e74f870d6620b9a2a2ecf5c","path":"FirebaseAuth/Sources/Swift/Utilities/AuthDefaultUIDelegate.swift","sourceTree":"","type":"file"},{"fileType":"sourcecode.swift","guid":"bfdfe7dc352907fc980b868725387e98bfba41555dc0fdafe3758671a4c8b5c4","path":"FirebaseAuth/Sources/Swift/Auth/AuthDispatcher.swift","sourceTree":"","type":"file"},{"fileType":"sourcecode.swift","guid":"bfdfe7dc352907fc980b868725387e98e0a494f1dd43b14ca8fbd67830a4299a","path":"FirebaseAuth/Sources/Swift/Utilities/AuthErrors.swift","sourceTree":"","type":"file"},{"fileType":"sourcecode.swift","guid":"bfdfe7dc352907fc980b868725387e9884262f11f18e1ece922d28e9a5d86359","path":"FirebaseAuth/Sources/Swift/Utilities/AuthErrorUtils.swift","sourceTree":"","type":"file"},{"fileType":"sourcecode.swift","guid":"bfdfe7dc352907fc980b868725387e98b1cc66b4cfe08f3b3d9994f6667b1c8f","path":"FirebaseAuth/Sources/Swift/Auth/AuthGlobalWorkQueue.swift","sourceTree":"","type":"file"},{"fileType":"sourcecode.swift","guid":"bfdfe7dc352907fc980b868725387e9802ac367029fcec689c560e9c09956577","path":"FirebaseAuth/Sources/Swift/Utilities/AuthInternalErrors.swift","sourceTree":"","type":"file"},{"fileType":"sourcecode.swift","guid":"bfdfe7dc352907fc980b868725387e98c55adbc69af63b3fae534d4d32bbb7d9","path":"FirebaseAuth/Sources/Swift/Storage/AuthKeychainServices.swift","sourceTree":"","type":"file"},{"fileType":"sourcecode.swift","guid":"bfdfe7dc352907fc980b868725387e98c7ba925bcaab2ef799e067fb09524783","path":"FirebaseAuth/Sources/Swift/Storage/AuthKeychainStorage.swift","sourceTree":"","type":"file"},{"fileType":"sourcecode.swift","guid":"bfdfe7dc352907fc980b868725387e9811c9e44fde5c048982c7190a2b83b582","path":"FirebaseAuth/Sources/Swift/Storage/AuthKeychainStorageReal.swift","sourceTree":"","type":"file"},{"fileType":"sourcecode.swift","guid":"bfdfe7dc352907fc980b868725387e9854254b2427cbf1030d7399e4bf859971","path":"FirebaseAuth/Sources/Swift/Utilities/AuthLog.swift","sourceTree":"","type":"file"},{"fileType":"sourcecode.swift","guid":"bfdfe7dc352907fc980b868725387e98978d22922ec60f31d6f5a06b5fb057c2","path":"FirebaseAuth/Sources/Swift/Backend/RPC/AuthMFAResponse.swift","sourceTree":"","type":"file"},{"fileType":"sourcecode.swift","guid":"bfdfe7dc352907fc980b868725387e9890e5f1c028980f312accdb59b79b8c9a","path":"FirebaseAuth/Sources/Swift/SystemService/AuthNotificationManager.swift","sourceTree":"","type":"file"},{"fileType":"sourcecode.swift","guid":"bfdfe7dc352907fc980b868725387e98e31f8b7b95878bd97624e635f148c67f","path":"FirebaseAuth/Sources/Swift/Auth/AuthOperationType.swift","sourceTree":"","type":"file"},{"fileType":"sourcecode.swift","guid":"bfdfe7dc352907fc980b868725387e9847885db3e68e8f2c66b87e797e2b20b7","path":"FirebaseAuth/Sources/Swift/Backend/RPC/Proto/AuthProto.swift","sourceTree":"","type":"file"},{"fileType":"sourcecode.swift","guid":"bfdfe7dc352907fc980b868725387e983b65068db43de39e5b21be2c4940e213","path":"FirebaseAuth/Sources/Swift/Backend/RPC/Proto/Phone/AuthProtoFinalizeMFAPhoneRequestInfo.swift","sourceTree":"","type":"file"},{"fileType":"sourcecode.swift","guid":"bfdfe7dc352907fc980b868725387e983266b5201df1b292d44394e8b0d06351","path":"FirebaseAuth/Sources/Swift/Backend/RPC/Proto/Phone/AuthProtoFinalizeMFAPhoneResponseInfo.swift","sourceTree":"","type":"file"},{"fileType":"sourcecode.swift","guid":"bfdfe7dc352907fc980b868725387e98acb7d384e534589053b3d54ec83848e6","path":"FirebaseAuth/Sources/Swift/Backend/RPC/Proto/TOTP/AuthProtoFinalizeMFATOTPEnrollmentRequestInfo.swift","sourceTree":"","type":"file"},{"fileType":"sourcecode.swift","guid":"bfdfe7dc352907fc980b868725387e988f0aa9a15a980855bb5cd22dd973231e","path":"FirebaseAuth/Sources/Swift/Backend/RPC/Proto/TOTP/AuthProtoFinalizeMFATOTPEnrollmentResponseInfo.swift","sourceTree":"","type":"file"},{"fileType":"sourcecode.swift","guid":"bfdfe7dc352907fc980b868725387e9833c26626cd1780126c024ea0c1ab99a3","path":"FirebaseAuth/Sources/Swift/Backend/RPC/Proto/TOTP/AuthProtoFinalizeMFATOTPSignInRequestInfo.swift","sourceTree":"","type":"file"},{"fileType":"sourcecode.swift","guid":"bfdfe7dc352907fc980b868725387e98601f5533331fe93d3990abed0a6d8df0","path":"FirebaseAuth/Sources/Swift/Backend/RPC/Proto/AuthProtoMFAEnrollment.swift","sourceTree":"","type":"file"},{"fileType":"sourcecode.swift","guid":"bfdfe7dc352907fc980b868725387e98a00810df46bf1461328c3bae378e67ca","path":"FirebaseAuth/Sources/Swift/Backend/RPC/Proto/Phone/AuthProtoStartMFAPhoneRequestInfo.swift","sourceTree":"","type":"file"},{"fileType":"sourcecode.swift","guid":"bfdfe7dc352907fc980b868725387e98657f85d6f26e1dccdccdadf67c06a872","path":"FirebaseAuth/Sources/Swift/Backend/RPC/Proto/Phone/AuthProtoStartMFAPhoneResponseInfo.swift","sourceTree":"","type":"file"},{"fileType":"sourcecode.swift","guid":"bfdfe7dc352907fc980b868725387e98ccdf38e87f3adf13c65d8b750a8a5d21","path":"FirebaseAuth/Sources/Swift/Backend/RPC/Proto/TOTP/AuthProtoStartMFATOTPEnrollmentRequestInfo.swift","sourceTree":"","type":"file"},{"fileType":"sourcecode.swift","guid":"bfdfe7dc352907fc980b868725387e989704c064dda1053b269cf2b66cae4669","path":"FirebaseAuth/Sources/Swift/Backend/RPC/Proto/TOTP/AuthProtoStartMFATOTPEnrollmentResponseInfo.swift","sourceTree":"","type":"file"},{"fileType":"sourcecode.swift","guid":"bfdfe7dc352907fc980b868725387e9897b3d707d3e694c92e507edb2f3b5ebc","path":"FirebaseAuth/Sources/Swift/AuthProvider/AuthProviderID.swift","sourceTree":"","type":"file"},{"fileType":"sourcecode.swift","guid":"bfdfe7dc352907fc980b868725387e9847039eb0446879e37839563d32a579c0","path":"FirebaseAuth/Sources/Swift/Utilities/AuthRecaptchaVerifier.swift","sourceTree":"","type":"file"},{"fileType":"sourcecode.swift","guid":"bfdfe7dc352907fc980b868725387e983df13d08c3764514e1e73c1415d6fa58","path":"FirebaseAuth/Sources/Swift/Backend/AuthRequestConfiguration.swift","sourceTree":"","type":"file"},{"fileType":"sourcecode.swift","guid":"bfdfe7dc352907fc980b868725387e9850eb76d161b30d916255873f47c062e9","path":"FirebaseAuth/Sources/Swift/Backend/AuthRPCRequest.swift","sourceTree":"","type":"file"},{"fileType":"sourcecode.swift","guid":"bfdfe7dc352907fc980b868725387e98d50924e3f8940afe7d774046e67792ae","path":"FirebaseAuth/Sources/Swift/Backend/AuthRPCResponse.swift","sourceTree":"","type":"file"},{"fileType":"sourcecode.swift","guid":"bfdfe7dc352907fc980b868725387e98c73511ff62a44b5597b9e19189dadd10","path":"FirebaseAuth/Sources/Swift/Auth/AuthSettings.swift","sourceTree":"","type":"file"},{"fileType":"sourcecode.swift","guid":"bfdfe7dc352907fc980b868725387e981b27190e33354e7e6a3225e2c828f557","path":"FirebaseAuth/Sources/Swift/SystemService/AuthStoredUserManager.swift","sourceTree":"","type":"file"},{"fileType":"sourcecode.swift","guid":"bfdfe7dc352907fc980b868725387e98a72d1028678303be9b269ace9225904b","path":"FirebaseAuth/Sources/Swift/Auth/AuthTokenResult.swift","sourceTree":"","type":"file"},{"fileType":"sourcecode.swift","guid":"bfdfe7dc352907fc980b868725387e98dabe9a937a43ec190006e0627054845a","path":"FirebaseAuth/Sources/Swift/Utilities/AuthUIDelegate.swift","sourceTree":"","type":"file"},{"fileType":"sourcecode.swift","guid":"bfdfe7dc352907fc980b868725387e98bdfcbc5d664bbafdd9f354c733bec51a","path":"FirebaseAuth/Sources/Swift/Utilities/AuthURLPresenter.swift","sourceTree":"","type":"file"},{"fileType":"sourcecode.swift","guid":"bfdfe7dc352907fc980b868725387e98ad2e31ca91913c90d37f3a2d95bb0d2b","path":"FirebaseAuth/Sources/Swift/Storage/AuthUserDefaults.swift","sourceTree":"","type":"file"},{"fileType":"sourcecode.swift","guid":"bfdfe7dc352907fc980b868725387e98d610f2d23e0d44e2585bc582e859d2b6","path":"FirebaseAuth/Sources/Swift/Utilities/AuthWebUtils.swift","sourceTree":"","type":"file"},{"fileType":"sourcecode.swift","guid":"bfdfe7dc352907fc980b868725387e98e1bcfb7e241dd08c5ad005fb642710b6","path":"FirebaseAuth/Sources/Swift/Utilities/AuthWebView.swift","sourceTree":"","type":"file"},{"fileType":"sourcecode.swift","guid":"bfdfe7dc352907fc980b868725387e98892b63d4e763877cb5805dc850cd357a","path":"FirebaseAuth/Sources/Swift/Utilities/AuthWebViewController.swift","sourceTree":"","type":"file"},{"fileType":"sourcecode.swift","guid":"bfdfe7dc352907fc980b868725387e985650e463aa88e7a5e504ae565234621d","path":"FirebaseAuth/Sources/Swift/Base64URLEncodedStringExtension.swift","sourceTree":"","type":"file"},{"fileType":"sourcecode.swift","guid":"bfdfe7dc352907fc980b868725387e98d5db2297cf3e649d29f50bdaed5ba04c","path":"FirebaseAuth/Sources/Swift/Backend/RPC/CreateAuthURIRequest.swift","sourceTree":"","type":"file"},{"fileType":"sourcecode.swift","guid":"bfdfe7dc352907fc980b868725387e984a298505b96a98d10e522b4edf221ed6","path":"FirebaseAuth/Sources/Swift/Backend/RPC/CreateAuthURIResponse.swift","sourceTree":"","type":"file"},{"fileType":"sourcecode.swift","guid":"bfdfe7dc352907fc980b868725387e988dfecf325d31fb2d9aff16796c653942","path":"FirebaseAuth/Sources/Swift/Backend/RPC/DeleteAccountRequest.swift","sourceTree":"","type":"file"},{"fileType":"sourcecode.swift","guid":"bfdfe7dc352907fc980b868725387e98f406a955a7d842430e2e924eca1f2640","path":"FirebaseAuth/Sources/Swift/Backend/RPC/DeleteAccountResponse.swift","sourceTree":"","type":"file"},{"fileType":"sourcecode.swift","guid":"bfdfe7dc352907fc980b868725387e98bb059cd18cd13115fe7d4b764e70af41","path":"FirebaseAuth/Sources/Swift/AuthProvider/EmailAuthProvider.swift","sourceTree":"","type":"file"},{"fileType":"sourcecode.swift","guid":"bfdfe7dc352907fc980b868725387e9869dc6e47e0a6966ada08fb3d58f5e210","path":"FirebaseAuth/Sources/Swift/Backend/RPC/EmailLinkSignInRequest.swift","sourceTree":"","type":"file"},{"fileType":"sourcecode.swift","guid":"bfdfe7dc352907fc980b868725387e98c0c5fe40ae00e565f4197361e56fec0b","path":"FirebaseAuth/Sources/Swift/Backend/RPC/EmailLinkSignInResponse.swift","sourceTree":"","type":"file"},{"fileType":"sourcecode.swift","guid":"bfdfe7dc352907fc980b868725387e98b26cf0e43da862e45d59c66508b01271","path":"FirebaseAuth/Sources/Swift/AuthProvider/FacebookAuthProvider.swift","sourceTree":"","type":"file"},{"fileType":"sourcecode.swift","guid":"bfdfe7dc352907fc980b868725387e98747bfd17f9aa097d0efe403170b79354","path":"FirebaseAuth/Sources/Swift/AuthProvider/FederatedAuthProvider.swift","sourceTree":"","type":"file"},{"fileType":"sourcecode.swift","guid":"bfdfe7dc352907fc980b868725387e98834ab9620e06639a5ff56bf792d9c5db","path":"FirebaseAuth/Sources/Swift/Backend/RPC/MultiFactor/Enroll/FinalizeMFAEnrollmentRequest.swift","sourceTree":"","type":"file"},{"fileType":"sourcecode.swift","guid":"bfdfe7dc352907fc980b868725387e98d8d289f2f9bf72c003ddd77b0878f2b6","path":"FirebaseAuth/Sources/Swift/Backend/RPC/MultiFactor/Enroll/FinalizeMFAEnrollmentResponse.swift","sourceTree":"","type":"file"},{"fileType":"sourcecode.swift","guid":"bfdfe7dc352907fc980b868725387e98f10397478c14950ef9599fdf2d3e642c","path":"FirebaseAuth/Sources/Swift/Backend/RPC/MultiFactor/SignIn/FinalizeMFASignInRequest.swift","sourceTree":"","type":"file"},{"fileType":"sourcecode.swift","guid":"bfdfe7dc352907fc980b868725387e984e4f4fa3681d3885991f826c7d0626b3","path":"FirebaseAuth/Sources/Swift/Backend/RPC/MultiFactor/SignIn/FinalizeMFASignInResponse.swift","sourceTree":"","type":"file"},{"fileType":"sourcecode.c.h","guid":"bfdfe7dc352907fc980b868725387e98956799cfa2b05e7c9a8e6de92669e1d1","path":"FirebaseAuth/Sources/Public/FirebaseAuth/FIRAuth.h","sourceTree":"","type":"file"},{"fileType":"sourcecode.c.objc","guid":"bfdfe7dc352907fc980b868725387e9852ea9a7b923c00deb23d6be14aa04c11","path":"FirebaseAuth/Sources/ObjC/FIRAuth.m","sourceTree":"","type":"file"},{"fileType":"sourcecode.c.h","guid":"bfdfe7dc352907fc980b868725387e98e29f01ee622b04136cc93b8ed10b0042","path":"FirebaseAuth/Sources/Public/FirebaseAuth/FIRAuthErrors.h","sourceTree":"","type":"file"},{"fileType":"sourcecode.c.objc","guid":"bfdfe7dc352907fc980b868725387e980471c1d2185273ed57ceb2cc5af91fd6","path":"FirebaseAuth/Sources/ObjC/FIRAuthErrorUtils.m","sourceTree":"","type":"file"},{"fileType":"sourcecode.c.objc","guid":"bfdfe7dc352907fc980b868725387e98f7f99a49e05d9d483849b82a5b042ab3","path":"FirebaseAuth/Sources/ObjC/FIRAuthProvider.m","sourceTree":"","type":"file"},{"fileType":"sourcecode.c.h","guid":"bfdfe7dc352907fc980b868725387e986e7ac5576571d35a0e6e17df8bef87c2","path":"FirebaseAuth/Sources/Public/FirebaseAuth/FirebaseAuth.h","sourceTree":"","type":"file"},{"fileType":"sourcecode.c.h","guid":"bfdfe7dc352907fc980b868725387e98302380597dd450a0363d088676edafa9","path":"FirebaseAuth/Sources/Public/FirebaseAuth/FIREmailAuthProvider.h","sourceTree":"","type":"file"},{"fileType":"sourcecode.c.h","guid":"bfdfe7dc352907fc980b868725387e98db7c3d4ccbf8dc9059f98c1141a57e3b","path":"FirebaseAuth/Sources/Public/FirebaseAuth/FIRFacebookAuthProvider.h","sourceTree":"","type":"file"},{"fileType":"sourcecode.c.h","guid":"bfdfe7dc352907fc980b868725387e9838bf347b940c7fcc4e312aca96b302b0","path":"FirebaseAuth/Sources/Public/FirebaseAuth/FIRFederatedAuthProvider.h","sourceTree":"","type":"file"},{"fileType":"sourcecode.c.h","guid":"bfdfe7dc352907fc980b868725387e9868ce7c295a5827b53fa0ecbe02749a98","path":"FirebaseAuth/Sources/Public/FirebaseAuth/FIRGameCenterAuthProvider.h","sourceTree":"","type":"file"},{"fileType":"sourcecode.c.h","guid":"bfdfe7dc352907fc980b868725387e986607cf0b965cb1545a435655d39e9385","path":"FirebaseAuth/Sources/Public/FirebaseAuth/FIRGitHubAuthProvider.h","sourceTree":"","type":"file"},{"fileType":"sourcecode.c.h","guid":"bfdfe7dc352907fc980b868725387e989fe929ecdf26ddf9920484acf1cab280","path":"FirebaseAuth/Sources/Public/FirebaseAuth/FIRGoogleAuthProvider.h","sourceTree":"","type":"file"},{"fileType":"sourcecode.c.h","guid":"bfdfe7dc352907fc980b868725387e98e5f11c0f670144e5c3d5eba28a2e0bc6","path":"FirebaseAuth/Sources/Public/FirebaseAuth/FIRMultiFactor.h","sourceTree":"","type":"file"},{"fileType":"sourcecode.c.objc","guid":"bfdfe7dc352907fc980b868725387e985d13ff13c510386d418cd069fb618f57","path":"FirebaseAuth/Sources/ObjC/FIRMultiFactorConstants.m","sourceTree":"","type":"file"},{"fileType":"sourcecode.c.h","guid":"bfdfe7dc352907fc980b868725387e98b8f740c8e02b1fc2f3f9baf571e56fe2","path":"FirebaseAuth/Sources/Public/FirebaseAuth/FIRPhoneAuthProvider.h","sourceTree":"","type":"file"},{"fileType":"sourcecode.c.h","guid":"bfdfe7dc352907fc980b868725387e9883a078e0ca1c33c40bd03e510742f7e5","path":"FirebaseAuth/Sources/Public/FirebaseAuth/FIRTwitterAuthProvider.h","sourceTree":"","type":"file"},{"fileType":"sourcecode.c.h","guid":"bfdfe7dc352907fc980b868725387e98e10be73265b6d6dfa47fc284a8ef68ff","path":"FirebaseAuth/Sources/Public/FirebaseAuth/FIRUser.h","sourceTree":"","type":"file"},{"fileType":"sourcecode.swift","guid":"bfdfe7dc352907fc980b868725387e9860e788c01b59d8c5e34377d048e9571f","path":"FirebaseAuth/Sources/Swift/AuthProvider/GameCenterAuthProvider.swift","sourceTree":"","type":"file"},{"fileType":"sourcecode.swift","guid":"bfdfe7dc352907fc980b868725387e9855d28a290f00d95e42828c0cce199a5e","path":"FirebaseAuth/Sources/Swift/Backend/RPC/GetAccountInfoRequest.swift","sourceTree":"","type":"file"},{"fileType":"sourcecode.swift","guid":"bfdfe7dc352907fc980b868725387e9863b72be988c7f3f4f77f32a07cc998d6","path":"FirebaseAuth/Sources/Swift/Backend/RPC/GetAccountInfoResponse.swift","sourceTree":"","type":"file"},{"fileType":"sourcecode.swift","guid":"bfdfe7dc352907fc980b868725387e9844d2b74824c486de8efcfb8c9f84924c","path":"FirebaseAuth/Sources/Swift/Backend/RPC/GetOOBConfirmationCodeRequest.swift","sourceTree":"","type":"file"},{"fileType":"sourcecode.swift","guid":"bfdfe7dc352907fc980b868725387e98719fe830048a2ba1365eecb6632f72d2","path":"FirebaseAuth/Sources/Swift/Backend/RPC/GetOOBConfirmationCodeResponse.swift","sourceTree":"","type":"file"},{"fileType":"sourcecode.swift","guid":"bfdfe7dc352907fc980b868725387e981bc7f28ea1e64999404ca4dd21dd0ea1","path":"FirebaseAuth/Sources/Swift/Backend/RPC/GetProjectConfigRequest.swift","sourceTree":"","type":"file"},{"fileType":"sourcecode.swift","guid":"bfdfe7dc352907fc980b868725387e98dfbbcf08b73d4a041622c799a84cf364","path":"FirebaseAuth/Sources/Swift/Backend/RPC/GetProjectConfigResponse.swift","sourceTree":"","type":"file"},{"fileType":"sourcecode.swift","guid":"bfdfe7dc352907fc980b868725387e98ae767345b9752815dba9af0829f647b1","path":"FirebaseAuth/Sources/Swift/Backend/RPC/GetRecaptchaConfigRequest.swift","sourceTree":"","type":"file"},{"fileType":"sourcecode.swift","guid":"bfdfe7dc352907fc980b868725387e9806cce955c392c1f7a9e154850367e456","path":"FirebaseAuth/Sources/Swift/Backend/RPC/GetRecaptchaConfigResponse.swift","sourceTree":"","type":"file"},{"fileType":"sourcecode.swift","guid":"bfdfe7dc352907fc980b868725387e98b9b1eb7b36a3fff41786ab9d54bf826d","path":"FirebaseAuth/Sources/Swift/AuthProvider/GitHubAuthProvider.swift","sourceTree":"","type":"file"},{"fileType":"sourcecode.swift","guid":"bfdfe7dc352907fc980b868725387e98069027db4086db498c5c3aee779f8ca8","path":"FirebaseAuth/Sources/Swift/AuthProvider/GoogleAuthProvider.swift","sourceTree":"","type":"file"},{"fileType":"sourcecode.swift","guid":"bfdfe7dc352907fc980b868725387e981fea20a8743f49d4fd4d140bb89eda56","path":"FirebaseAuth/Sources/Swift/Backend/IdentityToolkitRequest.swift","sourceTree":"","type":"file"},{"fileType":"sourcecode.swift","guid":"bfdfe7dc352907fc980b868725387e9844a657a5657e6fb389d0de83a143a4c2","path":"FirebaseAuth/Sources/Swift/MultiFactor/MultiFactor.swift","sourceTree":"","type":"file"},{"fileType":"sourcecode.swift","guid":"bfdfe7dc352907fc980b868725387e98fbaa3d86f6d124a450b9f0491119ef2b","path":"FirebaseAuth/Sources/Swift/MultiFactor/MultiFactorAssertion.swift","sourceTree":"","type":"file"},{"fileType":"sourcecode.swift","guid":"bfdfe7dc352907fc980b868725387e98abf7565fee3fc13cae4656dee1d87232","path":"FirebaseAuth/Sources/Swift/MultiFactor/MultiFactorInfo.swift","sourceTree":"","type":"file"},{"fileType":"sourcecode.swift","guid":"bfdfe7dc352907fc980b868725387e982710250b86c363cad4a9df0dc1f552e3","path":"FirebaseAuth/Sources/Swift/MultiFactor/MultiFactorResolver.swift","sourceTree":"","type":"file"},{"fileType":"sourcecode.swift","guid":"bfdfe7dc352907fc980b868725387e98621647717ebb98ed5215a2363787ec60","path":"FirebaseAuth/Sources/Swift/MultiFactor/MultiFactorSession.swift","sourceTree":"","type":"file"},{"fileType":"sourcecode.swift","guid":"bfdfe7dc352907fc980b868725387e9887eb43b7b5c4665c64c0e5d668c0db4a","path":"FirebaseAuth/Sources/Swift/AuthProvider/OAuthCredential.swift","sourceTree":"","type":"file"},{"fileType":"sourcecode.swift","guid":"bfdfe7dc352907fc980b868725387e989534023b43aec676374fa28f504ebd7b","path":"FirebaseAuth/Sources/Swift/AuthProvider/OAuthProvider.swift","sourceTree":"","type":"file"},{"fileType":"sourcecode.swift","guid":"bfdfe7dc352907fc980b868725387e981d20a98d8d6380a1cc4bfbc035d066f5","path":"FirebaseAuth/Sources/Swift/AuthProvider/PhoneAuthCredential.swift","sourceTree":"","type":"file"},{"fileType":"sourcecode.swift","guid":"bfdfe7dc352907fc980b868725387e983982f2b3dd103ab5403130fd0d68cf72","path":"FirebaseAuth/Sources/Swift/AuthProvider/PhoneAuthProvider.swift","sourceTree":"","type":"file"},{"fileType":"sourcecode.swift","guid":"bfdfe7dc352907fc980b868725387e984cc282790fe0653502d68810ce203862","path":"FirebaseAuth/Sources/Swift/MultiFactor/Phone/PhoneMultiFactorAssertion.swift","sourceTree":"","type":"file"},{"fileType":"sourcecode.swift","guid":"bfdfe7dc352907fc980b868725387e98e2da331444b1f53e6dba6cb80e4bd821","path":"FirebaseAuth/Sources/Swift/MultiFactor/Phone/PhoneMultiFactorGenerator.swift","sourceTree":"","type":"file"},{"fileType":"sourcecode.swift","guid":"bfdfe7dc352907fc980b868725387e989efe2e2a211875271837aebcde4612e9","path":"FirebaseAuth/Sources/Swift/MultiFactor/Phone/PhoneMultiFactorInfo.swift","sourceTree":"","type":"file"},{"fileType":"sourcecode.swift","guid":"bfdfe7dc352907fc980b868725387e9890e258ab83427e9b3af28df6cbba4069","path":"FirebaseAuth/Sources/Swift/Backend/RPC/ResetPasswordRequest.swift","sourceTree":"","type":"file"},{"fileType":"sourcecode.swift","guid":"bfdfe7dc352907fc980b868725387e9857980f4cd36be429374abd8731e09dc2","path":"FirebaseAuth/Sources/Swift/Backend/RPC/ResetPasswordResponse.swift","sourceTree":"","type":"file"},{"fileType":"sourcecode.swift","guid":"bfdfe7dc352907fc980b868725387e9842ed090caa16221d40b2deb5c1fc39a7","path":"FirebaseAuth/Sources/Swift/Backend/RPC/RevokeTokenRequest.swift","sourceTree":"","type":"file"},{"fileType":"sourcecode.swift","guid":"bfdfe7dc352907fc980b868725387e98e98566614e5a7eaa2d269e0707a52718","path":"FirebaseAuth/Sources/Swift/Backend/RPC/RevokeTokenResponse.swift","sourceTree":"","type":"file"},{"fileType":"sourcecode.swift","guid":"bfdfe7dc352907fc980b868725387e98bfc950ffeb67bb663f272c5ed9fedbd4","path":"FirebaseAuth/Sources/Swift/Backend/RPC/SecureTokenRequest.swift","sourceTree":"","type":"file"},{"fileType":"sourcecode.swift","guid":"bfdfe7dc352907fc980b868725387e980e5fb7ae060697ed6919bcf3cedb0f75","path":"FirebaseAuth/Sources/Swift/Backend/RPC/SecureTokenResponse.swift","sourceTree":"","type":"file"},{"fileType":"sourcecode.swift","guid":"bfdfe7dc352907fc980b868725387e98b4267b665e65b3b2e7bfe1594a1d1f5a","path":"FirebaseAuth/Sources/Swift/SystemService/SecureTokenService.swift","sourceTree":"","type":"file"},{"fileType":"sourcecode.swift","guid":"bfdfe7dc352907fc980b868725387e986cc1b3357462deb86550440d1f70a61b","path":"FirebaseAuth/Sources/Swift/Backend/RPC/SendVerificationTokenRequest.swift","sourceTree":"","type":"file"},{"fileType":"sourcecode.swift","guid":"bfdfe7dc352907fc980b868725387e98d17a8f03b477f37a765a58084e0e5269","path":"FirebaseAuth/Sources/Swift/Backend/RPC/SendVerificationTokenResponse.swift","sourceTree":"","type":"file"},{"fileType":"sourcecode.swift","guid":"bfdfe7dc352907fc980b868725387e98bee3b1251aecfd29166ec8b8a4b18b24","path":"FirebaseAuth/Sources/Swift/Backend/RPC/SetAccountInfoRequest.swift","sourceTree":"","type":"file"},{"fileType":"sourcecode.swift","guid":"bfdfe7dc352907fc980b868725387e9875781607f587883e67ef5fc29d71563b","path":"FirebaseAuth/Sources/Swift/Backend/RPC/SetAccountInfoResponse.swift","sourceTree":"","type":"file"},{"fileType":"sourcecode.swift","guid":"bfdfe7dc352907fc980b868725387e989757f793fe76ee3d65074635004dbb48","path":"FirebaseAuth/Sources/Swift/Backend/RPC/SignInWithGameCenterRequest.swift","sourceTree":"","type":"file"},{"fileType":"sourcecode.swift","guid":"bfdfe7dc352907fc980b868725387e98572304b8a4293ef6e15f1b6935aa3de6","path":"FirebaseAuth/Sources/Swift/Backend/RPC/SignInWithGameCenterResponse.swift","sourceTree":"","type":"file"},{"fileType":"sourcecode.swift","guid":"bfdfe7dc352907fc980b868725387e98666272423879d06e6542d05efdedb720","path":"FirebaseAuth/Sources/Swift/Backend/RPC/SignUpNewUserRequest.swift","sourceTree":"","type":"file"},{"fileType":"sourcecode.swift","guid":"bfdfe7dc352907fc980b868725387e98102c5f8ca0d2ebc5a06ccb97589db0cf","path":"FirebaseAuth/Sources/Swift/Backend/RPC/SignUpNewUserResponse.swift","sourceTree":"","type":"file"},{"fileType":"sourcecode.swift","guid":"bfdfe7dc352907fc980b868725387e9875b69c0c8d62ef6ae2f4d5ccb2a50140","path":"FirebaseAuth/Sources/Swift/Backend/RPC/MultiFactor/Enroll/StartMFAEnrollmentRequest.swift","sourceTree":"","type":"file"},{"fileType":"sourcecode.swift","guid":"bfdfe7dc352907fc980b868725387e98ca7c8108003627e6f3faac826b461b2b","path":"FirebaseAuth/Sources/Swift/Backend/RPC/MultiFactor/Enroll/StartMFAEnrollmentResponse.swift","sourceTree":"","type":"file"},{"fileType":"sourcecode.swift","guid":"bfdfe7dc352907fc980b868725387e981f8eac5b6857c6f90839ca30a2c3e6c4","path":"FirebaseAuth/Sources/Swift/Backend/RPC/MultiFactor/SignIn/StartMFASignInRequest.swift","sourceTree":"","type":"file"},{"fileType":"sourcecode.swift","guid":"bfdfe7dc352907fc980b868725387e98a374d7222e915426b2f8ab3ba4d65ee5","path":"FirebaseAuth/Sources/Swift/Backend/RPC/MultiFactor/SignIn/StartMFASignInResponse.swift","sourceTree":"","type":"file"},{"fileType":"sourcecode.swift","guid":"bfdfe7dc352907fc980b868725387e98ba30b785bf30ceb46a9118f6019d819b","path":"FirebaseAuth/Sources/Swift/SystemService/TokenRefreshCoalescer.swift","sourceTree":"","type":"file"},{"fileType":"sourcecode.swift","guid":"bfdfe7dc352907fc980b868725387e98a235f0b77bf950d99dcce74d380bcd75","path":"FirebaseAuth/Sources/Swift/MultiFactor/TOTP/TOTPMultFactorAssertion.swift","sourceTree":"","type":"file"},{"fileType":"sourcecode.swift","guid":"bfdfe7dc352907fc980b868725387e98f5f54f4445a2c9e87da1cea25995185a","path":"FirebaseAuth/Sources/Swift/MultiFactor/TOTP/TOTPMultiFactorGenerator.swift","sourceTree":"","type":"file"},{"fileType":"sourcecode.swift","guid":"bfdfe7dc352907fc980b868725387e989bb0668960c84bff388737525f9b3a81","path":"FirebaseAuth/Sources/Swift/MultiFactor/TOTP/TOTPMultiFactorInfo.swift","sourceTree":"","type":"file"},{"fileType":"sourcecode.swift","guid":"bfdfe7dc352907fc980b868725387e986a7af298a7219b614606ae7ff2d749ae","path":"FirebaseAuth/Sources/Swift/MultiFactor/TOTP/TOTPSecret.swift","sourceTree":"","type":"file"},{"fileType":"sourcecode.swift","guid":"bfdfe7dc352907fc980b868725387e98bb1dadfa78eacc3f622bcccdd537b399","path":"FirebaseAuth/Sources/Swift/AuthProvider/TwitterAuthProvider.swift","sourceTree":"","type":"file"},{"fileType":"sourcecode.swift","guid":"bfdfe7dc352907fc980b868725387e98475bcd8f86ab153834b49971ed619ff5","path":"FirebaseAuth/Sources/Swift/User/User.swift","sourceTree":"","type":"file"},{"fileType":"sourcecode.swift","guid":"bfdfe7dc352907fc980b868725387e984e9998b48de1e3e79cde488b19940ce2","path":"FirebaseAuth/Sources/Swift/User/UserInfo.swift","sourceTree":"","type":"file"},{"fileType":"sourcecode.swift","guid":"bfdfe7dc352907fc980b868725387e981e6263bb40c09d9f8dc13f069ceae880","path":"FirebaseAuth/Sources/Swift/User/UserInfoImpl.swift","sourceTree":"","type":"file"},{"fileType":"sourcecode.swift","guid":"bfdfe7dc352907fc980b868725387e98d5276ff3ae57c9a7f98db3bccebc2370","path":"FirebaseAuth/Sources/Swift/User/UserMetadata.swift","sourceTree":"","type":"file"},{"fileType":"sourcecode.swift","guid":"bfdfe7dc352907fc980b868725387e98e3a47805b413680ebb0c06709b493b25","path":"FirebaseAuth/Sources/Swift/User/UserProfileChangeRequest.swift","sourceTree":"","type":"file"},{"fileType":"sourcecode.swift","guid":"bfdfe7dc352907fc980b868725387e98d104dd38e64d1362119c6d0e6e6c53a2","path":"FirebaseAuth/Sources/Swift/User/UserProfileUpdate.swift","sourceTree":"","type":"file"},{"fileType":"sourcecode.swift","guid":"bfdfe7dc352907fc980b868725387e9870ce2670d34fda92a4f9f6fab2cb3f05","path":"FirebaseAuth/Sources/Swift/Backend/RPC/VerifyAssertionRequest.swift","sourceTree":"","type":"file"},{"fileType":"sourcecode.swift","guid":"bfdfe7dc352907fc980b868725387e986ea08be4fd634924346f78693900e71c","path":"FirebaseAuth/Sources/Swift/Backend/RPC/VerifyAssertionResponse.swift","sourceTree":"","type":"file"},{"fileType":"sourcecode.swift","guid":"bfdfe7dc352907fc980b868725387e9803ec352f1d5e430050d78853042b369f","path":"FirebaseAuth/Sources/Swift/Backend/VerifyClientRequest.swift","sourceTree":"","type":"file"},{"fileType":"sourcecode.swift","guid":"bfdfe7dc352907fc980b868725387e986e2c14a76174e5c401d360834cbcd241","path":"FirebaseAuth/Sources/Swift/Backend/VerifyClientResponse.swift","sourceTree":"","type":"file"},{"fileType":"sourcecode.swift","guid":"bfdfe7dc352907fc980b868725387e98dc039d8f859c4d7a942b4a6efffb5c50","path":"FirebaseAuth/Sources/Swift/Backend/RPC/VerifyCustomTokenRequest.swift","sourceTree":"","type":"file"},{"fileType":"sourcecode.swift","guid":"bfdfe7dc352907fc980b868725387e9806bf6fed24708c67d77335a5235a6cc1","path":"FirebaseAuth/Sources/Swift/Backend/RPC/VerifyCustomTokenResponse.swift","sourceTree":"","type":"file"},{"fileType":"sourcecode.swift","guid":"bfdfe7dc352907fc980b868725387e984b3cebe055de35d309e97aecaa0a5a1b","path":"FirebaseAuth/Sources/Swift/Backend/RPC/VerifyPasswordRequest.swift","sourceTree":"","type":"file"},{"fileType":"sourcecode.swift","guid":"bfdfe7dc352907fc980b868725387e986e0bef915cd1d6699aab05207038a96f","path":"FirebaseAuth/Sources/Swift/Backend/RPC/VerifyPasswordResponse.swift","sourceTree":"","type":"file"},{"fileType":"sourcecode.swift","guid":"bfdfe7dc352907fc980b868725387e98e701c1cb6f65239a251e4768e01df45e","path":"FirebaseAuth/Sources/Swift/Backend/RPC/VerifyPhoneNumberRequest.swift","sourceTree":"","type":"file"},{"fileType":"sourcecode.swift","guid":"bfdfe7dc352907fc980b868725387e98e413e4e9aa35c4a57f446f64d1d7dbad","path":"FirebaseAuth/Sources/Swift/Backend/RPC/VerifyPhoneNumberResponse.swift","sourceTree":"","type":"file"},{"fileType":"sourcecode.swift","guid":"bfdfe7dc352907fc980b868725387e986632cf764cf74da0f8d3dbcbba1c5634","path":"FirebaseAuth/Sources/Swift/Backend/RPC/MultiFactor/Unenroll/WithdrawMFARequest.swift","sourceTree":"","type":"file"},{"fileType":"sourcecode.swift","guid":"bfdfe7dc352907fc980b868725387e982a785903ce725c51dc299f8f3d264a23","path":"FirebaseAuth/Sources/Swift/Backend/RPC/MultiFactor/Unenroll/WithdrawMFAResponse.swift","sourceTree":"","type":"file"},{"children":[{"fileType":"text.xml","guid":"bfdfe7dc352907fc980b868725387e983b9007b1d0935aee2ec307ea04061f0e","path":"FirebaseAuth/Sources/Resources/PrivacyInfo.xcprivacy","sourceTree":"","type":"file"}],"guid":"bfdfe7dc352907fc980b868725387e9878fe7eb13fb9b14ae0aefa71f2ac2fb4","name":"Resources","path":"","sourceTree":"","type":"group"},{"children":[{"fileType":"sourcecode.module-map","guid":"bfdfe7dc352907fc980b868725387e9842f3c9c61827af042efa90bc656fcf02","path":"FirebaseAuth.modulemap","sourceTree":"","type":"file"},{"fileType":"sourcecode.c.objc","guid":"bfdfe7dc352907fc980b868725387e984b7089654a8476c04781946130828ff9","path":"FirebaseAuth-dummy.m","sourceTree":"","type":"file"},{"fileType":"text.plist.xml","guid":"bfdfe7dc352907fc980b868725387e98d9632ed755d6b03ff6528460a14194fe","path":"FirebaseAuth-Info.plist","sourceTree":"","type":"file"},{"fileType":"sourcecode.c.h","guid":"bfdfe7dc352907fc980b868725387e980cfa3bf3b7f73c30be0258c89af531d7","path":"FirebaseAuth-umbrella.h","sourceTree":"","type":"file"},{"fileType":"text.xcconfig","guid":"bfdfe7dc352907fc980b868725387e98bbdee8c1686e5d6c3f4956eedcdb3dac","path":"FirebaseAuth.debug.xcconfig","sourceTree":"","type":"file"},{"fileType":"text.xcconfig","guid":"bfdfe7dc352907fc980b868725387e9824122a566c18888ab83e78b3078e6f80","path":"FirebaseAuth.release.xcconfig","sourceTree":"","type":"file"},{"fileType":"text.plist.xml","guid":"bfdfe7dc352907fc980b868725387e98db5da4fd7970aeddce90c906e09f827d","path":"ResourceBundle-FirebaseAuth_Privacy-FirebaseAuth-Info.plist","sourceTree":"","type":"file"}],"guid":"bfdfe7dc352907fc980b868725387e983d795f3d7d4801b89b09dd23c6b87625","name":"Support Files","path":"../Target Support Files/FirebaseAuth","sourceTree":"","type":"group"}],"guid":"bfdfe7dc352907fc980b868725387e98fe0423eb1011f0dabb5decad0a189f59","name":"FirebaseAuth","path":"FirebaseAuth","sourceTree":"","type":"group"},{"children":[{"fileType":"sourcecode.c.objc","guid":"bfdfe7dc352907fc980b868725387e985df5bc504ec3263f252a622a8dde0a2c","path":"FirebaseAuth/Interop/dummy.m","sourceTree":"","type":"file"},{"fileType":"sourcecode.c.h","guid":"bfdfe7dc352907fc980b868725387e98c1695f36a2224a2b1d7774e6d77eee60","path":"FirebaseAuth/Interop/Public/FirebaseAuthInterop/FIRAuthInterop.h","sourceTree":"","type":"file"},{"children":[{"fileType":"sourcecode.module-map","guid":"bfdfe7dc352907fc980b868725387e98db9ebcd1c413e0272430cbf0539cce22","path":"FirebaseAuthInterop.modulemap","sourceTree":"","type":"file"},{"fileType":"sourcecode.c.objc","guid":"bfdfe7dc352907fc980b868725387e989fcb859732612135cbcb3779e0ded359","path":"FirebaseAuthInterop-dummy.m","sourceTree":"","type":"file"},{"fileType":"text.plist.xml","guid":"bfdfe7dc352907fc980b868725387e9818680ff65bab7884439f058722e68852","path":"FirebaseAuthInterop-Info.plist","sourceTree":"","type":"file"},{"fileType":"sourcecode.c.h","guid":"bfdfe7dc352907fc980b868725387e982a4ae442514f63382533fc2bd40840e1","path":"FirebaseAuthInterop-prefix.pch","sourceTree":"","type":"file"},{"fileType":"sourcecode.c.h","guid":"bfdfe7dc352907fc980b868725387e98b2956b9f464800c9411916e4fbb27729","path":"FirebaseAuthInterop-umbrella.h","sourceTree":"","type":"file"},{"fileType":"text.xcconfig","guid":"bfdfe7dc352907fc980b868725387e98e82dd82aa81c61839879590f112b6e6d","path":"FirebaseAuthInterop.debug.xcconfig","sourceTree":"","type":"file"},{"fileType":"text.xcconfig","guid":"bfdfe7dc352907fc980b868725387e981506eb316e3225b6c1cb84ca6348d18b","path":"FirebaseAuthInterop.release.xcconfig","sourceTree":"","type":"file"}],"guid":"bfdfe7dc352907fc980b868725387e9842adb397b33519898bb558c7c3a276b1","name":"Support Files","path":"../Target Support Files/FirebaseAuthInterop","sourceTree":"","type":"group"}],"guid":"bfdfe7dc352907fc980b868725387e98fe9018f0e6e4e5f3ffb7e95560b8588d","name":"FirebaseAuthInterop","path":"FirebaseAuthInterop","sourceTree":"","type":"group"},{"children":[{"fileType":"sourcecode.c.h","guid":"bfdfe7dc352907fc980b868725387e98230955bf7f5b9e02cf80179f183ff7ce","path":"FirebaseCore/Sources/FIRAnalyticsConfiguration.h","sourceTree":"","type":"file"},{"fileType":"sourcecode.c.objc","guid":"bfdfe7dc352907fc980b868725387e98ef90badd06be31069855a74a45016d0c","path":"FirebaseCore/Sources/FIRAnalyticsConfiguration.m","sourceTree":"","type":"file"},{"fileType":"sourcecode.c.h","guid":"bfdfe7dc352907fc980b868725387e981514e798aa63a0fd8e89ee17343dd566","path":"FirebaseCore/Sources/Public/FirebaseCore/FIRApp.h","sourceTree":"","type":"file"},{"fileType":"sourcecode.c.objc","guid":"bfdfe7dc352907fc980b868725387e98ed3eb3365ff3413002b88f88bb14f070","path":"FirebaseCore/Sources/FIRApp.m","sourceTree":"","type":"file"},{"fileType":"sourcecode.c.h","guid":"bfdfe7dc352907fc980b868725387e9815996f070a281d153a577e9dbcf3058d","path":"FirebaseCore/Extension/FIRAppInternal.h","sourceTree":"","type":"file"},{"fileType":"sourcecode.c.h","guid":"bfdfe7dc352907fc980b868725387e9806c0b950b861c21b9963990ab43a4b89","path":"FirebaseCore/Sources/FIRBundleUtil.h","sourceTree":"","type":"file"},{"fileType":"sourcecode.c.objc","guid":"bfdfe7dc352907fc980b868725387e983928e1bb746c4dce582f3973204c6c1b","path":"FirebaseCore/Sources/FIRBundleUtil.m","sourceTree":"","type":"file"},{"fileType":"sourcecode.c.h","guid":"bfdfe7dc352907fc980b868725387e98b0744a7edc366118f880568d6132edfd","path":"FirebaseCore/Extension/FIRComponent.h","sourceTree":"","type":"file"},{"fileType":"sourcecode.c.objc","guid":"bfdfe7dc352907fc980b868725387e988ed37762246bec784742e59fb1ae1dd0","path":"FirebaseCore/Sources/FIRComponent.m","sourceTree":"","type":"file"},{"fileType":"sourcecode.c.h","guid":"bfdfe7dc352907fc980b868725387e989fee6d5e33b87739a2dab9f66760c17e","path":"FirebaseCore/Extension/FIRComponentContainer.h","sourceTree":"","type":"file"},{"fileType":"sourcecode.c.objc","guid":"bfdfe7dc352907fc980b868725387e9819eb20fe822d32fe59693bb1af07e918","path":"FirebaseCore/Sources/FIRComponentContainer.m","sourceTree":"","type":"file"},{"fileType":"sourcecode.c.h","guid":"bfdfe7dc352907fc980b868725387e984403d97edc979cc08bfdbddd3f49003b","path":"FirebaseCore/Sources/FIRComponentContainerInternal.h","sourceTree":"","type":"file"},{"fileType":"sourcecode.c.h","guid":"bfdfe7dc352907fc980b868725387e9803a1d9e7c7406ae5b4488a23e5256418","path":"FirebaseCore/Extension/FIRComponentType.h","sourceTree":"","type":"file"},{"fileType":"sourcecode.c.objc","guid":"bfdfe7dc352907fc980b868725387e98b679246350869a9d1e1a3c06b9d5ac2f","path":"FirebaseCore/Sources/FIRComponentType.m","sourceTree":"","type":"file"},{"fileType":"sourcecode.c.h","guid":"bfdfe7dc352907fc980b868725387e98cd384f769ff6a416ad0a47b308b7244f","path":"FirebaseCore/Sources/Public/FirebaseCore/FIRConfiguration.h","sourceTree":"","type":"file"},{"fileType":"sourcecode.c.objc","guid":"bfdfe7dc352907fc980b868725387e98b27bfcc87c6667390e6665cf5ed38907","path":"FirebaseCore/Sources/FIRConfiguration.m","sourceTree":"","type":"file"},{"fileType":"sourcecode.c.h","guid":"bfdfe7dc352907fc980b868725387e9877aeed262da4294e7eba3e108465f228","path":"FirebaseCore/Sources/FIRConfigurationInternal.h","sourceTree":"","type":"file"},{"fileType":"sourcecode.c.h","guid":"bfdfe7dc352907fc980b868725387e98d768dfd7daa1bdb257ad2abc4e232fcd","path":"FirebaseCore/Sources/Public/FirebaseCore/FirebaseCore.h","sourceTree":"","type":"file"},{"fileType":"sourcecode.c.h","guid":"bfdfe7dc352907fc980b868725387e98fc76eb1628ab5a054f098490b4100f6d","path":"FirebaseCore/Extension/FirebaseCoreInternal.h","sourceTree":"","type":"file"},{"fileType":"sourcecode.c.h","guid":"bfdfe7dc352907fc980b868725387e98800f413ba9d90bb10e7bab1cc8fbcfdb","path":"FirebaseCore/Sources/FIRFirebaseUserAgent.h","sourceTree":"","type":"file"},{"fileType":"sourcecode.c.objc","guid":"bfdfe7dc352907fc980b868725387e98775c657f07790427fa1301264717a9fe","path":"FirebaseCore/Sources/FIRFirebaseUserAgent.m","sourceTree":"","type":"file"},{"fileType":"sourcecode.c.h","guid":"bfdfe7dc352907fc980b868725387e98e2cf47785d0cb1b51d5ea1a97360174c","path":"FirebaseCore/Extension/FIRHeartbeatLogger.h","sourceTree":"","type":"file"},{"fileType":"sourcecode.c.objc","guid":"bfdfe7dc352907fc980b868725387e98981d973aa283cf55e0471a3517765b33","path":"FirebaseCore/Sources/FIRHeartbeatLogger.m","sourceTree":"","type":"file"},{"fileType":"sourcecode.c.h","guid":"bfdfe7dc352907fc980b868725387e98a02d8ba298cf0862bbfc342c7074e5c7","path":"FirebaseCore/Extension/FIRLibrary.h","sourceTree":"","type":"file"},{"fileType":"sourcecode.c.h","guid":"bfdfe7dc352907fc980b868725387e98a71e555b3b552897cbcd1316677dcec1","path":"FirebaseCore/Extension/FIRLogger.h","sourceTree":"","type":"file"},{"fileType":"sourcecode.c.objc","guid":"bfdfe7dc352907fc980b868725387e98c004405cc6612ddabb4037b1f909c521","path":"FirebaseCore/Sources/FIRLogger.m","sourceTree":"","type":"file"},{"fileType":"sourcecode.c.h","guid":"bfdfe7dc352907fc980b868725387e988b4329a5d76b29e87e729d9cd7ad93a1","path":"FirebaseCore/Sources/Public/FirebaseCore/FIRLoggerLevel.h","sourceTree":"","type":"file"},{"fileType":"sourcecode.c.h","guid":"bfdfe7dc352907fc980b868725387e986ff10679afde8d4204e7c212e534130a","path":"FirebaseCore/Sources/Public/FirebaseCore/FIROptions.h","sourceTree":"","type":"file"},{"fileType":"sourcecode.c.objc","guid":"bfdfe7dc352907fc980b868725387e9892656d0ae210c7efada3c7523ed4ae30","path":"FirebaseCore/Sources/FIROptions.m","sourceTree":"","type":"file"},{"fileType":"sourcecode.c.h","guid":"bfdfe7dc352907fc980b868725387e989385cc843d99d2d634e9732484488b3f","path":"FirebaseCore/Sources/FIROptionsInternal.h","sourceTree":"","type":"file"},{"fileType":"sourcecode.c.h","guid":"bfdfe7dc352907fc980b868725387e98d8d49f4b04a791b6f8b72a3cca1ee103","path":"FirebaseCore/Sources/Public/FirebaseCore/FIRTimestamp.h","sourceTree":"","type":"file"},{"fileType":"sourcecode.c.objc","guid":"bfdfe7dc352907fc980b868725387e981811e086c8b8e9b086cc158fbccd9d11","path":"FirebaseCore/Sources/FIRTimestamp.m","sourceTree":"","type":"file"},{"fileType":"sourcecode.c.h","guid":"bfdfe7dc352907fc980b868725387e98df0b9329b13401877770c564af2684fe","path":"FirebaseCore/Sources/FIRTimestampInternal.h","sourceTree":"","type":"file"},{"fileType":"sourcecode.c.h","guid":"bfdfe7dc352907fc980b868725387e9881f4b7fbf5d308524566967a15d09dd2","path":"FirebaseCore/Sources/Public/FirebaseCore/FIRVersion.h","sourceTree":"","type":"file"},{"fileType":"sourcecode.c.objc","guid":"bfdfe7dc352907fc980b868725387e98fad9bf08165943a9291593d38681f1a9","path":"FirebaseCore/Sources/FIRVersion.m","sourceTree":"","type":"file"},{"children":[{"fileType":"text.xml","guid":"bfdfe7dc352907fc980b868725387e98d58b29168477f224a21c3f9676f8d359","path":"FirebaseCore/Sources/Resources/PrivacyInfo.xcprivacy","sourceTree":"","type":"file"}],"guid":"bfdfe7dc352907fc980b868725387e98d49c852e4a4dbcdd282d6a335751765b","name":"Resources","path":"","sourceTree":"","type":"group"},{"children":[{"fileType":"sourcecode.module-map","guid":"bfdfe7dc352907fc980b868725387e98d4900d1598abe8827c742658c338ad03","path":"FirebaseCore.modulemap","sourceTree":"","type":"file"},{"fileType":"sourcecode.c.objc","guid":"bfdfe7dc352907fc980b868725387e988860c8b4c7c5a5dae715e8cfb65d591d","path":"FirebaseCore-dummy.m","sourceTree":"","type":"file"},{"fileType":"text.plist.xml","guid":"bfdfe7dc352907fc980b868725387e980a6c497f4f42db9c53403002052f8c38","path":"FirebaseCore-Info.plist","sourceTree":"","type":"file"},{"fileType":"sourcecode.c.h","guid":"bfdfe7dc352907fc980b868725387e98529e5f7bfff87cdbf13185e395700843","path":"FirebaseCore-umbrella.h","sourceTree":"","type":"file"},{"fileType":"text.xcconfig","guid":"bfdfe7dc352907fc980b868725387e98cb16e8074f48ba05a2dfeb081f5bd1cb","path":"FirebaseCore.debug.xcconfig","sourceTree":"","type":"file"},{"fileType":"text.xcconfig","guid":"bfdfe7dc352907fc980b868725387e9823bbf62c346537eed6e067e233fe0af3","path":"FirebaseCore.release.xcconfig","sourceTree":"","type":"file"},{"fileType":"text.plist.xml","guid":"bfdfe7dc352907fc980b868725387e98c339f723c455897cc4e5846ca001c33c","path":"ResourceBundle-FirebaseCore_Privacy-FirebaseCore-Info.plist","sourceTree":"","type":"file"}],"guid":"bfdfe7dc352907fc980b868725387e981be5108fd2324192c04384e8e98f2d74","name":"Support Files","path":"../Target Support Files/FirebaseCore","sourceTree":"","type":"group"}],"guid":"bfdfe7dc352907fc980b868725387e98d5e159ba4d96e56bba4dc7d2e139c597","name":"FirebaseCore","path":"FirebaseCore","sourceTree":"","type":"group"},{"children":[{"fileType":"sourcecode.c.objc","guid":"bfdfe7dc352907fc980b868725387e983addcf97f99326db0f50c64ef67acf87","path":"FirebaseCore/Extension/dummy.m","sourceTree":"","type":"file"},{"fileType":"sourcecode.c.h","guid":"bfdfe7dc352907fc980b868725387e980e9aa4b7906b3dcf65a309a2ebea54da","path":"FirebaseCore/Extension/FIRAppInternal.h","sourceTree":"","type":"file"},{"fileType":"sourcecode.c.h","guid":"bfdfe7dc352907fc980b868725387e98a4ef9427196371e4dc2731c21e69d49f","path":"FirebaseCore/Extension/FIRComponent.h","sourceTree":"","type":"file"},{"fileType":"sourcecode.c.h","guid":"bfdfe7dc352907fc980b868725387e9809785dc11744809391b61338a4ffac7b","path":"FirebaseCore/Extension/FIRComponentContainer.h","sourceTree":"","type":"file"},{"fileType":"sourcecode.c.h","guid":"bfdfe7dc352907fc980b868725387e9862c85af582e57841e77b952dde7fa94c","path":"FirebaseCore/Extension/FIRComponentType.h","sourceTree":"","type":"file"},{"fileType":"sourcecode.c.h","guid":"bfdfe7dc352907fc980b868725387e98ed46d3d90ff2fcfaef63e49a4aef56da","path":"FirebaseCore/Extension/FirebaseCoreInternal.h","sourceTree":"","type":"file"},{"fileType":"sourcecode.c.h","guid":"bfdfe7dc352907fc980b868725387e9865742a13f039fe40a602469ea5f2c5a4","path":"FirebaseCore/Extension/FIRHeartbeatLogger.h","sourceTree":"","type":"file"},{"fileType":"sourcecode.c.h","guid":"bfdfe7dc352907fc980b868725387e98355f9a272a7cc11736b4566ee8b3947d","path":"FirebaseCore/Extension/FIRLibrary.h","sourceTree":"","type":"file"},{"fileType":"sourcecode.c.h","guid":"bfdfe7dc352907fc980b868725387e98f21af28e616ee0d4ff04c7a6421f4400","path":"FirebaseCore/Extension/FIRLogger.h","sourceTree":"","type":"file"},{"children":[{"fileType":"text.xml","guid":"bfdfe7dc352907fc980b868725387e98adf015b8b23a4183c14442061cb3cae9","path":"FirebaseCore/Extension/Resources/PrivacyInfo.xcprivacy","sourceTree":"","type":"file"}],"guid":"bfdfe7dc352907fc980b868725387e981d5ebd0a397fd27c9f99071bb8629db3","name":"Resources","path":"","sourceTree":"","type":"group"},{"children":[{"fileType":"sourcecode.module-map","guid":"bfdfe7dc352907fc980b868725387e983c14e80ab85f19ef5aacb70483bebe26","path":"FirebaseCoreExtension.modulemap","sourceTree":"","type":"file"},{"fileType":"sourcecode.c.objc","guid":"bfdfe7dc352907fc980b868725387e988de8032ed3bcd43a2fa9cb6a98756979","path":"FirebaseCoreExtension-dummy.m","sourceTree":"","type":"file"},{"fileType":"text.plist.xml","guid":"bfdfe7dc352907fc980b868725387e982dedac294b14bf8e256212b8ed5832ab","path":"FirebaseCoreExtension-Info.plist","sourceTree":"","type":"file"},{"fileType":"sourcecode.c.h","guid":"bfdfe7dc352907fc980b868725387e989321ef04d8a4ec7b0ef3f10f6590ec5b","path":"FirebaseCoreExtension-prefix.pch","sourceTree":"","type":"file"},{"fileType":"sourcecode.c.h","guid":"bfdfe7dc352907fc980b868725387e98ddc20f433ccc0f56de9a35da32254a03","path":"FirebaseCoreExtension-umbrella.h","sourceTree":"","type":"file"},{"fileType":"text.xcconfig","guid":"bfdfe7dc352907fc980b868725387e98e8f5202bf6c2927877bbede594254bac","path":"FirebaseCoreExtension.debug.xcconfig","sourceTree":"","type":"file"},{"fileType":"text.xcconfig","guid":"bfdfe7dc352907fc980b868725387e986a53acd8d9569d0c22497ed69917f900","path":"FirebaseCoreExtension.release.xcconfig","sourceTree":"","type":"file"},{"fileType":"text.plist.xml","guid":"bfdfe7dc352907fc980b868725387e984fe616145e704e64056a1b2c3efe1f98","path":"ResourceBundle-FirebaseCoreExtension_Privacy-FirebaseCoreExtension-Info.plist","sourceTree":"","type":"file"}],"guid":"bfdfe7dc352907fc980b868725387e98e0cf868d06953d743485bdc6ba845117","name":"Support Files","path":"../Target Support Files/FirebaseCoreExtension","sourceTree":"","type":"group"}],"guid":"bfdfe7dc352907fc980b868725387e98d9a4afcca097f04d6a0129dcb1a6c23e","name":"FirebaseCoreExtension","path":"FirebaseCoreExtension","sourceTree":"","type":"group"},{"children":[{"fileType":"sourcecode.swift","guid":"bfdfe7dc352907fc980b868725387e98593f6dae4d99a30c132d62107a81aa3d","path":"FirebaseCore/Internal/Sources/HeartbeatLogging/_ObjC_HeartbeatController.swift","sourceTree":"","type":"file"},{"fileType":"sourcecode.swift","guid":"bfdfe7dc352907fc980b868725387e98a54c9801248b47f1be63245cbf224d35","path":"FirebaseCore/Internal/Sources/HeartbeatLogging/_ObjC_HeartbeatsPayload.swift","sourceTree":"","type":"file"},{"fileType":"sourcecode.swift","guid":"bfdfe7dc352907fc980b868725387e98c4923971f83aa387b26c7b1cbb3461a3","path":"FirebaseCore/Internal/Sources/HeartbeatLogging/Heartbeat.swift","sourceTree":"","type":"file"},{"fileType":"sourcecode.swift","guid":"bfdfe7dc352907fc980b868725387e98b11e742c4a53da542ea1cf321d4e26d0","path":"FirebaseCore/Internal/Sources/HeartbeatLogging/HeartbeatController.swift","sourceTree":"","type":"file"},{"fileType":"sourcecode.swift","guid":"bfdfe7dc352907fc980b868725387e982094f37cc1ad3624de7ad36386c6f411","path":"FirebaseCore/Internal/Sources/HeartbeatLogging/HeartbeatLoggingTestUtils.swift","sourceTree":"","type":"file"},{"fileType":"sourcecode.swift","guid":"bfdfe7dc352907fc980b868725387e989c3eb4c9df3e35b9bec6678a11018e5d","path":"FirebaseCore/Internal/Sources/HeartbeatLogging/HeartbeatsBundle.swift","sourceTree":"","type":"file"},{"fileType":"sourcecode.swift","guid":"bfdfe7dc352907fc980b868725387e98a4e413da7fd7f4faf80ef89285732c22","path":"FirebaseCore/Internal/Sources/HeartbeatLogging/HeartbeatsPayload.swift","sourceTree":"","type":"file"},{"fileType":"sourcecode.swift","guid":"bfdfe7dc352907fc980b868725387e988bf2e7afd647207a48e69cf948defc3b","path":"FirebaseCore/Internal/Sources/HeartbeatLogging/HeartbeatStorage.swift","sourceTree":"","type":"file"},{"fileType":"sourcecode.swift","guid":"bfdfe7dc352907fc980b868725387e98c954661eb8509838d8fb450920a2f8e0","path":"FirebaseCore/Internal/Sources/HeartbeatLogging/RingBuffer.swift","sourceTree":"","type":"file"},{"fileType":"sourcecode.swift","guid":"bfdfe7dc352907fc980b868725387e98f311c41c00ccd9d7c5b428bac6ece171","path":"FirebaseCore/Internal/Sources/HeartbeatLogging/Storage.swift","sourceTree":"","type":"file"},{"fileType":"sourcecode.swift","guid":"bfdfe7dc352907fc980b868725387e98b98bef66718986a1b7d33bc52200004f","path":"FirebaseCore/Internal/Sources/HeartbeatLogging/StorageFactory.swift","sourceTree":"","type":"file"},{"fileType":"sourcecode.swift","guid":"bfdfe7dc352907fc980b868725387e98f6fd1de5036398d6723d5839a7b109e2","path":"FirebaseCore/Internal/Sources/Utilities/UnfairLock.swift","sourceTree":"","type":"file"},{"fileType":"sourcecode.swift","guid":"bfdfe7dc352907fc980b868725387e98ce5e4868163131e336f7e6d43faeef31","path":"FirebaseCore/Internal/Sources/HeartbeatLogging/WeakContainer.swift","sourceTree":"","type":"file"},{"children":[{"fileType":"text.xml","guid":"bfdfe7dc352907fc980b868725387e985dedb4877ad3d0affcc4a716189451c7","path":"FirebaseCore/Internal/Sources/Resources/PrivacyInfo.xcprivacy","sourceTree":"","type":"file"}],"guid":"bfdfe7dc352907fc980b868725387e988c1d78c43bc5eb4417b1f2338eebeaf2","name":"Resources","path":"","sourceTree":"","type":"group"},{"children":[{"fileType":"sourcecode.module-map","guid":"bfdfe7dc352907fc980b868725387e989e456bbb211de15f51766c50e02f2c27","path":"FirebaseCoreInternal.modulemap","sourceTree":"","type":"file"},{"fileType":"sourcecode.c.objc","guid":"bfdfe7dc352907fc980b868725387e980896766df14a9046b4bc17a9df2f2c95","path":"FirebaseCoreInternal-dummy.m","sourceTree":"","type":"file"},{"fileType":"text.plist.xml","guid":"bfdfe7dc352907fc980b868725387e98937985b263edb9d830b2b21334cd29af","path":"FirebaseCoreInternal-Info.plist","sourceTree":"","type":"file"},{"fileType":"sourcecode.c.h","guid":"bfdfe7dc352907fc980b868725387e9897626e9d40c3b6b17941cad861bc0e00","path":"FirebaseCoreInternal-prefix.pch","sourceTree":"","type":"file"},{"fileType":"sourcecode.c.h","guid":"bfdfe7dc352907fc980b868725387e98f58230de926dbcf32485d1422b47f24e","path":"FirebaseCoreInternal-umbrella.h","sourceTree":"","type":"file"},{"fileType":"text.xcconfig","guid":"bfdfe7dc352907fc980b868725387e98b94f751a83e7e0f1d4b42f2b77a60509","path":"FirebaseCoreInternal.debug.xcconfig","sourceTree":"","type":"file"},{"fileType":"text.xcconfig","guid":"bfdfe7dc352907fc980b868725387e98d9147eb705ef7701ac589855737d9572","path":"FirebaseCoreInternal.release.xcconfig","sourceTree":"","type":"file"},{"fileType":"text.plist.xml","guid":"bfdfe7dc352907fc980b868725387e986b218513940ce3e48cdc4c489b3ac8e5","path":"ResourceBundle-FirebaseCoreInternal_Privacy-FirebaseCoreInternal-Info.plist","sourceTree":"","type":"file"}],"guid":"bfdfe7dc352907fc980b868725387e981124f88580b11e754cb4047243ded021","name":"Support Files","path":"../Target Support Files/FirebaseCoreInternal","sourceTree":"","type":"group"}],"guid":"bfdfe7dc352907fc980b868725387e983c09173dfc655a38a6d4e419fbd39ebd","name":"FirebaseCoreInternal","path":"FirebaseCoreInternal","sourceTree":"","type":"group"},{"children":[{"fileType":"sourcecode.swift","guid":"bfdfe7dc352907fc980b868725387e989b5a6d6941a300be315e89d9de2d68d7","path":"Sources/GoogleMobileAdsPlaceholder.swift","sourceTree":"","type":"file"},{"children":[{"fileType":"wrapper.xcframework","guid":"bfdfe7dc352907fc980b868725387e98b826f3b2eec55eed6a10b55f0ca6a6a0","path":"Frameworks/GoogleMobileAdsFramework/GoogleMobileAds.xcframework","sourceTree":"","type":"file"}],"guid":"bfdfe7dc352907fc980b868725387e985da7acad7847c0282de48c40c3457fd5","name":"Frameworks","path":"","sourceTree":"","type":"group"},{"children":[{"fileType":"text.xml","guid":"bfdfe7dc352907fc980b868725387e9848de9a416078da1867623b75fba91210","path":"Frameworks/GoogleMobileAdsFramework/GoogleMobileAds.xcframework/ios-arm64/GoogleMobileAds.framework/PrivacyInfo.xcprivacy","sourceTree":"","type":"file"}],"guid":"bfdfe7dc352907fc980b868725387e980843427c6f3ea1b49b9d8a5ceb837cad","name":"Resources","path":"","sourceTree":"","type":"group"},{"children":[{"fileType":"sourcecode.module-map","guid":"bfdfe7dc352907fc980b868725387e98717449eaae37fe982873b032cd675c49","path":"Google-Mobile-Ads-SDK.modulemap","sourceTree":"","type":"file"},{"fileType":"sourcecode.c.objc","guid":"bfdfe7dc352907fc980b868725387e980db896d121df87c41c7bb87c65b3946e","path":"Google-Mobile-Ads-SDK-dummy.m","sourceTree":"","type":"file"},{"fileType":"text.plist.xml","guid":"bfdfe7dc352907fc980b868725387e98c80d25f59959dcbd598cbcb223cd28c8","path":"Google-Mobile-Ads-SDK-Info.plist","sourceTree":"","type":"file"},{"fileType":"sourcecode.c.h","guid":"bfdfe7dc352907fc980b868725387e9849af401ecb9532c20e2a8e2308054636","path":"Google-Mobile-Ads-SDK-prefix.pch","sourceTree":"","type":"file"},{"fileType":"sourcecode.c.h","guid":"bfdfe7dc352907fc980b868725387e982d361e23934d13045cda7e58f8f9e857","path":"Google-Mobile-Ads-SDK-umbrella.h","sourceTree":"","type":"file"},{"fileType":"text.script.sh","guid":"bfdfe7dc352907fc980b868725387e98dd60968e582a4ffe7188700abb88ad36","path":"Google-Mobile-Ads-SDK-xcframeworks.sh","sourceTree":"","type":"file"},{"fileType":"text.xcconfig","guid":"bfdfe7dc352907fc980b868725387e98eef3be20c160fe75bf8789e71fe75d9a","path":"Google-Mobile-Ads-SDK.debug.xcconfig","sourceTree":"","type":"file"},{"fileType":"text.xcconfig","guid":"bfdfe7dc352907fc980b868725387e988ad1fd18441580496a4b9e0a44f0cae8","path":"Google-Mobile-Ads-SDK.release.xcconfig","sourceTree":"","type":"file"},{"fileType":"text.plist.xml","guid":"bfdfe7dc352907fc980b868725387e9896b109092d68856da0f72913bf577584","path":"ResourceBundle-GoogleMobileAdsResources-Google-Mobile-Ads-SDK-Info.plist","sourceTree":"","type":"file"}],"guid":"bfdfe7dc352907fc980b868725387e986c13915044e459412dd17ecf59234571","name":"Support Files","path":"../Target Support Files/Google-Mobile-Ads-SDK","sourceTree":"","type":"group"}],"guid":"bfdfe7dc352907fc980b868725387e98057e639f67d47cf34347b6e1af69daa7","name":"Google-Mobile-Ads-SDK","path":"Google-Mobile-Ads-SDK","sourceTree":"","type":"group"},{"children":[{"children":[{"fileType":"wrapper.xcframework","guid":"bfdfe7dc352907fc980b868725387e98c43efdadfb220ffdf5295380ed083a19","path":"MetaAdapter-6.20.1.0/MetaAdapter.xcframework","sourceTree":"","type":"file"}],"guid":"bfdfe7dc352907fc980b868725387e981ab5211d0cd234a5ea9be5caa39e2398","name":"Frameworks","path":"","sourceTree":"","type":"group"},{"children":[{"fileType":"text.script.sh","guid":"bfdfe7dc352907fc980b868725387e981d830042957b784950b124340b06562a","path":"GoogleMobileAdsMediationFacebook-xcframeworks.sh","sourceTree":"","type":"file"},{"fileType":"text.xcconfig","guid":"bfdfe7dc352907fc980b868725387e98f850c18f6937fd120321475e01101b34","path":"GoogleMobileAdsMediationFacebook.debug.xcconfig","sourceTree":"","type":"file"},{"fileType":"text.xcconfig","guid":"bfdfe7dc352907fc980b868725387e98f12a631782f8376926b89f77c119f385","path":"GoogleMobileAdsMediationFacebook.release.xcconfig","sourceTree":"","type":"file"}],"guid":"bfdfe7dc352907fc980b868725387e9839e617bebb881f967675a7ac65938fa2","name":"Support Files","path":"../Target Support Files/GoogleMobileAdsMediationFacebook","sourceTree":"","type":"group"}],"guid":"bfdfe7dc352907fc980b868725387e98da1421052f8e4b7ff17543067dbeb8cf","name":"GoogleMobileAdsMediationFacebook","path":"GoogleMobileAdsMediationFacebook","sourceTree":"","type":"group"},{"children":[{"children":[{"fileType":"wrapper.xcframework","guid":"bfdfe7dc352907fc980b868725387e986aa3915f04e13fe9166808a73b912cf8","path":"Frameworks/Release/UserMessagingPlatform.xcframework","sourceTree":"","type":"file"}],"guid":"bfdfe7dc352907fc980b868725387e988062995fa7829a31a5cd3f53a0177dcc","name":"Frameworks","path":"","sourceTree":"","type":"group"},{"children":[{"fileType":"text.xml","guid":"bfdfe7dc352907fc980b868725387e98640b59ad05d12383de1650adc4f4bc54","path":"Frameworks/Release/UserMessagingPlatform.xcframework/ios-arm64/UserMessagingPlatform.framework/PrivacyInfo.xcprivacy","sourceTree":"","type":"file"}],"guid":"bfdfe7dc352907fc980b868725387e985c8f2463fb70d5c97ecd73d01add1ce4","name":"Resources","path":"","sourceTree":"","type":"group"},{"children":[{"fileType":"text.script.sh","guid":"bfdfe7dc352907fc980b868725387e989119c064c9260b0fb80b69420a95fbd7","path":"GoogleUserMessagingPlatform-xcframeworks.sh","sourceTree":"","type":"file"},{"fileType":"text.xcconfig","guid":"bfdfe7dc352907fc980b868725387e980fcd71e29c5847bc1bc9583f1118e75f","path":"GoogleUserMessagingPlatform.debug.xcconfig","sourceTree":"","type":"file"},{"fileType":"text.xcconfig","guid":"bfdfe7dc352907fc980b868725387e985c479bbc4c266fbeb3d57a3c706051fb","path":"GoogleUserMessagingPlatform.release.xcconfig","sourceTree":"","type":"file"},{"fileType":"text.plist.xml","guid":"bfdfe7dc352907fc980b868725387e98bf7c3664526b9abaddef0ea0511d0ccd","path":"ResourceBundle-UserMessagingPlatformResources-GoogleUserMessagingPlatform-Info.plist","sourceTree":"","type":"file"}],"guid":"bfdfe7dc352907fc980b868725387e98573971a6ed6f4086459e130630f389c5","name":"Support Files","path":"../Target Support Files/GoogleUserMessagingPlatform","sourceTree":"","type":"group"}],"guid":"bfdfe7dc352907fc980b868725387e98f4780f57ef61b308f354bbc6939e42b2","name":"GoogleUserMessagingPlatform","path":"GoogleUserMessagingPlatform","sourceTree":"","type":"group"},{"children":[{"children":[{"fileType":"sourcecode.c.h","guid":"bfdfe7dc352907fc980b868725387e98c29046bbab936122dbb0c2cfc14ba72d","path":"GoogleUtilities/AppDelegateSwizzler/Public/GoogleUtilities/GULAppDelegateSwizzler.h","sourceTree":"","type":"file"},{"fileType":"sourcecode.c.objc","guid":"bfdfe7dc352907fc980b868725387e9836a90af84591e983274e6666393b3a2e","path":"GoogleUtilities/AppDelegateSwizzler/GULAppDelegateSwizzler.m","sourceTree":"","type":"file"},{"fileType":"sourcecode.c.h","guid":"bfdfe7dc352907fc980b868725387e98eab1d503d7f2282f98d6d9a02d7ec14d","path":"GoogleUtilities/AppDelegateSwizzler/Internal/GULAppDelegateSwizzler_Private.h","sourceTree":"","type":"file"},{"fileType":"sourcecode.c.h","guid":"bfdfe7dc352907fc980b868725387e980cb51518c389a1e74d47410a29888c54","path":"GoogleUtilities/AppDelegateSwizzler/Public/GoogleUtilities/GULApplication.h","sourceTree":"","type":"file"},{"fileType":"sourcecode.c.h","guid":"bfdfe7dc352907fc980b868725387e98475fd4618ac5ac675f5ed1b8f6b6716f","path":"GoogleUtilities/Common/GULLoggerCodes.h","sourceTree":"","type":"file"},{"fileType":"sourcecode.c.h","guid":"bfdfe7dc352907fc980b868725387e98ade842c0931397013938f333262dace9","path":"GoogleUtilities/AppDelegateSwizzler/Public/GoogleUtilities/GULSceneDelegateSwizzler.h","sourceTree":"","type":"file"},{"fileType":"sourcecode.c.objc","guid":"bfdfe7dc352907fc980b868725387e98bb8b15be2869f96e89cb90c94f936c88","path":"GoogleUtilities/AppDelegateSwizzler/GULSceneDelegateSwizzler.m","sourceTree":"","type":"file"},{"fileType":"sourcecode.c.h","guid":"bfdfe7dc352907fc980b868725387e988abc52683367496919aa598227a1331f","path":"GoogleUtilities/AppDelegateSwizzler/Internal/GULSceneDelegateSwizzler_Private.h","sourceTree":"","type":"file"}],"guid":"bfdfe7dc352907fc980b868725387e98d4f06bfa9c5182a77e6e55f67e8cc512","name":"AppDelegateSwizzler","path":"","sourceTree":"","type":"group"},{"children":[{"fileType":"sourcecode.c.h","guid":"bfdfe7dc352907fc980b868725387e98d2f8185c0a44a500020d910dc85efd9a","path":"GoogleUtilities/Environment/Public/GoogleUtilities/GULAppEnvironmentUtil.h","sourceTree":"","type":"file"},{"fileType":"sourcecode.c.objc","guid":"bfdfe7dc352907fc980b868725387e98c27f8b93b1c490fbac91a853d0924367","path":"GoogleUtilities/Environment/GULAppEnvironmentUtil.m","sourceTree":"","type":"file"},{"fileType":"sourcecode.c.h","guid":"bfdfe7dc352907fc980b868725387e985108977873122d0fd57cf870ac976fae","path":"GoogleUtilities/Environment/Public/GoogleUtilities/GULKeychainStorage.h","sourceTree":"","type":"file"},{"fileType":"sourcecode.c.objc","guid":"bfdfe7dc352907fc980b868725387e9804c38c80ac78ea91dfede61e8a02a9f4","path":"GoogleUtilities/Environment/SecureStorage/GULKeychainStorage.m","sourceTree":"","type":"file"},{"fileType":"sourcecode.c.h","guid":"bfdfe7dc352907fc980b868725387e9852edbfb572efb173287d7f90327aaf76","path":"GoogleUtilities/Environment/Public/GoogleUtilities/GULKeychainUtils.h","sourceTree":"","type":"file"},{"fileType":"sourcecode.c.objc","guid":"bfdfe7dc352907fc980b868725387e98e76ed7edc7a31347233120173cdb2e3a","path":"GoogleUtilities/Environment/SecureStorage/GULKeychainUtils.m","sourceTree":"","type":"file"},{"fileType":"sourcecode.c.h","guid":"bfdfe7dc352907fc980b868725387e98ed0c4266fd7527af26b4180205338e03","path":"GoogleUtilities/Environment/Public/GoogleUtilities/GULNetworkInfo.h","sourceTree":"","type":"file"},{"fileType":"sourcecode.c.objc","guid":"bfdfe7dc352907fc980b868725387e98089b73b727d89e627dc2d8e0e82dc186","path":"GoogleUtilities/Environment/NetworkInfo/GULNetworkInfo.m","sourceTree":"","type":"file"},{"fileType":"sourcecode.c.h","guid":"bfdfe7dc352907fc980b868725387e985c18bce96838a531d4d7946d6ee3e86f","path":"third_party/IsAppEncrypted/Public/IsAppEncrypted.h","sourceTree":"","type":"file"},{"fileType":"sourcecode.c.objc","guid":"bfdfe7dc352907fc980b868725387e98c93ef45b447d11d19620fa2627f46021","path":"third_party/IsAppEncrypted/IsAppEncrypted.m","sourceTree":"","type":"file"}],"guid":"bfdfe7dc352907fc980b868725387e98761489bb4112f6bc6df0aa40ef1c771c","name":"Environment","path":"","sourceTree":"","type":"group"},{"children":[{"fileType":"sourcecode.c.h","guid":"bfdfe7dc352907fc980b868725387e98618f336933ff6de3d4b3c21ed135498e","path":"GoogleUtilities/Logger/Public/GoogleUtilities/GULLogger.h","sourceTree":"","type":"file"},{"fileType":"sourcecode.c.objc","guid":"bfdfe7dc352907fc980b868725387e984a49ba4137eac58897391a09f550b916","path":"GoogleUtilities/Logger/GULLogger.m","sourceTree":"","type":"file"},{"fileType":"sourcecode.c.h","guid":"bfdfe7dc352907fc980b868725387e981958c32a9380d192ba5d6d582d804a04","path":"GoogleUtilities/Logger/Public/GoogleUtilities/GULLoggerLevel.h","sourceTree":"","type":"file"}],"guid":"bfdfe7dc352907fc980b868725387e9877fe81efee4784e48ad0f8fe8e414f5e","name":"Logger","path":"","sourceTree":"","type":"group"},{"children":[{"fileType":"sourcecode.c.h","guid":"bfdfe7dc352907fc980b868725387e98873946fb03e9b9792f4f2c868cb04157","path":"GoogleUtilities/Network/Public/GoogleUtilities/GULMutableDictionary.h","sourceTree":"","type":"file"},{"fileType":"sourcecode.c.objc","guid":"bfdfe7dc352907fc980b868725387e983e9921832e287ee04048d221e1bee849","path":"GoogleUtilities/Network/GULMutableDictionary.m","sourceTree":"","type":"file"},{"fileType":"sourcecode.c.h","guid":"bfdfe7dc352907fc980b868725387e98b539eaa0485467aec39f108decf7ce35","path":"GoogleUtilities/Network/Public/GoogleUtilities/GULNetwork.h","sourceTree":"","type":"file"},{"fileType":"sourcecode.c.objc","guid":"bfdfe7dc352907fc980b868725387e987128275d56f53442e3921be1a6970593","path":"GoogleUtilities/Network/GULNetwork.m","sourceTree":"","type":"file"},{"fileType":"sourcecode.c.h","guid":"bfdfe7dc352907fc980b868725387e98f596251d1ba47fb590a11c4fedd4bad6","path":"GoogleUtilities/Network/Public/GoogleUtilities/GULNetworkConstants.h","sourceTree":"","type":"file"},{"fileType":"sourcecode.c.objc","guid":"bfdfe7dc352907fc980b868725387e985b8cba972f211425405a63011c53445a","path":"GoogleUtilities/Network/GULNetworkConstants.m","sourceTree":"","type":"file"},{"fileType":"sourcecode.c.h","guid":"bfdfe7dc352907fc980b868725387e988a9a3e02046e4440587c711dad22de63","path":"GoogleUtilities/Network/GULNetworkInternal.h","sourceTree":"","type":"file"},{"fileType":"sourcecode.c.h","guid":"bfdfe7dc352907fc980b868725387e98676e9831ef9ffb5a827c77d203afd919","path":"GoogleUtilities/Network/Public/GoogleUtilities/GULNetworkLoggerProtocol.h","sourceTree":"","type":"file"},{"fileType":"sourcecode.c.h","guid":"bfdfe7dc352907fc980b868725387e98436c7dd83d7131340adf9904ee2a22d7","path":"GoogleUtilities/Network/Public/GoogleUtilities/GULNetworkMessageCode.h","sourceTree":"","type":"file"},{"fileType":"sourcecode.c.h","guid":"bfdfe7dc352907fc980b868725387e98e8161f35d2f39b644227bef4985f0d59","path":"GoogleUtilities/Network/Public/GoogleUtilities/GULNetworkURLSession.h","sourceTree":"","type":"file"},{"fileType":"sourcecode.c.objc","guid":"bfdfe7dc352907fc980b868725387e9823abfe0467d22e8134a5c86c0381cf91","path":"GoogleUtilities/Network/GULNetworkURLSession.m","sourceTree":"","type":"file"}],"guid":"bfdfe7dc352907fc980b868725387e98129b859ec7a38d29ec21e6c03ace21af","name":"Network","path":"","sourceTree":"","type":"group"},{"children":[{"fileType":"sourcecode.c.h","guid":"bfdfe7dc352907fc980b868725387e98e22f64f75d44ed26f0063f98c220931a","path":"GoogleUtilities/NSData+zlib/Public/GoogleUtilities/GULNSData+zlib.h","sourceTree":"","type":"file"},{"fileType":"sourcecode.c.objc","guid":"bfdfe7dc352907fc980b868725387e9817e6f355fc27ce11ca9eca96e7177a5a","path":"GoogleUtilities/NSData+zlib/GULNSData+zlib.m","sourceTree":"","type":"file"}],"guid":"bfdfe7dc352907fc980b868725387e989adb618c58879974baa4315a2f458a02","name":"NSData+zlib","path":"","sourceTree":"","type":"group"},{"children":[{"children":[{"fileType":"text.xml","guid":"bfdfe7dc352907fc980b868725387e985d3def67c82fae95425ab472ba727077","path":"GoogleUtilities/Privacy/Resources/PrivacyInfo.xcprivacy","sourceTree":"","type":"file"}],"guid":"bfdfe7dc352907fc980b868725387e98181b9c10ada053953db4a2a3511f90be","name":"Resources","path":"","sourceTree":"","type":"group"}],"guid":"bfdfe7dc352907fc980b868725387e98c4a9a338166ff287830de607a0dd3a4f","name":"Privacy","path":"","sourceTree":"","type":"group"},{"children":[{"fileType":"sourcecode.c.h","guid":"bfdfe7dc352907fc980b868725387e98c794a9f352278aabf8d2fa9bcf1b4ee3","path":"GoogleUtilities/Reachability/Public/GoogleUtilities/GULReachabilityChecker.h","sourceTree":"","type":"file"},{"fileType":"sourcecode.c.objc","guid":"bfdfe7dc352907fc980b868725387e986a169b3bbe51ae95f696d081d0a7c6eb","path":"GoogleUtilities/Reachability/GULReachabilityChecker.m","sourceTree":"","type":"file"},{"fileType":"sourcecode.c.h","guid":"bfdfe7dc352907fc980b868725387e988c2d21cc3ccea47a9793788238de5094","path":"GoogleUtilities/Reachability/GULReachabilityChecker+Internal.h","sourceTree":"","type":"file"},{"fileType":"sourcecode.c.h","guid":"bfdfe7dc352907fc980b868725387e987937768805e8acc718e8e50513d69cbd","path":"GoogleUtilities/Reachability/GULReachabilityMessageCode.h","sourceTree":"","type":"file"}],"guid":"bfdfe7dc352907fc980b868725387e985c8183b2a1b690d7fc5cf16eded0a660","name":"Reachability","path":"","sourceTree":"","type":"group"},{"children":[{"fileType":"sourcecode.module-map","guid":"bfdfe7dc352907fc980b868725387e988810e7fc4c8a26443c34ad145807005b","path":"GoogleUtilities.modulemap","sourceTree":"","type":"file"},{"fileType":"sourcecode.c.objc","guid":"bfdfe7dc352907fc980b868725387e98d975ca315b4242d5baed303cb7aab051","path":"GoogleUtilities-dummy.m","sourceTree":"","type":"file"},{"fileType":"text.plist.xml","guid":"bfdfe7dc352907fc980b868725387e9858e770d96ac8d7973f4cf8649830ef88","path":"GoogleUtilities-Info.plist","sourceTree":"","type":"file"},{"fileType":"sourcecode.c.h","guid":"bfdfe7dc352907fc980b868725387e98845f39c98795e88b4a4937d3cf6cf467","path":"GoogleUtilities-umbrella.h","sourceTree":"","type":"file"},{"fileType":"text.xcconfig","guid":"bfdfe7dc352907fc980b868725387e981ccda656ca076caea1e69514af198f0f","path":"GoogleUtilities.debug.xcconfig","sourceTree":"","type":"file"},{"fileType":"text.xcconfig","guid":"bfdfe7dc352907fc980b868725387e984a59f58d9dc78fdedc9a249bdac259e0","path":"GoogleUtilities.release.xcconfig","sourceTree":"","type":"file"},{"fileType":"text.plist.xml","guid":"bfdfe7dc352907fc980b868725387e98bc384638e42a052945bada9e63f9f837","path":"ResourceBundle-GoogleUtilities_Privacy-GoogleUtilities-Info.plist","sourceTree":"","type":"file"}],"guid":"bfdfe7dc352907fc980b868725387e98ff1fa82abe4489b8840a96f064678df8","name":"Support Files","path":"../Target Support Files/GoogleUtilities","sourceTree":"","type":"group"},{"children":[{"fileType":"sourcecode.c.h","guid":"bfdfe7dc352907fc980b868725387e98c5a84dc841d16549464a86e97f593c03","path":"GoogleUtilities/UserDefaults/Public/GoogleUtilities/GULUserDefaults.h","sourceTree":"","type":"file"},{"fileType":"sourcecode.c.objc","guid":"bfdfe7dc352907fc980b868725387e98ab52ae4e38d39e8507fe9603aa99a926","path":"GoogleUtilities/UserDefaults/GULUserDefaults.m","sourceTree":"","type":"file"}],"guid":"bfdfe7dc352907fc980b868725387e98ec31974f53c5a27c4ae9331d001d06a6","name":"UserDefaults","path":"","sourceTree":"","type":"group"}],"guid":"bfdfe7dc352907fc980b868725387e98730de65bcbdfac7e956e6faf65c53e86","name":"GoogleUtilities","path":"GoogleUtilities","sourceTree":"","type":"group"},{"children":[{"children":[{"fileType":"sourcecode.c.h","guid":"bfdfe7dc352907fc980b868725387e98eb4aaedbcf9860120c58f6d4d062f032","path":"Sources/Core/Public/GTMSessionFetcher/GTMSessionFetcher.h","sourceTree":"","type":"file"},{"fileType":"sourcecode.c.objc","guid":"bfdfe7dc352907fc980b868725387e98cc293d93ed0348775d80402fa066a035","path":"Sources/Core/GTMSessionFetcher.m","sourceTree":"","type":"file"},{"fileType":"sourcecode.c.h","guid":"bfdfe7dc352907fc980b868725387e98dfa923d33e197f2f10f071abff2371ff","path":"Sources/Core/Public/GTMSessionFetcher/GTMSessionFetcherLogging.h","sourceTree":"","type":"file"},{"fileType":"sourcecode.c.objc","guid":"bfdfe7dc352907fc980b868725387e98e555f92b94394e98b028c2f2173f7a28","path":"Sources/Core/GTMSessionFetcherLogging.m","sourceTree":"","type":"file"},{"fileType":"sourcecode.c.h","guid":"bfdfe7dc352907fc980b868725387e98d312b9b5d7afb9da1592f829033a3206","path":"Sources/Core/Public/GTMSessionFetcher/GTMSessionFetcherService.h","sourceTree":"","type":"file"},{"fileType":"sourcecode.c.objc","guid":"bfdfe7dc352907fc980b868725387e983b71212203a0dad88a8868b08a6dbc06","path":"Sources/Core/GTMSessionFetcherService.m","sourceTree":"","type":"file"},{"fileType":"sourcecode.c.h","guid":"bfdfe7dc352907fc980b868725387e983d4c09b113cf1215cd28e8d9ac61a23f","path":"Sources/Core/GTMSessionFetcherService+Internal.h","sourceTree":"","type":"file"},{"fileType":"sourcecode.c.h","guid":"bfdfe7dc352907fc980b868725387e9885235b209117c45670e8a7e932ed032d","path":"Sources/Core/Public/GTMSessionFetcher/GTMSessionUploadFetcher.h","sourceTree":"","type":"file"},{"fileType":"sourcecode.c.objc","guid":"bfdfe7dc352907fc980b868725387e98f0441880a424196f2e774e387ed25a77","path":"Sources/Core/GTMSessionUploadFetcher.m","sourceTree":"","type":"file"},{"children":[{"fileType":"text.xml","guid":"bfdfe7dc352907fc980b868725387e98159e7e7e4b98dfa70678e12155a8ed77","path":"Sources/Core/Resources/PrivacyInfo.xcprivacy","sourceTree":"","type":"file"}],"guid":"bfdfe7dc352907fc980b868725387e98a230ab3f02aa7b59b81f045a257a019d","name":"Resources","path":"","sourceTree":"","type":"group"}],"guid":"bfdfe7dc352907fc980b868725387e98a3b6152264436bcb69edc55467bb085c","name":"Core","path":"","sourceTree":"","type":"group"},{"children":[{"fileType":"sourcecode.module-map","guid":"bfdfe7dc352907fc980b868725387e98a25074687bd47b432124a152694eeb8d","path":"GTMSessionFetcher.modulemap","sourceTree":"","type":"file"},{"fileType":"sourcecode.c.objc","guid":"bfdfe7dc352907fc980b868725387e98043df5bc2e7d05caf248348a4d634e19","path":"GTMSessionFetcher-dummy.m","sourceTree":"","type":"file"},{"fileType":"text.plist.xml","guid":"bfdfe7dc352907fc980b868725387e98c1fd636888d3cfa01ec5b862d3399c64","path":"GTMSessionFetcher-Info.plist","sourceTree":"","type":"file"},{"fileType":"sourcecode.c.h","guid":"bfdfe7dc352907fc980b868725387e983987a537a915850cc63a9531255da27c","path":"GTMSessionFetcher-umbrella.h","sourceTree":"","type":"file"},{"fileType":"text.xcconfig","guid":"bfdfe7dc352907fc980b868725387e98478e27dfe1d9ad49d28fafd65b85bf34","path":"GTMSessionFetcher.debug.xcconfig","sourceTree":"","type":"file"},{"fileType":"text.xcconfig","guid":"bfdfe7dc352907fc980b868725387e980d155ae95de828a9ae777ff4d23d3419","path":"GTMSessionFetcher.release.xcconfig","sourceTree":"","type":"file"},{"fileType":"text.plist.xml","guid":"bfdfe7dc352907fc980b868725387e9809bf32a80e7276875dd9bcc6a0b2ced3","path":"ResourceBundle-GTMSessionFetcher_Core_Privacy-GTMSessionFetcher-Info.plist","sourceTree":"","type":"file"}],"guid":"bfdfe7dc352907fc980b868725387e98ae477d4033fdc504b018d76c247eb47c","name":"Support Files","path":"../Target Support Files/GTMSessionFetcher","sourceTree":"","type":"group"}],"guid":"bfdfe7dc352907fc980b868725387e98b6228db765bb282b42783fbadc6a0681","name":"GTMSessionFetcher","path":"GTMSessionFetcher","sourceTree":"","type":"group"},{"children":[{"fileType":"sourcecode.c.h","guid":"bfdfe7dc352907fc980b868725387e9833df98e018adc77b9ee56cdc07aacd3f","path":"Sources/FBLPromises/include/FBLPromise.h","sourceTree":"","type":"file"},{"fileType":"sourcecode.c.objc","guid":"bfdfe7dc352907fc980b868725387e98c5db8499ea7419409c1cfaef6255d1d3","path":"Sources/FBLPromises/FBLPromise.m","sourceTree":"","type":"file"},{"fileType":"sourcecode.c.h","guid":"bfdfe7dc352907fc980b868725387e9865be438db2f61c5160b40adf875e6b14","path":"Sources/FBLPromises/include/FBLPromise+All.h","sourceTree":"","type":"file"},{"fileType":"sourcecode.c.objc","guid":"bfdfe7dc352907fc980b868725387e98777d27b0a850f634f1b15c4202c2a016","path":"Sources/FBLPromises/FBLPromise+All.m","sourceTree":"","type":"file"},{"fileType":"sourcecode.c.h","guid":"bfdfe7dc352907fc980b868725387e98ec2937fc269337ef369568770a9974f6","path":"Sources/FBLPromises/include/FBLPromise+Always.h","sourceTree":"","type":"file"},{"fileType":"sourcecode.c.objc","guid":"bfdfe7dc352907fc980b868725387e98ffaf0c786ee256fbae57c03e63ee964b","path":"Sources/FBLPromises/FBLPromise+Always.m","sourceTree":"","type":"file"},{"fileType":"sourcecode.c.h","guid":"bfdfe7dc352907fc980b868725387e986d7afd8b9ef329e8b8092b4b4d73ca33","path":"Sources/FBLPromises/include/FBLPromise+Any.h","sourceTree":"","type":"file"},{"fileType":"sourcecode.c.objc","guid":"bfdfe7dc352907fc980b868725387e98d2abfa3a17fc90c3c9f15d3fe7b22740","path":"Sources/FBLPromises/FBLPromise+Any.m","sourceTree":"","type":"file"},{"fileType":"sourcecode.c.h","guid":"bfdfe7dc352907fc980b868725387e98d96fd933472cfe31b39378ea674cb4ef","path":"Sources/FBLPromises/include/FBLPromise+Async.h","sourceTree":"","type":"file"},{"fileType":"sourcecode.c.objc","guid":"bfdfe7dc352907fc980b868725387e981ed65769418714c2f278ad25bd9f7a36","path":"Sources/FBLPromises/FBLPromise+Async.m","sourceTree":"","type":"file"},{"fileType":"sourcecode.c.h","guid":"bfdfe7dc352907fc980b868725387e984258d000b808182a55ed359ba4e63953","path":"Sources/FBLPromises/include/FBLPromise+Await.h","sourceTree":"","type":"file"},{"fileType":"sourcecode.c.objc","guid":"bfdfe7dc352907fc980b868725387e98cb71e8d54abeffaf6876d55d161f8006","path":"Sources/FBLPromises/FBLPromise+Await.m","sourceTree":"","type":"file"},{"fileType":"sourcecode.c.h","guid":"bfdfe7dc352907fc980b868725387e988131c2b568eaafe86a12b2ad83d7db48","path":"Sources/FBLPromises/include/FBLPromise+Catch.h","sourceTree":"","type":"file"},{"fileType":"sourcecode.c.objc","guid":"bfdfe7dc352907fc980b868725387e984a5efdb875e93d5ef617a439c38360ce","path":"Sources/FBLPromises/FBLPromise+Catch.m","sourceTree":"","type":"file"},{"fileType":"sourcecode.c.h","guid":"bfdfe7dc352907fc980b868725387e984bf3ce587970ab6f7feb6f67744292b5","path":"Sources/FBLPromises/include/FBLPromise+Delay.h","sourceTree":"","type":"file"},{"fileType":"sourcecode.c.objc","guid":"bfdfe7dc352907fc980b868725387e98b26e3f35080a2f116c44cf27fa7211e6","path":"Sources/FBLPromises/FBLPromise+Delay.m","sourceTree":"","type":"file"},{"fileType":"sourcecode.c.h","guid":"bfdfe7dc352907fc980b868725387e98c73fcebb94e4884285929eea119100a0","path":"Sources/FBLPromises/include/FBLPromise+Do.h","sourceTree":"","type":"file"},{"fileType":"sourcecode.c.objc","guid":"bfdfe7dc352907fc980b868725387e988c4e1d65136512ca7286df227a07f5ab","path":"Sources/FBLPromises/FBLPromise+Do.m","sourceTree":"","type":"file"},{"fileType":"sourcecode.c.h","guid":"bfdfe7dc352907fc980b868725387e98ce3820605a66e6df7ad360709285dcaa","path":"Sources/FBLPromises/include/FBLPromise+Race.h","sourceTree":"","type":"file"},{"fileType":"sourcecode.c.objc","guid":"bfdfe7dc352907fc980b868725387e984fce25a60148febae2186288f08b436e","path":"Sources/FBLPromises/FBLPromise+Race.m","sourceTree":"","type":"file"},{"fileType":"sourcecode.c.h","guid":"bfdfe7dc352907fc980b868725387e983f1026a051b69c332802557f54f5f15b","path":"Sources/FBLPromises/include/FBLPromise+Recover.h","sourceTree":"","type":"file"},{"fileType":"sourcecode.c.objc","guid":"bfdfe7dc352907fc980b868725387e98bbda8e0bcbecd512009527784f343c26","path":"Sources/FBLPromises/FBLPromise+Recover.m","sourceTree":"","type":"file"},{"fileType":"sourcecode.c.h","guid":"bfdfe7dc352907fc980b868725387e98cf41e5e95c462c3dc24471acd8e6551e","path":"Sources/FBLPromises/include/FBLPromise+Reduce.h","sourceTree":"","type":"file"},{"fileType":"sourcecode.c.objc","guid":"bfdfe7dc352907fc980b868725387e986bc4b82de6a07b4b56186b6d599cee80","path":"Sources/FBLPromises/FBLPromise+Reduce.m","sourceTree":"","type":"file"},{"fileType":"sourcecode.c.h","guid":"bfdfe7dc352907fc980b868725387e9876bb9188aba89de9ffca92bd18712f1a","path":"Sources/FBLPromises/include/FBLPromise+Retry.h","sourceTree":"","type":"file"},{"fileType":"sourcecode.c.objc","guid":"bfdfe7dc352907fc980b868725387e98b132b82c791d131185c0584a12d86eec","path":"Sources/FBLPromises/FBLPromise+Retry.m","sourceTree":"","type":"file"},{"fileType":"sourcecode.c.h","guid":"bfdfe7dc352907fc980b868725387e98a8c1c5b1e81fee43b5a34049e1ebbef2","path":"Sources/FBLPromises/include/FBLPromise+Testing.h","sourceTree":"","type":"file"},{"fileType":"sourcecode.c.objc","guid":"bfdfe7dc352907fc980b868725387e983e0d7c9928fe1a8aedc0d9f70af2000e","path":"Sources/FBLPromises/FBLPromise+Testing.m","sourceTree":"","type":"file"},{"fileType":"sourcecode.c.h","guid":"bfdfe7dc352907fc980b868725387e98fb74040e3b4703dc724128dc4259fe39","path":"Sources/FBLPromises/include/FBLPromise+Then.h","sourceTree":"","type":"file"},{"fileType":"sourcecode.c.objc","guid":"bfdfe7dc352907fc980b868725387e98ade208b2779864b1dc5eccaf8a2e3787","path":"Sources/FBLPromises/FBLPromise+Then.m","sourceTree":"","type":"file"},{"fileType":"sourcecode.c.h","guid":"bfdfe7dc352907fc980b868725387e98859f6f736e1f8d98f41892e3f0b95c17","path":"Sources/FBLPromises/include/FBLPromise+Timeout.h","sourceTree":"","type":"file"},{"fileType":"sourcecode.c.objc","guid":"bfdfe7dc352907fc980b868725387e98ecaad0c1ae197eeb9134fb47589e7311","path":"Sources/FBLPromises/FBLPromise+Timeout.m","sourceTree":"","type":"file"},{"fileType":"sourcecode.c.h","guid":"bfdfe7dc352907fc980b868725387e980d24fc5ca57e8742be1a4aa5fca26a6c","path":"Sources/FBLPromises/include/FBLPromise+Validate.h","sourceTree":"","type":"file"},{"fileType":"sourcecode.c.objc","guid":"bfdfe7dc352907fc980b868725387e98b5d435fc4bd55488b943552a9c620acb","path":"Sources/FBLPromises/FBLPromise+Validate.m","sourceTree":"","type":"file"},{"fileType":"sourcecode.c.h","guid":"bfdfe7dc352907fc980b868725387e984901e26a9bf94289c40945076a433f5b","path":"Sources/FBLPromises/include/FBLPromise+Wrap.h","sourceTree":"","type":"file"},{"fileType":"sourcecode.c.objc","guid":"bfdfe7dc352907fc980b868725387e98cfcaeda41cd8a5573825d9903c2fb4ed","path":"Sources/FBLPromises/FBLPromise+Wrap.m","sourceTree":"","type":"file"},{"fileType":"sourcecode.c.h","guid":"bfdfe7dc352907fc980b868725387e9845b5945be755a7e7bb5daae3aa99c2dc","path":"Sources/FBLPromises/include/FBLPromiseError.h","sourceTree":"","type":"file"},{"fileType":"sourcecode.c.objc","guid":"bfdfe7dc352907fc980b868725387e98aa1ef7de5583853025e4a24a30edc99b","path":"Sources/FBLPromises/FBLPromiseError.m","sourceTree":"","type":"file"},{"fileType":"sourcecode.c.h","guid":"bfdfe7dc352907fc980b868725387e986eee35874291a8ab220e7a802313658a","path":"Sources/FBLPromises/include/FBLPromisePrivate.h","sourceTree":"","type":"file"},{"fileType":"sourcecode.c.h","guid":"bfdfe7dc352907fc980b868725387e98b8523b9773a8337dad012c738c7729d0","path":"Sources/FBLPromises/include/FBLPromises.h","sourceTree":"","type":"file"},{"children":[{"fileType":"text.xml","guid":"bfdfe7dc352907fc980b868725387e988bb932e6bd0db8acade7ecd6b9275b8e","path":"Sources/FBLPromises/Resources/PrivacyInfo.xcprivacy","sourceTree":"","type":"file"}],"guid":"bfdfe7dc352907fc980b868725387e985b0b38ace790464e9ae87a9e60d781df","name":"Resources","path":"","sourceTree":"","type":"group"},{"children":[{"fileType":"sourcecode.module-map","guid":"bfdfe7dc352907fc980b868725387e98aa8fe4ac5bef26b7ccdedf7e33f0afff","path":"PromisesObjC.modulemap","sourceTree":"","type":"file"},{"fileType":"sourcecode.c.objc","guid":"bfdfe7dc352907fc980b868725387e98f0de8f3e81d724b92d50c2f87e9f8c47","path":"PromisesObjC-dummy.m","sourceTree":"","type":"file"},{"fileType":"text.plist.xml","guid":"bfdfe7dc352907fc980b868725387e981c9a4d0de8c15c822beab4e459b95339","path":"PromisesObjC-Info.plist","sourceTree":"","type":"file"},{"fileType":"sourcecode.c.h","guid":"bfdfe7dc352907fc980b868725387e98b32e4e3946291ecb96c31535ac7e701c","path":"PromisesObjC-umbrella.h","sourceTree":"","type":"file"},{"fileType":"text.xcconfig","guid":"bfdfe7dc352907fc980b868725387e9870bacfaf6cde3d89a76fe4e932cc6788","path":"PromisesObjC.debug.xcconfig","sourceTree":"","type":"file"},{"fileType":"text.xcconfig","guid":"bfdfe7dc352907fc980b868725387e9889d254ad5933689bf555dbc41d2fcf23","path":"PromisesObjC.release.xcconfig","sourceTree":"","type":"file"},{"fileType":"text.plist.xml","guid":"bfdfe7dc352907fc980b868725387e98ffa99e39df737e029151673e255b8518","path":"ResourceBundle-FBLPromises_Privacy-PromisesObjC-Info.plist","sourceTree":"","type":"file"}],"guid":"bfdfe7dc352907fc980b868725387e988e0a79b29d8d06acd35992c3f300c06c","name":"Support Files","path":"../Target Support Files/PromisesObjC","sourceTree":"","type":"group"}],"guid":"bfdfe7dc352907fc980b868725387e98eaa2548ef7c9368c0e0bc0a0d06fed6f","name":"PromisesObjC","path":"PromisesObjC","sourceTree":"","type":"group"},{"children":[{"fileType":"sourcecode.c.objc","guid":"bfdfe7dc352907fc980b868725387e98f53a2b9142a2e19252d075f8af76efe2","path":"RecaptchaEnterprise/RecaptchaInterop/placeholder.m","sourceTree":"","type":"file"},{"fileType":"sourcecode.c.h","guid":"bfdfe7dc352907fc980b868725387e9846288276371e5cec52e9a8a0d7bce8d6","path":"RecaptchaEnterprise/RecaptchaInterop/Public/RecaptchaInterop/RCAActionProtocol.h","sourceTree":"","type":"file"},{"fileType":"sourcecode.c.h","guid":"bfdfe7dc352907fc980b868725387e9888baa60dc9fe0ff0987f46e74e092236","path":"RecaptchaEnterprise/RecaptchaInterop/Public/RecaptchaInterop/RCARecaptchaClientProtocol.h","sourceTree":"","type":"file"},{"fileType":"sourcecode.c.h","guid":"bfdfe7dc352907fc980b868725387e985616a2553f97c6ad675d654cea953c03","path":"RecaptchaEnterprise/RecaptchaInterop/Public/RecaptchaInterop/RCARecaptchaProtocol.h","sourceTree":"","type":"file"},{"fileType":"sourcecode.c.h","guid":"bfdfe7dc352907fc980b868725387e9898b4264b684c69bf23f82e2a6781718d","path":"RecaptchaEnterprise/RecaptchaInterop/Public/RecaptchaInterop/RecaptchaInterop.h","sourceTree":"","type":"file"},{"children":[{"fileType":"sourcecode.module-map","guid":"bfdfe7dc352907fc980b868725387e983d1e479aaab62448caf944f7a64cdecc","path":"RecaptchaInterop.modulemap","sourceTree":"","type":"file"},{"fileType":"sourcecode.c.objc","guid":"bfdfe7dc352907fc980b868725387e98eaaffa60434f1c632748d87268193d14","path":"RecaptchaInterop-dummy.m","sourceTree":"","type":"file"},{"fileType":"text.plist.xml","guid":"bfdfe7dc352907fc980b868725387e983415c16ec9a84b848d88010a44012ae2","path":"RecaptchaInterop-Info.plist","sourceTree":"","type":"file"},{"fileType":"sourcecode.c.h","guid":"bfdfe7dc352907fc980b868725387e98cee6e4bce2523a5d03ffcf632da2704e","path":"RecaptchaInterop-prefix.pch","sourceTree":"","type":"file"},{"fileType":"sourcecode.c.h","guid":"bfdfe7dc352907fc980b868725387e98c54e5d70b03e206695cd4cd8927c8cc8","path":"RecaptchaInterop-umbrella.h","sourceTree":"","type":"file"},{"fileType":"text.xcconfig","guid":"bfdfe7dc352907fc980b868725387e9820adfbf68e5990b89cefc5d0ec651cfd","path":"RecaptchaInterop.debug.xcconfig","sourceTree":"","type":"file"},{"fileType":"text.xcconfig","guid":"bfdfe7dc352907fc980b868725387e98e4c67bec0da225378144113a5283f5e7","path":"RecaptchaInterop.release.xcconfig","sourceTree":"","type":"file"}],"guid":"bfdfe7dc352907fc980b868725387e98e539d82860197b6df3b978bac898e8d2","name":"Support Files","path":"../Target Support Files/RecaptchaInterop","sourceTree":"","type":"group"}],"guid":"bfdfe7dc352907fc980b868725387e98541b599af1ad5ca4951ba2d00e657d7c","name":"RecaptchaInterop","path":"RecaptchaInterop","sourceTree":"","type":"group"},{"children":[{"children":[{"fileType":"sourcecode.c.h","guid":"bfdfe7dc352907fc980b868725387e98d5777166096230085837e5a6300319ad","path":"SDWebImage/Private/NSBezierPath+SDRoundedCorners.h","sourceTree":"","type":"file"},{"fileType":"sourcecode.c.objc","guid":"bfdfe7dc352907fc980b868725387e981927866bac5164139b4906c697c2ae1a","path":"SDWebImage/Private/NSBezierPath+SDRoundedCorners.m","sourceTree":"","type":"file"},{"fileType":"sourcecode.c.h","guid":"bfdfe7dc352907fc980b868725387e988cb0cdc02aa29fb804ef97672630b130","path":"SDWebImage/Core/NSButton+WebCache.h","sourceTree":"","type":"file"},{"fileType":"sourcecode.c.objc","guid":"bfdfe7dc352907fc980b868725387e9879873ec62bf39c031f9405690a0f73c5","path":"SDWebImage/Core/NSButton+WebCache.m","sourceTree":"","type":"file"},{"fileType":"sourcecode.c.h","guid":"bfdfe7dc352907fc980b868725387e98c822fa9c81a63d01137ef8b8fb09fb10","path":"SDWebImage/Core/NSData+ImageContentType.h","sourceTree":"","type":"file"},{"fileType":"sourcecode.c.objc","guid":"bfdfe7dc352907fc980b868725387e98ee02f559016795b3a0d12920773904b0","path":"SDWebImage/Core/NSData+ImageContentType.m","sourceTree":"","type":"file"},{"fileType":"sourcecode.c.h","guid":"bfdfe7dc352907fc980b868725387e98bef996f30e7cd8f81a41b150807d2a9d","path":"SDWebImage/Core/NSImage+Compatibility.h","sourceTree":"","type":"file"},{"fileType":"sourcecode.c.objc","guid":"bfdfe7dc352907fc980b868725387e98054e5d375da8f4d58909b03284d2ffb5","path":"SDWebImage/Core/NSImage+Compatibility.m","sourceTree":"","type":"file"},{"fileType":"sourcecode.c.h","guid":"bfdfe7dc352907fc980b868725387e984094c7d883e6e69778784d589b0e06ff","path":"SDWebImage/Core/SDAnimatedImage.h","sourceTree":"","type":"file"},{"fileType":"sourcecode.c.objc","guid":"bfdfe7dc352907fc980b868725387e98e057edb06a9fb0ee234d2501e566c13c","path":"SDWebImage/Core/SDAnimatedImage.m","sourceTree":"","type":"file"},{"fileType":"sourcecode.c.h","guid":"bfdfe7dc352907fc980b868725387e983a316a9a3c0d0918d8038d51d1ce2a7b","path":"SDWebImage/Core/SDAnimatedImagePlayer.h","sourceTree":"","type":"file"},{"fileType":"sourcecode.c.objc","guid":"bfdfe7dc352907fc980b868725387e9864350921c8a3eb6e2717b3957fc629b0","path":"SDWebImage/Core/SDAnimatedImagePlayer.m","sourceTree":"","type":"file"},{"fileType":"sourcecode.c.h","guid":"bfdfe7dc352907fc980b868725387e981d5092826a9dbc8d0808fdcaa23aeb53","path":"SDWebImage/Core/SDAnimatedImageRep.h","sourceTree":"","type":"file"},{"fileType":"sourcecode.c.objc","guid":"bfdfe7dc352907fc980b868725387e985042bb443803b56b9c76461c6b782096","path":"SDWebImage/Core/SDAnimatedImageRep.m","sourceTree":"","type":"file"},{"fileType":"sourcecode.c.h","guid":"bfdfe7dc352907fc980b868725387e98e04128ff9b1a8ec5bb663090da8e9106","path":"SDWebImage/Core/SDAnimatedImageView.h","sourceTree":"","type":"file"},{"fileType":"sourcecode.c.objc","guid":"bfdfe7dc352907fc980b868725387e98d6b7c5fd8f27324b1d4b9b72d5246584","path":"SDWebImage/Core/SDAnimatedImageView.m","sourceTree":"","type":"file"},{"fileType":"sourcecode.c.h","guid":"bfdfe7dc352907fc980b868725387e983d94e2a4234b8e8df332860ab5c28460","path":"SDWebImage/Core/SDAnimatedImageView+WebCache.h","sourceTree":"","type":"file"},{"fileType":"sourcecode.c.objc","guid":"bfdfe7dc352907fc980b868725387e9869d5460295efbc7dc43c12e14196373a","path":"SDWebImage/Core/SDAnimatedImageView+WebCache.m","sourceTree":"","type":"file"},{"fileType":"sourcecode.c.h","guid":"bfdfe7dc352907fc980b868725387e981ee2ea2c0f3451ad81e4cd37571a9217","path":"SDWebImage/Private/SDAssociatedObject.h","sourceTree":"","type":"file"},{"fileType":"sourcecode.c.objc","guid":"bfdfe7dc352907fc980b868725387e98162b8fefd8d643427787492f1c51da3d","path":"SDWebImage/Private/SDAssociatedObject.m","sourceTree":"","type":"file"},{"fileType":"sourcecode.c.h","guid":"bfdfe7dc352907fc980b868725387e988c36ed33a6b70955a1fe117c31119455","path":"SDWebImage/Private/SDAsyncBlockOperation.h","sourceTree":"","type":"file"},{"fileType":"sourcecode.c.objc","guid":"bfdfe7dc352907fc980b868725387e98ee7eac77a5571e1e9e215e3c5a54cd59","path":"SDWebImage/Private/SDAsyncBlockOperation.m","sourceTree":"","type":"file"},{"fileType":"sourcecode.c.h","guid":"bfdfe7dc352907fc980b868725387e98705e37d167e6aa4fe5e7a89434983b0b","path":"SDWebImage/Core/SDCallbackQueue.h","sourceTree":"","type":"file"},{"fileType":"sourcecode.c.objc","guid":"bfdfe7dc352907fc980b868725387e988427fc8c610fd8f3e1bb219ece805796","path":"SDWebImage/Core/SDCallbackQueue.m","sourceTree":"","type":"file"},{"fileType":"sourcecode.c.h","guid":"bfdfe7dc352907fc980b868725387e98ad42019143a452170ac8f0ccbe351bec","path":"SDWebImage/Private/SDDeviceHelper.h","sourceTree":"","type":"file"},{"fileType":"sourcecode.c.objc","guid":"bfdfe7dc352907fc980b868725387e98265fb41c11ac01db9fe94aa464810666","path":"SDWebImage/Private/SDDeviceHelper.m","sourceTree":"","type":"file"},{"fileType":"sourcecode.c.h","guid":"bfdfe7dc352907fc980b868725387e98855529e142431b9ff21b7623dc2343aa","path":"SDWebImage/Core/SDDiskCache.h","sourceTree":"","type":"file"},{"fileType":"sourcecode.c.objc","guid":"bfdfe7dc352907fc980b868725387e985212637a8a891d9412516918621e1a39","path":"SDWebImage/Core/SDDiskCache.m","sourceTree":"","type":"file"},{"fileType":"sourcecode.c.h","guid":"bfdfe7dc352907fc980b868725387e98d9d549ee09361b3182ffb3a7cb2c4f16","path":"SDWebImage/Private/SDDisplayLink.h","sourceTree":"","type":"file"},{"fileType":"sourcecode.c.objc","guid":"bfdfe7dc352907fc980b868725387e98e26d3f5025495b220ddd4f6207f4587b","path":"SDWebImage/Private/SDDisplayLink.m","sourceTree":"","type":"file"},{"fileType":"sourcecode.c.h","guid":"bfdfe7dc352907fc980b868725387e9831d5facff92bfe7ff1b1f885cc66a0ef","path":"SDWebImage/Private/SDFileAttributeHelper.h","sourceTree":"","type":"file"},{"fileType":"sourcecode.c.objc","guid":"bfdfe7dc352907fc980b868725387e987aeb1677aa3f05f1761f846718835c50","path":"SDWebImage/Private/SDFileAttributeHelper.m","sourceTree":"","type":"file"},{"fileType":"sourcecode.c.h","guid":"bfdfe7dc352907fc980b868725387e98b10e1dc2d838c45be2daa77f2da23187","path":"SDWebImage/Core/SDGraphicsImageRenderer.h","sourceTree":"","type":"file"},{"fileType":"sourcecode.c.objc","guid":"bfdfe7dc352907fc980b868725387e98f959b628d5b8052a17713834ad57fb09","path":"SDWebImage/Core/SDGraphicsImageRenderer.m","sourceTree":"","type":"file"},{"fileType":"sourcecode.c.h","guid":"bfdfe7dc352907fc980b868725387e98ccbf3bd085b02b578987707f8792f7b3","path":"SDWebImage/Core/SDImageAPNGCoder.h","sourceTree":"","type":"file"},{"fileType":"sourcecode.c.objc","guid":"bfdfe7dc352907fc980b868725387e9806ad195b6f8d839ae85aaad6a082e134","path":"SDWebImage/Core/SDImageAPNGCoder.m","sourceTree":"","type":"file"},{"fileType":"sourcecode.c.h","guid":"bfdfe7dc352907fc980b868725387e987c0adab35058c318538f4dc83454ce4e","path":"SDWebImage/Private/SDImageAssetManager.h","sourceTree":"","type":"file"},{"fileType":"sourcecode.c.objc","guid":"bfdfe7dc352907fc980b868725387e982d87c15323f45612fa9da3bf7eb1f67c","path":"SDWebImage/Private/SDImageAssetManager.m","sourceTree":"","type":"file"},{"fileType":"sourcecode.c.h","guid":"bfdfe7dc352907fc980b868725387e987a842fd7d0d8113b0e4b745df45548eb","path":"SDWebImage/Core/SDImageAWebPCoder.h","sourceTree":"","type":"file"},{"fileType":"sourcecode.c.objc","guid":"bfdfe7dc352907fc980b868725387e980aaa2ce18060018d8582b15deb60717e","path":"SDWebImage/Core/SDImageAWebPCoder.m","sourceTree":"","type":"file"},{"fileType":"sourcecode.c.h","guid":"bfdfe7dc352907fc980b868725387e98590daa9c16ed56ce3ab6dd2cc5e71b02","path":"SDWebImage/Core/SDImageCache.h","sourceTree":"","type":"file"},{"fileType":"sourcecode.c.objc","guid":"bfdfe7dc352907fc980b868725387e98df178355066c42ee41917de773f15445","path":"SDWebImage/Core/SDImageCache.m","sourceTree":"","type":"file"},{"fileType":"sourcecode.c.h","guid":"bfdfe7dc352907fc980b868725387e98e0f1d1916f1c2c74d3580b1a8beadbc9","path":"SDWebImage/Core/SDImageCacheConfig.h","sourceTree":"","type":"file"},{"fileType":"sourcecode.c.objc","guid":"bfdfe7dc352907fc980b868725387e98591862058e662b5f63b1e4a002b7c7c5","path":"SDWebImage/Core/SDImageCacheConfig.m","sourceTree":"","type":"file"},{"fileType":"sourcecode.c.h","guid":"bfdfe7dc352907fc980b868725387e98f9e678ebe42d48ec13e555aada3bc3d9","path":"SDWebImage/Core/SDImageCacheDefine.h","sourceTree":"","type":"file"},{"fileType":"sourcecode.c.objc","guid":"bfdfe7dc352907fc980b868725387e98f83f5f89240fd2c759541ca77d087f0c","path":"SDWebImage/Core/SDImageCacheDefine.m","sourceTree":"","type":"file"},{"fileType":"sourcecode.c.h","guid":"bfdfe7dc352907fc980b868725387e988da911fe8274c9c625d56ca791baefb0","path":"SDWebImage/Core/SDImageCachesManager.h","sourceTree":"","type":"file"},{"fileType":"sourcecode.c.objc","guid":"bfdfe7dc352907fc980b868725387e989af56a45d24d5431edf6bad850b00d11","path":"SDWebImage/Core/SDImageCachesManager.m","sourceTree":"","type":"file"},{"fileType":"sourcecode.c.h","guid":"bfdfe7dc352907fc980b868725387e98523fb53a069b36128e18dd0e59218348","path":"SDWebImage/Private/SDImageCachesManagerOperation.h","sourceTree":"","type":"file"},{"fileType":"sourcecode.c.objc","guid":"bfdfe7dc352907fc980b868725387e986bac22c527310784f1c006e87f3294ce","path":"SDWebImage/Private/SDImageCachesManagerOperation.m","sourceTree":"","type":"file"},{"fileType":"sourcecode.c.h","guid":"bfdfe7dc352907fc980b868725387e9838cb0d098103b3b9e86956ad87b22b2d","path":"SDWebImage/Core/SDImageCoder.h","sourceTree":"","type":"file"},{"fileType":"sourcecode.c.objc","guid":"bfdfe7dc352907fc980b868725387e981c2992260f8b3902274cb45c5378a77c","path":"SDWebImage/Core/SDImageCoder.m","sourceTree":"","type":"file"},{"fileType":"sourcecode.c.h","guid":"bfdfe7dc352907fc980b868725387e98e088deb5da5e6541c7b77e9a11ea92c4","path":"SDWebImage/Core/SDImageCoderHelper.h","sourceTree":"","type":"file"},{"fileType":"sourcecode.c.objc","guid":"bfdfe7dc352907fc980b868725387e98e34fca7fb9515751e5b65daa60892205","path":"SDWebImage/Core/SDImageCoderHelper.m","sourceTree":"","type":"file"},{"fileType":"sourcecode.c.h","guid":"bfdfe7dc352907fc980b868725387e98c0a8f0a8b8deec84cfa655fb07cfa5ee","path":"SDWebImage/Core/SDImageCodersManager.h","sourceTree":"","type":"file"},{"fileType":"sourcecode.c.objc","guid":"bfdfe7dc352907fc980b868725387e982943aac92a9cbecd2cbbb9c61b214642","path":"SDWebImage/Core/SDImageCodersManager.m","sourceTree":"","type":"file"},{"fileType":"sourcecode.c.h","guid":"bfdfe7dc352907fc980b868725387e982d86fa74c86e4b192ae203192c4ecbf7","path":"SDWebImage/Core/SDImageFrame.h","sourceTree":"","type":"file"},{"fileType":"sourcecode.c.objc","guid":"bfdfe7dc352907fc980b868725387e981af493bf2a6d92e228891b304a7c2b30","path":"SDWebImage/Core/SDImageFrame.m","sourceTree":"","type":"file"},{"fileType":"sourcecode.c.h","guid":"bfdfe7dc352907fc980b868725387e98be1b86c55734f717d0ca31fec781de9d","path":"SDWebImage/Private/SDImageFramePool.h","sourceTree":"","type":"file"},{"fileType":"sourcecode.c.objc","guid":"bfdfe7dc352907fc980b868725387e9889a07bab11e055a44d47d0a84563e088","path":"SDWebImage/Private/SDImageFramePool.m","sourceTree":"","type":"file"},{"fileType":"sourcecode.c.h","guid":"bfdfe7dc352907fc980b868725387e9852dc3cd416a8f2168164e78857457a58","path":"SDWebImage/Core/SDImageGIFCoder.h","sourceTree":"","type":"file"},{"fileType":"sourcecode.c.objc","guid":"bfdfe7dc352907fc980b868725387e98a1d2c3a622ecffffe17ef46139139ca8","path":"SDWebImage/Core/SDImageGIFCoder.m","sourceTree":"","type":"file"},{"fileType":"sourcecode.c.h","guid":"bfdfe7dc352907fc980b868725387e98a7717b19769aeb6b9ee109e003eaf3c5","path":"SDWebImage/Core/SDImageGraphics.h","sourceTree":"","type":"file"},{"fileType":"sourcecode.c.objc","guid":"bfdfe7dc352907fc980b868725387e984d09367fa07320c0ed18d8d09ef5757c","path":"SDWebImage/Core/SDImageGraphics.m","sourceTree":"","type":"file"},{"fileType":"sourcecode.c.h","guid":"bfdfe7dc352907fc980b868725387e98b054f24c9d53f55652ce125ed0820b32","path":"SDWebImage/Core/SDImageHEICCoder.h","sourceTree":"","type":"file"},{"fileType":"sourcecode.c.objc","guid":"bfdfe7dc352907fc980b868725387e98616683757c0e1501dd6570169bfd41ac","path":"SDWebImage/Core/SDImageHEICCoder.m","sourceTree":"","type":"file"},{"fileType":"sourcecode.c.h","guid":"bfdfe7dc352907fc980b868725387e9876f5fe642db8bd371f16f87ea2265fdd","path":"SDWebImage/Core/SDImageIOAnimatedCoder.h","sourceTree":"","type":"file"},{"fileType":"sourcecode.c.objc","guid":"bfdfe7dc352907fc980b868725387e988c25500f4df2d88e68f29160fa6d1d5a","path":"SDWebImage/Core/SDImageIOAnimatedCoder.m","sourceTree":"","type":"file"},{"fileType":"sourcecode.c.h","guid":"bfdfe7dc352907fc980b868725387e98736d5194c32aab23367381e19d3ce3fd","path":"SDWebImage/Private/SDImageIOAnimatedCoderInternal.h","sourceTree":"","type":"file"},{"fileType":"sourcecode.c.h","guid":"bfdfe7dc352907fc980b868725387e98e27502a34cf0d8b4655a10b7a907244d","path":"SDWebImage/Core/SDImageIOCoder.h","sourceTree":"","type":"file"},{"fileType":"sourcecode.c.objc","guid":"bfdfe7dc352907fc980b868725387e986a6bcd435124a56335e622830e53d4c3","path":"SDWebImage/Core/SDImageIOCoder.m","sourceTree":"","type":"file"},{"fileType":"sourcecode.c.h","guid":"bfdfe7dc352907fc980b868725387e98b5bfcc15d82c4bdb3694c0a573f3a82c","path":"SDWebImage/Core/SDImageLoader.h","sourceTree":"","type":"file"},{"fileType":"sourcecode.c.objc","guid":"bfdfe7dc352907fc980b868725387e988f7a31d9a7fba991cd82fb921f090297","path":"SDWebImage/Core/SDImageLoader.m","sourceTree":"","type":"file"},{"fileType":"sourcecode.c.h","guid":"bfdfe7dc352907fc980b868725387e9854d83c03faf3ccae2f85ebc06d3edfd7","path":"SDWebImage/Core/SDImageLoadersManager.h","sourceTree":"","type":"file"},{"fileType":"sourcecode.c.objc","guid":"bfdfe7dc352907fc980b868725387e98bbe9461acf5722bf63f491f75f987246","path":"SDWebImage/Core/SDImageLoadersManager.m","sourceTree":"","type":"file"},{"fileType":"sourcecode.c.h","guid":"bfdfe7dc352907fc980b868725387e9818cbd8a1594265b40676b393a478ca19","path":"SDWebImage/Core/SDImageTransformer.h","sourceTree":"","type":"file"},{"fileType":"sourcecode.c.objc","guid":"bfdfe7dc352907fc980b868725387e980cd5a67e18edfb65db64920ac80317e1","path":"SDWebImage/Core/SDImageTransformer.m","sourceTree":"","type":"file"},{"fileType":"sourcecode.c.h","guid":"bfdfe7dc352907fc980b868725387e988ce6991ade90f9118664f77be651e9e7","path":"SDWebImage/Private/SDInternalMacros.h","sourceTree":"","type":"file"},{"fileType":"sourcecode.c.objc","guid":"bfdfe7dc352907fc980b868725387e98665db2580b70e0265552837a06ece510","path":"SDWebImage/Private/SDInternalMacros.m","sourceTree":"","type":"file"},{"fileType":"sourcecode.c.h","guid":"bfdfe7dc352907fc980b868725387e98615e5afab5c4b60f4f54bf4a24d5d7f4","path":"SDWebImage/Core/SDMemoryCache.h","sourceTree":"","type":"file"},{"fileType":"sourcecode.c.objc","guid":"bfdfe7dc352907fc980b868725387e9803d55e2bb08b712edefa8542b0d821f2","path":"SDWebImage/Core/SDMemoryCache.m","sourceTree":"","type":"file"},{"fileType":"sourcecode.c.h","guid":"bfdfe7dc352907fc980b868725387e98a1e40288f11809e02afe6d0add4ed3bc","path":"SDWebImage/Private/SDmetamacros.h","sourceTree":"","type":"file"},{"fileType":"sourcecode.c.h","guid":"bfdfe7dc352907fc980b868725387e98f3090cb74fc1105440000f3b094dac06","path":"SDWebImage/Private/SDWeakProxy.h","sourceTree":"","type":"file"},{"fileType":"sourcecode.c.objc","guid":"bfdfe7dc352907fc980b868725387e988f335221864e0c7abd228aa513d49083","path":"SDWebImage/Private/SDWeakProxy.m","sourceTree":"","type":"file"},{"fileType":"sourcecode.c.h","guid":"bfdfe7dc352907fc980b868725387e982a45a60f2cf9e6b4362fdb5d961d3730","path":"WebImage/SDWebImage.h","sourceTree":"","type":"file"},{"fileType":"sourcecode.c.h","guid":"bfdfe7dc352907fc980b868725387e98645f30d4b737a9944563bf1acbd19e86","path":"SDWebImage/Core/SDWebImageCacheKeyFilter.h","sourceTree":"","type":"file"},{"fileType":"sourcecode.c.objc","guid":"bfdfe7dc352907fc980b868725387e984d3a38375b819f97a2e590d76e3d68be","path":"SDWebImage/Core/SDWebImageCacheKeyFilter.m","sourceTree":"","type":"file"},{"fileType":"sourcecode.c.h","guid":"bfdfe7dc352907fc980b868725387e982d6c2872630ef832dce2de99d07b9a55","path":"SDWebImage/Core/SDWebImageCacheSerializer.h","sourceTree":"","type":"file"},{"fileType":"sourcecode.c.objc","guid":"bfdfe7dc352907fc980b868725387e98ed97a12539b70fccd51dec37544af27e","path":"SDWebImage/Core/SDWebImageCacheSerializer.m","sourceTree":"","type":"file"},{"fileType":"sourcecode.c.h","guid":"bfdfe7dc352907fc980b868725387e98843243bab3fa1f3d33a82459406db798","path":"SDWebImage/Core/SDWebImageCompat.h","sourceTree":"","type":"file"},{"fileType":"sourcecode.c.objc","guid":"bfdfe7dc352907fc980b868725387e988dd995935f6b4bed79a6300837319a14","path":"SDWebImage/Core/SDWebImageCompat.m","sourceTree":"","type":"file"},{"fileType":"sourcecode.c.h","guid":"bfdfe7dc352907fc980b868725387e98b3d9d1eff24b478076662e7793cc0f81","path":"SDWebImage/Core/SDWebImageDefine.h","sourceTree":"","type":"file"},{"fileType":"sourcecode.c.objc","guid":"bfdfe7dc352907fc980b868725387e985c56464dbc24f4b98cd30d9927bd9b20","path":"SDWebImage/Core/SDWebImageDefine.m","sourceTree":"","type":"file"},{"fileType":"sourcecode.c.h","guid":"bfdfe7dc352907fc980b868725387e9852467a5c652bd848d515dcaabfba92be","path":"SDWebImage/Core/SDWebImageDownloader.h","sourceTree":"","type":"file"},{"fileType":"sourcecode.c.objc","guid":"bfdfe7dc352907fc980b868725387e9870310f2e959bc3a5eff9174c850cbe6e","path":"SDWebImage/Core/SDWebImageDownloader.m","sourceTree":"","type":"file"},{"fileType":"sourcecode.c.h","guid":"bfdfe7dc352907fc980b868725387e981c37503503856f7bb1bf94b84df33811","path":"SDWebImage/Core/SDWebImageDownloaderConfig.h","sourceTree":"","type":"file"},{"fileType":"sourcecode.c.objc","guid":"bfdfe7dc352907fc980b868725387e98376eb6b21e867b2936731a0373f7aa37","path":"SDWebImage/Core/SDWebImageDownloaderConfig.m","sourceTree":"","type":"file"},{"fileType":"sourcecode.c.h","guid":"bfdfe7dc352907fc980b868725387e98566b09412f1c142b2d2182d03c2a7c53","path":"SDWebImage/Core/SDWebImageDownloaderDecryptor.h","sourceTree":"","type":"file"},{"fileType":"sourcecode.c.objc","guid":"bfdfe7dc352907fc980b868725387e98b463364ff9c18b81a6609b062a5130db","path":"SDWebImage/Core/SDWebImageDownloaderDecryptor.m","sourceTree":"","type":"file"},{"fileType":"sourcecode.c.h","guid":"bfdfe7dc352907fc980b868725387e98ba6dde7dbf6bb8b5d90dd818665d1c99","path":"SDWebImage/Core/SDWebImageDownloaderOperation.h","sourceTree":"","type":"file"},{"fileType":"sourcecode.c.objc","guid":"bfdfe7dc352907fc980b868725387e988d11b2e1b05020946624f2f29892aa00","path":"SDWebImage/Core/SDWebImageDownloaderOperation.m","sourceTree":"","type":"file"},{"fileType":"sourcecode.c.h","guid":"bfdfe7dc352907fc980b868725387e98d2287b1d56a60c6eccdf938b9aa947fd","path":"SDWebImage/Core/SDWebImageDownloaderRequestModifier.h","sourceTree":"","type":"file"},{"fileType":"sourcecode.c.objc","guid":"bfdfe7dc352907fc980b868725387e98b7defa3347432052375b438e2e2a471d","path":"SDWebImage/Core/SDWebImageDownloaderRequestModifier.m","sourceTree":"","type":"file"},{"fileType":"sourcecode.c.h","guid":"bfdfe7dc352907fc980b868725387e985db8e4d10c219b6975cdd62ddf92d0aa","path":"SDWebImage/Core/SDWebImageDownloaderResponseModifier.h","sourceTree":"","type":"file"},{"fileType":"sourcecode.c.objc","guid":"bfdfe7dc352907fc980b868725387e987e7eb9b69db6e27a15c85f9fac88c21b","path":"SDWebImage/Core/SDWebImageDownloaderResponseModifier.m","sourceTree":"","type":"file"},{"fileType":"sourcecode.c.h","guid":"bfdfe7dc352907fc980b868725387e98a20f21b83c952074caf5d18873e86258","path":"SDWebImage/Core/SDWebImageError.h","sourceTree":"","type":"file"},{"fileType":"sourcecode.c.objc","guid":"bfdfe7dc352907fc980b868725387e98e94d1578f99b30508d8845d701648ecd","path":"SDWebImage/Core/SDWebImageError.m","sourceTree":"","type":"file"},{"fileType":"sourcecode.c.h","guid":"bfdfe7dc352907fc980b868725387e980db9b1158e6646728005aa55be435f85","path":"SDWebImage/Core/SDWebImageIndicator.h","sourceTree":"","type":"file"},{"fileType":"sourcecode.c.objc","guid":"bfdfe7dc352907fc980b868725387e9812938caf7996c6d80dbf9271d3a6f958","path":"SDWebImage/Core/SDWebImageIndicator.m","sourceTree":"","type":"file"},{"fileType":"sourcecode.c.h","guid":"bfdfe7dc352907fc980b868725387e98d48abcca92cf18856278d322cd682f4c","path":"SDWebImage/Core/SDWebImageManager.h","sourceTree":"","type":"file"},{"fileType":"sourcecode.c.objc","guid":"bfdfe7dc352907fc980b868725387e98f3d32e8ce6d42e2d053519de5c184f67","path":"SDWebImage/Core/SDWebImageManager.m","sourceTree":"","type":"file"},{"fileType":"sourcecode.c.h","guid":"bfdfe7dc352907fc980b868725387e983f4f10857c92a9d96bc0bf380825345b","path":"SDWebImage/Core/SDWebImageOperation.h","sourceTree":"","type":"file"},{"fileType":"sourcecode.c.objc","guid":"bfdfe7dc352907fc980b868725387e98c5d01b3d56827bfde5187df4ae8ae6f7","path":"SDWebImage/Core/SDWebImageOperation.m","sourceTree":"","type":"file"},{"fileType":"sourcecode.c.h","guid":"bfdfe7dc352907fc980b868725387e9826c93ac59a6de6260adf7777d48a8e6b","path":"SDWebImage/Core/SDWebImageOptionsProcessor.h","sourceTree":"","type":"file"},{"fileType":"sourcecode.c.objc","guid":"bfdfe7dc352907fc980b868725387e980bace14250c740b8f01102fed49a6f3f","path":"SDWebImage/Core/SDWebImageOptionsProcessor.m","sourceTree":"","type":"file"},{"fileType":"sourcecode.c.h","guid":"bfdfe7dc352907fc980b868725387e985628e9529c81661cd2bf059df123f941","path":"SDWebImage/Core/SDWebImagePrefetcher.h","sourceTree":"","type":"file"},{"fileType":"sourcecode.c.objc","guid":"bfdfe7dc352907fc980b868725387e98bd63cec024b8004a2cfea6c1f3c3a16d","path":"SDWebImage/Core/SDWebImagePrefetcher.m","sourceTree":"","type":"file"},{"fileType":"sourcecode.c.h","guid":"bfdfe7dc352907fc980b868725387e985c307f6e0adf9012f1be72c3d0497a21","path":"SDWebImage/Core/SDWebImageTransition.h","sourceTree":"","type":"file"},{"fileType":"sourcecode.c.objc","guid":"bfdfe7dc352907fc980b868725387e98f249276cf2cb89b2af74b98fc236dc19","path":"SDWebImage/Core/SDWebImageTransition.m","sourceTree":"","type":"file"},{"fileType":"sourcecode.c.h","guid":"bfdfe7dc352907fc980b868725387e984b1e3ffd1fb39dc94affca31b4e27b9e","path":"SDWebImage/Private/SDWebImageTransitionInternal.h","sourceTree":"","type":"file"},{"fileType":"sourcecode.c.h","guid":"bfdfe7dc352907fc980b868725387e988fc042ecdc017c735af204f8c0612394","path":"SDWebImage/Core/UIButton+WebCache.h","sourceTree":"","type":"file"},{"fileType":"sourcecode.c.objc","guid":"bfdfe7dc352907fc980b868725387e98741d531661b69bd4c010ad24b33cb126","path":"SDWebImage/Core/UIButton+WebCache.m","sourceTree":"","type":"file"},{"fileType":"sourcecode.c.h","guid":"bfdfe7dc352907fc980b868725387e98d80e8bd3db060dde5d194ccc462db4de","path":"SDWebImage/Private/UIColor+SDHexString.h","sourceTree":"","type":"file"},{"fileType":"sourcecode.c.objc","guid":"bfdfe7dc352907fc980b868725387e98fad610585409b4155dfb77dfb11aaff8","path":"SDWebImage/Private/UIColor+SDHexString.m","sourceTree":"","type":"file"},{"fileType":"sourcecode.c.h","guid":"bfdfe7dc352907fc980b868725387e982c7dbddc604a244196428b8fc46f5cac","path":"SDWebImage/Core/UIImage+ExtendedCacheData.h","sourceTree":"","type":"file"},{"fileType":"sourcecode.c.objc","guid":"bfdfe7dc352907fc980b868725387e98b8c9eb74f63ffa618a81f634e2d0e973","path":"SDWebImage/Core/UIImage+ExtendedCacheData.m","sourceTree":"","type":"file"},{"fileType":"sourcecode.c.h","guid":"bfdfe7dc352907fc980b868725387e984f21f0eb8f4805c253e862eb24369362","path":"SDWebImage/Core/UIImage+ForceDecode.h","sourceTree":"","type":"file"},{"fileType":"sourcecode.c.objc","guid":"bfdfe7dc352907fc980b868725387e9810aa22726b627e7bbff26562ab33a902","path":"SDWebImage/Core/UIImage+ForceDecode.m","sourceTree":"","type":"file"},{"fileType":"sourcecode.c.h","guid":"bfdfe7dc352907fc980b868725387e98a364326f3629a82d35fe5e5601a7cfec","path":"SDWebImage/Core/UIImage+GIF.h","sourceTree":"","type":"file"},{"fileType":"sourcecode.c.objc","guid":"bfdfe7dc352907fc980b868725387e98b6a6fe4795e9ccd8158ae4c0af0f8c8c","path":"SDWebImage/Core/UIImage+GIF.m","sourceTree":"","type":"file"},{"fileType":"sourcecode.c.h","guid":"bfdfe7dc352907fc980b868725387e98eab3c5f10863c41bce28b75442dcfb0f","path":"SDWebImage/Core/UIImage+MemoryCacheCost.h","sourceTree":"","type":"file"},{"fileType":"sourcecode.c.objc","guid":"bfdfe7dc352907fc980b868725387e987bc99a6470d3a1db520bcbccc094ac70","path":"SDWebImage/Core/UIImage+MemoryCacheCost.m","sourceTree":"","type":"file"},{"fileType":"sourcecode.c.h","guid":"bfdfe7dc352907fc980b868725387e988fe87f3480a506b882b7262afada35a2","path":"SDWebImage/Core/UIImage+Metadata.h","sourceTree":"","type":"file"},{"fileType":"sourcecode.c.objc","guid":"bfdfe7dc352907fc980b868725387e9857856e03e3b248fde2b403cff7be0c2d","path":"SDWebImage/Core/UIImage+Metadata.m","sourceTree":"","type":"file"},{"fileType":"sourcecode.c.h","guid":"bfdfe7dc352907fc980b868725387e98d5f4296b72582a649e28a8d376925930","path":"SDWebImage/Core/UIImage+MultiFormat.h","sourceTree":"","type":"file"},{"fileType":"sourcecode.c.objc","guid":"bfdfe7dc352907fc980b868725387e9858b4d3f93823a7a844e9af48e325ea6b","path":"SDWebImage/Core/UIImage+MultiFormat.m","sourceTree":"","type":"file"},{"fileType":"sourcecode.c.h","guid":"bfdfe7dc352907fc980b868725387e98350b1090302f51cfb21e01d8415c7609","path":"SDWebImage/Core/UIImage+Transform.h","sourceTree":"","type":"file"},{"fileType":"sourcecode.c.objc","guid":"bfdfe7dc352907fc980b868725387e98f1cdf8141b4e6f72ce96cfc4e114ac93","path":"SDWebImage/Core/UIImage+Transform.m","sourceTree":"","type":"file"},{"fileType":"sourcecode.c.h","guid":"bfdfe7dc352907fc980b868725387e98099e64b0490c5209324be8367cf59b67","path":"SDWebImage/Core/UIImageView+HighlightedWebCache.h","sourceTree":"","type":"file"},{"fileType":"sourcecode.c.objc","guid":"bfdfe7dc352907fc980b868725387e9820c91663ac328caa6a772dc1aec7f895","path":"SDWebImage/Core/UIImageView+HighlightedWebCache.m","sourceTree":"","type":"file"},{"fileType":"sourcecode.c.h","guid":"bfdfe7dc352907fc980b868725387e9853d9196d0b2578d8a09ef594daec2b10","path":"SDWebImage/Core/UIImageView+WebCache.h","sourceTree":"","type":"file"},{"fileType":"sourcecode.c.objc","guid":"bfdfe7dc352907fc980b868725387e98c40558907257758691a97ebe7d32550e","path":"SDWebImage/Core/UIImageView+WebCache.m","sourceTree":"","type":"file"},{"fileType":"sourcecode.c.h","guid":"bfdfe7dc352907fc980b868725387e98358c67ecbf86e16ee420fdc0f60209d6","path":"SDWebImage/Core/UIView+WebCache.h","sourceTree":"","type":"file"},{"fileType":"sourcecode.c.objc","guid":"bfdfe7dc352907fc980b868725387e988613cca076d4233fbc8f533d7bf66208","path":"SDWebImage/Core/UIView+WebCache.m","sourceTree":"","type":"file"},{"fileType":"sourcecode.c.h","guid":"bfdfe7dc352907fc980b868725387e98338ff7df5b388b8cb6dc581ce584707b","path":"SDWebImage/Core/UIView+WebCacheOperation.h","sourceTree":"","type":"file"},{"fileType":"sourcecode.c.objc","guid":"bfdfe7dc352907fc980b868725387e988bfe961a333b087f09acd251c89287f8","path":"SDWebImage/Core/UIView+WebCacheOperation.m","sourceTree":"","type":"file"},{"fileType":"sourcecode.c.h","guid":"bfdfe7dc352907fc980b868725387e980f510685009abf4916684cac897048e9","path":"SDWebImage/Core/UIView+WebCacheState.h","sourceTree":"","type":"file"},{"fileType":"sourcecode.c.objc","guid":"bfdfe7dc352907fc980b868725387e987e9e853cad7160fab37152132380f5fa","path":"SDWebImage/Core/UIView+WebCacheState.m","sourceTree":"","type":"file"},{"children":[{"fileType":"text.xml","guid":"bfdfe7dc352907fc980b868725387e98f00a9964af8b3d1e72008eb9a3395135","path":"WebImage/PrivacyInfo.xcprivacy","sourceTree":"","type":"file"}],"guid":"bfdfe7dc352907fc980b868725387e9876502081714d700f73b534ddf1747213","name":"Resources","path":"","sourceTree":"","type":"group"}],"guid":"bfdfe7dc352907fc980b868725387e980f66c8f3abfba9f5845a6849c9a74da6","name":"Core","path":"","sourceTree":"","type":"group"},{"children":[{"fileType":"text.plist.xml","guid":"bfdfe7dc352907fc980b868725387e98e6e6af65a1e2b901f1e218c4025ec776","path":"ResourceBundle-SDWebImage-SDWebImage-Info.plist","sourceTree":"","type":"file"},{"fileType":"sourcecode.module-map","guid":"bfdfe7dc352907fc980b868725387e98542a3b506afea7cf05a6014e01afd827","path":"SDWebImage.modulemap","sourceTree":"","type":"file"},{"fileType":"sourcecode.c.objc","guid":"bfdfe7dc352907fc980b868725387e98b007c1bd88b3b03c3720e4d4ec6ce72d","path":"SDWebImage-dummy.m","sourceTree":"","type":"file"},{"fileType":"text.plist.xml","guid":"bfdfe7dc352907fc980b868725387e98fe6b49850f645e18d1be0585bb2dff16","path":"SDWebImage-Info.plist","sourceTree":"","type":"file"},{"fileType":"sourcecode.c.h","guid":"bfdfe7dc352907fc980b868725387e980811a6b206a0c52ca00d25ab2bfa6885","path":"SDWebImage-prefix.pch","sourceTree":"","type":"file"},{"fileType":"sourcecode.c.h","guid":"bfdfe7dc352907fc980b868725387e988e30be8bf3d4fd0d6c23a4784a17b51a","path":"SDWebImage-umbrella.h","sourceTree":"","type":"file"},{"fileType":"text.xcconfig","guid":"bfdfe7dc352907fc980b868725387e98853911a66086d603dff7e7f648c6248b","path":"SDWebImage.debug.xcconfig","sourceTree":"","type":"file"},{"fileType":"text.xcconfig","guid":"bfdfe7dc352907fc980b868725387e98924a369cb6c964ba34275d7ca3bc2dda","path":"SDWebImage.release.xcconfig","sourceTree":"","type":"file"}],"guid":"bfdfe7dc352907fc980b868725387e9871f48d6bb622e460e9433040cdf01999","name":"Support Files","path":"../Target Support Files/SDWebImage","sourceTree":"","type":"group"}],"guid":"bfdfe7dc352907fc980b868725387e98338e88a48b5dc4d1eb800f3b43a812d8","name":"SDWebImage","path":"SDWebImage","sourceTree":"","type":"group"},{"children":[{"fileType":"sourcecode.swift","guid":"bfdfe7dc352907fc980b868725387e98e40e39827e8180631013036cb2dfa2fa","path":"SwiftyGif/NSImage+SwiftyGif.swift","sourceTree":"","type":"file"},{"fileType":"sourcecode.swift","guid":"bfdfe7dc352907fc980b868725387e98319254f7e2beed7375a445c04910195a","path":"SwiftyGif/NSImageView+SwiftyGif.swift","sourceTree":"","type":"file"},{"fileType":"sourcecode.swift","guid":"bfdfe7dc352907fc980b868725387e98721903f80f4a8564791b330bfd01951f","path":"SwiftyGif/ObjcAssociatedWeakObject.swift","sourceTree":"","type":"file"},{"fileType":"sourcecode.c.h","guid":"bfdfe7dc352907fc980b868725387e98289a02129447d57ed9106425e09cb6a0","path":"SwiftyGif/SwiftyGif.h","sourceTree":"","type":"file"},{"fileType":"sourcecode.swift","guid":"bfdfe7dc352907fc980b868725387e98ae29cbc96bfd2ba4fc42c1226f69b713","path":"SwiftyGif/SwiftyGifManager.swift","sourceTree":"","type":"file"},{"fileType":"sourcecode.swift","guid":"bfdfe7dc352907fc980b868725387e989b199724c96ff32700c5818e07f19a57","path":"SwiftyGif/UIImage+SwiftyGif.swift","sourceTree":"","type":"file"},{"fileType":"sourcecode.swift","guid":"bfdfe7dc352907fc980b868725387e986d3515962c56f64e5bce62c72d467b1e","path":"SwiftyGif/UIImageView+SwiftyGif.swift","sourceTree":"","type":"file"},{"children":[{"fileType":"text.xml","guid":"bfdfe7dc352907fc980b868725387e98b3294ad38a1a774f918eb06a0d82d5fc","path":"SwiftyGif/PrivacyInfo.xcprivacy","sourceTree":"","type":"file"}],"guid":"bfdfe7dc352907fc980b868725387e98da660a130eb921ce56819cd547890abc","name":"Resources","path":"","sourceTree":"","type":"group"},{"children":[{"fileType":"text.plist.xml","guid":"bfdfe7dc352907fc980b868725387e98ff5eeda0914f5feba477e1b42dd88747","path":"ResourceBundle-SwiftyGif-SwiftyGif-Info.plist","sourceTree":"","type":"file"},{"fileType":"sourcecode.module-map","guid":"bfdfe7dc352907fc980b868725387e9833fe566ea17ee70f00a37b770cd49975","path":"SwiftyGif.modulemap","sourceTree":"","type":"file"},{"fileType":"sourcecode.c.objc","guid":"bfdfe7dc352907fc980b868725387e9887989963270204aae9475498243cfbd6","path":"SwiftyGif-dummy.m","sourceTree":"","type":"file"},{"fileType":"text.plist.xml","guid":"bfdfe7dc352907fc980b868725387e98d9b96ec9e5d672ffebbc48d485500808","path":"SwiftyGif-Info.plist","sourceTree":"","type":"file"},{"fileType":"sourcecode.c.h","guid":"bfdfe7dc352907fc980b868725387e98cfbae3169e68879a7313f75db698346f","path":"SwiftyGif-prefix.pch","sourceTree":"","type":"file"},{"fileType":"sourcecode.c.h","guid":"bfdfe7dc352907fc980b868725387e98720d63afa192c3198e49d0e658ad9559","path":"SwiftyGif-umbrella.h","sourceTree":"","type":"file"},{"fileType":"text.xcconfig","guid":"bfdfe7dc352907fc980b868725387e9858f3b516df641443530da1bc57fe9cb2","path":"SwiftyGif.debug.xcconfig","sourceTree":"","type":"file"},{"fileType":"text.xcconfig","guid":"bfdfe7dc352907fc980b868725387e98ee297b6d0e4054f62dc3e42830b40034","path":"SwiftyGif.release.xcconfig","sourceTree":"","type":"file"}],"guid":"bfdfe7dc352907fc980b868725387e98954abe070bafa0dab86324db53632408","name":"Support Files","path":"../Target Support Files/SwiftyGif","sourceTree":"","type":"group"}],"guid":"bfdfe7dc352907fc980b868725387e98ec85f92f83a04cc8c6b5aff5f1d1b451","name":"SwiftyGif","path":"SwiftyGif","sourceTree":"","type":"group"}],"guid":"bfdfe7dc352907fc980b868725387e98b9282a537e9e128893d471127342cf65","name":"Pods","path":"","sourceTree":"","type":"group"},{"guid":"bfdfe7dc352907fc980b868725387e985307a35fe1de7c38afb3dea5eb1bab9b","name":"Products","path":"","sourceTree":"","type":"group"},{"children":[{"children":[{"fileType":"sourcecode.module-map","guid":"bfdfe7dc352907fc980b868725387e98a3f4680c874ecbcb5b5a6338bc13a426","path":"Pods-Runner.modulemap","sourceTree":"","type":"file"},{"fileType":"text","guid":"bfdfe7dc352907fc980b868725387e9814181933c973297b0001d0e9ee64381d","path":"Pods-Runner-acknowledgements.markdown","sourceTree":"","type":"file"},{"fileType":"text.plist.xml","guid":"bfdfe7dc352907fc980b868725387e9887440869a53d6020d968ddf6b9b30aa0","path":"Pods-Runner-acknowledgements.plist","sourceTree":"","type":"file"},{"fileType":"sourcecode.c.objc","guid":"bfdfe7dc352907fc980b868725387e98fed0970e703d355c9aff813f280aafdc","path":"Pods-Runner-dummy.m","sourceTree":"","type":"file"},{"fileType":"text.script.sh","guid":"bfdfe7dc352907fc980b868725387e9826e505869a67d81656859ded68178c1d","path":"Pods-Runner-frameworks.sh","sourceTree":"","type":"file"},{"fileType":"text.plist.xml","guid":"bfdfe7dc352907fc980b868725387e98de02ac5005ab1eb052abf25c63731e95","path":"Pods-Runner-Info.plist","sourceTree":"","type":"file"},{"fileType":"text.script.sh","guid":"bfdfe7dc352907fc980b868725387e98f6f4dcb116856f2da0fa97d3015cb1af","path":"Pods-Runner-resources.sh","sourceTree":"","type":"file"},{"fileType":"sourcecode.c.h","guid":"bfdfe7dc352907fc980b868725387e980ec6fbca7264a6936f2adfc48dd7f5bc","path":"Pods-Runner-umbrella.h","sourceTree":"","type":"file"},{"fileType":"text.xcconfig","guid":"bfdfe7dc352907fc980b868725387e9850cc7fc2d23136fb4fac488d6c47df20","path":"Pods-Runner.debug.xcconfig","sourceTree":"","type":"file"},{"fileType":"text.xcconfig","guid":"bfdfe7dc352907fc980b868725387e98dc1a21852c7a085c7dd8f65cf0fa9907","path":"Pods-Runner.profile.xcconfig","sourceTree":"","type":"file"},{"fileType":"text.xcconfig","guid":"bfdfe7dc352907fc980b868725387e98f17abf55d75f35efcaf45a1185b085b6","path":"Pods-Runner.release.xcconfig","sourceTree":"","type":"file"}],"guid":"bfdfe7dc352907fc980b868725387e98cf3c1972df678a5e36df75a46391500d","name":"Pods-Runner","path":"Target Support Files/Pods-Runner","sourceTree":"","type":"group"},{"children":[{"fileType":"sourcecode.module-map","guid":"bfdfe7dc352907fc980b868725387e984c4f55ec853c945e234980557a98aed8","path":"Pods-RunnerTests.modulemap","sourceTree":"","type":"file"},{"fileType":"text","guid":"bfdfe7dc352907fc980b868725387e98fc0f7e7242f459f81e455145932dcafd","path":"Pods-RunnerTests-acknowledgements.markdown","sourceTree":"","type":"file"},{"fileType":"text.plist.xml","guid":"bfdfe7dc352907fc980b868725387e985f8b68b152f46f18718da20c04e675cb","path":"Pods-RunnerTests-acknowledgements.plist","sourceTree":"","type":"file"},{"fileType":"sourcecode.c.objc","guid":"bfdfe7dc352907fc980b868725387e98022654f1ff78dd844d694dba2439dab2","path":"Pods-RunnerTests-dummy.m","sourceTree":"","type":"file"},{"fileType":"text.plist.xml","guid":"bfdfe7dc352907fc980b868725387e989e5ad6b9a07953a12c7008a15bd9c99c","path":"Pods-RunnerTests-Info.plist","sourceTree":"","type":"file"},{"fileType":"sourcecode.c.h","guid":"bfdfe7dc352907fc980b868725387e98e5e8bcdff29e5f8321be18f7989b4bc7","path":"Pods-RunnerTests-umbrella.h","sourceTree":"","type":"file"},{"fileType":"text.xcconfig","guid":"bfdfe7dc352907fc980b868725387e98144cd18850e477837c238075d5256ffe","path":"Pods-RunnerTests.debug.xcconfig","sourceTree":"","type":"file"},{"fileType":"text.xcconfig","guid":"bfdfe7dc352907fc980b868725387e981b663a2c82f0220040296818ba53477e","path":"Pods-RunnerTests.profile.xcconfig","sourceTree":"","type":"file"},{"fileType":"text.xcconfig","guid":"bfdfe7dc352907fc980b868725387e98965b92d39d30a7872295adc2841cd1b1","path":"Pods-RunnerTests.release.xcconfig","sourceTree":"","type":"file"}],"guid":"bfdfe7dc352907fc980b868725387e9859551a2ccb1df711861b574920cd49bf","name":"Pods-RunnerTests","path":"Target Support Files/Pods-RunnerTests","sourceTree":"","type":"group"}],"guid":"bfdfe7dc352907fc980b868725387e98dafc421ff02609f2772b356038eb9849","name":"Targets Support Files","path":"","sourceTree":"","type":"group"}],"guid":"bfdfe7dc352907fc980b868725387e98677e601b37074db53aff90e47c8f96d1","name":"Pods","path":"","sourceTree":"","type":"group"},"guid":"bfdfe7dc352907fc980b868725387e98","knownRegions":["Base","ar","da","de","en","es","fr","hu","it","ja","ko","nb-NO","nl","pt_BR","ru","tr","ur","vi","zh-Hans","zh-Hant"],"path":"/Users/yaso_meth/Git/mih_main/mih-project/mih_ui/ios/Pods/Pods.xcodeproj","projectDirectory":"/Users/yaso_meth/Git/mih_main/mih-project/mih_ui/ios/Pods","targets":["TARGET@v11_hash=ff5000f2df75d09390a7c02a18cf47cb","TARGET@v11_hash=de9cdf72fffe1fdedbf989540b2a67e3","TARGET@v11_hash=f8fcc6d355b2806d43f663daae6a06d4","TARGET@v11_hash=eb424d111b233087eeb27f0dcd5e1868","TARGET@v11_hash=cbb1eb454f498b998b145ed6dace7d98","TARGET@v11_hash=ddbefab0336a5b7a75af7835b2eb8ae3","TARGET@v11_hash=5bd0bad9e37ac0efe7eb7e9b6a040622","TARGET@v11_hash=ff93596a3d92ba01970679242c7f2f1b","TARGET@v11_hash=218c90a1920c10390be2408439f5191f","TARGET@v11_hash=754922e16fd2edb654ed183d0b9ffc4e","TARGET@v11_hash=d6e43cdf0cbce99338da86c88c7a9b38","TARGET@v11_hash=7dc9dce1405849bf477070cc9de38aed","TARGET@v11_hash=cc9ef9cfbfe34cf5230700b7d8fcc951","TARGET@v11_hash=a771b9f79fd75fad08749ef861b3bddf","TARGET@v11_hash=bca7282312c3cbd6420517c0b06b2299","TARGET@v11_hash=2044c736a22918f3a12ecb44d3e0c006","TARGET@v11_hash=e04e9400c66a280cff3815703b38f084","TARGET@v11_hash=c1be6d82376acb043052cbc000a547ae","TARGET@v11_hash=4cabd0c48a00d7a4ed741cb699f1cc8e","TARGET@v11_hash=ebe021611ae425ec05c93c24ce7a6607","TARGET@v11_hash=5815137460cbcfbe6d2f7a5b54b4ca09","TARGET@v11_hash=525a617ce5cf51a2c10a01508fbe4adf","TARGET@v11_hash=5319ba36858c0aa8d085cf090833a92c","TARGET@v11_hash=0b58e1096693d1b2f665847f3d6ed644","TARGET@v11_hash=0a63255185fd1fe5f5bce3e3d92075cc","TARGET@v11_hash=7aa8351d9b24919942e9946725aa9a4e","TARGET@v11_hash=76c81320e671cd52e5aa73c6af313230","TARGET@v11_hash=7c10b1b705eef3cc27b008fa5df200ca","TARGET@v11_hash=046b943ca2c386252fefb70091df62cb","TARGET@v11_hash=d014b307105d5d21e3d383fba60d7745","TARGET@v11_hash=98c62b097118c3a71fbcc1ac381d0554","TARGET@v11_hash=110600b415fe8fc7dd4ca8c0f3c4e215","TARGET@v11_hash=35adaf1be68b319de0505ded2815bc62","TARGET@v11_hash=ff36872ab1512227359a12a6bdfb005a","TARGET@v11_hash=f3bbe05679242975dafb6d8e69ca7557","TARGET@v11_hash=1140ca82d597cd38dc60054d3a158f68","TARGET@v11_hash=dbb0219d17436c670986b94b7945fa23","TARGET@v11_hash=55e76bc78bd49d51860d689a4f5e9c62","TARGET@v11_hash=cf214d336cf673b4a25ba8952e58ad2f","TARGET@v11_hash=25067fd2852a0fd76a8f9f479b2d4630","TARGET@v11_hash=d560c2e797b744ca35425688afeb9717","TARGET@v11_hash=3af0402199bd31e72f681872a46f8b81","TARGET@v11_hash=4b924fd5a51dd455efd4e7fe9f2f3ae9","TARGET@v11_hash=d1efbd94e043870162f1a431e0d81426","TARGET@v11_hash=a067526aa1156f18ea027d11109a29d4","TARGET@v11_hash=cccb0eb2cb0393abaa5f1f05d755160e","TARGET@v11_hash=eb71d09d11dfb3cc8ccae98e4e65ea84","TARGET@v11_hash=5248d9ba098cf8d77d31b3cf7f8b5a69","TARGET@v11_hash=46e4fdabe3969081354e9e5e60b64b4b","TARGET@v11_hash=bec8a7e752ab7d5daa41943969c542ce","TARGET@v11_hash=d204a2d23a6add831c951cc6c525c071","TARGET@v11_hash=aa56745ff0f6a68146d6117b991ff12e","TARGET@v11_hash=8078b8651d861575cd929af1542b7261","TARGET@v11_hash=a1626071b7e4461b7a78f87d063ecc17","TARGET@v11_hash=5b871dc0aeb742795842305fce24cf10","TARGET@v11_hash=1e4d2a3be90cd0a545f0c49cf9dce02c","TARGET@v11_hash=d67c7fe50f94aa30e853cef078cfecc9","TARGET@v11_hash=d5f04c64bab0734f1ab47fd9bcf15bc4","TARGET@v11_hash=6fb30a1c5b3e857d561640581873eb18","TARGET@v11_hash=ab724a4a507acc9a546958f9aaaa80fd","TARGET@v11_hash=14b6e6d9e2eda3680623b9cb266fb1b3","TARGET@v11_hash=4cc1f6e212912d53710de3aa08e4aa3c","TARGET@v11_hash=0b5c502676ea77f04ab6ea7a2e8956d9","TARGET@v11_hash=c832b6797055a73fc2a937f2ace5a80c","TARGET@v11_hash=558846d52469eb6457f7fa805fbcac19","TARGET@v11_hash=c7e279690d57f8e9617670c2dd8215da","TARGET@v11_hash=1f36083119fed8be641437f19af66acc","TARGET@v11_hash=6a019aebe92f33ef6d2d1a27354a274c","TARGET@v11_hash=61f30aa6dfaff3adeef504cd04583578","TARGET@v11_hash=4d623afd122ecb9d6d730809785df91d","TARGET@v11_hash=ec851e59095ec5bf084fefcd5588ef75","TARGET@v11_hash=211721151cd848f04aa31d195dc75f4a","TARGET@v11_hash=e48e30a0663eeb6ce1b0165ff162002a","TARGET@v11_hash=c5e74116acf786c1a12c0ae36c3b648b","TARGET@v11_hash=cc4efb059f8f4ef111f94e7221f71ad1","TARGET@v11_hash=8d133a19301914cd8e6a4b60878e87a2","TARGET@v11_hash=c57ff86689b99a8853e2ae591b9ac8c6","TARGET@v11_hash=1a4fe29d3cb9f9220793e4797839ee1f","TARGET@v11_hash=b77db6430f49f02a32943c46bd03734b","TARGET@v11_hash=3a7fbdb39c618b52ee7b40baa1e884b1","TARGET@v11_hash=dfe05d0a1a29529d21d126a4eec3834c","TARGET@v11_hash=b02384d9efc0e497521a0ba9096939bd","TARGET@v11_hash=376189dccaae382545d5e718c59412f6","TARGET@v11_hash=7b3186407410bb111b40b5143ff956ed","TARGET@v11_hash=fbb75b67977f7fd3136c2c9e82b06c66","TARGET@v11_hash=d360bbd5e759c5936a6004b5766066e3","TARGET@v11_hash=091b7b21a80cde9e2510d4e82d4cbd78","TARGET@v11_hash=1abbdfc13b53a75a94289fd5712275b6","TARGET@v11_hash=c369ca2358afe46d56e9c4f067675637","TARGET@v11_hash=a6be57b3049abd7b9f2b4e20f4ba91af"]} \ No newline at end of file diff --git a/mih_ui/android/build/ios/XCBuildData/PIFCache/target/TARGET@v11_hash=046b943ca2c386252fefb70091df62cb-json b/mih_ui/android/build/ios/XCBuildData/PIFCache/target/TARGET@v11_hash=046b943ca2c386252fefb70091df62cb-json new file mode 100644 index 00000000..3593aa04 --- /dev/null +++ b/mih_ui/android/build/ios/XCBuildData/PIFCache/target/TARGET@v11_hash=046b943ca2c386252fefb70091df62cb-json @@ -0,0 +1 @@ +{"buildConfigurations":[{"baseConfigurationFileReference":"bfdfe7dc352907fc980b868725387e98cb16e8074f48ba05a2dfeb081f5bd1cb","buildSettings":{"CODE_SIGNING_ALLOWED":"NO","CODE_SIGNING_IDENTITY":"-","CODE_SIGNING_REQUIRED":"NO","CONFIGURATION_BUILD_DIR":"$(BUILD_DIR)/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME)/FirebaseCore","EXPANDED_CODE_SIGN_IDENTITY":"-","IBSC_MODULE":"FirebaseCore","INFOPLIST_FILE":"Target Support Files/FirebaseCore/ResourceBundle-FirebaseCore_Privacy-FirebaseCore-Info.plist","IPHONEOS_DEPLOYMENT_TARGET":"15.0","ONLY_ACTIVE_ARCH":"NO","PRODUCT_NAME":"FirebaseCore_Privacy","SDKROOT":"iphoneos","SKIP_INSTALL":"YES","TARGETED_DEVICE_FAMILY":"1,2","WRAPPER_EXTENSION":"bundle"},"guid":"bfdfe7dc352907fc980b868725387e9853c6ca3436a16d495d26d90c62dc041f","name":"Debug"},{"baseConfigurationFileReference":"bfdfe7dc352907fc980b868725387e9823bbf62c346537eed6e067e233fe0af3","buildSettings":{"CLANG_ENABLE_OBJC_WEAK":"NO","CODE_SIGNING_ALLOWED":"NO","CODE_SIGNING_IDENTITY":"-","CODE_SIGNING_REQUIRED":"NO","CONFIGURATION_BUILD_DIR":"$(BUILD_DIR)/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME)/FirebaseCore","EXPANDED_CODE_SIGN_IDENTITY":"-","IBSC_MODULE":"FirebaseCore","INFOPLIST_FILE":"Target Support Files/FirebaseCore/ResourceBundle-FirebaseCore_Privacy-FirebaseCore-Info.plist","IPHONEOS_DEPLOYMENT_TARGET":"15.0","PRODUCT_NAME":"FirebaseCore_Privacy","SDKROOT":"iphoneos","SKIP_INSTALL":"YES","TARGETED_DEVICE_FAMILY":"1,2","VALIDATE_PRODUCT":"YES","WRAPPER_EXTENSION":"bundle"},"guid":"bfdfe7dc352907fc980b868725387e9804059b68be909cf4b5d26662e7aca4cc","name":"Profile"},{"baseConfigurationFileReference":"bfdfe7dc352907fc980b868725387e9823bbf62c346537eed6e067e233fe0af3","buildSettings":{"CODE_SIGNING_ALLOWED":"NO","CODE_SIGNING_IDENTITY":"-","CODE_SIGNING_REQUIRED":"NO","CONFIGURATION_BUILD_DIR":"$(BUILD_DIR)/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME)/FirebaseCore","EXPANDED_CODE_SIGN_IDENTITY":"-","IBSC_MODULE":"FirebaseCore","INFOPLIST_FILE":"Target Support Files/FirebaseCore/ResourceBundle-FirebaseCore_Privacy-FirebaseCore-Info.plist","IPHONEOS_DEPLOYMENT_TARGET":"15.0","PRODUCT_NAME":"FirebaseCore_Privacy","SDKROOT":"iphoneos","SKIP_INSTALL":"YES","TARGETED_DEVICE_FAMILY":"1,2","WRAPPER_EXTENSION":"bundle"},"guid":"bfdfe7dc352907fc980b868725387e98582157cc97f19ee6a02f760e6311d2a5","name":"Release"}],"buildPhases":[{"buildFiles":[],"guid":"bfdfe7dc352907fc980b868725387e98703ab6858e32f59e72e5cb10e19e6ee2","type":"com.apple.buildphase.sources"},{"buildFiles":[],"guid":"bfdfe7dc352907fc980b868725387e984d26d05f34861940fe601d8a1283f8c4","type":"com.apple.buildphase.frameworks"},{"buildFiles":[{"fileReference":"bfdfe7dc352907fc980b868725387e98d58b29168477f224a21c3f9676f8d359","guid":"bfdfe7dc352907fc980b868725387e98be033315ff722ee1672602020959c071"}],"guid":"bfdfe7dc352907fc980b868725387e9803f5a34bdf64a4474219ec56a84dc5d4","type":"com.apple.buildphase.resources"}],"buildRules":[],"dependencies":[],"guid":"bfdfe7dc352907fc980b868725387e98678fb6500ea02c78520816441717cc14","name":"FirebaseCore-FirebaseCore_Privacy","productReference":{"guid":"bfdfe7dc352907fc980b868725387e981126092e527a43878ba047c0d6b5be37","name":"FirebaseCore_Privacy.bundle","type":"product"},"productTypeIdentifier":"com.apple.product-type.bundle","provisioningSourceData":[{"bundleIdentifierFromInfoPlist":"${PRODUCT_BUNDLE_IDENTIFIER}","configurationName":"Debug","provisioningStyle":0},{"bundleIdentifierFromInfoPlist":"${PRODUCT_BUNDLE_IDENTIFIER}","configurationName":"Profile","provisioningStyle":0},{"bundleIdentifierFromInfoPlist":"${PRODUCT_BUNDLE_IDENTIFIER}","configurationName":"Release","provisioningStyle":0}],"type":"standard"} \ No newline at end of file diff --git a/mih_ui/android/build/ios/XCBuildData/PIFCache/target/TARGET@v11_hash=091b7b21a80cde9e2510d4e82d4cbd78-json b/mih_ui/android/build/ios/XCBuildData/PIFCache/target/TARGET@v11_hash=091b7b21a80cde9e2510d4e82d4cbd78-json new file mode 100644 index 00000000..ad32320e --- /dev/null +++ b/mih_ui/android/build/ios/XCBuildData/PIFCache/target/TARGET@v11_hash=091b7b21a80cde9e2510d4e82d4cbd78-json @@ -0,0 +1 @@ +{"buildConfigurations":[{"baseConfigurationFileReference":"bfdfe7dc352907fc980b868725387e986b056fb7813eab8b622dbbdb4b6201da","buildSettings":{"CLANG_ENABLE_OBJC_WEAK":"NO","CLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER":"NO","CODE_SIGN_IDENTITY[sdk=appletvos*]":"","CODE_SIGN_IDENTITY[sdk=iphoneos*]":"","CODE_SIGN_IDENTITY[sdk=watchos*]":"","CURRENT_PROJECT_VERSION":"1","DYLIB_COMPATIBILITY_VERSION":"1","DYLIB_CURRENT_VERSION":"1","DYLIB_INSTALL_NAME_BASE":"@rpath","ENABLE_BITCODE":"NO","ENABLE_MODULE_VERIFIER":"NO","ENABLE_USER_SCRIPT_SANDBOXING":"NO","EXCLUDED_ARCHS[sdk=iphoneos*]":"$(inherited) armv7","EXCLUDED_ARCHS[sdk=iphonesimulator*]":"$(inherited) i386","FRAMEWORK_SEARCH_PATHS[sdk=iphoneos*]":"\"/Users/yaso_meth/Git/flutter/bin/cache/artifacts/engine/ios/Flutter.xcframework/ios-arm64\" $(inherited)","FRAMEWORK_SEARCH_PATHS[sdk=iphonesimulator*]":"\"/Users/yaso_meth/Git/flutter/bin/cache/artifacts/engine/ios/Flutter.xcframework/ios-arm64_x86_64-simulator\" $(inherited)","GCC_PREFIX_HEADER":"Target Support Files/url_launcher_ios/url_launcher_ios-prefix.pch","GENERATE_INFOPLIST_FILE":"NO","INFOPLIST_FILE":"Target Support Files/url_launcher_ios/url_launcher_ios-Info.plist","INSTALL_PATH":"$(LOCAL_LIBRARY_DIR)/Frameworks","MODULEMAP_FILE":"Target Support Files/url_launcher_ios/url_launcher_ios.modulemap","ONLY_ACTIVE_ARCH":"NO","OTHER_LDFLAGS":"$(inherited) -framework Flutter","PRODUCT_MODULE_NAME":"url_launcher_ios","PRODUCT_NAME":"url_launcher_ios","SDKROOT":"iphoneos","SKIP_INSTALL":"YES","SWIFT_ACTIVE_COMPILATION_CONDITIONS":"$(inherited) ","SWIFT_INSTALL_OBJC_HEADER":"YES","SWIFT_VERSION":"5.0","TARGETED_DEVICE_FAMILY":"1,2","VALID_ARCHS[sdk=iphonesimulator*]":"$(ARCHS_STANDARD)","VERSIONING_SYSTEM":"apple-generic","VERSION_INFO_PREFIX":""},"guid":"bfdfe7dc352907fc980b868725387e983bf7c387e6b30e7532f6cb4e6e71951b","name":"Debug"},{"baseConfigurationFileReference":"bfdfe7dc352907fc980b868725387e982e8b062cb2e7d8455d114188a1500a94","buildSettings":{"CLANG_ENABLE_OBJC_WEAK":"NO","CLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER":"NO","CODE_SIGN_IDENTITY[sdk=appletvos*]":"","CODE_SIGN_IDENTITY[sdk=iphoneos*]":"","CODE_SIGN_IDENTITY[sdk=watchos*]":"","CURRENT_PROJECT_VERSION":"1","DYLIB_COMPATIBILITY_VERSION":"1","DYLIB_CURRENT_VERSION":"1","DYLIB_INSTALL_NAME_BASE":"@rpath","ENABLE_BITCODE":"NO","ENABLE_MODULE_VERIFIER":"NO","ENABLE_USER_SCRIPT_SANDBOXING":"NO","EXCLUDED_ARCHS[sdk=iphoneos*]":"$(inherited) armv7","EXCLUDED_ARCHS[sdk=iphonesimulator*]":"$(inherited) i386","FRAMEWORK_SEARCH_PATHS[sdk=iphoneos*]":"\"/Users/yaso_meth/Git/flutter/bin/cache/artifacts/engine/ios-release/Flutter.xcframework/ios-arm64\" $(inherited)","FRAMEWORK_SEARCH_PATHS[sdk=iphonesimulator*]":"\"/Users/yaso_meth/Git/flutter/bin/cache/artifacts/engine/ios-release/Flutter.xcframework/ios-arm64_x86_64-simulator\" $(inherited)","GCC_PREFIX_HEADER":"Target Support Files/url_launcher_ios/url_launcher_ios-prefix.pch","GENERATE_INFOPLIST_FILE":"NO","INFOPLIST_FILE":"Target Support Files/url_launcher_ios/url_launcher_ios-Info.plist","INSTALL_PATH":"$(LOCAL_LIBRARY_DIR)/Frameworks","MODULEMAP_FILE":"Target Support Files/url_launcher_ios/url_launcher_ios.modulemap","OTHER_LDFLAGS":"$(inherited) -framework Flutter","PRODUCT_MODULE_NAME":"url_launcher_ios","PRODUCT_NAME":"url_launcher_ios","SDKROOT":"iphoneos","SKIP_INSTALL":"YES","SWIFT_ACTIVE_COMPILATION_CONDITIONS":"$(inherited) ","SWIFT_INSTALL_OBJC_HEADER":"YES","SWIFT_VERSION":"5.0","TARGETED_DEVICE_FAMILY":"1,2","VALIDATE_PRODUCT":"YES","VALID_ARCHS[sdk=iphonesimulator*]":"$(ARCHS_STANDARD)","VERSIONING_SYSTEM":"apple-generic","VERSION_INFO_PREFIX":""},"guid":"bfdfe7dc352907fc980b868725387e9852e5f92b339577bcf682a1eb4792c8f4","name":"Profile"},{"baseConfigurationFileReference":"bfdfe7dc352907fc980b868725387e982e8b062cb2e7d8455d114188a1500a94","buildSettings":{"CLANG_ENABLE_OBJC_WEAK":"NO","CLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER":"NO","CODE_SIGN_IDENTITY[sdk=appletvos*]":"","CODE_SIGN_IDENTITY[sdk=iphoneos*]":"","CODE_SIGN_IDENTITY[sdk=watchos*]":"","CURRENT_PROJECT_VERSION":"1","DYLIB_COMPATIBILITY_VERSION":"1","DYLIB_CURRENT_VERSION":"1","DYLIB_INSTALL_NAME_BASE":"@rpath","ENABLE_BITCODE":"NO","ENABLE_MODULE_VERIFIER":"NO","ENABLE_USER_SCRIPT_SANDBOXING":"NO","EXCLUDED_ARCHS[sdk=iphoneos*]":"$(inherited) armv7","EXCLUDED_ARCHS[sdk=iphonesimulator*]":"$(inherited) i386","FRAMEWORK_SEARCH_PATHS[sdk=iphoneos*]":"\"/Users/yaso_meth/Git/flutter/bin/cache/artifacts/engine/ios-release/Flutter.xcframework/ios-arm64\" $(inherited)","FRAMEWORK_SEARCH_PATHS[sdk=iphonesimulator*]":"\"/Users/yaso_meth/Git/flutter/bin/cache/artifacts/engine/ios-release/Flutter.xcframework/ios-arm64_x86_64-simulator\" $(inherited)","GCC_PREFIX_HEADER":"Target Support Files/url_launcher_ios/url_launcher_ios-prefix.pch","GENERATE_INFOPLIST_FILE":"NO","INFOPLIST_FILE":"Target Support Files/url_launcher_ios/url_launcher_ios-Info.plist","INSTALL_PATH":"$(LOCAL_LIBRARY_DIR)/Frameworks","MODULEMAP_FILE":"Target Support Files/url_launcher_ios/url_launcher_ios.modulemap","OTHER_LDFLAGS":"$(inherited) -framework Flutter","PRODUCT_MODULE_NAME":"url_launcher_ios","PRODUCT_NAME":"url_launcher_ios","SDKROOT":"iphoneos","SKIP_INSTALL":"YES","SWIFT_ACTIVE_COMPILATION_CONDITIONS":"$(inherited) ","SWIFT_INSTALL_OBJC_HEADER":"YES","SWIFT_VERSION":"5.0","TARGETED_DEVICE_FAMILY":"1,2","VALIDATE_PRODUCT":"YES","VALID_ARCHS[sdk=iphonesimulator*]":"$(ARCHS_STANDARD)","VERSIONING_SYSTEM":"apple-generic","VERSION_INFO_PREFIX":""},"guid":"bfdfe7dc352907fc980b868725387e98606903bd7be7dc87a070537db999d889","name":"Release"}],"buildPhases":[{"buildFiles":[{"fileReference":"bfdfe7dc352907fc980b868725387e9806f3adb2e55f13bf793c40eca5d3b6b1","guid":"bfdfe7dc352907fc980b868725387e98488b1aae650ee0880687b46866424107","headerVisibility":"public"}],"guid":"bfdfe7dc352907fc980b868725387e9803da34d77efef8ef3ce2c8ebbae5bdbc","type":"com.apple.buildphase.headers"},{"buildFiles":[{"fileReference":"bfdfe7dc352907fc980b868725387e988b923c7f69904073f11cfb33f486be4e","guid":"bfdfe7dc352907fc980b868725387e980199d549f7afb7c9e60eccd688e3ea3b"},{"fileReference":"bfdfe7dc352907fc980b868725387e981f993b8fa34154c706d827a98b25e1b7","guid":"bfdfe7dc352907fc980b868725387e98c0092cc84a327ca1f52286083ca2155f"},{"fileReference":"bfdfe7dc352907fc980b868725387e98dfc96d715d809f6ba8cb9e157b3e9dea","guid":"bfdfe7dc352907fc980b868725387e9888b1e74e60918c1dda1636aa70ed211a"},{"fileReference":"bfdfe7dc352907fc980b868725387e984136e6ab77e9cac49cc5bb8eca9cdee4","guid":"bfdfe7dc352907fc980b868725387e982f495a0a8d9589923d69caf11527df8e"},{"fileReference":"bfdfe7dc352907fc980b868725387e9873c2ef5634c43bf05dc1b4493b3cc0b5","guid":"bfdfe7dc352907fc980b868725387e98146087d3efb3c217078c8450b09168b4"}],"guid":"bfdfe7dc352907fc980b868725387e98fa96dbb049cf26a8a5faf87ef8982665","type":"com.apple.buildphase.sources"},{"buildFiles":[{"fileReference":"bfdfe7dc352907fc980b868725387e98b14af7c49882340ad551cb13b0a1e06d","guid":"bfdfe7dc352907fc980b868725387e982f8b7ae2e7caa8ede8091d9bb363b0d1"}],"guid":"bfdfe7dc352907fc980b868725387e988f4e5a15bd2f3cf26d08bb8eafccb083","type":"com.apple.buildphase.frameworks"},{"buildFiles":[{"guid":"bfdfe7dc352907fc980b868725387e9829873fc0097fc1cd118d2ea1c7a9e44f","targetReference":"bfdfe7dc352907fc980b868725387e9891b3b8cc56823cdea4b418e009a423b2"}],"guid":"bfdfe7dc352907fc980b868725387e98e31bb378ac96256438f4a2e26e722c1b","type":"com.apple.buildphase.resources"}],"buildRules":[],"dependencies":[{"guid":"bfdfe7dc352907fc980b868725387e989da425bb6d6d5d8dbb95e4afffb82217","name":"Flutter"},{"guid":"bfdfe7dc352907fc980b868725387e9891b3b8cc56823cdea4b418e009a423b2","name":"url_launcher_ios-url_launcher_ios_privacy"}],"guid":"bfdfe7dc352907fc980b868725387e98903e66fa03d6d27edaa18126a82c20fd","name":"url_launcher_ios","predominantSourceCodeLanguage":"Xcode.SourceCodeLanguage.Swift","productReference":{"guid":"bfdfe7dc352907fc980b868725387e98f7a21f0cd31eecef97e8eaf4a819dde1","name":"url_launcher_ios.framework","type":"product"},"productTypeIdentifier":"com.apple.product-type.framework","provisioningSourceData":[{"bundleIdentifierFromInfoPlist":"${PRODUCT_BUNDLE_IDENTIFIER}","configurationName":"Debug","provisioningStyle":1},{"bundleIdentifierFromInfoPlist":"${PRODUCT_BUNDLE_IDENTIFIER}","configurationName":"Profile","provisioningStyle":1},{"bundleIdentifierFromInfoPlist":"${PRODUCT_BUNDLE_IDENTIFIER}","configurationName":"Release","provisioningStyle":1}],"type":"standard"} \ No newline at end of file diff --git a/mih_ui/android/build/ios/XCBuildData/PIFCache/target/TARGET@v11_hash=0a63255185fd1fe5f5bce3e3d92075cc-json b/mih_ui/android/build/ios/XCBuildData/PIFCache/target/TARGET@v11_hash=0a63255185fd1fe5f5bce3e3d92075cc-json new file mode 100644 index 00000000..d1417ba5 --- /dev/null +++ b/mih_ui/android/build/ios/XCBuildData/PIFCache/target/TARGET@v11_hash=0a63255185fd1fe5f5bce3e3d92075cc-json @@ -0,0 +1 @@ +{"buildConfigurations":[{"baseConfigurationFileReference":"bfdfe7dc352907fc980b868725387e98bbdee8c1686e5d6c3f4956eedcdb3dac","buildSettings":{"CLANG_ENABLE_OBJC_WEAK":"NO","CODE_SIGN_IDENTITY[sdk=appletvos*]":"","CODE_SIGN_IDENTITY[sdk=iphoneos*]":"","CODE_SIGN_IDENTITY[sdk=watchos*]":"","CURRENT_PROJECT_VERSION":"1","DEFINES_MODULE":"YES","DYLIB_COMPATIBILITY_VERSION":"1","DYLIB_CURRENT_VERSION":"1","DYLIB_INSTALL_NAME_BASE":"@rpath","ENABLE_MODULE_VERIFIER":"NO","ENABLE_USER_SCRIPT_SANDBOXING":"NO","GENERATE_INFOPLIST_FILE":"NO","INFOPLIST_FILE":"Target Support Files/FirebaseAuth/FirebaseAuth-Info.plist","INSTALL_PATH":"$(LOCAL_LIBRARY_DIR)/Frameworks","IPHONEOS_DEPLOYMENT_TARGET":"15.0","LD_RUNPATH_SEARCH_PATHS":"$(inherited) @executable_path/Frameworks @loader_path/Frameworks","MODULEMAP_FILE":"Target Support Files/FirebaseAuth/FirebaseAuth.modulemap","ONLY_ACTIVE_ARCH":"NO","PRODUCT_MODULE_NAME":"FirebaseAuth","PRODUCT_NAME":"FirebaseAuth","SDKROOT":"iphoneos","SKIP_INSTALL":"YES","SWIFT_ACTIVE_COMPILATION_CONDITIONS":"$(inherited) ","SWIFT_INSTALL_OBJC_HEADER":"YES","SWIFT_VERSION":"5.9","TARGETED_DEVICE_FAMILY":"1,2","VERSIONING_SYSTEM":"apple-generic","VERSION_INFO_PREFIX":""},"guid":"bfdfe7dc352907fc980b868725387e987caccb104bbe964690ab8e0e5f1c5343","name":"Debug"},{"baseConfigurationFileReference":"bfdfe7dc352907fc980b868725387e9824122a566c18888ab83e78b3078e6f80","buildSettings":{"CLANG_ENABLE_OBJC_WEAK":"NO","CODE_SIGN_IDENTITY[sdk=appletvos*]":"","CODE_SIGN_IDENTITY[sdk=iphoneos*]":"","CODE_SIGN_IDENTITY[sdk=watchos*]":"","CURRENT_PROJECT_VERSION":"1","DEFINES_MODULE":"YES","DYLIB_COMPATIBILITY_VERSION":"1","DYLIB_CURRENT_VERSION":"1","DYLIB_INSTALL_NAME_BASE":"@rpath","ENABLE_MODULE_VERIFIER":"NO","ENABLE_USER_SCRIPT_SANDBOXING":"NO","GENERATE_INFOPLIST_FILE":"NO","INFOPLIST_FILE":"Target Support Files/FirebaseAuth/FirebaseAuth-Info.plist","INSTALL_PATH":"$(LOCAL_LIBRARY_DIR)/Frameworks","IPHONEOS_DEPLOYMENT_TARGET":"15.0","LD_RUNPATH_SEARCH_PATHS":"$(inherited) @executable_path/Frameworks @loader_path/Frameworks","MODULEMAP_FILE":"Target Support Files/FirebaseAuth/FirebaseAuth.modulemap","PRODUCT_MODULE_NAME":"FirebaseAuth","PRODUCT_NAME":"FirebaseAuth","SDKROOT":"iphoneos","SKIP_INSTALL":"YES","SWIFT_ACTIVE_COMPILATION_CONDITIONS":"$(inherited) ","SWIFT_INSTALL_OBJC_HEADER":"YES","SWIFT_VERSION":"5.9","TARGETED_DEVICE_FAMILY":"1,2","VALIDATE_PRODUCT":"YES","VERSIONING_SYSTEM":"apple-generic","VERSION_INFO_PREFIX":""},"guid":"bfdfe7dc352907fc980b868725387e982fdc9bbe7faffc4d067b1a2e07cc439a","name":"Profile"},{"baseConfigurationFileReference":"bfdfe7dc352907fc980b868725387e9824122a566c18888ab83e78b3078e6f80","buildSettings":{"CLANG_ENABLE_OBJC_WEAK":"NO","CODE_SIGN_IDENTITY[sdk=appletvos*]":"","CODE_SIGN_IDENTITY[sdk=iphoneos*]":"","CODE_SIGN_IDENTITY[sdk=watchos*]":"","CURRENT_PROJECT_VERSION":"1","DEFINES_MODULE":"YES","DYLIB_COMPATIBILITY_VERSION":"1","DYLIB_CURRENT_VERSION":"1","DYLIB_INSTALL_NAME_BASE":"@rpath","ENABLE_MODULE_VERIFIER":"NO","ENABLE_USER_SCRIPT_SANDBOXING":"NO","GENERATE_INFOPLIST_FILE":"NO","INFOPLIST_FILE":"Target Support Files/FirebaseAuth/FirebaseAuth-Info.plist","INSTALL_PATH":"$(LOCAL_LIBRARY_DIR)/Frameworks","IPHONEOS_DEPLOYMENT_TARGET":"15.0","LD_RUNPATH_SEARCH_PATHS":"$(inherited) @executable_path/Frameworks @loader_path/Frameworks","MODULEMAP_FILE":"Target Support Files/FirebaseAuth/FirebaseAuth.modulemap","PRODUCT_MODULE_NAME":"FirebaseAuth","PRODUCT_NAME":"FirebaseAuth","SDKROOT":"iphoneos","SKIP_INSTALL":"YES","SWIFT_ACTIVE_COMPILATION_CONDITIONS":"$(inherited) ","SWIFT_INSTALL_OBJC_HEADER":"YES","SWIFT_VERSION":"5.9","TARGETED_DEVICE_FAMILY":"1,2","VALIDATE_PRODUCT":"YES","VERSIONING_SYSTEM":"apple-generic","VERSION_INFO_PREFIX":""},"guid":"bfdfe7dc352907fc980b868725387e98c505d05a69d89c655a0f1147dc474bb8","name":"Release"}],"buildPhases":[{"buildFiles":[{"fileReference":"bfdfe7dc352907fc980b868725387e98956799cfa2b05e7c9a8e6de92669e1d1","guid":"bfdfe7dc352907fc980b868725387e9817c3bc70e081e5ec6276565281717acc","headerVisibility":"public"},{"fileReference":"bfdfe7dc352907fc980b868725387e98e29f01ee622b04136cc93b8ed10b0042","guid":"bfdfe7dc352907fc980b868725387e98c44b2c01abc853ff34bbbb8fc91d6791","headerVisibility":"public"},{"fileReference":"bfdfe7dc352907fc980b868725387e986e7ac5576571d35a0e6e17df8bef87c2","guid":"bfdfe7dc352907fc980b868725387e9842661f22680c9f1263e79b6bbedfaccd","headerVisibility":"public"},{"fileReference":"bfdfe7dc352907fc980b868725387e980cfa3bf3b7f73c30be0258c89af531d7","guid":"bfdfe7dc352907fc980b868725387e981b28424805e56949e3655fdb82a0de2f","headerVisibility":"public"},{"fileReference":"bfdfe7dc352907fc980b868725387e98302380597dd450a0363d088676edafa9","guid":"bfdfe7dc352907fc980b868725387e980d39f565349f833072c1a6591ec35993","headerVisibility":"public"},{"fileReference":"bfdfe7dc352907fc980b868725387e98db7c3d4ccbf8dc9059f98c1141a57e3b","guid":"bfdfe7dc352907fc980b868725387e987c42db9c96226a0452dd9d80946450ef","headerVisibility":"public"},{"fileReference":"bfdfe7dc352907fc980b868725387e9838bf347b940c7fcc4e312aca96b302b0","guid":"bfdfe7dc352907fc980b868725387e9801fe571211a9cabd3bede94b0c0fc944","headerVisibility":"public"},{"fileReference":"bfdfe7dc352907fc980b868725387e9868ce7c295a5827b53fa0ecbe02749a98","guid":"bfdfe7dc352907fc980b868725387e98c41463a4ca1694441164da665d4b554b","headerVisibility":"public"},{"fileReference":"bfdfe7dc352907fc980b868725387e986607cf0b965cb1545a435655d39e9385","guid":"bfdfe7dc352907fc980b868725387e98edefd5b58c45704619147e682e6c90a8","headerVisibility":"public"},{"fileReference":"bfdfe7dc352907fc980b868725387e989fe929ecdf26ddf9920484acf1cab280","guid":"bfdfe7dc352907fc980b868725387e9868ff68e98182a13423fae838098eb353","headerVisibility":"public"},{"fileReference":"bfdfe7dc352907fc980b868725387e98e5f11c0f670144e5c3d5eba28a2e0bc6","guid":"bfdfe7dc352907fc980b868725387e984545a36096e8fa496560ec2e969df1e2","headerVisibility":"public"},{"fileReference":"bfdfe7dc352907fc980b868725387e98b8f740c8e02b1fc2f3f9baf571e56fe2","guid":"bfdfe7dc352907fc980b868725387e982cee5fec0eb0252530315ea64386a065","headerVisibility":"public"},{"fileReference":"bfdfe7dc352907fc980b868725387e9883a078e0ca1c33c40bd03e510742f7e5","guid":"bfdfe7dc352907fc980b868725387e9866559041b1c3e70371e8e64815a59830","headerVisibility":"public"},{"fileReference":"bfdfe7dc352907fc980b868725387e98e10be73265b6d6dfa47fc284a8ef68ff","guid":"bfdfe7dc352907fc980b868725387e98a65aa36a9db621cce28ef6868deeb51f","headerVisibility":"public"}],"guid":"bfdfe7dc352907fc980b868725387e9824d89d6decddd64cdca319e249c8d2c0","type":"com.apple.buildphase.headers"},{"buildFiles":[{"fileReference":"bfdfe7dc352907fc980b868725387e986ed0fe803e5e9f958a7a9c4d9341682d","guid":"bfdfe7dc352907fc980b868725387e9845fe1dcb670cd569b688b5db25faccea"},{"fileReference":"bfdfe7dc352907fc980b868725387e98df840a4cc19a73fbfc9de23d95ea4708","guid":"bfdfe7dc352907fc980b868725387e9881ce2076d22304e0f5350bca852d323c"},{"fileReference":"bfdfe7dc352907fc980b868725387e9812e153f43d8c8c8f356f5148e516cca0","guid":"bfdfe7dc352907fc980b868725387e9817ec41ba2276e0af93836778015ad437"},{"fileReference":"bfdfe7dc352907fc980b868725387e98ee0255ea1e007a5b0217b62542c6b70d","guid":"bfdfe7dc352907fc980b868725387e983ccc04f125c1991425ee2e1d144209c2"},{"fileReference":"bfdfe7dc352907fc980b868725387e98dbe0c047f7ef2bbaa652ae3dc458a985","guid":"bfdfe7dc352907fc980b868725387e98b76ba804eeea99a57ab49b7f86fbf1c5"},{"fileReference":"bfdfe7dc352907fc980b868725387e9841946e8c5c51d7ff21c3c09451da596d","guid":"bfdfe7dc352907fc980b868725387e980be46328ee4a69080b0a769bdcc6f9fb"},{"fileReference":"bfdfe7dc352907fc980b868725387e98245f1ef0e5ded755952473e4d2276030","guid":"bfdfe7dc352907fc980b868725387e98f2a1a44676b214b0563a425b4b694964"},{"fileReference":"bfdfe7dc352907fc980b868725387e9895a020d668ee677ee2edc02b024aa625","guid":"bfdfe7dc352907fc980b868725387e9817bec36c2d0730388f65f8b9ef3bf497"},{"fileReference":"bfdfe7dc352907fc980b868725387e98f171b0d6e6d7265241cf0eb8f4f3f584","guid":"bfdfe7dc352907fc980b868725387e989340b668922630a85e0b6cacabe4ac11"},{"fileReference":"bfdfe7dc352907fc980b868725387e98341d38a094f897cf5dd0a4918c8865f2","guid":"bfdfe7dc352907fc980b868725387e98bce252d11de26dee71f19c88dd9232c7"},{"fileReference":"bfdfe7dc352907fc980b868725387e98f415edf05761e36c2f309be524c1706d","guid":"bfdfe7dc352907fc980b868725387e98420daf1bf579fae112748c4d41948639"},{"fileReference":"bfdfe7dc352907fc980b868725387e980f6007ab2b4227db8a90954c2fe0bd54","guid":"bfdfe7dc352907fc980b868725387e98c3b390eb6a4ce356a9d0879dc791a46d"},{"fileReference":"bfdfe7dc352907fc980b868725387e980771b86e7c5c94837366efba22ffc771","guid":"bfdfe7dc352907fc980b868725387e9895a317bfc268a063f97bdb9f91b5e19b"},{"fileReference":"bfdfe7dc352907fc980b868725387e985a832d2cff79b53693ec89e1007060f4","guid":"bfdfe7dc352907fc980b868725387e984746eebd802da19934d8739a1666dbc9"},{"fileReference":"bfdfe7dc352907fc980b868725387e98929647b475e2c223c9e642a49d717b03","guid":"bfdfe7dc352907fc980b868725387e98e147073a51831d4bf07d22bab9543b87"},{"fileReference":"bfdfe7dc352907fc980b868725387e981f237ef3f88f70d2cea687a28fb706a9","guid":"bfdfe7dc352907fc980b868725387e9845caf18783937c0fbf61cebefa37cbbe"},{"fileReference":"bfdfe7dc352907fc980b868725387e9878d4a02f39de63e3d1106735da970ca7","guid":"bfdfe7dc352907fc980b868725387e98cff1c48f2a25fe1a5e41fc8a0401115e"},{"fileReference":"bfdfe7dc352907fc980b868725387e987dcc3a7b3e74f870d6620b9a2a2ecf5c","guid":"bfdfe7dc352907fc980b868725387e98f6d8f64eba33a2d44d77cf31531ccb79"},{"fileReference":"bfdfe7dc352907fc980b868725387e98bfba41555dc0fdafe3758671a4c8b5c4","guid":"bfdfe7dc352907fc980b868725387e98590329414946a82f9d0ea6c7d80dc15f"},{"fileReference":"bfdfe7dc352907fc980b868725387e98e0a494f1dd43b14ca8fbd67830a4299a","guid":"bfdfe7dc352907fc980b868725387e98c762fd4d8f4934171d40801407f41dad"},{"fileReference":"bfdfe7dc352907fc980b868725387e9884262f11f18e1ece922d28e9a5d86359","guid":"bfdfe7dc352907fc980b868725387e98375a0959c5a86fb6a35225ae6e03e3f7"},{"fileReference":"bfdfe7dc352907fc980b868725387e98b1cc66b4cfe08f3b3d9994f6667b1c8f","guid":"bfdfe7dc352907fc980b868725387e98fd1d0fd792add360986488219aaf8249"},{"fileReference":"bfdfe7dc352907fc980b868725387e9802ac367029fcec689c560e9c09956577","guid":"bfdfe7dc352907fc980b868725387e989cc5c451b28bbb6109baaa427000d2af"},{"fileReference":"bfdfe7dc352907fc980b868725387e98c55adbc69af63b3fae534d4d32bbb7d9","guid":"bfdfe7dc352907fc980b868725387e986d601246ae790f43238f20cba79dd00a"},{"fileReference":"bfdfe7dc352907fc980b868725387e98c7ba925bcaab2ef799e067fb09524783","guid":"bfdfe7dc352907fc980b868725387e98f2d2084d52c20e790e05063a043438d4"},{"fileReference":"bfdfe7dc352907fc980b868725387e9811c9e44fde5c048982c7190a2b83b582","guid":"bfdfe7dc352907fc980b868725387e9825e652edb3e93370d2626e87e1c57c29"},{"fileReference":"bfdfe7dc352907fc980b868725387e9854254b2427cbf1030d7399e4bf859971","guid":"bfdfe7dc352907fc980b868725387e98345267a4fcc5d55443683fc4278faab8"},{"fileReference":"bfdfe7dc352907fc980b868725387e98978d22922ec60f31d6f5a06b5fb057c2","guid":"bfdfe7dc352907fc980b868725387e987a2fd9f05f29358b61615006108cbca0"},{"fileReference":"bfdfe7dc352907fc980b868725387e9890e5f1c028980f312accdb59b79b8c9a","guid":"bfdfe7dc352907fc980b868725387e98cd23bc1c902ef586eaf5e165adca0cfc"},{"fileReference":"bfdfe7dc352907fc980b868725387e98e31f8b7b95878bd97624e635f148c67f","guid":"bfdfe7dc352907fc980b868725387e9837ad08567a3c2c71c8094bf789d485f3"},{"fileReference":"bfdfe7dc352907fc980b868725387e9847885db3e68e8f2c66b87e797e2b20b7","guid":"bfdfe7dc352907fc980b868725387e984c97ff9f5fb39f11a366429d98530b13"},{"fileReference":"bfdfe7dc352907fc980b868725387e983b65068db43de39e5b21be2c4940e213","guid":"bfdfe7dc352907fc980b868725387e986860813794c0607632822b953862b233"},{"fileReference":"bfdfe7dc352907fc980b868725387e983266b5201df1b292d44394e8b0d06351","guid":"bfdfe7dc352907fc980b868725387e9875ee3472953b0bbf6d545b77ccbac4e9"},{"fileReference":"bfdfe7dc352907fc980b868725387e98acb7d384e534589053b3d54ec83848e6","guid":"bfdfe7dc352907fc980b868725387e9865af0270a3fafd7b7c80a5f8629d8731"},{"fileReference":"bfdfe7dc352907fc980b868725387e988f0aa9a15a980855bb5cd22dd973231e","guid":"bfdfe7dc352907fc980b868725387e984fb1c7bfa5efa0d31953f43ac5991ea2"},{"fileReference":"bfdfe7dc352907fc980b868725387e9833c26626cd1780126c024ea0c1ab99a3","guid":"bfdfe7dc352907fc980b868725387e9800d811f465c66bb18aafce5665c96c7c"},{"fileReference":"bfdfe7dc352907fc980b868725387e98601f5533331fe93d3990abed0a6d8df0","guid":"bfdfe7dc352907fc980b868725387e983f3b2d863978b613c23b79dbac1c270e"},{"fileReference":"bfdfe7dc352907fc980b868725387e98a00810df46bf1461328c3bae378e67ca","guid":"bfdfe7dc352907fc980b868725387e983755fa6e9436f851d5d18c9bbfb25af1"},{"fileReference":"bfdfe7dc352907fc980b868725387e98657f85d6f26e1dccdccdadf67c06a872","guid":"bfdfe7dc352907fc980b868725387e980dc238b1be26fb309e17af25897021d7"},{"fileReference":"bfdfe7dc352907fc980b868725387e98ccdf38e87f3adf13c65d8b750a8a5d21","guid":"bfdfe7dc352907fc980b868725387e9867ad3a23f2a07d7fc22907a4aa1c0887"},{"fileReference":"bfdfe7dc352907fc980b868725387e989704c064dda1053b269cf2b66cae4669","guid":"bfdfe7dc352907fc980b868725387e98ac349063f6baa67c90249276c9bba409"},{"fileReference":"bfdfe7dc352907fc980b868725387e9897b3d707d3e694c92e507edb2f3b5ebc","guid":"bfdfe7dc352907fc980b868725387e98c31243f48612b4f2554165a7ca11f96a"},{"fileReference":"bfdfe7dc352907fc980b868725387e9847039eb0446879e37839563d32a579c0","guid":"bfdfe7dc352907fc980b868725387e98e88e53ce07b7520fae07a03464c27049"},{"fileReference":"bfdfe7dc352907fc980b868725387e983df13d08c3764514e1e73c1415d6fa58","guid":"bfdfe7dc352907fc980b868725387e986fbe9d540c525bf9dfa79fd4f818a616"},{"fileReference":"bfdfe7dc352907fc980b868725387e9850eb76d161b30d916255873f47c062e9","guid":"bfdfe7dc352907fc980b868725387e985584da6b07705cf1569b7d9fd68d8d16"},{"fileReference":"bfdfe7dc352907fc980b868725387e98d50924e3f8940afe7d774046e67792ae","guid":"bfdfe7dc352907fc980b868725387e98880aeedab70c2576c448971aca1ce7f8"},{"fileReference":"bfdfe7dc352907fc980b868725387e98c73511ff62a44b5597b9e19189dadd10","guid":"bfdfe7dc352907fc980b868725387e9871bb034d5b8abafa5da705c94a309647"},{"fileReference":"bfdfe7dc352907fc980b868725387e981b27190e33354e7e6a3225e2c828f557","guid":"bfdfe7dc352907fc980b868725387e98f58ea67ff3215544e9117ffd20a78d21"},{"fileReference":"bfdfe7dc352907fc980b868725387e98a72d1028678303be9b269ace9225904b","guid":"bfdfe7dc352907fc980b868725387e98d9a9615a52033ae1a824454dc64dbcbe"},{"fileReference":"bfdfe7dc352907fc980b868725387e98dabe9a937a43ec190006e0627054845a","guid":"bfdfe7dc352907fc980b868725387e985f1459360c5b45cfdd1743a953091f18"},{"fileReference":"bfdfe7dc352907fc980b868725387e98bdfcbc5d664bbafdd9f354c733bec51a","guid":"bfdfe7dc352907fc980b868725387e9807b459b35915dd4ab62eec31723dc0b5"},{"fileReference":"bfdfe7dc352907fc980b868725387e98ad2e31ca91913c90d37f3a2d95bb0d2b","guid":"bfdfe7dc352907fc980b868725387e98046f68092dbd8da6036eb8bdff7a3f0b"},{"fileReference":"bfdfe7dc352907fc980b868725387e98d610f2d23e0d44e2585bc582e859d2b6","guid":"bfdfe7dc352907fc980b868725387e9802d4339e254b660c20c8bc08ac3e8263"},{"fileReference":"bfdfe7dc352907fc980b868725387e98e1bcfb7e241dd08c5ad005fb642710b6","guid":"bfdfe7dc352907fc980b868725387e98e69218efeea3524b658db0ff3073c5a7"},{"fileReference":"bfdfe7dc352907fc980b868725387e98892b63d4e763877cb5805dc850cd357a","guid":"bfdfe7dc352907fc980b868725387e98ad9f5ed80dd976202f10cf014a4ce99d"},{"fileReference":"bfdfe7dc352907fc980b868725387e985650e463aa88e7a5e504ae565234621d","guid":"bfdfe7dc352907fc980b868725387e9810355226ec15c2e556f25e62769fe0bf"},{"fileReference":"bfdfe7dc352907fc980b868725387e98d5db2297cf3e649d29f50bdaed5ba04c","guid":"bfdfe7dc352907fc980b868725387e9869037f5c03526b4668fa6a35c653fbfd"},{"fileReference":"bfdfe7dc352907fc980b868725387e984a298505b96a98d10e522b4edf221ed6","guid":"bfdfe7dc352907fc980b868725387e98e375d728d614faa8db719c9f8e3e60cf"},{"fileReference":"bfdfe7dc352907fc980b868725387e988dfecf325d31fb2d9aff16796c653942","guid":"bfdfe7dc352907fc980b868725387e9841538c29f03c2bb78b0dc1a88384bf0d"},{"fileReference":"bfdfe7dc352907fc980b868725387e98f406a955a7d842430e2e924eca1f2640","guid":"bfdfe7dc352907fc980b868725387e982b25827c1628e31a7d1713444881795a"},{"fileReference":"bfdfe7dc352907fc980b868725387e98bb059cd18cd13115fe7d4b764e70af41","guid":"bfdfe7dc352907fc980b868725387e98aec828b3d84b0e7bb4f5a8d3960a8a45"},{"fileReference":"bfdfe7dc352907fc980b868725387e9869dc6e47e0a6966ada08fb3d58f5e210","guid":"bfdfe7dc352907fc980b868725387e98b293c1bedc2213b7c8cd09757a36a5c9"},{"fileReference":"bfdfe7dc352907fc980b868725387e98c0c5fe40ae00e565f4197361e56fec0b","guid":"bfdfe7dc352907fc980b868725387e98c14f113501c010f338f16a8533339fce"},{"fileReference":"bfdfe7dc352907fc980b868725387e98b26cf0e43da862e45d59c66508b01271","guid":"bfdfe7dc352907fc980b868725387e98be10f5be466931df3d5acab238312eb6"},{"fileReference":"bfdfe7dc352907fc980b868725387e98747bfd17f9aa097d0efe403170b79354","guid":"bfdfe7dc352907fc980b868725387e9859c478c77a6f179bc082e80fbcd433f5"},{"fileReference":"bfdfe7dc352907fc980b868725387e98834ab9620e06639a5ff56bf792d9c5db","guid":"bfdfe7dc352907fc980b868725387e98137ab8933ca8ee9fabe0e3cc3938bf69"},{"fileReference":"bfdfe7dc352907fc980b868725387e98d8d289f2f9bf72c003ddd77b0878f2b6","guid":"bfdfe7dc352907fc980b868725387e98b8875c162aa528d44442711655775f38"},{"fileReference":"bfdfe7dc352907fc980b868725387e98f10397478c14950ef9599fdf2d3e642c","guid":"bfdfe7dc352907fc980b868725387e98dc95cbe2de798e45e09532393f59d7f8"},{"fileReference":"bfdfe7dc352907fc980b868725387e984e4f4fa3681d3885991f826c7d0626b3","guid":"bfdfe7dc352907fc980b868725387e98e018cf18d2cd8a356da7c99b29203a50"},{"fileReference":"bfdfe7dc352907fc980b868725387e9852ea9a7b923c00deb23d6be14aa04c11","guid":"bfdfe7dc352907fc980b868725387e9855114a2423959c6d7f7602b2d22b0edd"},{"fileReference":"bfdfe7dc352907fc980b868725387e980471c1d2185273ed57ceb2cc5af91fd6","guid":"bfdfe7dc352907fc980b868725387e985df11c3e6c62ce0568f769d7a9d11c37"},{"fileReference":"bfdfe7dc352907fc980b868725387e98f7f99a49e05d9d483849b82a5b042ab3","guid":"bfdfe7dc352907fc980b868725387e98d75b7c679ff82073888e6e8658d6b4c7"},{"fileReference":"bfdfe7dc352907fc980b868725387e984b7089654a8476c04781946130828ff9","guid":"bfdfe7dc352907fc980b868725387e981b9e683b0875edbfad1d1887f8be7a12"},{"fileReference":"bfdfe7dc352907fc980b868725387e985d13ff13c510386d418cd069fb618f57","guid":"bfdfe7dc352907fc980b868725387e9880bfac654c613c28c08699fdc38edf53"},{"fileReference":"bfdfe7dc352907fc980b868725387e9860e788c01b59d8c5e34377d048e9571f","guid":"bfdfe7dc352907fc980b868725387e98d212dd21c39eed55f72d719fd31ac0c7"},{"fileReference":"bfdfe7dc352907fc980b868725387e9855d28a290f00d95e42828c0cce199a5e","guid":"bfdfe7dc352907fc980b868725387e9867c38619ea1682e963ff11764cfb0633"},{"fileReference":"bfdfe7dc352907fc980b868725387e9863b72be988c7f3f4f77f32a07cc998d6","guid":"bfdfe7dc352907fc980b868725387e98d9f7c1d122c3410663e2bd911d541769"},{"fileReference":"bfdfe7dc352907fc980b868725387e9844d2b74824c486de8efcfb8c9f84924c","guid":"bfdfe7dc352907fc980b868725387e9880a7bd9041da81bb7bcfda3356b6dead"},{"fileReference":"bfdfe7dc352907fc980b868725387e98719fe830048a2ba1365eecb6632f72d2","guid":"bfdfe7dc352907fc980b868725387e98b10a9c767029ac9f595d15626709980e"},{"fileReference":"bfdfe7dc352907fc980b868725387e981bc7f28ea1e64999404ca4dd21dd0ea1","guid":"bfdfe7dc352907fc980b868725387e9881f6541ca05b7f79045d78ee9d333751"},{"fileReference":"bfdfe7dc352907fc980b868725387e98dfbbcf08b73d4a041622c799a84cf364","guid":"bfdfe7dc352907fc980b868725387e982ed83f56908d85ea806d1cb905184570"},{"fileReference":"bfdfe7dc352907fc980b868725387e98ae767345b9752815dba9af0829f647b1","guid":"bfdfe7dc352907fc980b868725387e983ac5001b04ecd375fc2385271fbc5f06"},{"fileReference":"bfdfe7dc352907fc980b868725387e9806cce955c392c1f7a9e154850367e456","guid":"bfdfe7dc352907fc980b868725387e9899eb8965d1c6878b572c95348d79d507"},{"fileReference":"bfdfe7dc352907fc980b868725387e98b9b1eb7b36a3fff41786ab9d54bf826d","guid":"bfdfe7dc352907fc980b868725387e98eb784dd34289004d207c0b21f9ba8fd7"},{"fileReference":"bfdfe7dc352907fc980b868725387e98069027db4086db498c5c3aee779f8ca8","guid":"bfdfe7dc352907fc980b868725387e9837c21ca550aa6783170f1e4f825c7145"},{"fileReference":"bfdfe7dc352907fc980b868725387e981fea20a8743f49d4fd4d140bb89eda56","guid":"bfdfe7dc352907fc980b868725387e980657f8d21ca6a08606f7b393e4157770"},{"fileReference":"bfdfe7dc352907fc980b868725387e9844a657a5657e6fb389d0de83a143a4c2","guid":"bfdfe7dc352907fc980b868725387e984838444d96b988329fba9a184dd937f9"},{"fileReference":"bfdfe7dc352907fc980b868725387e98fbaa3d86f6d124a450b9f0491119ef2b","guid":"bfdfe7dc352907fc980b868725387e982f07db0c04000c73bdd48c225e7fefd1"},{"fileReference":"bfdfe7dc352907fc980b868725387e98abf7565fee3fc13cae4656dee1d87232","guid":"bfdfe7dc352907fc980b868725387e98a8adb4c43d05a78e8118eedcbc80e382"},{"fileReference":"bfdfe7dc352907fc980b868725387e982710250b86c363cad4a9df0dc1f552e3","guid":"bfdfe7dc352907fc980b868725387e98d85fb05fea1de189215946ca7e73089a"},{"fileReference":"bfdfe7dc352907fc980b868725387e98621647717ebb98ed5215a2363787ec60","guid":"bfdfe7dc352907fc980b868725387e986d6780885cc71cb7b1ef447a919ad79f"},{"fileReference":"bfdfe7dc352907fc980b868725387e9887eb43b7b5c4665c64c0e5d668c0db4a","guid":"bfdfe7dc352907fc980b868725387e98e2deb9e9c67acb54cc409929877df0e0"},{"fileReference":"bfdfe7dc352907fc980b868725387e989534023b43aec676374fa28f504ebd7b","guid":"bfdfe7dc352907fc980b868725387e98aed27b90c7d17d0c66bf157ed1b4e3c8"},{"fileReference":"bfdfe7dc352907fc980b868725387e981d20a98d8d6380a1cc4bfbc035d066f5","guid":"bfdfe7dc352907fc980b868725387e98c5ae436a3ec71388ba5c6f7b51963e53"},{"fileReference":"bfdfe7dc352907fc980b868725387e983982f2b3dd103ab5403130fd0d68cf72","guid":"bfdfe7dc352907fc980b868725387e9844bc15b9c17f01683ccf07e988377115"},{"fileReference":"bfdfe7dc352907fc980b868725387e984cc282790fe0653502d68810ce203862","guid":"bfdfe7dc352907fc980b868725387e98950d1d6f193127e8e40e67e5c02684d0"},{"fileReference":"bfdfe7dc352907fc980b868725387e98e2da331444b1f53e6dba6cb80e4bd821","guid":"bfdfe7dc352907fc980b868725387e98a5763e03b24ba60a2a744352ff95792e"},{"fileReference":"bfdfe7dc352907fc980b868725387e989efe2e2a211875271837aebcde4612e9","guid":"bfdfe7dc352907fc980b868725387e981dc0f3ecdf98d33f6bd0547c5ba7059b"},{"fileReference":"bfdfe7dc352907fc980b868725387e9890e258ab83427e9b3af28df6cbba4069","guid":"bfdfe7dc352907fc980b868725387e98128e2f23dbdef32488ed057967dda452"},{"fileReference":"bfdfe7dc352907fc980b868725387e9857980f4cd36be429374abd8731e09dc2","guid":"bfdfe7dc352907fc980b868725387e98cb80b33aacb172d028a447e43287dd99"},{"fileReference":"bfdfe7dc352907fc980b868725387e9842ed090caa16221d40b2deb5c1fc39a7","guid":"bfdfe7dc352907fc980b868725387e98d52815d3ee867fcb3ad71469359df3ae"},{"fileReference":"bfdfe7dc352907fc980b868725387e98e98566614e5a7eaa2d269e0707a52718","guid":"bfdfe7dc352907fc980b868725387e980c8de91ca0b7220175e02a8717488cea"},{"fileReference":"bfdfe7dc352907fc980b868725387e98bfc950ffeb67bb663f272c5ed9fedbd4","guid":"bfdfe7dc352907fc980b868725387e9857981d5ee15a81ff2ad219d70a4cacfd"},{"fileReference":"bfdfe7dc352907fc980b868725387e980e5fb7ae060697ed6919bcf3cedb0f75","guid":"bfdfe7dc352907fc980b868725387e98f074b4794e80d18504d2ac4ec8973aba"},{"fileReference":"bfdfe7dc352907fc980b868725387e98b4267b665e65b3b2e7bfe1594a1d1f5a","guid":"bfdfe7dc352907fc980b868725387e98fc8d362fc9937a90f24c02cf2f06d5de"},{"fileReference":"bfdfe7dc352907fc980b868725387e986cc1b3357462deb86550440d1f70a61b","guid":"bfdfe7dc352907fc980b868725387e988c9fa9c9424a0158e1aa055ef98abce3"},{"fileReference":"bfdfe7dc352907fc980b868725387e98d17a8f03b477f37a765a58084e0e5269","guid":"bfdfe7dc352907fc980b868725387e988f4fb2511ecac4dbce0895ffb3e33073"},{"fileReference":"bfdfe7dc352907fc980b868725387e98bee3b1251aecfd29166ec8b8a4b18b24","guid":"bfdfe7dc352907fc980b868725387e980c3d2a4bd21ddaf89b5496cd9ca714db"},{"fileReference":"bfdfe7dc352907fc980b868725387e9875781607f587883e67ef5fc29d71563b","guid":"bfdfe7dc352907fc980b868725387e98c434064303213b1941104add35057ee0"},{"fileReference":"bfdfe7dc352907fc980b868725387e989757f793fe76ee3d65074635004dbb48","guid":"bfdfe7dc352907fc980b868725387e98d34586ebd10a830179faf2b7579cab78"},{"fileReference":"bfdfe7dc352907fc980b868725387e98572304b8a4293ef6e15f1b6935aa3de6","guid":"bfdfe7dc352907fc980b868725387e98209f73bebac10cc83a92abb142fac939"},{"fileReference":"bfdfe7dc352907fc980b868725387e98666272423879d06e6542d05efdedb720","guid":"bfdfe7dc352907fc980b868725387e98d7ff1bf68c562adf433157767bdc2d12"},{"fileReference":"bfdfe7dc352907fc980b868725387e98102c5f8ca0d2ebc5a06ccb97589db0cf","guid":"bfdfe7dc352907fc980b868725387e987b93d6e1c11d5976960190a9de79c981"},{"fileReference":"bfdfe7dc352907fc980b868725387e9875b69c0c8d62ef6ae2f4d5ccb2a50140","guid":"bfdfe7dc352907fc980b868725387e98e029b66de800d1432fd656a37eca56e1"},{"fileReference":"bfdfe7dc352907fc980b868725387e98ca7c8108003627e6f3faac826b461b2b","guid":"bfdfe7dc352907fc980b868725387e9829de73e8947834ce226654711b56dd16"},{"fileReference":"bfdfe7dc352907fc980b868725387e981f8eac5b6857c6f90839ca30a2c3e6c4","guid":"bfdfe7dc352907fc980b868725387e988f7903eadd15a608fb4a9701b6e8e14d"},{"fileReference":"bfdfe7dc352907fc980b868725387e98a374d7222e915426b2f8ab3ba4d65ee5","guid":"bfdfe7dc352907fc980b868725387e98948074dbee062f2ac5e1b8655d61da3a"},{"fileReference":"bfdfe7dc352907fc980b868725387e98ba30b785bf30ceb46a9118f6019d819b","guid":"bfdfe7dc352907fc980b868725387e9850c0fcd0ff61a1cc91377263edb2a774"},{"fileReference":"bfdfe7dc352907fc980b868725387e98a235f0b77bf950d99dcce74d380bcd75","guid":"bfdfe7dc352907fc980b868725387e984d571fd7a377727b6ad9eda8eb9fd292"},{"fileReference":"bfdfe7dc352907fc980b868725387e98f5f54f4445a2c9e87da1cea25995185a","guid":"bfdfe7dc352907fc980b868725387e98c3a63b2fbadf993aa2ea493f2ad09544"},{"fileReference":"bfdfe7dc352907fc980b868725387e989bb0668960c84bff388737525f9b3a81","guid":"bfdfe7dc352907fc980b868725387e98540a3747079ca6f004d996060b4cb213"},{"fileReference":"bfdfe7dc352907fc980b868725387e986a7af298a7219b614606ae7ff2d749ae","guid":"bfdfe7dc352907fc980b868725387e98a07278050dcd5c4bb66fcf842bbd2c59"},{"fileReference":"bfdfe7dc352907fc980b868725387e98bb1dadfa78eacc3f622bcccdd537b399","guid":"bfdfe7dc352907fc980b868725387e985e65d69e9a35b7e4eecae6411c05d988"},{"fileReference":"bfdfe7dc352907fc980b868725387e98475bcd8f86ab153834b49971ed619ff5","guid":"bfdfe7dc352907fc980b868725387e98255884e31f8582299c265f2678f63e11"},{"fileReference":"bfdfe7dc352907fc980b868725387e984e9998b48de1e3e79cde488b19940ce2","guid":"bfdfe7dc352907fc980b868725387e987f3c8e57401e3d78726e674973e56791"},{"fileReference":"bfdfe7dc352907fc980b868725387e981e6263bb40c09d9f8dc13f069ceae880","guid":"bfdfe7dc352907fc980b868725387e98d5402093b2b404381fa424b7e44f6416"},{"fileReference":"bfdfe7dc352907fc980b868725387e98d5276ff3ae57c9a7f98db3bccebc2370","guid":"bfdfe7dc352907fc980b868725387e98f44e8e8e639b4a36d2e2589e7f6d09b8"},{"fileReference":"bfdfe7dc352907fc980b868725387e98e3a47805b413680ebb0c06709b493b25","guid":"bfdfe7dc352907fc980b868725387e986d59b31ddd293e848d0195c9d82d9c35"},{"fileReference":"bfdfe7dc352907fc980b868725387e98d104dd38e64d1362119c6d0e6e6c53a2","guid":"bfdfe7dc352907fc980b868725387e9818a8d345b243661a4fad38b27025877a"},{"fileReference":"bfdfe7dc352907fc980b868725387e9870ce2670d34fda92a4f9f6fab2cb3f05","guid":"bfdfe7dc352907fc980b868725387e98fcd38fcf5f68f99ec27763741129d04d"},{"fileReference":"bfdfe7dc352907fc980b868725387e986ea08be4fd634924346f78693900e71c","guid":"bfdfe7dc352907fc980b868725387e98636ad24054faf5fe010805a09bd28f07"},{"fileReference":"bfdfe7dc352907fc980b868725387e9803ec352f1d5e430050d78853042b369f","guid":"bfdfe7dc352907fc980b868725387e983b6513c4a450010cafdcfe1cfd932c6e"},{"fileReference":"bfdfe7dc352907fc980b868725387e986e2c14a76174e5c401d360834cbcd241","guid":"bfdfe7dc352907fc980b868725387e9855032b7330d4546888bc4f057b790a2b"},{"fileReference":"bfdfe7dc352907fc980b868725387e98dc039d8f859c4d7a942b4a6efffb5c50","guid":"bfdfe7dc352907fc980b868725387e9856d26ef9d369e7c255bcb8ee4efe5e6a"},{"fileReference":"bfdfe7dc352907fc980b868725387e9806bf6fed24708c67d77335a5235a6cc1","guid":"bfdfe7dc352907fc980b868725387e98eebb994d268fb79e4d27cdde6850c07b"},{"fileReference":"bfdfe7dc352907fc980b868725387e984b3cebe055de35d309e97aecaa0a5a1b","guid":"bfdfe7dc352907fc980b868725387e98b41ea75f645aa1edbb67ce4e7aa57406"},{"fileReference":"bfdfe7dc352907fc980b868725387e986e0bef915cd1d6699aab05207038a96f","guid":"bfdfe7dc352907fc980b868725387e985937601f49aeda389ac579d178ed0052"},{"fileReference":"bfdfe7dc352907fc980b868725387e98e701c1cb6f65239a251e4768e01df45e","guid":"bfdfe7dc352907fc980b868725387e98c36f2b1d46880e5b00462301e3d6fd22"},{"fileReference":"bfdfe7dc352907fc980b868725387e98e413e4e9aa35c4a57f446f64d1d7dbad","guid":"bfdfe7dc352907fc980b868725387e9825bb35b2760144ab3e780b89a8a87da5"},{"fileReference":"bfdfe7dc352907fc980b868725387e986632cf764cf74da0f8d3dbcbba1c5634","guid":"bfdfe7dc352907fc980b868725387e9858350754d1584a351dee2fa4c1585cd6"},{"fileReference":"bfdfe7dc352907fc980b868725387e982a785903ce725c51dc299f8f3d264a23","guid":"bfdfe7dc352907fc980b868725387e989dd2a4953f67a2a10242d78605df06d9"}],"guid":"bfdfe7dc352907fc980b868725387e987908b8f7896408c187f152da1b51c070","type":"com.apple.buildphase.sources"},{"buildFiles":[{"fileReference":"bfdfe7dc352907fc980b868725387e98b14af7c49882340ad551cb13b0a1e06d","guid":"bfdfe7dc352907fc980b868725387e9806a92d9c576668cee9d5913728916992"},{"fileReference":"bfdfe7dc352907fc980b868725387e98e4170aa7f984f5a13b58a3c42c24b3e6","guid":"bfdfe7dc352907fc980b868725387e9875a1d5d4696253ce89b23de3bd3c6ac6"},{"fileReference":"bfdfe7dc352907fc980b868725387e9820c167798bdb228b4ab52bb2aa7eb24b","guid":"bfdfe7dc352907fc980b868725387e98c8469cac88bbe238ade8f54e247c9e15"}],"guid":"bfdfe7dc352907fc980b868725387e9822ffa72130b46984a7a466dd9c1eea77","type":"com.apple.buildphase.frameworks"},{"buildFiles":[{"guid":"bfdfe7dc352907fc980b868725387e9897dd3956ab5a86d4602cc57fdb8a0bbd","targetReference":"bfdfe7dc352907fc980b868725387e98205354208adeebae46380f8f82956de4"}],"guid":"bfdfe7dc352907fc980b868725387e980ef2362b2d99c33629654d25ce1a17eb","type":"com.apple.buildphase.resources"}],"buildRules":[],"dependencies":[{"guid":"bfdfe7dc352907fc980b868725387e981f0a8508efd61386103314ddbb82a530","name":"FirebaseAppCheckInterop"},{"guid":"bfdfe7dc352907fc980b868725387e98205354208adeebae46380f8f82956de4","name":"FirebaseAuth-FirebaseAuth_Privacy"},{"guid":"bfdfe7dc352907fc980b868725387e988e935c81efc4686179f554b8fe37864a","name":"FirebaseAuthInterop"},{"guid":"bfdfe7dc352907fc980b868725387e98a408a4c1f668e62161cdeba76f57d50c","name":"FirebaseCore"},{"guid":"bfdfe7dc352907fc980b868725387e982fcb5e27d041e48b96b3ab14ce32d5f2","name":"FirebaseCoreExtension"},{"guid":"bfdfe7dc352907fc980b868725387e98dd3a6a519ed4181bf31ea6bc1f18ebc5","name":"GTMSessionFetcher"},{"guid":"bfdfe7dc352907fc980b868725387e98718890dfdac589615663a02d43d9af3e","name":"GoogleUtilities"},{"guid":"bfdfe7dc352907fc980b868725387e98da29652de71b686743df2bd56decf7ef","name":"RecaptchaInterop"}],"guid":"bfdfe7dc352907fc980b868725387e98b762d5de103fb6cfc7506aa6be1d4f33","name":"FirebaseAuth","predominantSourceCodeLanguage":"Xcode.SourceCodeLanguage.Swift","productReference":{"guid":"bfdfe7dc352907fc980b868725387e985cd3a5a71d9e860191e64012c6d205c4","name":"FirebaseAuth.framework","type":"product"},"productTypeIdentifier":"com.apple.product-type.framework","provisioningSourceData":[{"bundleIdentifierFromInfoPlist":"${PRODUCT_BUNDLE_IDENTIFIER}","configurationName":"Debug","provisioningStyle":1},{"bundleIdentifierFromInfoPlist":"${PRODUCT_BUNDLE_IDENTIFIER}","configurationName":"Profile","provisioningStyle":1},{"bundleIdentifierFromInfoPlist":"${PRODUCT_BUNDLE_IDENTIFIER}","configurationName":"Release","provisioningStyle":1}],"type":"standard"} \ No newline at end of file diff --git a/mih_ui/android/build/ios/XCBuildData/PIFCache/target/TARGET@v11_hash=0b58e1096693d1b2f665847f3d6ed644-json b/mih_ui/android/build/ios/XCBuildData/PIFCache/target/TARGET@v11_hash=0b58e1096693d1b2f665847f3d6ed644-json new file mode 100644 index 00000000..a55176fa --- /dev/null +++ b/mih_ui/android/build/ios/XCBuildData/PIFCache/target/TARGET@v11_hash=0b58e1096693d1b2f665847f3d6ed644-json @@ -0,0 +1 @@ +{"buildConfigurations":[{"baseConfigurationFileReference":"bfdfe7dc352907fc980b868725387e98421994bc5dd043094766f7b84b26a0c6","buildSettings":{"CLANG_ENABLE_OBJC_WEAK":"NO","CODE_SIGN_IDENTITY[sdk=appletvos*]":"","CODE_SIGN_IDENTITY[sdk=iphoneos*]":"","CODE_SIGN_IDENTITY[sdk=watchos*]":"","CURRENT_PROJECT_VERSION":"1","DEFINES_MODULE":"YES","DYLIB_COMPATIBILITY_VERSION":"1","DYLIB_CURRENT_VERSION":"1","DYLIB_INSTALL_NAME_BASE":"@rpath","ENABLE_MODULE_VERIFIER":"NO","ENABLE_USER_SCRIPT_SANDBOXING":"NO","GCC_PREFIX_HEADER":"Target Support Files/FirebaseAppCheckInterop/FirebaseAppCheckInterop-prefix.pch","GENERATE_INFOPLIST_FILE":"NO","INFOPLIST_FILE":"Target Support Files/FirebaseAppCheckInterop/FirebaseAppCheckInterop-Info.plist","INSTALL_PATH":"$(LOCAL_LIBRARY_DIR)/Frameworks","IPHONEOS_DEPLOYMENT_TARGET":"15.0","LD_RUNPATH_SEARCH_PATHS":"$(inherited) @executable_path/Frameworks @loader_path/Frameworks","MODULEMAP_FILE":"Target Support Files/FirebaseAppCheckInterop/FirebaseAppCheckInterop.modulemap","ONLY_ACTIVE_ARCH":"NO","PRODUCT_MODULE_NAME":"FirebaseAppCheckInterop","PRODUCT_NAME":"FirebaseAppCheckInterop","SDKROOT":"iphoneos","SKIP_INSTALL":"YES","SWIFT_ACTIVE_COMPILATION_CONDITIONS":"$(inherited) ","SWIFT_INSTALL_OBJC_HEADER":"YES","SWIFT_VERSION":"5.0","TARGETED_DEVICE_FAMILY":"1,2","VERSIONING_SYSTEM":"apple-generic","VERSION_INFO_PREFIX":""},"guid":"bfdfe7dc352907fc980b868725387e986f58c6649fe25a50f60c4963db91c363","name":"Debug"},{"baseConfigurationFileReference":"bfdfe7dc352907fc980b868725387e98b37eb9d9e658784e2a78517cf0f13af6","buildSettings":{"CLANG_ENABLE_OBJC_WEAK":"NO","CODE_SIGN_IDENTITY[sdk=appletvos*]":"","CODE_SIGN_IDENTITY[sdk=iphoneos*]":"","CODE_SIGN_IDENTITY[sdk=watchos*]":"","CURRENT_PROJECT_VERSION":"1","DEFINES_MODULE":"YES","DYLIB_COMPATIBILITY_VERSION":"1","DYLIB_CURRENT_VERSION":"1","DYLIB_INSTALL_NAME_BASE":"@rpath","ENABLE_MODULE_VERIFIER":"NO","ENABLE_USER_SCRIPT_SANDBOXING":"NO","GCC_PREFIX_HEADER":"Target Support Files/FirebaseAppCheckInterop/FirebaseAppCheckInterop-prefix.pch","GENERATE_INFOPLIST_FILE":"NO","INFOPLIST_FILE":"Target Support Files/FirebaseAppCheckInterop/FirebaseAppCheckInterop-Info.plist","INSTALL_PATH":"$(LOCAL_LIBRARY_DIR)/Frameworks","IPHONEOS_DEPLOYMENT_TARGET":"15.0","LD_RUNPATH_SEARCH_PATHS":"$(inherited) @executable_path/Frameworks @loader_path/Frameworks","MODULEMAP_FILE":"Target Support Files/FirebaseAppCheckInterop/FirebaseAppCheckInterop.modulemap","PRODUCT_MODULE_NAME":"FirebaseAppCheckInterop","PRODUCT_NAME":"FirebaseAppCheckInterop","SDKROOT":"iphoneos","SKIP_INSTALL":"YES","SWIFT_ACTIVE_COMPILATION_CONDITIONS":"$(inherited) ","SWIFT_INSTALL_OBJC_HEADER":"YES","SWIFT_VERSION":"5.0","TARGETED_DEVICE_FAMILY":"1,2","VALIDATE_PRODUCT":"YES","VERSIONING_SYSTEM":"apple-generic","VERSION_INFO_PREFIX":""},"guid":"bfdfe7dc352907fc980b868725387e987b692890a649bae1a579bc7e819a8108","name":"Profile"},{"baseConfigurationFileReference":"bfdfe7dc352907fc980b868725387e98b37eb9d9e658784e2a78517cf0f13af6","buildSettings":{"CLANG_ENABLE_OBJC_WEAK":"NO","CODE_SIGN_IDENTITY[sdk=appletvos*]":"","CODE_SIGN_IDENTITY[sdk=iphoneos*]":"","CODE_SIGN_IDENTITY[sdk=watchos*]":"","CURRENT_PROJECT_VERSION":"1","DEFINES_MODULE":"YES","DYLIB_COMPATIBILITY_VERSION":"1","DYLIB_CURRENT_VERSION":"1","DYLIB_INSTALL_NAME_BASE":"@rpath","ENABLE_MODULE_VERIFIER":"NO","ENABLE_USER_SCRIPT_SANDBOXING":"NO","GCC_PREFIX_HEADER":"Target Support Files/FirebaseAppCheckInterop/FirebaseAppCheckInterop-prefix.pch","GENERATE_INFOPLIST_FILE":"NO","INFOPLIST_FILE":"Target Support Files/FirebaseAppCheckInterop/FirebaseAppCheckInterop-Info.plist","INSTALL_PATH":"$(LOCAL_LIBRARY_DIR)/Frameworks","IPHONEOS_DEPLOYMENT_TARGET":"15.0","LD_RUNPATH_SEARCH_PATHS":"$(inherited) @executable_path/Frameworks @loader_path/Frameworks","MODULEMAP_FILE":"Target Support Files/FirebaseAppCheckInterop/FirebaseAppCheckInterop.modulemap","PRODUCT_MODULE_NAME":"FirebaseAppCheckInterop","PRODUCT_NAME":"FirebaseAppCheckInterop","SDKROOT":"iphoneos","SKIP_INSTALL":"YES","SWIFT_ACTIVE_COMPILATION_CONDITIONS":"$(inherited) ","SWIFT_INSTALL_OBJC_HEADER":"YES","SWIFT_VERSION":"5.0","TARGETED_DEVICE_FAMILY":"1,2","VALIDATE_PRODUCT":"YES","VERSIONING_SYSTEM":"apple-generic","VERSION_INFO_PREFIX":""},"guid":"bfdfe7dc352907fc980b868725387e981b4369d08b74582aee651e45141ded31","name":"Release"}],"buildPhases":[{"buildFiles":[{"fileReference":"bfdfe7dc352907fc980b868725387e98a7311458b4843df9e67745481ba7c0e5","guid":"bfdfe7dc352907fc980b868725387e9828e277c9497b2f20895ff53be68a0f33","headerVisibility":"public"},{"fileReference":"bfdfe7dc352907fc980b868725387e9829de89cb8f108e22ea823c6be6f50bb8","guid":"bfdfe7dc352907fc980b868725387e98844f13aa6f5e1386f61d5696e7b8984d","headerVisibility":"public"},{"fileReference":"bfdfe7dc352907fc980b868725387e9844c414003af70893691ff86752a3f856","guid":"bfdfe7dc352907fc980b868725387e98a34d867ee41b3a876589657d837461b6","headerVisibility":"public"},{"fileReference":"bfdfe7dc352907fc980b868725387e985a1fa15e8a7202370ebafaea17bc9527","guid":"bfdfe7dc352907fc980b868725387e98999c06e70f73d8521f2d4ca7b7f131e8","headerVisibility":"public"}],"guid":"bfdfe7dc352907fc980b868725387e98b735d5869615c19ff960db77f1aaa00c","type":"com.apple.buildphase.headers"},{"buildFiles":[{"fileReference":"bfdfe7dc352907fc980b868725387e98c0c7690085e912d942bf2e237c7d1c7b","guid":"bfdfe7dc352907fc980b868725387e98e4605ad5dcb3e021f9ea7dfa1319e233"},{"fileReference":"bfdfe7dc352907fc980b868725387e982a30bb5a8768c4121de0072fc14d52a0","guid":"bfdfe7dc352907fc980b868725387e98b09b55376e91c7e3090fec6579a02e28"}],"guid":"bfdfe7dc352907fc980b868725387e9820141e6459734f9feb4931b58768af04","type":"com.apple.buildphase.sources"},{"buildFiles":[{"fileReference":"bfdfe7dc352907fc980b868725387e98b14af7c49882340ad551cb13b0a1e06d","guid":"bfdfe7dc352907fc980b868725387e98afc620bdc83204c63fc012552c2beb39"}],"guid":"bfdfe7dc352907fc980b868725387e98fd137d0784f18399947b71f2309b299b","type":"com.apple.buildphase.frameworks"},{"buildFiles":[],"guid":"bfdfe7dc352907fc980b868725387e9825da9d9e3f725ae476705bc78735502c","type":"com.apple.buildphase.resources"}],"buildRules":[],"dependencies":[],"guid":"bfdfe7dc352907fc980b868725387e981f0a8508efd61386103314ddbb82a530","name":"FirebaseAppCheckInterop","predominantSourceCodeLanguage":"Xcode.SourceCodeLanguage.Objective-C-Plus-Plus","productReference":{"guid":"bfdfe7dc352907fc980b868725387e982cdb0c7c817307e018cfb4299b646a42","name":"FirebaseAppCheckInterop.framework","type":"product"},"productTypeIdentifier":"com.apple.product-type.framework","provisioningSourceData":[{"bundleIdentifierFromInfoPlist":"${PRODUCT_BUNDLE_IDENTIFIER}","configurationName":"Debug","provisioningStyle":1},{"bundleIdentifierFromInfoPlist":"${PRODUCT_BUNDLE_IDENTIFIER}","configurationName":"Profile","provisioningStyle":1},{"bundleIdentifierFromInfoPlist":"${PRODUCT_BUNDLE_IDENTIFIER}","configurationName":"Release","provisioningStyle":1}],"type":"standard"} \ No newline at end of file diff --git a/mih_ui/android/build/ios/XCBuildData/PIFCache/target/TARGET@v11_hash=0b5c502676ea77f04ab6ea7a2e8956d9-json b/mih_ui/android/build/ios/XCBuildData/PIFCache/target/TARGET@v11_hash=0b5c502676ea77f04ab6ea7a2e8956d9-json new file mode 100644 index 00000000..3c105ee0 --- /dev/null +++ b/mih_ui/android/build/ios/XCBuildData/PIFCache/target/TARGET@v11_hash=0b5c502676ea77f04ab6ea7a2e8956d9-json @@ -0,0 +1 @@ +{"buildConfigurations":[{"baseConfigurationFileReference":"bfdfe7dc352907fc980b868725387e98237671cfe20903d6f94682d7135ab52a","buildSettings":{"CODE_SIGNING_ALLOWED":"NO","CODE_SIGNING_IDENTITY":"-","CODE_SIGNING_REQUIRED":"NO","CONFIGURATION_BUILD_DIR":"$(BUILD_DIR)/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME)/path_provider_foundation","EXPANDED_CODE_SIGN_IDENTITY":"-","IBSC_MODULE":"path_provider_foundation","INFOPLIST_FILE":"Target Support Files/path_provider_foundation/ResourceBundle-path_provider_foundation_privacy-path_provider_foundation-Info.plist","IPHONEOS_DEPLOYMENT_TARGET":"12.0","ONLY_ACTIVE_ARCH":"NO","PRODUCT_NAME":"path_provider_foundation_privacy","SDKROOT":"iphoneos","SKIP_INSTALL":"YES","TARGETED_DEVICE_FAMILY":"1,2","WRAPPER_EXTENSION":"bundle"},"guid":"bfdfe7dc352907fc980b868725387e98c220b717effe1cdd465a205ee95d349c","name":"Debug"},{"baseConfigurationFileReference":"bfdfe7dc352907fc980b868725387e980e0c5fa0e8218bd665f72f14cbfc898f","buildSettings":{"CLANG_ENABLE_OBJC_WEAK":"NO","CODE_SIGNING_ALLOWED":"NO","CODE_SIGNING_IDENTITY":"-","CODE_SIGNING_REQUIRED":"NO","CONFIGURATION_BUILD_DIR":"$(BUILD_DIR)/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME)/path_provider_foundation","EXPANDED_CODE_SIGN_IDENTITY":"-","IBSC_MODULE":"path_provider_foundation","INFOPLIST_FILE":"Target Support Files/path_provider_foundation/ResourceBundle-path_provider_foundation_privacy-path_provider_foundation-Info.plist","IPHONEOS_DEPLOYMENT_TARGET":"12.0","PRODUCT_NAME":"path_provider_foundation_privacy","SDKROOT":"iphoneos","SKIP_INSTALL":"YES","TARGETED_DEVICE_FAMILY":"1,2","VALIDATE_PRODUCT":"YES","WRAPPER_EXTENSION":"bundle"},"guid":"bfdfe7dc352907fc980b868725387e9860a98cac683156b89579461b12d9c3f0","name":"Profile"},{"baseConfigurationFileReference":"bfdfe7dc352907fc980b868725387e980e0c5fa0e8218bd665f72f14cbfc898f","buildSettings":{"CODE_SIGNING_ALLOWED":"NO","CODE_SIGNING_IDENTITY":"-","CODE_SIGNING_REQUIRED":"NO","CONFIGURATION_BUILD_DIR":"$(BUILD_DIR)/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME)/path_provider_foundation","EXPANDED_CODE_SIGN_IDENTITY":"-","IBSC_MODULE":"path_provider_foundation","INFOPLIST_FILE":"Target Support Files/path_provider_foundation/ResourceBundle-path_provider_foundation_privacy-path_provider_foundation-Info.plist","IPHONEOS_DEPLOYMENT_TARGET":"12.0","PRODUCT_NAME":"path_provider_foundation_privacy","SDKROOT":"iphoneos","SKIP_INSTALL":"YES","TARGETED_DEVICE_FAMILY":"1,2","WRAPPER_EXTENSION":"bundle"},"guid":"bfdfe7dc352907fc980b868725387e9845045c47908a01a7620293e9eb5b8581","name":"Release"}],"buildPhases":[{"buildFiles":[],"guid":"bfdfe7dc352907fc980b868725387e9826bc948ab5c020662629313ee4c44ba0","type":"com.apple.buildphase.sources"},{"buildFiles":[],"guid":"bfdfe7dc352907fc980b868725387e98248860b0d15cedbfaa9a198de6fddec1","type":"com.apple.buildphase.frameworks"},{"buildFiles":[{"fileReference":"bfdfe7dc352907fc980b868725387e9874c74ec17bfbd10a54d1903d5290b3df","guid":"bfdfe7dc352907fc980b868725387e983753c0c4f160bd4ebab92de93f3e694d"}],"guid":"bfdfe7dc352907fc980b868725387e98c20ebbb494d2a8d56a1306d22e48544f","type":"com.apple.buildphase.resources"}],"buildRules":[],"dependencies":[],"guid":"bfdfe7dc352907fc980b868725387e987ea64ee8d53085bf9edd1a57aaf8cbb5","name":"path_provider_foundation-path_provider_foundation_privacy","productReference":{"guid":"bfdfe7dc352907fc980b868725387e986e649604f74c414a7c2dbe5ef4cc4e75","name":"path_provider_foundation_privacy.bundle","type":"product"},"productTypeIdentifier":"com.apple.product-type.bundle","provisioningSourceData":[{"bundleIdentifierFromInfoPlist":"${PRODUCT_BUNDLE_IDENTIFIER}","configurationName":"Debug","provisioningStyle":0},{"bundleIdentifierFromInfoPlist":"${PRODUCT_BUNDLE_IDENTIFIER}","configurationName":"Profile","provisioningStyle":0},{"bundleIdentifierFromInfoPlist":"${PRODUCT_BUNDLE_IDENTIFIER}","configurationName":"Release","provisioningStyle":0}],"type":"standard"} \ No newline at end of file diff --git a/mih_ui/android/build/ios/XCBuildData/PIFCache/target/TARGET@v11_hash=110600b415fe8fc7dd4ca8c0f3c4e215-json b/mih_ui/android/build/ios/XCBuildData/PIFCache/target/TARGET@v11_hash=110600b415fe8fc7dd4ca8c0f3c4e215-json new file mode 100644 index 00000000..c6cb6059 --- /dev/null +++ b/mih_ui/android/build/ios/XCBuildData/PIFCache/target/TARGET@v11_hash=110600b415fe8fc7dd4ca8c0f3c4e215-json @@ -0,0 +1 @@ +{"buildConfigurations":[{"baseConfigurationFileReference":"bfdfe7dc352907fc980b868725387e98b94f751a83e7e0f1d4b42f2b77a60509","buildSettings":{"CLANG_ENABLE_OBJC_WEAK":"NO","CODE_SIGN_IDENTITY[sdk=appletvos*]":"","CODE_SIGN_IDENTITY[sdk=iphoneos*]":"","CODE_SIGN_IDENTITY[sdk=watchos*]":"","CURRENT_PROJECT_VERSION":"1","DEFINES_MODULE":"YES","DYLIB_COMPATIBILITY_VERSION":"1","DYLIB_CURRENT_VERSION":"1","DYLIB_INSTALL_NAME_BASE":"@rpath","ENABLE_MODULE_VERIFIER":"NO","ENABLE_USER_SCRIPT_SANDBOXING":"NO","GCC_PREFIX_HEADER":"Target Support Files/FirebaseCoreInternal/FirebaseCoreInternal-prefix.pch","GENERATE_INFOPLIST_FILE":"NO","INFOPLIST_FILE":"Target Support Files/FirebaseCoreInternal/FirebaseCoreInternal-Info.plist","INSTALL_PATH":"$(LOCAL_LIBRARY_DIR)/Frameworks","IPHONEOS_DEPLOYMENT_TARGET":"15.0","LD_RUNPATH_SEARCH_PATHS":"$(inherited) @executable_path/Frameworks @loader_path/Frameworks","MODULEMAP_FILE":"Target Support Files/FirebaseCoreInternal/FirebaseCoreInternal.modulemap","ONLY_ACTIVE_ARCH":"NO","PRODUCT_MODULE_NAME":"FirebaseCoreInternal","PRODUCT_NAME":"FirebaseCoreInternal","SDKROOT":"iphoneos","SKIP_INSTALL":"YES","SWIFT_ACTIVE_COMPILATION_CONDITIONS":"$(inherited) ","SWIFT_INSTALL_OBJC_HEADER":"YES","SWIFT_VERSION":"5.9","TARGETED_DEVICE_FAMILY":"1,2","VERSIONING_SYSTEM":"apple-generic","VERSION_INFO_PREFIX":""},"guid":"bfdfe7dc352907fc980b868725387e98dac1faaa464be3f8c188e3c2753b5629","name":"Debug"},{"baseConfigurationFileReference":"bfdfe7dc352907fc980b868725387e98d9147eb705ef7701ac589855737d9572","buildSettings":{"CLANG_ENABLE_OBJC_WEAK":"NO","CODE_SIGN_IDENTITY[sdk=appletvos*]":"","CODE_SIGN_IDENTITY[sdk=iphoneos*]":"","CODE_SIGN_IDENTITY[sdk=watchos*]":"","CURRENT_PROJECT_VERSION":"1","DEFINES_MODULE":"YES","DYLIB_COMPATIBILITY_VERSION":"1","DYLIB_CURRENT_VERSION":"1","DYLIB_INSTALL_NAME_BASE":"@rpath","ENABLE_MODULE_VERIFIER":"NO","ENABLE_USER_SCRIPT_SANDBOXING":"NO","GCC_PREFIX_HEADER":"Target Support Files/FirebaseCoreInternal/FirebaseCoreInternal-prefix.pch","GENERATE_INFOPLIST_FILE":"NO","INFOPLIST_FILE":"Target Support Files/FirebaseCoreInternal/FirebaseCoreInternal-Info.plist","INSTALL_PATH":"$(LOCAL_LIBRARY_DIR)/Frameworks","IPHONEOS_DEPLOYMENT_TARGET":"15.0","LD_RUNPATH_SEARCH_PATHS":"$(inherited) @executable_path/Frameworks @loader_path/Frameworks","MODULEMAP_FILE":"Target Support Files/FirebaseCoreInternal/FirebaseCoreInternal.modulemap","PRODUCT_MODULE_NAME":"FirebaseCoreInternal","PRODUCT_NAME":"FirebaseCoreInternal","SDKROOT":"iphoneos","SKIP_INSTALL":"YES","SWIFT_ACTIVE_COMPILATION_CONDITIONS":"$(inherited) ","SWIFT_INSTALL_OBJC_HEADER":"YES","SWIFT_VERSION":"5.9","TARGETED_DEVICE_FAMILY":"1,2","VALIDATE_PRODUCT":"YES","VERSIONING_SYSTEM":"apple-generic","VERSION_INFO_PREFIX":""},"guid":"bfdfe7dc352907fc980b868725387e98ae7c409a52a05bbaf5e0899cdeb43a37","name":"Profile"},{"baseConfigurationFileReference":"bfdfe7dc352907fc980b868725387e98d9147eb705ef7701ac589855737d9572","buildSettings":{"CLANG_ENABLE_OBJC_WEAK":"NO","CODE_SIGN_IDENTITY[sdk=appletvos*]":"","CODE_SIGN_IDENTITY[sdk=iphoneos*]":"","CODE_SIGN_IDENTITY[sdk=watchos*]":"","CURRENT_PROJECT_VERSION":"1","DEFINES_MODULE":"YES","DYLIB_COMPATIBILITY_VERSION":"1","DYLIB_CURRENT_VERSION":"1","DYLIB_INSTALL_NAME_BASE":"@rpath","ENABLE_MODULE_VERIFIER":"NO","ENABLE_USER_SCRIPT_SANDBOXING":"NO","GCC_PREFIX_HEADER":"Target Support Files/FirebaseCoreInternal/FirebaseCoreInternal-prefix.pch","GENERATE_INFOPLIST_FILE":"NO","INFOPLIST_FILE":"Target Support Files/FirebaseCoreInternal/FirebaseCoreInternal-Info.plist","INSTALL_PATH":"$(LOCAL_LIBRARY_DIR)/Frameworks","IPHONEOS_DEPLOYMENT_TARGET":"15.0","LD_RUNPATH_SEARCH_PATHS":"$(inherited) @executable_path/Frameworks @loader_path/Frameworks","MODULEMAP_FILE":"Target Support Files/FirebaseCoreInternal/FirebaseCoreInternal.modulemap","PRODUCT_MODULE_NAME":"FirebaseCoreInternal","PRODUCT_NAME":"FirebaseCoreInternal","SDKROOT":"iphoneos","SKIP_INSTALL":"YES","SWIFT_ACTIVE_COMPILATION_CONDITIONS":"$(inherited) ","SWIFT_INSTALL_OBJC_HEADER":"YES","SWIFT_VERSION":"5.9","TARGETED_DEVICE_FAMILY":"1,2","VALIDATE_PRODUCT":"YES","VERSIONING_SYSTEM":"apple-generic","VERSION_INFO_PREFIX":""},"guid":"bfdfe7dc352907fc980b868725387e987e49c5c2e0d0e3660e656c636534d89e","name":"Release"}],"buildPhases":[{"buildFiles":[{"fileReference":"bfdfe7dc352907fc980b868725387e98f58230de926dbcf32485d1422b47f24e","guid":"bfdfe7dc352907fc980b868725387e9865ffd85b7f0ec30c195efd65c0ed4864","headerVisibility":"public"}],"guid":"bfdfe7dc352907fc980b868725387e989ee74b6cb3e783bde9b3e9aa17c4b030","type":"com.apple.buildphase.headers"},{"buildFiles":[{"fileReference":"bfdfe7dc352907fc980b868725387e98593f6dae4d99a30c132d62107a81aa3d","guid":"bfdfe7dc352907fc980b868725387e98f1ea80bb63200a55cee504571102b105"},{"fileReference":"bfdfe7dc352907fc980b868725387e98a54c9801248b47f1be63245cbf224d35","guid":"bfdfe7dc352907fc980b868725387e98fb9046c505d67b720f5c045edfd1baa6"},{"fileReference":"bfdfe7dc352907fc980b868725387e980896766df14a9046b4bc17a9df2f2c95","guid":"bfdfe7dc352907fc980b868725387e98f2618bb7ecbe230b56dc041dad8ea9eb"},{"fileReference":"bfdfe7dc352907fc980b868725387e98c4923971f83aa387b26c7b1cbb3461a3","guid":"bfdfe7dc352907fc980b868725387e98cb1d6dbc80be517122aab0cb0b28ea1a"},{"fileReference":"bfdfe7dc352907fc980b868725387e98b11e742c4a53da542ea1cf321d4e26d0","guid":"bfdfe7dc352907fc980b868725387e9870b56cb875b24c9659feec087e5d2611"},{"fileReference":"bfdfe7dc352907fc980b868725387e982094f37cc1ad3624de7ad36386c6f411","guid":"bfdfe7dc352907fc980b868725387e98465b883b5b87788e23fa539cacbfb5b1"},{"fileReference":"bfdfe7dc352907fc980b868725387e989c3eb4c9df3e35b9bec6678a11018e5d","guid":"bfdfe7dc352907fc980b868725387e980d4f2c99df729b33e0d59a3de295cc9b"},{"fileReference":"bfdfe7dc352907fc980b868725387e98a4e413da7fd7f4faf80ef89285732c22","guid":"bfdfe7dc352907fc980b868725387e9848104916b5ef754223d604646af44d24"},{"fileReference":"bfdfe7dc352907fc980b868725387e988bf2e7afd647207a48e69cf948defc3b","guid":"bfdfe7dc352907fc980b868725387e98d06e31f92447fac27241fcf0d3680a06"},{"fileReference":"bfdfe7dc352907fc980b868725387e98c954661eb8509838d8fb450920a2f8e0","guid":"bfdfe7dc352907fc980b868725387e98f7f03bf9bfb1a22b232b397c960315e6"},{"fileReference":"bfdfe7dc352907fc980b868725387e98f311c41c00ccd9d7c5b428bac6ece171","guid":"bfdfe7dc352907fc980b868725387e98ecc0ff87552d047b0f63420d1fea5327"},{"fileReference":"bfdfe7dc352907fc980b868725387e98b98bef66718986a1b7d33bc52200004f","guid":"bfdfe7dc352907fc980b868725387e98504f0fac6dafb533e98a0e3525c1b686"},{"fileReference":"bfdfe7dc352907fc980b868725387e98f6fd1de5036398d6723d5839a7b109e2","guid":"bfdfe7dc352907fc980b868725387e98b584f86dea2cc420940b8a969cf67229"},{"fileReference":"bfdfe7dc352907fc980b868725387e98ce5e4868163131e336f7e6d43faeef31","guid":"bfdfe7dc352907fc980b868725387e9874a73f512a7ec185dd66b710dafb55b6"}],"guid":"bfdfe7dc352907fc980b868725387e9881092ad92129aab1f82c398bb12c2bbd","type":"com.apple.buildphase.sources"},{"buildFiles":[{"fileReference":"bfdfe7dc352907fc980b868725387e98b14af7c49882340ad551cb13b0a1e06d","guid":"bfdfe7dc352907fc980b868725387e98a339ba772c8b2c8441aea3db8f7b1f38"}],"guid":"bfdfe7dc352907fc980b868725387e98c6658247b73c5623dfc421ba205fbf85","type":"com.apple.buildphase.frameworks"},{"buildFiles":[{"guid":"bfdfe7dc352907fc980b868725387e98630c123717965a20217d70ab52a6ac91","targetReference":"bfdfe7dc352907fc980b868725387e98e5b592b076e092ab7ac9d9b5c85edc6f"}],"guid":"bfdfe7dc352907fc980b868725387e98dc70ed4bbc47154bf942cc9ca90a860b","type":"com.apple.buildphase.resources"}],"buildRules":[],"dependencies":[{"guid":"bfdfe7dc352907fc980b868725387e98e5b592b076e092ab7ac9d9b5c85edc6f","name":"FirebaseCoreInternal-FirebaseCoreInternal_Privacy"},{"guid":"bfdfe7dc352907fc980b868725387e98718890dfdac589615663a02d43d9af3e","name":"GoogleUtilities"}],"guid":"bfdfe7dc352907fc980b868725387e98020791fd2e7b7ddc8fb2658339c42e16","name":"FirebaseCoreInternal","predominantSourceCodeLanguage":"Xcode.SourceCodeLanguage.Swift","productReference":{"guid":"bfdfe7dc352907fc980b868725387e983d86e87924acfad2934921ce7ad9fbea","name":"FirebaseCoreInternal.framework","type":"product"},"productTypeIdentifier":"com.apple.product-type.framework","provisioningSourceData":[{"bundleIdentifierFromInfoPlist":"${PRODUCT_BUNDLE_IDENTIFIER}","configurationName":"Debug","provisioningStyle":1},{"bundleIdentifierFromInfoPlist":"${PRODUCT_BUNDLE_IDENTIFIER}","configurationName":"Profile","provisioningStyle":1},{"bundleIdentifierFromInfoPlist":"${PRODUCT_BUNDLE_IDENTIFIER}","configurationName":"Release","provisioningStyle":1}],"type":"standard"} \ No newline at end of file diff --git a/mih_ui/android/build/ios/XCBuildData/PIFCache/target/TARGET@v11_hash=1140ca82d597cd38dc60054d3a158f68-json b/mih_ui/android/build/ios/XCBuildData/PIFCache/target/TARGET@v11_hash=1140ca82d597cd38dc60054d3a158f68-json new file mode 100644 index 00000000..09e5918b --- /dev/null +++ b/mih_ui/android/build/ios/XCBuildData/PIFCache/target/TARGET@v11_hash=1140ca82d597cd38dc60054d3a158f68-json @@ -0,0 +1 @@ +{"buildConfigurations":[{"baseConfigurationFileReference":"bfdfe7dc352907fc980b868725387e98dcbcbc7a5e77c993122880547c8ba2bb","buildSettings":{"ASSETCATALOG_COMPILER_APPICON_NAME":"AppIcon","ASSETCATALOG_COMPILER_GLOBAL_ACCENT_COLOR_NAME":"AccentColor","CLANG_ENABLE_OBJC_WEAK":"NO","ENABLE_USER_SCRIPT_SANDBOXING":"NO","IPHONEOS_DEPLOYMENT_TARGET":"13.0","LD_RUNPATH_SEARCH_PATHS":"$(inherited) @executable_path/Frameworks","ONLY_ACTIVE_ARCH":"NO","SDKROOT":"iphoneos","TARGETED_DEVICE_FAMILY":"1,2"},"guid":"bfdfe7dc352907fc980b868725387e980bc977b873df9b0e01b3c822e5c77429","name":"Debug"},{"baseConfigurationFileReference":"bfdfe7dc352907fc980b868725387e982275ed66a3f7f3088878aa0c9e2d181a","buildSettings":{"ASSETCATALOG_COMPILER_APPICON_NAME":"AppIcon","ASSETCATALOG_COMPILER_GLOBAL_ACCENT_COLOR_NAME":"AccentColor","CLANG_ENABLE_OBJC_WEAK":"NO","ENABLE_USER_SCRIPT_SANDBOXING":"NO","IPHONEOS_DEPLOYMENT_TARGET":"13.0","LD_RUNPATH_SEARCH_PATHS":"$(inherited) @executable_path/Frameworks","SDKROOT":"iphoneos","TARGETED_DEVICE_FAMILY":"1,2","VALIDATE_PRODUCT":"YES"},"guid":"bfdfe7dc352907fc980b868725387e98b75274b69084014a6a5ac37ea7a9d4bc","name":"Profile"},{"baseConfigurationFileReference":"bfdfe7dc352907fc980b868725387e982275ed66a3f7f3088878aa0c9e2d181a","buildSettings":{"ASSETCATALOG_COMPILER_APPICON_NAME":"AppIcon","ASSETCATALOG_COMPILER_GLOBAL_ACCENT_COLOR_NAME":"AccentColor","CLANG_ENABLE_OBJC_WEAK":"NO","ENABLE_USER_SCRIPT_SANDBOXING":"NO","IPHONEOS_DEPLOYMENT_TARGET":"13.0","LD_RUNPATH_SEARCH_PATHS":"$(inherited) @executable_path/Frameworks","SDKROOT":"iphoneos","TARGETED_DEVICE_FAMILY":"1,2","VALIDATE_PRODUCT":"YES"},"guid":"bfdfe7dc352907fc980b868725387e988b8e6347e534cb57e9bb1b22dc47b716","name":"Release"}],"buildPhases":[],"buildRules":[],"dependencies":[],"guid":"bfdfe7dc352907fc980b868725387e989da425bb6d6d5d8dbb95e4afffb82217","name":"Flutter","provisioningSourceData":[{"bundleIdentifierFromInfoPlist":"","configurationName":"Debug","provisioningStyle":0},{"bundleIdentifierFromInfoPlist":"","configurationName":"Profile","provisioningStyle":0},{"bundleIdentifierFromInfoPlist":"","configurationName":"Release","provisioningStyle":0}],"type":"aggregate"} \ No newline at end of file diff --git a/mih_ui/android/build/ios/XCBuildData/PIFCache/target/TARGET@v11_hash=14b6e6d9e2eda3680623b9cb266fb1b3-json b/mih_ui/android/build/ios/XCBuildData/PIFCache/target/TARGET@v11_hash=14b6e6d9e2eda3680623b9cb266fb1b3-json new file mode 100644 index 00000000..f8c50633 --- /dev/null +++ b/mih_ui/android/build/ios/XCBuildData/PIFCache/target/TARGET@v11_hash=14b6e6d9e2eda3680623b9cb266fb1b3-json @@ -0,0 +1 @@ +{"buildConfigurations":[{"baseConfigurationFileReference":"bfdfe7dc352907fc980b868725387e98089a265d15a8f52f9e25ea32540ea5cd","buildSettings":{"CODE_SIGNING_ALLOWED":"NO","CODE_SIGNING_IDENTITY":"-","CODE_SIGNING_REQUIRED":"NO","CONFIGURATION_BUILD_DIR":"$(BUILD_DIR)/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME)/package_info_plus","EXPANDED_CODE_SIGN_IDENTITY":"-","IBSC_MODULE":"package_info_plus","INFOPLIST_FILE":"Target Support Files/package_info_plus/ResourceBundle-package_info_plus_privacy-package_info_plus-Info.plist","IPHONEOS_DEPLOYMENT_TARGET":"12.0","ONLY_ACTIVE_ARCH":"NO","PRODUCT_NAME":"package_info_plus_privacy","SDKROOT":"iphoneos","SKIP_INSTALL":"YES","TARGETED_DEVICE_FAMILY":"1,2","WRAPPER_EXTENSION":"bundle"},"guid":"bfdfe7dc352907fc980b868725387e98086fbffdd1042f07c4960ae59c08c889","name":"Debug"},{"baseConfigurationFileReference":"bfdfe7dc352907fc980b868725387e9811034d0cd45341ec5fddd8ae14b45098","buildSettings":{"CLANG_ENABLE_OBJC_WEAK":"NO","CODE_SIGNING_ALLOWED":"NO","CODE_SIGNING_IDENTITY":"-","CODE_SIGNING_REQUIRED":"NO","CONFIGURATION_BUILD_DIR":"$(BUILD_DIR)/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME)/package_info_plus","EXPANDED_CODE_SIGN_IDENTITY":"-","IBSC_MODULE":"package_info_plus","INFOPLIST_FILE":"Target Support Files/package_info_plus/ResourceBundle-package_info_plus_privacy-package_info_plus-Info.plist","IPHONEOS_DEPLOYMENT_TARGET":"12.0","PRODUCT_NAME":"package_info_plus_privacy","SDKROOT":"iphoneos","SKIP_INSTALL":"YES","TARGETED_DEVICE_FAMILY":"1,2","VALIDATE_PRODUCT":"YES","WRAPPER_EXTENSION":"bundle"},"guid":"bfdfe7dc352907fc980b868725387e98fb69f0822e220d5db24cd93d3b9ece6a","name":"Profile"},{"baseConfigurationFileReference":"bfdfe7dc352907fc980b868725387e9811034d0cd45341ec5fddd8ae14b45098","buildSettings":{"CODE_SIGNING_ALLOWED":"NO","CODE_SIGNING_IDENTITY":"-","CODE_SIGNING_REQUIRED":"NO","CONFIGURATION_BUILD_DIR":"$(BUILD_DIR)/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME)/package_info_plus","EXPANDED_CODE_SIGN_IDENTITY":"-","IBSC_MODULE":"package_info_plus","INFOPLIST_FILE":"Target Support Files/package_info_plus/ResourceBundle-package_info_plus_privacy-package_info_plus-Info.plist","IPHONEOS_DEPLOYMENT_TARGET":"12.0","PRODUCT_NAME":"package_info_plus_privacy","SDKROOT":"iphoneos","SKIP_INSTALL":"YES","TARGETED_DEVICE_FAMILY":"1,2","WRAPPER_EXTENSION":"bundle"},"guid":"bfdfe7dc352907fc980b868725387e98a86b22695c7b114b0b5d3acbd271ad72","name":"Release"}],"buildPhases":[{"buildFiles":[],"guid":"bfdfe7dc352907fc980b868725387e980036fb056e70f26b992370f8a0635a97","type":"com.apple.buildphase.sources"},{"buildFiles":[],"guid":"bfdfe7dc352907fc980b868725387e984d5bd123c512ee74d0cc1c57914e14ec","type":"com.apple.buildphase.frameworks"},{"buildFiles":[{"fileReference":"bfdfe7dc352907fc980b868725387e98acc94a90b20547c25ffbe2fd16f0028a","guid":"bfdfe7dc352907fc980b868725387e98d2483853a91fcc73342f348b5323c524"}],"guid":"bfdfe7dc352907fc980b868725387e98ad78d1650baee242af866560206ed06e","type":"com.apple.buildphase.resources"}],"buildRules":[],"dependencies":[],"guid":"bfdfe7dc352907fc980b868725387e987b6c2f882d164ef4f3c76673562685a1","name":"package_info_plus-package_info_plus_privacy","productReference":{"guid":"bfdfe7dc352907fc980b868725387e982a9852aa81a16cf5578d0e8c78b5679a","name":"package_info_plus_privacy.bundle","type":"product"},"productTypeIdentifier":"com.apple.product-type.bundle","provisioningSourceData":[{"bundleIdentifierFromInfoPlist":"${PRODUCT_BUNDLE_IDENTIFIER}","configurationName":"Debug","provisioningStyle":0},{"bundleIdentifierFromInfoPlist":"${PRODUCT_BUNDLE_IDENTIFIER}","configurationName":"Profile","provisioningStyle":0},{"bundleIdentifierFromInfoPlist":"${PRODUCT_BUNDLE_IDENTIFIER}","configurationName":"Release","provisioningStyle":0}],"type":"standard"} \ No newline at end of file diff --git a/mih_ui/android/build/ios/XCBuildData/PIFCache/target/TARGET@v11_hash=1a4fe29d3cb9f9220793e4797839ee1f-json b/mih_ui/android/build/ios/XCBuildData/PIFCache/target/TARGET@v11_hash=1a4fe29d3cb9f9220793e4797839ee1f-json new file mode 100644 index 00000000..29acb733 --- /dev/null +++ b/mih_ui/android/build/ios/XCBuildData/PIFCache/target/TARGET@v11_hash=1a4fe29d3cb9f9220793e4797839ee1f-json @@ -0,0 +1 @@ +{"buildConfigurations":[{"baseConfigurationFileReference":"bfdfe7dc352907fc980b868725387e98de35fcdac3f67fe0119b4d27e7b7c6d4","buildSettings":{"CLANG_ENABLE_OBJC_WEAK":"NO","CLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER":"NO","CODE_SIGN_IDENTITY[sdk=appletvos*]":"","CODE_SIGN_IDENTITY[sdk=iphoneos*]":"","CODE_SIGN_IDENTITY[sdk=watchos*]":"","CURRENT_PROJECT_VERSION":"1","DYLIB_COMPATIBILITY_VERSION":"1","DYLIB_CURRENT_VERSION":"1","DYLIB_INSTALL_NAME_BASE":"@rpath","ENABLE_BITCODE":"NO","ENABLE_MODULE_VERIFIER":"NO","ENABLE_USER_SCRIPT_SANDBOXING":"NO","EXCLUDED_ARCHS[sdk=iphoneos*]":"$(inherited) armv7","EXCLUDED_ARCHS[sdk=iphonesimulator*]":"$(inherited) i386","FRAMEWORK_SEARCH_PATHS[sdk=iphoneos*]":"\"/Users/yaso_meth/Git/flutter/bin/cache/artifacts/engine/ios/Flutter.xcframework/ios-arm64\" $(inherited)","FRAMEWORK_SEARCH_PATHS[sdk=iphonesimulator*]":"\"/Users/yaso_meth/Git/flutter/bin/cache/artifacts/engine/ios/Flutter.xcframework/ios-arm64_x86_64-simulator\" $(inherited)","GCC_PREFIX_HEADER":"Target Support Files/share_plus/share_plus-prefix.pch","GENERATE_INFOPLIST_FILE":"NO","INFOPLIST_FILE":"Target Support Files/share_plus/share_plus-Info.plist","INSTALL_PATH":"$(LOCAL_LIBRARY_DIR)/Frameworks","LD_RUNPATH_SEARCH_PATHS":"$(inherited) @executable_path/Frameworks @loader_path/Frameworks","MODULEMAP_FILE":"Target Support Files/share_plus/share_plus.modulemap","ONLY_ACTIVE_ARCH":"NO","OTHER_LDFLAGS":"$(inherited) -framework Flutter","PRODUCT_MODULE_NAME":"share_plus","PRODUCT_NAME":"share_plus","SDKROOT":"iphoneos","SKIP_INSTALL":"YES","SWIFT_ACTIVE_COMPILATION_CONDITIONS":"$(inherited) ","SWIFT_INSTALL_OBJC_HEADER":"YES","SWIFT_VERSION":"5.0","TARGETED_DEVICE_FAMILY":"1,2","VALID_ARCHS[sdk=iphonesimulator*]":"$(ARCHS_STANDARD)","VERSIONING_SYSTEM":"apple-generic","VERSION_INFO_PREFIX":""},"guid":"bfdfe7dc352907fc980b868725387e98fa50e2fc76f3c7e46550ec7ffc7bb01c","name":"Debug"},{"baseConfigurationFileReference":"bfdfe7dc352907fc980b868725387e98d3219dc3abe23add073ba57e4e5929db","buildSettings":{"CLANG_ENABLE_OBJC_WEAK":"NO","CLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER":"NO","CODE_SIGN_IDENTITY[sdk=appletvos*]":"","CODE_SIGN_IDENTITY[sdk=iphoneos*]":"","CODE_SIGN_IDENTITY[sdk=watchos*]":"","CURRENT_PROJECT_VERSION":"1","DYLIB_COMPATIBILITY_VERSION":"1","DYLIB_CURRENT_VERSION":"1","DYLIB_INSTALL_NAME_BASE":"@rpath","ENABLE_BITCODE":"NO","ENABLE_MODULE_VERIFIER":"NO","ENABLE_USER_SCRIPT_SANDBOXING":"NO","EXCLUDED_ARCHS[sdk=iphoneos*]":"$(inherited) armv7","EXCLUDED_ARCHS[sdk=iphonesimulator*]":"$(inherited) i386","FRAMEWORK_SEARCH_PATHS[sdk=iphoneos*]":"\"/Users/yaso_meth/Git/flutter/bin/cache/artifacts/engine/ios-release/Flutter.xcframework/ios-arm64\" $(inherited)","FRAMEWORK_SEARCH_PATHS[sdk=iphonesimulator*]":"\"/Users/yaso_meth/Git/flutter/bin/cache/artifacts/engine/ios-release/Flutter.xcframework/ios-arm64_x86_64-simulator\" $(inherited)","GCC_PREFIX_HEADER":"Target Support Files/share_plus/share_plus-prefix.pch","GENERATE_INFOPLIST_FILE":"NO","INFOPLIST_FILE":"Target Support Files/share_plus/share_plus-Info.plist","INSTALL_PATH":"$(LOCAL_LIBRARY_DIR)/Frameworks","LD_RUNPATH_SEARCH_PATHS":"$(inherited) @executable_path/Frameworks @loader_path/Frameworks","MODULEMAP_FILE":"Target Support Files/share_plus/share_plus.modulemap","OTHER_LDFLAGS":"$(inherited) -framework Flutter","PRODUCT_MODULE_NAME":"share_plus","PRODUCT_NAME":"share_plus","SDKROOT":"iphoneos","SKIP_INSTALL":"YES","SWIFT_ACTIVE_COMPILATION_CONDITIONS":"$(inherited) ","SWIFT_INSTALL_OBJC_HEADER":"YES","SWIFT_VERSION":"5.0","TARGETED_DEVICE_FAMILY":"1,2","VALIDATE_PRODUCT":"YES","VALID_ARCHS[sdk=iphonesimulator*]":"$(ARCHS_STANDARD)","VERSIONING_SYSTEM":"apple-generic","VERSION_INFO_PREFIX":""},"guid":"bfdfe7dc352907fc980b868725387e98e553b9382cc24bd5b1414348a7055016","name":"Profile"},{"baseConfigurationFileReference":"bfdfe7dc352907fc980b868725387e98d3219dc3abe23add073ba57e4e5929db","buildSettings":{"CLANG_ENABLE_OBJC_WEAK":"NO","CLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER":"NO","CODE_SIGN_IDENTITY[sdk=appletvos*]":"","CODE_SIGN_IDENTITY[sdk=iphoneos*]":"","CODE_SIGN_IDENTITY[sdk=watchos*]":"","CURRENT_PROJECT_VERSION":"1","DYLIB_COMPATIBILITY_VERSION":"1","DYLIB_CURRENT_VERSION":"1","DYLIB_INSTALL_NAME_BASE":"@rpath","ENABLE_BITCODE":"NO","ENABLE_MODULE_VERIFIER":"NO","ENABLE_USER_SCRIPT_SANDBOXING":"NO","EXCLUDED_ARCHS[sdk=iphoneos*]":"$(inherited) armv7","EXCLUDED_ARCHS[sdk=iphonesimulator*]":"$(inherited) i386","FRAMEWORK_SEARCH_PATHS[sdk=iphoneos*]":"\"/Users/yaso_meth/Git/flutter/bin/cache/artifacts/engine/ios-release/Flutter.xcframework/ios-arm64\" $(inherited)","FRAMEWORK_SEARCH_PATHS[sdk=iphonesimulator*]":"\"/Users/yaso_meth/Git/flutter/bin/cache/artifacts/engine/ios-release/Flutter.xcframework/ios-arm64_x86_64-simulator\" $(inherited)","GCC_PREFIX_HEADER":"Target Support Files/share_plus/share_plus-prefix.pch","GENERATE_INFOPLIST_FILE":"NO","INFOPLIST_FILE":"Target Support Files/share_plus/share_plus-Info.plist","INSTALL_PATH":"$(LOCAL_LIBRARY_DIR)/Frameworks","LD_RUNPATH_SEARCH_PATHS":"$(inherited) @executable_path/Frameworks @loader_path/Frameworks","MODULEMAP_FILE":"Target Support Files/share_plus/share_plus.modulemap","OTHER_LDFLAGS":"$(inherited) -framework Flutter","PRODUCT_MODULE_NAME":"share_plus","PRODUCT_NAME":"share_plus","SDKROOT":"iphoneos","SKIP_INSTALL":"YES","SWIFT_ACTIVE_COMPILATION_CONDITIONS":"$(inherited) ","SWIFT_INSTALL_OBJC_HEADER":"YES","SWIFT_VERSION":"5.0","TARGETED_DEVICE_FAMILY":"1,2","VALIDATE_PRODUCT":"YES","VALID_ARCHS[sdk=iphonesimulator*]":"$(ARCHS_STANDARD)","VERSIONING_SYSTEM":"apple-generic","VERSION_INFO_PREFIX":""},"guid":"bfdfe7dc352907fc980b868725387e9806962fb3610a587387aa54c43210d4b3","name":"Release"}],"buildPhases":[{"buildFiles":[{"fileReference":"bfdfe7dc352907fc980b868725387e986c6ddc4ee2f3ea412c1028067a0fee4c","guid":"bfdfe7dc352907fc980b868725387e980f8f3deae531c7d612b13ade317f163f","headerVisibility":"public"},{"fileReference":"bfdfe7dc352907fc980b868725387e983a3ff60a16fd5c441672e7e40ef2e624","guid":"bfdfe7dc352907fc980b868725387e982ea795dc0be844d6be5410e75e86c1c3","headerVisibility":"public"}],"guid":"bfdfe7dc352907fc980b868725387e98865ac88938aac084ee38b49d0be68c79","type":"com.apple.buildphase.headers"},{"buildFiles":[{"fileReference":"bfdfe7dc352907fc980b868725387e98119c9eb9886f3635874ecb6a94a2f0d4","guid":"bfdfe7dc352907fc980b868725387e98b14be1c2661bdd1d98ad268062b02ea9"},{"fileReference":"bfdfe7dc352907fc980b868725387e98ac3d4b3149126b081d5bc50806117e1a","guid":"bfdfe7dc352907fc980b868725387e981dd4d47921a1bb9bb51aeffb52b2667c"}],"guid":"bfdfe7dc352907fc980b868725387e984e1dbd6e430296b13520d2f888421896","type":"com.apple.buildphase.sources"},{"buildFiles":[{"fileReference":"bfdfe7dc352907fc980b868725387e98b14af7c49882340ad551cb13b0a1e06d","guid":"bfdfe7dc352907fc980b868725387e985b8ff78a3ba34afe55fbbcea034c09f0"}],"guid":"bfdfe7dc352907fc980b868725387e98cb9a2b042b08bd6c2e561afd4c78e4d4","type":"com.apple.buildphase.frameworks"},{"buildFiles":[{"guid":"bfdfe7dc352907fc980b868725387e98831b06cee1c8abfe0f9885d5d85abea1","targetReference":"bfdfe7dc352907fc980b868725387e98de00f90750e7753637464fe34137709d"}],"guid":"bfdfe7dc352907fc980b868725387e984f4190b0e881c91b258e089514665437","type":"com.apple.buildphase.resources"}],"buildRules":[],"dependencies":[{"guid":"bfdfe7dc352907fc980b868725387e989da425bb6d6d5d8dbb95e4afffb82217","name":"Flutter"},{"guid":"bfdfe7dc352907fc980b868725387e98de00f90750e7753637464fe34137709d","name":"share_plus-share_plus_privacy"}],"guid":"bfdfe7dc352907fc980b868725387e98848ff9cf74c635f5324731538a1c853f","name":"share_plus","predominantSourceCodeLanguage":"Xcode.SourceCodeLanguage.Objective-C","productReference":{"guid":"bfdfe7dc352907fc980b868725387e98ae2d3cb0c689d7eba802899edfe718f3","name":"share_plus.framework","type":"product"},"productTypeIdentifier":"com.apple.product-type.framework","provisioningSourceData":[{"bundleIdentifierFromInfoPlist":"${PRODUCT_BUNDLE_IDENTIFIER}","configurationName":"Debug","provisioningStyle":1},{"bundleIdentifierFromInfoPlist":"${PRODUCT_BUNDLE_IDENTIFIER}","configurationName":"Profile","provisioningStyle":1},{"bundleIdentifierFromInfoPlist":"${PRODUCT_BUNDLE_IDENTIFIER}","configurationName":"Release","provisioningStyle":1}],"type":"standard"} \ No newline at end of file diff --git a/mih_ui/android/build/ios/XCBuildData/PIFCache/target/TARGET@v11_hash=1abbdfc13b53a75a94289fd5712275b6-json b/mih_ui/android/build/ios/XCBuildData/PIFCache/target/TARGET@v11_hash=1abbdfc13b53a75a94289fd5712275b6-json new file mode 100644 index 00000000..24fc0852 --- /dev/null +++ b/mih_ui/android/build/ios/XCBuildData/PIFCache/target/TARGET@v11_hash=1abbdfc13b53a75a94289fd5712275b6-json @@ -0,0 +1 @@ +{"buildConfigurations":[{"baseConfigurationFileReference":"bfdfe7dc352907fc980b868725387e986b056fb7813eab8b622dbbdb4b6201da","buildSettings":{"CODE_SIGNING_ALLOWED":"NO","CODE_SIGNING_IDENTITY":"-","CODE_SIGNING_REQUIRED":"NO","CONFIGURATION_BUILD_DIR":"$(BUILD_DIR)/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME)/url_launcher_ios","EXPANDED_CODE_SIGN_IDENTITY":"-","IBSC_MODULE":"url_launcher_ios","INFOPLIST_FILE":"Target Support Files/url_launcher_ios/ResourceBundle-url_launcher_ios_privacy-url_launcher_ios-Info.plist","IPHONEOS_DEPLOYMENT_TARGET":"12.0","ONLY_ACTIVE_ARCH":"NO","PRODUCT_NAME":"url_launcher_ios_privacy","SDKROOT":"iphoneos","SKIP_INSTALL":"YES","TARGETED_DEVICE_FAMILY":"1,2","WRAPPER_EXTENSION":"bundle"},"guid":"bfdfe7dc352907fc980b868725387e9849f55a8954fd158d2bb7eeb077a7f738","name":"Debug"},{"baseConfigurationFileReference":"bfdfe7dc352907fc980b868725387e982e8b062cb2e7d8455d114188a1500a94","buildSettings":{"CLANG_ENABLE_OBJC_WEAK":"NO","CODE_SIGNING_ALLOWED":"NO","CODE_SIGNING_IDENTITY":"-","CODE_SIGNING_REQUIRED":"NO","CONFIGURATION_BUILD_DIR":"$(BUILD_DIR)/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME)/url_launcher_ios","EXPANDED_CODE_SIGN_IDENTITY":"-","IBSC_MODULE":"url_launcher_ios","INFOPLIST_FILE":"Target Support Files/url_launcher_ios/ResourceBundle-url_launcher_ios_privacy-url_launcher_ios-Info.plist","IPHONEOS_DEPLOYMENT_TARGET":"12.0","PRODUCT_NAME":"url_launcher_ios_privacy","SDKROOT":"iphoneos","SKIP_INSTALL":"YES","TARGETED_DEVICE_FAMILY":"1,2","VALIDATE_PRODUCT":"YES","WRAPPER_EXTENSION":"bundle"},"guid":"bfdfe7dc352907fc980b868725387e98ee5361fd881ec2d400015f1265b2e272","name":"Profile"},{"baseConfigurationFileReference":"bfdfe7dc352907fc980b868725387e982e8b062cb2e7d8455d114188a1500a94","buildSettings":{"CODE_SIGNING_ALLOWED":"NO","CODE_SIGNING_IDENTITY":"-","CODE_SIGNING_REQUIRED":"NO","CONFIGURATION_BUILD_DIR":"$(BUILD_DIR)/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME)/url_launcher_ios","EXPANDED_CODE_SIGN_IDENTITY":"-","IBSC_MODULE":"url_launcher_ios","INFOPLIST_FILE":"Target Support Files/url_launcher_ios/ResourceBundle-url_launcher_ios_privacy-url_launcher_ios-Info.plist","IPHONEOS_DEPLOYMENT_TARGET":"12.0","PRODUCT_NAME":"url_launcher_ios_privacy","SDKROOT":"iphoneos","SKIP_INSTALL":"YES","TARGETED_DEVICE_FAMILY":"1,2","WRAPPER_EXTENSION":"bundle"},"guid":"bfdfe7dc352907fc980b868725387e981c7d4994c0064d3ceceb2e8ad26c5de1","name":"Release"}],"buildPhases":[{"buildFiles":[],"guid":"bfdfe7dc352907fc980b868725387e9856533e12f3c8cd22a7146d3d1e75a783","type":"com.apple.buildphase.sources"},{"buildFiles":[],"guid":"bfdfe7dc352907fc980b868725387e989d450ecd61cde185e930f37e7e523c50","type":"com.apple.buildphase.frameworks"},{"buildFiles":[{"fileReference":"bfdfe7dc352907fc980b868725387e980ee24ebd45c579186ae60d129b553bed","guid":"bfdfe7dc352907fc980b868725387e98283621da68b66680271886dd63420519"}],"guid":"bfdfe7dc352907fc980b868725387e9835d5ecdaa2416776646536fdd7ec6057","type":"com.apple.buildphase.resources"}],"buildRules":[],"dependencies":[],"guid":"bfdfe7dc352907fc980b868725387e9891b3b8cc56823cdea4b418e009a423b2","name":"url_launcher_ios-url_launcher_ios_privacy","productReference":{"guid":"bfdfe7dc352907fc980b868725387e9827df8da513ac7d6928fc311b53a7155d","name":"url_launcher_ios_privacy.bundle","type":"product"},"productTypeIdentifier":"com.apple.product-type.bundle","provisioningSourceData":[{"bundleIdentifierFromInfoPlist":"${PRODUCT_BUNDLE_IDENTIFIER}","configurationName":"Debug","provisioningStyle":0},{"bundleIdentifierFromInfoPlist":"${PRODUCT_BUNDLE_IDENTIFIER}","configurationName":"Profile","provisioningStyle":0},{"bundleIdentifierFromInfoPlist":"${PRODUCT_BUNDLE_IDENTIFIER}","configurationName":"Release","provisioningStyle":0}],"type":"standard"} \ No newline at end of file diff --git a/mih_ui/android/build/ios/XCBuildData/PIFCache/target/TARGET@v11_hash=1e4d2a3be90cd0a545f0c49cf9dce02c-json b/mih_ui/android/build/ios/XCBuildData/PIFCache/target/TARGET@v11_hash=1e4d2a3be90cd0a545f0c49cf9dce02c-json new file mode 100644 index 00000000..a2b07623 --- /dev/null +++ b/mih_ui/android/build/ios/XCBuildData/PIFCache/target/TARGET@v11_hash=1e4d2a3be90cd0a545f0c49cf9dce02c-json @@ -0,0 +1 @@ +{"buildConfigurations":[{"baseConfigurationFileReference":"bfdfe7dc352907fc980b868725387e9826aabbf6d6b2201c6400dd7fc8a0967f","buildSettings":{"CLANG_ENABLE_OBJC_WEAK":"NO","CLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER":"NO","CODE_SIGN_IDENTITY[sdk=appletvos*]":"","CODE_SIGN_IDENTITY[sdk=iphoneos*]":"","CODE_SIGN_IDENTITY[sdk=watchos*]":"","CURRENT_PROJECT_VERSION":"1","DYLIB_COMPATIBILITY_VERSION":"1","DYLIB_CURRENT_VERSION":"1","DYLIB_INSTALL_NAME_BASE":"@rpath","ENABLE_BITCODE":"NO","ENABLE_MODULE_VERIFIER":"NO","ENABLE_USER_SCRIPT_SANDBOXING":"NO","EXCLUDED_ARCHS[sdk=iphoneos*]":"$(inherited) armv7","EXCLUDED_ARCHS[sdk=iphonesimulator*]":"$(inherited) i386","FRAMEWORK_SEARCH_PATHS[sdk=iphoneos*]":"\"/Users/yaso_meth/Git/flutter/bin/cache/artifacts/engine/ios/Flutter.xcframework/ios-arm64\" $(inherited)","FRAMEWORK_SEARCH_PATHS[sdk=iphonesimulator*]":"\"/Users/yaso_meth/Git/flutter/bin/cache/artifacts/engine/ios/Flutter.xcframework/ios-arm64_x86_64-simulator\" $(inherited)","GCC_PREFIX_HEADER":"Target Support Files/local_auth_darwin/local_auth_darwin-prefix.pch","GENERATE_INFOPLIST_FILE":"NO","INFOPLIST_FILE":"Target Support Files/local_auth_darwin/local_auth_darwin-Info.plist","INSTALL_PATH":"$(LOCAL_LIBRARY_DIR)/Frameworks","LD_RUNPATH_SEARCH_PATHS":"$(inherited) @executable_path/Frameworks @loader_path/Frameworks","MODULEMAP_FILE":"Target Support Files/local_auth_darwin/local_auth_darwin.modulemap","ONLY_ACTIVE_ARCH":"NO","OTHER_LDFLAGS":"$(inherited) -framework Flutter","PRODUCT_MODULE_NAME":"local_auth_darwin","PRODUCT_NAME":"local_auth_darwin","SDKROOT":"iphoneos","SKIP_INSTALL":"YES","SWIFT_ACTIVE_COMPILATION_CONDITIONS":"$(inherited) ","SWIFT_INSTALL_OBJC_HEADER":"YES","SWIFT_VERSION":"5.0","TARGETED_DEVICE_FAMILY":"1,2","VALID_ARCHS[sdk=iphonesimulator*]":"$(ARCHS_STANDARD)","VERSIONING_SYSTEM":"apple-generic","VERSION_INFO_PREFIX":""},"guid":"bfdfe7dc352907fc980b868725387e98a9d9e5af04f6997b3fed9529b7465757","name":"Debug"},{"baseConfigurationFileReference":"bfdfe7dc352907fc980b868725387e9835c7588ceebde0ed281cc6f972ef1ccc","buildSettings":{"CLANG_ENABLE_OBJC_WEAK":"NO","CLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER":"NO","CODE_SIGN_IDENTITY[sdk=appletvos*]":"","CODE_SIGN_IDENTITY[sdk=iphoneos*]":"","CODE_SIGN_IDENTITY[sdk=watchos*]":"","CURRENT_PROJECT_VERSION":"1","DYLIB_COMPATIBILITY_VERSION":"1","DYLIB_CURRENT_VERSION":"1","DYLIB_INSTALL_NAME_BASE":"@rpath","ENABLE_BITCODE":"NO","ENABLE_MODULE_VERIFIER":"NO","ENABLE_USER_SCRIPT_SANDBOXING":"NO","EXCLUDED_ARCHS[sdk=iphoneos*]":"$(inherited) armv7","EXCLUDED_ARCHS[sdk=iphonesimulator*]":"$(inherited) i386","FRAMEWORK_SEARCH_PATHS[sdk=iphoneos*]":"\"/Users/yaso_meth/Git/flutter/bin/cache/artifacts/engine/ios-release/Flutter.xcframework/ios-arm64\" $(inherited)","FRAMEWORK_SEARCH_PATHS[sdk=iphonesimulator*]":"\"/Users/yaso_meth/Git/flutter/bin/cache/artifacts/engine/ios-release/Flutter.xcframework/ios-arm64_x86_64-simulator\" $(inherited)","GCC_PREFIX_HEADER":"Target Support Files/local_auth_darwin/local_auth_darwin-prefix.pch","GENERATE_INFOPLIST_FILE":"NO","INFOPLIST_FILE":"Target Support Files/local_auth_darwin/local_auth_darwin-Info.plist","INSTALL_PATH":"$(LOCAL_LIBRARY_DIR)/Frameworks","LD_RUNPATH_SEARCH_PATHS":"$(inherited) @executable_path/Frameworks @loader_path/Frameworks","MODULEMAP_FILE":"Target Support Files/local_auth_darwin/local_auth_darwin.modulemap","OTHER_LDFLAGS":"$(inherited) -framework Flutter","PRODUCT_MODULE_NAME":"local_auth_darwin","PRODUCT_NAME":"local_auth_darwin","SDKROOT":"iphoneos","SKIP_INSTALL":"YES","SWIFT_ACTIVE_COMPILATION_CONDITIONS":"$(inherited) ","SWIFT_INSTALL_OBJC_HEADER":"YES","SWIFT_VERSION":"5.0","TARGETED_DEVICE_FAMILY":"1,2","VALIDATE_PRODUCT":"YES","VALID_ARCHS[sdk=iphonesimulator*]":"$(ARCHS_STANDARD)","VERSIONING_SYSTEM":"apple-generic","VERSION_INFO_PREFIX":""},"guid":"bfdfe7dc352907fc980b868725387e985413d84bcf1d662f2a1bc6ff76cf92f5","name":"Profile"},{"baseConfigurationFileReference":"bfdfe7dc352907fc980b868725387e9835c7588ceebde0ed281cc6f972ef1ccc","buildSettings":{"CLANG_ENABLE_OBJC_WEAK":"NO","CLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER":"NO","CODE_SIGN_IDENTITY[sdk=appletvos*]":"","CODE_SIGN_IDENTITY[sdk=iphoneos*]":"","CODE_SIGN_IDENTITY[sdk=watchos*]":"","CURRENT_PROJECT_VERSION":"1","DYLIB_COMPATIBILITY_VERSION":"1","DYLIB_CURRENT_VERSION":"1","DYLIB_INSTALL_NAME_BASE":"@rpath","ENABLE_BITCODE":"NO","ENABLE_MODULE_VERIFIER":"NO","ENABLE_USER_SCRIPT_SANDBOXING":"NO","EXCLUDED_ARCHS[sdk=iphoneos*]":"$(inherited) armv7","EXCLUDED_ARCHS[sdk=iphonesimulator*]":"$(inherited) i386","FRAMEWORK_SEARCH_PATHS[sdk=iphoneos*]":"\"/Users/yaso_meth/Git/flutter/bin/cache/artifacts/engine/ios-release/Flutter.xcframework/ios-arm64\" $(inherited)","FRAMEWORK_SEARCH_PATHS[sdk=iphonesimulator*]":"\"/Users/yaso_meth/Git/flutter/bin/cache/artifacts/engine/ios-release/Flutter.xcframework/ios-arm64_x86_64-simulator\" $(inherited)","GCC_PREFIX_HEADER":"Target Support Files/local_auth_darwin/local_auth_darwin-prefix.pch","GENERATE_INFOPLIST_FILE":"NO","INFOPLIST_FILE":"Target Support Files/local_auth_darwin/local_auth_darwin-Info.plist","INSTALL_PATH":"$(LOCAL_LIBRARY_DIR)/Frameworks","LD_RUNPATH_SEARCH_PATHS":"$(inherited) @executable_path/Frameworks @loader_path/Frameworks","MODULEMAP_FILE":"Target Support Files/local_auth_darwin/local_auth_darwin.modulemap","OTHER_LDFLAGS":"$(inherited) -framework Flutter","PRODUCT_MODULE_NAME":"local_auth_darwin","PRODUCT_NAME":"local_auth_darwin","SDKROOT":"iphoneos","SKIP_INSTALL":"YES","SWIFT_ACTIVE_COMPILATION_CONDITIONS":"$(inherited) ","SWIFT_INSTALL_OBJC_HEADER":"YES","SWIFT_VERSION":"5.0","TARGETED_DEVICE_FAMILY":"1,2","VALIDATE_PRODUCT":"YES","VALID_ARCHS[sdk=iphonesimulator*]":"$(ARCHS_STANDARD)","VERSIONING_SYSTEM":"apple-generic","VERSION_INFO_PREFIX":""},"guid":"bfdfe7dc352907fc980b868725387e98b236353cceac3de794f882fb06e1890a","name":"Release"}],"buildPhases":[{"buildFiles":[{"fileReference":"bfdfe7dc352907fc980b868725387e98ad898343d17a563826d8df8267c2a015","guid":"bfdfe7dc352907fc980b868725387e98378840bdd29d8ab2e9515a5a33e3359e","headerVisibility":"public"},{"fileReference":"bfdfe7dc352907fc980b868725387e9851693e394b4c9a3739669bc6f2853f65","guid":"bfdfe7dc352907fc980b868725387e982681518474e7ceaee45243b339404e77","headerVisibility":"public"},{"fileReference":"bfdfe7dc352907fc980b868725387e9842b9afd398f7b12fdbd878a1e1fdb5cb","guid":"bfdfe7dc352907fc980b868725387e981f3e5000744e84ff1719ae1a1aeb6957","headerVisibility":"public"},{"fileReference":"bfdfe7dc352907fc980b868725387e98448a4b5517b9d1847c69072fe92810da","guid":"bfdfe7dc352907fc980b868725387e980a10425b06a35799dc132e929ee90a4e","headerVisibility":"public"}],"guid":"bfdfe7dc352907fc980b868725387e98805180487dba141f5f3620a47c45b0bb","type":"com.apple.buildphase.headers"},{"buildFiles":[{"fileReference":"bfdfe7dc352907fc980b868725387e98ae1aa1da940b2cf3059d58fa5aeb575e","guid":"bfdfe7dc352907fc980b868725387e98db62623edd41b2f6b0559f0c3afac6f2"},{"fileReference":"bfdfe7dc352907fc980b868725387e9824eab6a2af2aa1812cce719f02ee9fd4","guid":"bfdfe7dc352907fc980b868725387e988ecda68313198b3caab96c9ef9c68f44"},{"fileReference":"bfdfe7dc352907fc980b868725387e98cd73448a566c5be29cdf42df00abfae5","guid":"bfdfe7dc352907fc980b868725387e989aca1fccf2b74fcf76219b3929f09707"}],"guid":"bfdfe7dc352907fc980b868725387e989c6628aab1cde4657b2f146bc4c6303f","type":"com.apple.buildphase.sources"},{"buildFiles":[{"fileReference":"bfdfe7dc352907fc980b868725387e98b14af7c49882340ad551cb13b0a1e06d","guid":"bfdfe7dc352907fc980b868725387e98fd4e00a44784a0623be8b2c18091c770"}],"guid":"bfdfe7dc352907fc980b868725387e989173cd7bbe3b01d3250270f3d874515a","type":"com.apple.buildphase.frameworks"},{"buildFiles":[{"guid":"bfdfe7dc352907fc980b868725387e98611297d6be2a6072de2d7b739398c253","targetReference":"bfdfe7dc352907fc980b868725387e98afb8e8e2ed6a0ef9cb1d99282c22f170"}],"guid":"bfdfe7dc352907fc980b868725387e9866ce9dbd023864a453f7ba57656310c5","type":"com.apple.buildphase.resources"}],"buildRules":[],"dependencies":[{"guid":"bfdfe7dc352907fc980b868725387e989da425bb6d6d5d8dbb95e4afffb82217","name":"Flutter"},{"guid":"bfdfe7dc352907fc980b868725387e98afb8e8e2ed6a0ef9cb1d99282c22f170","name":"local_auth_darwin-local_auth_darwin_privacy"}],"guid":"bfdfe7dc352907fc980b868725387e988cbaddc02f6ec7fadc6b543cd6534960","name":"local_auth_darwin","predominantSourceCodeLanguage":"Xcode.SourceCodeLanguage.Objective-C-Plus-Plus","productReference":{"guid":"bfdfe7dc352907fc980b868725387e98a8b2f505b57b50e12043e6087151fc22","name":"local_auth_darwin.framework","type":"product"},"productTypeIdentifier":"com.apple.product-type.framework","provisioningSourceData":[{"bundleIdentifierFromInfoPlist":"${PRODUCT_BUNDLE_IDENTIFIER}","configurationName":"Debug","provisioningStyle":1},{"bundleIdentifierFromInfoPlist":"${PRODUCT_BUNDLE_IDENTIFIER}","configurationName":"Profile","provisioningStyle":1},{"bundleIdentifierFromInfoPlist":"${PRODUCT_BUNDLE_IDENTIFIER}","configurationName":"Release","provisioningStyle":1}],"type":"standard"} \ No newline at end of file diff --git a/mih_ui/android/build/ios/XCBuildData/PIFCache/target/TARGET@v11_hash=1f36083119fed8be641437f19af66acc-json b/mih_ui/android/build/ios/XCBuildData/PIFCache/target/TARGET@v11_hash=1f36083119fed8be641437f19af66acc-json new file mode 100644 index 00000000..f322850a --- /dev/null +++ b/mih_ui/android/build/ios/XCBuildData/PIFCache/target/TARGET@v11_hash=1f36083119fed8be641437f19af66acc-json @@ -0,0 +1 @@ +{"buildConfigurations":[{"baseConfigurationFileReference":"bfdfe7dc352907fc980b868725387e9870bacfaf6cde3d89a76fe4e932cc6788","buildSettings":{"CODE_SIGN_IDENTITY[sdk=appletvos*]":"","CODE_SIGN_IDENTITY[sdk=iphoneos*]":"","CODE_SIGN_IDENTITY[sdk=watchos*]":"","CURRENT_PROJECT_VERSION":"1","DYLIB_COMPATIBILITY_VERSION":"1","DYLIB_CURRENT_VERSION":"1","DYLIB_INSTALL_NAME_BASE":"@rpath","ENABLE_MODULE_VERIFIER":"NO","ENABLE_USER_SCRIPT_SANDBOXING":"NO","GENERATE_INFOPLIST_FILE":"NO","INFOPLIST_FILE":"Target Support Files/PromisesObjC/PromisesObjC-Info.plist","INSTALL_PATH":"$(LOCAL_LIBRARY_DIR)/Frameworks","IPHONEOS_DEPLOYMENT_TARGET":"9.0","LD_RUNPATH_SEARCH_PATHS":"$(inherited) @executable_path/Frameworks @loader_path/Frameworks","MODULEMAP_FILE":"Target Support Files/PromisesObjC/PromisesObjC.modulemap","ONLY_ACTIVE_ARCH":"NO","PRODUCT_MODULE_NAME":"FBLPromises","PRODUCT_NAME":"FBLPromises","SDKROOT":"iphoneos","SKIP_INSTALL":"YES","SWIFT_ACTIVE_COMPILATION_CONDITIONS":"$(inherited) ","SWIFT_INSTALL_OBJC_HEADER":"YES","SWIFT_VERSION":"5.0","TARGETED_DEVICE_FAMILY":"1,2","VERSIONING_SYSTEM":"apple-generic","VERSION_INFO_PREFIX":""},"guid":"bfdfe7dc352907fc980b868725387e98c52132de3cb297c3dd282c53e4d704df","name":"Debug"},{"baseConfigurationFileReference":"bfdfe7dc352907fc980b868725387e9889d254ad5933689bf555dbc41d2fcf23","buildSettings":{"CODE_SIGN_IDENTITY[sdk=appletvos*]":"","CODE_SIGN_IDENTITY[sdk=iphoneos*]":"","CODE_SIGN_IDENTITY[sdk=watchos*]":"","CURRENT_PROJECT_VERSION":"1","DYLIB_COMPATIBILITY_VERSION":"1","DYLIB_CURRENT_VERSION":"1","DYLIB_INSTALL_NAME_BASE":"@rpath","ENABLE_MODULE_VERIFIER":"NO","ENABLE_USER_SCRIPT_SANDBOXING":"NO","GENERATE_INFOPLIST_FILE":"NO","INFOPLIST_FILE":"Target Support Files/PromisesObjC/PromisesObjC-Info.plist","INSTALL_PATH":"$(LOCAL_LIBRARY_DIR)/Frameworks","IPHONEOS_DEPLOYMENT_TARGET":"9.0","LD_RUNPATH_SEARCH_PATHS":"$(inherited) @executable_path/Frameworks @loader_path/Frameworks","MODULEMAP_FILE":"Target Support Files/PromisesObjC/PromisesObjC.modulemap","PRODUCT_MODULE_NAME":"FBLPromises","PRODUCT_NAME":"FBLPromises","SDKROOT":"iphoneos","SKIP_INSTALL":"YES","SWIFT_ACTIVE_COMPILATION_CONDITIONS":"$(inherited) ","SWIFT_INSTALL_OBJC_HEADER":"YES","SWIFT_VERSION":"5.0","TARGETED_DEVICE_FAMILY":"1,2","VALIDATE_PRODUCT":"YES","VERSIONING_SYSTEM":"apple-generic","VERSION_INFO_PREFIX":""},"guid":"bfdfe7dc352907fc980b868725387e988459df85d865c11ed777040e666b8dff","name":"Profile"},{"baseConfigurationFileReference":"bfdfe7dc352907fc980b868725387e9889d254ad5933689bf555dbc41d2fcf23","buildSettings":{"CODE_SIGN_IDENTITY[sdk=appletvos*]":"","CODE_SIGN_IDENTITY[sdk=iphoneos*]":"","CODE_SIGN_IDENTITY[sdk=watchos*]":"","CURRENT_PROJECT_VERSION":"1","DYLIB_COMPATIBILITY_VERSION":"1","DYLIB_CURRENT_VERSION":"1","DYLIB_INSTALL_NAME_BASE":"@rpath","ENABLE_MODULE_VERIFIER":"NO","ENABLE_USER_SCRIPT_SANDBOXING":"NO","GENERATE_INFOPLIST_FILE":"NO","INFOPLIST_FILE":"Target Support Files/PromisesObjC/PromisesObjC-Info.plist","INSTALL_PATH":"$(LOCAL_LIBRARY_DIR)/Frameworks","IPHONEOS_DEPLOYMENT_TARGET":"9.0","LD_RUNPATH_SEARCH_PATHS":"$(inherited) @executable_path/Frameworks @loader_path/Frameworks","MODULEMAP_FILE":"Target Support Files/PromisesObjC/PromisesObjC.modulemap","PRODUCT_MODULE_NAME":"FBLPromises","PRODUCT_NAME":"FBLPromises","SDKROOT":"iphoneos","SKIP_INSTALL":"YES","SWIFT_ACTIVE_COMPILATION_CONDITIONS":"$(inherited) ","SWIFT_INSTALL_OBJC_HEADER":"YES","SWIFT_VERSION":"5.0","TARGETED_DEVICE_FAMILY":"1,2","VALIDATE_PRODUCT":"YES","VERSIONING_SYSTEM":"apple-generic","VERSION_INFO_PREFIX":""},"guid":"bfdfe7dc352907fc980b868725387e9856899bd0f44cb948cf9d8abe49416cd3","name":"Release"}],"buildPhases":[{"buildFiles":[{"fileReference":"bfdfe7dc352907fc980b868725387e9833df98e018adc77b9ee56cdc07aacd3f","guid":"bfdfe7dc352907fc980b868725387e982fd935af4bbc067393e903fee29653ea","headerVisibility":"public"},{"fileReference":"bfdfe7dc352907fc980b868725387e9865be438db2f61c5160b40adf875e6b14","guid":"bfdfe7dc352907fc980b868725387e98219a09b0e0ab077bc25a3912f86db88d","headerVisibility":"public"},{"fileReference":"bfdfe7dc352907fc980b868725387e98ec2937fc269337ef369568770a9974f6","guid":"bfdfe7dc352907fc980b868725387e98f23c0e0891c8fc92cf41fee59f1451a7","headerVisibility":"public"},{"fileReference":"bfdfe7dc352907fc980b868725387e986d7afd8b9ef329e8b8092b4b4d73ca33","guid":"bfdfe7dc352907fc980b868725387e98cd781db61ef2d5193461ba9af1998940","headerVisibility":"public"},{"fileReference":"bfdfe7dc352907fc980b868725387e98d96fd933472cfe31b39378ea674cb4ef","guid":"bfdfe7dc352907fc980b868725387e98d6ad8670e9e917d1c93259384d8595d3","headerVisibility":"public"},{"fileReference":"bfdfe7dc352907fc980b868725387e984258d000b808182a55ed359ba4e63953","guid":"bfdfe7dc352907fc980b868725387e981402b21e00ba4c1a4024ee13fdceeb36","headerVisibility":"public"},{"fileReference":"bfdfe7dc352907fc980b868725387e988131c2b568eaafe86a12b2ad83d7db48","guid":"bfdfe7dc352907fc980b868725387e988e759eb726648fe94edb2839399d9a7a","headerVisibility":"public"},{"fileReference":"bfdfe7dc352907fc980b868725387e984bf3ce587970ab6f7feb6f67744292b5","guid":"bfdfe7dc352907fc980b868725387e98ec4a078a9dd813c289e14a18b684b1e3","headerVisibility":"public"},{"fileReference":"bfdfe7dc352907fc980b868725387e98c73fcebb94e4884285929eea119100a0","guid":"bfdfe7dc352907fc980b868725387e983f5457c93445cbc63a19b15aea5773b4","headerVisibility":"public"},{"fileReference":"bfdfe7dc352907fc980b868725387e98ce3820605a66e6df7ad360709285dcaa","guid":"bfdfe7dc352907fc980b868725387e980ccc717db762fafbee7a87f7b5616419","headerVisibility":"public"},{"fileReference":"bfdfe7dc352907fc980b868725387e983f1026a051b69c332802557f54f5f15b","guid":"bfdfe7dc352907fc980b868725387e98a71595b7cf5e4a86dba9a76f79920127","headerVisibility":"public"},{"fileReference":"bfdfe7dc352907fc980b868725387e98cf41e5e95c462c3dc24471acd8e6551e","guid":"bfdfe7dc352907fc980b868725387e98b86282800552f32a144aac896551a95f","headerVisibility":"public"},{"fileReference":"bfdfe7dc352907fc980b868725387e9876bb9188aba89de9ffca92bd18712f1a","guid":"bfdfe7dc352907fc980b868725387e987e3b2dfebe6d8bf41757d59f0c8f03da","headerVisibility":"public"},{"fileReference":"bfdfe7dc352907fc980b868725387e98a8c1c5b1e81fee43b5a34049e1ebbef2","guid":"bfdfe7dc352907fc980b868725387e980f53d1083a1c54c5c11d6483d5ae7c39","headerVisibility":"public"},{"fileReference":"bfdfe7dc352907fc980b868725387e98fb74040e3b4703dc724128dc4259fe39","guid":"bfdfe7dc352907fc980b868725387e98fcd7f434257987d6444ced307010c9d9","headerVisibility":"public"},{"fileReference":"bfdfe7dc352907fc980b868725387e98859f6f736e1f8d98f41892e3f0b95c17","guid":"bfdfe7dc352907fc980b868725387e988972d09ae0f73373fab951d04c2c5428","headerVisibility":"public"},{"fileReference":"bfdfe7dc352907fc980b868725387e980d24fc5ca57e8742be1a4aa5fca26a6c","guid":"bfdfe7dc352907fc980b868725387e98426a7455793eb985657dfeb453ad88d6","headerVisibility":"public"},{"fileReference":"bfdfe7dc352907fc980b868725387e984901e26a9bf94289c40945076a433f5b","guid":"bfdfe7dc352907fc980b868725387e98c452c515df5668ee3a8ea7391a83a878","headerVisibility":"public"},{"fileReference":"bfdfe7dc352907fc980b868725387e9845b5945be755a7e7bb5daae3aa99c2dc","guid":"bfdfe7dc352907fc980b868725387e98cd1de55dc04ab671792b6d915bec622d","headerVisibility":"public"},{"fileReference":"bfdfe7dc352907fc980b868725387e986eee35874291a8ab220e7a802313658a","guid":"bfdfe7dc352907fc980b868725387e987e028664752f5388c0825e1c08bf83fb","headerVisibility":"private"},{"fileReference":"bfdfe7dc352907fc980b868725387e98b8523b9773a8337dad012c738c7729d0","guid":"bfdfe7dc352907fc980b868725387e98d4f0bc0407cf81373daaf261248deca0","headerVisibility":"public"},{"fileReference":"bfdfe7dc352907fc980b868725387e98b32e4e3946291ecb96c31535ac7e701c","guid":"bfdfe7dc352907fc980b868725387e98d699dac783f8cc275b24659a553c145c","headerVisibility":"public"}],"guid":"bfdfe7dc352907fc980b868725387e986c5f0044c766429735416b05a5aa5c20","type":"com.apple.buildphase.headers"},{"buildFiles":[{"fileReference":"bfdfe7dc352907fc980b868725387e98c5db8499ea7419409c1cfaef6255d1d3","guid":"bfdfe7dc352907fc980b868725387e980578427a9713e088ea73be3142402163"},{"fileReference":"bfdfe7dc352907fc980b868725387e98777d27b0a850f634f1b15c4202c2a016","guid":"bfdfe7dc352907fc980b868725387e98ee16f346ae8c0af318d77d24263285dc"},{"fileReference":"bfdfe7dc352907fc980b868725387e98ffaf0c786ee256fbae57c03e63ee964b","guid":"bfdfe7dc352907fc980b868725387e98383a83f166780ed19242aa1361919896"},{"fileReference":"bfdfe7dc352907fc980b868725387e98d2abfa3a17fc90c3c9f15d3fe7b22740","guid":"bfdfe7dc352907fc980b868725387e98617f6b7ea9a2cc5900fa248993cb5f6f"},{"fileReference":"bfdfe7dc352907fc980b868725387e981ed65769418714c2f278ad25bd9f7a36","guid":"bfdfe7dc352907fc980b868725387e98f952f96693e51b0e96ddbb03a926712f"},{"fileReference":"bfdfe7dc352907fc980b868725387e98cb71e8d54abeffaf6876d55d161f8006","guid":"bfdfe7dc352907fc980b868725387e98767307e84981f94c8260062fdbcac9d2"},{"fileReference":"bfdfe7dc352907fc980b868725387e984a5efdb875e93d5ef617a439c38360ce","guid":"bfdfe7dc352907fc980b868725387e9895fb09ffafe524a88ed0c70679db0714"},{"fileReference":"bfdfe7dc352907fc980b868725387e98b26e3f35080a2f116c44cf27fa7211e6","guid":"bfdfe7dc352907fc980b868725387e98940e6a5b2ac76719a9c33f268f069f8d"},{"fileReference":"bfdfe7dc352907fc980b868725387e988c4e1d65136512ca7286df227a07f5ab","guid":"bfdfe7dc352907fc980b868725387e981e698b8f25483dbb1dee360a06d00e1f"},{"fileReference":"bfdfe7dc352907fc980b868725387e984fce25a60148febae2186288f08b436e","guid":"bfdfe7dc352907fc980b868725387e984b8363e38c187f413cb07b88f665246f"},{"fileReference":"bfdfe7dc352907fc980b868725387e98bbda8e0bcbecd512009527784f343c26","guid":"bfdfe7dc352907fc980b868725387e981330930e21797bf1f197cfd0ca5acec5"},{"fileReference":"bfdfe7dc352907fc980b868725387e986bc4b82de6a07b4b56186b6d599cee80","guid":"bfdfe7dc352907fc980b868725387e98dc9685ec8b578ec8660c41b0b17101e2"},{"fileReference":"bfdfe7dc352907fc980b868725387e98b132b82c791d131185c0584a12d86eec","guid":"bfdfe7dc352907fc980b868725387e98d87ff2ee52abfbc02b1b58abc102f7b4"},{"fileReference":"bfdfe7dc352907fc980b868725387e983e0d7c9928fe1a8aedc0d9f70af2000e","guid":"bfdfe7dc352907fc980b868725387e98149347ff91740a502dbc151119cb3298"},{"fileReference":"bfdfe7dc352907fc980b868725387e98ade208b2779864b1dc5eccaf8a2e3787","guid":"bfdfe7dc352907fc980b868725387e98c246a31f88d476eec619d5eac8718d1d"},{"fileReference":"bfdfe7dc352907fc980b868725387e98ecaad0c1ae197eeb9134fb47589e7311","guid":"bfdfe7dc352907fc980b868725387e98bd1ebc9ad4aece0ef3c72ee9554031c0"},{"fileReference":"bfdfe7dc352907fc980b868725387e98b5d435fc4bd55488b943552a9c620acb","guid":"bfdfe7dc352907fc980b868725387e983def7557da69d248f2b6902ac6848507"},{"fileReference":"bfdfe7dc352907fc980b868725387e98cfcaeda41cd8a5573825d9903c2fb4ed","guid":"bfdfe7dc352907fc980b868725387e98d3a81484db924bfbdeda79c5ad4febc6"},{"fileReference":"bfdfe7dc352907fc980b868725387e98aa1ef7de5583853025e4a24a30edc99b","guid":"bfdfe7dc352907fc980b868725387e98055696bbfc738331d99c70f801b36a20"},{"fileReference":"bfdfe7dc352907fc980b868725387e98f0de8f3e81d724b92d50c2f87e9f8c47","guid":"bfdfe7dc352907fc980b868725387e98a8395bf7139bf939aa8435ecb8bd6612"}],"guid":"bfdfe7dc352907fc980b868725387e9866d18f195fe409f6d14b5c552b4957e6","type":"com.apple.buildphase.sources"},{"buildFiles":[{"fileReference":"bfdfe7dc352907fc980b868725387e98b14af7c49882340ad551cb13b0a1e06d","guid":"bfdfe7dc352907fc980b868725387e98cc291911c4b070c80cf04f1024c997c1"}],"guid":"bfdfe7dc352907fc980b868725387e9834e5349b38ec7d3fb7602731abb8c94d","type":"com.apple.buildphase.frameworks"},{"buildFiles":[{"guid":"bfdfe7dc352907fc980b868725387e98ec6d85c13ca9619bead8f044fd96b771","targetReference":"bfdfe7dc352907fc980b868725387e98ad53226b339581a6725de188f2c8f823"}],"guid":"bfdfe7dc352907fc980b868725387e9809836315fb3cf74db81f5b6198deb73e","type":"com.apple.buildphase.resources"}],"buildRules":[],"dependencies":[{"guid":"bfdfe7dc352907fc980b868725387e98ad53226b339581a6725de188f2c8f823","name":"PromisesObjC-FBLPromises_Privacy"}],"guid":"bfdfe7dc352907fc980b868725387e98f10882e1684b8a3dfdec597bc0a47af3","name":"PromisesObjC","predominantSourceCodeLanguage":"Xcode.SourceCodeLanguage.Objective-C-Plus-Plus","productReference":{"guid":"bfdfe7dc352907fc980b868725387e981c795e45f8d875aac88217c6a2a95faa","name":"FBLPromises.framework","type":"product"},"productTypeIdentifier":"com.apple.product-type.framework","provisioningSourceData":[{"bundleIdentifierFromInfoPlist":"${PRODUCT_BUNDLE_IDENTIFIER}","configurationName":"Debug","provisioningStyle":1},{"bundleIdentifierFromInfoPlist":"${PRODUCT_BUNDLE_IDENTIFIER}","configurationName":"Profile","provisioningStyle":1},{"bundleIdentifierFromInfoPlist":"${PRODUCT_BUNDLE_IDENTIFIER}","configurationName":"Release","provisioningStyle":1}],"type":"standard"} \ No newline at end of file diff --git a/mih_ui/android/build/ios/XCBuildData/PIFCache/target/TARGET@v11_hash=2044c736a22918f3a12ecb44d3e0c006-json b/mih_ui/android/build/ios/XCBuildData/PIFCache/target/TARGET@v11_hash=2044c736a22918f3a12ecb44d3e0c006-json new file mode 100644 index 00000000..8722b3da --- /dev/null +++ b/mih_ui/android/build/ios/XCBuildData/PIFCache/target/TARGET@v11_hash=2044c736a22918f3a12ecb44d3e0c006-json @@ -0,0 +1 @@ +{"buildConfigurations":[{"baseConfigurationFileReference":"bfdfe7dc352907fc980b868725387e9862b76e562a43dac8471f624a5cd9d3f8","buildSettings":{"CLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER":"NO","CODE_SIGN_IDENTITY[sdk=appletvos*]":"","CODE_SIGN_IDENTITY[sdk=iphoneos*]":"","CODE_SIGN_IDENTITY[sdk=watchos*]":"","CURRENT_PROJECT_VERSION":"1","DYLIB_COMPATIBILITY_VERSION":"1","DYLIB_CURRENT_VERSION":"1","DYLIB_INSTALL_NAME_BASE":"@rpath","ENABLE_BITCODE":"NO","ENABLE_MODULE_VERIFIER":"NO","ENABLE_USER_SCRIPT_SANDBOXING":"NO","EXCLUDED_ARCHS[sdk=iphoneos*]":"$(inherited) armv7","EXCLUDED_ARCHS[sdk=iphonesimulator*]":"$(inherited) i386","FRAMEWORK_SEARCH_PATHS[sdk=iphoneos*]":"\"/Users/yaso_meth/Git/flutter/bin/cache/artifacts/engine/ios/Flutter.xcframework/ios-arm64\" $(inherited)","FRAMEWORK_SEARCH_PATHS[sdk=iphonesimulator*]":"\"/Users/yaso_meth/Git/flutter/bin/cache/artifacts/engine/ios/Flutter.xcframework/ios-arm64_x86_64-simulator\" $(inherited)","GCC_PREFIX_HEADER":"Target Support Files/file_saver/file_saver-prefix.pch","GENERATE_INFOPLIST_FILE":"NO","INFOPLIST_FILE":"Target Support Files/file_saver/file_saver-Info.plist","INSTALL_PATH":"$(LOCAL_LIBRARY_DIR)/Frameworks","LD_RUNPATH_SEARCH_PATHS":"$(inherited) @executable_path/Frameworks @loader_path/Frameworks","MODULEMAP_FILE":"Target Support Files/file_saver/file_saver.modulemap","ONLY_ACTIVE_ARCH":"NO","OTHER_LDFLAGS":"$(inherited) -framework Flutter","PRODUCT_MODULE_NAME":"file_saver","PRODUCT_NAME":"file_saver","SDKROOT":"iphoneos","SKIP_INSTALL":"YES","SWIFT_ACTIVE_COMPILATION_CONDITIONS":"$(inherited) ","SWIFT_INSTALL_OBJC_HEADER":"YES","SWIFT_VERSION":"5.0","TARGETED_DEVICE_FAMILY":"1,2","VALID_ARCHS[sdk=iphonesimulator*]":"$(ARCHS_STANDARD)","VERSIONING_SYSTEM":"apple-generic","VERSION_INFO_PREFIX":""},"guid":"bfdfe7dc352907fc980b868725387e98492b6ad4db49e05eec51596ae3a00810","name":"Debug"},{"baseConfigurationFileReference":"bfdfe7dc352907fc980b868725387e98344086c33f6b20ad518611d4b42807b0","buildSettings":{"CLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER":"NO","CODE_SIGN_IDENTITY[sdk=appletvos*]":"","CODE_SIGN_IDENTITY[sdk=iphoneos*]":"","CODE_SIGN_IDENTITY[sdk=watchos*]":"","CURRENT_PROJECT_VERSION":"1","DYLIB_COMPATIBILITY_VERSION":"1","DYLIB_CURRENT_VERSION":"1","DYLIB_INSTALL_NAME_BASE":"@rpath","ENABLE_BITCODE":"NO","ENABLE_MODULE_VERIFIER":"NO","ENABLE_USER_SCRIPT_SANDBOXING":"NO","EXCLUDED_ARCHS[sdk=iphoneos*]":"$(inherited) armv7","EXCLUDED_ARCHS[sdk=iphonesimulator*]":"$(inherited) i386","FRAMEWORK_SEARCH_PATHS[sdk=iphoneos*]":"\"/Users/yaso_meth/Git/flutter/bin/cache/artifacts/engine/ios-release/Flutter.xcframework/ios-arm64\" $(inherited)","FRAMEWORK_SEARCH_PATHS[sdk=iphonesimulator*]":"\"/Users/yaso_meth/Git/flutter/bin/cache/artifacts/engine/ios-release/Flutter.xcframework/ios-arm64_x86_64-simulator\" $(inherited)","GCC_PREFIX_HEADER":"Target Support Files/file_saver/file_saver-prefix.pch","GENERATE_INFOPLIST_FILE":"NO","INFOPLIST_FILE":"Target Support Files/file_saver/file_saver-Info.plist","INSTALL_PATH":"$(LOCAL_LIBRARY_DIR)/Frameworks","LD_RUNPATH_SEARCH_PATHS":"$(inherited) @executable_path/Frameworks @loader_path/Frameworks","MODULEMAP_FILE":"Target Support Files/file_saver/file_saver.modulemap","OTHER_LDFLAGS":"$(inherited) -framework Flutter","PRODUCT_MODULE_NAME":"file_saver","PRODUCT_NAME":"file_saver","SDKROOT":"iphoneos","SKIP_INSTALL":"YES","SWIFT_ACTIVE_COMPILATION_CONDITIONS":"$(inherited) ","SWIFT_INSTALL_OBJC_HEADER":"YES","SWIFT_VERSION":"5.0","TARGETED_DEVICE_FAMILY":"1,2","VALIDATE_PRODUCT":"YES","VALID_ARCHS[sdk=iphonesimulator*]":"$(ARCHS_STANDARD)","VERSIONING_SYSTEM":"apple-generic","VERSION_INFO_PREFIX":""},"guid":"bfdfe7dc352907fc980b868725387e981a50b674f911d01a3990e73095ee06c2","name":"Profile"},{"baseConfigurationFileReference":"bfdfe7dc352907fc980b868725387e98344086c33f6b20ad518611d4b42807b0","buildSettings":{"CLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER":"NO","CODE_SIGN_IDENTITY[sdk=appletvos*]":"","CODE_SIGN_IDENTITY[sdk=iphoneos*]":"","CODE_SIGN_IDENTITY[sdk=watchos*]":"","CURRENT_PROJECT_VERSION":"1","DYLIB_COMPATIBILITY_VERSION":"1","DYLIB_CURRENT_VERSION":"1","DYLIB_INSTALL_NAME_BASE":"@rpath","ENABLE_BITCODE":"NO","ENABLE_MODULE_VERIFIER":"NO","ENABLE_USER_SCRIPT_SANDBOXING":"NO","EXCLUDED_ARCHS[sdk=iphoneos*]":"$(inherited) armv7","EXCLUDED_ARCHS[sdk=iphonesimulator*]":"$(inherited) i386","FRAMEWORK_SEARCH_PATHS[sdk=iphoneos*]":"\"/Users/yaso_meth/Git/flutter/bin/cache/artifacts/engine/ios-release/Flutter.xcframework/ios-arm64\" $(inherited)","FRAMEWORK_SEARCH_PATHS[sdk=iphonesimulator*]":"\"/Users/yaso_meth/Git/flutter/bin/cache/artifacts/engine/ios-release/Flutter.xcframework/ios-arm64_x86_64-simulator\" $(inherited)","GCC_PREFIX_HEADER":"Target Support Files/file_saver/file_saver-prefix.pch","GENERATE_INFOPLIST_FILE":"NO","INFOPLIST_FILE":"Target Support Files/file_saver/file_saver-Info.plist","INSTALL_PATH":"$(LOCAL_LIBRARY_DIR)/Frameworks","LD_RUNPATH_SEARCH_PATHS":"$(inherited) @executable_path/Frameworks @loader_path/Frameworks","MODULEMAP_FILE":"Target Support Files/file_saver/file_saver.modulemap","OTHER_LDFLAGS":"$(inherited) -framework Flutter","PRODUCT_MODULE_NAME":"file_saver","PRODUCT_NAME":"file_saver","SDKROOT":"iphoneos","SKIP_INSTALL":"YES","SWIFT_ACTIVE_COMPILATION_CONDITIONS":"$(inherited) ","SWIFT_INSTALL_OBJC_HEADER":"YES","SWIFT_VERSION":"5.0","TARGETED_DEVICE_FAMILY":"1,2","VALIDATE_PRODUCT":"YES","VALID_ARCHS[sdk=iphonesimulator*]":"$(ARCHS_STANDARD)","VERSIONING_SYSTEM":"apple-generic","VERSION_INFO_PREFIX":""},"guid":"bfdfe7dc352907fc980b868725387e9840704f1d9bf02a7f441a6e4a7830088b","name":"Release"}],"buildPhases":[{"buildFiles":[{"fileReference":"bfdfe7dc352907fc980b868725387e988f5f13c3729537a5e4850a3184ef1504","guid":"bfdfe7dc352907fc980b868725387e988b5b7453914051440a28a5359d31fe11","headerVisibility":"public"},{"fileReference":"bfdfe7dc352907fc980b868725387e98ff33475189cdb687ddb89ac3219b5661","guid":"bfdfe7dc352907fc980b868725387e98acca2eff23e1dd8dac4ba80328517a61","headerVisibility":"public"}],"guid":"bfdfe7dc352907fc980b868725387e989d614e1f9f0ee716701ace7b32961eb8","type":"com.apple.buildphase.headers"},{"buildFiles":[{"fileReference":"bfdfe7dc352907fc980b868725387e98dc2b0e58e1746182ef03bafc59d5834f","guid":"bfdfe7dc352907fc980b868725387e980b62b55d5d5d98a99e02a082545b16d6"},{"fileReference":"bfdfe7dc352907fc980b868725387e98e9b49b292faafa97f299b4d375bb94e8","guid":"bfdfe7dc352907fc980b868725387e98571eb92c860282871bbdd81052e34f6f"},{"fileReference":"bfdfe7dc352907fc980b868725387e98ddd81e0874cadf29b2be4336e4173aaf","guid":"bfdfe7dc352907fc980b868725387e9856c9298350136ce86238d872d1bf9424"},{"fileReference":"bfdfe7dc352907fc980b868725387e986d800696c536df7c30346254f4e8cf2a","guid":"bfdfe7dc352907fc980b868725387e9885324ae1411aed1a23274eac76cbbb31"}],"guid":"bfdfe7dc352907fc980b868725387e983252b0ab426cbff85a631a370c4e9528","type":"com.apple.buildphase.sources"},{"buildFiles":[{"fileReference":"bfdfe7dc352907fc980b868725387e98b14af7c49882340ad551cb13b0a1e06d","guid":"bfdfe7dc352907fc980b868725387e9812cc13a21a478e20f317efb5b09f2b1f"}],"guid":"bfdfe7dc352907fc980b868725387e980839fe57c9d10d0556679a7f22b30bb5","type":"com.apple.buildphase.frameworks"},{"buildFiles":[],"guid":"bfdfe7dc352907fc980b868725387e986eb54603a6d1c7607512c4b86d24d1ab","type":"com.apple.buildphase.resources"}],"buildRules":[],"dependencies":[{"guid":"bfdfe7dc352907fc980b868725387e989da425bb6d6d5d8dbb95e4afffb82217","name":"Flutter"}],"guid":"bfdfe7dc352907fc980b868725387e9875e40ebaf7773ac78830d9822a5265df","name":"file_saver","predominantSourceCodeLanguage":"Xcode.SourceCodeLanguage.Objective-C","productReference":{"guid":"bfdfe7dc352907fc980b868725387e98072cdc8518935da0cbb0d45a363618b7","name":"file_saver.framework","type":"product"},"productTypeIdentifier":"com.apple.product-type.framework","provisioningSourceData":[{"bundleIdentifierFromInfoPlist":"${PRODUCT_BUNDLE_IDENTIFIER}","configurationName":"Debug","provisioningStyle":1},{"bundleIdentifierFromInfoPlist":"${PRODUCT_BUNDLE_IDENTIFIER}","configurationName":"Profile","provisioningStyle":1},{"bundleIdentifierFromInfoPlist":"${PRODUCT_BUNDLE_IDENTIFIER}","configurationName":"Release","provisioningStyle":1}],"type":"standard"} \ No newline at end of file diff --git a/mih_ui/android/build/ios/XCBuildData/PIFCache/target/TARGET@v11_hash=211721151cd848f04aa31d195dc75f4a-json b/mih_ui/android/build/ios/XCBuildData/PIFCache/target/TARGET@v11_hash=211721151cd848f04aa31d195dc75f4a-json new file mode 100644 index 00000000..fbf90bc4 --- /dev/null +++ b/mih_ui/android/build/ios/XCBuildData/PIFCache/target/TARGET@v11_hash=211721151cd848f04aa31d195dc75f4a-json @@ -0,0 +1 @@ +{"buildConfigurations":[{"baseConfigurationFileReference":"bfdfe7dc352907fc980b868725387e983daf253e7f620ff0705af75496c7b612","buildSettings":{"CLANG_ENABLE_OBJC_WEAK":"NO","CLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER":"NO","CODE_SIGN_IDENTITY[sdk=appletvos*]":"","CODE_SIGN_IDENTITY[sdk=iphoneos*]":"","CODE_SIGN_IDENTITY[sdk=watchos*]":"","CURRENT_PROJECT_VERSION":"1","DYLIB_COMPATIBILITY_VERSION":"1","DYLIB_CURRENT_VERSION":"1","DYLIB_INSTALL_NAME_BASE":"@rpath","ENABLE_BITCODE":"NO","ENABLE_MODULE_VERIFIER":"NO","ENABLE_USER_SCRIPT_SANDBOXING":"NO","EXCLUDED_ARCHS[sdk=iphoneos*]":"$(inherited) armv7","EXCLUDED_ARCHS[sdk=iphonesimulator*]":"$(inherited) i386","FRAMEWORK_SEARCH_PATHS[sdk=iphoneos*]":"\"/Users/yaso_meth/Git/flutter/bin/cache/artifacts/engine/ios/Flutter.xcframework/ios-arm64\" $(inherited)","FRAMEWORK_SEARCH_PATHS[sdk=iphonesimulator*]":"\"/Users/yaso_meth/Git/flutter/bin/cache/artifacts/engine/ios/Flutter.xcframework/ios-arm64_x86_64-simulator\" $(inherited)","GCC_PREFIX_HEADER":"Target Support Files/record_ios/record_ios-prefix.pch","GENERATE_INFOPLIST_FILE":"NO","INFOPLIST_FILE":"Target Support Files/record_ios/record_ios-Info.plist","INSTALL_PATH":"$(LOCAL_LIBRARY_DIR)/Frameworks","LD_RUNPATH_SEARCH_PATHS":"$(inherited) @executable_path/Frameworks @loader_path/Frameworks","MODULEMAP_FILE":"Target Support Files/record_ios/record_ios.modulemap","ONLY_ACTIVE_ARCH":"NO","OTHER_LDFLAGS":"$(inherited) -framework Flutter","PRODUCT_MODULE_NAME":"record_ios","PRODUCT_NAME":"record_ios","SDKROOT":"iphoneos","SKIP_INSTALL":"YES","SWIFT_ACTIVE_COMPILATION_CONDITIONS":"$(inherited) ","SWIFT_INSTALL_OBJC_HEADER":"YES","SWIFT_VERSION":"5.0","TARGETED_DEVICE_FAMILY":"1,2","VALID_ARCHS[sdk=iphonesimulator*]":"$(ARCHS_STANDARD)","VERSIONING_SYSTEM":"apple-generic","VERSION_INFO_PREFIX":""},"guid":"bfdfe7dc352907fc980b868725387e9848bee89e61a6b7ee9af321127dce4ab8","name":"Debug"},{"baseConfigurationFileReference":"bfdfe7dc352907fc980b868725387e985629505f5ce763e2c6637f93384c9362","buildSettings":{"CLANG_ENABLE_OBJC_WEAK":"NO","CLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER":"NO","CODE_SIGN_IDENTITY[sdk=appletvos*]":"","CODE_SIGN_IDENTITY[sdk=iphoneos*]":"","CODE_SIGN_IDENTITY[sdk=watchos*]":"","CURRENT_PROJECT_VERSION":"1","DYLIB_COMPATIBILITY_VERSION":"1","DYLIB_CURRENT_VERSION":"1","DYLIB_INSTALL_NAME_BASE":"@rpath","ENABLE_BITCODE":"NO","ENABLE_MODULE_VERIFIER":"NO","ENABLE_USER_SCRIPT_SANDBOXING":"NO","EXCLUDED_ARCHS[sdk=iphoneos*]":"$(inherited) armv7","EXCLUDED_ARCHS[sdk=iphonesimulator*]":"$(inherited) i386","FRAMEWORK_SEARCH_PATHS[sdk=iphoneos*]":"\"/Users/yaso_meth/Git/flutter/bin/cache/artifacts/engine/ios-release/Flutter.xcframework/ios-arm64\" $(inherited)","FRAMEWORK_SEARCH_PATHS[sdk=iphonesimulator*]":"\"/Users/yaso_meth/Git/flutter/bin/cache/artifacts/engine/ios-release/Flutter.xcframework/ios-arm64_x86_64-simulator\" $(inherited)","GCC_PREFIX_HEADER":"Target Support Files/record_ios/record_ios-prefix.pch","GENERATE_INFOPLIST_FILE":"NO","INFOPLIST_FILE":"Target Support Files/record_ios/record_ios-Info.plist","INSTALL_PATH":"$(LOCAL_LIBRARY_DIR)/Frameworks","LD_RUNPATH_SEARCH_PATHS":"$(inherited) @executable_path/Frameworks @loader_path/Frameworks","MODULEMAP_FILE":"Target Support Files/record_ios/record_ios.modulemap","OTHER_LDFLAGS":"$(inherited) -framework Flutter","PRODUCT_MODULE_NAME":"record_ios","PRODUCT_NAME":"record_ios","SDKROOT":"iphoneos","SKIP_INSTALL":"YES","SWIFT_ACTIVE_COMPILATION_CONDITIONS":"$(inherited) ","SWIFT_INSTALL_OBJC_HEADER":"YES","SWIFT_VERSION":"5.0","TARGETED_DEVICE_FAMILY":"1,2","VALIDATE_PRODUCT":"YES","VALID_ARCHS[sdk=iphonesimulator*]":"$(ARCHS_STANDARD)","VERSIONING_SYSTEM":"apple-generic","VERSION_INFO_PREFIX":""},"guid":"bfdfe7dc352907fc980b868725387e98edfcdb9f1b96adddd852196f39dc47ec","name":"Profile"},{"baseConfigurationFileReference":"bfdfe7dc352907fc980b868725387e985629505f5ce763e2c6637f93384c9362","buildSettings":{"CLANG_ENABLE_OBJC_WEAK":"NO","CLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER":"NO","CODE_SIGN_IDENTITY[sdk=appletvos*]":"","CODE_SIGN_IDENTITY[sdk=iphoneos*]":"","CODE_SIGN_IDENTITY[sdk=watchos*]":"","CURRENT_PROJECT_VERSION":"1","DYLIB_COMPATIBILITY_VERSION":"1","DYLIB_CURRENT_VERSION":"1","DYLIB_INSTALL_NAME_BASE":"@rpath","ENABLE_BITCODE":"NO","ENABLE_MODULE_VERIFIER":"NO","ENABLE_USER_SCRIPT_SANDBOXING":"NO","EXCLUDED_ARCHS[sdk=iphoneos*]":"$(inherited) armv7","EXCLUDED_ARCHS[sdk=iphonesimulator*]":"$(inherited) i386","FRAMEWORK_SEARCH_PATHS[sdk=iphoneos*]":"\"/Users/yaso_meth/Git/flutter/bin/cache/artifacts/engine/ios-release/Flutter.xcframework/ios-arm64\" $(inherited)","FRAMEWORK_SEARCH_PATHS[sdk=iphonesimulator*]":"\"/Users/yaso_meth/Git/flutter/bin/cache/artifacts/engine/ios-release/Flutter.xcframework/ios-arm64_x86_64-simulator\" $(inherited)","GCC_PREFIX_HEADER":"Target Support Files/record_ios/record_ios-prefix.pch","GENERATE_INFOPLIST_FILE":"NO","INFOPLIST_FILE":"Target Support Files/record_ios/record_ios-Info.plist","INSTALL_PATH":"$(LOCAL_LIBRARY_DIR)/Frameworks","LD_RUNPATH_SEARCH_PATHS":"$(inherited) @executable_path/Frameworks @loader_path/Frameworks","MODULEMAP_FILE":"Target Support Files/record_ios/record_ios.modulemap","OTHER_LDFLAGS":"$(inherited) -framework Flutter","PRODUCT_MODULE_NAME":"record_ios","PRODUCT_NAME":"record_ios","SDKROOT":"iphoneos","SKIP_INSTALL":"YES","SWIFT_ACTIVE_COMPILATION_CONDITIONS":"$(inherited) ","SWIFT_INSTALL_OBJC_HEADER":"YES","SWIFT_VERSION":"5.0","TARGETED_DEVICE_FAMILY":"1,2","VALIDATE_PRODUCT":"YES","VALID_ARCHS[sdk=iphonesimulator*]":"$(ARCHS_STANDARD)","VERSIONING_SYSTEM":"apple-generic","VERSION_INFO_PREFIX":""},"guid":"bfdfe7dc352907fc980b868725387e985151e74c4b3300cd4a3c01714d83b72b","name":"Release"}],"buildPhases":[{"buildFiles":[{"fileReference":"bfdfe7dc352907fc980b868725387e980c4abcf4c655f36e0d31f147be4ed645","guid":"bfdfe7dc352907fc980b868725387e9835d4f538095c7e2a61d6432700d1b798","headerVisibility":"public"}],"guid":"bfdfe7dc352907fc980b868725387e98af64c8b8323fc3e7e84445d2d428f32c","type":"com.apple.buildphase.headers"},{"buildFiles":[{"fileReference":"bfdfe7dc352907fc980b868725387e98d529b9317f808bc4a0526a0decb58f08","guid":"bfdfe7dc352907fc980b868725387e98662802b9892964a639cd53dad3c90bb0"},{"fileReference":"bfdfe7dc352907fc980b868725387e98255804e028753f5b8536b2b911ccb620","guid":"bfdfe7dc352907fc980b868725387e9839387038e87c9e1ee3935d9c7199509d"},{"fileReference":"bfdfe7dc352907fc980b868725387e98d73a5e56d5e68038cb1377eaa90fae0d","guid":"bfdfe7dc352907fc980b868725387e987d8c48b08525c2b89f0d673771ac0c38"},{"fileReference":"bfdfe7dc352907fc980b868725387e98f53359071b6f1be5f1da4cef27596689","guid":"bfdfe7dc352907fc980b868725387e98d3e29d7662601efc1e65f69115e6ed54"},{"fileReference":"bfdfe7dc352907fc980b868725387e98b298ec0b59e4cce28ccc0be3e7f0e5e7","guid":"bfdfe7dc352907fc980b868725387e98dd3040e7f93d66ea392641159360bfcd"},{"fileReference":"bfdfe7dc352907fc980b868725387e982241e0e04227dc7964af065d6a2bbc3c","guid":"bfdfe7dc352907fc980b868725387e9822803b3af9f03688a299039cfed66143"},{"fileReference":"bfdfe7dc352907fc980b868725387e983a371912ff4d411448f255abead2ed59","guid":"bfdfe7dc352907fc980b868725387e98449028c9016410bbd8edc5d09da56fd3"},{"fileReference":"bfdfe7dc352907fc980b868725387e98b47ae3223bc0ccc52b53627d750e2de0","guid":"bfdfe7dc352907fc980b868725387e981cc98556d2c27a66e809a2ad1059d4f1"},{"fileReference":"bfdfe7dc352907fc980b868725387e98a41a7891113627a2fa24db24ce22900a","guid":"bfdfe7dc352907fc980b868725387e98638d52ced7cda11658d94fee920a2ebd"},{"fileReference":"bfdfe7dc352907fc980b868725387e98298a93bc02eef963b4228ac4db4f6bb8","guid":"bfdfe7dc352907fc980b868725387e986c1d9ca1926b4531b491645942b367a2"}],"guid":"bfdfe7dc352907fc980b868725387e985710b7bd82b0d097b7823f915ab8f0d9","type":"com.apple.buildphase.sources"},{"buildFiles":[{"fileReference":"bfdfe7dc352907fc980b868725387e98b14af7c49882340ad551cb13b0a1e06d","guid":"bfdfe7dc352907fc980b868725387e98479aea524a81062d670b5dee2fdbfebb"}],"guid":"bfdfe7dc352907fc980b868725387e98a23abfaae0751718e7cfc0e3a3b7f301","type":"com.apple.buildphase.frameworks"},{"buildFiles":[{"guid":"bfdfe7dc352907fc980b868725387e98f31adba43dfc75e2b339a25193054eba","targetReference":"bfdfe7dc352907fc980b868725387e982a2ee81fc4f9376a4b6bb6d6bb502a00"}],"guid":"bfdfe7dc352907fc980b868725387e985665529af6526bb8b109c2a01d6cbd37","type":"com.apple.buildphase.resources"}],"buildRules":[],"dependencies":[{"guid":"bfdfe7dc352907fc980b868725387e989da425bb6d6d5d8dbb95e4afffb82217","name":"Flutter"},{"guid":"bfdfe7dc352907fc980b868725387e982a2ee81fc4f9376a4b6bb6d6bb502a00","name":"record_ios-record_ios_privacy"}],"guid":"bfdfe7dc352907fc980b868725387e98ff12fc6cf192a2fce22083281b19ee98","name":"record_ios","predominantSourceCodeLanguage":"Xcode.SourceCodeLanguage.Swift","productReference":{"guid":"bfdfe7dc352907fc980b868725387e985df8a39fd4e336288f27764d3eab62c6","name":"record_ios.framework","type":"product"},"productTypeIdentifier":"com.apple.product-type.framework","provisioningSourceData":[{"bundleIdentifierFromInfoPlist":"${PRODUCT_BUNDLE_IDENTIFIER}","configurationName":"Debug","provisioningStyle":1},{"bundleIdentifierFromInfoPlist":"${PRODUCT_BUNDLE_IDENTIFIER}","configurationName":"Profile","provisioningStyle":1},{"bundleIdentifierFromInfoPlist":"${PRODUCT_BUNDLE_IDENTIFIER}","configurationName":"Release","provisioningStyle":1}],"type":"standard"} \ No newline at end of file diff --git a/mih_ui/android/build/ios/XCBuildData/PIFCache/target/TARGET@v11_hash=218c90a1920c10390be2408439f5191f-json b/mih_ui/android/build/ios/XCBuildData/PIFCache/target/TARGET@v11_hash=218c90a1920c10390be2408439f5191f-json new file mode 100644 index 00000000..36b72273 --- /dev/null +++ b/mih_ui/android/build/ios/XCBuildData/PIFCache/target/TARGET@v11_hash=218c90a1920c10390be2408439f5191f-json @@ -0,0 +1 @@ +{"buildConfigurations":[{"baseConfigurationFileReference":"bfdfe7dc352907fc980b868725387e9837b4eae1f2290b03d7d4aabded8138b2","buildSettings":{"CODE_SIGNING_ALLOWED":"NO","CODE_SIGNING_IDENTITY":"-","CODE_SIGNING_REQUIRED":"NO","CONFIGURATION_BUILD_DIR":"$(BUILD_DIR)/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME)/DKImagePickerController","EXPANDED_CODE_SIGN_IDENTITY":"-","IBSC_MODULE":"DKImagePickerController","INFOPLIST_FILE":"Target Support Files/DKImagePickerController/ResourceBundle-DKImagePickerController-DKImagePickerController-Info.plist","IPHONEOS_DEPLOYMENT_TARGET":"9.0","ONLY_ACTIVE_ARCH":"NO","PRODUCT_NAME":"DKImagePickerController","SDKROOT":"iphoneos","SKIP_INSTALL":"YES","TARGETED_DEVICE_FAMILY":"1,2","WRAPPER_EXTENSION":"bundle"},"guid":"bfdfe7dc352907fc980b868725387e98f141ae074eb97c98f7000a55ca8db7fe","name":"Debug"},{"baseConfigurationFileReference":"bfdfe7dc352907fc980b868725387e98c17784c5efe37bcec77e0c17b5660c20","buildSettings":{"CLANG_ENABLE_OBJC_WEAK":"NO","CODE_SIGNING_ALLOWED":"NO","CODE_SIGNING_IDENTITY":"-","CODE_SIGNING_REQUIRED":"NO","CONFIGURATION_BUILD_DIR":"$(BUILD_DIR)/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME)/DKImagePickerController","EXPANDED_CODE_SIGN_IDENTITY":"-","IBSC_MODULE":"DKImagePickerController","INFOPLIST_FILE":"Target Support Files/DKImagePickerController/ResourceBundle-DKImagePickerController-DKImagePickerController-Info.plist","IPHONEOS_DEPLOYMENT_TARGET":"9.0","PRODUCT_NAME":"DKImagePickerController","SDKROOT":"iphoneos","SKIP_INSTALL":"YES","TARGETED_DEVICE_FAMILY":"1,2","VALIDATE_PRODUCT":"YES","WRAPPER_EXTENSION":"bundle"},"guid":"bfdfe7dc352907fc980b868725387e987b14cda5589001bc96d9ddc688308937","name":"Profile"},{"baseConfigurationFileReference":"bfdfe7dc352907fc980b868725387e98c17784c5efe37bcec77e0c17b5660c20","buildSettings":{"CODE_SIGNING_ALLOWED":"NO","CODE_SIGNING_IDENTITY":"-","CODE_SIGNING_REQUIRED":"NO","CONFIGURATION_BUILD_DIR":"$(BUILD_DIR)/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME)/DKImagePickerController","EXPANDED_CODE_SIGN_IDENTITY":"-","IBSC_MODULE":"DKImagePickerController","INFOPLIST_FILE":"Target Support Files/DKImagePickerController/ResourceBundle-DKImagePickerController-DKImagePickerController-Info.plist","IPHONEOS_DEPLOYMENT_TARGET":"9.0","PRODUCT_NAME":"DKImagePickerController","SDKROOT":"iphoneos","SKIP_INSTALL":"YES","TARGETED_DEVICE_FAMILY":"1,2","WRAPPER_EXTENSION":"bundle"},"guid":"bfdfe7dc352907fc980b868725387e989007cac290be025fe4eb8afb36353c0f","name":"Release"}],"buildPhases":[{"buildFiles":[],"guid":"bfdfe7dc352907fc980b868725387e98adcbbbb25f96fadc78573cc295e21fc1","type":"com.apple.buildphase.sources"},{"buildFiles":[],"guid":"bfdfe7dc352907fc980b868725387e98ebf21b0238d856f9dbebe1192ca9b322","type":"com.apple.buildphase.frameworks"},{"buildFiles":[{"fileReference":"bfdfe7dc352907fc980b868725387e98992e20e5c86d6ccae38bdf84a625f178","guid":"bfdfe7dc352907fc980b868725387e986be49ee2393e8f17ed7a1ef2344b7069"},{"fileReference":"bfdfe7dc352907fc980b868725387e98fc42f53bf0b263eb43dfba42d468c1ee","guid":"bfdfe7dc352907fc980b868725387e98d814d8acfb5c1d4e1f8e6fc2ec224e8d"},{"fileReference":"bfdfe7dc352907fc980b868725387e98c0e0c44805bf91b9ddacc8f5c5de5887","guid":"bfdfe7dc352907fc980b868725387e981225d5fa641a725a1b260a2471b9a62c"},{"fileReference":"bfdfe7dc352907fc980b868725387e985b7ec0450262a9573a0cb306273bc343","guid":"bfdfe7dc352907fc980b868725387e981acb72f3c01b533689f8ee66bb728738"},{"fileReference":"bfdfe7dc352907fc980b868725387e98a0d3580855f196150587aeedde49d8ee","guid":"bfdfe7dc352907fc980b868725387e98958d32ad41dfbf048d0cc441c9067798"},{"fileReference":"bfdfe7dc352907fc980b868725387e988591a2b29b958ca4ab9f3147bafa7a8a","guid":"bfdfe7dc352907fc980b868725387e986b89f7619ace5a2565e2af7f4f05bced"},{"fileReference":"bfdfe7dc352907fc980b868725387e98d68c0474e2f03eb8c7fccab1413bcc77","guid":"bfdfe7dc352907fc980b868725387e988e73ee650992513a6d86fa5431ee29aa"},{"fileReference":"bfdfe7dc352907fc980b868725387e98418e94a9d7a67843e706121817b95d23","guid":"bfdfe7dc352907fc980b868725387e9866e0a68572317dd225c4b4745e7ab666"},{"fileReference":"bfdfe7dc352907fc980b868725387e9844ff420afcb298679dede65a45ffceb5","guid":"bfdfe7dc352907fc980b868725387e98ab3c41d23d906395f505a093e37143e2"},{"fileReference":"bfdfe7dc352907fc980b868725387e987692caa5c901fbd366ce9848d0c1274c","guid":"bfdfe7dc352907fc980b868725387e98fd8c02c4eca38e6f9c34212f583ebc14"},{"fileReference":"bfdfe7dc352907fc980b868725387e9865b6e35f95ede252c917f53224dfc704","guid":"bfdfe7dc352907fc980b868725387e980712cc445e9d1438446dbd691a1d4124"},{"fileReference":"bfdfe7dc352907fc980b868725387e983f2cd8e2aab8a62e70cd896c9a4fea53","guid":"bfdfe7dc352907fc980b868725387e98dfb44109008ea134516786e3d26e5da5"},{"fileReference":"bfdfe7dc352907fc980b868725387e98ca220a32ab2fe66aa595eba98989e624","guid":"bfdfe7dc352907fc980b868725387e98d823890d751c30beb9305b0a7441ed83"},{"fileReference":"bfdfe7dc352907fc980b868725387e98c97c449e1eb67deb67ddecb8dcb88dc6","guid":"bfdfe7dc352907fc980b868725387e98a27e73d7871cb70e17a22ca44f7d4409"},{"fileReference":"bfdfe7dc352907fc980b868725387e988a7e09ab3fb0bccf3d6a0840f20edb02","guid":"bfdfe7dc352907fc980b868725387e98a7d5f490e936c244268c5a7833153cf4"},{"fileReference":"bfdfe7dc352907fc980b868725387e98360580afc3ea1e4816652b09373a6cd3","guid":"bfdfe7dc352907fc980b868725387e98d2fab9356e93aa0b836bf95ab406631b"},{"fileReference":"bfdfe7dc352907fc980b868725387e985edb9444e98b58b1ebe6043fbb03795f","guid":"bfdfe7dc352907fc980b868725387e9874092bff49846a108c58f0631fffc4c1"},{"fileReference":"bfdfe7dc352907fc980b868725387e9882faf104037eae2f0a55bac80109a69f","guid":"bfdfe7dc352907fc980b868725387e98508de0ed4f2eb064b9f5febcec5b1cb8"},{"fileReference":"bfdfe7dc352907fc980b868725387e98aa7d745938a0d9db3a2c382f9c57b33b","guid":"bfdfe7dc352907fc980b868725387e98bcf0b1f9088bb59d5f06c5a559612a8e"},{"fileReference":"bfdfe7dc352907fc980b868725387e98693b26471f52ca7316a1d3e0c7dc0a7f","guid":"bfdfe7dc352907fc980b868725387e98173f5f0c6dca979ea0f0a933d68a8b21"},{"fileReference":"bfdfe7dc352907fc980b868725387e98e7d19f0ec38ff637cbd1084684e63ad4","guid":"bfdfe7dc352907fc980b868725387e988aa5ef492259df6c1fa8e286fbf33f33"},{"fileReference":"bfdfe7dc352907fc980b868725387e9822323136a1b52bdd7900e18b364dee99","guid":"bfdfe7dc352907fc980b868725387e981db7820a3dce011213359a4df93f2380"}],"guid":"bfdfe7dc352907fc980b868725387e98cde9d488469e9fd6cee32e690de21d9e","type":"com.apple.buildphase.resources"}],"buildRules":[],"dependencies":[],"guid":"bfdfe7dc352907fc980b868725387e9898fccba7a2febdedb43dddbf2e949fc3","name":"DKImagePickerController-DKImagePickerController","productReference":{"guid":"bfdfe7dc352907fc980b868725387e98ab5e1f747dfe477b655528b07584898d","name":"DKImagePickerController.bundle","type":"product"},"productTypeIdentifier":"com.apple.product-type.bundle","provisioningSourceData":[{"bundleIdentifierFromInfoPlist":"${PRODUCT_BUNDLE_IDENTIFIER}","configurationName":"Debug","provisioningStyle":0},{"bundleIdentifierFromInfoPlist":"${PRODUCT_BUNDLE_IDENTIFIER}","configurationName":"Profile","provisioningStyle":0},{"bundleIdentifierFromInfoPlist":"${PRODUCT_BUNDLE_IDENTIFIER}","configurationName":"Release","provisioningStyle":0}],"type":"standard"} \ No newline at end of file diff --git a/mih_ui/android/build/ios/XCBuildData/PIFCache/target/TARGET@v11_hash=25067fd2852a0fd76a8f9f479b2d4630-json b/mih_ui/android/build/ios/XCBuildData/PIFCache/target/TARGET@v11_hash=25067fd2852a0fd76a8f9f479b2d4630-json new file mode 100644 index 00000000..8aaa02c3 --- /dev/null +++ b/mih_ui/android/build/ios/XCBuildData/PIFCache/target/TARGET@v11_hash=25067fd2852a0fd76a8f9f479b2d4630-json @@ -0,0 +1 @@ +{"buildConfigurations":[{"baseConfigurationFileReference":"bfdfe7dc352907fc980b868725387e98cca55d6c772db4d637cf770c880e5bab","buildSettings":{"CLANG_ENABLE_OBJC_WEAK":"NO","CLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER":"NO","CODE_SIGN_IDENTITY[sdk=appletvos*]":"","CODE_SIGN_IDENTITY[sdk=iphoneos*]":"","CODE_SIGN_IDENTITY[sdk=watchos*]":"","CURRENT_PROJECT_VERSION":"1","DYLIB_COMPATIBILITY_VERSION":"1","DYLIB_CURRENT_VERSION":"1","DYLIB_INSTALL_NAME_BASE":"@rpath","ENABLE_BITCODE":"NO","ENABLE_MODULE_VERIFIER":"NO","ENABLE_USER_SCRIPT_SANDBOXING":"NO","EXCLUDED_ARCHS[sdk=iphoneos*]":"$(inherited) armv7","EXCLUDED_ARCHS[sdk=iphonesimulator*]":"$(inherited) i386","FRAMEWORK_SEARCH_PATHS[sdk=iphoneos*]":"\"/Users/yaso_meth/Git/flutter/bin/cache/artifacts/engine/ios/Flutter.xcframework/ios-arm64\" $(inherited)","FRAMEWORK_SEARCH_PATHS[sdk=iphonesimulator*]":"\"/Users/yaso_meth/Git/flutter/bin/cache/artifacts/engine/ios/Flutter.xcframework/ios-arm64_x86_64-simulator\" $(inherited)","GCC_PREFIX_HEADER":"Target Support Files/geolocator_apple/geolocator_apple-prefix.pch","GENERATE_INFOPLIST_FILE":"NO","INFOPLIST_FILE":"Target Support Files/geolocator_apple/geolocator_apple-Info.plist","INSTALL_PATH":"$(LOCAL_LIBRARY_DIR)/Frameworks","LD_RUNPATH_SEARCH_PATHS":"$(inherited) @executable_path/Frameworks @loader_path/Frameworks","MODULEMAP_FILE":"Target Support Files/geolocator_apple/geolocator_apple.modulemap","ONLY_ACTIVE_ARCH":"NO","OTHER_LDFLAGS":"$(inherited) -framework Flutter","PRODUCT_MODULE_NAME":"geolocator_apple","PRODUCT_NAME":"geolocator_apple","SDKROOT":"iphoneos","SKIP_INSTALL":"YES","SWIFT_ACTIVE_COMPILATION_CONDITIONS":"$(inherited) ","SWIFT_INSTALL_OBJC_HEADER":"YES","SWIFT_VERSION":"5.0","TARGETED_DEVICE_FAMILY":"1,2","VALID_ARCHS[sdk=iphonesimulator*]":"$(ARCHS_STANDARD)","VERSIONING_SYSTEM":"apple-generic","VERSION_INFO_PREFIX":""},"guid":"bfdfe7dc352907fc980b868725387e984936d7cb8feef48513f6131e211caece","name":"Debug"},{"baseConfigurationFileReference":"bfdfe7dc352907fc980b868725387e98563a39b273a0c88e1e2a4a289bb4eff2","buildSettings":{"CLANG_ENABLE_OBJC_WEAK":"NO","CLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER":"NO","CODE_SIGN_IDENTITY[sdk=appletvos*]":"","CODE_SIGN_IDENTITY[sdk=iphoneos*]":"","CODE_SIGN_IDENTITY[sdk=watchos*]":"","CURRENT_PROJECT_VERSION":"1","DYLIB_COMPATIBILITY_VERSION":"1","DYLIB_CURRENT_VERSION":"1","DYLIB_INSTALL_NAME_BASE":"@rpath","ENABLE_BITCODE":"NO","ENABLE_MODULE_VERIFIER":"NO","ENABLE_USER_SCRIPT_SANDBOXING":"NO","EXCLUDED_ARCHS[sdk=iphoneos*]":"$(inherited) armv7","EXCLUDED_ARCHS[sdk=iphonesimulator*]":"$(inherited) i386","FRAMEWORK_SEARCH_PATHS[sdk=iphoneos*]":"\"/Users/yaso_meth/Git/flutter/bin/cache/artifacts/engine/ios-release/Flutter.xcframework/ios-arm64\" $(inherited)","FRAMEWORK_SEARCH_PATHS[sdk=iphonesimulator*]":"\"/Users/yaso_meth/Git/flutter/bin/cache/artifacts/engine/ios-release/Flutter.xcframework/ios-arm64_x86_64-simulator\" $(inherited)","GCC_PREFIX_HEADER":"Target Support Files/geolocator_apple/geolocator_apple-prefix.pch","GENERATE_INFOPLIST_FILE":"NO","INFOPLIST_FILE":"Target Support Files/geolocator_apple/geolocator_apple-Info.plist","INSTALL_PATH":"$(LOCAL_LIBRARY_DIR)/Frameworks","LD_RUNPATH_SEARCH_PATHS":"$(inherited) @executable_path/Frameworks @loader_path/Frameworks","MODULEMAP_FILE":"Target Support Files/geolocator_apple/geolocator_apple.modulemap","OTHER_LDFLAGS":"$(inherited) -framework Flutter","PRODUCT_MODULE_NAME":"geolocator_apple","PRODUCT_NAME":"geolocator_apple","SDKROOT":"iphoneos","SKIP_INSTALL":"YES","SWIFT_ACTIVE_COMPILATION_CONDITIONS":"$(inherited) ","SWIFT_INSTALL_OBJC_HEADER":"YES","SWIFT_VERSION":"5.0","TARGETED_DEVICE_FAMILY":"1,2","VALIDATE_PRODUCT":"YES","VALID_ARCHS[sdk=iphonesimulator*]":"$(ARCHS_STANDARD)","VERSIONING_SYSTEM":"apple-generic","VERSION_INFO_PREFIX":""},"guid":"bfdfe7dc352907fc980b868725387e98beaaf634ac9c45a28ea8b53ae8cea921","name":"Profile"},{"baseConfigurationFileReference":"bfdfe7dc352907fc980b868725387e98563a39b273a0c88e1e2a4a289bb4eff2","buildSettings":{"CLANG_ENABLE_OBJC_WEAK":"NO","CLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER":"NO","CODE_SIGN_IDENTITY[sdk=appletvos*]":"","CODE_SIGN_IDENTITY[sdk=iphoneos*]":"","CODE_SIGN_IDENTITY[sdk=watchos*]":"","CURRENT_PROJECT_VERSION":"1","DYLIB_COMPATIBILITY_VERSION":"1","DYLIB_CURRENT_VERSION":"1","DYLIB_INSTALL_NAME_BASE":"@rpath","ENABLE_BITCODE":"NO","ENABLE_MODULE_VERIFIER":"NO","ENABLE_USER_SCRIPT_SANDBOXING":"NO","EXCLUDED_ARCHS[sdk=iphoneos*]":"$(inherited) armv7","EXCLUDED_ARCHS[sdk=iphonesimulator*]":"$(inherited) i386","FRAMEWORK_SEARCH_PATHS[sdk=iphoneos*]":"\"/Users/yaso_meth/Git/flutter/bin/cache/artifacts/engine/ios-release/Flutter.xcframework/ios-arm64\" $(inherited)","FRAMEWORK_SEARCH_PATHS[sdk=iphonesimulator*]":"\"/Users/yaso_meth/Git/flutter/bin/cache/artifacts/engine/ios-release/Flutter.xcframework/ios-arm64_x86_64-simulator\" $(inherited)","GCC_PREFIX_HEADER":"Target Support Files/geolocator_apple/geolocator_apple-prefix.pch","GENERATE_INFOPLIST_FILE":"NO","INFOPLIST_FILE":"Target Support Files/geolocator_apple/geolocator_apple-Info.plist","INSTALL_PATH":"$(LOCAL_LIBRARY_DIR)/Frameworks","LD_RUNPATH_SEARCH_PATHS":"$(inherited) @executable_path/Frameworks @loader_path/Frameworks","MODULEMAP_FILE":"Target Support Files/geolocator_apple/geolocator_apple.modulemap","OTHER_LDFLAGS":"$(inherited) -framework Flutter","PRODUCT_MODULE_NAME":"geolocator_apple","PRODUCT_NAME":"geolocator_apple","SDKROOT":"iphoneos","SKIP_INSTALL":"YES","SWIFT_ACTIVE_COMPILATION_CONDITIONS":"$(inherited) ","SWIFT_INSTALL_OBJC_HEADER":"YES","SWIFT_VERSION":"5.0","TARGETED_DEVICE_FAMILY":"1,2","VALIDATE_PRODUCT":"YES","VALID_ARCHS[sdk=iphonesimulator*]":"$(ARCHS_STANDARD)","VERSIONING_SYSTEM":"apple-generic","VERSION_INFO_PREFIX":""},"guid":"bfdfe7dc352907fc980b868725387e9879f34f1e012c285b844492b857411475","name":"Release"}],"buildPhases":[{"buildFiles":[{"fileReference":"bfdfe7dc352907fc980b868725387e98ae7e46b06e0aeb71210643f8094d1b27","guid":"bfdfe7dc352907fc980b868725387e987f28047e02a7d34a46f8ada17b829c9a","headerVisibility":"public"},{"fileReference":"bfdfe7dc352907fc980b868725387e9894545c5eb4d21f54d2b3ad4447240a56","guid":"bfdfe7dc352907fc980b868725387e98f6c67c4679e7f7927d29cc6777b4854d","headerVisibility":"public"},{"fileReference":"bfdfe7dc352907fc980b868725387e98b8a07e04f908cc8061e28409eec78500","guid":"bfdfe7dc352907fc980b868725387e98fcb7e61931146dcd711e99248d6ccb4a","headerVisibility":"public"},{"fileReference":"bfdfe7dc352907fc980b868725387e985d7e5bf3eb3e1529ebbb131e40709a84","guid":"bfdfe7dc352907fc980b868725387e9895fe4b33f65c965da7dc45a450744ad5","headerVisibility":"public"},{"fileReference":"bfdfe7dc352907fc980b868725387e982a3cc027245753495848a1caefc6d9f4","guid":"bfdfe7dc352907fc980b868725387e9881f94adb811a31f238513440b73eb9ce","headerVisibility":"public"},{"fileReference":"bfdfe7dc352907fc980b868725387e9817d4eb1b3c3ac1e9ddcfc14974bec284","guid":"bfdfe7dc352907fc980b868725387e98d2993dc352971d9dec3337f6492eedd2","headerVisibility":"public"},{"fileReference":"bfdfe7dc352907fc980b868725387e986f7ca76bd9fb989518a0786f66daa730","guid":"bfdfe7dc352907fc980b868725387e987744d4bc1141e8c3af7814a94ab5d191","headerVisibility":"public"},{"fileReference":"bfdfe7dc352907fc980b868725387e98e8c93c09dbe016d2a985868756c3daf2","guid":"bfdfe7dc352907fc980b868725387e98d44ce0ad517ce468c11abe8a1a7ee842","headerVisibility":"public"},{"fileReference":"bfdfe7dc352907fc980b868725387e983f42416849bce11b33d814523ade52b1","guid":"bfdfe7dc352907fc980b868725387e986dfc835f86ba61de853986e0c332c9bb","headerVisibility":"public"},{"fileReference":"bfdfe7dc352907fc980b868725387e98d79d9d7f2df01bec5fd1e10cbe9b2f76","guid":"bfdfe7dc352907fc980b868725387e98832bcfeadec19c9672e7d13bba695944","headerVisibility":"public"},{"fileReference":"bfdfe7dc352907fc980b868725387e981fc28c232ec55d2d1c2305e98d7bd92a","guid":"bfdfe7dc352907fc980b868725387e987522b569e1888c59443fabbfd9eec3d9","headerVisibility":"public"},{"fileReference":"bfdfe7dc352907fc980b868725387e98d33e281aa21213bf9ee3ca2d26a8cb52","guid":"bfdfe7dc352907fc980b868725387e9826df2a365ab1701d04b81b250e704469","headerVisibility":"public"},{"fileReference":"bfdfe7dc352907fc980b868725387e981f6af95e734f0e05952c002243f2cb28","guid":"bfdfe7dc352907fc980b868725387e98683700ed014e2584117d9919dc247bfe","headerVisibility":"public"},{"fileReference":"bfdfe7dc352907fc980b868725387e98892d93e77cafda119e30c32988406d93","guid":"bfdfe7dc352907fc980b868725387e98a95b46a3d3c80a8cb5734bbb7717809c","headerVisibility":"public"},{"fileReference":"bfdfe7dc352907fc980b868725387e981700891532905651a54cc9a07dd2c6b3","guid":"bfdfe7dc352907fc980b868725387e98c814b053e6b465d54fefe875995c908b","headerVisibility":"public"},{"fileReference":"bfdfe7dc352907fc980b868725387e98184bfb0fe7b895691bee4935d2b5d50f","guid":"bfdfe7dc352907fc980b868725387e980e4020bf220b21c849a1247a598ef500","headerVisibility":"public"},{"fileReference":"bfdfe7dc352907fc980b868725387e98e2f51025ce37ba6eff3a96efa381b796","guid":"bfdfe7dc352907fc980b868725387e9867e1d59733a195924e43c7221ab3b507","headerVisibility":"public"}],"guid":"bfdfe7dc352907fc980b868725387e9859ab3ec029f964cc4041f98492a33760","type":"com.apple.buildphase.headers"},{"buildFiles":[{"fileReference":"bfdfe7dc352907fc980b868725387e98394614911d329fd59c3c1e287c4f7ac2","guid":"bfdfe7dc352907fc980b868725387e9836a664f9634f39c09eb263d32eb33de8"},{"fileReference":"bfdfe7dc352907fc980b868725387e98acbd88adba80f77ca7a9d08f07fa7223","guid":"bfdfe7dc352907fc980b868725387e981012013b7c46227b76d2a26c3973c5f4"},{"fileReference":"bfdfe7dc352907fc980b868725387e98e067790bbee9fb9376d0c77605d73661","guid":"bfdfe7dc352907fc980b868725387e986adce0f63de9503184a2571c68ae8037"},{"fileReference":"bfdfe7dc352907fc980b868725387e9825eb273bb3a088732d81eeb1c19af553","guid":"bfdfe7dc352907fc980b868725387e98c97111306fd51e26ac236698d182d1fb"},{"fileReference":"bfdfe7dc352907fc980b868725387e9820b9343c256beee0a1c63afec1a67796","guid":"bfdfe7dc352907fc980b868725387e98d9f834483786fc0c92f7593bcd6dd83c"},{"fileReference":"bfdfe7dc352907fc980b868725387e98ecf8248839ba4e6f17d3532feb14821b","guid":"bfdfe7dc352907fc980b868725387e98c97bce089e46629de083eac4838dd800"},{"fileReference":"bfdfe7dc352907fc980b868725387e98a8a273d3c64641ffd71fe5f8c04b4132","guid":"bfdfe7dc352907fc980b868725387e985817ad63c8e4f8db81700ac14cc618cc"},{"fileReference":"bfdfe7dc352907fc980b868725387e982ea9c75e15c2f0e5172d62007ca22170","guid":"bfdfe7dc352907fc980b868725387e986e494a42d2c0843cec709c09ffdc69a4"},{"fileReference":"bfdfe7dc352907fc980b868725387e98230a202d71e90bc984b72ad2f09fb2f4","guid":"bfdfe7dc352907fc980b868725387e9805c8314d750be278604bc8677fcf4420"},{"fileReference":"bfdfe7dc352907fc980b868725387e98c64b3141b3e00a1e02e21e19f1e7eaab","guid":"bfdfe7dc352907fc980b868725387e988270e34481adcde5ab4b6a9daa89a011"},{"fileReference":"bfdfe7dc352907fc980b868725387e988c15f7293e9ecd2b1063ce877015924a","guid":"bfdfe7dc352907fc980b868725387e98615ad6c8a17ee1f04050629a5a2a260a"},{"fileReference":"bfdfe7dc352907fc980b868725387e989c2cb05698df9b731b1c1c1e59a898de","guid":"bfdfe7dc352907fc980b868725387e98fd9db82003eb1b08fd6976b7ba6920aa"},{"fileReference":"bfdfe7dc352907fc980b868725387e982631bb95675558dfb73b76bfc58028b0","guid":"bfdfe7dc352907fc980b868725387e9836872f22a07d006d803b66800b0fd898"},{"fileReference":"bfdfe7dc352907fc980b868725387e98d01f765a57f90a102cc78be24a15233c","guid":"bfdfe7dc352907fc980b868725387e985cf4803afdb0ccdba56bf5e79afdbebc"}],"guid":"bfdfe7dc352907fc980b868725387e989d91e5abbad637a65716b7fef9466ccd","type":"com.apple.buildphase.sources"},{"buildFiles":[{"fileReference":"bfdfe7dc352907fc980b868725387e98b14af7c49882340ad551cb13b0a1e06d","guid":"bfdfe7dc352907fc980b868725387e9847d3b3fdbf8c6c03a84819a79f7ae5aa"}],"guid":"bfdfe7dc352907fc980b868725387e988ec00323e57392a3c283b014e048e33b","type":"com.apple.buildphase.frameworks"},{"buildFiles":[{"guid":"bfdfe7dc352907fc980b868725387e98c4b351c20ac090098b0dcaf5fd3c18e2","targetReference":"bfdfe7dc352907fc980b868725387e98e1aba8ff8dc833f2269ce0a7182533b3"}],"guid":"bfdfe7dc352907fc980b868725387e98053f546dc39b1661db608be4eb007f0a","type":"com.apple.buildphase.resources"}],"buildRules":[],"dependencies":[{"guid":"bfdfe7dc352907fc980b868725387e989da425bb6d6d5d8dbb95e4afffb82217","name":"Flutter"},{"guid":"bfdfe7dc352907fc980b868725387e98e1aba8ff8dc833f2269ce0a7182533b3","name":"geolocator_apple-geolocator_apple_privacy"}],"guid":"bfdfe7dc352907fc980b868725387e9821d372cc1e7c7587a12aeda843619e39","name":"geolocator_apple","predominantSourceCodeLanguage":"Xcode.SourceCodeLanguage.Objective-C-Plus-Plus","productReference":{"guid":"bfdfe7dc352907fc980b868725387e986ff8f87e011522b1b6328c84d9533927","name":"geolocator_apple.framework","type":"product"},"productTypeIdentifier":"com.apple.product-type.framework","provisioningSourceData":[{"bundleIdentifierFromInfoPlist":"${PRODUCT_BUNDLE_IDENTIFIER}","configurationName":"Debug","provisioningStyle":1},{"bundleIdentifierFromInfoPlist":"${PRODUCT_BUNDLE_IDENTIFIER}","configurationName":"Profile","provisioningStyle":1},{"bundleIdentifierFromInfoPlist":"${PRODUCT_BUNDLE_IDENTIFIER}","configurationName":"Release","provisioningStyle":1}],"type":"standard"} \ No newline at end of file diff --git a/mih_ui/android/build/ios/XCBuildData/PIFCache/target/TARGET@v11_hash=35adaf1be68b319de0505ded2815bc62-json b/mih_ui/android/build/ios/XCBuildData/PIFCache/target/TARGET@v11_hash=35adaf1be68b319de0505ded2815bc62-json new file mode 100644 index 00000000..83c84d66 --- /dev/null +++ b/mih_ui/android/build/ios/XCBuildData/PIFCache/target/TARGET@v11_hash=35adaf1be68b319de0505ded2815bc62-json @@ -0,0 +1 @@ +{"buildConfigurations":[{"baseConfigurationFileReference":"bfdfe7dc352907fc980b868725387e98b94f751a83e7e0f1d4b42f2b77a60509","buildSettings":{"CODE_SIGNING_ALLOWED":"NO","CODE_SIGNING_IDENTITY":"-","CODE_SIGNING_REQUIRED":"NO","CONFIGURATION_BUILD_DIR":"$(BUILD_DIR)/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME)/FirebaseCoreInternal","EXPANDED_CODE_SIGN_IDENTITY":"-","IBSC_MODULE":"FirebaseCoreInternal","INFOPLIST_FILE":"Target Support Files/FirebaseCoreInternal/ResourceBundle-FirebaseCoreInternal_Privacy-FirebaseCoreInternal-Info.plist","IPHONEOS_DEPLOYMENT_TARGET":"15.0","ONLY_ACTIVE_ARCH":"NO","PRODUCT_NAME":"FirebaseCoreInternal_Privacy","SDKROOT":"iphoneos","SKIP_INSTALL":"YES","TARGETED_DEVICE_FAMILY":"1,2","WRAPPER_EXTENSION":"bundle"},"guid":"bfdfe7dc352907fc980b868725387e98cc5302f00fadf35f3450306558c9fa7b","name":"Debug"},{"baseConfigurationFileReference":"bfdfe7dc352907fc980b868725387e98d9147eb705ef7701ac589855737d9572","buildSettings":{"CLANG_ENABLE_OBJC_WEAK":"NO","CODE_SIGNING_ALLOWED":"NO","CODE_SIGNING_IDENTITY":"-","CODE_SIGNING_REQUIRED":"NO","CONFIGURATION_BUILD_DIR":"$(BUILD_DIR)/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME)/FirebaseCoreInternal","EXPANDED_CODE_SIGN_IDENTITY":"-","IBSC_MODULE":"FirebaseCoreInternal","INFOPLIST_FILE":"Target Support Files/FirebaseCoreInternal/ResourceBundle-FirebaseCoreInternal_Privacy-FirebaseCoreInternal-Info.plist","IPHONEOS_DEPLOYMENT_TARGET":"15.0","PRODUCT_NAME":"FirebaseCoreInternal_Privacy","SDKROOT":"iphoneos","SKIP_INSTALL":"YES","TARGETED_DEVICE_FAMILY":"1,2","VALIDATE_PRODUCT":"YES","WRAPPER_EXTENSION":"bundle"},"guid":"bfdfe7dc352907fc980b868725387e983b5603d8db01d45f55bf49d921492c6d","name":"Profile"},{"baseConfigurationFileReference":"bfdfe7dc352907fc980b868725387e98d9147eb705ef7701ac589855737d9572","buildSettings":{"CODE_SIGNING_ALLOWED":"NO","CODE_SIGNING_IDENTITY":"-","CODE_SIGNING_REQUIRED":"NO","CONFIGURATION_BUILD_DIR":"$(BUILD_DIR)/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME)/FirebaseCoreInternal","EXPANDED_CODE_SIGN_IDENTITY":"-","IBSC_MODULE":"FirebaseCoreInternal","INFOPLIST_FILE":"Target Support Files/FirebaseCoreInternal/ResourceBundle-FirebaseCoreInternal_Privacy-FirebaseCoreInternal-Info.plist","IPHONEOS_DEPLOYMENT_TARGET":"15.0","PRODUCT_NAME":"FirebaseCoreInternal_Privacy","SDKROOT":"iphoneos","SKIP_INSTALL":"YES","TARGETED_DEVICE_FAMILY":"1,2","WRAPPER_EXTENSION":"bundle"},"guid":"bfdfe7dc352907fc980b868725387e98cb85d7840e96bb3c6ada3c7d619feb0c","name":"Release"}],"buildPhases":[{"buildFiles":[],"guid":"bfdfe7dc352907fc980b868725387e98ea0c95b0ea17f26701bbea8182aa2ad4","type":"com.apple.buildphase.sources"},{"buildFiles":[],"guid":"bfdfe7dc352907fc980b868725387e98f508327e914011483a2f664b1da0e143","type":"com.apple.buildphase.frameworks"},{"buildFiles":[{"fileReference":"bfdfe7dc352907fc980b868725387e985dedb4877ad3d0affcc4a716189451c7","guid":"bfdfe7dc352907fc980b868725387e98736a76b1f641b349fd98f7b196e1120d"}],"guid":"bfdfe7dc352907fc980b868725387e98d31fb31447fd3669e8ec2ee0a7181156","type":"com.apple.buildphase.resources"}],"buildRules":[],"dependencies":[],"guid":"bfdfe7dc352907fc980b868725387e98e5b592b076e092ab7ac9d9b5c85edc6f","name":"FirebaseCoreInternal-FirebaseCoreInternal_Privacy","productReference":{"guid":"bfdfe7dc352907fc980b868725387e98c4db3ee10fd3aea38cd0fd6d5693c776","name":"FirebaseCoreInternal_Privacy.bundle","type":"product"},"productTypeIdentifier":"com.apple.product-type.bundle","provisioningSourceData":[{"bundleIdentifierFromInfoPlist":"${PRODUCT_BUNDLE_IDENTIFIER}","configurationName":"Debug","provisioningStyle":0},{"bundleIdentifierFromInfoPlist":"${PRODUCT_BUNDLE_IDENTIFIER}","configurationName":"Profile","provisioningStyle":0},{"bundleIdentifierFromInfoPlist":"${PRODUCT_BUNDLE_IDENTIFIER}","configurationName":"Release","provisioningStyle":0}],"type":"standard"} \ No newline at end of file diff --git a/mih_ui/android/build/ios/XCBuildData/PIFCache/target/TARGET@v11_hash=376189dccaae382545d5e718c59412f6-json b/mih_ui/android/build/ios/XCBuildData/PIFCache/target/TARGET@v11_hash=376189dccaae382545d5e718c59412f6-json new file mode 100644 index 00000000..ac08c7bc --- /dev/null +++ b/mih_ui/android/build/ios/XCBuildData/PIFCache/target/TARGET@v11_hash=376189dccaae382545d5e718c59412f6-json @@ -0,0 +1 @@ +{"buildConfigurations":[{"baseConfigurationFileReference":"bfdfe7dc352907fc980b868725387e9875a911280513a51a1fcc833a02e1e86d","buildSettings":{"CODE_SIGNING_ALLOWED":"NO","CODE_SIGNING_IDENTITY":"-","CODE_SIGNING_REQUIRED":"NO","CONFIGURATION_BUILD_DIR":"$(BUILD_DIR)/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME)/sqflite_darwin","EXPANDED_CODE_SIGN_IDENTITY":"-","IBSC_MODULE":"sqflite_darwin","INFOPLIST_FILE":"Target Support Files/sqflite_darwin/ResourceBundle-sqflite_darwin_privacy-sqflite_darwin-Info.plist","IPHONEOS_DEPLOYMENT_TARGET":"12.0","ONLY_ACTIVE_ARCH":"NO","PRODUCT_NAME":"sqflite_darwin_privacy","SDKROOT":"iphoneos","SKIP_INSTALL":"YES","TARGETED_DEVICE_FAMILY":"1,2","WRAPPER_EXTENSION":"bundle"},"guid":"bfdfe7dc352907fc980b868725387e987c571a44107819654ec3c87e60d3d00a","name":"Debug"},{"baseConfigurationFileReference":"bfdfe7dc352907fc980b868725387e98b2e50aea12e109eb95c45970b36f8a43","buildSettings":{"CLANG_ENABLE_OBJC_WEAK":"NO","CODE_SIGNING_ALLOWED":"NO","CODE_SIGNING_IDENTITY":"-","CODE_SIGNING_REQUIRED":"NO","CONFIGURATION_BUILD_DIR":"$(BUILD_DIR)/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME)/sqflite_darwin","EXPANDED_CODE_SIGN_IDENTITY":"-","IBSC_MODULE":"sqflite_darwin","INFOPLIST_FILE":"Target Support Files/sqflite_darwin/ResourceBundle-sqflite_darwin_privacy-sqflite_darwin-Info.plist","IPHONEOS_DEPLOYMENT_TARGET":"12.0","PRODUCT_NAME":"sqflite_darwin_privacy","SDKROOT":"iphoneos","SKIP_INSTALL":"YES","TARGETED_DEVICE_FAMILY":"1,2","VALIDATE_PRODUCT":"YES","WRAPPER_EXTENSION":"bundle"},"guid":"bfdfe7dc352907fc980b868725387e98db4f055816091cf5b613d1859af7847a","name":"Profile"},{"baseConfigurationFileReference":"bfdfe7dc352907fc980b868725387e98b2e50aea12e109eb95c45970b36f8a43","buildSettings":{"CODE_SIGNING_ALLOWED":"NO","CODE_SIGNING_IDENTITY":"-","CODE_SIGNING_REQUIRED":"NO","CONFIGURATION_BUILD_DIR":"$(BUILD_DIR)/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME)/sqflite_darwin","EXPANDED_CODE_SIGN_IDENTITY":"-","IBSC_MODULE":"sqflite_darwin","INFOPLIST_FILE":"Target Support Files/sqflite_darwin/ResourceBundle-sqflite_darwin_privacy-sqflite_darwin-Info.plist","IPHONEOS_DEPLOYMENT_TARGET":"12.0","PRODUCT_NAME":"sqflite_darwin_privacy","SDKROOT":"iphoneos","SKIP_INSTALL":"YES","TARGETED_DEVICE_FAMILY":"1,2","WRAPPER_EXTENSION":"bundle"},"guid":"bfdfe7dc352907fc980b868725387e98cec1eface6e261de2935ced07b31ae21","name":"Release"}],"buildPhases":[{"buildFiles":[],"guid":"bfdfe7dc352907fc980b868725387e980631f74da17b751c083b070fee808b75","type":"com.apple.buildphase.sources"},{"buildFiles":[],"guid":"bfdfe7dc352907fc980b868725387e98e800c60291ba81fc3a0ae26af24eb2e2","type":"com.apple.buildphase.frameworks"},{"buildFiles":[{"fileReference":"bfdfe7dc352907fc980b868725387e9853ec5b69fdc2191f1ca7a8b03970be07","guid":"bfdfe7dc352907fc980b868725387e984d6623b0cd11fced8626890b1e0d21e1"}],"guid":"bfdfe7dc352907fc980b868725387e98803d267b2494aa83d5f2151d32c7bfb5","type":"com.apple.buildphase.resources"}],"buildRules":[],"dependencies":[],"guid":"bfdfe7dc352907fc980b868725387e9883134bb5f399cb37a1eb075d4fea30d8","name":"sqflite_darwin-sqflite_darwin_privacy","productReference":{"guid":"bfdfe7dc352907fc980b868725387e9849c1d4b1200fcbf6f387f94121c7d0bf","name":"sqflite_darwin_privacy.bundle","type":"product"},"productTypeIdentifier":"com.apple.product-type.bundle","provisioningSourceData":[{"bundleIdentifierFromInfoPlist":"${PRODUCT_BUNDLE_IDENTIFIER}","configurationName":"Debug","provisioningStyle":0},{"bundleIdentifierFromInfoPlist":"${PRODUCT_BUNDLE_IDENTIFIER}","configurationName":"Profile","provisioningStyle":0},{"bundleIdentifierFromInfoPlist":"${PRODUCT_BUNDLE_IDENTIFIER}","configurationName":"Release","provisioningStyle":0}],"type":"standard"} \ No newline at end of file diff --git a/mih_ui/android/build/ios/XCBuildData/PIFCache/target/TARGET@v11_hash=3a7fbdb39c618b52ee7b40baa1e884b1-json b/mih_ui/android/build/ios/XCBuildData/PIFCache/target/TARGET@v11_hash=3a7fbdb39c618b52ee7b40baa1e884b1-json new file mode 100644 index 00000000..53a4eca5 --- /dev/null +++ b/mih_ui/android/build/ios/XCBuildData/PIFCache/target/TARGET@v11_hash=3a7fbdb39c618b52ee7b40baa1e884b1-json @@ -0,0 +1 @@ +{"buildConfigurations":[{"baseConfigurationFileReference":"bfdfe7dc352907fc980b868725387e981ea619c6c09d50e42998ac2381b017c9","buildSettings":{"CLANG_ENABLE_OBJC_WEAK":"NO","CLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER":"NO","CODE_SIGN_IDENTITY[sdk=appletvos*]":"","CODE_SIGN_IDENTITY[sdk=iphoneos*]":"","CODE_SIGN_IDENTITY[sdk=watchos*]":"","CURRENT_PROJECT_VERSION":"1","DYLIB_COMPATIBILITY_VERSION":"1","DYLIB_CURRENT_VERSION":"1","DYLIB_INSTALL_NAME_BASE":"@rpath","ENABLE_BITCODE":"NO","ENABLE_MODULE_VERIFIER":"NO","ENABLE_USER_SCRIPT_SANDBOXING":"NO","EXCLUDED_ARCHS[sdk=iphoneos*]":"$(inherited) armv7","EXCLUDED_ARCHS[sdk=iphonesimulator*]":"$(inherited) i386","FRAMEWORK_SEARCH_PATHS[sdk=iphoneos*]":"\"/Users/yaso_meth/Git/flutter/bin/cache/artifacts/engine/ios/Flutter.xcframework/ios-arm64\" $(inherited)","FRAMEWORK_SEARCH_PATHS[sdk=iphonesimulator*]":"\"/Users/yaso_meth/Git/flutter/bin/cache/artifacts/engine/ios/Flutter.xcframework/ios-arm64_x86_64-simulator\" $(inherited)","GCC_PREFIX_HEADER":"Target Support Files/shared_preferences_foundation/shared_preferences_foundation-prefix.pch","GENERATE_INFOPLIST_FILE":"NO","INFOPLIST_FILE":"Target Support Files/shared_preferences_foundation/shared_preferences_foundation-Info.plist","INSTALL_PATH":"$(LOCAL_LIBRARY_DIR)/Frameworks","MODULEMAP_FILE":"Target Support Files/shared_preferences_foundation/shared_preferences_foundation.modulemap","ONLY_ACTIVE_ARCH":"NO","OTHER_LDFLAGS":"$(inherited) -framework Flutter","PRODUCT_MODULE_NAME":"shared_preferences_foundation","PRODUCT_NAME":"shared_preferences_foundation","SDKROOT":"iphoneos","SKIP_INSTALL":"YES","SWIFT_ACTIVE_COMPILATION_CONDITIONS":"$(inherited) ","SWIFT_INSTALL_OBJC_HEADER":"YES","SWIFT_VERSION":"5.0","TARGETED_DEVICE_FAMILY":"1,2","VALID_ARCHS[sdk=iphonesimulator*]":"$(ARCHS_STANDARD)","VERSIONING_SYSTEM":"apple-generic","VERSION_INFO_PREFIX":""},"guid":"bfdfe7dc352907fc980b868725387e986f83bf1d86816a7afe713389f3b0794c","name":"Debug"},{"baseConfigurationFileReference":"bfdfe7dc352907fc980b868725387e988abaddbc7dac244a9dd3a827969bb097","buildSettings":{"CLANG_ENABLE_OBJC_WEAK":"NO","CLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER":"NO","CODE_SIGN_IDENTITY[sdk=appletvos*]":"","CODE_SIGN_IDENTITY[sdk=iphoneos*]":"","CODE_SIGN_IDENTITY[sdk=watchos*]":"","CURRENT_PROJECT_VERSION":"1","DYLIB_COMPATIBILITY_VERSION":"1","DYLIB_CURRENT_VERSION":"1","DYLIB_INSTALL_NAME_BASE":"@rpath","ENABLE_BITCODE":"NO","ENABLE_MODULE_VERIFIER":"NO","ENABLE_USER_SCRIPT_SANDBOXING":"NO","EXCLUDED_ARCHS[sdk=iphoneos*]":"$(inherited) armv7","EXCLUDED_ARCHS[sdk=iphonesimulator*]":"$(inherited) i386","FRAMEWORK_SEARCH_PATHS[sdk=iphoneos*]":"\"/Users/yaso_meth/Git/flutter/bin/cache/artifacts/engine/ios-release/Flutter.xcframework/ios-arm64\" $(inherited)","FRAMEWORK_SEARCH_PATHS[sdk=iphonesimulator*]":"\"/Users/yaso_meth/Git/flutter/bin/cache/artifacts/engine/ios-release/Flutter.xcframework/ios-arm64_x86_64-simulator\" $(inherited)","GCC_PREFIX_HEADER":"Target Support Files/shared_preferences_foundation/shared_preferences_foundation-prefix.pch","GENERATE_INFOPLIST_FILE":"NO","INFOPLIST_FILE":"Target Support Files/shared_preferences_foundation/shared_preferences_foundation-Info.plist","INSTALL_PATH":"$(LOCAL_LIBRARY_DIR)/Frameworks","MODULEMAP_FILE":"Target Support Files/shared_preferences_foundation/shared_preferences_foundation.modulemap","OTHER_LDFLAGS":"$(inherited) -framework Flutter","PRODUCT_MODULE_NAME":"shared_preferences_foundation","PRODUCT_NAME":"shared_preferences_foundation","SDKROOT":"iphoneos","SKIP_INSTALL":"YES","SWIFT_ACTIVE_COMPILATION_CONDITIONS":"$(inherited) ","SWIFT_INSTALL_OBJC_HEADER":"YES","SWIFT_VERSION":"5.0","TARGETED_DEVICE_FAMILY":"1,2","VALIDATE_PRODUCT":"YES","VALID_ARCHS[sdk=iphonesimulator*]":"$(ARCHS_STANDARD)","VERSIONING_SYSTEM":"apple-generic","VERSION_INFO_PREFIX":""},"guid":"bfdfe7dc352907fc980b868725387e98c6ce66678a98cae8c935e06602a448e0","name":"Profile"},{"baseConfigurationFileReference":"bfdfe7dc352907fc980b868725387e988abaddbc7dac244a9dd3a827969bb097","buildSettings":{"CLANG_ENABLE_OBJC_WEAK":"NO","CLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER":"NO","CODE_SIGN_IDENTITY[sdk=appletvos*]":"","CODE_SIGN_IDENTITY[sdk=iphoneos*]":"","CODE_SIGN_IDENTITY[sdk=watchos*]":"","CURRENT_PROJECT_VERSION":"1","DYLIB_COMPATIBILITY_VERSION":"1","DYLIB_CURRENT_VERSION":"1","DYLIB_INSTALL_NAME_BASE":"@rpath","ENABLE_BITCODE":"NO","ENABLE_MODULE_VERIFIER":"NO","ENABLE_USER_SCRIPT_SANDBOXING":"NO","EXCLUDED_ARCHS[sdk=iphoneos*]":"$(inherited) armv7","EXCLUDED_ARCHS[sdk=iphonesimulator*]":"$(inherited) i386","FRAMEWORK_SEARCH_PATHS[sdk=iphoneos*]":"\"/Users/yaso_meth/Git/flutter/bin/cache/artifacts/engine/ios-release/Flutter.xcframework/ios-arm64\" $(inherited)","FRAMEWORK_SEARCH_PATHS[sdk=iphonesimulator*]":"\"/Users/yaso_meth/Git/flutter/bin/cache/artifacts/engine/ios-release/Flutter.xcframework/ios-arm64_x86_64-simulator\" $(inherited)","GCC_PREFIX_HEADER":"Target Support Files/shared_preferences_foundation/shared_preferences_foundation-prefix.pch","GENERATE_INFOPLIST_FILE":"NO","INFOPLIST_FILE":"Target Support Files/shared_preferences_foundation/shared_preferences_foundation-Info.plist","INSTALL_PATH":"$(LOCAL_LIBRARY_DIR)/Frameworks","MODULEMAP_FILE":"Target Support Files/shared_preferences_foundation/shared_preferences_foundation.modulemap","OTHER_LDFLAGS":"$(inherited) -framework Flutter","PRODUCT_MODULE_NAME":"shared_preferences_foundation","PRODUCT_NAME":"shared_preferences_foundation","SDKROOT":"iphoneos","SKIP_INSTALL":"YES","SWIFT_ACTIVE_COMPILATION_CONDITIONS":"$(inherited) ","SWIFT_INSTALL_OBJC_HEADER":"YES","SWIFT_VERSION":"5.0","TARGETED_DEVICE_FAMILY":"1,2","VALIDATE_PRODUCT":"YES","VALID_ARCHS[sdk=iphonesimulator*]":"$(ARCHS_STANDARD)","VERSIONING_SYSTEM":"apple-generic","VERSION_INFO_PREFIX":""},"guid":"bfdfe7dc352907fc980b868725387e980f59bc0c0df185b08d92e2afa6f35dda","name":"Release"}],"buildPhases":[{"buildFiles":[{"fileReference":"bfdfe7dc352907fc980b868725387e98d9c07036facadf4c2fe7142051423416","guid":"bfdfe7dc352907fc980b868725387e98e82259888cd400660e6ae15b115eb233","headerVisibility":"public"}],"guid":"bfdfe7dc352907fc980b868725387e9845bc282ec8aa7540f3a569c2631d21d5","type":"com.apple.buildphase.headers"},{"buildFiles":[{"fileReference":"bfdfe7dc352907fc980b868725387e98d7fd3cf0401e3393c461b2ae7c1591c7","guid":"bfdfe7dc352907fc980b868725387e9849904c696af5deb4aefd6d8ffebf2ea6"},{"fileReference":"bfdfe7dc352907fc980b868725387e9857a0115412b61e72a46155af7b48b848","guid":"bfdfe7dc352907fc980b868725387e98489a95f2019f3ec6e0acd5ba6de8991a"},{"fileReference":"bfdfe7dc352907fc980b868725387e98f19bf67647b9b4da54e0115f35b62be4","guid":"bfdfe7dc352907fc980b868725387e98d8eb7cdafa52e52bc1601de019c778e6"}],"guid":"bfdfe7dc352907fc980b868725387e98f14b5d6b6d6b0c465e2f1e0eaa6bc1cd","type":"com.apple.buildphase.sources"},{"buildFiles":[{"fileReference":"bfdfe7dc352907fc980b868725387e98b14af7c49882340ad551cb13b0a1e06d","guid":"bfdfe7dc352907fc980b868725387e98475ba5d87573359032e9b06fd466a003"}],"guid":"bfdfe7dc352907fc980b868725387e9859badffc37928e123e98be61f8d11d71","type":"com.apple.buildphase.frameworks"},{"buildFiles":[{"guid":"bfdfe7dc352907fc980b868725387e9872e4e537a8c9a8da179493daa4c54b77","targetReference":"bfdfe7dc352907fc980b868725387e98e0be3b0d5ad56f1985578b1f97431765"}],"guid":"bfdfe7dc352907fc980b868725387e9876fd72010a5b056ae41fa1936cd39334","type":"com.apple.buildphase.resources"}],"buildRules":[],"dependencies":[{"guid":"bfdfe7dc352907fc980b868725387e989da425bb6d6d5d8dbb95e4afffb82217","name":"Flutter"},{"guid":"bfdfe7dc352907fc980b868725387e98e0be3b0d5ad56f1985578b1f97431765","name":"shared_preferences_foundation-shared_preferences_foundation_privacy"}],"guid":"bfdfe7dc352907fc980b868725387e9828cab1f188854e0a973e6ff6905c5ffe","name":"shared_preferences_foundation","predominantSourceCodeLanguage":"Xcode.SourceCodeLanguage.Swift","productReference":{"guid":"bfdfe7dc352907fc980b868725387e9815af7ba71ce93f789a463577fc360420","name":"shared_preferences_foundation.framework","type":"product"},"productTypeIdentifier":"com.apple.product-type.framework","provisioningSourceData":[{"bundleIdentifierFromInfoPlist":"${PRODUCT_BUNDLE_IDENTIFIER}","configurationName":"Debug","provisioningStyle":1},{"bundleIdentifierFromInfoPlist":"${PRODUCT_BUNDLE_IDENTIFIER}","configurationName":"Profile","provisioningStyle":1},{"bundleIdentifierFromInfoPlist":"${PRODUCT_BUNDLE_IDENTIFIER}","configurationName":"Release","provisioningStyle":1}],"type":"standard"} \ No newline at end of file diff --git a/mih_ui/android/build/ios/XCBuildData/PIFCache/target/TARGET@v11_hash=3af0402199bd31e72f681872a46f8b81-json b/mih_ui/android/build/ios/XCBuildData/PIFCache/target/TARGET@v11_hash=3af0402199bd31e72f681872a46f8b81-json new file mode 100644 index 00000000..8dbc5d96 --- /dev/null +++ b/mih_ui/android/build/ios/XCBuildData/PIFCache/target/TARGET@v11_hash=3af0402199bd31e72f681872a46f8b81-json @@ -0,0 +1 @@ +{"buildConfigurations":[{"baseConfigurationFileReference":"bfdfe7dc352907fc980b868725387e984313c60e6f9802ff746f03392a8606c6","buildSettings":{"CLANG_ENABLE_OBJC_WEAK":"NO","CLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER":"NO","CODE_SIGN_IDENTITY[sdk=appletvos*]":"","CODE_SIGN_IDENTITY[sdk=iphoneos*]":"","CODE_SIGN_IDENTITY[sdk=watchos*]":"","CURRENT_PROJECT_VERSION":"1","DYLIB_COMPATIBILITY_VERSION":"1","DYLIB_CURRENT_VERSION":"1","DYLIB_INSTALL_NAME_BASE":"@rpath","ENABLE_BITCODE":"NO","ENABLE_MODULE_VERIFIER":"NO","ENABLE_USER_SCRIPT_SANDBOXING":"NO","EXCLUDED_ARCHS[sdk=iphoneos*]":"$(inherited) armv7","EXCLUDED_ARCHS[sdk=iphonesimulator*]":"$(inherited) i386","FRAMEWORK_SEARCH_PATHS[sdk=iphoneos*]":"\"/Users/yaso_meth/Git/flutter/bin/cache/artifacts/engine/ios/Flutter.xcframework/ios-arm64\" $(inherited)","FRAMEWORK_SEARCH_PATHS[sdk=iphonesimulator*]":"\"/Users/yaso_meth/Git/flutter/bin/cache/artifacts/engine/ios/Flutter.xcframework/ios-arm64_x86_64-simulator\" $(inherited)","GCC_PREFIX_HEADER":"Target Support Files/gma_mediation_meta/gma_mediation_meta-prefix.pch","GENERATE_INFOPLIST_FILE":"NO","INFOPLIST_FILE":"Target Support Files/gma_mediation_meta/gma_mediation_meta-Info.plist","INSTALL_PATH":"$(LOCAL_LIBRARY_DIR)/Frameworks","LD_RUNPATH_SEARCH_PATHS":"$(inherited) @executable_path/Frameworks @loader_path/Frameworks","MACH_O_TYPE":"staticlib","MODULEMAP_FILE":"Target Support Files/gma_mediation_meta/gma_mediation_meta.modulemap","ONLY_ACTIVE_ARCH":"NO","OTHER_LDFLAGS":"$(inherited) -framework Flutter","PRODUCT_MODULE_NAME":"gma_mediation_meta","PRODUCT_NAME":"gma_mediation_meta","SDKROOT":"iphoneos","SKIP_INSTALL":"YES","SWIFT_ACTIVE_COMPILATION_CONDITIONS":"$(inherited) ","SWIFT_INSTALL_OBJC_HEADER":"YES","SWIFT_VERSION":"5.0","TARGETED_DEVICE_FAMILY":"1,2","VALID_ARCHS[sdk=iphonesimulator*]":"$(ARCHS_STANDARD)","VERSIONING_SYSTEM":"apple-generic","VERSION_INFO_PREFIX":""},"guid":"bfdfe7dc352907fc980b868725387e9842208ee147f2ba7dc0a8200c0a23e1aa","name":"Debug"},{"baseConfigurationFileReference":"bfdfe7dc352907fc980b868725387e98a3553afa0a155f1b7d0b159f832c1bdf","buildSettings":{"CLANG_ENABLE_OBJC_WEAK":"NO","CLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER":"NO","CODE_SIGN_IDENTITY[sdk=appletvos*]":"","CODE_SIGN_IDENTITY[sdk=iphoneos*]":"","CODE_SIGN_IDENTITY[sdk=watchos*]":"","CURRENT_PROJECT_VERSION":"1","DYLIB_COMPATIBILITY_VERSION":"1","DYLIB_CURRENT_VERSION":"1","DYLIB_INSTALL_NAME_BASE":"@rpath","ENABLE_BITCODE":"NO","ENABLE_MODULE_VERIFIER":"NO","ENABLE_USER_SCRIPT_SANDBOXING":"NO","EXCLUDED_ARCHS[sdk=iphoneos*]":"$(inherited) armv7","EXCLUDED_ARCHS[sdk=iphonesimulator*]":"$(inherited) i386","FRAMEWORK_SEARCH_PATHS[sdk=iphoneos*]":"\"/Users/yaso_meth/Git/flutter/bin/cache/artifacts/engine/ios-release/Flutter.xcframework/ios-arm64\" $(inherited)","FRAMEWORK_SEARCH_PATHS[sdk=iphonesimulator*]":"\"/Users/yaso_meth/Git/flutter/bin/cache/artifacts/engine/ios-release/Flutter.xcframework/ios-arm64_x86_64-simulator\" $(inherited)","GCC_PREFIX_HEADER":"Target Support Files/gma_mediation_meta/gma_mediation_meta-prefix.pch","GENERATE_INFOPLIST_FILE":"NO","INFOPLIST_FILE":"Target Support Files/gma_mediation_meta/gma_mediation_meta-Info.plist","INSTALL_PATH":"$(LOCAL_LIBRARY_DIR)/Frameworks","LD_RUNPATH_SEARCH_PATHS":"$(inherited) @executable_path/Frameworks @loader_path/Frameworks","MACH_O_TYPE":"staticlib","MODULEMAP_FILE":"Target Support Files/gma_mediation_meta/gma_mediation_meta.modulemap","OTHER_LDFLAGS":"$(inherited) -framework Flutter","PRODUCT_MODULE_NAME":"gma_mediation_meta","PRODUCT_NAME":"gma_mediation_meta","SDKROOT":"iphoneos","SKIP_INSTALL":"YES","SWIFT_ACTIVE_COMPILATION_CONDITIONS":"$(inherited) ","SWIFT_INSTALL_OBJC_HEADER":"YES","SWIFT_VERSION":"5.0","TARGETED_DEVICE_FAMILY":"1,2","VALIDATE_PRODUCT":"YES","VALID_ARCHS[sdk=iphonesimulator*]":"$(ARCHS_STANDARD)","VERSIONING_SYSTEM":"apple-generic","VERSION_INFO_PREFIX":""},"guid":"bfdfe7dc352907fc980b868725387e98582ee09ed0a1a1fb05b8c6c1eefa4bd7","name":"Profile"},{"baseConfigurationFileReference":"bfdfe7dc352907fc980b868725387e98a3553afa0a155f1b7d0b159f832c1bdf","buildSettings":{"CLANG_ENABLE_OBJC_WEAK":"NO","CLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER":"NO","CODE_SIGN_IDENTITY[sdk=appletvos*]":"","CODE_SIGN_IDENTITY[sdk=iphoneos*]":"","CODE_SIGN_IDENTITY[sdk=watchos*]":"","CURRENT_PROJECT_VERSION":"1","DYLIB_COMPATIBILITY_VERSION":"1","DYLIB_CURRENT_VERSION":"1","DYLIB_INSTALL_NAME_BASE":"@rpath","ENABLE_BITCODE":"NO","ENABLE_MODULE_VERIFIER":"NO","ENABLE_USER_SCRIPT_SANDBOXING":"NO","EXCLUDED_ARCHS[sdk=iphoneos*]":"$(inherited) armv7","EXCLUDED_ARCHS[sdk=iphonesimulator*]":"$(inherited) i386","FRAMEWORK_SEARCH_PATHS[sdk=iphoneos*]":"\"/Users/yaso_meth/Git/flutter/bin/cache/artifacts/engine/ios-release/Flutter.xcframework/ios-arm64\" $(inherited)","FRAMEWORK_SEARCH_PATHS[sdk=iphonesimulator*]":"\"/Users/yaso_meth/Git/flutter/bin/cache/artifacts/engine/ios-release/Flutter.xcframework/ios-arm64_x86_64-simulator\" $(inherited)","GCC_PREFIX_HEADER":"Target Support Files/gma_mediation_meta/gma_mediation_meta-prefix.pch","GENERATE_INFOPLIST_FILE":"NO","INFOPLIST_FILE":"Target Support Files/gma_mediation_meta/gma_mediation_meta-Info.plist","INSTALL_PATH":"$(LOCAL_LIBRARY_DIR)/Frameworks","LD_RUNPATH_SEARCH_PATHS":"$(inherited) @executable_path/Frameworks @loader_path/Frameworks","MACH_O_TYPE":"staticlib","MODULEMAP_FILE":"Target Support Files/gma_mediation_meta/gma_mediation_meta.modulemap","OTHER_LDFLAGS":"$(inherited) -framework Flutter","PRODUCT_MODULE_NAME":"gma_mediation_meta","PRODUCT_NAME":"gma_mediation_meta","SDKROOT":"iphoneos","SKIP_INSTALL":"YES","SWIFT_ACTIVE_COMPILATION_CONDITIONS":"$(inherited) ","SWIFT_INSTALL_OBJC_HEADER":"YES","SWIFT_VERSION":"5.0","TARGETED_DEVICE_FAMILY":"1,2","VALIDATE_PRODUCT":"YES","VALID_ARCHS[sdk=iphonesimulator*]":"$(ARCHS_STANDARD)","VERSIONING_SYSTEM":"apple-generic","VERSION_INFO_PREFIX":""},"guid":"bfdfe7dc352907fc980b868725387e980066747e0314e58d6523583389a782c5","name":"Release"}],"buildPhases":[{"buildFiles":[{"fileReference":"bfdfe7dc352907fc980b868725387e98f8de3b0000f893d550dd9f3b81ebc5cf","guid":"bfdfe7dc352907fc980b868725387e988239cc2cfc83ba8b654a69c1b5933ffa","headerVisibility":"public"}],"guid":"bfdfe7dc352907fc980b868725387e98c4ff86b7c04b021fbfcd01ef4043f680","type":"com.apple.buildphase.headers"},{"buildFiles":[{"fileReference":"bfdfe7dc352907fc980b868725387e984dfc7910e2cd9fac3233404165834daa","guid":"bfdfe7dc352907fc980b868725387e984fa93fe538d6b99ceab11e20fbc6c572"},{"fileReference":"bfdfe7dc352907fc980b868725387e98de6a43df899eca99ef9a76eb3ad60a9b","guid":"bfdfe7dc352907fc980b868725387e989fed02c35c69741c7b23872edfd83b41"}],"guid":"bfdfe7dc352907fc980b868725387e98b1688df9c765b513cb34ececb01eadcd","type":"com.apple.buildphase.sources"},{"buildFiles":[{"fileReference":"bfdfe7dc352907fc980b868725387e98b14af7c49882340ad551cb13b0a1e06d","guid":"bfdfe7dc352907fc980b868725387e986245627ecb3baa4ad9e7d5f4e4253544"}],"guid":"bfdfe7dc352907fc980b868725387e981969ae65eddb8bcd25ef7d9a0ee87e91","type":"com.apple.buildphase.frameworks"},{"buildFiles":[],"guid":"bfdfe7dc352907fc980b868725387e98d0d9631745bce04e3789df4fa10ad3e6","type":"com.apple.buildphase.resources"}],"buildRules":[],"dependencies":[{"guid":"bfdfe7dc352907fc980b868725387e989da425bb6d6d5d8dbb95e4afffb82217","name":"Flutter"},{"guid":"bfdfe7dc352907fc980b868725387e98bbd9e0ed4cdc41b93625c3661dbcaa81","name":"GoogleMobileAdsMediationFacebook"}],"guid":"bfdfe7dc352907fc980b868725387e98ec9201ffba3c82781a28590604d34ce4","name":"gma_mediation_meta","predominantSourceCodeLanguage":"Xcode.SourceCodeLanguage.Swift","productReference":{"guid":"bfdfe7dc352907fc980b868725387e983de8b30d452f72d63bc2bb3d5c645196","name":"gma_mediation_meta.framework","type":"product"},"productTypeIdentifier":"com.apple.product-type.framework","provisioningSourceData":[{"bundleIdentifierFromInfoPlist":"${PRODUCT_BUNDLE_IDENTIFIER}","configurationName":"Debug","provisioningStyle":1},{"bundleIdentifierFromInfoPlist":"${PRODUCT_BUNDLE_IDENTIFIER}","configurationName":"Profile","provisioningStyle":1},{"bundleIdentifierFromInfoPlist":"${PRODUCT_BUNDLE_IDENTIFIER}","configurationName":"Release","provisioningStyle":1}],"type":"standard"} \ No newline at end of file diff --git a/mih_ui/android/build/ios/XCBuildData/PIFCache/target/TARGET@v11_hash=46e4fdabe3969081354e9e5e60b64b4b-json b/mih_ui/android/build/ios/XCBuildData/PIFCache/target/TARGET@v11_hash=46e4fdabe3969081354e9e5e60b64b4b-json new file mode 100644 index 00000000..b6faabb2 --- /dev/null +++ b/mih_ui/android/build/ios/XCBuildData/PIFCache/target/TARGET@v11_hash=46e4fdabe3969081354e9e5e60b64b4b-json @@ -0,0 +1 @@ +{"buildConfigurations":[{"baseConfigurationFileReference":"bfdfe7dc352907fc980b868725387e980fcd71e29c5847bc1bc9583f1118e75f","buildSettings":{"CODE_SIGNING_ALLOWED":"NO","CODE_SIGNING_IDENTITY":"-","CODE_SIGNING_REQUIRED":"NO","CONFIGURATION_BUILD_DIR":"$(BUILD_DIR)/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME)/GoogleUserMessagingPlatform","EXPANDED_CODE_SIGN_IDENTITY":"-","IBSC_MODULE":"GoogleUserMessagingPlatform","INFOPLIST_FILE":"Target Support Files/GoogleUserMessagingPlatform/ResourceBundle-UserMessagingPlatformResources-GoogleUserMessagingPlatform-Info.plist","IPHONEOS_DEPLOYMENT_TARGET":"12.0","ONLY_ACTIVE_ARCH":"NO","PRODUCT_NAME":"UserMessagingPlatformResources","SDKROOT":"iphoneos","SKIP_INSTALL":"YES","TARGETED_DEVICE_FAMILY":"1,2","WRAPPER_EXTENSION":"bundle"},"guid":"bfdfe7dc352907fc980b868725387e98d8070005d25b539f0e0a08a3311fb447","name":"Debug"},{"baseConfigurationFileReference":"bfdfe7dc352907fc980b868725387e985c479bbc4c266fbeb3d57a3c706051fb","buildSettings":{"CLANG_ENABLE_OBJC_WEAK":"NO","CODE_SIGNING_ALLOWED":"NO","CODE_SIGNING_IDENTITY":"-","CODE_SIGNING_REQUIRED":"NO","CONFIGURATION_BUILD_DIR":"$(BUILD_DIR)/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME)/GoogleUserMessagingPlatform","EXPANDED_CODE_SIGN_IDENTITY":"-","IBSC_MODULE":"GoogleUserMessagingPlatform","INFOPLIST_FILE":"Target Support Files/GoogleUserMessagingPlatform/ResourceBundle-UserMessagingPlatformResources-GoogleUserMessagingPlatform-Info.plist","IPHONEOS_DEPLOYMENT_TARGET":"12.0","PRODUCT_NAME":"UserMessagingPlatformResources","SDKROOT":"iphoneos","SKIP_INSTALL":"YES","TARGETED_DEVICE_FAMILY":"1,2","VALIDATE_PRODUCT":"YES","WRAPPER_EXTENSION":"bundle"},"guid":"bfdfe7dc352907fc980b868725387e98de1c9bc2c4cb036a6000e8397c013520","name":"Profile"},{"baseConfigurationFileReference":"bfdfe7dc352907fc980b868725387e985c479bbc4c266fbeb3d57a3c706051fb","buildSettings":{"CODE_SIGNING_ALLOWED":"NO","CODE_SIGNING_IDENTITY":"-","CODE_SIGNING_REQUIRED":"NO","CONFIGURATION_BUILD_DIR":"$(BUILD_DIR)/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME)/GoogleUserMessagingPlatform","EXPANDED_CODE_SIGN_IDENTITY":"-","IBSC_MODULE":"GoogleUserMessagingPlatform","INFOPLIST_FILE":"Target Support Files/GoogleUserMessagingPlatform/ResourceBundle-UserMessagingPlatformResources-GoogleUserMessagingPlatform-Info.plist","IPHONEOS_DEPLOYMENT_TARGET":"12.0","PRODUCT_NAME":"UserMessagingPlatformResources","SDKROOT":"iphoneos","SKIP_INSTALL":"YES","TARGETED_DEVICE_FAMILY":"1,2","WRAPPER_EXTENSION":"bundle"},"guid":"bfdfe7dc352907fc980b868725387e989301e5dd95ab8eb6d43cc5307d22ae22","name":"Release"}],"buildPhases":[{"buildFiles":[],"guid":"bfdfe7dc352907fc980b868725387e98633b38489199a343af49f929aaaec88b","type":"com.apple.buildphase.sources"},{"buildFiles":[],"guid":"bfdfe7dc352907fc980b868725387e98128c5f626f7af94716c0325c73d1a081","type":"com.apple.buildphase.frameworks"},{"buildFiles":[{"fileReference":"bfdfe7dc352907fc980b868725387e98640b59ad05d12383de1650adc4f4bc54","guid":"bfdfe7dc352907fc980b868725387e98abd9043e61bdb6cddbf7370d96d96d80"}],"guid":"bfdfe7dc352907fc980b868725387e98d62135faa461c3a6c987b0c06852423d","type":"com.apple.buildphase.resources"}],"buildRules":[],"dependencies":[],"guid":"bfdfe7dc352907fc980b868725387e984a8eac8d5b6bc897e9823b3668d5ca68","name":"GoogleUserMessagingPlatform-UserMessagingPlatformResources","productReference":{"guid":"bfdfe7dc352907fc980b868725387e985ea2fcc0a122cfbfb93ccb4e59e732f5","name":"UserMessagingPlatformResources.bundle","type":"product"},"productTypeIdentifier":"com.apple.product-type.bundle","provisioningSourceData":[{"bundleIdentifierFromInfoPlist":"${PRODUCT_BUNDLE_IDENTIFIER}","configurationName":"Debug","provisioningStyle":0},{"bundleIdentifierFromInfoPlist":"${PRODUCT_BUNDLE_IDENTIFIER}","configurationName":"Profile","provisioningStyle":0},{"bundleIdentifierFromInfoPlist":"${PRODUCT_BUNDLE_IDENTIFIER}","configurationName":"Release","provisioningStyle":0}],"type":"standard"} \ No newline at end of file diff --git a/mih_ui/android/build/ios/XCBuildData/PIFCache/target/TARGET@v11_hash=4b924fd5a51dd455efd4e7fe9f2f3ae9-json b/mih_ui/android/build/ios/XCBuildData/PIFCache/target/TARGET@v11_hash=4b924fd5a51dd455efd4e7fe9f2f3ae9-json new file mode 100644 index 00000000..3c7b9988 --- /dev/null +++ b/mih_ui/android/build/ios/XCBuildData/PIFCache/target/TARGET@v11_hash=4b924fd5a51dd455efd4e7fe9f2f3ae9-json @@ -0,0 +1 @@ +{"buildConfigurations":[{"baseConfigurationFileReference":"bfdfe7dc352907fc980b868725387e98eef3be20c160fe75bf8789e71fe75d9a","buildSettings":{"CLANG_ENABLE_OBJC_WEAK":"NO","CODE_SIGN_IDENTITY[sdk=appletvos*]":"","CODE_SIGN_IDENTITY[sdk=iphoneos*]":"","CODE_SIGN_IDENTITY[sdk=watchos*]":"","CURRENT_PROJECT_VERSION":"1","DEFINES_MODULE":"YES","DYLIB_COMPATIBILITY_VERSION":"1","DYLIB_CURRENT_VERSION":"1","DYLIB_INSTALL_NAME_BASE":"@rpath","ENABLE_MODULE_VERIFIER":"NO","ENABLE_USER_SCRIPT_SANDBOXING":"NO","GCC_PREFIX_HEADER":"Target Support Files/Google-Mobile-Ads-SDK/Google-Mobile-Ads-SDK-prefix.pch","GENERATE_INFOPLIST_FILE":"NO","INFOPLIST_FILE":"Target Support Files/Google-Mobile-Ads-SDK/Google-Mobile-Ads-SDK-Info.plist","INSTALL_PATH":"$(LOCAL_LIBRARY_DIR)/Frameworks","IPHONEOS_DEPLOYMENT_TARGET":"12.0","LD_RUNPATH_SEARCH_PATHS":"$(inherited) @executable_path/Frameworks @loader_path/Frameworks","MACH_O_TYPE":"staticlib","MODULEMAP_FILE":"Target Support Files/Google-Mobile-Ads-SDK/Google-Mobile-Ads-SDK.modulemap","ONLY_ACTIVE_ARCH":"NO","PRODUCT_MODULE_NAME":"Google_Mobile_Ads_SDK","PRODUCT_NAME":"Google_Mobile_Ads_SDK","SDKROOT":"iphoneos","SKIP_INSTALL":"YES","SWIFT_ACTIVE_COMPILATION_CONDITIONS":"$(inherited) ","SWIFT_INSTALL_OBJC_HEADER":"YES","SWIFT_VERSION":"5.3","TARGETED_DEVICE_FAMILY":"1,2","VERSIONING_SYSTEM":"apple-generic","VERSION_INFO_PREFIX":""},"guid":"bfdfe7dc352907fc980b868725387e9895d39f6438c3c760697d14f74070c007","name":"Debug"},{"baseConfigurationFileReference":"bfdfe7dc352907fc980b868725387e988ad1fd18441580496a4b9e0a44f0cae8","buildSettings":{"CLANG_ENABLE_OBJC_WEAK":"NO","CODE_SIGN_IDENTITY[sdk=appletvos*]":"","CODE_SIGN_IDENTITY[sdk=iphoneos*]":"","CODE_SIGN_IDENTITY[sdk=watchos*]":"","CURRENT_PROJECT_VERSION":"1","DEFINES_MODULE":"YES","DYLIB_COMPATIBILITY_VERSION":"1","DYLIB_CURRENT_VERSION":"1","DYLIB_INSTALL_NAME_BASE":"@rpath","ENABLE_MODULE_VERIFIER":"NO","ENABLE_USER_SCRIPT_SANDBOXING":"NO","GCC_PREFIX_HEADER":"Target Support Files/Google-Mobile-Ads-SDK/Google-Mobile-Ads-SDK-prefix.pch","GENERATE_INFOPLIST_FILE":"NO","INFOPLIST_FILE":"Target Support Files/Google-Mobile-Ads-SDK/Google-Mobile-Ads-SDK-Info.plist","INSTALL_PATH":"$(LOCAL_LIBRARY_DIR)/Frameworks","IPHONEOS_DEPLOYMENT_TARGET":"12.0","LD_RUNPATH_SEARCH_PATHS":"$(inherited) @executable_path/Frameworks @loader_path/Frameworks","MACH_O_TYPE":"staticlib","MODULEMAP_FILE":"Target Support Files/Google-Mobile-Ads-SDK/Google-Mobile-Ads-SDK.modulemap","PRODUCT_MODULE_NAME":"Google_Mobile_Ads_SDK","PRODUCT_NAME":"Google_Mobile_Ads_SDK","SDKROOT":"iphoneos","SKIP_INSTALL":"YES","SWIFT_ACTIVE_COMPILATION_CONDITIONS":"$(inherited) ","SWIFT_INSTALL_OBJC_HEADER":"YES","SWIFT_VERSION":"5.3","TARGETED_DEVICE_FAMILY":"1,2","VALIDATE_PRODUCT":"YES","VERSIONING_SYSTEM":"apple-generic","VERSION_INFO_PREFIX":""},"guid":"bfdfe7dc352907fc980b868725387e98a0f595b99ebfd9b3b377a474553a7fb0","name":"Profile"},{"baseConfigurationFileReference":"bfdfe7dc352907fc980b868725387e988ad1fd18441580496a4b9e0a44f0cae8","buildSettings":{"CLANG_ENABLE_OBJC_WEAK":"NO","CODE_SIGN_IDENTITY[sdk=appletvos*]":"","CODE_SIGN_IDENTITY[sdk=iphoneos*]":"","CODE_SIGN_IDENTITY[sdk=watchos*]":"","CURRENT_PROJECT_VERSION":"1","DEFINES_MODULE":"YES","DYLIB_COMPATIBILITY_VERSION":"1","DYLIB_CURRENT_VERSION":"1","DYLIB_INSTALL_NAME_BASE":"@rpath","ENABLE_MODULE_VERIFIER":"NO","ENABLE_USER_SCRIPT_SANDBOXING":"NO","GCC_PREFIX_HEADER":"Target Support Files/Google-Mobile-Ads-SDK/Google-Mobile-Ads-SDK-prefix.pch","GENERATE_INFOPLIST_FILE":"NO","INFOPLIST_FILE":"Target Support Files/Google-Mobile-Ads-SDK/Google-Mobile-Ads-SDK-Info.plist","INSTALL_PATH":"$(LOCAL_LIBRARY_DIR)/Frameworks","IPHONEOS_DEPLOYMENT_TARGET":"12.0","LD_RUNPATH_SEARCH_PATHS":"$(inherited) @executable_path/Frameworks @loader_path/Frameworks","MACH_O_TYPE":"staticlib","MODULEMAP_FILE":"Target Support Files/Google-Mobile-Ads-SDK/Google-Mobile-Ads-SDK.modulemap","PRODUCT_MODULE_NAME":"Google_Mobile_Ads_SDK","PRODUCT_NAME":"Google_Mobile_Ads_SDK","SDKROOT":"iphoneos","SKIP_INSTALL":"YES","SWIFT_ACTIVE_COMPILATION_CONDITIONS":"$(inherited) ","SWIFT_INSTALL_OBJC_HEADER":"YES","SWIFT_VERSION":"5.3","TARGETED_DEVICE_FAMILY":"1,2","VALIDATE_PRODUCT":"YES","VERSIONING_SYSTEM":"apple-generic","VERSION_INFO_PREFIX":""},"guid":"bfdfe7dc352907fc980b868725387e98ec66ebd7e509a5ae351eb735f67c1dd6","name":"Release"}],"buildPhases":[{"buildFiles":[{"fileReference":"bfdfe7dc352907fc980b868725387e982d361e23934d13045cda7e58f8f9e857","guid":"bfdfe7dc352907fc980b868725387e98bfd6bc07c0feb5d200d030c68246ccb2","headerVisibility":"public"}],"guid":"bfdfe7dc352907fc980b868725387e98e90dbc6f14ab6fddfb7cfb52650e6baa","type":"com.apple.buildphase.headers"},{"alwaysOutOfDate":"false","alwaysRunForInstallHdrs":"false","buildFiles":[],"emitEnvironment":"false","guid":"bfdfe7dc352907fc980b868725387e982b44c516936750ab33740e0f34b79301","inputFileListPaths":["${PODS_ROOT}/Target Support Files/Google-Mobile-Ads-SDK/Google-Mobile-Ads-SDK-xcframeworks-input-files.xcfilelist"],"inputFilePaths":[],"name":"[CP] Copy XCFrameworks","originalObjectID":"54A5A3E554ECD3D0840D599053497866","outputFileListPaths":["${PODS_ROOT}/Target Support Files/Google-Mobile-Ads-SDK/Google-Mobile-Ads-SDK-xcframeworks-output-files.xcfilelist"],"outputFilePaths":[],"sandboxingOverride":"basedOnBuildSetting","scriptContents":"\"${PODS_ROOT}/Target Support Files/Google-Mobile-Ads-SDK/Google-Mobile-Ads-SDK-xcframeworks.sh\"\n","shellPath":"/bin/sh","type":"com.apple.buildphase.shell-script"},{"buildFiles":[{"fileReference":"bfdfe7dc352907fc980b868725387e980db896d121df87c41c7bb87c65b3946e","guid":"bfdfe7dc352907fc980b868725387e983582f984cc7f56a94c9f1b106157b2ce"},{"fileReference":"bfdfe7dc352907fc980b868725387e989b5a6d6941a300be315e89d9de2d68d7","guid":"bfdfe7dc352907fc980b868725387e981787c00319fbc008e76bd51212dfb8fa"}],"guid":"bfdfe7dc352907fc980b868725387e9874306a37930eb5d34d19474424a49911","type":"com.apple.buildphase.sources"},{"buildFiles":[{"fileReference":"bfdfe7dc352907fc980b868725387e98b14af7c49882340ad551cb13b0a1e06d","guid":"bfdfe7dc352907fc980b868725387e988639c726c13cba5a0d9f3090f852ba0c"}],"guid":"bfdfe7dc352907fc980b868725387e98d84cd42926dca469b94512f76bd2ac43","type":"com.apple.buildphase.frameworks"},{"buildFiles":[],"guid":"bfdfe7dc352907fc980b868725387e98c4624bd3f1c88f6e9a26ba57dff561e9","type":"com.apple.buildphase.resources"}],"buildRules":[],"dependencies":[{"guid":"bfdfe7dc352907fc980b868725387e98468089666b04a941512e80a0cc9cf153","name":"Google-Mobile-Ads-SDK-GoogleMobileAdsResources"},{"guid":"bfdfe7dc352907fc980b868725387e98c777611770584bd7c20ebf80e3d30200","name":"GoogleUserMessagingPlatform"}],"guid":"bfdfe7dc352907fc980b868725387e98cd53d937e824fad9f4527eeeb684cb40","name":"Google-Mobile-Ads-SDK","predominantSourceCodeLanguage":"Xcode.SourceCodeLanguage.Swift","productReference":{"guid":"bfdfe7dc352907fc980b868725387e9818a94369b493dd5e2142e633eac417e6","name":"Google_Mobile_Ads_SDK.framework","type":"product"},"productTypeIdentifier":"com.apple.product-type.framework","provisioningSourceData":[{"bundleIdentifierFromInfoPlist":"${PRODUCT_BUNDLE_IDENTIFIER}","configurationName":"Debug","provisioningStyle":1},{"bundleIdentifierFromInfoPlist":"${PRODUCT_BUNDLE_IDENTIFIER}","configurationName":"Profile","provisioningStyle":1},{"bundleIdentifierFromInfoPlist":"${PRODUCT_BUNDLE_IDENTIFIER}","configurationName":"Release","provisioningStyle":1}],"type":"standard"} \ No newline at end of file diff --git a/mih_ui/android/build/ios/XCBuildData/PIFCache/target/TARGET@v11_hash=4cabd0c48a00d7a4ed741cb699f1cc8e-json b/mih_ui/android/build/ios/XCBuildData/PIFCache/target/TARGET@v11_hash=4cabd0c48a00d7a4ed741cb699f1cc8e-json new file mode 100644 index 00000000..b5940291 --- /dev/null +++ b/mih_ui/android/build/ios/XCBuildData/PIFCache/target/TARGET@v11_hash=4cabd0c48a00d7a4ed741cb699f1cc8e-json @@ -0,0 +1 @@ +{"buildConfigurations":[{"baseConfigurationFileReference":"bfdfe7dc352907fc980b868725387e98e7f2a28e7b8ddc8b338bf3b440155a56","buildSettings":{"ASSETCATALOG_COMPILER_APPICON_NAME":"AppIcon","ASSETCATALOG_COMPILER_GLOBAL_ACCENT_COLOR_NAME":"AccentColor","CLANG_ENABLE_OBJC_WEAK":"NO","ENABLE_USER_SCRIPT_SANDBOXING":"NO","IPHONEOS_DEPLOYMENT_TARGET":"15.0","LD_RUNPATH_SEARCH_PATHS":"$(inherited) @executable_path/Frameworks","ONLY_ACTIVE_ARCH":"NO","SDKROOT":"iphoneos","TARGETED_DEVICE_FAMILY":"1,2"},"guid":"bfdfe7dc352907fc980b868725387e98a3d5f5bdf8bd74b2e38d03fee57874a9","name":"Debug"},{"baseConfigurationFileReference":"bfdfe7dc352907fc980b868725387e984c35e946ddb98e62c2ccb9cc1055f1ac","buildSettings":{"ASSETCATALOG_COMPILER_APPICON_NAME":"AppIcon","ASSETCATALOG_COMPILER_GLOBAL_ACCENT_COLOR_NAME":"AccentColor","CLANG_ENABLE_OBJC_WEAK":"NO","ENABLE_USER_SCRIPT_SANDBOXING":"NO","IPHONEOS_DEPLOYMENT_TARGET":"15.0","LD_RUNPATH_SEARCH_PATHS":"$(inherited) @executable_path/Frameworks","SDKROOT":"iphoneos","TARGETED_DEVICE_FAMILY":"1,2","VALIDATE_PRODUCT":"YES"},"guid":"bfdfe7dc352907fc980b868725387e981a104acc4450feed5fa9a6e9bbde99e6","name":"Profile"},{"baseConfigurationFileReference":"bfdfe7dc352907fc980b868725387e984c35e946ddb98e62c2ccb9cc1055f1ac","buildSettings":{"ASSETCATALOG_COMPILER_APPICON_NAME":"AppIcon","ASSETCATALOG_COMPILER_GLOBAL_ACCENT_COLOR_NAME":"AccentColor","CLANG_ENABLE_OBJC_WEAK":"NO","ENABLE_USER_SCRIPT_SANDBOXING":"NO","IPHONEOS_DEPLOYMENT_TARGET":"15.0","LD_RUNPATH_SEARCH_PATHS":"$(inherited) @executable_path/Frameworks","SDKROOT":"iphoneos","TARGETED_DEVICE_FAMILY":"1,2","VALIDATE_PRODUCT":"YES"},"guid":"bfdfe7dc352907fc980b868725387e982cd019beee53251f78381aed3ac00408","name":"Release"}],"buildPhases":[],"buildRules":[],"dependencies":[{"guid":"bfdfe7dc352907fc980b868725387e98b762d5de103fb6cfc7506aa6be1d4f33","name":"FirebaseAuth"},{"guid":"bfdfe7dc352907fc980b868725387e98a408a4c1f668e62161cdeba76f57d50c","name":"FirebaseCore"}],"guid":"bfdfe7dc352907fc980b868725387e98d57b8bce60a0f11113f4cff532db68d3","name":"Firebase","provisioningSourceData":[{"bundleIdentifierFromInfoPlist":"","configurationName":"Debug","provisioningStyle":0},{"bundleIdentifierFromInfoPlist":"","configurationName":"Profile","provisioningStyle":0},{"bundleIdentifierFromInfoPlist":"","configurationName":"Release","provisioningStyle":0}],"type":"aggregate"} \ No newline at end of file diff --git a/mih_ui/android/build/ios/XCBuildData/PIFCache/target/TARGET@v11_hash=4cc1f6e212912d53710de3aa08e4aa3c-json b/mih_ui/android/build/ios/XCBuildData/PIFCache/target/TARGET@v11_hash=4cc1f6e212912d53710de3aa08e4aa3c-json new file mode 100644 index 00000000..685d750c --- /dev/null +++ b/mih_ui/android/build/ios/XCBuildData/PIFCache/target/TARGET@v11_hash=4cc1f6e212912d53710de3aa08e4aa3c-json @@ -0,0 +1 @@ +{"buildConfigurations":[{"baseConfigurationFileReference":"bfdfe7dc352907fc980b868725387e98237671cfe20903d6f94682d7135ab52a","buildSettings":{"CLANG_ENABLE_OBJC_WEAK":"NO","CLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER":"NO","CODE_SIGN_IDENTITY[sdk=appletvos*]":"","CODE_SIGN_IDENTITY[sdk=iphoneos*]":"","CODE_SIGN_IDENTITY[sdk=watchos*]":"","CURRENT_PROJECT_VERSION":"1","DEFINES_MODULE":"YES","DYLIB_COMPATIBILITY_VERSION":"1","DYLIB_CURRENT_VERSION":"1","DYLIB_INSTALL_NAME_BASE":"@rpath","ENABLE_BITCODE":"NO","ENABLE_MODULE_VERIFIER":"NO","ENABLE_USER_SCRIPT_SANDBOXING":"NO","EXCLUDED_ARCHS[sdk=iphoneos*]":"$(inherited) armv7","EXCLUDED_ARCHS[sdk=iphonesimulator*]":"$(inherited) i386","FRAMEWORK_SEARCH_PATHS[sdk=iphoneos*]":"\"/Users/yaso_meth/Git/flutter/bin/cache/artifacts/engine/ios/Flutter.xcframework/ios-arm64\" $(inherited)","FRAMEWORK_SEARCH_PATHS[sdk=iphonesimulator*]":"\"/Users/yaso_meth/Git/flutter/bin/cache/artifacts/engine/ios/Flutter.xcframework/ios-arm64_x86_64-simulator\" $(inherited)","GCC_PREFIX_HEADER":"Target Support Files/path_provider_foundation/path_provider_foundation-prefix.pch","GENERATE_INFOPLIST_FILE":"NO","INFOPLIST_FILE":"Target Support Files/path_provider_foundation/path_provider_foundation-Info.plist","INSTALL_PATH":"$(LOCAL_LIBRARY_DIR)/Frameworks","MODULEMAP_FILE":"Target Support Files/path_provider_foundation/path_provider_foundation.modulemap","ONLY_ACTIVE_ARCH":"NO","OTHER_LDFLAGS":"$(inherited) -framework Flutter","PRODUCT_MODULE_NAME":"path_provider_foundation","PRODUCT_NAME":"path_provider_foundation","SDKROOT":"iphoneos","SKIP_INSTALL":"YES","SWIFT_ACTIVE_COMPILATION_CONDITIONS":"$(inherited) ","SWIFT_INSTALL_OBJC_HEADER":"YES","SWIFT_VERSION":"5.0","TARGETED_DEVICE_FAMILY":"1,2","VALID_ARCHS[sdk=iphonesimulator*]":"$(ARCHS_STANDARD)","VERSIONING_SYSTEM":"apple-generic","VERSION_INFO_PREFIX":""},"guid":"bfdfe7dc352907fc980b868725387e98ab88586633079f928287f370e8b6f07b","name":"Debug"},{"baseConfigurationFileReference":"bfdfe7dc352907fc980b868725387e980e0c5fa0e8218bd665f72f14cbfc898f","buildSettings":{"CLANG_ENABLE_OBJC_WEAK":"NO","CLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER":"NO","CODE_SIGN_IDENTITY[sdk=appletvos*]":"","CODE_SIGN_IDENTITY[sdk=iphoneos*]":"","CODE_SIGN_IDENTITY[sdk=watchos*]":"","CURRENT_PROJECT_VERSION":"1","DEFINES_MODULE":"YES","DYLIB_COMPATIBILITY_VERSION":"1","DYLIB_CURRENT_VERSION":"1","DYLIB_INSTALL_NAME_BASE":"@rpath","ENABLE_BITCODE":"NO","ENABLE_MODULE_VERIFIER":"NO","ENABLE_USER_SCRIPT_SANDBOXING":"NO","EXCLUDED_ARCHS[sdk=iphoneos*]":"$(inherited) armv7","EXCLUDED_ARCHS[sdk=iphonesimulator*]":"$(inherited) i386","FRAMEWORK_SEARCH_PATHS[sdk=iphoneos*]":"\"/Users/yaso_meth/Git/flutter/bin/cache/artifacts/engine/ios-release/Flutter.xcframework/ios-arm64\" $(inherited)","FRAMEWORK_SEARCH_PATHS[sdk=iphonesimulator*]":"\"/Users/yaso_meth/Git/flutter/bin/cache/artifacts/engine/ios-release/Flutter.xcframework/ios-arm64_x86_64-simulator\" $(inherited)","GCC_PREFIX_HEADER":"Target Support Files/path_provider_foundation/path_provider_foundation-prefix.pch","GENERATE_INFOPLIST_FILE":"NO","INFOPLIST_FILE":"Target Support Files/path_provider_foundation/path_provider_foundation-Info.plist","INSTALL_PATH":"$(LOCAL_LIBRARY_DIR)/Frameworks","MODULEMAP_FILE":"Target Support Files/path_provider_foundation/path_provider_foundation.modulemap","OTHER_LDFLAGS":"$(inherited) -framework Flutter","PRODUCT_MODULE_NAME":"path_provider_foundation","PRODUCT_NAME":"path_provider_foundation","SDKROOT":"iphoneos","SKIP_INSTALL":"YES","SWIFT_ACTIVE_COMPILATION_CONDITIONS":"$(inherited) ","SWIFT_INSTALL_OBJC_HEADER":"YES","SWIFT_VERSION":"5.0","TARGETED_DEVICE_FAMILY":"1,2","VALIDATE_PRODUCT":"YES","VALID_ARCHS[sdk=iphonesimulator*]":"$(ARCHS_STANDARD)","VERSIONING_SYSTEM":"apple-generic","VERSION_INFO_PREFIX":""},"guid":"bfdfe7dc352907fc980b868725387e9880f884b2537bd891ed54ff6e3ab7d0ee","name":"Profile"},{"baseConfigurationFileReference":"bfdfe7dc352907fc980b868725387e980e0c5fa0e8218bd665f72f14cbfc898f","buildSettings":{"CLANG_ENABLE_OBJC_WEAK":"NO","CLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER":"NO","CODE_SIGN_IDENTITY[sdk=appletvos*]":"","CODE_SIGN_IDENTITY[sdk=iphoneos*]":"","CODE_SIGN_IDENTITY[sdk=watchos*]":"","CURRENT_PROJECT_VERSION":"1","DEFINES_MODULE":"YES","DYLIB_COMPATIBILITY_VERSION":"1","DYLIB_CURRENT_VERSION":"1","DYLIB_INSTALL_NAME_BASE":"@rpath","ENABLE_BITCODE":"NO","ENABLE_MODULE_VERIFIER":"NO","ENABLE_USER_SCRIPT_SANDBOXING":"NO","EXCLUDED_ARCHS[sdk=iphoneos*]":"$(inherited) armv7","EXCLUDED_ARCHS[sdk=iphonesimulator*]":"$(inherited) i386","FRAMEWORK_SEARCH_PATHS[sdk=iphoneos*]":"\"/Users/yaso_meth/Git/flutter/bin/cache/artifacts/engine/ios-release/Flutter.xcframework/ios-arm64\" $(inherited)","FRAMEWORK_SEARCH_PATHS[sdk=iphonesimulator*]":"\"/Users/yaso_meth/Git/flutter/bin/cache/artifacts/engine/ios-release/Flutter.xcframework/ios-arm64_x86_64-simulator\" $(inherited)","GCC_PREFIX_HEADER":"Target Support Files/path_provider_foundation/path_provider_foundation-prefix.pch","GENERATE_INFOPLIST_FILE":"NO","INFOPLIST_FILE":"Target Support Files/path_provider_foundation/path_provider_foundation-Info.plist","INSTALL_PATH":"$(LOCAL_LIBRARY_DIR)/Frameworks","MODULEMAP_FILE":"Target Support Files/path_provider_foundation/path_provider_foundation.modulemap","OTHER_LDFLAGS":"$(inherited) -framework Flutter","PRODUCT_MODULE_NAME":"path_provider_foundation","PRODUCT_NAME":"path_provider_foundation","SDKROOT":"iphoneos","SKIP_INSTALL":"YES","SWIFT_ACTIVE_COMPILATION_CONDITIONS":"$(inherited) ","SWIFT_INSTALL_OBJC_HEADER":"YES","SWIFT_VERSION":"5.0","TARGETED_DEVICE_FAMILY":"1,2","VALIDATE_PRODUCT":"YES","VALID_ARCHS[sdk=iphonesimulator*]":"$(ARCHS_STANDARD)","VERSIONING_SYSTEM":"apple-generic","VERSION_INFO_PREFIX":""},"guid":"bfdfe7dc352907fc980b868725387e9858b9d941e76db42d349048c14af0e16e","name":"Release"}],"buildPhases":[{"buildFiles":[{"fileReference":"bfdfe7dc352907fc980b868725387e98b67bc92c615d1dba3ac53bf7b30bdb94","guid":"bfdfe7dc352907fc980b868725387e98e40234757d04478dc54a213f59e845fa","headerVisibility":"public"}],"guid":"bfdfe7dc352907fc980b868725387e98450b40315711083d32b0ed949174ff28","type":"com.apple.buildphase.headers"},{"buildFiles":[{"fileReference":"bfdfe7dc352907fc980b868725387e9803bb7f63530cdb500ba84b0a1a44af44","guid":"bfdfe7dc352907fc980b868725387e984a6cdfb5d6c5b7f2a63f81831458165e"},{"fileReference":"bfdfe7dc352907fc980b868725387e9854c6536298ac986565a978d13cd2d6f9","guid":"bfdfe7dc352907fc980b868725387e986dfc1b5ca512f6383be32a7124385963"},{"fileReference":"bfdfe7dc352907fc980b868725387e9840d362b89ea106c24e2dbcd47a7474bd","guid":"bfdfe7dc352907fc980b868725387e98ef705c119ac1f3b015cda82f10194a36"}],"guid":"bfdfe7dc352907fc980b868725387e98f5d455158bacea210fd45e1a8f3245fc","type":"com.apple.buildphase.sources"},{"buildFiles":[{"fileReference":"bfdfe7dc352907fc980b868725387e98b14af7c49882340ad551cb13b0a1e06d","guid":"bfdfe7dc352907fc980b868725387e9829f34398048903731961241124ac546e"}],"guid":"bfdfe7dc352907fc980b868725387e987ebedde198dc993f3ca38aec4ed08768","type":"com.apple.buildphase.frameworks"},{"buildFiles":[{"guid":"bfdfe7dc352907fc980b868725387e98234997a2811e55e2dfc23faf0b9d3093","targetReference":"bfdfe7dc352907fc980b868725387e987ea64ee8d53085bf9edd1a57aaf8cbb5"}],"guid":"bfdfe7dc352907fc980b868725387e98ac45f7d09c5ae0c1d8f7eb8e8ff004ab","type":"com.apple.buildphase.resources"}],"buildRules":[],"dependencies":[{"guid":"bfdfe7dc352907fc980b868725387e989da425bb6d6d5d8dbb95e4afffb82217","name":"Flutter"},{"guid":"bfdfe7dc352907fc980b868725387e987ea64ee8d53085bf9edd1a57aaf8cbb5","name":"path_provider_foundation-path_provider_foundation_privacy"}],"guid":"bfdfe7dc352907fc980b868725387e9830037b09fee48cfce1f8562d753688c8","name":"path_provider_foundation","predominantSourceCodeLanguage":"Xcode.SourceCodeLanguage.Swift","productReference":{"guid":"bfdfe7dc352907fc980b868725387e98177b75fe6f519d73b22b382cca137f1c","name":"path_provider_foundation.framework","type":"product"},"productTypeIdentifier":"com.apple.product-type.framework","provisioningSourceData":[{"bundleIdentifierFromInfoPlist":"${PRODUCT_BUNDLE_IDENTIFIER}","configurationName":"Debug","provisioningStyle":1},{"bundleIdentifierFromInfoPlist":"${PRODUCT_BUNDLE_IDENTIFIER}","configurationName":"Profile","provisioningStyle":1},{"bundleIdentifierFromInfoPlist":"${PRODUCT_BUNDLE_IDENTIFIER}","configurationName":"Release","provisioningStyle":1}],"type":"standard"} \ No newline at end of file diff --git a/mih_ui/android/build/ios/XCBuildData/PIFCache/target/TARGET@v11_hash=4d623afd122ecb9d6d730809785df91d-json b/mih_ui/android/build/ios/XCBuildData/PIFCache/target/TARGET@v11_hash=4d623afd122ecb9d6d730809785df91d-json new file mode 100644 index 00000000..dde5b011 --- /dev/null +++ b/mih_ui/android/build/ios/XCBuildData/PIFCache/target/TARGET@v11_hash=4d623afd122ecb9d6d730809785df91d-json @@ -0,0 +1 @@ +{"buildConfigurations":[{"baseConfigurationFileReference":"bfdfe7dc352907fc980b868725387e9899a3c545d51db50c0cf261030b824669","buildSettings":{"CODE_SIGNING_ALLOWED":"NO","CODE_SIGNING_IDENTITY":"-","CODE_SIGNING_REQUIRED":"NO","CONFIGURATION_BUILD_DIR":"$(BUILD_DIR)/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME)/quick_actions_ios","EXPANDED_CODE_SIGN_IDENTITY":"-","IBSC_MODULE":"quick_actions_ios","INFOPLIST_FILE":"Target Support Files/quick_actions_ios/ResourceBundle-quick_actions_ios_privacy-quick_actions_ios-Info.plist","IPHONEOS_DEPLOYMENT_TARGET":"12.0","ONLY_ACTIVE_ARCH":"NO","PRODUCT_NAME":"quick_actions_ios_privacy","SDKROOT":"iphoneos","SKIP_INSTALL":"YES","TARGETED_DEVICE_FAMILY":"1,2","WRAPPER_EXTENSION":"bundle"},"guid":"bfdfe7dc352907fc980b868725387e9825f24fdafd16dee2367a8f077c551266","name":"Debug"},{"baseConfigurationFileReference":"bfdfe7dc352907fc980b868725387e98968b3bc9ee9e49b2679f77b1c2b31c1d","buildSettings":{"CLANG_ENABLE_OBJC_WEAK":"NO","CODE_SIGNING_ALLOWED":"NO","CODE_SIGNING_IDENTITY":"-","CODE_SIGNING_REQUIRED":"NO","CONFIGURATION_BUILD_DIR":"$(BUILD_DIR)/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME)/quick_actions_ios","EXPANDED_CODE_SIGN_IDENTITY":"-","IBSC_MODULE":"quick_actions_ios","INFOPLIST_FILE":"Target Support Files/quick_actions_ios/ResourceBundle-quick_actions_ios_privacy-quick_actions_ios-Info.plist","IPHONEOS_DEPLOYMENT_TARGET":"12.0","PRODUCT_NAME":"quick_actions_ios_privacy","SDKROOT":"iphoneos","SKIP_INSTALL":"YES","TARGETED_DEVICE_FAMILY":"1,2","VALIDATE_PRODUCT":"YES","WRAPPER_EXTENSION":"bundle"},"guid":"bfdfe7dc352907fc980b868725387e989d71b68699197c2964ed952c52317108","name":"Profile"},{"baseConfigurationFileReference":"bfdfe7dc352907fc980b868725387e98968b3bc9ee9e49b2679f77b1c2b31c1d","buildSettings":{"CODE_SIGNING_ALLOWED":"NO","CODE_SIGNING_IDENTITY":"-","CODE_SIGNING_REQUIRED":"NO","CONFIGURATION_BUILD_DIR":"$(BUILD_DIR)/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME)/quick_actions_ios","EXPANDED_CODE_SIGN_IDENTITY":"-","IBSC_MODULE":"quick_actions_ios","INFOPLIST_FILE":"Target Support Files/quick_actions_ios/ResourceBundle-quick_actions_ios_privacy-quick_actions_ios-Info.plist","IPHONEOS_DEPLOYMENT_TARGET":"12.0","PRODUCT_NAME":"quick_actions_ios_privacy","SDKROOT":"iphoneos","SKIP_INSTALL":"YES","TARGETED_DEVICE_FAMILY":"1,2","WRAPPER_EXTENSION":"bundle"},"guid":"bfdfe7dc352907fc980b868725387e98f408d434fdaa491912a43eb5fc0b7c51","name":"Release"}],"buildPhases":[{"buildFiles":[],"guid":"bfdfe7dc352907fc980b868725387e9860b5503cafc0f3e0ee5f39486fce21f2","type":"com.apple.buildphase.sources"},{"buildFiles":[],"guid":"bfdfe7dc352907fc980b868725387e984ce69b5bc5a78311dbe7681fc5cde81c","type":"com.apple.buildphase.frameworks"},{"buildFiles":[{"fileReference":"bfdfe7dc352907fc980b868725387e9897ece101e217083edce53455b9b44d62","guid":"bfdfe7dc352907fc980b868725387e98f22ae4dbfb03af3d8271ecc228f2d865"}],"guid":"bfdfe7dc352907fc980b868725387e98ef759b8c8c0563068bd54b8899291c01","type":"com.apple.buildphase.resources"}],"buildRules":[],"dependencies":[],"guid":"bfdfe7dc352907fc980b868725387e980e0d42b02f67da84628f3c3fd30ed4e0","name":"quick_actions_ios-quick_actions_ios_privacy","productReference":{"guid":"bfdfe7dc352907fc980b868725387e9821b5524199a1a9b5cefe276f98c67dc8","name":"quick_actions_ios_privacy.bundle","type":"product"},"productTypeIdentifier":"com.apple.product-type.bundle","provisioningSourceData":[{"bundleIdentifierFromInfoPlist":"${PRODUCT_BUNDLE_IDENTIFIER}","configurationName":"Debug","provisioningStyle":0},{"bundleIdentifierFromInfoPlist":"${PRODUCT_BUNDLE_IDENTIFIER}","configurationName":"Profile","provisioningStyle":0},{"bundleIdentifierFromInfoPlist":"${PRODUCT_BUNDLE_IDENTIFIER}","configurationName":"Release","provisioningStyle":0}],"type":"standard"} \ No newline at end of file diff --git a/mih_ui/android/build/ios/XCBuildData/PIFCache/target/TARGET@v11_hash=5248d9ba098cf8d77d31b3cf7f8b5a69-json b/mih_ui/android/build/ios/XCBuildData/PIFCache/target/TARGET@v11_hash=5248d9ba098cf8d77d31b3cf7f8b5a69-json new file mode 100644 index 00000000..fb8c7cea --- /dev/null +++ b/mih_ui/android/build/ios/XCBuildData/PIFCache/target/TARGET@v11_hash=5248d9ba098cf8d77d31b3cf7f8b5a69-json @@ -0,0 +1 @@ +{"buildConfigurations":[{"baseConfigurationFileReference":"bfdfe7dc352907fc980b868725387e980fcd71e29c5847bc1bc9583f1118e75f","buildSettings":{"ASSETCATALOG_COMPILER_APPICON_NAME":"AppIcon","ASSETCATALOG_COMPILER_GLOBAL_ACCENT_COLOR_NAME":"AccentColor","CLANG_ENABLE_OBJC_WEAK":"NO","ENABLE_USER_SCRIPT_SANDBOXING":"NO","IPHONEOS_DEPLOYMENT_TARGET":"12.0","LD_RUNPATH_SEARCH_PATHS":"$(inherited) @executable_path/Frameworks","ONLY_ACTIVE_ARCH":"NO","SDKROOT":"iphoneos","TARGETED_DEVICE_FAMILY":"1,2"},"guid":"bfdfe7dc352907fc980b868725387e9849b0a8fef29b1e33f3642957f3e0b890","name":"Debug"},{"baseConfigurationFileReference":"bfdfe7dc352907fc980b868725387e985c479bbc4c266fbeb3d57a3c706051fb","buildSettings":{"ASSETCATALOG_COMPILER_APPICON_NAME":"AppIcon","ASSETCATALOG_COMPILER_GLOBAL_ACCENT_COLOR_NAME":"AccentColor","CLANG_ENABLE_OBJC_WEAK":"NO","ENABLE_USER_SCRIPT_SANDBOXING":"NO","IPHONEOS_DEPLOYMENT_TARGET":"12.0","LD_RUNPATH_SEARCH_PATHS":"$(inherited) @executable_path/Frameworks","SDKROOT":"iphoneos","TARGETED_DEVICE_FAMILY":"1,2","VALIDATE_PRODUCT":"YES"},"guid":"bfdfe7dc352907fc980b868725387e98c07bc701f6dc8f95d2ddc7d82b98c075","name":"Profile"},{"baseConfigurationFileReference":"bfdfe7dc352907fc980b868725387e985c479bbc4c266fbeb3d57a3c706051fb","buildSettings":{"ASSETCATALOG_COMPILER_APPICON_NAME":"AppIcon","ASSETCATALOG_COMPILER_GLOBAL_ACCENT_COLOR_NAME":"AccentColor","CLANG_ENABLE_OBJC_WEAK":"NO","ENABLE_USER_SCRIPT_SANDBOXING":"NO","IPHONEOS_DEPLOYMENT_TARGET":"12.0","LD_RUNPATH_SEARCH_PATHS":"$(inherited) @executable_path/Frameworks","SDKROOT":"iphoneos","TARGETED_DEVICE_FAMILY":"1,2","VALIDATE_PRODUCT":"YES"},"guid":"bfdfe7dc352907fc980b868725387e98533b424307a06a0ca8c8daaf5b4a850a","name":"Release"}],"buildPhases":[{"alwaysOutOfDate":"false","alwaysRunForInstallHdrs":"false","buildFiles":[],"emitEnvironment":"false","guid":"bfdfe7dc352907fc980b868725387e987714768b2802b303372f44281b00b3c8","inputFileListPaths":["${PODS_ROOT}/Target Support Files/GoogleUserMessagingPlatform/GoogleUserMessagingPlatform-xcframeworks-input-files.xcfilelist"],"inputFilePaths":[],"name":"[CP] Copy XCFrameworks","originalObjectID":"B5375E1D4AF75C11071DABBF1B769DF2","outputFileListPaths":["${PODS_ROOT}/Target Support Files/GoogleUserMessagingPlatform/GoogleUserMessagingPlatform-xcframeworks-output-files.xcfilelist"],"outputFilePaths":[],"sandboxingOverride":"basedOnBuildSetting","scriptContents":"\"${PODS_ROOT}/Target Support Files/GoogleUserMessagingPlatform/GoogleUserMessagingPlatform-xcframeworks.sh\"\n","shellPath":"/bin/sh","type":"com.apple.buildphase.shell-script"}],"buildRules":[],"dependencies":[{"guid":"bfdfe7dc352907fc980b868725387e984a8eac8d5b6bc897e9823b3668d5ca68","name":"GoogleUserMessagingPlatform-UserMessagingPlatformResources"}],"guid":"bfdfe7dc352907fc980b868725387e98c777611770584bd7c20ebf80e3d30200","name":"GoogleUserMessagingPlatform","provisioningSourceData":[{"bundleIdentifierFromInfoPlist":"","configurationName":"Debug","provisioningStyle":0},{"bundleIdentifierFromInfoPlist":"","configurationName":"Profile","provisioningStyle":0},{"bundleIdentifierFromInfoPlist":"","configurationName":"Release","provisioningStyle":0}],"type":"aggregate"} \ No newline at end of file diff --git a/mih_ui/android/build/ios/XCBuildData/PIFCache/target/TARGET@v11_hash=525a617ce5cf51a2c10a01508fbe4adf-json b/mih_ui/android/build/ios/XCBuildData/PIFCache/target/TARGET@v11_hash=525a617ce5cf51a2c10a01508fbe4adf-json new file mode 100644 index 00000000..11b839f6 --- /dev/null +++ b/mih_ui/android/build/ios/XCBuildData/PIFCache/target/TARGET@v11_hash=525a617ce5cf51a2c10a01508fbe4adf-json @@ -0,0 +1 @@ +{"buildConfigurations":[{"baseConfigurationFileReference":"bfdfe7dc352907fc980b868725387e98b022d73df32750d90180fee080a0f7d1","buildSettings":{"CLANG_ENABLE_OBJC_WEAK":"NO","CLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER":"NO","CODE_SIGN_IDENTITY[sdk=appletvos*]":"","CODE_SIGN_IDENTITY[sdk=iphoneos*]":"","CODE_SIGN_IDENTITY[sdk=watchos*]":"","CURRENT_PROJECT_VERSION":"1","DYLIB_COMPATIBILITY_VERSION":"1","DYLIB_CURRENT_VERSION":"1","DYLIB_INSTALL_NAME_BASE":"@rpath","ENABLE_BITCODE":"NO","ENABLE_MODULE_VERIFIER":"NO","ENABLE_USER_SCRIPT_SANDBOXING":"NO","EXCLUDED_ARCHS[sdk=iphoneos*]":"$(inherited) armv7","EXCLUDED_ARCHS[sdk=iphonesimulator*]":"$(inherited) i386","FRAMEWORK_SEARCH_PATHS[sdk=iphoneos*]":"\"/Users/yaso_meth/Git/flutter/bin/cache/artifacts/engine/ios/Flutter.xcframework/ios-arm64\" $(inherited)","FRAMEWORK_SEARCH_PATHS[sdk=iphonesimulator*]":"\"/Users/yaso_meth/Git/flutter/bin/cache/artifacts/engine/ios/Flutter.xcframework/ios-arm64_x86_64-simulator\" $(inherited)","GCC_PREFIX_HEADER":"Target Support Files/firebase_core/firebase_core-prefix.pch","GENERATE_INFOPLIST_FILE":"NO","INFOPLIST_FILE":"Target Support Files/firebase_core/firebase_core-Info.plist","INSTALL_PATH":"$(LOCAL_LIBRARY_DIR)/Frameworks","IPHONEOS_DEPLOYMENT_TARGET":"15.0","LD_RUNPATH_SEARCH_PATHS":"$(inherited) @executable_path/Frameworks @loader_path/Frameworks","MACH_O_TYPE":"staticlib","MODULEMAP_FILE":"Target Support Files/firebase_core/firebase_core.modulemap","ONLY_ACTIVE_ARCH":"NO","OTHER_LDFLAGS":"$(inherited) -framework Flutter","PRODUCT_MODULE_NAME":"firebase_core","PRODUCT_NAME":"firebase_core","SDKROOT":"iphoneos","SKIP_INSTALL":"YES","SWIFT_ACTIVE_COMPILATION_CONDITIONS":"$(inherited) ","SWIFT_INSTALL_OBJC_HEADER":"YES","SWIFT_VERSION":"5.0","TARGETED_DEVICE_FAMILY":"1,2","VALID_ARCHS[sdk=iphonesimulator*]":"$(ARCHS_STANDARD)","VERSIONING_SYSTEM":"apple-generic","VERSION_INFO_PREFIX":""},"guid":"bfdfe7dc352907fc980b868725387e9882783658549e0905d9247e7644e480db","name":"Debug"},{"baseConfigurationFileReference":"bfdfe7dc352907fc980b868725387e9808ccd97494fd54f1603a316a163aab94","buildSettings":{"CLANG_ENABLE_OBJC_WEAK":"NO","CLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER":"NO","CODE_SIGN_IDENTITY[sdk=appletvos*]":"","CODE_SIGN_IDENTITY[sdk=iphoneos*]":"","CODE_SIGN_IDENTITY[sdk=watchos*]":"","CURRENT_PROJECT_VERSION":"1","DYLIB_COMPATIBILITY_VERSION":"1","DYLIB_CURRENT_VERSION":"1","DYLIB_INSTALL_NAME_BASE":"@rpath","ENABLE_BITCODE":"NO","ENABLE_MODULE_VERIFIER":"NO","ENABLE_USER_SCRIPT_SANDBOXING":"NO","EXCLUDED_ARCHS[sdk=iphoneos*]":"$(inherited) armv7","EXCLUDED_ARCHS[sdk=iphonesimulator*]":"$(inherited) i386","FRAMEWORK_SEARCH_PATHS[sdk=iphoneos*]":"\"/Users/yaso_meth/Git/flutter/bin/cache/artifacts/engine/ios-release/Flutter.xcframework/ios-arm64\" $(inherited)","FRAMEWORK_SEARCH_PATHS[sdk=iphonesimulator*]":"\"/Users/yaso_meth/Git/flutter/bin/cache/artifacts/engine/ios-release/Flutter.xcframework/ios-arm64_x86_64-simulator\" $(inherited)","GCC_PREFIX_HEADER":"Target Support Files/firebase_core/firebase_core-prefix.pch","GENERATE_INFOPLIST_FILE":"NO","INFOPLIST_FILE":"Target Support Files/firebase_core/firebase_core-Info.plist","INSTALL_PATH":"$(LOCAL_LIBRARY_DIR)/Frameworks","IPHONEOS_DEPLOYMENT_TARGET":"15.0","LD_RUNPATH_SEARCH_PATHS":"$(inherited) @executable_path/Frameworks @loader_path/Frameworks","MACH_O_TYPE":"staticlib","MODULEMAP_FILE":"Target Support Files/firebase_core/firebase_core.modulemap","OTHER_LDFLAGS":"$(inherited) -framework Flutter","PRODUCT_MODULE_NAME":"firebase_core","PRODUCT_NAME":"firebase_core","SDKROOT":"iphoneos","SKIP_INSTALL":"YES","SWIFT_ACTIVE_COMPILATION_CONDITIONS":"$(inherited) ","SWIFT_INSTALL_OBJC_HEADER":"YES","SWIFT_VERSION":"5.0","TARGETED_DEVICE_FAMILY":"1,2","VALIDATE_PRODUCT":"YES","VALID_ARCHS[sdk=iphonesimulator*]":"$(ARCHS_STANDARD)","VERSIONING_SYSTEM":"apple-generic","VERSION_INFO_PREFIX":""},"guid":"bfdfe7dc352907fc980b868725387e98271ce67a4d92e5b1c9e2841d40ba0c38","name":"Profile"},{"baseConfigurationFileReference":"bfdfe7dc352907fc980b868725387e9808ccd97494fd54f1603a316a163aab94","buildSettings":{"CLANG_ENABLE_OBJC_WEAK":"NO","CLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER":"NO","CODE_SIGN_IDENTITY[sdk=appletvos*]":"","CODE_SIGN_IDENTITY[sdk=iphoneos*]":"","CODE_SIGN_IDENTITY[sdk=watchos*]":"","CURRENT_PROJECT_VERSION":"1","DYLIB_COMPATIBILITY_VERSION":"1","DYLIB_CURRENT_VERSION":"1","DYLIB_INSTALL_NAME_BASE":"@rpath","ENABLE_BITCODE":"NO","ENABLE_MODULE_VERIFIER":"NO","ENABLE_USER_SCRIPT_SANDBOXING":"NO","EXCLUDED_ARCHS[sdk=iphoneos*]":"$(inherited) armv7","EXCLUDED_ARCHS[sdk=iphonesimulator*]":"$(inherited) i386","FRAMEWORK_SEARCH_PATHS[sdk=iphoneos*]":"\"/Users/yaso_meth/Git/flutter/bin/cache/artifacts/engine/ios-release/Flutter.xcframework/ios-arm64\" $(inherited)","FRAMEWORK_SEARCH_PATHS[sdk=iphonesimulator*]":"\"/Users/yaso_meth/Git/flutter/bin/cache/artifacts/engine/ios-release/Flutter.xcframework/ios-arm64_x86_64-simulator\" $(inherited)","GCC_PREFIX_HEADER":"Target Support Files/firebase_core/firebase_core-prefix.pch","GENERATE_INFOPLIST_FILE":"NO","INFOPLIST_FILE":"Target Support Files/firebase_core/firebase_core-Info.plist","INSTALL_PATH":"$(LOCAL_LIBRARY_DIR)/Frameworks","IPHONEOS_DEPLOYMENT_TARGET":"15.0","LD_RUNPATH_SEARCH_PATHS":"$(inherited) @executable_path/Frameworks @loader_path/Frameworks","MACH_O_TYPE":"staticlib","MODULEMAP_FILE":"Target Support Files/firebase_core/firebase_core.modulemap","OTHER_LDFLAGS":"$(inherited) -framework Flutter","PRODUCT_MODULE_NAME":"firebase_core","PRODUCT_NAME":"firebase_core","SDKROOT":"iphoneos","SKIP_INSTALL":"YES","SWIFT_ACTIVE_COMPILATION_CONDITIONS":"$(inherited) ","SWIFT_INSTALL_OBJC_HEADER":"YES","SWIFT_VERSION":"5.0","TARGETED_DEVICE_FAMILY":"1,2","VALIDATE_PRODUCT":"YES","VALID_ARCHS[sdk=iphonesimulator*]":"$(ARCHS_STANDARD)","VERSIONING_SYSTEM":"apple-generic","VERSION_INFO_PREFIX":""},"guid":"bfdfe7dc352907fc980b868725387e9841f2bb4249a81b3e0485186c7095bfad","name":"Release"}],"buildPhases":[{"buildFiles":[{"fileReference":"bfdfe7dc352907fc980b868725387e987dfea0c140a7a0ea66e66dcf646b175b","guid":"bfdfe7dc352907fc980b868725387e9834601f58eb6ecb12dc46f0d4f5c03b22","headerVisibility":"public"},{"fileReference":"bfdfe7dc352907fc980b868725387e98b775542e692f38065f43634092d616ce","guid":"bfdfe7dc352907fc980b868725387e9846c9e9a1471448d65fe1be58e14cf6e8","headerVisibility":"public"},{"fileReference":"bfdfe7dc352907fc980b868725387e98b2eb7b9f5e3786b97a3a72dd22421a5e","guid":"bfdfe7dc352907fc980b868725387e985d388c5dd9014ce65beecebbb06c6cfe","headerVisibility":"public"},{"fileReference":"bfdfe7dc352907fc980b868725387e98f772990796156a555335464dc3c777ca","guid":"bfdfe7dc352907fc980b868725387e981b7e8b90295818a55ff4adacb18d7cda","headerVisibility":"public"},{"fileReference":"bfdfe7dc352907fc980b868725387e98f3bd2cacbaac9079f1396cb3fa6d0e27","guid":"bfdfe7dc352907fc980b868725387e987749bea8c90a0f2da3ebbeed6c84dd52","headerVisibility":"public"},{"fileReference":"bfdfe7dc352907fc980b868725387e9867153d6814ea6c8bee7037d6d146ce78","guid":"bfdfe7dc352907fc980b868725387e98a36b67d912b208aeec470d4e5f484b8a","headerVisibility":"public"}],"guid":"bfdfe7dc352907fc980b868725387e9882038e1635bc07d4e30bd4023a6b61ae","type":"com.apple.buildphase.headers"},{"buildFiles":[{"fileReference":"bfdfe7dc352907fc980b868725387e98601b2da428ba75eb289e1c54c7e54ac2","guid":"bfdfe7dc352907fc980b868725387e98bd2b07ac01f48df7e4690488ad174302"},{"fileReference":"bfdfe7dc352907fc980b868725387e98a993adacba3286d6cf47f3ca504b1406","guid":"bfdfe7dc352907fc980b868725387e98941c79f3dab14c7ce61254f0bf7a8224"},{"fileReference":"bfdfe7dc352907fc980b868725387e9807da482b8ec6e4d8948d658c8bdf02e5","guid":"bfdfe7dc352907fc980b868725387e9827c702ca91652a44628c6062c81d922e"},{"fileReference":"bfdfe7dc352907fc980b868725387e989977ba840e207e56a3bdbda80a4d8615","guid":"bfdfe7dc352907fc980b868725387e984d3785c0518cff1d26e769d5fc17a303"},{"fileReference":"bfdfe7dc352907fc980b868725387e98f5cce0e89494288c3baf0f38b30e399f","guid":"bfdfe7dc352907fc980b868725387e984ce69ee8307cb628883258ea8858fb7d"},{"fileReference":"bfdfe7dc352907fc980b868725387e9878e159148fb5c54711d45b5262f445b4","guid":"bfdfe7dc352907fc980b868725387e985ea14b413bc4cf843e5c11a9377768cf"}],"guid":"bfdfe7dc352907fc980b868725387e980222076457cd73b4b2516b590ca4e5e9","type":"com.apple.buildphase.sources"},{"buildFiles":[{"fileReference":"bfdfe7dc352907fc980b868725387e98b14af7c49882340ad551cb13b0a1e06d","guid":"bfdfe7dc352907fc980b868725387e98f530986a656c334332b1858f373235a0"}],"guid":"bfdfe7dc352907fc980b868725387e9845b8853a6c66f43b65b5fb0a7975fd55","type":"com.apple.buildphase.frameworks"},{"buildFiles":[],"guid":"bfdfe7dc352907fc980b868725387e982da293737faed3f5bf7ed42c243d105d","type":"com.apple.buildphase.resources"}],"buildRules":[],"dependencies":[{"guid":"bfdfe7dc352907fc980b868725387e98d57b8bce60a0f11113f4cff532db68d3","name":"Firebase"},{"guid":"bfdfe7dc352907fc980b868725387e989da425bb6d6d5d8dbb95e4afffb82217","name":"Flutter"}],"guid":"bfdfe7dc352907fc980b868725387e987f74324bfc5c78140e34d510e26e00c1","name":"firebase_core","predominantSourceCodeLanguage":"Xcode.SourceCodeLanguage.Objective-C","productReference":{"guid":"bfdfe7dc352907fc980b868725387e98a32fdd082239c9fc7912ba5b473ab170","name":"firebase_core.framework","type":"product"},"productTypeIdentifier":"com.apple.product-type.framework","provisioningSourceData":[{"bundleIdentifierFromInfoPlist":"${PRODUCT_BUNDLE_IDENTIFIER}","configurationName":"Debug","provisioningStyle":1},{"bundleIdentifierFromInfoPlist":"${PRODUCT_BUNDLE_IDENTIFIER}","configurationName":"Profile","provisioningStyle":1},{"bundleIdentifierFromInfoPlist":"${PRODUCT_BUNDLE_IDENTIFIER}","configurationName":"Release","provisioningStyle":1}],"type":"standard"} \ No newline at end of file diff --git a/mih_ui/android/build/ios/XCBuildData/PIFCache/target/TARGET@v11_hash=5319ba36858c0aa8d085cf090833a92c-json b/mih_ui/android/build/ios/XCBuildData/PIFCache/target/TARGET@v11_hash=5319ba36858c0aa8d085cf090833a92c-json new file mode 100644 index 00000000..acaa96d9 --- /dev/null +++ b/mih_ui/android/build/ios/XCBuildData/PIFCache/target/TARGET@v11_hash=5319ba36858c0aa8d085cf090833a92c-json @@ -0,0 +1 @@ +{"buildConfigurations":[{"baseConfigurationFileReference":"bfdfe7dc352907fc980b868725387e98dcc81be3bb552d5ea4561a1ae5bb7340","buildSettings":{"CLANG_ENABLE_OBJC_WEAK":"NO","CODE_SIGN_IDENTITY[sdk=appletvos*]":"","CODE_SIGN_IDENTITY[sdk=iphoneos*]":"","CODE_SIGN_IDENTITY[sdk=watchos*]":"","CURRENT_PROJECT_VERSION":"1","DEFINES_MODULE":"YES","DYLIB_COMPATIBILITY_VERSION":"1","DYLIB_CURRENT_VERSION":"1","DYLIB_INSTALL_NAME_BASE":"@rpath","ENABLE_MODULE_VERIFIER":"NO","ENABLE_USER_SCRIPT_SANDBOXING":"NO","GENERATE_INFOPLIST_FILE":"NO","INFOPLIST_FILE":"Target Support Files/FirebaseAppCheck/FirebaseAppCheck-Info.plist","INSTALL_PATH":"$(LOCAL_LIBRARY_DIR)/Frameworks","IPHONEOS_DEPLOYMENT_TARGET":"15.0","LD_RUNPATH_SEARCH_PATHS":"$(inherited) @executable_path/Frameworks @loader_path/Frameworks","MODULEMAP_FILE":"Target Support Files/FirebaseAppCheck/FirebaseAppCheck.modulemap","ONLY_ACTIVE_ARCH":"NO","PRODUCT_MODULE_NAME":"FirebaseAppCheck","PRODUCT_NAME":"FirebaseAppCheck","SDKROOT":"iphoneos","SKIP_INSTALL":"YES","SWIFT_ACTIVE_COMPILATION_CONDITIONS":"$(inherited) ","SWIFT_INSTALL_OBJC_HEADER":"YES","SWIFT_VERSION":"5.9","TARGETED_DEVICE_FAMILY":"1,2","VERSIONING_SYSTEM":"apple-generic","VERSION_INFO_PREFIX":""},"guid":"bfdfe7dc352907fc980b868725387e9838c4fec4b71725e09cbf9662270d290b","name":"Debug"},{"baseConfigurationFileReference":"bfdfe7dc352907fc980b868725387e9858ca2cea4d0cfb89402980161e9a9cd8","buildSettings":{"CLANG_ENABLE_OBJC_WEAK":"NO","CODE_SIGN_IDENTITY[sdk=appletvos*]":"","CODE_SIGN_IDENTITY[sdk=iphoneos*]":"","CODE_SIGN_IDENTITY[sdk=watchos*]":"","CURRENT_PROJECT_VERSION":"1","DEFINES_MODULE":"YES","DYLIB_COMPATIBILITY_VERSION":"1","DYLIB_CURRENT_VERSION":"1","DYLIB_INSTALL_NAME_BASE":"@rpath","ENABLE_MODULE_VERIFIER":"NO","ENABLE_USER_SCRIPT_SANDBOXING":"NO","GENERATE_INFOPLIST_FILE":"NO","INFOPLIST_FILE":"Target Support Files/FirebaseAppCheck/FirebaseAppCheck-Info.plist","INSTALL_PATH":"$(LOCAL_LIBRARY_DIR)/Frameworks","IPHONEOS_DEPLOYMENT_TARGET":"15.0","LD_RUNPATH_SEARCH_PATHS":"$(inherited) @executable_path/Frameworks @loader_path/Frameworks","MODULEMAP_FILE":"Target Support Files/FirebaseAppCheck/FirebaseAppCheck.modulemap","PRODUCT_MODULE_NAME":"FirebaseAppCheck","PRODUCT_NAME":"FirebaseAppCheck","SDKROOT":"iphoneos","SKIP_INSTALL":"YES","SWIFT_ACTIVE_COMPILATION_CONDITIONS":"$(inherited) ","SWIFT_INSTALL_OBJC_HEADER":"YES","SWIFT_VERSION":"5.9","TARGETED_DEVICE_FAMILY":"1,2","VALIDATE_PRODUCT":"YES","VERSIONING_SYSTEM":"apple-generic","VERSION_INFO_PREFIX":""},"guid":"bfdfe7dc352907fc980b868725387e980c35b2a87e8e6dcf6e77ce5b5ee26166","name":"Profile"},{"baseConfigurationFileReference":"bfdfe7dc352907fc980b868725387e9858ca2cea4d0cfb89402980161e9a9cd8","buildSettings":{"CLANG_ENABLE_OBJC_WEAK":"NO","CODE_SIGN_IDENTITY[sdk=appletvos*]":"","CODE_SIGN_IDENTITY[sdk=iphoneos*]":"","CODE_SIGN_IDENTITY[sdk=watchos*]":"","CURRENT_PROJECT_VERSION":"1","DEFINES_MODULE":"YES","DYLIB_COMPATIBILITY_VERSION":"1","DYLIB_CURRENT_VERSION":"1","DYLIB_INSTALL_NAME_BASE":"@rpath","ENABLE_MODULE_VERIFIER":"NO","ENABLE_USER_SCRIPT_SANDBOXING":"NO","GENERATE_INFOPLIST_FILE":"NO","INFOPLIST_FILE":"Target Support Files/FirebaseAppCheck/FirebaseAppCheck-Info.plist","INSTALL_PATH":"$(LOCAL_LIBRARY_DIR)/Frameworks","IPHONEOS_DEPLOYMENT_TARGET":"15.0","LD_RUNPATH_SEARCH_PATHS":"$(inherited) @executable_path/Frameworks @loader_path/Frameworks","MODULEMAP_FILE":"Target Support Files/FirebaseAppCheck/FirebaseAppCheck.modulemap","PRODUCT_MODULE_NAME":"FirebaseAppCheck","PRODUCT_NAME":"FirebaseAppCheck","SDKROOT":"iphoneos","SKIP_INSTALL":"YES","SWIFT_ACTIVE_COMPILATION_CONDITIONS":"$(inherited) ","SWIFT_INSTALL_OBJC_HEADER":"YES","SWIFT_VERSION":"5.9","TARGETED_DEVICE_FAMILY":"1,2","VALIDATE_PRODUCT":"YES","VERSIONING_SYSTEM":"apple-generic","VERSION_INFO_PREFIX":""},"guid":"bfdfe7dc352907fc980b868725387e9837c7adcccd7fd6a1a2ada6643df6078f","name":"Release"}],"buildPhases":[{"buildFiles":[{"fileReference":"bfdfe7dc352907fc980b868725387e98cc62704582d6538d2c8174cc4716bd01","guid":"bfdfe7dc352907fc980b868725387e9871d91a42be601b71d307300b8355ee1f"},{"fileReference":"bfdfe7dc352907fc980b868725387e98fbd90d23a9844d554e6c9a88b7a47396","guid":"bfdfe7dc352907fc980b868725387e983b665e94a4cfaa5b6a0aca002e7e59fb","headerVisibility":"public"},{"fileReference":"bfdfe7dc352907fc980b868725387e983bc0545c109603b43fe7a712a18dd4ed","guid":"bfdfe7dc352907fc980b868725387e9806e4e0f07e830dcf1c064d4fde7372c0","headerVisibility":"public"},{"fileReference":"bfdfe7dc352907fc980b868725387e980969a6e00d9b9e9eadd3837e5f867ec2","guid":"bfdfe7dc352907fc980b868725387e98396b98354e97c6b1358117f08a4e306a"},{"fileReference":"bfdfe7dc352907fc980b868725387e9876546db88afa14aa0230a40315a8e9cb","guid":"bfdfe7dc352907fc980b868725387e987ac25a11fa40f178db5d50bff061db77","headerVisibility":"public"},{"fileReference":"bfdfe7dc352907fc980b868725387e986055f501457bc6efb35bf3aa8c3a44a4","guid":"bfdfe7dc352907fc980b868725387e98f3b1973278086302771042df4e00ea41","headerVisibility":"public"},{"fileReference":"bfdfe7dc352907fc980b868725387e98868da319a13b4790783057bfbc4a8856","guid":"bfdfe7dc352907fc980b868725387e98756f5b397ad053077de8f46d7da8fab2","headerVisibility":"public"},{"fileReference":"bfdfe7dc352907fc980b868725387e983250e0568fe4851d28a49a6f1cda2099","guid":"bfdfe7dc352907fc980b868725387e98b1c7b574f15f7fc9aa11534e7d2b7562","headerVisibility":"public"},{"fileReference":"bfdfe7dc352907fc980b868725387e98af65f253db51a8a01b417fbacaee2077","guid":"bfdfe7dc352907fc980b868725387e9834540f115b38beb81f79aaec362acee4"},{"fileReference":"bfdfe7dc352907fc980b868725387e982b2d142e274ac25a0561c078b47b5010","guid":"bfdfe7dc352907fc980b868725387e987738e43885705e2ca3d3f952a852d1e9"},{"fileReference":"bfdfe7dc352907fc980b868725387e98355bf2abe13f0f83f9f3bb625c809df7","guid":"bfdfe7dc352907fc980b868725387e98039ec9cf2443d2dfcaa6bfd00745a082","headerVisibility":"public"},{"fileReference":"bfdfe7dc352907fc980b868725387e980d7be89019113857f905dea093b1ce52","guid":"bfdfe7dc352907fc980b868725387e980b651aa249a332add6784e1a51326269","headerVisibility":"public"},{"fileReference":"bfdfe7dc352907fc980b868725387e98f01ba42cf03b5479cb00e8e2f1e498f0","guid":"bfdfe7dc352907fc980b868725387e988badb0d31d2706b6e4f9747d22135a0f"},{"fileReference":"bfdfe7dc352907fc980b868725387e98d719dfabd618a96b66dbf19219ed765b","guid":"bfdfe7dc352907fc980b868725387e983155fd9f6a3b8bca94c3c79ab7d6f172","headerVisibility":"public"},{"fileReference":"bfdfe7dc352907fc980b868725387e98d668922bc499462306878885b18a5df3","guid":"bfdfe7dc352907fc980b868725387e98900d260dc13755009dc5e9a87b094ce7"},{"fileReference":"bfdfe7dc352907fc980b868725387e9876df4e8ca94b5e724a4e852778743c1e","guid":"bfdfe7dc352907fc980b868725387e9828b6a38764c56d071ba48fdbb255f533"},{"fileReference":"bfdfe7dc352907fc980b868725387e986ae26e21f215969b335fcf089dce8a46","guid":"bfdfe7dc352907fc980b868725387e98f05d93bb93fdddbb0e4e7929359c57b7"},{"fileReference":"bfdfe7dc352907fc980b868725387e98b169de74071925d7b12305e13c960697","guid":"bfdfe7dc352907fc980b868725387e983a4581eb617a5ad7d83892d698d594b6"},{"fileReference":"bfdfe7dc352907fc980b868725387e982d03e6a9e16ca15419865ec53d554960","guid":"bfdfe7dc352907fc980b868725387e9849ccab35060d3b04350d5b2ec96a6be4"},{"fileReference":"bfdfe7dc352907fc980b868725387e98955d9460628f5b5da0340d52b3be53ca","guid":"bfdfe7dc352907fc980b868725387e98ee4dfe3e5170a4d901e0ea6c5751579f"},{"fileReference":"bfdfe7dc352907fc980b868725387e982d929aa8b59449447362db17859560b7","guid":"bfdfe7dc352907fc980b868725387e9885d6d8d78881bf3885d75b32e70b1277"},{"fileReference":"bfdfe7dc352907fc980b868725387e981059d7aa812d14711b030e28c61bcb6e","guid":"bfdfe7dc352907fc980b868725387e98764cfede42317a5d2c6a5172733c7e97","headerVisibility":"public"},{"fileReference":"bfdfe7dc352907fc980b868725387e98c74baa67d92d7c59a439c5411d5e8e6b","guid":"bfdfe7dc352907fc980b868725387e98ce2868d00d05d2d2211051232eb2df1f","headerVisibility":"public"},{"fileReference":"bfdfe7dc352907fc980b868725387e988d83ba06705aee54c5af980140a6c893","guid":"bfdfe7dc352907fc980b868725387e98cd6526b0c21c31085bd5878a26ea1a52","headerVisibility":"public"},{"fileReference":"bfdfe7dc352907fc980b868725387e9804717059d9181565ee5576a9e39236df","guid":"bfdfe7dc352907fc980b868725387e9889255affc0e671e70bb08e4e4f3f6e7c","headerVisibility":"public"},{"fileReference":"bfdfe7dc352907fc980b868725387e98fd3fc54900e75a3cfcce7c2bb219927b","guid":"bfdfe7dc352907fc980b868725387e9815dca42c43fccc27a7b13ec4db07705a"},{"fileReference":"bfdfe7dc352907fc980b868725387e9852e8ed178d953a6776178ef48ee2814d","guid":"bfdfe7dc352907fc980b868725387e9879c2596fd3a27cc64d264f803ac04a3d"},{"fileReference":"bfdfe7dc352907fc980b868725387e9816e853290c59ddfa95048f95507f1212","guid":"bfdfe7dc352907fc980b868725387e98f42c7113b7322f4073dcac9b6e96d7d1"},{"fileReference":"bfdfe7dc352907fc980b868725387e989213e7824c44f61ef818503291e680e0","guid":"bfdfe7dc352907fc980b868725387e9812f35353a4585fb67a3e91a122e4961f"},{"fileReference":"bfdfe7dc352907fc980b868725387e982afb2c662f2c43daeead1d89b85cc4be","guid":"bfdfe7dc352907fc980b868725387e98ede8ff609a807a6a6f7f3501653a1530"},{"fileReference":"bfdfe7dc352907fc980b868725387e9889e260595c9bb6055f19e49c4ac1de2a","guid":"bfdfe7dc352907fc980b868725387e981f72ce5bfe0f0920fcf3a20705e8519e"}],"guid":"bfdfe7dc352907fc980b868725387e989a8bdd7db64c936feeb9fdccde76a124","type":"com.apple.buildphase.headers"},{"buildFiles":[{"fileReference":"bfdfe7dc352907fc980b868725387e985a9877f895a7208fca1225e9aac58deb","guid":"bfdfe7dc352907fc980b868725387e98f2d8328aa3716bcf58165cb6aabdd9eb"},{"fileReference":"bfdfe7dc352907fc980b868725387e984f7216d9ae43747c39f20e03ebed994a","guid":"bfdfe7dc352907fc980b868725387e980a6842fc579249ca27117522fcb32520"},{"fileReference":"bfdfe7dc352907fc980b868725387e98e5c73c8c1278df91bc0ad8f58764b0ca","guid":"bfdfe7dc352907fc980b868725387e98c5bcc8cfdebaa2ea4c37d0e8cf801bb7"},{"fileReference":"bfdfe7dc352907fc980b868725387e98d015c60cb1e8278e460e203665420af4","guid":"bfdfe7dc352907fc980b868725387e980d69a15c5090c41cfe80991e6b959490"},{"fileReference":"bfdfe7dc352907fc980b868725387e984db12fbce05cdb1e7d06a4628004dfee","guid":"bfdfe7dc352907fc980b868725387e987c40da3cb9a8bee11591bb9fcfbf9747"},{"fileReference":"bfdfe7dc352907fc980b868725387e98bac4d0c002f00c3c0aadb1f86bea4db4","guid":"bfdfe7dc352907fc980b868725387e981e211ce9b5a82c38a89df7432af5ae11"},{"fileReference":"bfdfe7dc352907fc980b868725387e9879f6b6f0297ecaf4f94f56f86cbecd39","guid":"bfdfe7dc352907fc980b868725387e983e0ead0ddd47065d3ee3316a6a456558"},{"fileReference":"bfdfe7dc352907fc980b868725387e98a467dc7f67b13c6f382fc0476ecf3578","guid":"bfdfe7dc352907fc980b868725387e98a10b53c251fead24e2bc80ffabaca7e3"},{"fileReference":"bfdfe7dc352907fc980b868725387e988c010400b28cbe56f5bc69ec4f46feac","guid":"bfdfe7dc352907fc980b868725387e98908b25b6de0d398e2db2ab88c7de1b95"},{"fileReference":"bfdfe7dc352907fc980b868725387e98e83b31792a4a77b69618b6c4e11a7b1e","guid":"bfdfe7dc352907fc980b868725387e981532a1ac14391b4b492680fe682b0957"},{"fileReference":"bfdfe7dc352907fc980b868725387e9814f775d5813351265e9acad2e605cec6","guid":"bfdfe7dc352907fc980b868725387e9818ac9bb25ea11222d5e6d5d5016eeec6"},{"fileReference":"bfdfe7dc352907fc980b868725387e98ee9616d51dbd0978b6b1160bde75c0fe","guid":"bfdfe7dc352907fc980b868725387e98aace04b8dc34a35748654fa1fa5d33a2"},{"fileReference":"bfdfe7dc352907fc980b868725387e98e48ac13f4b49e42bf03aa112e4b5d6e7","guid":"bfdfe7dc352907fc980b868725387e980435a41cdea476bf7b11f4bfcd411ec4"},{"fileReference":"bfdfe7dc352907fc980b868725387e9852fe7745f4b2772e6cd3cba24e695be8","guid":"bfdfe7dc352907fc980b868725387e984695a5858a5c3c95172aebe1fe52346f"},{"fileReference":"bfdfe7dc352907fc980b868725387e98b99858e5d1ba7051c08bda553f5cbabe","guid":"bfdfe7dc352907fc980b868725387e98fad322e08034ceb08d597725afeba077"},{"fileReference":"bfdfe7dc352907fc980b868725387e98c97cf347ee33ebdbcaaf450c07f28d2e","guid":"bfdfe7dc352907fc980b868725387e98b739033624abbc444cdbd9c09bdf3e92"},{"fileReference":"bfdfe7dc352907fc980b868725387e9809a30ce0fe1dd3695686a996a065f387","guid":"bfdfe7dc352907fc980b868725387e9840a011651d32a8a7d65ff37efb37da99"},{"fileReference":"bfdfe7dc352907fc980b868725387e985c461ab6a7e9879b6fa6169adaab3d61","guid":"bfdfe7dc352907fc980b868725387e98a2eb62cb148ada087de53721959663a9"}],"guid":"bfdfe7dc352907fc980b868725387e980f6ad4bb86e2126a469e3678db6ab533","type":"com.apple.buildphase.sources"},{"buildFiles":[{"fileReference":"bfdfe7dc352907fc980b868725387e98b14af7c49882340ad551cb13b0a1e06d","guid":"bfdfe7dc352907fc980b868725387e989ad225b4241890eee92fd5876f740106"}],"guid":"bfdfe7dc352907fc980b868725387e980c126ec4e291ef8d9fbbbb38989292f4","type":"com.apple.buildphase.frameworks"},{"buildFiles":[],"guid":"bfdfe7dc352907fc980b868725387e9808b47889de662cd4865776eda02c0c2b","type":"com.apple.buildphase.resources"}],"buildRules":[],"dependencies":[{"guid":"bfdfe7dc352907fc980b868725387e98cd8162b601eb6c17e4d86eec112a388c","name":"AppCheckCore"},{"guid":"bfdfe7dc352907fc980b868725387e981f0a8508efd61386103314ddbb82a530","name":"FirebaseAppCheckInterop"},{"guid":"bfdfe7dc352907fc980b868725387e98a408a4c1f668e62161cdeba76f57d50c","name":"FirebaseCore"},{"guid":"bfdfe7dc352907fc980b868725387e98718890dfdac589615663a02d43d9af3e","name":"GoogleUtilities"}],"guid":"bfdfe7dc352907fc980b868725387e98ecaebc2b66f6675fbaa388164aa6c8dd","name":"FirebaseAppCheck","predominantSourceCodeLanguage":"Xcode.SourceCodeLanguage.Objective-C-Plus-Plus","productReference":{"guid":"bfdfe7dc352907fc980b868725387e9857de7acecfe5aa305e96dd28add8de37","name":"FirebaseAppCheck.framework","type":"product"},"productTypeIdentifier":"com.apple.product-type.framework","provisioningSourceData":[{"bundleIdentifierFromInfoPlist":"${PRODUCT_BUNDLE_IDENTIFIER}","configurationName":"Debug","provisioningStyle":1},{"bundleIdentifierFromInfoPlist":"${PRODUCT_BUNDLE_IDENTIFIER}","configurationName":"Profile","provisioningStyle":1},{"bundleIdentifierFromInfoPlist":"${PRODUCT_BUNDLE_IDENTIFIER}","configurationName":"Release","provisioningStyle":1}],"type":"standard"} \ No newline at end of file diff --git a/mih_ui/android/build/ios/XCBuildData/PIFCache/target/TARGET@v11_hash=558846d52469eb6457f7fa805fbcac19-json b/mih_ui/android/build/ios/XCBuildData/PIFCache/target/TARGET@v11_hash=558846d52469eb6457f7fa805fbcac19-json new file mode 100644 index 00000000..5d28f5d2 --- /dev/null +++ b/mih_ui/android/build/ios/XCBuildData/PIFCache/target/TARGET@v11_hash=558846d52469eb6457f7fa805fbcac19-json @@ -0,0 +1 @@ +{"buildConfigurations":[{"baseConfigurationFileReference":"bfdfe7dc352907fc980b868725387e98144cd18850e477837c238075d5256ffe","buildSettings":{"ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES":"NO","CLANG_ENABLE_OBJC_WEAK":"NO","CLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER":"NO","CODE_SIGN_IDENTITY[sdk=appletvos*]":"","CODE_SIGN_IDENTITY[sdk=iphoneos*]":"","CODE_SIGN_IDENTITY[sdk=watchos*]":"","CURRENT_PROJECT_VERSION":"1","DEFINES_MODULE":"YES","DYLIB_COMPATIBILITY_VERSION":"1","DYLIB_CURRENT_VERSION":"1","DYLIB_INSTALL_NAME_BASE":"@rpath","ENABLE_BITCODE":"NO","ENABLE_MODULE_VERIFIER":"NO","ENABLE_USER_SCRIPT_SANDBOXING":"NO","EXCLUDED_ARCHS[sdk=iphoneos*]":"$(inherited) armv7","EXCLUDED_ARCHS[sdk=iphonesimulator*]":"$(inherited) i386","FRAMEWORK_SEARCH_PATHS[sdk=iphoneos*]":"\"/Users/yaso_meth/Git/flutter/bin/cache/artifacts/engine/ios/Flutter.xcframework/ios-arm64\" $(inherited)","FRAMEWORK_SEARCH_PATHS[sdk=iphonesimulator*]":"\"/Users/yaso_meth/Git/flutter/bin/cache/artifacts/engine/ios/Flutter.xcframework/ios-arm64_x86_64-simulator\" $(inherited)","INFOPLIST_FILE":"Target Support Files/Pods-RunnerTests/Pods-RunnerTests-Info.plist","INSTALL_PATH":"$(LOCAL_LIBRARY_DIR)/Frameworks","IPHONEOS_DEPLOYMENT_TARGET":"15.5.0","LD_RUNPATH_SEARCH_PATHS":"$(inherited) @executable_path/Frameworks @loader_path/Frameworks","MACH_O_TYPE":"staticlib","MODULEMAP_FILE":"Target Support Files/Pods-RunnerTests/Pods-RunnerTests.modulemap","ONLY_ACTIVE_ARCH":"NO","OTHER_LDFLAGS":"$(inherited) -framework Flutter","OTHER_LIBTOOLFLAGS":"","PODS_ROOT":"$(SRCROOT)","PRODUCT_BUNDLE_IDENTIFIER":"org.cocoapods.${PRODUCT_NAME:rfc1034identifier}","PRODUCT_NAME":"$(TARGET_NAME:c99extidentifier)","SDKROOT":"iphoneos","SKIP_INSTALL":"YES","TARGETED_DEVICE_FAMILY":"1,2","VALID_ARCHS[sdk=iphonesimulator*]":"$(ARCHS_STANDARD)","VERSIONING_SYSTEM":"apple-generic","VERSION_INFO_PREFIX":""},"guid":"bfdfe7dc352907fc980b868725387e98c25f9cc441a3059ef0126c5aaf98288e","name":"Debug"},{"baseConfigurationFileReference":"bfdfe7dc352907fc980b868725387e981b663a2c82f0220040296818ba53477e","buildSettings":{"ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES":"NO","CLANG_ENABLE_OBJC_WEAK":"NO","CLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER":"NO","CODE_SIGN_IDENTITY[sdk=appletvos*]":"","CODE_SIGN_IDENTITY[sdk=iphoneos*]":"","CODE_SIGN_IDENTITY[sdk=watchos*]":"","CURRENT_PROJECT_VERSION":"1","DEFINES_MODULE":"YES","DYLIB_COMPATIBILITY_VERSION":"1","DYLIB_CURRENT_VERSION":"1","DYLIB_INSTALL_NAME_BASE":"@rpath","ENABLE_BITCODE":"NO","ENABLE_MODULE_VERIFIER":"NO","ENABLE_USER_SCRIPT_SANDBOXING":"NO","EXCLUDED_ARCHS[sdk=iphoneos*]":"$(inherited) armv7","EXCLUDED_ARCHS[sdk=iphonesimulator*]":"$(inherited) i386","FRAMEWORK_SEARCH_PATHS[sdk=iphoneos*]":"\"/Users/yaso_meth/Git/flutter/bin/cache/artifacts/engine/ios-release/Flutter.xcframework/ios-arm64\" $(inherited)","FRAMEWORK_SEARCH_PATHS[sdk=iphonesimulator*]":"\"/Users/yaso_meth/Git/flutter/bin/cache/artifacts/engine/ios-release/Flutter.xcframework/ios-arm64_x86_64-simulator\" $(inherited)","INFOPLIST_FILE":"Target Support Files/Pods-RunnerTests/Pods-RunnerTests-Info.plist","INSTALL_PATH":"$(LOCAL_LIBRARY_DIR)/Frameworks","IPHONEOS_DEPLOYMENT_TARGET":"15.5.0","LD_RUNPATH_SEARCH_PATHS":"$(inherited) @executable_path/Frameworks @loader_path/Frameworks","MACH_O_TYPE":"staticlib","MODULEMAP_FILE":"Target Support Files/Pods-RunnerTests/Pods-RunnerTests.modulemap","OTHER_LDFLAGS":"$(inherited) -framework Flutter","OTHER_LIBTOOLFLAGS":"","PODS_ROOT":"$(SRCROOT)","PRODUCT_BUNDLE_IDENTIFIER":"org.cocoapods.${PRODUCT_NAME:rfc1034identifier}","PRODUCT_NAME":"$(TARGET_NAME:c99extidentifier)","SDKROOT":"iphoneos","SKIP_INSTALL":"YES","TARGETED_DEVICE_FAMILY":"1,2","VALIDATE_PRODUCT":"YES","VALID_ARCHS[sdk=iphonesimulator*]":"$(ARCHS_STANDARD)","VERSIONING_SYSTEM":"apple-generic","VERSION_INFO_PREFIX":""},"guid":"bfdfe7dc352907fc980b868725387e980fd5a17e9008e6edce2b18476f20143d","name":"Profile"},{"baseConfigurationFileReference":"bfdfe7dc352907fc980b868725387e98965b92d39d30a7872295adc2841cd1b1","buildSettings":{"ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES":"NO","CLANG_ENABLE_OBJC_WEAK":"NO","CLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER":"NO","CODE_SIGN_IDENTITY[sdk=appletvos*]":"","CODE_SIGN_IDENTITY[sdk=iphoneos*]":"","CODE_SIGN_IDENTITY[sdk=watchos*]":"","CURRENT_PROJECT_VERSION":"1","DEFINES_MODULE":"YES","DYLIB_COMPATIBILITY_VERSION":"1","DYLIB_CURRENT_VERSION":"1","DYLIB_INSTALL_NAME_BASE":"@rpath","ENABLE_BITCODE":"NO","ENABLE_MODULE_VERIFIER":"NO","ENABLE_USER_SCRIPT_SANDBOXING":"NO","EXCLUDED_ARCHS[sdk=iphoneos*]":"$(inherited) armv7","EXCLUDED_ARCHS[sdk=iphonesimulator*]":"$(inherited) i386","FRAMEWORK_SEARCH_PATHS[sdk=iphoneos*]":"\"/Users/yaso_meth/Git/flutter/bin/cache/artifacts/engine/ios-release/Flutter.xcframework/ios-arm64\" $(inherited)","FRAMEWORK_SEARCH_PATHS[sdk=iphonesimulator*]":"\"/Users/yaso_meth/Git/flutter/bin/cache/artifacts/engine/ios-release/Flutter.xcframework/ios-arm64_x86_64-simulator\" $(inherited)","INFOPLIST_FILE":"Target Support Files/Pods-RunnerTests/Pods-RunnerTests-Info.plist","INSTALL_PATH":"$(LOCAL_LIBRARY_DIR)/Frameworks","IPHONEOS_DEPLOYMENT_TARGET":"15.5.0","LD_RUNPATH_SEARCH_PATHS":"$(inherited) @executable_path/Frameworks @loader_path/Frameworks","MACH_O_TYPE":"staticlib","MODULEMAP_FILE":"Target Support Files/Pods-RunnerTests/Pods-RunnerTests.modulemap","OTHER_LDFLAGS":"$(inherited) -framework Flutter","OTHER_LIBTOOLFLAGS":"","PODS_ROOT":"$(SRCROOT)","PRODUCT_BUNDLE_IDENTIFIER":"org.cocoapods.${PRODUCT_NAME:rfc1034identifier}","PRODUCT_NAME":"$(TARGET_NAME:c99extidentifier)","SDKROOT":"iphoneos","SKIP_INSTALL":"YES","TARGETED_DEVICE_FAMILY":"1,2","VALIDATE_PRODUCT":"YES","VALID_ARCHS[sdk=iphonesimulator*]":"$(ARCHS_STANDARD)","VERSIONING_SYSTEM":"apple-generic","VERSION_INFO_PREFIX":""},"guid":"bfdfe7dc352907fc980b868725387e98c75d8d376d8cc3f3dfe5b11f8b019fbc","name":"Release"}],"buildPhases":[{"buildFiles":[{"fileReference":"bfdfe7dc352907fc980b868725387e98e5e8bcdff29e5f8321be18f7989b4bc7","guid":"bfdfe7dc352907fc980b868725387e98ca9af5e2c54f437f9ebb0c203883ccae","headerVisibility":"public"}],"guid":"bfdfe7dc352907fc980b868725387e986e6b8bd91d07f2fb082ccd84c7dcacb1","type":"com.apple.buildphase.headers"},{"buildFiles":[{"fileReference":"bfdfe7dc352907fc980b868725387e98022654f1ff78dd844d694dba2439dab2","guid":"bfdfe7dc352907fc980b868725387e9881f185e1672aa83b98d6e30b47f8f468"}],"guid":"bfdfe7dc352907fc980b868725387e98de09b1176c796343f1f9bcd422c73402","type":"com.apple.buildphase.sources"},{"buildFiles":[{"fileReference":"bfdfe7dc352907fc980b868725387e98b14af7c49882340ad551cb13b0a1e06d","guid":"bfdfe7dc352907fc980b868725387e98e7ac2b91ee49764a75561cf994247683"}],"guid":"bfdfe7dc352907fc980b868725387e983bb5c38e7891bdb262f8e050f7d97030","type":"com.apple.buildphase.frameworks"},{"buildFiles":[],"guid":"bfdfe7dc352907fc980b868725387e987fddc24c35656402341de288e0688015","type":"com.apple.buildphase.resources"}],"buildRules":[],"dependencies":[{"guid":"bfdfe7dc352907fc980b868725387e98312b4bc59bbbe2c06c205bf4da6737f5","name":"Pods-Runner"}],"guid":"bfdfe7dc352907fc980b868725387e98483832d3c820398e9d40e1a6904b03fe","name":"Pods-RunnerTests","predominantSourceCodeLanguage":"Xcode.SourceCodeLanguage.Objective-C","productReference":{"guid":"bfdfe7dc352907fc980b868725387e984f9f39caeddf64cc331db2b69d62aa63","name":"Pods_RunnerTests.framework","type":"product"},"productTypeIdentifier":"com.apple.product-type.framework","provisioningSourceData":[{"bundleIdentifierFromInfoPlist":"${PRODUCT_BUNDLE_IDENTIFIER}","configurationName":"Debug","provisioningStyle":1},{"bundleIdentifierFromInfoPlist":"${PRODUCT_BUNDLE_IDENTIFIER}","configurationName":"Profile","provisioningStyle":1},{"bundleIdentifierFromInfoPlist":"${PRODUCT_BUNDLE_IDENTIFIER}","configurationName":"Release","provisioningStyle":1}],"type":"standard"} \ No newline at end of file diff --git a/mih_ui/android/build/ios/XCBuildData/PIFCache/target/TARGET@v11_hash=55e76bc78bd49d51860d689a4f5e9c62-json b/mih_ui/android/build/ios/XCBuildData/PIFCache/target/TARGET@v11_hash=55e76bc78bd49d51860d689a4f5e9c62-json new file mode 100644 index 00000000..f92ea15a --- /dev/null +++ b/mih_ui/android/build/ios/XCBuildData/PIFCache/target/TARGET@v11_hash=55e76bc78bd49d51860d689a4f5e9c62-json @@ -0,0 +1 @@ +{"buildConfigurations":[{"baseConfigurationFileReference":"bfdfe7dc352907fc980b868725387e984615091c333da42672bfd26263153e2c","buildSettings":{"CODE_SIGNING_ALLOWED":"NO","CODE_SIGNING_IDENTITY":"-","CODE_SIGNING_REQUIRED":"NO","CONFIGURATION_BUILD_DIR":"$(BUILD_DIR)/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME)/flutter_native_splash","EXPANDED_CODE_SIGN_IDENTITY":"-","IBSC_MODULE":"flutter_native_splash","INFOPLIST_FILE":"Target Support Files/flutter_native_splash/ResourceBundle-flutter_native_splash_privacy-flutter_native_splash-Info.plist","IPHONEOS_DEPLOYMENT_TARGET":"9.0","ONLY_ACTIVE_ARCH":"NO","PRODUCT_NAME":"flutter_native_splash_privacy","SDKROOT":"iphoneos","SKIP_INSTALL":"YES","TARGETED_DEVICE_FAMILY":"1,2","WRAPPER_EXTENSION":"bundle"},"guid":"bfdfe7dc352907fc980b868725387e9860da4fbfcabe1e33365f0cf663020529","name":"Debug"},{"baseConfigurationFileReference":"bfdfe7dc352907fc980b868725387e98eccf4b0b561ffd1dcb573fa88f797247","buildSettings":{"CLANG_ENABLE_OBJC_WEAK":"NO","CODE_SIGNING_ALLOWED":"NO","CODE_SIGNING_IDENTITY":"-","CODE_SIGNING_REQUIRED":"NO","CONFIGURATION_BUILD_DIR":"$(BUILD_DIR)/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME)/flutter_native_splash","EXPANDED_CODE_SIGN_IDENTITY":"-","IBSC_MODULE":"flutter_native_splash","INFOPLIST_FILE":"Target Support Files/flutter_native_splash/ResourceBundle-flutter_native_splash_privacy-flutter_native_splash-Info.plist","IPHONEOS_DEPLOYMENT_TARGET":"9.0","PRODUCT_NAME":"flutter_native_splash_privacy","SDKROOT":"iphoneos","SKIP_INSTALL":"YES","TARGETED_DEVICE_FAMILY":"1,2","VALIDATE_PRODUCT":"YES","WRAPPER_EXTENSION":"bundle"},"guid":"bfdfe7dc352907fc980b868725387e986f07137accd1dd82ae0ad0cefa3da6ce","name":"Profile"},{"baseConfigurationFileReference":"bfdfe7dc352907fc980b868725387e98eccf4b0b561ffd1dcb573fa88f797247","buildSettings":{"CODE_SIGNING_ALLOWED":"NO","CODE_SIGNING_IDENTITY":"-","CODE_SIGNING_REQUIRED":"NO","CONFIGURATION_BUILD_DIR":"$(BUILD_DIR)/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME)/flutter_native_splash","EXPANDED_CODE_SIGN_IDENTITY":"-","IBSC_MODULE":"flutter_native_splash","INFOPLIST_FILE":"Target Support Files/flutter_native_splash/ResourceBundle-flutter_native_splash_privacy-flutter_native_splash-Info.plist","IPHONEOS_DEPLOYMENT_TARGET":"9.0","PRODUCT_NAME":"flutter_native_splash_privacy","SDKROOT":"iphoneos","SKIP_INSTALL":"YES","TARGETED_DEVICE_FAMILY":"1,2","WRAPPER_EXTENSION":"bundle"},"guid":"bfdfe7dc352907fc980b868725387e98dd79e1c50585767db93c82ffe1c549bc","name":"Release"}],"buildPhases":[{"buildFiles":[],"guid":"bfdfe7dc352907fc980b868725387e98a37d43881289b10f7faf1b2357e7cb09","type":"com.apple.buildphase.sources"},{"buildFiles":[],"guid":"bfdfe7dc352907fc980b868725387e9829803983f6294853f20f8230464279ca","type":"com.apple.buildphase.frameworks"},{"buildFiles":[{"fileReference":"bfdfe7dc352907fc980b868725387e98fe3a5ec7d39edfd3a806d5f27e4564cd","guid":"bfdfe7dc352907fc980b868725387e98f684de83241336c666b424da119ad07a"}],"guid":"bfdfe7dc352907fc980b868725387e9824fa8ba8f370ad90caa2d574be5d4562","type":"com.apple.buildphase.resources"}],"buildRules":[],"dependencies":[],"guid":"bfdfe7dc352907fc980b868725387e9861233620df33996cccf430ed75b4a999","name":"flutter_native_splash-flutter_native_splash_privacy","productReference":{"guid":"bfdfe7dc352907fc980b868725387e98640e376f8759837464f22e16bcf9542e","name":"flutter_native_splash_privacy.bundle","type":"product"},"productTypeIdentifier":"com.apple.product-type.bundle","provisioningSourceData":[{"bundleIdentifierFromInfoPlist":"${PRODUCT_BUNDLE_IDENTIFIER}","configurationName":"Debug","provisioningStyle":0},{"bundleIdentifierFromInfoPlist":"${PRODUCT_BUNDLE_IDENTIFIER}","configurationName":"Profile","provisioningStyle":0},{"bundleIdentifierFromInfoPlist":"${PRODUCT_BUNDLE_IDENTIFIER}","configurationName":"Release","provisioningStyle":0}],"type":"standard"} \ No newline at end of file diff --git a/mih_ui/android/build/ios/XCBuildData/PIFCache/target/TARGET@v11_hash=5815137460cbcfbe6d2f7a5b54b4ca09-json b/mih_ui/android/build/ios/XCBuildData/PIFCache/target/TARGET@v11_hash=5815137460cbcfbe6d2f7a5b54b4ca09-json new file mode 100644 index 00000000..8d0024cd --- /dev/null +++ b/mih_ui/android/build/ios/XCBuildData/PIFCache/target/TARGET@v11_hash=5815137460cbcfbe6d2f7a5b54b4ca09-json @@ -0,0 +1 @@ +{"buildConfigurations":[{"baseConfigurationFileReference":"bfdfe7dc352907fc980b868725387e9895b607e38dd439202402e1eb97e7bfe3","buildSettings":{"CLANG_ENABLE_OBJC_WEAK":"NO","CLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER":"NO","CODE_SIGN_IDENTITY[sdk=appletvos*]":"","CODE_SIGN_IDENTITY[sdk=iphoneos*]":"","CODE_SIGN_IDENTITY[sdk=watchos*]":"","CURRENT_PROJECT_VERSION":"1","DYLIB_COMPATIBILITY_VERSION":"1","DYLIB_CURRENT_VERSION":"1","DYLIB_INSTALL_NAME_BASE":"@rpath","ENABLE_BITCODE":"NO","ENABLE_MODULE_VERIFIER":"NO","ENABLE_USER_SCRIPT_SANDBOXING":"NO","EXCLUDED_ARCHS[sdk=iphoneos*]":"$(inherited) armv7","EXCLUDED_ARCHS[sdk=iphonesimulator*]":"$(inherited) i386","FRAMEWORK_SEARCH_PATHS[sdk=iphoneos*]":"\"/Users/yaso_meth/Git/flutter/bin/cache/artifacts/engine/ios/Flutter.xcframework/ios-arm64\" $(inherited)","FRAMEWORK_SEARCH_PATHS[sdk=iphonesimulator*]":"\"/Users/yaso_meth/Git/flutter/bin/cache/artifacts/engine/ios/Flutter.xcframework/ios-arm64_x86_64-simulator\" $(inherited)","GCC_PREFIX_HEADER":"Target Support Files/firebase_auth/firebase_auth-prefix.pch","GENERATE_INFOPLIST_FILE":"NO","INFOPLIST_FILE":"Target Support Files/firebase_auth/firebase_auth-Info.plist","INSTALL_PATH":"$(LOCAL_LIBRARY_DIR)/Frameworks","IPHONEOS_DEPLOYMENT_TARGET":"15.0","LD_RUNPATH_SEARCH_PATHS":"$(inherited) @executable_path/Frameworks @loader_path/Frameworks","MACH_O_TYPE":"staticlib","MODULEMAP_FILE":"Target Support Files/firebase_auth/firebase_auth.modulemap","ONLY_ACTIVE_ARCH":"NO","OTHER_LDFLAGS":"$(inherited) -framework Flutter","PRODUCT_MODULE_NAME":"firebase_auth","PRODUCT_NAME":"firebase_auth","SDKROOT":"iphoneos","SKIP_INSTALL":"YES","SWIFT_ACTIVE_COMPILATION_CONDITIONS":"$(inherited) ","SWIFT_INSTALL_OBJC_HEADER":"YES","SWIFT_VERSION":"5.0","TARGETED_DEVICE_FAMILY":"1,2","VALID_ARCHS[sdk=iphonesimulator*]":"$(ARCHS_STANDARD)","VERSIONING_SYSTEM":"apple-generic","VERSION_INFO_PREFIX":""},"guid":"bfdfe7dc352907fc980b868725387e986ffa22517f22fd1628a2ac5260461665","name":"Debug"},{"baseConfigurationFileReference":"bfdfe7dc352907fc980b868725387e987f882ba03ab88d6bb0c7d3cbdee44856","buildSettings":{"CLANG_ENABLE_OBJC_WEAK":"NO","CLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER":"NO","CODE_SIGN_IDENTITY[sdk=appletvos*]":"","CODE_SIGN_IDENTITY[sdk=iphoneos*]":"","CODE_SIGN_IDENTITY[sdk=watchos*]":"","CURRENT_PROJECT_VERSION":"1","DYLIB_COMPATIBILITY_VERSION":"1","DYLIB_CURRENT_VERSION":"1","DYLIB_INSTALL_NAME_BASE":"@rpath","ENABLE_BITCODE":"NO","ENABLE_MODULE_VERIFIER":"NO","ENABLE_USER_SCRIPT_SANDBOXING":"NO","EXCLUDED_ARCHS[sdk=iphoneos*]":"$(inherited) armv7","EXCLUDED_ARCHS[sdk=iphonesimulator*]":"$(inherited) i386","FRAMEWORK_SEARCH_PATHS[sdk=iphoneos*]":"\"/Users/yaso_meth/Git/flutter/bin/cache/artifacts/engine/ios-release/Flutter.xcframework/ios-arm64\" $(inherited)","FRAMEWORK_SEARCH_PATHS[sdk=iphonesimulator*]":"\"/Users/yaso_meth/Git/flutter/bin/cache/artifacts/engine/ios-release/Flutter.xcframework/ios-arm64_x86_64-simulator\" $(inherited)","GCC_PREFIX_HEADER":"Target Support Files/firebase_auth/firebase_auth-prefix.pch","GENERATE_INFOPLIST_FILE":"NO","INFOPLIST_FILE":"Target Support Files/firebase_auth/firebase_auth-Info.plist","INSTALL_PATH":"$(LOCAL_LIBRARY_DIR)/Frameworks","IPHONEOS_DEPLOYMENT_TARGET":"15.0","LD_RUNPATH_SEARCH_PATHS":"$(inherited) @executable_path/Frameworks @loader_path/Frameworks","MACH_O_TYPE":"staticlib","MODULEMAP_FILE":"Target Support Files/firebase_auth/firebase_auth.modulemap","OTHER_LDFLAGS":"$(inherited) -framework Flutter","PRODUCT_MODULE_NAME":"firebase_auth","PRODUCT_NAME":"firebase_auth","SDKROOT":"iphoneos","SKIP_INSTALL":"YES","SWIFT_ACTIVE_COMPILATION_CONDITIONS":"$(inherited) ","SWIFT_INSTALL_OBJC_HEADER":"YES","SWIFT_VERSION":"5.0","TARGETED_DEVICE_FAMILY":"1,2","VALIDATE_PRODUCT":"YES","VALID_ARCHS[sdk=iphonesimulator*]":"$(ARCHS_STANDARD)","VERSIONING_SYSTEM":"apple-generic","VERSION_INFO_PREFIX":""},"guid":"bfdfe7dc352907fc980b868725387e987b8d45e58dea39fe7d08353e02a0dd00","name":"Profile"},{"baseConfigurationFileReference":"bfdfe7dc352907fc980b868725387e987f882ba03ab88d6bb0c7d3cbdee44856","buildSettings":{"CLANG_ENABLE_OBJC_WEAK":"NO","CLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER":"NO","CODE_SIGN_IDENTITY[sdk=appletvos*]":"","CODE_SIGN_IDENTITY[sdk=iphoneos*]":"","CODE_SIGN_IDENTITY[sdk=watchos*]":"","CURRENT_PROJECT_VERSION":"1","DYLIB_COMPATIBILITY_VERSION":"1","DYLIB_CURRENT_VERSION":"1","DYLIB_INSTALL_NAME_BASE":"@rpath","ENABLE_BITCODE":"NO","ENABLE_MODULE_VERIFIER":"NO","ENABLE_USER_SCRIPT_SANDBOXING":"NO","EXCLUDED_ARCHS[sdk=iphoneos*]":"$(inherited) armv7","EXCLUDED_ARCHS[sdk=iphonesimulator*]":"$(inherited) i386","FRAMEWORK_SEARCH_PATHS[sdk=iphoneos*]":"\"/Users/yaso_meth/Git/flutter/bin/cache/artifacts/engine/ios-release/Flutter.xcframework/ios-arm64\" $(inherited)","FRAMEWORK_SEARCH_PATHS[sdk=iphonesimulator*]":"\"/Users/yaso_meth/Git/flutter/bin/cache/artifacts/engine/ios-release/Flutter.xcframework/ios-arm64_x86_64-simulator\" $(inherited)","GCC_PREFIX_HEADER":"Target Support Files/firebase_auth/firebase_auth-prefix.pch","GENERATE_INFOPLIST_FILE":"NO","INFOPLIST_FILE":"Target Support Files/firebase_auth/firebase_auth-Info.plist","INSTALL_PATH":"$(LOCAL_LIBRARY_DIR)/Frameworks","IPHONEOS_DEPLOYMENT_TARGET":"15.0","LD_RUNPATH_SEARCH_PATHS":"$(inherited) @executable_path/Frameworks @loader_path/Frameworks","MACH_O_TYPE":"staticlib","MODULEMAP_FILE":"Target Support Files/firebase_auth/firebase_auth.modulemap","OTHER_LDFLAGS":"$(inherited) -framework Flutter","PRODUCT_MODULE_NAME":"firebase_auth","PRODUCT_NAME":"firebase_auth","SDKROOT":"iphoneos","SKIP_INSTALL":"YES","SWIFT_ACTIVE_COMPILATION_CONDITIONS":"$(inherited) ","SWIFT_INSTALL_OBJC_HEADER":"YES","SWIFT_VERSION":"5.0","TARGETED_DEVICE_FAMILY":"1,2","VALIDATE_PRODUCT":"YES","VALID_ARCHS[sdk=iphonesimulator*]":"$(ARCHS_STANDARD)","VERSIONING_SYSTEM":"apple-generic","VERSION_INFO_PREFIX":""},"guid":"bfdfe7dc352907fc980b868725387e98edda9841fffc7bfd37a16a25e8033f6c","name":"Release"}],"buildPhases":[{"buildFiles":[{"fileReference":"bfdfe7dc352907fc980b868725387e98f0e96d34aebeddb83a8166ed2181b114","guid":"bfdfe7dc352907fc980b868725387e980264b5003559128064c2d431c7a1d5d2","headerVisibility":"public"},{"fileReference":"bfdfe7dc352907fc980b868725387e983fadff5bdce928842849d4dcd99e8422","guid":"bfdfe7dc352907fc980b868725387e985d1e77a9e0f21d15d95d15d10c36a7ac","headerVisibility":"public"},{"fileReference":"bfdfe7dc352907fc980b868725387e98c3935a7024d5af57e2ec647f59ad2f2d","guid":"bfdfe7dc352907fc980b868725387e98cbe6b1da8d292457b0a06923224aa7dd","headerVisibility":"public"},{"fileReference":"bfdfe7dc352907fc980b868725387e9827bee845e2266de322863f00bfdc2a26","guid":"bfdfe7dc352907fc980b868725387e98bc55dd443ff9df6818152546d4b6fa52","headerVisibility":"private"},{"fileReference":"bfdfe7dc352907fc980b868725387e98a49b0809685262c84b0c7c8e57a010be","guid":"bfdfe7dc352907fc980b868725387e982efe64056275ae26b61290455ce42a1b","headerVisibility":"public"},{"fileReference":"bfdfe7dc352907fc980b868725387e983b118aa12a63ca9f9945efeaf253ff7b","guid":"bfdfe7dc352907fc980b868725387e98e02f7506a83b26f4293ee303c4dbc43f","headerVisibility":"private"},{"fileReference":"bfdfe7dc352907fc980b868725387e98e5b528b032881616d1c665dec13dafa8","guid":"bfdfe7dc352907fc980b868725387e98a0a8593f87d972ef6f48ed937fef744c","headerVisibility":"private"},{"fileReference":"bfdfe7dc352907fc980b868725387e982864d491b842dd5124ecf14b972d65b6","guid":"bfdfe7dc352907fc980b868725387e9877d27052a9618edfae7508f85bac96af","headerVisibility":"private"}],"guid":"bfdfe7dc352907fc980b868725387e988f67ebbfe9a44a955f668d3a5eb4c0bb","type":"com.apple.buildphase.headers"},{"buildFiles":[{"fileReference":"bfdfe7dc352907fc980b868725387e98f9755ae3b2d4cab1fb3158b533f2c9d1","guid":"bfdfe7dc352907fc980b868725387e98ecb41fbfb930c36ae115d09d3f3d730e"},{"fileReference":"bfdfe7dc352907fc980b868725387e985f541d6ffe1082b2902e65204c08509d","guid":"bfdfe7dc352907fc980b868725387e98b795a98d2e97081bd5295e3b4039deef"},{"fileReference":"bfdfe7dc352907fc980b868725387e98eb223ecb002d14c77278863d78c4c318","guid":"bfdfe7dc352907fc980b868725387e981691306068dfc16ee4f918f9cfb49a7d"},{"fileReference":"bfdfe7dc352907fc980b868725387e9810eacf503f471242fc9c2cd78a82403c","guid":"bfdfe7dc352907fc980b868725387e9833d5a142ad9df6cf3e604e4deb1bcf04"},{"fileReference":"bfdfe7dc352907fc980b868725387e982532bb5826be388841ede9effca1df18","guid":"bfdfe7dc352907fc980b868725387e98849e466755639a30943fd9b3df64d9ea"},{"fileReference":"bfdfe7dc352907fc980b868725387e988936fde4a4450628a9e214e0ddf0d394","guid":"bfdfe7dc352907fc980b868725387e986dd29eeff5f19c0d819a889c21d7e7fa"},{"fileReference":"bfdfe7dc352907fc980b868725387e98347fb9c4a5c7c79fec72e40d077e4345","guid":"bfdfe7dc352907fc980b868725387e9811fb68a52c38697eb33ce80d8ac39fe7"}],"guid":"bfdfe7dc352907fc980b868725387e98d0a3957f9e1e76017912b92f0fab46b9","type":"com.apple.buildphase.sources"},{"buildFiles":[{"fileReference":"bfdfe7dc352907fc980b868725387e98b14af7c49882340ad551cb13b0a1e06d","guid":"bfdfe7dc352907fc980b868725387e98daa3520e3d9f06a110e8f01981af6f59"}],"guid":"bfdfe7dc352907fc980b868725387e98ce97f70f77fd0c53336335476b6c74ce","type":"com.apple.buildphase.frameworks"},{"buildFiles":[],"guid":"bfdfe7dc352907fc980b868725387e98021c1a71a666361c883fecc3ff1b4e14","type":"com.apple.buildphase.resources"}],"buildRules":[],"dependencies":[{"guid":"bfdfe7dc352907fc980b868725387e98d57b8bce60a0f11113f4cff532db68d3","name":"Firebase"},{"guid":"bfdfe7dc352907fc980b868725387e989da425bb6d6d5d8dbb95e4afffb82217","name":"Flutter"},{"guid":"bfdfe7dc352907fc980b868725387e987f74324bfc5c78140e34d510e26e00c1","name":"firebase_core"}],"guid":"bfdfe7dc352907fc980b868725387e983788d8769c821650606514be955fca93","name":"firebase_auth","predominantSourceCodeLanguage":"Xcode.SourceCodeLanguage.Objective-C-Plus-Plus","productReference":{"guid":"bfdfe7dc352907fc980b868725387e984496a3f7661d89567ff8250961054e8f","name":"firebase_auth.framework","type":"product"},"productTypeIdentifier":"com.apple.product-type.framework","provisioningSourceData":[{"bundleIdentifierFromInfoPlist":"${PRODUCT_BUNDLE_IDENTIFIER}","configurationName":"Debug","provisioningStyle":1},{"bundleIdentifierFromInfoPlist":"${PRODUCT_BUNDLE_IDENTIFIER}","configurationName":"Profile","provisioningStyle":1},{"bundleIdentifierFromInfoPlist":"${PRODUCT_BUNDLE_IDENTIFIER}","configurationName":"Release","provisioningStyle":1}],"type":"standard"} \ No newline at end of file diff --git a/mih_ui/android/build/ios/XCBuildData/PIFCache/target/TARGET@v11_hash=5b871dc0aeb742795842305fce24cf10-json b/mih_ui/android/build/ios/XCBuildData/PIFCache/target/TARGET@v11_hash=5b871dc0aeb742795842305fce24cf10-json new file mode 100644 index 00000000..9750b1d8 --- /dev/null +++ b/mih_ui/android/build/ios/XCBuildData/PIFCache/target/TARGET@v11_hash=5b871dc0aeb742795842305fce24cf10-json @@ -0,0 +1 @@ +{"buildConfigurations":[{"baseConfigurationFileReference":"bfdfe7dc352907fc980b868725387e98be516318204b40d33cd2aae70dc8508d","buildSettings":{"CODE_SIGNING_ALLOWED":"NO","CODE_SIGNING_IDENTITY":"-","CODE_SIGNING_REQUIRED":"NO","CONFIGURATION_BUILD_DIR":"$(BUILD_DIR)/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME)/image_picker_ios","EXPANDED_CODE_SIGN_IDENTITY":"-","IBSC_MODULE":"image_picker_ios","INFOPLIST_FILE":"Target Support Files/image_picker_ios/ResourceBundle-image_picker_ios_privacy-image_picker_ios-Info.plist","IPHONEOS_DEPLOYMENT_TARGET":"12.0","ONLY_ACTIVE_ARCH":"NO","PRODUCT_NAME":"image_picker_ios_privacy","SDKROOT":"iphoneos","SKIP_INSTALL":"YES","TARGETED_DEVICE_FAMILY":"1,2","WRAPPER_EXTENSION":"bundle"},"guid":"bfdfe7dc352907fc980b868725387e98fe184685e7621bee1606ce85917b9b85","name":"Debug"},{"baseConfigurationFileReference":"bfdfe7dc352907fc980b868725387e988b179e3ba3eb0643314ef47fd544fc52","buildSettings":{"CLANG_ENABLE_OBJC_WEAK":"NO","CODE_SIGNING_ALLOWED":"NO","CODE_SIGNING_IDENTITY":"-","CODE_SIGNING_REQUIRED":"NO","CONFIGURATION_BUILD_DIR":"$(BUILD_DIR)/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME)/image_picker_ios","EXPANDED_CODE_SIGN_IDENTITY":"-","IBSC_MODULE":"image_picker_ios","INFOPLIST_FILE":"Target Support Files/image_picker_ios/ResourceBundle-image_picker_ios_privacy-image_picker_ios-Info.plist","IPHONEOS_DEPLOYMENT_TARGET":"12.0","PRODUCT_NAME":"image_picker_ios_privacy","SDKROOT":"iphoneos","SKIP_INSTALL":"YES","TARGETED_DEVICE_FAMILY":"1,2","VALIDATE_PRODUCT":"YES","WRAPPER_EXTENSION":"bundle"},"guid":"bfdfe7dc352907fc980b868725387e980e4526c50a4031936bde394eea80eeea","name":"Profile"},{"baseConfigurationFileReference":"bfdfe7dc352907fc980b868725387e988b179e3ba3eb0643314ef47fd544fc52","buildSettings":{"CODE_SIGNING_ALLOWED":"NO","CODE_SIGNING_IDENTITY":"-","CODE_SIGNING_REQUIRED":"NO","CONFIGURATION_BUILD_DIR":"$(BUILD_DIR)/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME)/image_picker_ios","EXPANDED_CODE_SIGN_IDENTITY":"-","IBSC_MODULE":"image_picker_ios","INFOPLIST_FILE":"Target Support Files/image_picker_ios/ResourceBundle-image_picker_ios_privacy-image_picker_ios-Info.plist","IPHONEOS_DEPLOYMENT_TARGET":"12.0","PRODUCT_NAME":"image_picker_ios_privacy","SDKROOT":"iphoneos","SKIP_INSTALL":"YES","TARGETED_DEVICE_FAMILY":"1,2","WRAPPER_EXTENSION":"bundle"},"guid":"bfdfe7dc352907fc980b868725387e98c53111fcdd62cde610c426b59c6fff48","name":"Release"}],"buildPhases":[{"buildFiles":[],"guid":"bfdfe7dc352907fc980b868725387e98177bb54c0b7e90531c0998c1a64e6640","type":"com.apple.buildphase.sources"},{"buildFiles":[],"guid":"bfdfe7dc352907fc980b868725387e98a28d1f7835b4ffdc546d78cd1abcaa73","type":"com.apple.buildphase.frameworks"},{"buildFiles":[{"fileReference":"bfdfe7dc352907fc980b868725387e981c0fc8adcffe31e3d3685bd10445f9cd","guid":"bfdfe7dc352907fc980b868725387e9841b0f8ddcf424810ba75263f93b7b475"}],"guid":"bfdfe7dc352907fc980b868725387e98939f77574fa9675a93079ac8069ec10e","type":"com.apple.buildphase.resources"}],"buildRules":[],"dependencies":[],"guid":"bfdfe7dc352907fc980b868725387e98082dc85da1fc941e5234c7cc1f11b27d","name":"image_picker_ios-image_picker_ios_privacy","productReference":{"guid":"bfdfe7dc352907fc980b868725387e98cba567c8a049008de84f093e54e3191c","name":"image_picker_ios_privacy.bundle","type":"product"},"productTypeIdentifier":"com.apple.product-type.bundle","provisioningSourceData":[{"bundleIdentifierFromInfoPlist":"${PRODUCT_BUNDLE_IDENTIFIER}","configurationName":"Debug","provisioningStyle":0},{"bundleIdentifierFromInfoPlist":"${PRODUCT_BUNDLE_IDENTIFIER}","configurationName":"Profile","provisioningStyle":0},{"bundleIdentifierFromInfoPlist":"${PRODUCT_BUNDLE_IDENTIFIER}","configurationName":"Release","provisioningStyle":0}],"type":"standard"} \ No newline at end of file diff --git a/mih_ui/android/build/ios/XCBuildData/PIFCache/target/TARGET@v11_hash=5bd0bad9e37ac0efe7eb7e9b6a040622-json b/mih_ui/android/build/ios/XCBuildData/PIFCache/target/TARGET@v11_hash=5bd0bad9e37ac0efe7eb7e9b6a040622-json new file mode 100644 index 00000000..d89c810b --- /dev/null +++ b/mih_ui/android/build/ios/XCBuildData/PIFCache/target/TARGET@v11_hash=5bd0bad9e37ac0efe7eb7e9b6a040622-json @@ -0,0 +1 @@ +{"buildConfigurations":[{"baseConfigurationFileReference":"bfdfe7dc352907fc980b868725387e98c5ea3636852338c982e52209ddd197d0","buildSettings":{"CODE_SIGNING_ALLOWED":"NO","CODE_SIGNING_IDENTITY":"-","CODE_SIGNING_REQUIRED":"NO","CONFIGURATION_BUILD_DIR":"$(BUILD_DIR)/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME)/device_info_plus","EXPANDED_CODE_SIGN_IDENTITY":"-","IBSC_MODULE":"device_info_plus","INFOPLIST_FILE":"Target Support Files/device_info_plus/ResourceBundle-device_info_plus_privacy-device_info_plus-Info.plist","IPHONEOS_DEPLOYMENT_TARGET":"12.0","ONLY_ACTIVE_ARCH":"NO","PRODUCT_NAME":"device_info_plus_privacy","SDKROOT":"iphoneos","SKIP_INSTALL":"YES","TARGETED_DEVICE_FAMILY":"1,2","WRAPPER_EXTENSION":"bundle"},"guid":"bfdfe7dc352907fc980b868725387e982904bb5a1a6cb0ed3f02b0f6d901644e","name":"Debug"},{"baseConfigurationFileReference":"bfdfe7dc352907fc980b868725387e98c321042b295c1853a19a7fc9918a7454","buildSettings":{"CLANG_ENABLE_OBJC_WEAK":"NO","CODE_SIGNING_ALLOWED":"NO","CODE_SIGNING_IDENTITY":"-","CODE_SIGNING_REQUIRED":"NO","CONFIGURATION_BUILD_DIR":"$(BUILD_DIR)/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME)/device_info_plus","EXPANDED_CODE_SIGN_IDENTITY":"-","IBSC_MODULE":"device_info_plus","INFOPLIST_FILE":"Target Support Files/device_info_plus/ResourceBundle-device_info_plus_privacy-device_info_plus-Info.plist","IPHONEOS_DEPLOYMENT_TARGET":"12.0","PRODUCT_NAME":"device_info_plus_privacy","SDKROOT":"iphoneos","SKIP_INSTALL":"YES","TARGETED_DEVICE_FAMILY":"1,2","VALIDATE_PRODUCT":"YES","WRAPPER_EXTENSION":"bundle"},"guid":"bfdfe7dc352907fc980b868725387e984596d2a2fc6523e915885973c572d8a0","name":"Profile"},{"baseConfigurationFileReference":"bfdfe7dc352907fc980b868725387e98c321042b295c1853a19a7fc9918a7454","buildSettings":{"CODE_SIGNING_ALLOWED":"NO","CODE_SIGNING_IDENTITY":"-","CODE_SIGNING_REQUIRED":"NO","CONFIGURATION_BUILD_DIR":"$(BUILD_DIR)/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME)/device_info_plus","EXPANDED_CODE_SIGN_IDENTITY":"-","IBSC_MODULE":"device_info_plus","INFOPLIST_FILE":"Target Support Files/device_info_plus/ResourceBundle-device_info_plus_privacy-device_info_plus-Info.plist","IPHONEOS_DEPLOYMENT_TARGET":"12.0","PRODUCT_NAME":"device_info_plus_privacy","SDKROOT":"iphoneos","SKIP_INSTALL":"YES","TARGETED_DEVICE_FAMILY":"1,2","WRAPPER_EXTENSION":"bundle"},"guid":"bfdfe7dc352907fc980b868725387e98207a2fbc6c3dec47ad9df0cd8f6ea36f","name":"Release"}],"buildPhases":[{"buildFiles":[],"guid":"bfdfe7dc352907fc980b868725387e98f08c76ed4246bfded15b12d7fa9b32a3","type":"com.apple.buildphase.sources"},{"buildFiles":[],"guid":"bfdfe7dc352907fc980b868725387e98b485edd366b672ff4d81a5c7087c98e0","type":"com.apple.buildphase.frameworks"},{"buildFiles":[{"fileReference":"bfdfe7dc352907fc980b868725387e98c10991a7301e313966d8722e62961e70","guid":"bfdfe7dc352907fc980b868725387e9806b678c693bf89dc1ed60fcbbdd4c059"}],"guid":"bfdfe7dc352907fc980b868725387e98289669258e6c850a58e363fc4c5889d5","type":"com.apple.buildphase.resources"}],"buildRules":[],"dependencies":[],"guid":"bfdfe7dc352907fc980b868725387e98583f48d08e567205bb589ccf43c23e63","name":"device_info_plus-device_info_plus_privacy","productReference":{"guid":"bfdfe7dc352907fc980b868725387e98796fe11972476d5a3ffbbf6850b4991c","name":"device_info_plus_privacy.bundle","type":"product"},"productTypeIdentifier":"com.apple.product-type.bundle","provisioningSourceData":[{"bundleIdentifierFromInfoPlist":"${PRODUCT_BUNDLE_IDENTIFIER}","configurationName":"Debug","provisioningStyle":0},{"bundleIdentifierFromInfoPlist":"${PRODUCT_BUNDLE_IDENTIFIER}","configurationName":"Profile","provisioningStyle":0},{"bundleIdentifierFromInfoPlist":"${PRODUCT_BUNDLE_IDENTIFIER}","configurationName":"Release","provisioningStyle":0}],"type":"standard"} \ No newline at end of file diff --git a/mih_ui/android/build/ios/XCBuildData/PIFCache/target/TARGET@v11_hash=61f30aa6dfaff3adeef504cd04583578-json b/mih_ui/android/build/ios/XCBuildData/PIFCache/target/TARGET@v11_hash=61f30aa6dfaff3adeef504cd04583578-json new file mode 100644 index 00000000..52a0e76b --- /dev/null +++ b/mih_ui/android/build/ios/XCBuildData/PIFCache/target/TARGET@v11_hash=61f30aa6dfaff3adeef504cd04583578-json @@ -0,0 +1 @@ +{"buildConfigurations":[{"baseConfigurationFileReference":"bfdfe7dc352907fc980b868725387e9899a3c545d51db50c0cf261030b824669","buildSettings":{"CLANG_ENABLE_OBJC_WEAK":"NO","CLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER":"NO","CODE_SIGN_IDENTITY[sdk=appletvos*]":"","CODE_SIGN_IDENTITY[sdk=iphoneos*]":"","CODE_SIGN_IDENTITY[sdk=watchos*]":"","CURRENT_PROJECT_VERSION":"1","DYLIB_COMPATIBILITY_VERSION":"1","DYLIB_CURRENT_VERSION":"1","DYLIB_INSTALL_NAME_BASE":"@rpath","ENABLE_BITCODE":"NO","ENABLE_MODULE_VERIFIER":"NO","ENABLE_USER_SCRIPT_SANDBOXING":"NO","EXCLUDED_ARCHS[sdk=iphoneos*]":"$(inherited) armv7","EXCLUDED_ARCHS[sdk=iphonesimulator*]":"$(inherited) i386","FRAMEWORK_SEARCH_PATHS[sdk=iphoneos*]":"\"/Users/yaso_meth/Git/flutter/bin/cache/artifacts/engine/ios/Flutter.xcframework/ios-arm64\" $(inherited)","FRAMEWORK_SEARCH_PATHS[sdk=iphonesimulator*]":"\"/Users/yaso_meth/Git/flutter/bin/cache/artifacts/engine/ios/Flutter.xcframework/ios-arm64_x86_64-simulator\" $(inherited)","GCC_PREFIX_HEADER":"Target Support Files/quick_actions_ios/quick_actions_ios-prefix.pch","GENERATE_INFOPLIST_FILE":"NO","INFOPLIST_FILE":"Target Support Files/quick_actions_ios/quick_actions_ios-Info.plist","INSTALL_PATH":"$(LOCAL_LIBRARY_DIR)/Frameworks","MODULEMAP_FILE":"Target Support Files/quick_actions_ios/quick_actions_ios.modulemap","ONLY_ACTIVE_ARCH":"NO","OTHER_LDFLAGS":"$(inherited) -framework Flutter","PRODUCT_MODULE_NAME":"quick_actions_ios","PRODUCT_NAME":"quick_actions_ios","SDKROOT":"iphoneos","SKIP_INSTALL":"YES","SWIFT_ACTIVE_COMPILATION_CONDITIONS":"$(inherited) ","SWIFT_INSTALL_OBJC_HEADER":"YES","SWIFT_VERSION":"5.0","TARGETED_DEVICE_FAMILY":"1,2","VALID_ARCHS[sdk=iphonesimulator*]":"$(ARCHS_STANDARD)","VERSIONING_SYSTEM":"apple-generic","VERSION_INFO_PREFIX":""},"guid":"bfdfe7dc352907fc980b868725387e98acfdc8cee73d6ddf7ec37d429e7f55b1","name":"Debug"},{"baseConfigurationFileReference":"bfdfe7dc352907fc980b868725387e98968b3bc9ee9e49b2679f77b1c2b31c1d","buildSettings":{"CLANG_ENABLE_OBJC_WEAK":"NO","CLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER":"NO","CODE_SIGN_IDENTITY[sdk=appletvos*]":"","CODE_SIGN_IDENTITY[sdk=iphoneos*]":"","CODE_SIGN_IDENTITY[sdk=watchos*]":"","CURRENT_PROJECT_VERSION":"1","DYLIB_COMPATIBILITY_VERSION":"1","DYLIB_CURRENT_VERSION":"1","DYLIB_INSTALL_NAME_BASE":"@rpath","ENABLE_BITCODE":"NO","ENABLE_MODULE_VERIFIER":"NO","ENABLE_USER_SCRIPT_SANDBOXING":"NO","EXCLUDED_ARCHS[sdk=iphoneos*]":"$(inherited) armv7","EXCLUDED_ARCHS[sdk=iphonesimulator*]":"$(inherited) i386","FRAMEWORK_SEARCH_PATHS[sdk=iphoneos*]":"\"/Users/yaso_meth/Git/flutter/bin/cache/artifacts/engine/ios-release/Flutter.xcframework/ios-arm64\" $(inherited)","FRAMEWORK_SEARCH_PATHS[sdk=iphonesimulator*]":"\"/Users/yaso_meth/Git/flutter/bin/cache/artifacts/engine/ios-release/Flutter.xcframework/ios-arm64_x86_64-simulator\" $(inherited)","GCC_PREFIX_HEADER":"Target Support Files/quick_actions_ios/quick_actions_ios-prefix.pch","GENERATE_INFOPLIST_FILE":"NO","INFOPLIST_FILE":"Target Support Files/quick_actions_ios/quick_actions_ios-Info.plist","INSTALL_PATH":"$(LOCAL_LIBRARY_DIR)/Frameworks","MODULEMAP_FILE":"Target Support Files/quick_actions_ios/quick_actions_ios.modulemap","OTHER_LDFLAGS":"$(inherited) -framework Flutter","PRODUCT_MODULE_NAME":"quick_actions_ios","PRODUCT_NAME":"quick_actions_ios","SDKROOT":"iphoneos","SKIP_INSTALL":"YES","SWIFT_ACTIVE_COMPILATION_CONDITIONS":"$(inherited) ","SWIFT_INSTALL_OBJC_HEADER":"YES","SWIFT_VERSION":"5.0","TARGETED_DEVICE_FAMILY":"1,2","VALIDATE_PRODUCT":"YES","VALID_ARCHS[sdk=iphonesimulator*]":"$(ARCHS_STANDARD)","VERSIONING_SYSTEM":"apple-generic","VERSION_INFO_PREFIX":""},"guid":"bfdfe7dc352907fc980b868725387e98a750796f7c7942168c3e5bdf0be0cf63","name":"Profile"},{"baseConfigurationFileReference":"bfdfe7dc352907fc980b868725387e98968b3bc9ee9e49b2679f77b1c2b31c1d","buildSettings":{"CLANG_ENABLE_OBJC_WEAK":"NO","CLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER":"NO","CODE_SIGN_IDENTITY[sdk=appletvos*]":"","CODE_SIGN_IDENTITY[sdk=iphoneos*]":"","CODE_SIGN_IDENTITY[sdk=watchos*]":"","CURRENT_PROJECT_VERSION":"1","DYLIB_COMPATIBILITY_VERSION":"1","DYLIB_CURRENT_VERSION":"1","DYLIB_INSTALL_NAME_BASE":"@rpath","ENABLE_BITCODE":"NO","ENABLE_MODULE_VERIFIER":"NO","ENABLE_USER_SCRIPT_SANDBOXING":"NO","EXCLUDED_ARCHS[sdk=iphoneos*]":"$(inherited) armv7","EXCLUDED_ARCHS[sdk=iphonesimulator*]":"$(inherited) i386","FRAMEWORK_SEARCH_PATHS[sdk=iphoneos*]":"\"/Users/yaso_meth/Git/flutter/bin/cache/artifacts/engine/ios-release/Flutter.xcframework/ios-arm64\" $(inherited)","FRAMEWORK_SEARCH_PATHS[sdk=iphonesimulator*]":"\"/Users/yaso_meth/Git/flutter/bin/cache/artifacts/engine/ios-release/Flutter.xcframework/ios-arm64_x86_64-simulator\" $(inherited)","GCC_PREFIX_HEADER":"Target Support Files/quick_actions_ios/quick_actions_ios-prefix.pch","GENERATE_INFOPLIST_FILE":"NO","INFOPLIST_FILE":"Target Support Files/quick_actions_ios/quick_actions_ios-Info.plist","INSTALL_PATH":"$(LOCAL_LIBRARY_DIR)/Frameworks","MODULEMAP_FILE":"Target Support Files/quick_actions_ios/quick_actions_ios.modulemap","OTHER_LDFLAGS":"$(inherited) -framework Flutter","PRODUCT_MODULE_NAME":"quick_actions_ios","PRODUCT_NAME":"quick_actions_ios","SDKROOT":"iphoneos","SKIP_INSTALL":"YES","SWIFT_ACTIVE_COMPILATION_CONDITIONS":"$(inherited) ","SWIFT_INSTALL_OBJC_HEADER":"YES","SWIFT_VERSION":"5.0","TARGETED_DEVICE_FAMILY":"1,2","VALIDATE_PRODUCT":"YES","VALID_ARCHS[sdk=iphonesimulator*]":"$(ARCHS_STANDARD)","VERSIONING_SYSTEM":"apple-generic","VERSION_INFO_PREFIX":""},"guid":"bfdfe7dc352907fc980b868725387e9817fe2af4d90d8c3c858f4d1cf8fff876","name":"Release"}],"buildPhases":[{"buildFiles":[{"fileReference":"bfdfe7dc352907fc980b868725387e98da1a1802428a351085dc1c5dc1b95b0e","guid":"bfdfe7dc352907fc980b868725387e986197130f55596953d24a82ff0fd7953e","headerVisibility":"public"}],"guid":"bfdfe7dc352907fc980b868725387e98f08756e83b172ee067bf0780b590348d","type":"com.apple.buildphase.headers"},{"buildFiles":[{"fileReference":"bfdfe7dc352907fc980b868725387e98e0db4c45eaeb1548f9f07595cdd1ca45","guid":"bfdfe7dc352907fc980b868725387e98508014754d169ddaeaef802bfeb19d2b"},{"fileReference":"bfdfe7dc352907fc980b868725387e98dac7ee7a1bbc4495acb5a734dbbf08a0","guid":"bfdfe7dc352907fc980b868725387e98dec5ad258fb22b144f74259297632fd4"},{"fileReference":"bfdfe7dc352907fc980b868725387e98775d552104d6921b0e48e28110e132e4","guid":"bfdfe7dc352907fc980b868725387e98a1ac291c4f3e44de99d6167ae512addc"},{"fileReference":"bfdfe7dc352907fc980b868725387e98a6e06b4bf97089fc1190fe51ed103c37","guid":"bfdfe7dc352907fc980b868725387e983cbdaeed8fa320797f798a16df769441"}],"guid":"bfdfe7dc352907fc980b868725387e9818465b2ba502c04f1534d97df9e34078","type":"com.apple.buildphase.sources"},{"buildFiles":[{"fileReference":"bfdfe7dc352907fc980b868725387e98b14af7c49882340ad551cb13b0a1e06d","guid":"bfdfe7dc352907fc980b868725387e9858de0802fd1ee497f3600e1d76560125"}],"guid":"bfdfe7dc352907fc980b868725387e98e8750693a968a29e0dae5514917f209d","type":"com.apple.buildphase.frameworks"},{"buildFiles":[{"guid":"bfdfe7dc352907fc980b868725387e980d7dd864d5fd71579d6bbf547028ddb7","targetReference":"bfdfe7dc352907fc980b868725387e980e0d42b02f67da84628f3c3fd30ed4e0"}],"guid":"bfdfe7dc352907fc980b868725387e984cc8312ad282bea996f89b03ebb9e54b","type":"com.apple.buildphase.resources"}],"buildRules":[],"dependencies":[{"guid":"bfdfe7dc352907fc980b868725387e989da425bb6d6d5d8dbb95e4afffb82217","name":"Flutter"},{"guid":"bfdfe7dc352907fc980b868725387e980e0d42b02f67da84628f3c3fd30ed4e0","name":"quick_actions_ios-quick_actions_ios_privacy"}],"guid":"bfdfe7dc352907fc980b868725387e986a7f857d9699ce0307f844d6d31566d3","name":"quick_actions_ios","predominantSourceCodeLanguage":"Xcode.SourceCodeLanguage.Swift","productReference":{"guid":"bfdfe7dc352907fc980b868725387e984bdb4c1ab53354bc3b2bb59c59fb1dee","name":"quick_actions_ios.framework","type":"product"},"productTypeIdentifier":"com.apple.product-type.framework","provisioningSourceData":[{"bundleIdentifierFromInfoPlist":"${PRODUCT_BUNDLE_IDENTIFIER}","configurationName":"Debug","provisioningStyle":1},{"bundleIdentifierFromInfoPlist":"${PRODUCT_BUNDLE_IDENTIFIER}","configurationName":"Profile","provisioningStyle":1},{"bundleIdentifierFromInfoPlist":"${PRODUCT_BUNDLE_IDENTIFIER}","configurationName":"Release","provisioningStyle":1}],"type":"standard"} \ No newline at end of file diff --git a/mih_ui/android/build/ios/XCBuildData/PIFCache/target/TARGET@v11_hash=6a019aebe92f33ef6d2d1a27354a274c-json b/mih_ui/android/build/ios/XCBuildData/PIFCache/target/TARGET@v11_hash=6a019aebe92f33ef6d2d1a27354a274c-json new file mode 100644 index 00000000..aff82f0d --- /dev/null +++ b/mih_ui/android/build/ios/XCBuildData/PIFCache/target/TARGET@v11_hash=6a019aebe92f33ef6d2d1a27354a274c-json @@ -0,0 +1 @@ +{"buildConfigurations":[{"baseConfigurationFileReference":"bfdfe7dc352907fc980b868725387e9870bacfaf6cde3d89a76fe4e932cc6788","buildSettings":{"CODE_SIGNING_ALLOWED":"NO","CODE_SIGNING_IDENTITY":"-","CODE_SIGNING_REQUIRED":"NO","CONFIGURATION_BUILD_DIR":"$(BUILD_DIR)/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME)/PromisesObjC","EXPANDED_CODE_SIGN_IDENTITY":"-","IBSC_MODULE":"FBLPromises","INFOPLIST_FILE":"Target Support Files/PromisesObjC/ResourceBundle-FBLPromises_Privacy-PromisesObjC-Info.plist","IPHONEOS_DEPLOYMENT_TARGET":"9.0","ONLY_ACTIVE_ARCH":"NO","PRODUCT_NAME":"FBLPromises_Privacy","SDKROOT":"iphoneos","SKIP_INSTALL":"YES","TARGETED_DEVICE_FAMILY":"1,2","WRAPPER_EXTENSION":"bundle"},"guid":"bfdfe7dc352907fc980b868725387e9882ebcc116e276dd1ad989affb5d3ef7d","name":"Debug"},{"baseConfigurationFileReference":"bfdfe7dc352907fc980b868725387e9889d254ad5933689bf555dbc41d2fcf23","buildSettings":{"CLANG_ENABLE_OBJC_WEAK":"NO","CODE_SIGNING_ALLOWED":"NO","CODE_SIGNING_IDENTITY":"-","CODE_SIGNING_REQUIRED":"NO","CONFIGURATION_BUILD_DIR":"$(BUILD_DIR)/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME)/PromisesObjC","EXPANDED_CODE_SIGN_IDENTITY":"-","IBSC_MODULE":"FBLPromises","INFOPLIST_FILE":"Target Support Files/PromisesObjC/ResourceBundle-FBLPromises_Privacy-PromisesObjC-Info.plist","IPHONEOS_DEPLOYMENT_TARGET":"9.0","PRODUCT_NAME":"FBLPromises_Privacy","SDKROOT":"iphoneos","SKIP_INSTALL":"YES","TARGETED_DEVICE_FAMILY":"1,2","VALIDATE_PRODUCT":"YES","WRAPPER_EXTENSION":"bundle"},"guid":"bfdfe7dc352907fc980b868725387e98a64357190e6edd0c5e9f3bc22405e92b","name":"Profile"},{"baseConfigurationFileReference":"bfdfe7dc352907fc980b868725387e9889d254ad5933689bf555dbc41d2fcf23","buildSettings":{"CODE_SIGNING_ALLOWED":"NO","CODE_SIGNING_IDENTITY":"-","CODE_SIGNING_REQUIRED":"NO","CONFIGURATION_BUILD_DIR":"$(BUILD_DIR)/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME)/PromisesObjC","EXPANDED_CODE_SIGN_IDENTITY":"-","IBSC_MODULE":"FBLPromises","INFOPLIST_FILE":"Target Support Files/PromisesObjC/ResourceBundle-FBLPromises_Privacy-PromisesObjC-Info.plist","IPHONEOS_DEPLOYMENT_TARGET":"9.0","PRODUCT_NAME":"FBLPromises_Privacy","SDKROOT":"iphoneos","SKIP_INSTALL":"YES","TARGETED_DEVICE_FAMILY":"1,2","WRAPPER_EXTENSION":"bundle"},"guid":"bfdfe7dc352907fc980b868725387e98ca432576fa85e32767419ce24b77c0b5","name":"Release"}],"buildPhases":[{"buildFiles":[],"guid":"bfdfe7dc352907fc980b868725387e982e1918b7fa2b325146a97b034178e3e4","type":"com.apple.buildphase.sources"},{"buildFiles":[],"guid":"bfdfe7dc352907fc980b868725387e98350677b5e933aa74a8e8a098f02cd745","type":"com.apple.buildphase.frameworks"},{"buildFiles":[{"fileReference":"bfdfe7dc352907fc980b868725387e988bb932e6bd0db8acade7ecd6b9275b8e","guid":"bfdfe7dc352907fc980b868725387e985285bd47a6b213d36b9324a2d71708fe"}],"guid":"bfdfe7dc352907fc980b868725387e98c859ec5b9321d011b44b2c81b6796274","type":"com.apple.buildphase.resources"}],"buildRules":[],"dependencies":[],"guid":"bfdfe7dc352907fc980b868725387e98ad53226b339581a6725de188f2c8f823","name":"PromisesObjC-FBLPromises_Privacy","productReference":{"guid":"bfdfe7dc352907fc980b868725387e9867729fb6a85d4c069a179d51db31501d","name":"FBLPromises_Privacy.bundle","type":"product"},"productTypeIdentifier":"com.apple.product-type.bundle","provisioningSourceData":[{"bundleIdentifierFromInfoPlist":"${PRODUCT_BUNDLE_IDENTIFIER}","configurationName":"Debug","provisioningStyle":0},{"bundleIdentifierFromInfoPlist":"${PRODUCT_BUNDLE_IDENTIFIER}","configurationName":"Profile","provisioningStyle":0},{"bundleIdentifierFromInfoPlist":"${PRODUCT_BUNDLE_IDENTIFIER}","configurationName":"Release","provisioningStyle":0}],"type":"standard"} \ No newline at end of file diff --git a/mih_ui/android/build/ios/XCBuildData/PIFCache/target/TARGET@v11_hash=6fb30a1c5b3e857d561640581873eb18-json b/mih_ui/android/build/ios/XCBuildData/PIFCache/target/TARGET@v11_hash=6fb30a1c5b3e857d561640581873eb18-json new file mode 100644 index 00000000..be242c11 --- /dev/null +++ b/mih_ui/android/build/ios/XCBuildData/PIFCache/target/TARGET@v11_hash=6fb30a1c5b3e857d561640581873eb18-json @@ -0,0 +1 @@ +{"buildConfigurations":[{"baseConfigurationFileReference":"bfdfe7dc352907fc980b868725387e981144f00ce89ffa4e0260914a9ffec527","buildSettings":{"CODE_SIGNING_ALLOWED":"NO","CODE_SIGNING_IDENTITY":"-","CODE_SIGNING_REQUIRED":"NO","CONFIGURATION_BUILD_DIR":"$(BUILD_DIR)/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME)/mobile_scanner","EXPANDED_CODE_SIGN_IDENTITY":"-","IBSC_MODULE":"mobile_scanner","INFOPLIST_FILE":"Target Support Files/mobile_scanner/ResourceBundle-mobile_scanner_privacy-mobile_scanner-Info.plist","IPHONEOS_DEPLOYMENT_TARGET":"12.0","ONLY_ACTIVE_ARCH":"NO","PRODUCT_NAME":"mobile_scanner_privacy","SDKROOT":"iphoneos","SKIP_INSTALL":"YES","TARGETED_DEVICE_FAMILY":"1,2","WRAPPER_EXTENSION":"bundle"},"guid":"bfdfe7dc352907fc980b868725387e987ca6d15dacb2edbffa5dfaba36c8868b","name":"Debug"},{"baseConfigurationFileReference":"bfdfe7dc352907fc980b868725387e98227c1f919eedf604acd47c56a9ef7ec4","buildSettings":{"CLANG_ENABLE_OBJC_WEAK":"NO","CODE_SIGNING_ALLOWED":"NO","CODE_SIGNING_IDENTITY":"-","CODE_SIGNING_REQUIRED":"NO","CONFIGURATION_BUILD_DIR":"$(BUILD_DIR)/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME)/mobile_scanner","EXPANDED_CODE_SIGN_IDENTITY":"-","IBSC_MODULE":"mobile_scanner","INFOPLIST_FILE":"Target Support Files/mobile_scanner/ResourceBundle-mobile_scanner_privacy-mobile_scanner-Info.plist","IPHONEOS_DEPLOYMENT_TARGET":"12.0","PRODUCT_NAME":"mobile_scanner_privacy","SDKROOT":"iphoneos","SKIP_INSTALL":"YES","TARGETED_DEVICE_FAMILY":"1,2","VALIDATE_PRODUCT":"YES","WRAPPER_EXTENSION":"bundle"},"guid":"bfdfe7dc352907fc980b868725387e98586a1fcadf5af13071122fe7ac9ac4c1","name":"Profile"},{"baseConfigurationFileReference":"bfdfe7dc352907fc980b868725387e98227c1f919eedf604acd47c56a9ef7ec4","buildSettings":{"CODE_SIGNING_ALLOWED":"NO","CODE_SIGNING_IDENTITY":"-","CODE_SIGNING_REQUIRED":"NO","CONFIGURATION_BUILD_DIR":"$(BUILD_DIR)/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME)/mobile_scanner","EXPANDED_CODE_SIGN_IDENTITY":"-","IBSC_MODULE":"mobile_scanner","INFOPLIST_FILE":"Target Support Files/mobile_scanner/ResourceBundle-mobile_scanner_privacy-mobile_scanner-Info.plist","IPHONEOS_DEPLOYMENT_TARGET":"12.0","PRODUCT_NAME":"mobile_scanner_privacy","SDKROOT":"iphoneos","SKIP_INSTALL":"YES","TARGETED_DEVICE_FAMILY":"1,2","WRAPPER_EXTENSION":"bundle"},"guid":"bfdfe7dc352907fc980b868725387e98f5cfd45e056c288fb2742720c62bd5fb","name":"Release"}],"buildPhases":[{"buildFiles":[],"guid":"bfdfe7dc352907fc980b868725387e985491ef18201883ef45ef3b9623bd22f4","type":"com.apple.buildphase.sources"},{"buildFiles":[],"guid":"bfdfe7dc352907fc980b868725387e984b2e91b156503ca4a3e6ffac1fa4543a","type":"com.apple.buildphase.frameworks"},{"buildFiles":[{"fileReference":"bfdfe7dc352907fc980b868725387e9824acc442c11de2383c5d3273c1b19a5c","guid":"bfdfe7dc352907fc980b868725387e98b7681edcde5c8b9f962bdc2bda94cb21"}],"guid":"bfdfe7dc352907fc980b868725387e9830dba8368ebf33ceb8a49e7244f6fea7","type":"com.apple.buildphase.resources"}],"buildRules":[],"dependencies":[],"guid":"bfdfe7dc352907fc980b868725387e98e39aae0c91f0bdebfb6ac42304942a79","name":"mobile_scanner-mobile_scanner_privacy","productReference":{"guid":"bfdfe7dc352907fc980b868725387e9810e5c44ed7d683e2ac7edeced31dad48","name":"mobile_scanner_privacy.bundle","type":"product"},"productTypeIdentifier":"com.apple.product-type.bundle","provisioningSourceData":[{"bundleIdentifierFromInfoPlist":"${PRODUCT_BUNDLE_IDENTIFIER}","configurationName":"Debug","provisioningStyle":0},{"bundleIdentifierFromInfoPlist":"${PRODUCT_BUNDLE_IDENTIFIER}","configurationName":"Profile","provisioningStyle":0},{"bundleIdentifierFromInfoPlist":"${PRODUCT_BUNDLE_IDENTIFIER}","configurationName":"Release","provisioningStyle":0}],"type":"standard"} \ No newline at end of file diff --git a/mih_ui/android/build/ios/XCBuildData/PIFCache/target/TARGET@v11_hash=754922e16fd2edb654ed183d0b9ffc4e-json b/mih_ui/android/build/ios/XCBuildData/PIFCache/target/TARGET@v11_hash=754922e16fd2edb654ed183d0b9ffc4e-json new file mode 100644 index 00000000..49e30564 --- /dev/null +++ b/mih_ui/android/build/ios/XCBuildData/PIFCache/target/TARGET@v11_hash=754922e16fd2edb654ed183d0b9ffc4e-json @@ -0,0 +1 @@ +{"buildConfigurations":[{"baseConfigurationFileReference":"bfdfe7dc352907fc980b868725387e98284ffc1eae91e8f4cf71938bb6a26644","buildSettings":{"CODE_SIGN_IDENTITY[sdk=appletvos*]":"","CODE_SIGN_IDENTITY[sdk=iphoneos*]":"","CODE_SIGN_IDENTITY[sdk=watchos*]":"","CURRENT_PROJECT_VERSION":"1","DEFINES_MODULE":"YES","DYLIB_COMPATIBILITY_VERSION":"1","DYLIB_CURRENT_VERSION":"1","DYLIB_INSTALL_NAME_BASE":"@rpath","ENABLE_MODULE_VERIFIER":"NO","ENABLE_USER_SCRIPT_SANDBOXING":"NO","GCC_PREFIX_HEADER":"Target Support Files/DKPhotoGallery/DKPhotoGallery-prefix.pch","GENERATE_INFOPLIST_FILE":"NO","INFOPLIST_FILE":"Target Support Files/DKPhotoGallery/DKPhotoGallery-Info.plist","INSTALL_PATH":"$(LOCAL_LIBRARY_DIR)/Frameworks","IPHONEOS_DEPLOYMENT_TARGET":"9.0","LD_RUNPATH_SEARCH_PATHS":"$(inherited) @executable_path/Frameworks @loader_path/Frameworks","MODULEMAP_FILE":"Target Support Files/DKPhotoGallery/DKPhotoGallery.modulemap","ONLY_ACTIVE_ARCH":"NO","PRODUCT_MODULE_NAME":"DKPhotoGallery","PRODUCT_NAME":"DKPhotoGallery","SDKROOT":"iphoneos","SKIP_INSTALL":"YES","SWIFT_ACTIVE_COMPILATION_CONDITIONS":"$(inherited) ","SWIFT_INSTALL_OBJC_HEADER":"YES","SWIFT_VERSION":"5","TARGETED_DEVICE_FAMILY":"1,2","VERSIONING_SYSTEM":"apple-generic","VERSION_INFO_PREFIX":""},"guid":"bfdfe7dc352907fc980b868725387e984fd6bf126523546705e45c4b13b53426","name":"Debug"},{"baseConfigurationFileReference":"bfdfe7dc352907fc980b868725387e986051e77661008cd9b8c42c9db89a8f91","buildSettings":{"CODE_SIGN_IDENTITY[sdk=appletvos*]":"","CODE_SIGN_IDENTITY[sdk=iphoneos*]":"","CODE_SIGN_IDENTITY[sdk=watchos*]":"","CURRENT_PROJECT_VERSION":"1","DEFINES_MODULE":"YES","DYLIB_COMPATIBILITY_VERSION":"1","DYLIB_CURRENT_VERSION":"1","DYLIB_INSTALL_NAME_BASE":"@rpath","ENABLE_MODULE_VERIFIER":"NO","ENABLE_USER_SCRIPT_SANDBOXING":"NO","GCC_PREFIX_HEADER":"Target Support Files/DKPhotoGallery/DKPhotoGallery-prefix.pch","GENERATE_INFOPLIST_FILE":"NO","INFOPLIST_FILE":"Target Support Files/DKPhotoGallery/DKPhotoGallery-Info.plist","INSTALL_PATH":"$(LOCAL_LIBRARY_DIR)/Frameworks","IPHONEOS_DEPLOYMENT_TARGET":"9.0","LD_RUNPATH_SEARCH_PATHS":"$(inherited) @executable_path/Frameworks @loader_path/Frameworks","MODULEMAP_FILE":"Target Support Files/DKPhotoGallery/DKPhotoGallery.modulemap","PRODUCT_MODULE_NAME":"DKPhotoGallery","PRODUCT_NAME":"DKPhotoGallery","SDKROOT":"iphoneos","SKIP_INSTALL":"YES","SWIFT_ACTIVE_COMPILATION_CONDITIONS":"$(inherited) ","SWIFT_INSTALL_OBJC_HEADER":"YES","SWIFT_VERSION":"5","TARGETED_DEVICE_FAMILY":"1,2","VALIDATE_PRODUCT":"YES","VERSIONING_SYSTEM":"apple-generic","VERSION_INFO_PREFIX":""},"guid":"bfdfe7dc352907fc980b868725387e98bf41a5be85b93608223ddc3a12714907","name":"Profile"},{"baseConfigurationFileReference":"bfdfe7dc352907fc980b868725387e986051e77661008cd9b8c42c9db89a8f91","buildSettings":{"CODE_SIGN_IDENTITY[sdk=appletvos*]":"","CODE_SIGN_IDENTITY[sdk=iphoneos*]":"","CODE_SIGN_IDENTITY[sdk=watchos*]":"","CURRENT_PROJECT_VERSION":"1","DEFINES_MODULE":"YES","DYLIB_COMPATIBILITY_VERSION":"1","DYLIB_CURRENT_VERSION":"1","DYLIB_INSTALL_NAME_BASE":"@rpath","ENABLE_MODULE_VERIFIER":"NO","ENABLE_USER_SCRIPT_SANDBOXING":"NO","GCC_PREFIX_HEADER":"Target Support Files/DKPhotoGallery/DKPhotoGallery-prefix.pch","GENERATE_INFOPLIST_FILE":"NO","INFOPLIST_FILE":"Target Support Files/DKPhotoGallery/DKPhotoGallery-Info.plist","INSTALL_PATH":"$(LOCAL_LIBRARY_DIR)/Frameworks","IPHONEOS_DEPLOYMENT_TARGET":"9.0","LD_RUNPATH_SEARCH_PATHS":"$(inherited) @executable_path/Frameworks @loader_path/Frameworks","MODULEMAP_FILE":"Target Support Files/DKPhotoGallery/DKPhotoGallery.modulemap","PRODUCT_MODULE_NAME":"DKPhotoGallery","PRODUCT_NAME":"DKPhotoGallery","SDKROOT":"iphoneos","SKIP_INSTALL":"YES","SWIFT_ACTIVE_COMPILATION_CONDITIONS":"$(inherited) ","SWIFT_INSTALL_OBJC_HEADER":"YES","SWIFT_VERSION":"5","TARGETED_DEVICE_FAMILY":"1,2","VALIDATE_PRODUCT":"YES","VERSIONING_SYSTEM":"apple-generic","VERSION_INFO_PREFIX":""},"guid":"bfdfe7dc352907fc980b868725387e981525d6ed0a0c85267c380434fa96d27e","name":"Release"}],"buildPhases":[{"buildFiles":[{"fileReference":"bfdfe7dc352907fc980b868725387e983e0ca2b7d01325e2be94eb703cc8834c","guid":"bfdfe7dc352907fc980b868725387e98254a304f0731e11cd0b343a2e31c86e6","headerVisibility":"public"}],"guid":"bfdfe7dc352907fc980b868725387e98709232bd94ed46c6c4b58658236d688a","type":"com.apple.buildphase.headers"},{"buildFiles":[{"fileReference":"bfdfe7dc352907fc980b868725387e98eb71b1871db14bddb34f3b6dc48f5d95","guid":"bfdfe7dc352907fc980b868725387e98f5c96206d6338c4051d09964c3cf3573"},{"fileReference":"bfdfe7dc352907fc980b868725387e983ba539f64005bde8f3a4c989c13457f6","guid":"bfdfe7dc352907fc980b868725387e986b5aa154a8d2690ce44988e33482854f"},{"fileReference":"bfdfe7dc352907fc980b868725387e98dfa1e27846c545f78585767f808c0290","guid":"bfdfe7dc352907fc980b868725387e98c68fe379778449f0e16a1d133a264b26"},{"fileReference":"bfdfe7dc352907fc980b868725387e98925864836a0b949ba0125aac269b941d","guid":"bfdfe7dc352907fc980b868725387e98045cb616019948d44191e02a240f9d20"},{"fileReference":"bfdfe7dc352907fc980b868725387e98eb4d56e39dcd3c8f709fb6323e177298","guid":"bfdfe7dc352907fc980b868725387e987a953dce127f9840d8a2cc412860d83b"},{"fileReference":"bfdfe7dc352907fc980b868725387e98ed6773dc19e610851f0ce6e641b9b3b5","guid":"bfdfe7dc352907fc980b868725387e98f89269599fe4f19e606eb4070445e7b2"},{"fileReference":"bfdfe7dc352907fc980b868725387e98df24cc6698371aecc8afd7cf313cac20","guid":"bfdfe7dc352907fc980b868725387e98da6500675b040e6775d540a5bab5b572"},{"fileReference":"bfdfe7dc352907fc980b868725387e987ad73074b99776b1116f9c2856ac5552","guid":"bfdfe7dc352907fc980b868725387e9897bae1dd898b05af1463d3ecdcecda41"},{"fileReference":"bfdfe7dc352907fc980b868725387e98d0cc75a3c72b5f298ace8a3bf41f9195","guid":"bfdfe7dc352907fc980b868725387e989d2f32864c657dc26cf10d670249fc3d"},{"fileReference":"bfdfe7dc352907fc980b868725387e9828fefd0d3317647420ee3f37c82ec4a2","guid":"bfdfe7dc352907fc980b868725387e989fe1d7170122f47051812ad8c6ae3792"},{"fileReference":"bfdfe7dc352907fc980b868725387e98e4d9272c60986ce5118264cb92283548","guid":"bfdfe7dc352907fc980b868725387e98fd32b6f93e55ad512c42cb46ac4b8872"},{"fileReference":"bfdfe7dc352907fc980b868725387e98cb2b24e4cd6fc396c5a1d3e43868d95f","guid":"bfdfe7dc352907fc980b868725387e986da18817b4c71943d2f5c337ff100c33"},{"fileReference":"bfdfe7dc352907fc980b868725387e9843f4159faf9603bb660cb95efdf095b3","guid":"bfdfe7dc352907fc980b868725387e98492d33fafbc9f57438c4e02e2ec12609"},{"fileReference":"bfdfe7dc352907fc980b868725387e98932cc722dd747e8adbcbd5e18fd5fb02","guid":"bfdfe7dc352907fc980b868725387e98f8bad23065486a2dbda0de79b44eec75"},{"fileReference":"bfdfe7dc352907fc980b868725387e9828fa2d719018a25fe1fb3c6ebb4ff951","guid":"bfdfe7dc352907fc980b868725387e9814d586ebcc0539670dfd5cd996c94e82"},{"fileReference":"bfdfe7dc352907fc980b868725387e98f64f20afd463bd999a742dc203b790bd","guid":"bfdfe7dc352907fc980b868725387e986346068c5a447a992edad6b75316c457"},{"fileReference":"bfdfe7dc352907fc980b868725387e98358107a82ec5ef5b395911951930fb60","guid":"bfdfe7dc352907fc980b868725387e98fef1c2ef12d6b0bded24819fc7c58472"},{"fileReference":"bfdfe7dc352907fc980b868725387e983e59331f8189f5e055881857d7ab4a95","guid":"bfdfe7dc352907fc980b868725387e98bab5ddbc05356a069f4e470f8aea8b87"},{"fileReference":"bfdfe7dc352907fc980b868725387e9827f7ef5f3ea80d79b40d7a4ac9588235","guid":"bfdfe7dc352907fc980b868725387e9863ca86f5b503ceb7a5d87db111cc8f04"},{"fileReference":"bfdfe7dc352907fc980b868725387e9894ebedd554142c9762ffe051143f601a","guid":"bfdfe7dc352907fc980b868725387e983ce7d35149cc5facd0473b4712cbce3f"},{"fileReference":"bfdfe7dc352907fc980b868725387e9824f019a6799511e6df48ed4fa1051373","guid":"bfdfe7dc352907fc980b868725387e98b5497ac3958c22a65eb3c86f1daf3fe0"},{"fileReference":"bfdfe7dc352907fc980b868725387e98b77caf2d5e3738f780e1b59e29eabe0d","guid":"bfdfe7dc352907fc980b868725387e98477ed162930cec3b912fe544897ef035"},{"fileReference":"bfdfe7dc352907fc980b868725387e9857c00b0d4565e7a6a12ffd669506d74d","guid":"bfdfe7dc352907fc980b868725387e9841d0ed0efea975401d3aa5d9f530fbd8"},{"fileReference":"bfdfe7dc352907fc980b868725387e9817c7f07dc865de8893a20abc3a232f83","guid":"bfdfe7dc352907fc980b868725387e98cc18f173b7113016f909093cbc63bb7c"},{"fileReference":"bfdfe7dc352907fc980b868725387e98bd8325023686436108c1116ee7b5d7bd","guid":"bfdfe7dc352907fc980b868725387e9843453298d4b03bcad3fd4528b637e570"},{"fileReference":"bfdfe7dc352907fc980b868725387e98fef5a0935c29cb454c05b9981615539b","guid":"bfdfe7dc352907fc980b868725387e9848c45ef7d2c19e76feb9865d577cb26a"},{"fileReference":"bfdfe7dc352907fc980b868725387e98941a4bd773c66feec3ba05f2f39973b3","guid":"bfdfe7dc352907fc980b868725387e987bca317c79609fa305f2dc1e4cff2575"}],"guid":"bfdfe7dc352907fc980b868725387e985c13f2a4c25a19bba6101babaa9a3d78","type":"com.apple.buildphase.sources"},{"buildFiles":[{"fileReference":"bfdfe7dc352907fc980b868725387e98d6bdeaa5b175cb64de0845531dd3a07a","guid":"bfdfe7dc352907fc980b868725387e98c7eb66961acafb59eeb4d5a894b9fd14"},{"fileReference":"bfdfe7dc352907fc980b868725387e98f85abfcd8b98daa4c08612ae63641e69","guid":"bfdfe7dc352907fc980b868725387e983046d4487d4cc63c3334c3401796094a"},{"fileReference":"bfdfe7dc352907fc980b868725387e98b14af7c49882340ad551cb13b0a1e06d","guid":"bfdfe7dc352907fc980b868725387e98a20d7047c4deac86c262af51bb186b9a"},{"fileReference":"bfdfe7dc352907fc980b868725387e98fc74d0fed09821b42c8c83fca08fddb2","guid":"bfdfe7dc352907fc980b868725387e98b1f0cd87cbcf90ebbbc03aa9fe580f15"},{"fileReference":"bfdfe7dc352907fc980b868725387e98f2f44ab0d0f0ce315b53d31757eb8db6","guid":"bfdfe7dc352907fc980b868725387e98b0c99aca0a4ba07d16552dce7e0a54e5"}],"guid":"bfdfe7dc352907fc980b868725387e984237cf79a5e3b2c3c7fca87430ca3d79","type":"com.apple.buildphase.frameworks"},{"buildFiles":[{"guid":"bfdfe7dc352907fc980b868725387e984cefd7a780b84a7e881deeedb07b972f","targetReference":"bfdfe7dc352907fc980b868725387e98d3f65728b12dd217475d1283ee417937"}],"guid":"bfdfe7dc352907fc980b868725387e98fafe09780663380b2b1c80d8ed698c4f","type":"com.apple.buildphase.resources"}],"buildRules":[],"dependencies":[{"guid":"bfdfe7dc352907fc980b868725387e98d3f65728b12dd217475d1283ee417937","name":"DKPhotoGallery-DKPhotoGallery"},{"guid":"bfdfe7dc352907fc980b868725387e98c46180aea4e87057640961e6db37df0d","name":"SDWebImage"},{"guid":"bfdfe7dc352907fc980b868725387e9872eabefc63c14dfe52fb0c95ad90294e","name":"SwiftyGif"}],"guid":"bfdfe7dc352907fc980b868725387e989d0a1858a86fd6e6731ed20f88a1e515","name":"DKPhotoGallery","predominantSourceCodeLanguage":"Xcode.SourceCodeLanguage.Swift","productReference":{"guid":"bfdfe7dc352907fc980b868725387e986e90c628ccd44af657bee5ff4af2f692","name":"DKPhotoGallery.framework","type":"product"},"productTypeIdentifier":"com.apple.product-type.framework","provisioningSourceData":[{"bundleIdentifierFromInfoPlist":"${PRODUCT_BUNDLE_IDENTIFIER}","configurationName":"Debug","provisioningStyle":1},{"bundleIdentifierFromInfoPlist":"${PRODUCT_BUNDLE_IDENTIFIER}","configurationName":"Profile","provisioningStyle":1},{"bundleIdentifierFromInfoPlist":"${PRODUCT_BUNDLE_IDENTIFIER}","configurationName":"Release","provisioningStyle":1}],"type":"standard"} \ No newline at end of file diff --git a/mih_ui/android/build/ios/XCBuildData/PIFCache/target/TARGET@v11_hash=76c81320e671cd52e5aa73c6af313230-json b/mih_ui/android/build/ios/XCBuildData/PIFCache/target/TARGET@v11_hash=76c81320e671cd52e5aa73c6af313230-json new file mode 100644 index 00000000..3db9f338 --- /dev/null +++ b/mih_ui/android/build/ios/XCBuildData/PIFCache/target/TARGET@v11_hash=76c81320e671cd52e5aa73c6af313230-json @@ -0,0 +1 @@ +{"buildConfigurations":[{"baseConfigurationFileReference":"bfdfe7dc352907fc980b868725387e98e82dd82aa81c61839879590f112b6e6d","buildSettings":{"CLANG_ENABLE_OBJC_WEAK":"NO","CODE_SIGN_IDENTITY[sdk=appletvos*]":"","CODE_SIGN_IDENTITY[sdk=iphoneos*]":"","CODE_SIGN_IDENTITY[sdk=watchos*]":"","CURRENT_PROJECT_VERSION":"1","DEFINES_MODULE":"YES","DYLIB_COMPATIBILITY_VERSION":"1","DYLIB_CURRENT_VERSION":"1","DYLIB_INSTALL_NAME_BASE":"@rpath","ENABLE_MODULE_VERIFIER":"NO","ENABLE_USER_SCRIPT_SANDBOXING":"NO","GCC_PREFIX_HEADER":"Target Support Files/FirebaseAuthInterop/FirebaseAuthInterop-prefix.pch","GENERATE_INFOPLIST_FILE":"NO","INFOPLIST_FILE":"Target Support Files/FirebaseAuthInterop/FirebaseAuthInterop-Info.plist","INSTALL_PATH":"$(LOCAL_LIBRARY_DIR)/Frameworks","IPHONEOS_DEPLOYMENT_TARGET":"15.0","LD_RUNPATH_SEARCH_PATHS":"$(inherited) @executable_path/Frameworks @loader_path/Frameworks","MODULEMAP_FILE":"Target Support Files/FirebaseAuthInterop/FirebaseAuthInterop.modulemap","ONLY_ACTIVE_ARCH":"NO","PRODUCT_MODULE_NAME":"FirebaseAuthInterop","PRODUCT_NAME":"FirebaseAuthInterop","SDKROOT":"iphoneos","SKIP_INSTALL":"YES","SWIFT_ACTIVE_COMPILATION_CONDITIONS":"$(inherited) ","SWIFT_INSTALL_OBJC_HEADER":"YES","SWIFT_VERSION":"5.0","TARGETED_DEVICE_FAMILY":"1,2","VERSIONING_SYSTEM":"apple-generic","VERSION_INFO_PREFIX":""},"guid":"bfdfe7dc352907fc980b868725387e988e78bf6e1454790ad3bd16d1b518e416","name":"Debug"},{"baseConfigurationFileReference":"bfdfe7dc352907fc980b868725387e981506eb316e3225b6c1cb84ca6348d18b","buildSettings":{"CLANG_ENABLE_OBJC_WEAK":"NO","CODE_SIGN_IDENTITY[sdk=appletvos*]":"","CODE_SIGN_IDENTITY[sdk=iphoneos*]":"","CODE_SIGN_IDENTITY[sdk=watchos*]":"","CURRENT_PROJECT_VERSION":"1","DEFINES_MODULE":"YES","DYLIB_COMPATIBILITY_VERSION":"1","DYLIB_CURRENT_VERSION":"1","DYLIB_INSTALL_NAME_BASE":"@rpath","ENABLE_MODULE_VERIFIER":"NO","ENABLE_USER_SCRIPT_SANDBOXING":"NO","GCC_PREFIX_HEADER":"Target Support Files/FirebaseAuthInterop/FirebaseAuthInterop-prefix.pch","GENERATE_INFOPLIST_FILE":"NO","INFOPLIST_FILE":"Target Support Files/FirebaseAuthInterop/FirebaseAuthInterop-Info.plist","INSTALL_PATH":"$(LOCAL_LIBRARY_DIR)/Frameworks","IPHONEOS_DEPLOYMENT_TARGET":"15.0","LD_RUNPATH_SEARCH_PATHS":"$(inherited) @executable_path/Frameworks @loader_path/Frameworks","MODULEMAP_FILE":"Target Support Files/FirebaseAuthInterop/FirebaseAuthInterop.modulemap","PRODUCT_MODULE_NAME":"FirebaseAuthInterop","PRODUCT_NAME":"FirebaseAuthInterop","SDKROOT":"iphoneos","SKIP_INSTALL":"YES","SWIFT_ACTIVE_COMPILATION_CONDITIONS":"$(inherited) ","SWIFT_INSTALL_OBJC_HEADER":"YES","SWIFT_VERSION":"5.0","TARGETED_DEVICE_FAMILY":"1,2","VALIDATE_PRODUCT":"YES","VERSIONING_SYSTEM":"apple-generic","VERSION_INFO_PREFIX":""},"guid":"bfdfe7dc352907fc980b868725387e988b946df69e4bdc33893dcb75ee5f8d14","name":"Profile"},{"baseConfigurationFileReference":"bfdfe7dc352907fc980b868725387e981506eb316e3225b6c1cb84ca6348d18b","buildSettings":{"CLANG_ENABLE_OBJC_WEAK":"NO","CODE_SIGN_IDENTITY[sdk=appletvos*]":"","CODE_SIGN_IDENTITY[sdk=iphoneos*]":"","CODE_SIGN_IDENTITY[sdk=watchos*]":"","CURRENT_PROJECT_VERSION":"1","DEFINES_MODULE":"YES","DYLIB_COMPATIBILITY_VERSION":"1","DYLIB_CURRENT_VERSION":"1","DYLIB_INSTALL_NAME_BASE":"@rpath","ENABLE_MODULE_VERIFIER":"NO","ENABLE_USER_SCRIPT_SANDBOXING":"NO","GCC_PREFIX_HEADER":"Target Support Files/FirebaseAuthInterop/FirebaseAuthInterop-prefix.pch","GENERATE_INFOPLIST_FILE":"NO","INFOPLIST_FILE":"Target Support Files/FirebaseAuthInterop/FirebaseAuthInterop-Info.plist","INSTALL_PATH":"$(LOCAL_LIBRARY_DIR)/Frameworks","IPHONEOS_DEPLOYMENT_TARGET":"15.0","LD_RUNPATH_SEARCH_PATHS":"$(inherited) @executable_path/Frameworks @loader_path/Frameworks","MODULEMAP_FILE":"Target Support Files/FirebaseAuthInterop/FirebaseAuthInterop.modulemap","PRODUCT_MODULE_NAME":"FirebaseAuthInterop","PRODUCT_NAME":"FirebaseAuthInterop","SDKROOT":"iphoneos","SKIP_INSTALL":"YES","SWIFT_ACTIVE_COMPILATION_CONDITIONS":"$(inherited) ","SWIFT_INSTALL_OBJC_HEADER":"YES","SWIFT_VERSION":"5.0","TARGETED_DEVICE_FAMILY":"1,2","VALIDATE_PRODUCT":"YES","VERSIONING_SYSTEM":"apple-generic","VERSION_INFO_PREFIX":""},"guid":"bfdfe7dc352907fc980b868725387e9877422654943191a245992fa9a4b2231c","name":"Release"}],"buildPhases":[{"buildFiles":[{"fileReference":"bfdfe7dc352907fc980b868725387e98c1695f36a2224a2b1d7774e6d77eee60","guid":"bfdfe7dc352907fc980b868725387e98edcd65abd7ddb2fe99bb5a5e1f193eaa","headerVisibility":"public"},{"fileReference":"bfdfe7dc352907fc980b868725387e98b2956b9f464800c9411916e4fbb27729","guid":"bfdfe7dc352907fc980b868725387e9814cc125ce9f97f3e7d283e741a8dfac2","headerVisibility":"public"}],"guid":"bfdfe7dc352907fc980b868725387e98bfcd54bbc5c233c64cac055827da59cb","type":"com.apple.buildphase.headers"},{"buildFiles":[{"fileReference":"bfdfe7dc352907fc980b868725387e985df5bc504ec3263f252a622a8dde0a2c","guid":"bfdfe7dc352907fc980b868725387e98d1cbcc26dc1085cbeb87b4a20df3035e"},{"fileReference":"bfdfe7dc352907fc980b868725387e989fcb859732612135cbcb3779e0ded359","guid":"bfdfe7dc352907fc980b868725387e9826584bd9c0309291f44cc573a711d6ac"}],"guid":"bfdfe7dc352907fc980b868725387e980ae1ebc5a01f5d4de3e3fa4d87b1039b","type":"com.apple.buildphase.sources"},{"buildFiles":[{"fileReference":"bfdfe7dc352907fc980b868725387e98b14af7c49882340ad551cb13b0a1e06d","guid":"bfdfe7dc352907fc980b868725387e9827a93cd0d450b6fd2c612ac23ec5306d"}],"guid":"bfdfe7dc352907fc980b868725387e9817a9666a9a48ad1066eb299a4eb4bbf8","type":"com.apple.buildphase.frameworks"},{"buildFiles":[],"guid":"bfdfe7dc352907fc980b868725387e98eba1f1dccfb9faec6cb1f1617e6d5356","type":"com.apple.buildphase.resources"}],"buildRules":[],"dependencies":[],"guid":"bfdfe7dc352907fc980b868725387e988e935c81efc4686179f554b8fe37864a","name":"FirebaseAuthInterop","predominantSourceCodeLanguage":"Xcode.SourceCodeLanguage.Objective-C","productReference":{"guid":"bfdfe7dc352907fc980b868725387e98d45aaf0c2408f87c98fda98709cee1e1","name":"FirebaseAuthInterop.framework","type":"product"},"productTypeIdentifier":"com.apple.product-type.framework","provisioningSourceData":[{"bundleIdentifierFromInfoPlist":"${PRODUCT_BUNDLE_IDENTIFIER}","configurationName":"Debug","provisioningStyle":1},{"bundleIdentifierFromInfoPlist":"${PRODUCT_BUNDLE_IDENTIFIER}","configurationName":"Profile","provisioningStyle":1},{"bundleIdentifierFromInfoPlist":"${PRODUCT_BUNDLE_IDENTIFIER}","configurationName":"Release","provisioningStyle":1}],"type":"standard"} \ No newline at end of file diff --git a/mih_ui/android/build/ios/XCBuildData/PIFCache/target/TARGET@v11_hash=7aa8351d9b24919942e9946725aa9a4e-json b/mih_ui/android/build/ios/XCBuildData/PIFCache/target/TARGET@v11_hash=7aa8351d9b24919942e9946725aa9a4e-json new file mode 100644 index 00000000..ffae708f --- /dev/null +++ b/mih_ui/android/build/ios/XCBuildData/PIFCache/target/TARGET@v11_hash=7aa8351d9b24919942e9946725aa9a4e-json @@ -0,0 +1 @@ +{"buildConfigurations":[{"baseConfigurationFileReference":"bfdfe7dc352907fc980b868725387e98bbdee8c1686e5d6c3f4956eedcdb3dac","buildSettings":{"CODE_SIGNING_ALLOWED":"NO","CODE_SIGNING_IDENTITY":"-","CODE_SIGNING_REQUIRED":"NO","CONFIGURATION_BUILD_DIR":"$(BUILD_DIR)/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME)/FirebaseAuth","EXPANDED_CODE_SIGN_IDENTITY":"-","IBSC_MODULE":"FirebaseAuth","INFOPLIST_FILE":"Target Support Files/FirebaseAuth/ResourceBundle-FirebaseAuth_Privacy-FirebaseAuth-Info.plist","IPHONEOS_DEPLOYMENT_TARGET":"15.0","ONLY_ACTIVE_ARCH":"NO","PRODUCT_NAME":"FirebaseAuth_Privacy","SDKROOT":"iphoneos","SKIP_INSTALL":"YES","TARGETED_DEVICE_FAMILY":"1,2","WRAPPER_EXTENSION":"bundle"},"guid":"bfdfe7dc352907fc980b868725387e98a14bfd822970e627264b2c4710e53f92","name":"Debug"},{"baseConfigurationFileReference":"bfdfe7dc352907fc980b868725387e9824122a566c18888ab83e78b3078e6f80","buildSettings":{"CLANG_ENABLE_OBJC_WEAK":"NO","CODE_SIGNING_ALLOWED":"NO","CODE_SIGNING_IDENTITY":"-","CODE_SIGNING_REQUIRED":"NO","CONFIGURATION_BUILD_DIR":"$(BUILD_DIR)/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME)/FirebaseAuth","EXPANDED_CODE_SIGN_IDENTITY":"-","IBSC_MODULE":"FirebaseAuth","INFOPLIST_FILE":"Target Support Files/FirebaseAuth/ResourceBundle-FirebaseAuth_Privacy-FirebaseAuth-Info.plist","IPHONEOS_DEPLOYMENT_TARGET":"15.0","PRODUCT_NAME":"FirebaseAuth_Privacy","SDKROOT":"iphoneos","SKIP_INSTALL":"YES","TARGETED_DEVICE_FAMILY":"1,2","VALIDATE_PRODUCT":"YES","WRAPPER_EXTENSION":"bundle"},"guid":"bfdfe7dc352907fc980b868725387e982d04abd2177b79716ef450658cf051e4","name":"Profile"},{"baseConfigurationFileReference":"bfdfe7dc352907fc980b868725387e9824122a566c18888ab83e78b3078e6f80","buildSettings":{"CODE_SIGNING_ALLOWED":"NO","CODE_SIGNING_IDENTITY":"-","CODE_SIGNING_REQUIRED":"NO","CONFIGURATION_BUILD_DIR":"$(BUILD_DIR)/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME)/FirebaseAuth","EXPANDED_CODE_SIGN_IDENTITY":"-","IBSC_MODULE":"FirebaseAuth","INFOPLIST_FILE":"Target Support Files/FirebaseAuth/ResourceBundle-FirebaseAuth_Privacy-FirebaseAuth-Info.plist","IPHONEOS_DEPLOYMENT_TARGET":"15.0","PRODUCT_NAME":"FirebaseAuth_Privacy","SDKROOT":"iphoneos","SKIP_INSTALL":"YES","TARGETED_DEVICE_FAMILY":"1,2","WRAPPER_EXTENSION":"bundle"},"guid":"bfdfe7dc352907fc980b868725387e98f90e3c8130f9fc37aade41073aede449","name":"Release"}],"buildPhases":[{"buildFiles":[],"guid":"bfdfe7dc352907fc980b868725387e9829107bc009e2e275a01cbdf55e52b1f4","type":"com.apple.buildphase.sources"},{"buildFiles":[],"guid":"bfdfe7dc352907fc980b868725387e987db8c92d8826979e8ed77d200b8293f9","type":"com.apple.buildphase.frameworks"},{"buildFiles":[{"fileReference":"bfdfe7dc352907fc980b868725387e983b9007b1d0935aee2ec307ea04061f0e","guid":"bfdfe7dc352907fc980b868725387e98b0b2221c18cfddd4899a12e6ad61f990"}],"guid":"bfdfe7dc352907fc980b868725387e982e8fd7abebd050f9528a84ecd19ef3ed","type":"com.apple.buildphase.resources"}],"buildRules":[],"dependencies":[],"guid":"bfdfe7dc352907fc980b868725387e98205354208adeebae46380f8f82956de4","name":"FirebaseAuth-FirebaseAuth_Privacy","productReference":{"guid":"bfdfe7dc352907fc980b868725387e9870db214ed2dafc4df91a7caff7044acf","name":"FirebaseAuth_Privacy.bundle","type":"product"},"productTypeIdentifier":"com.apple.product-type.bundle","provisioningSourceData":[{"bundleIdentifierFromInfoPlist":"${PRODUCT_BUNDLE_IDENTIFIER}","configurationName":"Debug","provisioningStyle":0},{"bundleIdentifierFromInfoPlist":"${PRODUCT_BUNDLE_IDENTIFIER}","configurationName":"Profile","provisioningStyle":0},{"bundleIdentifierFromInfoPlist":"${PRODUCT_BUNDLE_IDENTIFIER}","configurationName":"Release","provisioningStyle":0}],"type":"standard"} \ No newline at end of file diff --git a/mih_ui/android/build/ios/XCBuildData/PIFCache/target/TARGET@v11_hash=7b3186407410bb111b40b5143ff956ed-json b/mih_ui/android/build/ios/XCBuildData/PIFCache/target/TARGET@v11_hash=7b3186407410bb111b40b5143ff956ed-json new file mode 100644 index 00000000..1b289dee --- /dev/null +++ b/mih_ui/android/build/ios/XCBuildData/PIFCache/target/TARGET@v11_hash=7b3186407410bb111b40b5143ff956ed-json @@ -0,0 +1 @@ +{"buildConfigurations":[{"baseConfigurationFileReference":"bfdfe7dc352907fc980b868725387e9858f3b516df641443530da1bc57fe9cb2","buildSettings":{"CODE_SIGN_IDENTITY[sdk=appletvos*]":"","CODE_SIGN_IDENTITY[sdk=iphoneos*]":"","CODE_SIGN_IDENTITY[sdk=watchos*]":"","CURRENT_PROJECT_VERSION":"1","DEFINES_MODULE":"YES","DYLIB_COMPATIBILITY_VERSION":"1","DYLIB_CURRENT_VERSION":"1","DYLIB_INSTALL_NAME_BASE":"@rpath","ENABLE_MODULE_VERIFIER":"NO","ENABLE_USER_SCRIPT_SANDBOXING":"NO","GCC_PREFIX_HEADER":"Target Support Files/SwiftyGif/SwiftyGif-prefix.pch","GENERATE_INFOPLIST_FILE":"NO","INFOPLIST_FILE":"Target Support Files/SwiftyGif/SwiftyGif-Info.plist","INSTALL_PATH":"$(LOCAL_LIBRARY_DIR)/Frameworks","IPHONEOS_DEPLOYMENT_TARGET":"9.0","LD_RUNPATH_SEARCH_PATHS":"$(inherited) @executable_path/Frameworks @loader_path/Frameworks","MODULEMAP_FILE":"Target Support Files/SwiftyGif/SwiftyGif.modulemap","ONLY_ACTIVE_ARCH":"NO","PRODUCT_MODULE_NAME":"SwiftyGif","PRODUCT_NAME":"SwiftyGif","SDKROOT":"iphoneos","SKIP_INSTALL":"YES","SWIFT_ACTIVE_COMPILATION_CONDITIONS":"$(inherited) ","SWIFT_INSTALL_OBJC_HEADER":"YES","SWIFT_VERSION":"5.0","TARGETED_DEVICE_FAMILY":"1,2","VERSIONING_SYSTEM":"apple-generic","VERSION_INFO_PREFIX":""},"guid":"bfdfe7dc352907fc980b868725387e983f3111e043ea26aa3178412b70517277","name":"Debug"},{"baseConfigurationFileReference":"bfdfe7dc352907fc980b868725387e98ee297b6d0e4054f62dc3e42830b40034","buildSettings":{"CODE_SIGN_IDENTITY[sdk=appletvos*]":"","CODE_SIGN_IDENTITY[sdk=iphoneos*]":"","CODE_SIGN_IDENTITY[sdk=watchos*]":"","CURRENT_PROJECT_VERSION":"1","DEFINES_MODULE":"YES","DYLIB_COMPATIBILITY_VERSION":"1","DYLIB_CURRENT_VERSION":"1","DYLIB_INSTALL_NAME_BASE":"@rpath","ENABLE_MODULE_VERIFIER":"NO","ENABLE_USER_SCRIPT_SANDBOXING":"NO","GCC_PREFIX_HEADER":"Target Support Files/SwiftyGif/SwiftyGif-prefix.pch","GENERATE_INFOPLIST_FILE":"NO","INFOPLIST_FILE":"Target Support Files/SwiftyGif/SwiftyGif-Info.plist","INSTALL_PATH":"$(LOCAL_LIBRARY_DIR)/Frameworks","IPHONEOS_DEPLOYMENT_TARGET":"9.0","LD_RUNPATH_SEARCH_PATHS":"$(inherited) @executable_path/Frameworks @loader_path/Frameworks","MODULEMAP_FILE":"Target Support Files/SwiftyGif/SwiftyGif.modulemap","PRODUCT_MODULE_NAME":"SwiftyGif","PRODUCT_NAME":"SwiftyGif","SDKROOT":"iphoneos","SKIP_INSTALL":"YES","SWIFT_ACTIVE_COMPILATION_CONDITIONS":"$(inherited) ","SWIFT_INSTALL_OBJC_HEADER":"YES","SWIFT_VERSION":"5.0","TARGETED_DEVICE_FAMILY":"1,2","VALIDATE_PRODUCT":"YES","VERSIONING_SYSTEM":"apple-generic","VERSION_INFO_PREFIX":""},"guid":"bfdfe7dc352907fc980b868725387e98627c449aba205ad63a83e23ad4ef185f","name":"Profile"},{"baseConfigurationFileReference":"bfdfe7dc352907fc980b868725387e98ee297b6d0e4054f62dc3e42830b40034","buildSettings":{"CODE_SIGN_IDENTITY[sdk=appletvos*]":"","CODE_SIGN_IDENTITY[sdk=iphoneos*]":"","CODE_SIGN_IDENTITY[sdk=watchos*]":"","CURRENT_PROJECT_VERSION":"1","DEFINES_MODULE":"YES","DYLIB_COMPATIBILITY_VERSION":"1","DYLIB_CURRENT_VERSION":"1","DYLIB_INSTALL_NAME_BASE":"@rpath","ENABLE_MODULE_VERIFIER":"NO","ENABLE_USER_SCRIPT_SANDBOXING":"NO","GCC_PREFIX_HEADER":"Target Support Files/SwiftyGif/SwiftyGif-prefix.pch","GENERATE_INFOPLIST_FILE":"NO","INFOPLIST_FILE":"Target Support Files/SwiftyGif/SwiftyGif-Info.plist","INSTALL_PATH":"$(LOCAL_LIBRARY_DIR)/Frameworks","IPHONEOS_DEPLOYMENT_TARGET":"9.0","LD_RUNPATH_SEARCH_PATHS":"$(inherited) @executable_path/Frameworks @loader_path/Frameworks","MODULEMAP_FILE":"Target Support Files/SwiftyGif/SwiftyGif.modulemap","PRODUCT_MODULE_NAME":"SwiftyGif","PRODUCT_NAME":"SwiftyGif","SDKROOT":"iphoneos","SKIP_INSTALL":"YES","SWIFT_ACTIVE_COMPILATION_CONDITIONS":"$(inherited) ","SWIFT_INSTALL_OBJC_HEADER":"YES","SWIFT_VERSION":"5.0","TARGETED_DEVICE_FAMILY":"1,2","VALIDATE_PRODUCT":"YES","VERSIONING_SYSTEM":"apple-generic","VERSION_INFO_PREFIX":""},"guid":"bfdfe7dc352907fc980b868725387e98a47389569eb28721728af443ffa36eed","name":"Release"}],"buildPhases":[{"buildFiles":[{"fileReference":"bfdfe7dc352907fc980b868725387e98289a02129447d57ed9106425e09cb6a0","guid":"bfdfe7dc352907fc980b868725387e989b9f46d8beacddaab23bd9fa751bb635","headerVisibility":"public"},{"fileReference":"bfdfe7dc352907fc980b868725387e98720d63afa192c3198e49d0e658ad9559","guid":"bfdfe7dc352907fc980b868725387e980711b42e827d9408219256054495b663","headerVisibility":"public"}],"guid":"bfdfe7dc352907fc980b868725387e984796310a5317db7ef36beaf9b5c29ea1","type":"com.apple.buildphase.headers"},{"buildFiles":[{"fileReference":"bfdfe7dc352907fc980b868725387e98e40e39827e8180631013036cb2dfa2fa","guid":"bfdfe7dc352907fc980b868725387e988308d65fcc5e4e958401a8e6d8f8c90f"},{"fileReference":"bfdfe7dc352907fc980b868725387e98319254f7e2beed7375a445c04910195a","guid":"bfdfe7dc352907fc980b868725387e981349c2a0e0d700d9622a8b64a33f2376"},{"fileReference":"bfdfe7dc352907fc980b868725387e98721903f80f4a8564791b330bfd01951f","guid":"bfdfe7dc352907fc980b868725387e985e8862810d6c1e2ad10cf663d8c38acc"},{"fileReference":"bfdfe7dc352907fc980b868725387e9887989963270204aae9475498243cfbd6","guid":"bfdfe7dc352907fc980b868725387e9859ddb80f1a7aeb6ac1b335b6f225e02e"},{"fileReference":"bfdfe7dc352907fc980b868725387e98ae29cbc96bfd2ba4fc42c1226f69b713","guid":"bfdfe7dc352907fc980b868725387e98d306c993c91c82994b15316db15d60be"},{"fileReference":"bfdfe7dc352907fc980b868725387e989b199724c96ff32700c5818e07f19a57","guid":"bfdfe7dc352907fc980b868725387e9895a30c2f9b82e52f4f040e01df5af362"},{"fileReference":"bfdfe7dc352907fc980b868725387e986d3515962c56f64e5bce62c72d467b1e","guid":"bfdfe7dc352907fc980b868725387e9857f9f3b715a2466faf714bebadf16ed1"}],"guid":"bfdfe7dc352907fc980b868725387e988b147d7eb8deeb283f405b46fb70a2d4","type":"com.apple.buildphase.sources"},{"buildFiles":[{"fileReference":"bfdfe7dc352907fc980b868725387e98b14af7c49882340ad551cb13b0a1e06d","guid":"bfdfe7dc352907fc980b868725387e9827a4938aeab00986eb99224e4238cff5"}],"guid":"bfdfe7dc352907fc980b868725387e982a93fbdcc586c06b58346e84f2cae7cb","type":"com.apple.buildphase.frameworks"},{"buildFiles":[{"guid":"bfdfe7dc352907fc980b868725387e980a2bb69532b6306fbb030179b8829f78","targetReference":"bfdfe7dc352907fc980b868725387e98f5cd644fc2aeb8654450a2168f52697c"}],"guid":"bfdfe7dc352907fc980b868725387e989216f0c1db333a0a85c11ef4e2ae154d","type":"com.apple.buildphase.resources"}],"buildRules":[],"dependencies":[{"guid":"bfdfe7dc352907fc980b868725387e98f5cd644fc2aeb8654450a2168f52697c","name":"SwiftyGif-SwiftyGif"}],"guid":"bfdfe7dc352907fc980b868725387e9872eabefc63c14dfe52fb0c95ad90294e","name":"SwiftyGif","predominantSourceCodeLanguage":"Xcode.SourceCodeLanguage.Swift","productReference":{"guid":"bfdfe7dc352907fc980b868725387e98290968646de0d07c6f6e2ed9e146ea78","name":"SwiftyGif.framework","type":"product"},"productTypeIdentifier":"com.apple.product-type.framework","provisioningSourceData":[{"bundleIdentifierFromInfoPlist":"${PRODUCT_BUNDLE_IDENTIFIER}","configurationName":"Debug","provisioningStyle":1},{"bundleIdentifierFromInfoPlist":"${PRODUCT_BUNDLE_IDENTIFIER}","configurationName":"Profile","provisioningStyle":1},{"bundleIdentifierFromInfoPlist":"${PRODUCT_BUNDLE_IDENTIFIER}","configurationName":"Release","provisioningStyle":1}],"type":"standard"} \ No newline at end of file diff --git a/mih_ui/android/build/ios/XCBuildData/PIFCache/target/TARGET@v11_hash=7c10b1b705eef3cc27b008fa5df200ca-json b/mih_ui/android/build/ios/XCBuildData/PIFCache/target/TARGET@v11_hash=7c10b1b705eef3cc27b008fa5df200ca-json new file mode 100644 index 00000000..785fb3a1 --- /dev/null +++ b/mih_ui/android/build/ios/XCBuildData/PIFCache/target/TARGET@v11_hash=7c10b1b705eef3cc27b008fa5df200ca-json @@ -0,0 +1 @@ +{"buildConfigurations":[{"baseConfigurationFileReference":"bfdfe7dc352907fc980b868725387e98cb16e8074f48ba05a2dfeb081f5bd1cb","buildSettings":{"CLANG_ENABLE_OBJC_WEAK":"NO","CODE_SIGN_IDENTITY[sdk=appletvos*]":"","CODE_SIGN_IDENTITY[sdk=iphoneos*]":"","CODE_SIGN_IDENTITY[sdk=watchos*]":"","CURRENT_PROJECT_VERSION":"1","DYLIB_COMPATIBILITY_VERSION":"1","DYLIB_CURRENT_VERSION":"1","DYLIB_INSTALL_NAME_BASE":"@rpath","ENABLE_MODULE_VERIFIER":"NO","ENABLE_USER_SCRIPT_SANDBOXING":"NO","GENERATE_INFOPLIST_FILE":"NO","INFOPLIST_FILE":"Target Support Files/FirebaseCore/FirebaseCore-Info.plist","INSTALL_PATH":"$(LOCAL_LIBRARY_DIR)/Frameworks","IPHONEOS_DEPLOYMENT_TARGET":"15.0","LD_RUNPATH_SEARCH_PATHS":"$(inherited) @executable_path/Frameworks @loader_path/Frameworks","MODULEMAP_FILE":"Target Support Files/FirebaseCore/FirebaseCore.modulemap","ONLY_ACTIVE_ARCH":"NO","PRODUCT_MODULE_NAME":"FirebaseCore","PRODUCT_NAME":"FirebaseCore","SDKROOT":"iphoneos","SKIP_INSTALL":"YES","SWIFT_ACTIVE_COMPILATION_CONDITIONS":"$(inherited) ","SWIFT_INSTALL_OBJC_HEADER":"YES","SWIFT_VERSION":"5.9","TARGETED_DEVICE_FAMILY":"1,2","VERSIONING_SYSTEM":"apple-generic","VERSION_INFO_PREFIX":""},"guid":"bfdfe7dc352907fc980b868725387e98adb9a804873f32b918931070a9c021a4","name":"Debug"},{"baseConfigurationFileReference":"bfdfe7dc352907fc980b868725387e9823bbf62c346537eed6e067e233fe0af3","buildSettings":{"CLANG_ENABLE_OBJC_WEAK":"NO","CODE_SIGN_IDENTITY[sdk=appletvos*]":"","CODE_SIGN_IDENTITY[sdk=iphoneos*]":"","CODE_SIGN_IDENTITY[sdk=watchos*]":"","CURRENT_PROJECT_VERSION":"1","DYLIB_COMPATIBILITY_VERSION":"1","DYLIB_CURRENT_VERSION":"1","DYLIB_INSTALL_NAME_BASE":"@rpath","ENABLE_MODULE_VERIFIER":"NO","ENABLE_USER_SCRIPT_SANDBOXING":"NO","GENERATE_INFOPLIST_FILE":"NO","INFOPLIST_FILE":"Target Support Files/FirebaseCore/FirebaseCore-Info.plist","INSTALL_PATH":"$(LOCAL_LIBRARY_DIR)/Frameworks","IPHONEOS_DEPLOYMENT_TARGET":"15.0","LD_RUNPATH_SEARCH_PATHS":"$(inherited) @executable_path/Frameworks @loader_path/Frameworks","MODULEMAP_FILE":"Target Support Files/FirebaseCore/FirebaseCore.modulemap","PRODUCT_MODULE_NAME":"FirebaseCore","PRODUCT_NAME":"FirebaseCore","SDKROOT":"iphoneos","SKIP_INSTALL":"YES","SWIFT_ACTIVE_COMPILATION_CONDITIONS":"$(inherited) ","SWIFT_INSTALL_OBJC_HEADER":"YES","SWIFT_VERSION":"5.9","TARGETED_DEVICE_FAMILY":"1,2","VALIDATE_PRODUCT":"YES","VERSIONING_SYSTEM":"apple-generic","VERSION_INFO_PREFIX":""},"guid":"bfdfe7dc352907fc980b868725387e986a27c2e3213c7ba4326eba04521f6949","name":"Profile"},{"baseConfigurationFileReference":"bfdfe7dc352907fc980b868725387e9823bbf62c346537eed6e067e233fe0af3","buildSettings":{"CLANG_ENABLE_OBJC_WEAK":"NO","CODE_SIGN_IDENTITY[sdk=appletvos*]":"","CODE_SIGN_IDENTITY[sdk=iphoneos*]":"","CODE_SIGN_IDENTITY[sdk=watchos*]":"","CURRENT_PROJECT_VERSION":"1","DYLIB_COMPATIBILITY_VERSION":"1","DYLIB_CURRENT_VERSION":"1","DYLIB_INSTALL_NAME_BASE":"@rpath","ENABLE_MODULE_VERIFIER":"NO","ENABLE_USER_SCRIPT_SANDBOXING":"NO","GENERATE_INFOPLIST_FILE":"NO","INFOPLIST_FILE":"Target Support Files/FirebaseCore/FirebaseCore-Info.plist","INSTALL_PATH":"$(LOCAL_LIBRARY_DIR)/Frameworks","IPHONEOS_DEPLOYMENT_TARGET":"15.0","LD_RUNPATH_SEARCH_PATHS":"$(inherited) @executable_path/Frameworks @loader_path/Frameworks","MODULEMAP_FILE":"Target Support Files/FirebaseCore/FirebaseCore.modulemap","PRODUCT_MODULE_NAME":"FirebaseCore","PRODUCT_NAME":"FirebaseCore","SDKROOT":"iphoneos","SKIP_INSTALL":"YES","SWIFT_ACTIVE_COMPILATION_CONDITIONS":"$(inherited) ","SWIFT_INSTALL_OBJC_HEADER":"YES","SWIFT_VERSION":"5.9","TARGETED_DEVICE_FAMILY":"1,2","VALIDATE_PRODUCT":"YES","VERSIONING_SYSTEM":"apple-generic","VERSION_INFO_PREFIX":""},"guid":"bfdfe7dc352907fc980b868725387e9839deda820083d79cb0f34721f6e1479e","name":"Release"}],"buildPhases":[{"buildFiles":[{"fileReference":"bfdfe7dc352907fc980b868725387e98230955bf7f5b9e02cf80179f183ff7ce","guid":"bfdfe7dc352907fc980b868725387e980a5e9d3a7e8a318535f6b96541f3ef86"},{"fileReference":"bfdfe7dc352907fc980b868725387e981514e798aa63a0fd8e89ee17343dd566","guid":"bfdfe7dc352907fc980b868725387e98e9120ab602c2030955c26ab594c027a2","headerVisibility":"public"},{"fileReference":"bfdfe7dc352907fc980b868725387e9815996f070a281d153a577e9dbcf3058d","guid":"bfdfe7dc352907fc980b868725387e9886e9da47164ce7dd0c76682671e81a87"},{"fileReference":"bfdfe7dc352907fc980b868725387e9806c0b950b861c21b9963990ab43a4b89","guid":"bfdfe7dc352907fc980b868725387e988f2cf38e4ff6c633e65869314c8da0e3"},{"fileReference":"bfdfe7dc352907fc980b868725387e98b0744a7edc366118f880568d6132edfd","guid":"bfdfe7dc352907fc980b868725387e982bcd0904ef5ee32b36bb671a7e236f35"},{"fileReference":"bfdfe7dc352907fc980b868725387e989fee6d5e33b87739a2dab9f66760c17e","guid":"bfdfe7dc352907fc980b868725387e98b68792158dc073d58771ebf5bc7dd60b"},{"fileReference":"bfdfe7dc352907fc980b868725387e984403d97edc979cc08bfdbddd3f49003b","guid":"bfdfe7dc352907fc980b868725387e986fa5e4d81c4968082bf08cc76e47d73e"},{"fileReference":"bfdfe7dc352907fc980b868725387e9803a1d9e7c7406ae5b4488a23e5256418","guid":"bfdfe7dc352907fc980b868725387e98b65c7c42b2da9ec77f202e2fe2fc68fd"},{"fileReference":"bfdfe7dc352907fc980b868725387e98cd384f769ff6a416ad0a47b308b7244f","guid":"bfdfe7dc352907fc980b868725387e985f979a76b7e626f8c64978b61666ebc2","headerVisibility":"public"},{"fileReference":"bfdfe7dc352907fc980b868725387e9877aeed262da4294e7eba3e108465f228","guid":"bfdfe7dc352907fc980b868725387e989a461fe7d601c8c9fdff04007b593ded"},{"fileReference":"bfdfe7dc352907fc980b868725387e98d768dfd7daa1bdb257ad2abc4e232fcd","guid":"bfdfe7dc352907fc980b868725387e984355e071039d0cd0629ba39ff728405b","headerVisibility":"public"},{"fileReference":"bfdfe7dc352907fc980b868725387e98529e5f7bfff87cdbf13185e395700843","guid":"bfdfe7dc352907fc980b868725387e98d7b5769714255382e7311d6184fbd87e","headerVisibility":"public"},{"fileReference":"bfdfe7dc352907fc980b868725387e98fc76eb1628ab5a054f098490b4100f6d","guid":"bfdfe7dc352907fc980b868725387e981d4abcc64aa7c299df633f0a3c49aeef"},{"fileReference":"bfdfe7dc352907fc980b868725387e98800f413ba9d90bb10e7bab1cc8fbcfdb","guid":"bfdfe7dc352907fc980b868725387e983dab6922156c6445ab2cd6e6af27d715"},{"fileReference":"bfdfe7dc352907fc980b868725387e98e2cf47785d0cb1b51d5ea1a97360174c","guid":"bfdfe7dc352907fc980b868725387e9815ae93f9a0c37b6a04f569b15bde9780"},{"fileReference":"bfdfe7dc352907fc980b868725387e98a02d8ba298cf0862bbfc342c7074e5c7","guid":"bfdfe7dc352907fc980b868725387e9866844fddcbbc213133f8c373147e9057"},{"fileReference":"bfdfe7dc352907fc980b868725387e98a71e555b3b552897cbcd1316677dcec1","guid":"bfdfe7dc352907fc980b868725387e9887c2f3648714ecdb338460112a9dae44"},{"fileReference":"bfdfe7dc352907fc980b868725387e988b4329a5d76b29e87e729d9cd7ad93a1","guid":"bfdfe7dc352907fc980b868725387e980b3975b47dbede3460270116abcb0b9d","headerVisibility":"public"},{"fileReference":"bfdfe7dc352907fc980b868725387e986ff10679afde8d4204e7c212e534130a","guid":"bfdfe7dc352907fc980b868725387e9881116547f84d95a211d0f5ec42c9f182","headerVisibility":"public"},{"fileReference":"bfdfe7dc352907fc980b868725387e989385cc843d99d2d634e9732484488b3f","guid":"bfdfe7dc352907fc980b868725387e9892d4656bcfb1809ce1e1fa26435c891c"},{"fileReference":"bfdfe7dc352907fc980b868725387e98d8d49f4b04a791b6f8b72a3cca1ee103","guid":"bfdfe7dc352907fc980b868725387e98a1af0bdb4c05cc4407359a1dd8964bac","headerVisibility":"public"},{"fileReference":"bfdfe7dc352907fc980b868725387e98df0b9329b13401877770c564af2684fe","guid":"bfdfe7dc352907fc980b868725387e986dcfc58e302d9ad86d3a454263de87c4"},{"fileReference":"bfdfe7dc352907fc980b868725387e9881f4b7fbf5d308524566967a15d09dd2","guid":"bfdfe7dc352907fc980b868725387e98d536a2be531de6b5598532ecccfa1fd0","headerVisibility":"public"}],"guid":"bfdfe7dc352907fc980b868725387e98b942c37e63188b6762eafc92f5e8a248","type":"com.apple.buildphase.headers"},{"buildFiles":[{"fileReference":"bfdfe7dc352907fc980b868725387e98ef90badd06be31069855a74a45016d0c","guid":"bfdfe7dc352907fc980b868725387e98c893b5a970679e394189542ba2cdd959"},{"fileReference":"bfdfe7dc352907fc980b868725387e98ed3eb3365ff3413002b88f88bb14f070","guid":"bfdfe7dc352907fc980b868725387e98bce9cb6471eea7a0867a9ea1b0cedded"},{"fileReference":"bfdfe7dc352907fc980b868725387e983928e1bb746c4dce582f3973204c6c1b","guid":"bfdfe7dc352907fc980b868725387e9830210ac41298b4fd0aa63ab86c3566ae"},{"fileReference":"bfdfe7dc352907fc980b868725387e988ed37762246bec784742e59fb1ae1dd0","guid":"bfdfe7dc352907fc980b868725387e98afb10dd8abefc4b3a99181d57a59397c"},{"fileReference":"bfdfe7dc352907fc980b868725387e9819eb20fe822d32fe59693bb1af07e918","guid":"bfdfe7dc352907fc980b868725387e9859ccf16b93a3eb9240e78ef58fede6b3"},{"fileReference":"bfdfe7dc352907fc980b868725387e98b679246350869a9d1e1a3c06b9d5ac2f","guid":"bfdfe7dc352907fc980b868725387e98b7a4dcd48e321156aaf9a063a35ed91a"},{"fileReference":"bfdfe7dc352907fc980b868725387e98b27bfcc87c6667390e6665cf5ed38907","guid":"bfdfe7dc352907fc980b868725387e98127ea78b073e30e1cc3849651f9cbbb8"},{"fileReference":"bfdfe7dc352907fc980b868725387e988860c8b4c7c5a5dae715e8cfb65d591d","guid":"bfdfe7dc352907fc980b868725387e980f6add2dc3dc9ca29aef8f21d1d36419"},{"fileReference":"bfdfe7dc352907fc980b868725387e98775c657f07790427fa1301264717a9fe","guid":"bfdfe7dc352907fc980b868725387e98369779d03515b71b4e7ee2034a7f720d"},{"fileReference":"bfdfe7dc352907fc980b868725387e98981d973aa283cf55e0471a3517765b33","guid":"bfdfe7dc352907fc980b868725387e982341ee40e5e7992d19c5c9014c90bd90"},{"fileReference":"bfdfe7dc352907fc980b868725387e98c004405cc6612ddabb4037b1f909c521","guid":"bfdfe7dc352907fc980b868725387e9882e89c21be85d604d79a1137e6fea805"},{"fileReference":"bfdfe7dc352907fc980b868725387e9892656d0ae210c7efada3c7523ed4ae30","guid":"bfdfe7dc352907fc980b868725387e98fbf03a4f43926c45bf2db681d05df4d5"},{"fileReference":"bfdfe7dc352907fc980b868725387e981811e086c8b8e9b086cc158fbccd9d11","guid":"bfdfe7dc352907fc980b868725387e9895edbd674a0232a482e803cbf22cb328"},{"fileReference":"bfdfe7dc352907fc980b868725387e98fad9bf08165943a9291593d38681f1a9","guid":"bfdfe7dc352907fc980b868725387e98afe1be4dcf4d2d5d2d186cfc545f6a12"}],"guid":"bfdfe7dc352907fc980b868725387e98d55db32e4b311fcd071bfa27f7418373","type":"com.apple.buildphase.sources"},{"buildFiles":[{"fileReference":"bfdfe7dc352907fc980b868725387e98b14af7c49882340ad551cb13b0a1e06d","guid":"bfdfe7dc352907fc980b868725387e980490b9c7c8e60e025c2f7660628079be"},{"fileReference":"bfdfe7dc352907fc980b868725387e98f2f44ab0d0f0ce315b53d31757eb8db6","guid":"bfdfe7dc352907fc980b868725387e98e5e59c5657f75c0a4185d7fe6602b72b"}],"guid":"bfdfe7dc352907fc980b868725387e9832b44f6b04e6c3a2ee78dc526ae378d3","type":"com.apple.buildphase.frameworks"},{"buildFiles":[{"guid":"bfdfe7dc352907fc980b868725387e9802a5617521cbb1c5fb68f702b53128c8","targetReference":"bfdfe7dc352907fc980b868725387e98678fb6500ea02c78520816441717cc14"}],"guid":"bfdfe7dc352907fc980b868725387e9873f028001a1e9a6ea9c379b9a7ecac18","type":"com.apple.buildphase.resources"}],"buildRules":[],"dependencies":[{"guid":"bfdfe7dc352907fc980b868725387e98678fb6500ea02c78520816441717cc14","name":"FirebaseCore-FirebaseCore_Privacy"},{"guid":"bfdfe7dc352907fc980b868725387e98020791fd2e7b7ddc8fb2658339c42e16","name":"FirebaseCoreInternal"},{"guid":"bfdfe7dc352907fc980b868725387e98718890dfdac589615663a02d43d9af3e","name":"GoogleUtilities"}],"guid":"bfdfe7dc352907fc980b868725387e98a408a4c1f668e62161cdeba76f57d50c","name":"FirebaseCore","predominantSourceCodeLanguage":"Xcode.SourceCodeLanguage.Objective-C-Plus-Plus","productReference":{"guid":"bfdfe7dc352907fc980b868725387e988ae261e418baab0fdd0a48d117fe7fa2","name":"FirebaseCore.framework","type":"product"},"productTypeIdentifier":"com.apple.product-type.framework","provisioningSourceData":[{"bundleIdentifierFromInfoPlist":"${PRODUCT_BUNDLE_IDENTIFIER}","configurationName":"Debug","provisioningStyle":1},{"bundleIdentifierFromInfoPlist":"${PRODUCT_BUNDLE_IDENTIFIER}","configurationName":"Profile","provisioningStyle":1},{"bundleIdentifierFromInfoPlist":"${PRODUCT_BUNDLE_IDENTIFIER}","configurationName":"Release","provisioningStyle":1}],"type":"standard"} \ No newline at end of file diff --git a/mih_ui/android/build/ios/XCBuildData/PIFCache/target/TARGET@v11_hash=7dc9dce1405849bf477070cc9de38aed-json b/mih_ui/android/build/ios/XCBuildData/PIFCache/target/TARGET@v11_hash=7dc9dce1405849bf477070cc9de38aed-json new file mode 100644 index 00000000..704e8a32 --- /dev/null +++ b/mih_ui/android/build/ios/XCBuildData/PIFCache/target/TARGET@v11_hash=7dc9dce1405849bf477070cc9de38aed-json @@ -0,0 +1 @@ +{"buildConfigurations":[{"baseConfigurationFileReference":"bfdfe7dc352907fc980b868725387e98ae2b6e690d9c19a64378428b59f82e0b","buildSettings":{"ASSETCATALOG_COMPILER_APPICON_NAME":"AppIcon","ASSETCATALOG_COMPILER_GLOBAL_ACCENT_COLOR_NAME":"AccentColor","CLANG_ENABLE_OBJC_WEAK":"NO","ENABLE_USER_SCRIPT_SANDBOXING":"NO","IPHONEOS_DEPLOYMENT_TARGET":"12.0","LD_RUNPATH_SEARCH_PATHS":"$(inherited) @executable_path/Frameworks","ONLY_ACTIVE_ARCH":"NO","SDKROOT":"iphoneos","TARGETED_DEVICE_FAMILY":"1,2"},"guid":"bfdfe7dc352907fc980b868725387e9853420f14dcd3baca88f8c1d2c878a21e","name":"Debug"},{"baseConfigurationFileReference":"bfdfe7dc352907fc980b868725387e98bf594d3cbb3ba4c66c475a7d56edf012","buildSettings":{"ASSETCATALOG_COMPILER_APPICON_NAME":"AppIcon","ASSETCATALOG_COMPILER_GLOBAL_ACCENT_COLOR_NAME":"AccentColor","CLANG_ENABLE_OBJC_WEAK":"NO","ENABLE_USER_SCRIPT_SANDBOXING":"NO","IPHONEOS_DEPLOYMENT_TARGET":"12.0","LD_RUNPATH_SEARCH_PATHS":"$(inherited) @executable_path/Frameworks","SDKROOT":"iphoneos","TARGETED_DEVICE_FAMILY":"1,2","VALIDATE_PRODUCT":"YES"},"guid":"bfdfe7dc352907fc980b868725387e98fe7939ea7314b719a07f2aa5cd2b3f29","name":"Profile"},{"baseConfigurationFileReference":"bfdfe7dc352907fc980b868725387e98bf594d3cbb3ba4c66c475a7d56edf012","buildSettings":{"ASSETCATALOG_COMPILER_APPICON_NAME":"AppIcon","ASSETCATALOG_COMPILER_GLOBAL_ACCENT_COLOR_NAME":"AccentColor","CLANG_ENABLE_OBJC_WEAK":"NO","ENABLE_USER_SCRIPT_SANDBOXING":"NO","IPHONEOS_DEPLOYMENT_TARGET":"12.0","LD_RUNPATH_SEARCH_PATHS":"$(inherited) @executable_path/Frameworks","SDKROOT":"iphoneos","TARGETED_DEVICE_FAMILY":"1,2","VALIDATE_PRODUCT":"YES"},"guid":"bfdfe7dc352907fc980b868725387e985a4bc39331b3d5f41286a148126691b0","name":"Release"}],"buildPhases":[{"alwaysOutOfDate":"false","alwaysRunForInstallHdrs":"false","buildFiles":[],"emitEnvironment":"false","guid":"bfdfe7dc352907fc980b868725387e98d1df1c8cb84b2ce4f3bda8fbd272b60c","inputFileListPaths":["${PODS_ROOT}/Target Support Files/FBAudienceNetwork/FBAudienceNetwork-xcframeworks-input-files.xcfilelist"],"inputFilePaths":[],"name":"[CP] Copy XCFrameworks","originalObjectID":"67E2A87AFF1FE8DC89D4ADAE34ECB1D3","outputFileListPaths":["${PODS_ROOT}/Target Support Files/FBAudienceNetwork/FBAudienceNetwork-xcframeworks-output-files.xcfilelist"],"outputFilePaths":[],"sandboxingOverride":"basedOnBuildSetting","scriptContents":"\"${PODS_ROOT}/Target Support Files/FBAudienceNetwork/FBAudienceNetwork-xcframeworks.sh\"\n","shellPath":"/bin/sh","type":"com.apple.buildphase.shell-script"}],"buildRules":[],"dependencies":[{"guid":"bfdfe7dc352907fc980b868725387e988a4e25c3b6648d4c88499e02f77b811a","name":"FBAudienceNetwork-FBAudienceNetwork"}],"guid":"bfdfe7dc352907fc980b868725387e98c16926158ef45fa2ac81bd3203fcd49e","name":"FBAudienceNetwork","provisioningSourceData":[{"bundleIdentifierFromInfoPlist":"","configurationName":"Debug","provisioningStyle":0},{"bundleIdentifierFromInfoPlist":"","configurationName":"Profile","provisioningStyle":0},{"bundleIdentifierFromInfoPlist":"","configurationName":"Release","provisioningStyle":0}],"type":"aggregate"} \ No newline at end of file diff --git a/mih_ui/android/build/ios/XCBuildData/PIFCache/target/TARGET@v11_hash=8078b8651d861575cd929af1542b7261-json b/mih_ui/android/build/ios/XCBuildData/PIFCache/target/TARGET@v11_hash=8078b8651d861575cd929af1542b7261-json new file mode 100644 index 00000000..3462043b --- /dev/null +++ b/mih_ui/android/build/ios/XCBuildData/PIFCache/target/TARGET@v11_hash=8078b8651d861575cd929af1542b7261-json @@ -0,0 +1 @@ +{"buildConfigurations":[{"baseConfigurationFileReference":"bfdfe7dc352907fc980b868725387e98478e27dfe1d9ad49d28fafd65b85bf34","buildSettings":{"CODE_SIGNING_ALLOWED":"NO","CODE_SIGNING_IDENTITY":"-","CODE_SIGNING_REQUIRED":"NO","CONFIGURATION_BUILD_DIR":"$(BUILD_DIR)/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME)/GTMSessionFetcher","EXPANDED_CODE_SIGN_IDENTITY":"-","IBSC_MODULE":"GTMSessionFetcher","INFOPLIST_FILE":"Target Support Files/GTMSessionFetcher/ResourceBundle-GTMSessionFetcher_Core_Privacy-GTMSessionFetcher-Info.plist","IPHONEOS_DEPLOYMENT_TARGET":"15.0","ONLY_ACTIVE_ARCH":"NO","PRODUCT_NAME":"GTMSessionFetcher_Core_Privacy","SDKROOT":"iphoneos","SKIP_INSTALL":"YES","TARGETED_DEVICE_FAMILY":"1,2","WRAPPER_EXTENSION":"bundle"},"guid":"bfdfe7dc352907fc980b868725387e98d135475422ea3f2893be75f00ba182cc","name":"Debug"},{"baseConfigurationFileReference":"bfdfe7dc352907fc980b868725387e980d155ae95de828a9ae777ff4d23d3419","buildSettings":{"CLANG_ENABLE_OBJC_WEAK":"NO","CODE_SIGNING_ALLOWED":"NO","CODE_SIGNING_IDENTITY":"-","CODE_SIGNING_REQUIRED":"NO","CONFIGURATION_BUILD_DIR":"$(BUILD_DIR)/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME)/GTMSessionFetcher","EXPANDED_CODE_SIGN_IDENTITY":"-","IBSC_MODULE":"GTMSessionFetcher","INFOPLIST_FILE":"Target Support Files/GTMSessionFetcher/ResourceBundle-GTMSessionFetcher_Core_Privacy-GTMSessionFetcher-Info.plist","IPHONEOS_DEPLOYMENT_TARGET":"15.0","PRODUCT_NAME":"GTMSessionFetcher_Core_Privacy","SDKROOT":"iphoneos","SKIP_INSTALL":"YES","TARGETED_DEVICE_FAMILY":"1,2","VALIDATE_PRODUCT":"YES","WRAPPER_EXTENSION":"bundle"},"guid":"bfdfe7dc352907fc980b868725387e9860736abcff98db5f6b23666aa9dd6f67","name":"Profile"},{"baseConfigurationFileReference":"bfdfe7dc352907fc980b868725387e980d155ae95de828a9ae777ff4d23d3419","buildSettings":{"CODE_SIGNING_ALLOWED":"NO","CODE_SIGNING_IDENTITY":"-","CODE_SIGNING_REQUIRED":"NO","CONFIGURATION_BUILD_DIR":"$(BUILD_DIR)/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME)/GTMSessionFetcher","EXPANDED_CODE_SIGN_IDENTITY":"-","IBSC_MODULE":"GTMSessionFetcher","INFOPLIST_FILE":"Target Support Files/GTMSessionFetcher/ResourceBundle-GTMSessionFetcher_Core_Privacy-GTMSessionFetcher-Info.plist","IPHONEOS_DEPLOYMENT_TARGET":"15.0","PRODUCT_NAME":"GTMSessionFetcher_Core_Privacy","SDKROOT":"iphoneos","SKIP_INSTALL":"YES","TARGETED_DEVICE_FAMILY":"1,2","WRAPPER_EXTENSION":"bundle"},"guid":"bfdfe7dc352907fc980b868725387e98b6d338774a9da5f2e8bb1222feb32ce8","name":"Release"}],"buildPhases":[{"buildFiles":[],"guid":"bfdfe7dc352907fc980b868725387e983c76c9f47a19a00b393bb2129a5e29f1","type":"com.apple.buildphase.sources"},{"buildFiles":[],"guid":"bfdfe7dc352907fc980b868725387e98ae858fe9482d27c2265431c1481c1825","type":"com.apple.buildphase.frameworks"},{"buildFiles":[{"fileReference":"bfdfe7dc352907fc980b868725387e98159e7e7e4b98dfa70678e12155a8ed77","guid":"bfdfe7dc352907fc980b868725387e98b5bc51d377c8ea34ecda3d6aef50db1f"}],"guid":"bfdfe7dc352907fc980b868725387e9861c8e5e5c7b3e6c2ad1bdccf88c1da14","type":"com.apple.buildphase.resources"}],"buildRules":[],"dependencies":[],"guid":"bfdfe7dc352907fc980b868725387e9801af34ddea6be97d757786022edb34b1","name":"GTMSessionFetcher-GTMSessionFetcher_Core_Privacy","productReference":{"guid":"bfdfe7dc352907fc980b868725387e984eb2bec9e96ca1b7af92c0697fc4108d","name":"GTMSessionFetcher_Core_Privacy.bundle","type":"product"},"productTypeIdentifier":"com.apple.product-type.bundle","provisioningSourceData":[{"bundleIdentifierFromInfoPlist":"${PRODUCT_BUNDLE_IDENTIFIER}","configurationName":"Debug","provisioningStyle":0},{"bundleIdentifierFromInfoPlist":"${PRODUCT_BUNDLE_IDENTIFIER}","configurationName":"Profile","provisioningStyle":0},{"bundleIdentifierFromInfoPlist":"${PRODUCT_BUNDLE_IDENTIFIER}","configurationName":"Release","provisioningStyle":0}],"type":"standard"} \ No newline at end of file diff --git a/mih_ui/android/build/ios/XCBuildData/PIFCache/target/TARGET@v11_hash=8d133a19301914cd8e6a4b60878e87a2-json b/mih_ui/android/build/ios/XCBuildData/PIFCache/target/TARGET@v11_hash=8d133a19301914cd8e6a4b60878e87a2-json new file mode 100644 index 00000000..8c788560 --- /dev/null +++ b/mih_ui/android/build/ios/XCBuildData/PIFCache/target/TARGET@v11_hash=8d133a19301914cd8e6a4b60878e87a2-json @@ -0,0 +1 @@ +{"buildConfigurations":[{"baseConfigurationFileReference":"bfdfe7dc352907fc980b868725387e98853911a66086d603dff7e7f648c6248b","buildSettings":{"CODE_SIGN_IDENTITY[sdk=appletvos*]":"","CODE_SIGN_IDENTITY[sdk=iphoneos*]":"","CODE_SIGN_IDENTITY[sdk=watchos*]":"","CURRENT_PROJECT_VERSION":"1","DEFINES_MODULE":"YES","DYLIB_COMPATIBILITY_VERSION":"1","DYLIB_CURRENT_VERSION":"1","DYLIB_INSTALL_NAME_BASE":"@rpath","ENABLE_MODULE_VERIFIER":"NO","ENABLE_USER_SCRIPT_SANDBOXING":"NO","GCC_PREFIX_HEADER":"Target Support Files/SDWebImage/SDWebImage-prefix.pch","GENERATE_INFOPLIST_FILE":"NO","INFOPLIST_FILE":"Target Support Files/SDWebImage/SDWebImage-Info.plist","INSTALL_PATH":"$(LOCAL_LIBRARY_DIR)/Frameworks","IPHONEOS_DEPLOYMENT_TARGET":"9.0","LD_RUNPATH_SEARCH_PATHS":"$(inherited) @executable_path/Frameworks @loader_path/Frameworks","MODULEMAP_FILE":"Target Support Files/SDWebImage/SDWebImage.modulemap","ONLY_ACTIVE_ARCH":"NO","PRODUCT_MODULE_NAME":"SDWebImage","PRODUCT_NAME":"SDWebImage","SDKROOT":"iphoneos","SKIP_INSTALL":"YES","SWIFT_ACTIVE_COMPILATION_CONDITIONS":"$(inherited) ","SWIFT_INSTALL_OBJC_HEADER":"YES","SWIFT_VERSION":"5.0","TARGETED_DEVICE_FAMILY":"1,2","VERSIONING_SYSTEM":"apple-generic","VERSION_INFO_PREFIX":""},"guid":"bfdfe7dc352907fc980b868725387e9804ab009110722b2b905053f7534d5b27","name":"Debug"},{"baseConfigurationFileReference":"bfdfe7dc352907fc980b868725387e98924a369cb6c964ba34275d7ca3bc2dda","buildSettings":{"CODE_SIGN_IDENTITY[sdk=appletvos*]":"","CODE_SIGN_IDENTITY[sdk=iphoneos*]":"","CODE_SIGN_IDENTITY[sdk=watchos*]":"","CURRENT_PROJECT_VERSION":"1","DEFINES_MODULE":"YES","DYLIB_COMPATIBILITY_VERSION":"1","DYLIB_CURRENT_VERSION":"1","DYLIB_INSTALL_NAME_BASE":"@rpath","ENABLE_MODULE_VERIFIER":"NO","ENABLE_USER_SCRIPT_SANDBOXING":"NO","GCC_PREFIX_HEADER":"Target Support Files/SDWebImage/SDWebImage-prefix.pch","GENERATE_INFOPLIST_FILE":"NO","INFOPLIST_FILE":"Target Support Files/SDWebImage/SDWebImage-Info.plist","INSTALL_PATH":"$(LOCAL_LIBRARY_DIR)/Frameworks","IPHONEOS_DEPLOYMENT_TARGET":"9.0","LD_RUNPATH_SEARCH_PATHS":"$(inherited) @executable_path/Frameworks @loader_path/Frameworks","MODULEMAP_FILE":"Target Support Files/SDWebImage/SDWebImage.modulemap","PRODUCT_MODULE_NAME":"SDWebImage","PRODUCT_NAME":"SDWebImage","SDKROOT":"iphoneos","SKIP_INSTALL":"YES","SWIFT_ACTIVE_COMPILATION_CONDITIONS":"$(inherited) ","SWIFT_INSTALL_OBJC_HEADER":"YES","SWIFT_VERSION":"5.0","TARGETED_DEVICE_FAMILY":"1,2","VALIDATE_PRODUCT":"YES","VERSIONING_SYSTEM":"apple-generic","VERSION_INFO_PREFIX":""},"guid":"bfdfe7dc352907fc980b868725387e9850945e18525a3e598d9724f3a764903b","name":"Profile"},{"baseConfigurationFileReference":"bfdfe7dc352907fc980b868725387e98924a369cb6c964ba34275d7ca3bc2dda","buildSettings":{"CODE_SIGN_IDENTITY[sdk=appletvos*]":"","CODE_SIGN_IDENTITY[sdk=iphoneos*]":"","CODE_SIGN_IDENTITY[sdk=watchos*]":"","CURRENT_PROJECT_VERSION":"1","DEFINES_MODULE":"YES","DYLIB_COMPATIBILITY_VERSION":"1","DYLIB_CURRENT_VERSION":"1","DYLIB_INSTALL_NAME_BASE":"@rpath","ENABLE_MODULE_VERIFIER":"NO","ENABLE_USER_SCRIPT_SANDBOXING":"NO","GCC_PREFIX_HEADER":"Target Support Files/SDWebImage/SDWebImage-prefix.pch","GENERATE_INFOPLIST_FILE":"NO","INFOPLIST_FILE":"Target Support Files/SDWebImage/SDWebImage-Info.plist","INSTALL_PATH":"$(LOCAL_LIBRARY_DIR)/Frameworks","IPHONEOS_DEPLOYMENT_TARGET":"9.0","LD_RUNPATH_SEARCH_PATHS":"$(inherited) @executable_path/Frameworks @loader_path/Frameworks","MODULEMAP_FILE":"Target Support Files/SDWebImage/SDWebImage.modulemap","PRODUCT_MODULE_NAME":"SDWebImage","PRODUCT_NAME":"SDWebImage","SDKROOT":"iphoneos","SKIP_INSTALL":"YES","SWIFT_ACTIVE_COMPILATION_CONDITIONS":"$(inherited) ","SWIFT_INSTALL_OBJC_HEADER":"YES","SWIFT_VERSION":"5.0","TARGETED_DEVICE_FAMILY":"1,2","VALIDATE_PRODUCT":"YES","VERSIONING_SYSTEM":"apple-generic","VERSION_INFO_PREFIX":""},"guid":"bfdfe7dc352907fc980b868725387e98a2b2e17c2efa1ef1a3aad2d39ddc8c14","name":"Release"}],"buildPhases":[{"buildFiles":[{"fileReference":"bfdfe7dc352907fc980b868725387e98d5777166096230085837e5a6300319ad","guid":"bfdfe7dc352907fc980b868725387e98be9d7442fabca0c5610c0e19f86557d8","headerVisibility":"private"},{"fileReference":"bfdfe7dc352907fc980b868725387e988cb0cdc02aa29fb804ef97672630b130","guid":"bfdfe7dc352907fc980b868725387e9806822004988a9d94cdf5a031c3425eff","headerVisibility":"public"},{"fileReference":"bfdfe7dc352907fc980b868725387e98c822fa9c81a63d01137ef8b8fb09fb10","guid":"bfdfe7dc352907fc980b868725387e9805483cca822ae5c51d8ecad7e0c6ee8e","headerVisibility":"public"},{"fileReference":"bfdfe7dc352907fc980b868725387e98bef996f30e7cd8f81a41b150807d2a9d","guid":"bfdfe7dc352907fc980b868725387e981cce13f27d92cb91bd22a8865967993e","headerVisibility":"public"},{"fileReference":"bfdfe7dc352907fc980b868725387e984094c7d883e6e69778784d589b0e06ff","guid":"bfdfe7dc352907fc980b868725387e98dc8bf6e5b244b736902e5d7fdcb3fe46","headerVisibility":"public"},{"fileReference":"bfdfe7dc352907fc980b868725387e983a316a9a3c0d0918d8038d51d1ce2a7b","guid":"bfdfe7dc352907fc980b868725387e98f60172e0fc601f0759de2e4483ad4c2f","headerVisibility":"public"},{"fileReference":"bfdfe7dc352907fc980b868725387e981d5092826a9dbc8d0808fdcaa23aeb53","guid":"bfdfe7dc352907fc980b868725387e98de8d41f98f23e938e10d164952b69161","headerVisibility":"public"},{"fileReference":"bfdfe7dc352907fc980b868725387e98e04128ff9b1a8ec5bb663090da8e9106","guid":"bfdfe7dc352907fc980b868725387e9891da59dfc2bae9f1127526dede51aef7","headerVisibility":"public"},{"fileReference":"bfdfe7dc352907fc980b868725387e983d94e2a4234b8e8df332860ab5c28460","guid":"bfdfe7dc352907fc980b868725387e9876af0a8c3f791f81730d69311ecf4ac2","headerVisibility":"public"},{"fileReference":"bfdfe7dc352907fc980b868725387e981ee2ea2c0f3451ad81e4cd37571a9217","guid":"bfdfe7dc352907fc980b868725387e987122e1eb2469403d73d6e6fdf9334bd7","headerVisibility":"private"},{"fileReference":"bfdfe7dc352907fc980b868725387e988c36ed33a6b70955a1fe117c31119455","guid":"bfdfe7dc352907fc980b868725387e98df09c2f87106b2f16d240eaa625dd401","headerVisibility":"private"},{"fileReference":"bfdfe7dc352907fc980b868725387e98705e37d167e6aa4fe5e7a89434983b0b","guid":"bfdfe7dc352907fc980b868725387e989e62241bc5594eb88a2fc802878c4c8e","headerVisibility":"public"},{"fileReference":"bfdfe7dc352907fc980b868725387e98ad42019143a452170ac8f0ccbe351bec","guid":"bfdfe7dc352907fc980b868725387e98dfe3b8184bcd5ea582b7612cc39cab16","headerVisibility":"private"},{"fileReference":"bfdfe7dc352907fc980b868725387e98855529e142431b9ff21b7623dc2343aa","guid":"bfdfe7dc352907fc980b868725387e98c38562671af29e34109b636e4c2bc8c2","headerVisibility":"public"},{"fileReference":"bfdfe7dc352907fc980b868725387e98d9d549ee09361b3182ffb3a7cb2c4f16","guid":"bfdfe7dc352907fc980b868725387e98f9c7a1b2f9800346014d927b510690a2","headerVisibility":"private"},{"fileReference":"bfdfe7dc352907fc980b868725387e9831d5facff92bfe7ff1b1f885cc66a0ef","guid":"bfdfe7dc352907fc980b868725387e98c017bf1f77ac811959d719e5355fe22f","headerVisibility":"private"},{"fileReference":"bfdfe7dc352907fc980b868725387e98b10e1dc2d838c45be2daa77f2da23187","guid":"bfdfe7dc352907fc980b868725387e9884623cc67a02a4442ca230549e12677c","headerVisibility":"public"},{"fileReference":"bfdfe7dc352907fc980b868725387e98ccbf3bd085b02b578987707f8792f7b3","guid":"bfdfe7dc352907fc980b868725387e9874254a68205e6ae0940472b5f4cc1f1f","headerVisibility":"public"},{"fileReference":"bfdfe7dc352907fc980b868725387e987c0adab35058c318538f4dc83454ce4e","guid":"bfdfe7dc352907fc980b868725387e9874be0ea45a0fef5220b10df35f5a4e16","headerVisibility":"private"},{"fileReference":"bfdfe7dc352907fc980b868725387e987a842fd7d0d8113b0e4b745df45548eb","guid":"bfdfe7dc352907fc980b868725387e981a5aa3dffda15cfd122f3603c0f97605","headerVisibility":"public"},{"fileReference":"bfdfe7dc352907fc980b868725387e98590daa9c16ed56ce3ab6dd2cc5e71b02","guid":"bfdfe7dc352907fc980b868725387e98a0e073cc5665e6a7e421d1843981e83c","headerVisibility":"public"},{"fileReference":"bfdfe7dc352907fc980b868725387e98e0f1d1916f1c2c74d3580b1a8beadbc9","guid":"bfdfe7dc352907fc980b868725387e98af44b2f9052fb0d1dfc37b269ca0fa77","headerVisibility":"public"},{"fileReference":"bfdfe7dc352907fc980b868725387e98f9e678ebe42d48ec13e555aada3bc3d9","guid":"bfdfe7dc352907fc980b868725387e980b0eda782fee2d98b4b81a23fbe7efa3","headerVisibility":"public"},{"fileReference":"bfdfe7dc352907fc980b868725387e988da911fe8274c9c625d56ca791baefb0","guid":"bfdfe7dc352907fc980b868725387e98c3fb1f4808021579665b4874f84a68db","headerVisibility":"public"},{"fileReference":"bfdfe7dc352907fc980b868725387e98523fb53a069b36128e18dd0e59218348","guid":"bfdfe7dc352907fc980b868725387e985b4c86a9f12a1d3c662250b6957b4b27","headerVisibility":"private"},{"fileReference":"bfdfe7dc352907fc980b868725387e9838cb0d098103b3b9e86956ad87b22b2d","guid":"bfdfe7dc352907fc980b868725387e98e9aa5ae1c792bfb6263364607e397da8","headerVisibility":"public"},{"fileReference":"bfdfe7dc352907fc980b868725387e98e088deb5da5e6541c7b77e9a11ea92c4","guid":"bfdfe7dc352907fc980b868725387e98cc56f5b1a61aa6f4ef114c1176dd56b7","headerVisibility":"public"},{"fileReference":"bfdfe7dc352907fc980b868725387e98c0a8f0a8b8deec84cfa655fb07cfa5ee","guid":"bfdfe7dc352907fc980b868725387e98066db1e3aec6fa53f2a129cf2c1c59ca","headerVisibility":"public"},{"fileReference":"bfdfe7dc352907fc980b868725387e982d86fa74c86e4b192ae203192c4ecbf7","guid":"bfdfe7dc352907fc980b868725387e98b96a0a2277207c5da89fbd278c1097c9","headerVisibility":"public"},{"fileReference":"bfdfe7dc352907fc980b868725387e98be1b86c55734f717d0ca31fec781de9d","guid":"bfdfe7dc352907fc980b868725387e985b66920edfbc14563b18ec5a84aeb6ad","headerVisibility":"private"},{"fileReference":"bfdfe7dc352907fc980b868725387e9852dc3cd416a8f2168164e78857457a58","guid":"bfdfe7dc352907fc980b868725387e98ff9bd9e364901a2d70fe987eec778b55","headerVisibility":"public"},{"fileReference":"bfdfe7dc352907fc980b868725387e98a7717b19769aeb6b9ee109e003eaf3c5","guid":"bfdfe7dc352907fc980b868725387e98fcee8ffe2f419640bb36348b96bdb2eb","headerVisibility":"public"},{"fileReference":"bfdfe7dc352907fc980b868725387e98b054f24c9d53f55652ce125ed0820b32","guid":"bfdfe7dc352907fc980b868725387e9846a78de9204357d2f4575bd674172a16","headerVisibility":"public"},{"fileReference":"bfdfe7dc352907fc980b868725387e9876f5fe642db8bd371f16f87ea2265fdd","guid":"bfdfe7dc352907fc980b868725387e98460c93cd92bf02885c25b97f1382dce0","headerVisibility":"public"},{"fileReference":"bfdfe7dc352907fc980b868725387e98736d5194c32aab23367381e19d3ce3fd","guid":"bfdfe7dc352907fc980b868725387e986efac4fc90f2f5e5c5ccd60f96ce4f42","headerVisibility":"private"},{"fileReference":"bfdfe7dc352907fc980b868725387e98e27502a34cf0d8b4655a10b7a907244d","guid":"bfdfe7dc352907fc980b868725387e98f418b61136bdb1cc3303b2d099c7a44f","headerVisibility":"public"},{"fileReference":"bfdfe7dc352907fc980b868725387e98b5bfcc15d82c4bdb3694c0a573f3a82c","guid":"bfdfe7dc352907fc980b868725387e98087569cf16207aeedc8a7f7377c3af4e","headerVisibility":"public"},{"fileReference":"bfdfe7dc352907fc980b868725387e9854d83c03faf3ccae2f85ebc06d3edfd7","guid":"bfdfe7dc352907fc980b868725387e9860237b0e354ca5142f37cfa7a8b5a86d","headerVisibility":"public"},{"fileReference":"bfdfe7dc352907fc980b868725387e9818cbd8a1594265b40676b393a478ca19","guid":"bfdfe7dc352907fc980b868725387e988a46edc810b5a4662db5081a9c0ee458","headerVisibility":"public"},{"fileReference":"bfdfe7dc352907fc980b868725387e988ce6991ade90f9118664f77be651e9e7","guid":"bfdfe7dc352907fc980b868725387e98de781a9874aa41c31af5fca3fc7bb5fa","headerVisibility":"private"},{"fileReference":"bfdfe7dc352907fc980b868725387e98615e5afab5c4b60f4f54bf4a24d5d7f4","guid":"bfdfe7dc352907fc980b868725387e982d7d60860edde1f1ac6d45d7407bac10","headerVisibility":"public"},{"fileReference":"bfdfe7dc352907fc980b868725387e98a1e40288f11809e02afe6d0add4ed3bc","guid":"bfdfe7dc352907fc980b868725387e98904324030717a3677b3dd7c2e1faf9fc","headerVisibility":"private"},{"fileReference":"bfdfe7dc352907fc980b868725387e98f3090cb74fc1105440000f3b094dac06","guid":"bfdfe7dc352907fc980b868725387e98c820e21223e4828e57e7815e3523f022","headerVisibility":"private"},{"fileReference":"bfdfe7dc352907fc980b868725387e982a45a60f2cf9e6b4362fdb5d961d3730","guid":"bfdfe7dc352907fc980b868725387e9894e7a3d8a5335fc427ab13717a194aff","headerVisibility":"public"},{"fileReference":"bfdfe7dc352907fc980b868725387e988e30be8bf3d4fd0d6c23a4784a17b51a","guid":"bfdfe7dc352907fc980b868725387e98b7a01124350b9ea34738e95b4ce8af70","headerVisibility":"public"},{"fileReference":"bfdfe7dc352907fc980b868725387e98645f30d4b737a9944563bf1acbd19e86","guid":"bfdfe7dc352907fc980b868725387e98eb06d9479a51925ce47c68daaf2957ed","headerVisibility":"public"},{"fileReference":"bfdfe7dc352907fc980b868725387e982d6c2872630ef832dce2de99d07b9a55","guid":"bfdfe7dc352907fc980b868725387e980fd12822e9d1e0877948cf7799b966b9","headerVisibility":"public"},{"fileReference":"bfdfe7dc352907fc980b868725387e98843243bab3fa1f3d33a82459406db798","guid":"bfdfe7dc352907fc980b868725387e98585b124df1cc1f4051b35d6daa470f3c","headerVisibility":"public"},{"fileReference":"bfdfe7dc352907fc980b868725387e98b3d9d1eff24b478076662e7793cc0f81","guid":"bfdfe7dc352907fc980b868725387e981db3c8f9bed6bda92ae00cb39db6a867","headerVisibility":"public"},{"fileReference":"bfdfe7dc352907fc980b868725387e9852467a5c652bd848d515dcaabfba92be","guid":"bfdfe7dc352907fc980b868725387e986e4769e06b3e857ae5f48a0f60e9c06f","headerVisibility":"public"},{"fileReference":"bfdfe7dc352907fc980b868725387e981c37503503856f7bb1bf94b84df33811","guid":"bfdfe7dc352907fc980b868725387e98b534fb3d206dc29359ee937ef0727d6a","headerVisibility":"public"},{"fileReference":"bfdfe7dc352907fc980b868725387e98566b09412f1c142b2d2182d03c2a7c53","guid":"bfdfe7dc352907fc980b868725387e986df8602d589635ca94a013b1042a734f","headerVisibility":"public"},{"fileReference":"bfdfe7dc352907fc980b868725387e98ba6dde7dbf6bb8b5d90dd818665d1c99","guid":"bfdfe7dc352907fc980b868725387e9852f31a3f0ebcfc2f0539717219b7715c","headerVisibility":"public"},{"fileReference":"bfdfe7dc352907fc980b868725387e98d2287b1d56a60c6eccdf938b9aa947fd","guid":"bfdfe7dc352907fc980b868725387e983ea4b17ddea76c4cc7aae96b6c45393b","headerVisibility":"public"},{"fileReference":"bfdfe7dc352907fc980b868725387e985db8e4d10c219b6975cdd62ddf92d0aa","guid":"bfdfe7dc352907fc980b868725387e98bf8c1603289ef53ae2aedee48261bea5","headerVisibility":"public"},{"fileReference":"bfdfe7dc352907fc980b868725387e98a20f21b83c952074caf5d18873e86258","guid":"bfdfe7dc352907fc980b868725387e982af44a49e3bae506655b33344ffee8f4","headerVisibility":"public"},{"fileReference":"bfdfe7dc352907fc980b868725387e980db9b1158e6646728005aa55be435f85","guid":"bfdfe7dc352907fc980b868725387e98054b65a43291bbaacf303162bbfd92fa","headerVisibility":"public"},{"fileReference":"bfdfe7dc352907fc980b868725387e98d48abcca92cf18856278d322cd682f4c","guid":"bfdfe7dc352907fc980b868725387e98f26c041e8dade3c16e1175f056b1c15f","headerVisibility":"public"},{"fileReference":"bfdfe7dc352907fc980b868725387e983f4f10857c92a9d96bc0bf380825345b","guid":"bfdfe7dc352907fc980b868725387e98077988835ec4ef25e7c8abd8f60bcdbb","headerVisibility":"public"},{"fileReference":"bfdfe7dc352907fc980b868725387e9826c93ac59a6de6260adf7777d48a8e6b","guid":"bfdfe7dc352907fc980b868725387e98d47ce03e9cb07222aa390d49199f55d0","headerVisibility":"public"},{"fileReference":"bfdfe7dc352907fc980b868725387e985628e9529c81661cd2bf059df123f941","guid":"bfdfe7dc352907fc980b868725387e98fc88a27c1d4ed8c2fb3abcce664279d7","headerVisibility":"public"},{"fileReference":"bfdfe7dc352907fc980b868725387e985c307f6e0adf9012f1be72c3d0497a21","guid":"bfdfe7dc352907fc980b868725387e9852ac4f788d7a93a51c0fd6dab80ea1a2","headerVisibility":"public"},{"fileReference":"bfdfe7dc352907fc980b868725387e984b1e3ffd1fb39dc94affca31b4e27b9e","guid":"bfdfe7dc352907fc980b868725387e98f55afdf13acbb6ed2cab2dff9cebb426","headerVisibility":"private"},{"fileReference":"bfdfe7dc352907fc980b868725387e988fc042ecdc017c735af204f8c0612394","guid":"bfdfe7dc352907fc980b868725387e98e51b44847f216e4a23d48736d09eec70","headerVisibility":"public"},{"fileReference":"bfdfe7dc352907fc980b868725387e98d80e8bd3db060dde5d194ccc462db4de","guid":"bfdfe7dc352907fc980b868725387e988db215393f4d62131be648eb5f6213a5","headerVisibility":"private"},{"fileReference":"bfdfe7dc352907fc980b868725387e982c7dbddc604a244196428b8fc46f5cac","guid":"bfdfe7dc352907fc980b868725387e98f21a3590fa1c973df60ca6d8b8e71349","headerVisibility":"public"},{"fileReference":"bfdfe7dc352907fc980b868725387e984f21f0eb8f4805c253e862eb24369362","guid":"bfdfe7dc352907fc980b868725387e985363939cb1a02bee382b1eab43991cf7","headerVisibility":"public"},{"fileReference":"bfdfe7dc352907fc980b868725387e98a364326f3629a82d35fe5e5601a7cfec","guid":"bfdfe7dc352907fc980b868725387e984badd00e17696ccbed4916f8623042e2","headerVisibility":"public"},{"fileReference":"bfdfe7dc352907fc980b868725387e98eab3c5f10863c41bce28b75442dcfb0f","guid":"bfdfe7dc352907fc980b868725387e980cc1ca988b39c7115e433dd7df35260b","headerVisibility":"public"},{"fileReference":"bfdfe7dc352907fc980b868725387e988fe87f3480a506b882b7262afada35a2","guid":"bfdfe7dc352907fc980b868725387e98adfb02854714d6960be634572daef4ab","headerVisibility":"public"},{"fileReference":"bfdfe7dc352907fc980b868725387e98d5f4296b72582a649e28a8d376925930","guid":"bfdfe7dc352907fc980b868725387e986da2af838e0c76932d26585940fd54b1","headerVisibility":"public"},{"fileReference":"bfdfe7dc352907fc980b868725387e98350b1090302f51cfb21e01d8415c7609","guid":"bfdfe7dc352907fc980b868725387e983ab1302293aa92f5e8660eae6502eed5","headerVisibility":"public"},{"fileReference":"bfdfe7dc352907fc980b868725387e98099e64b0490c5209324be8367cf59b67","guid":"bfdfe7dc352907fc980b868725387e98b6ffb9afbc5ddff61acce0e33451fc1f","headerVisibility":"public"},{"fileReference":"bfdfe7dc352907fc980b868725387e9853d9196d0b2578d8a09ef594daec2b10","guid":"bfdfe7dc352907fc980b868725387e9855b2e6bd42faa7e8be3cf3841fc6988a","headerVisibility":"public"},{"fileReference":"bfdfe7dc352907fc980b868725387e98358c67ecbf86e16ee420fdc0f60209d6","guid":"bfdfe7dc352907fc980b868725387e98b075456f68b6677b57e3871f89b5e1f9","headerVisibility":"public"},{"fileReference":"bfdfe7dc352907fc980b868725387e98338ff7df5b388b8cb6dc581ce584707b","guid":"bfdfe7dc352907fc980b868725387e985a16a27a1864896c01440e8503c648c3","headerVisibility":"public"},{"fileReference":"bfdfe7dc352907fc980b868725387e980f510685009abf4916684cac897048e9","guid":"bfdfe7dc352907fc980b868725387e98299615dd7fa3f5b6f91988e8d55df07f","headerVisibility":"public"}],"guid":"bfdfe7dc352907fc980b868725387e985f8a059a79682c22f22bb94620c51efe","type":"com.apple.buildphase.headers"},{"buildFiles":[{"fileReference":"bfdfe7dc352907fc980b868725387e981927866bac5164139b4906c697c2ae1a","guid":"bfdfe7dc352907fc980b868725387e986916d2e11955e41f9d6bad4f4ac4d34f"},{"fileReference":"bfdfe7dc352907fc980b868725387e9879873ec62bf39c031f9405690a0f73c5","guid":"bfdfe7dc352907fc980b868725387e9883edc7385647da19cb842395bc6294e9"},{"fileReference":"bfdfe7dc352907fc980b868725387e98ee02f559016795b3a0d12920773904b0","guid":"bfdfe7dc352907fc980b868725387e988d125b3474ea3fa48ebaacd4b9aea72d"},{"fileReference":"bfdfe7dc352907fc980b868725387e98054e5d375da8f4d58909b03284d2ffb5","guid":"bfdfe7dc352907fc980b868725387e9859c2b85e26aebbe1ce7d7ae5e2e524c7"},{"fileReference":"bfdfe7dc352907fc980b868725387e98e057edb06a9fb0ee234d2501e566c13c","guid":"bfdfe7dc352907fc980b868725387e98a64ea57d7c2c14526c605f86367674ac"},{"fileReference":"bfdfe7dc352907fc980b868725387e9864350921c8a3eb6e2717b3957fc629b0","guid":"bfdfe7dc352907fc980b868725387e98e5e42db04d1a74fd72168484d7fcd740"},{"fileReference":"bfdfe7dc352907fc980b868725387e985042bb443803b56b9c76461c6b782096","guid":"bfdfe7dc352907fc980b868725387e987a4c3e14d7e2e22018819db5667f8667"},{"fileReference":"bfdfe7dc352907fc980b868725387e98d6b7c5fd8f27324b1d4b9b72d5246584","guid":"bfdfe7dc352907fc980b868725387e98786fa38fcd8028e45f4c518b6ef077ea"},{"fileReference":"bfdfe7dc352907fc980b868725387e9869d5460295efbc7dc43c12e14196373a","guid":"bfdfe7dc352907fc980b868725387e98d193abd26ca6f5fb0c0bf076b813df46"},{"fileReference":"bfdfe7dc352907fc980b868725387e98162b8fefd8d643427787492f1c51da3d","guid":"bfdfe7dc352907fc980b868725387e98747f3e0e165ef143fdb0215d27db29a5"},{"fileReference":"bfdfe7dc352907fc980b868725387e98ee7eac77a5571e1e9e215e3c5a54cd59","guid":"bfdfe7dc352907fc980b868725387e984a63b2811cda9db2e49cfd6c6a419eab"},{"fileReference":"bfdfe7dc352907fc980b868725387e988427fc8c610fd8f3e1bb219ece805796","guid":"bfdfe7dc352907fc980b868725387e98805dd9dbae97a21b7a27b957f9315ded"},{"fileReference":"bfdfe7dc352907fc980b868725387e98265fb41c11ac01db9fe94aa464810666","guid":"bfdfe7dc352907fc980b868725387e9824855676dc6a11a3d4913a3618724d6b"},{"fileReference":"bfdfe7dc352907fc980b868725387e985212637a8a891d9412516918621e1a39","guid":"bfdfe7dc352907fc980b868725387e98d86448a595c3e96977dbdc30fe2cbcaa"},{"fileReference":"bfdfe7dc352907fc980b868725387e98e26d3f5025495b220ddd4f6207f4587b","guid":"bfdfe7dc352907fc980b868725387e987ca43090dc8ea6eb949cda741bc04b77"},{"fileReference":"bfdfe7dc352907fc980b868725387e987aeb1677aa3f05f1761f846718835c50","guid":"bfdfe7dc352907fc980b868725387e9813cd1b8be12783c5362e7c21b9b3dbd0"},{"fileReference":"bfdfe7dc352907fc980b868725387e98f959b628d5b8052a17713834ad57fb09","guid":"bfdfe7dc352907fc980b868725387e981e2f1e86843b302ea0d4f2737975831d"},{"fileReference":"bfdfe7dc352907fc980b868725387e9806ad195b6f8d839ae85aaad6a082e134","guid":"bfdfe7dc352907fc980b868725387e98ecae11baac81de35569689faf861acf0"},{"fileReference":"bfdfe7dc352907fc980b868725387e982d87c15323f45612fa9da3bf7eb1f67c","guid":"bfdfe7dc352907fc980b868725387e98512e6a8ce11bf005cf404a9cc75bef1e"},{"fileReference":"bfdfe7dc352907fc980b868725387e980aaa2ce18060018d8582b15deb60717e","guid":"bfdfe7dc352907fc980b868725387e98186dab1ceb0cab230efb378477e3bef1"},{"fileReference":"bfdfe7dc352907fc980b868725387e98df178355066c42ee41917de773f15445","guid":"bfdfe7dc352907fc980b868725387e987034af3c386dd466a0bf11b21bfb8ce1"},{"fileReference":"bfdfe7dc352907fc980b868725387e98591862058e662b5f63b1e4a002b7c7c5","guid":"bfdfe7dc352907fc980b868725387e98ff8690bf005f30f02b4ed1b96ee15323"},{"fileReference":"bfdfe7dc352907fc980b868725387e98f83f5f89240fd2c759541ca77d087f0c","guid":"bfdfe7dc352907fc980b868725387e9837ba1bdae2ef6a133d2289a1d548034e"},{"fileReference":"bfdfe7dc352907fc980b868725387e989af56a45d24d5431edf6bad850b00d11","guid":"bfdfe7dc352907fc980b868725387e98ede90d70412bd7e9c08a286d1a412f02"},{"fileReference":"bfdfe7dc352907fc980b868725387e986bac22c527310784f1c006e87f3294ce","guid":"bfdfe7dc352907fc980b868725387e984090828cfe8f007ed30b6c219eb371f5"},{"fileReference":"bfdfe7dc352907fc980b868725387e981c2992260f8b3902274cb45c5378a77c","guid":"bfdfe7dc352907fc980b868725387e98481823de9baefb241b80e94b5b534181"},{"fileReference":"bfdfe7dc352907fc980b868725387e98e34fca7fb9515751e5b65daa60892205","guid":"bfdfe7dc352907fc980b868725387e984755b29e1ab7d0e06551b1118e41b162"},{"fileReference":"bfdfe7dc352907fc980b868725387e982943aac92a9cbecd2cbbb9c61b214642","guid":"bfdfe7dc352907fc980b868725387e9842f696bfe4322f5cc5a7f27b409bd157"},{"fileReference":"bfdfe7dc352907fc980b868725387e981af493bf2a6d92e228891b304a7c2b30","guid":"bfdfe7dc352907fc980b868725387e98ad778e981ef8cca89e7cd842950581b0"},{"fileReference":"bfdfe7dc352907fc980b868725387e9889a07bab11e055a44d47d0a84563e088","guid":"bfdfe7dc352907fc980b868725387e98578e82f7545167f78f6ebe61c85d0bde"},{"fileReference":"bfdfe7dc352907fc980b868725387e98a1d2c3a622ecffffe17ef46139139ca8","guid":"bfdfe7dc352907fc980b868725387e98f27537f8f6870ac73ee33ac3eb07ace5"},{"fileReference":"bfdfe7dc352907fc980b868725387e984d09367fa07320c0ed18d8d09ef5757c","guid":"bfdfe7dc352907fc980b868725387e981084672785f169996eccfbe06a47501e"},{"fileReference":"bfdfe7dc352907fc980b868725387e98616683757c0e1501dd6570169bfd41ac","guid":"bfdfe7dc352907fc980b868725387e98fd609d65c809bc7b69cd618b4a267e2c"},{"fileReference":"bfdfe7dc352907fc980b868725387e988c25500f4df2d88e68f29160fa6d1d5a","guid":"bfdfe7dc352907fc980b868725387e98c61718eebeb0af586e28cfd878a30d49"},{"fileReference":"bfdfe7dc352907fc980b868725387e986a6bcd435124a56335e622830e53d4c3","guid":"bfdfe7dc352907fc980b868725387e9805d3af4d75e3e878acf84323fd9a3de7"},{"fileReference":"bfdfe7dc352907fc980b868725387e988f7a31d9a7fba991cd82fb921f090297","guid":"bfdfe7dc352907fc980b868725387e985dbc5d7268ab1beec0cdf54449463d09"},{"fileReference":"bfdfe7dc352907fc980b868725387e98bbe9461acf5722bf63f491f75f987246","guid":"bfdfe7dc352907fc980b868725387e984d62d64fd66552677a95a43a3110a782"},{"fileReference":"bfdfe7dc352907fc980b868725387e980cd5a67e18edfb65db64920ac80317e1","guid":"bfdfe7dc352907fc980b868725387e9840d1d45c039e6a0997e73acdf8116811"},{"fileReference":"bfdfe7dc352907fc980b868725387e98665db2580b70e0265552837a06ece510","guid":"bfdfe7dc352907fc980b868725387e98334b8e80d80747046f2fc391e5ea9355"},{"fileReference":"bfdfe7dc352907fc980b868725387e9803d55e2bb08b712edefa8542b0d821f2","guid":"bfdfe7dc352907fc980b868725387e983714b8079494b3f5de6865925d4b829c"},{"fileReference":"bfdfe7dc352907fc980b868725387e988f335221864e0c7abd228aa513d49083","guid":"bfdfe7dc352907fc980b868725387e98633fcb70323a2b33b006376610ba6836"},{"fileReference":"bfdfe7dc352907fc980b868725387e98b007c1bd88b3b03c3720e4d4ec6ce72d","guid":"bfdfe7dc352907fc980b868725387e98b849347f845e6c86bdec15f76e8e7d13"},{"fileReference":"bfdfe7dc352907fc980b868725387e984d3a38375b819f97a2e590d76e3d68be","guid":"bfdfe7dc352907fc980b868725387e98fd78a2ef4a36e9c9acda3c32683256b3"},{"fileReference":"bfdfe7dc352907fc980b868725387e98ed97a12539b70fccd51dec37544af27e","guid":"bfdfe7dc352907fc980b868725387e98f3ab17ff4a576766707cb8a1f5f37809"},{"fileReference":"bfdfe7dc352907fc980b868725387e988dd995935f6b4bed79a6300837319a14","guid":"bfdfe7dc352907fc980b868725387e98282b8470981ef733954f95dc52507dfb"},{"fileReference":"bfdfe7dc352907fc980b868725387e985c56464dbc24f4b98cd30d9927bd9b20","guid":"bfdfe7dc352907fc980b868725387e984ffaf7c01acbc5d87a5ee765c2df70b5"},{"fileReference":"bfdfe7dc352907fc980b868725387e9870310f2e959bc3a5eff9174c850cbe6e","guid":"bfdfe7dc352907fc980b868725387e985109bbe68a7f2b64a9658b3b1b7eec2b"},{"fileReference":"bfdfe7dc352907fc980b868725387e98376eb6b21e867b2936731a0373f7aa37","guid":"bfdfe7dc352907fc980b868725387e98b4903ef8aab6ee5d2013a62dd68cd9e2"},{"fileReference":"bfdfe7dc352907fc980b868725387e98b463364ff9c18b81a6609b062a5130db","guid":"bfdfe7dc352907fc980b868725387e98dae8da49ee66225cec8f78b90bb90e08"},{"fileReference":"bfdfe7dc352907fc980b868725387e988d11b2e1b05020946624f2f29892aa00","guid":"bfdfe7dc352907fc980b868725387e9860cc5b62aa842becbf29536a0e0e5ddc"},{"fileReference":"bfdfe7dc352907fc980b868725387e98b7defa3347432052375b438e2e2a471d","guid":"bfdfe7dc352907fc980b868725387e98537bc38de94e86ea3eafe19bfd748385"},{"fileReference":"bfdfe7dc352907fc980b868725387e987e7eb9b69db6e27a15c85f9fac88c21b","guid":"bfdfe7dc352907fc980b868725387e98d171e9a43c9ad72ccf75147b91fef59f"},{"fileReference":"bfdfe7dc352907fc980b868725387e98e94d1578f99b30508d8845d701648ecd","guid":"bfdfe7dc352907fc980b868725387e98179b240c7711b0f517df07147048aa70"},{"fileReference":"bfdfe7dc352907fc980b868725387e9812938caf7996c6d80dbf9271d3a6f958","guid":"bfdfe7dc352907fc980b868725387e9887a5a0c6d677d35a77b0063e1e8b376d"},{"fileReference":"bfdfe7dc352907fc980b868725387e98f3d32e8ce6d42e2d053519de5c184f67","guid":"bfdfe7dc352907fc980b868725387e98c1d9c5ff2afc41420943cc5dab781b88"},{"fileReference":"bfdfe7dc352907fc980b868725387e98c5d01b3d56827bfde5187df4ae8ae6f7","guid":"bfdfe7dc352907fc980b868725387e98802e776da498f4fa7311d48fe843398a"},{"fileReference":"bfdfe7dc352907fc980b868725387e980bace14250c740b8f01102fed49a6f3f","guid":"bfdfe7dc352907fc980b868725387e98c21d248fccb0f11f2d9e541ae61496ee"},{"fileReference":"bfdfe7dc352907fc980b868725387e98bd63cec024b8004a2cfea6c1f3c3a16d","guid":"bfdfe7dc352907fc980b868725387e98d5bfc081c61d2b9bbd081fecbb540f9a"},{"fileReference":"bfdfe7dc352907fc980b868725387e98f249276cf2cb89b2af74b98fc236dc19","guid":"bfdfe7dc352907fc980b868725387e98a05f02e6a460453a5e366130f5b7e817"},{"fileReference":"bfdfe7dc352907fc980b868725387e98741d531661b69bd4c010ad24b33cb126","guid":"bfdfe7dc352907fc980b868725387e9859a2d4a9bea3dcb9a4049d90b162ddfb"},{"fileReference":"bfdfe7dc352907fc980b868725387e98fad610585409b4155dfb77dfb11aaff8","guid":"bfdfe7dc352907fc980b868725387e984cb33669d0fc2f1151941641f49adf1d"},{"fileReference":"bfdfe7dc352907fc980b868725387e98b8c9eb74f63ffa618a81f634e2d0e973","guid":"bfdfe7dc352907fc980b868725387e98a250ec6ed2cd0c0620b4ed10e319cbea"},{"fileReference":"bfdfe7dc352907fc980b868725387e9810aa22726b627e7bbff26562ab33a902","guid":"bfdfe7dc352907fc980b868725387e98ec7bc7911ce51ee4a74d5a9d79e4b81d"},{"fileReference":"bfdfe7dc352907fc980b868725387e98b6a6fe4795e9ccd8158ae4c0af0f8c8c","guid":"bfdfe7dc352907fc980b868725387e98c1348845b34fd1ccfb27a623c0925d6c"},{"fileReference":"bfdfe7dc352907fc980b868725387e987bc99a6470d3a1db520bcbccc094ac70","guid":"bfdfe7dc352907fc980b868725387e9817c4f59b351dc085bada6d1090a7bc1d"},{"fileReference":"bfdfe7dc352907fc980b868725387e9857856e03e3b248fde2b403cff7be0c2d","guid":"bfdfe7dc352907fc980b868725387e981653f76ca28d11c081272170f278244b"},{"fileReference":"bfdfe7dc352907fc980b868725387e9858b4d3f93823a7a844e9af48e325ea6b","guid":"bfdfe7dc352907fc980b868725387e9847b84a17fa22432785c8cfeff56d77ff"},{"fileReference":"bfdfe7dc352907fc980b868725387e98f1cdf8141b4e6f72ce96cfc4e114ac93","guid":"bfdfe7dc352907fc980b868725387e98a30c157ebe1e2c286a049b647e73d12d"},{"fileReference":"bfdfe7dc352907fc980b868725387e9820c91663ac328caa6a772dc1aec7f895","guid":"bfdfe7dc352907fc980b868725387e98471e007b019b75823f218dd072af8122"},{"fileReference":"bfdfe7dc352907fc980b868725387e98c40558907257758691a97ebe7d32550e","guid":"bfdfe7dc352907fc980b868725387e9879cb994437901dc58b69df9e2edbe461"},{"fileReference":"bfdfe7dc352907fc980b868725387e988613cca076d4233fbc8f533d7bf66208","guid":"bfdfe7dc352907fc980b868725387e98294c4ee66a770ac5b789fa21d668ef9b"},{"fileReference":"bfdfe7dc352907fc980b868725387e988bfe961a333b087f09acd251c89287f8","guid":"bfdfe7dc352907fc980b868725387e98e05ccb8902dabfc7b53aca6f5feeb0f4"},{"fileReference":"bfdfe7dc352907fc980b868725387e987e9e853cad7160fab37152132380f5fa","guid":"bfdfe7dc352907fc980b868725387e98b48d5ab40647a5926154fc9d16501b75"}],"guid":"bfdfe7dc352907fc980b868725387e98521823472574b05b8a3113867ad0de75","type":"com.apple.buildphase.sources"},{"buildFiles":[{"fileReference":"bfdfe7dc352907fc980b868725387e98b14af7c49882340ad551cb13b0a1e06d","guid":"bfdfe7dc352907fc980b868725387e980bef1b6724982795f70512f70c223133"},{"fileReference":"bfdfe7dc352907fc980b868725387e982680e93f57d9a3d8e73bd93b7e3e0f36","guid":"bfdfe7dc352907fc980b868725387e98188335ffc04885b6f4f913da8f654d80"}],"guid":"bfdfe7dc352907fc980b868725387e98dd5edf74ef26b6152a6221e71924088d","type":"com.apple.buildphase.frameworks"},{"buildFiles":[{"guid":"bfdfe7dc352907fc980b868725387e98ff60c0ecd70eb6e2d3c850b3b15ef431","targetReference":"bfdfe7dc352907fc980b868725387e9826e2628dc041aabe2d77e75ccb1dc95b"}],"guid":"bfdfe7dc352907fc980b868725387e98b874019f1f0b32af2334d21070667d27","type":"com.apple.buildphase.resources"}],"buildRules":[],"dependencies":[{"guid":"bfdfe7dc352907fc980b868725387e9826e2628dc041aabe2d77e75ccb1dc95b","name":"SDWebImage-SDWebImage"}],"guid":"bfdfe7dc352907fc980b868725387e98c46180aea4e87057640961e6db37df0d","name":"SDWebImage","predominantSourceCodeLanguage":"Xcode.SourceCodeLanguage.Objective-C-Plus-Plus","productReference":{"guid":"bfdfe7dc352907fc980b868725387e98880bd43228ac3a23ccb630571006ecd9","name":"SDWebImage.framework","type":"product"},"productTypeIdentifier":"com.apple.product-type.framework","provisioningSourceData":[{"bundleIdentifierFromInfoPlist":"${PRODUCT_BUNDLE_IDENTIFIER}","configurationName":"Debug","provisioningStyle":1},{"bundleIdentifierFromInfoPlist":"${PRODUCT_BUNDLE_IDENTIFIER}","configurationName":"Profile","provisioningStyle":1},{"bundleIdentifierFromInfoPlist":"${PRODUCT_BUNDLE_IDENTIFIER}","configurationName":"Release","provisioningStyle":1}],"type":"standard"} \ No newline at end of file diff --git a/mih_ui/android/build/ios/XCBuildData/PIFCache/target/TARGET@v11_hash=98c62b097118c3a71fbcc1ac381d0554-json b/mih_ui/android/build/ios/XCBuildData/PIFCache/target/TARGET@v11_hash=98c62b097118c3a71fbcc1ac381d0554-json new file mode 100644 index 00000000..3ad6be28 --- /dev/null +++ b/mih_ui/android/build/ios/XCBuildData/PIFCache/target/TARGET@v11_hash=98c62b097118c3a71fbcc1ac381d0554-json @@ -0,0 +1 @@ +{"buildConfigurations":[{"baseConfigurationFileReference":"bfdfe7dc352907fc980b868725387e98e8f5202bf6c2927877bbede594254bac","buildSettings":{"CODE_SIGNING_ALLOWED":"NO","CODE_SIGNING_IDENTITY":"-","CODE_SIGNING_REQUIRED":"NO","CONFIGURATION_BUILD_DIR":"$(BUILD_DIR)/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME)/FirebaseCoreExtension","EXPANDED_CODE_SIGN_IDENTITY":"-","IBSC_MODULE":"FirebaseCoreExtension","INFOPLIST_FILE":"Target Support Files/FirebaseCoreExtension/ResourceBundle-FirebaseCoreExtension_Privacy-FirebaseCoreExtension-Info.plist","IPHONEOS_DEPLOYMENT_TARGET":"15.0","ONLY_ACTIVE_ARCH":"NO","PRODUCT_NAME":"FirebaseCoreExtension_Privacy","SDKROOT":"iphoneos","SKIP_INSTALL":"YES","TARGETED_DEVICE_FAMILY":"1,2","WRAPPER_EXTENSION":"bundle"},"guid":"bfdfe7dc352907fc980b868725387e9804aab7798c2569699b967adcd034ffe7","name":"Debug"},{"baseConfigurationFileReference":"bfdfe7dc352907fc980b868725387e986a53acd8d9569d0c22497ed69917f900","buildSettings":{"CLANG_ENABLE_OBJC_WEAK":"NO","CODE_SIGNING_ALLOWED":"NO","CODE_SIGNING_IDENTITY":"-","CODE_SIGNING_REQUIRED":"NO","CONFIGURATION_BUILD_DIR":"$(BUILD_DIR)/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME)/FirebaseCoreExtension","EXPANDED_CODE_SIGN_IDENTITY":"-","IBSC_MODULE":"FirebaseCoreExtension","INFOPLIST_FILE":"Target Support Files/FirebaseCoreExtension/ResourceBundle-FirebaseCoreExtension_Privacy-FirebaseCoreExtension-Info.plist","IPHONEOS_DEPLOYMENT_TARGET":"15.0","PRODUCT_NAME":"FirebaseCoreExtension_Privacy","SDKROOT":"iphoneos","SKIP_INSTALL":"YES","TARGETED_DEVICE_FAMILY":"1,2","VALIDATE_PRODUCT":"YES","WRAPPER_EXTENSION":"bundle"},"guid":"bfdfe7dc352907fc980b868725387e98f0fbb6af706c4937a9ca2f9ce650ab9e","name":"Profile"},{"baseConfigurationFileReference":"bfdfe7dc352907fc980b868725387e986a53acd8d9569d0c22497ed69917f900","buildSettings":{"CODE_SIGNING_ALLOWED":"NO","CODE_SIGNING_IDENTITY":"-","CODE_SIGNING_REQUIRED":"NO","CONFIGURATION_BUILD_DIR":"$(BUILD_DIR)/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME)/FirebaseCoreExtension","EXPANDED_CODE_SIGN_IDENTITY":"-","IBSC_MODULE":"FirebaseCoreExtension","INFOPLIST_FILE":"Target Support Files/FirebaseCoreExtension/ResourceBundle-FirebaseCoreExtension_Privacy-FirebaseCoreExtension-Info.plist","IPHONEOS_DEPLOYMENT_TARGET":"15.0","PRODUCT_NAME":"FirebaseCoreExtension_Privacy","SDKROOT":"iphoneos","SKIP_INSTALL":"YES","TARGETED_DEVICE_FAMILY":"1,2","WRAPPER_EXTENSION":"bundle"},"guid":"bfdfe7dc352907fc980b868725387e9814f84f30e8594a9183e1cdf5147d537e","name":"Release"}],"buildPhases":[{"buildFiles":[],"guid":"bfdfe7dc352907fc980b868725387e989ea3c1c7558f7911245d82f6428108f7","type":"com.apple.buildphase.sources"},{"buildFiles":[],"guid":"bfdfe7dc352907fc980b868725387e98ad882a80f21c1574859d5acd7f84c850","type":"com.apple.buildphase.frameworks"},{"buildFiles":[{"fileReference":"bfdfe7dc352907fc980b868725387e98adf015b8b23a4183c14442061cb3cae9","guid":"bfdfe7dc352907fc980b868725387e981bbb7fabc1bd01c01460062904a1a61c"}],"guid":"bfdfe7dc352907fc980b868725387e983d4c24a29d73e7e411f18e4971109818","type":"com.apple.buildphase.resources"}],"buildRules":[],"dependencies":[],"guid":"bfdfe7dc352907fc980b868725387e98c04ead258c2ba3f656422d1784107881","name":"FirebaseCoreExtension-FirebaseCoreExtension_Privacy","productReference":{"guid":"bfdfe7dc352907fc980b868725387e988df9a93510eab8c6f1cb7471d90295f7","name":"FirebaseCoreExtension_Privacy.bundle","type":"product"},"productTypeIdentifier":"com.apple.product-type.bundle","provisioningSourceData":[{"bundleIdentifierFromInfoPlist":"${PRODUCT_BUNDLE_IDENTIFIER}","configurationName":"Debug","provisioningStyle":0},{"bundleIdentifierFromInfoPlist":"${PRODUCT_BUNDLE_IDENTIFIER}","configurationName":"Profile","provisioningStyle":0},{"bundleIdentifierFromInfoPlist":"${PRODUCT_BUNDLE_IDENTIFIER}","configurationName":"Release","provisioningStyle":0}],"type":"standard"} \ No newline at end of file diff --git a/mih_ui/android/build/ios/XCBuildData/PIFCache/target/TARGET@v11_hash=a067526aa1156f18ea027d11109a29d4-json b/mih_ui/android/build/ios/XCBuildData/PIFCache/target/TARGET@v11_hash=a067526aa1156f18ea027d11109a29d4-json new file mode 100644 index 00000000..1c0a9b63 --- /dev/null +++ b/mih_ui/android/build/ios/XCBuildData/PIFCache/target/TARGET@v11_hash=a067526aa1156f18ea027d11109a29d4-json @@ -0,0 +1 @@ +{"buildConfigurations":[{"baseConfigurationFileReference":"bfdfe7dc352907fc980b868725387e988dc0dcaabffa36a9e85d057769df808d","buildSettings":{"CLANG_ENABLE_OBJC_WEAK":"NO","CLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER":"NO","CODE_SIGN_IDENTITY[sdk=appletvos*]":"","CODE_SIGN_IDENTITY[sdk=iphoneos*]":"","CODE_SIGN_IDENTITY[sdk=watchos*]":"","CURRENT_PROJECT_VERSION":"1","DYLIB_COMPATIBILITY_VERSION":"1","DYLIB_CURRENT_VERSION":"1","DYLIB_INSTALL_NAME_BASE":"@rpath","ENABLE_BITCODE":"NO","ENABLE_MODULE_VERIFIER":"NO","ENABLE_USER_SCRIPT_SANDBOXING":"NO","EXCLUDED_ARCHS[sdk=iphoneos*]":"$(inherited) armv7","EXCLUDED_ARCHS[sdk=iphonesimulator*]":"$(inherited) i386","FRAMEWORK_SEARCH_PATHS[sdk=iphoneos*]":"\"/Users/yaso_meth/Git/flutter/bin/cache/artifacts/engine/ios/Flutter.xcframework/ios-arm64\" $(inherited)","FRAMEWORK_SEARCH_PATHS[sdk=iphonesimulator*]":"\"/Users/yaso_meth/Git/flutter/bin/cache/artifacts/engine/ios/Flutter.xcframework/ios-arm64_x86_64-simulator\" $(inherited)","GCC_PREFIX_HEADER":"Target Support Files/google_mobile_ads/google_mobile_ads-prefix.pch","GENERATE_INFOPLIST_FILE":"NO","INFOPLIST_FILE":"Target Support Files/google_mobile_ads/google_mobile_ads-Info.plist","INSTALL_PATH":"$(LOCAL_LIBRARY_DIR)/Frameworks","LD_RUNPATH_SEARCH_PATHS":"$(inherited) @executable_path/Frameworks @loader_path/Frameworks","MACH_O_TYPE":"staticlib","MODULEMAP_FILE":"Target Support Files/google_mobile_ads/google_mobile_ads.modulemap","ONLY_ACTIVE_ARCH":"NO","OTHER_LDFLAGS":"$(inherited) -framework Flutter","PRODUCT_MODULE_NAME":"google_mobile_ads","PRODUCT_NAME":"google_mobile_ads","SDKROOT":"iphoneos","SKIP_INSTALL":"YES","SWIFT_ACTIVE_COMPILATION_CONDITIONS":"$(inherited) ","SWIFT_INSTALL_OBJC_HEADER":"YES","SWIFT_VERSION":"5.0","TARGETED_DEVICE_FAMILY":"1,2","VALID_ARCHS[sdk=iphonesimulator*]":"$(ARCHS_STANDARD)","VERSIONING_SYSTEM":"apple-generic","VERSION_INFO_PREFIX":""},"guid":"bfdfe7dc352907fc980b868725387e98f60f21207bdf48370aadaa7a5944056e","name":"Debug"},{"baseConfigurationFileReference":"bfdfe7dc352907fc980b868725387e987e81c25c7cd2ea8e1b445f8bd4d6b142","buildSettings":{"CLANG_ENABLE_OBJC_WEAK":"NO","CLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER":"NO","CODE_SIGN_IDENTITY[sdk=appletvos*]":"","CODE_SIGN_IDENTITY[sdk=iphoneos*]":"","CODE_SIGN_IDENTITY[sdk=watchos*]":"","CURRENT_PROJECT_VERSION":"1","DYLIB_COMPATIBILITY_VERSION":"1","DYLIB_CURRENT_VERSION":"1","DYLIB_INSTALL_NAME_BASE":"@rpath","ENABLE_BITCODE":"NO","ENABLE_MODULE_VERIFIER":"NO","ENABLE_USER_SCRIPT_SANDBOXING":"NO","EXCLUDED_ARCHS[sdk=iphoneos*]":"$(inherited) armv7","EXCLUDED_ARCHS[sdk=iphonesimulator*]":"$(inherited) i386","FRAMEWORK_SEARCH_PATHS[sdk=iphoneos*]":"\"/Users/yaso_meth/Git/flutter/bin/cache/artifacts/engine/ios-release/Flutter.xcframework/ios-arm64\" $(inherited)","FRAMEWORK_SEARCH_PATHS[sdk=iphonesimulator*]":"\"/Users/yaso_meth/Git/flutter/bin/cache/artifacts/engine/ios-release/Flutter.xcframework/ios-arm64_x86_64-simulator\" $(inherited)","GCC_PREFIX_HEADER":"Target Support Files/google_mobile_ads/google_mobile_ads-prefix.pch","GENERATE_INFOPLIST_FILE":"NO","INFOPLIST_FILE":"Target Support Files/google_mobile_ads/google_mobile_ads-Info.plist","INSTALL_PATH":"$(LOCAL_LIBRARY_DIR)/Frameworks","LD_RUNPATH_SEARCH_PATHS":"$(inherited) @executable_path/Frameworks @loader_path/Frameworks","MACH_O_TYPE":"staticlib","MODULEMAP_FILE":"Target Support Files/google_mobile_ads/google_mobile_ads.modulemap","OTHER_LDFLAGS":"$(inherited) -framework Flutter","PRODUCT_MODULE_NAME":"google_mobile_ads","PRODUCT_NAME":"google_mobile_ads","SDKROOT":"iphoneos","SKIP_INSTALL":"YES","SWIFT_ACTIVE_COMPILATION_CONDITIONS":"$(inherited) ","SWIFT_INSTALL_OBJC_HEADER":"YES","SWIFT_VERSION":"5.0","TARGETED_DEVICE_FAMILY":"1,2","VALIDATE_PRODUCT":"YES","VALID_ARCHS[sdk=iphonesimulator*]":"$(ARCHS_STANDARD)","VERSIONING_SYSTEM":"apple-generic","VERSION_INFO_PREFIX":""},"guid":"bfdfe7dc352907fc980b868725387e98ca83b02fd91b34a498c4c1d10d117548","name":"Profile"},{"baseConfigurationFileReference":"bfdfe7dc352907fc980b868725387e987e81c25c7cd2ea8e1b445f8bd4d6b142","buildSettings":{"CLANG_ENABLE_OBJC_WEAK":"NO","CLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER":"NO","CODE_SIGN_IDENTITY[sdk=appletvos*]":"","CODE_SIGN_IDENTITY[sdk=iphoneos*]":"","CODE_SIGN_IDENTITY[sdk=watchos*]":"","CURRENT_PROJECT_VERSION":"1","DYLIB_COMPATIBILITY_VERSION":"1","DYLIB_CURRENT_VERSION":"1","DYLIB_INSTALL_NAME_BASE":"@rpath","ENABLE_BITCODE":"NO","ENABLE_MODULE_VERIFIER":"NO","ENABLE_USER_SCRIPT_SANDBOXING":"NO","EXCLUDED_ARCHS[sdk=iphoneos*]":"$(inherited) armv7","EXCLUDED_ARCHS[sdk=iphonesimulator*]":"$(inherited) i386","FRAMEWORK_SEARCH_PATHS[sdk=iphoneos*]":"\"/Users/yaso_meth/Git/flutter/bin/cache/artifacts/engine/ios-release/Flutter.xcframework/ios-arm64\" $(inherited)","FRAMEWORK_SEARCH_PATHS[sdk=iphonesimulator*]":"\"/Users/yaso_meth/Git/flutter/bin/cache/artifacts/engine/ios-release/Flutter.xcframework/ios-arm64_x86_64-simulator\" $(inherited)","GCC_PREFIX_HEADER":"Target Support Files/google_mobile_ads/google_mobile_ads-prefix.pch","GENERATE_INFOPLIST_FILE":"NO","INFOPLIST_FILE":"Target Support Files/google_mobile_ads/google_mobile_ads-Info.plist","INSTALL_PATH":"$(LOCAL_LIBRARY_DIR)/Frameworks","LD_RUNPATH_SEARCH_PATHS":"$(inherited) @executable_path/Frameworks @loader_path/Frameworks","MACH_O_TYPE":"staticlib","MODULEMAP_FILE":"Target Support Files/google_mobile_ads/google_mobile_ads.modulemap","OTHER_LDFLAGS":"$(inherited) -framework Flutter","PRODUCT_MODULE_NAME":"google_mobile_ads","PRODUCT_NAME":"google_mobile_ads","SDKROOT":"iphoneos","SKIP_INSTALL":"YES","SWIFT_ACTIVE_COMPILATION_CONDITIONS":"$(inherited) ","SWIFT_INSTALL_OBJC_HEADER":"YES","SWIFT_VERSION":"5.0","TARGETED_DEVICE_FAMILY":"1,2","VALIDATE_PRODUCT":"YES","VALID_ARCHS[sdk=iphonesimulator*]":"$(ARCHS_STANDARD)","VERSIONING_SYSTEM":"apple-generic","VERSION_INFO_PREFIX":""},"guid":"bfdfe7dc352907fc980b868725387e98d212063812730634d67c1838935e42c2","name":"Release"}],"buildPhases":[{"buildFiles":[{"fileReference":"bfdfe7dc352907fc980b868725387e984240dfeec000ca8d0ac4a90a031aaf0a","guid":"bfdfe7dc352907fc980b868725387e98fc3902591610fa8822f0952c44c23f1c","headerVisibility":"public"},{"fileReference":"bfdfe7dc352907fc980b868725387e9890fd4326c9f214196bd5a0490007afcd","guid":"bfdfe7dc352907fc980b868725387e9807f209f9c64cb7b32ca06eaaba47c866","headerVisibility":"public"},{"fileReference":"bfdfe7dc352907fc980b868725387e984d482976b92aa362238438f33e1d3847","guid":"bfdfe7dc352907fc980b868725387e98f5ea5c464c7a684d53e95f4da462ac34","headerVisibility":"public"},{"fileReference":"bfdfe7dc352907fc980b868725387e9835c6106e9c677e5754054f0a9010d0fb","guid":"bfdfe7dc352907fc980b868725387e988a64f85748721529c8eb1e4cfa6c20e1","headerVisibility":"public"},{"fileReference":"bfdfe7dc352907fc980b868725387e981f6abf8441aeddf38e2ee5b6e097cc8f","guid":"bfdfe7dc352907fc980b868725387e9815505fdc4ca0eafa4100498d2941a176","headerVisibility":"public"},{"fileReference":"bfdfe7dc352907fc980b868725387e989cc1f81c38bb9851f4050d8234e27827","guid":"bfdfe7dc352907fc980b868725387e98fb5e81d7cbe6ab1fdb387a41eae62b74","headerVisibility":"public"},{"fileReference":"bfdfe7dc352907fc980b868725387e98b3f9c06c5fdf0e42530f281cca9fc44f","guid":"bfdfe7dc352907fc980b868725387e9885decc54404980d6c525e77bf65fe873","headerVisibility":"public"},{"fileReference":"bfdfe7dc352907fc980b868725387e98c6a0457f533d1b1ca15ab8a5364ef37b","guid":"bfdfe7dc352907fc980b868725387e9817ddcb7b3c12a1eb9d89a5987d5a55c5","headerVisibility":"public"},{"fileReference":"bfdfe7dc352907fc980b868725387e9864b4634ab3a98b02e906a6583e29134f","guid":"bfdfe7dc352907fc980b868725387e9864d5ee22ae45b1d9c3b93e03407c955d","headerVisibility":"public"},{"fileReference":"bfdfe7dc352907fc980b868725387e985ef5b1cd5b86a3e538a197c1ab9a9812","guid":"bfdfe7dc352907fc980b868725387e98ca59e34ce3e886935bdd2072ff528b56","headerVisibility":"public"},{"fileReference":"bfdfe7dc352907fc980b868725387e98d65e11739777d0c59cb6a89a4b9c2e57","guid":"bfdfe7dc352907fc980b868725387e9843b7cb1689bb36b536d4ba3242d513d2","headerVisibility":"public"},{"fileReference":"bfdfe7dc352907fc980b868725387e9881de238705aaccdfd3c39ad39d8a29c1","guid":"bfdfe7dc352907fc980b868725387e9842eff5ae9b47f7f3bf180fb0811eda4a","headerVisibility":"public"},{"fileReference":"bfdfe7dc352907fc980b868725387e9885218f34df8f4718b80b621799778241","guid":"bfdfe7dc352907fc980b868725387e98b766a8777b3597b0a6631df2c3e49433","headerVisibility":"public"},{"fileReference":"bfdfe7dc352907fc980b868725387e98ae8af11166b7347d9e0d43f78afdb3c0","guid":"bfdfe7dc352907fc980b868725387e98edd82d4594170ffe44735267e3a9b49b","headerVisibility":"public"},{"fileReference":"bfdfe7dc352907fc980b868725387e9832d9b8c3de108888f7fc0fad5d829a47","guid":"bfdfe7dc352907fc980b868725387e98e1c347924c03a72d30b98fcb5c2b5a48","headerVisibility":"public"},{"fileReference":"bfdfe7dc352907fc980b868725387e98809c667f0a0b2817398014a088224434","guid":"bfdfe7dc352907fc980b868725387e9879fad702e858c9d255ce4e8b9f4693c6","headerVisibility":"public"},{"fileReference":"bfdfe7dc352907fc980b868725387e9816ecde728aa88cc29920a74c71a2d3db","guid":"bfdfe7dc352907fc980b868725387e98af243acd6a89584103cbd8c7d7e4675c","headerVisibility":"public"},{"fileReference":"bfdfe7dc352907fc980b868725387e98ef6f527da899ce3d0d655df4fdba772c","guid":"bfdfe7dc352907fc980b868725387e989f459d5eb8aed64c82172737f80d33c2","headerVisibility":"public"},{"fileReference":"bfdfe7dc352907fc980b868725387e988b4c2f093c31a9f200c8f45161df3c2a","guid":"bfdfe7dc352907fc980b868725387e9829ce672bdd912bb92a5b49532c33d0cf","headerVisibility":"public"},{"fileReference":"bfdfe7dc352907fc980b868725387e987a51e4f40d97cb9adc27b2e42cc25b62","guid":"bfdfe7dc352907fc980b868725387e98f4c5fcae42d97349e67a9ccb65447633","headerVisibility":"public"},{"fileReference":"bfdfe7dc352907fc980b868725387e9864317c934a174460acab2d786935fa3a","guid":"bfdfe7dc352907fc980b868725387e980e7f02171e5d41504b15837490e1ed45","headerVisibility":"public"},{"fileReference":"bfdfe7dc352907fc980b868725387e98fd894f45ca741629b38f8f4692bca46a","guid":"bfdfe7dc352907fc980b868725387e98e48dc8c919394b5e1d784da833f87967","headerVisibility":"public"},{"fileReference":"bfdfe7dc352907fc980b868725387e98b98042b15a1b65a5f73b8fcdf63acd94","guid":"bfdfe7dc352907fc980b868725387e98aacaef33e940fbd51a0c7b0e82ca2360","headerVisibility":"public"},{"fileReference":"bfdfe7dc352907fc980b868725387e989f6df57e9714d47de1bef126b3e8e39b","guid":"bfdfe7dc352907fc980b868725387e98a13e606cbbfd39a170e763f81b8c82b0","headerVisibility":"public"}],"guid":"bfdfe7dc352907fc980b868725387e985da9e827eef44a73ab95aff9462753c7","type":"com.apple.buildphase.headers"},{"buildFiles":[{"fileReference":"bfdfe7dc352907fc980b868725387e98f5aab5940ee683a0f59b1e8870b802dc","guid":"bfdfe7dc352907fc980b868725387e98fcdfb9a416fcb39e0703fd8f8353166a"},{"fileReference":"bfdfe7dc352907fc980b868725387e9806b9260a8591ca252226b8bacbb7c485","guid":"bfdfe7dc352907fc980b868725387e9863549f145557ef47cae8c38144d2d0ff"},{"fileReference":"bfdfe7dc352907fc980b868725387e981c6389e12e9d4a39af9fc2b794895960","guid":"bfdfe7dc352907fc980b868725387e9836f9aa8313b7dc0da597b6bba4715b54"},{"fileReference":"bfdfe7dc352907fc980b868725387e986b6b176839f0b199c05b9bfda1b0289a","guid":"bfdfe7dc352907fc980b868725387e9889634419cf13bf11f5a0962de58c2e7e"},{"fileReference":"bfdfe7dc352907fc980b868725387e98e42ceda20f7996f4f1db9cb68f5f0e82","guid":"bfdfe7dc352907fc980b868725387e98b03a8074c560b4e6d87f39b4ce8a1388"},{"fileReference":"bfdfe7dc352907fc980b868725387e98220dcc23917995a27d0f53057040c555","guid":"bfdfe7dc352907fc980b868725387e9852d9aa72fc505723d0d1a998280f43d8"},{"fileReference":"bfdfe7dc352907fc980b868725387e981d5d659ea3fece667574bfd04ef72e19","guid":"bfdfe7dc352907fc980b868725387e98703ec30c0f6dc44546d36faf52f19a53"},{"fileReference":"bfdfe7dc352907fc980b868725387e986b796972877c18df3d6f5af3cab27e5c","guid":"bfdfe7dc352907fc980b868725387e98c0a427cd67ba5676bb8d7be7bcdbbf25"},{"fileReference":"bfdfe7dc352907fc980b868725387e988d7783f13036a505334aa6f36adb89c1","guid":"bfdfe7dc352907fc980b868725387e98e6d8341d3faae82be8e4fa5ce1e8e33e"},{"fileReference":"bfdfe7dc352907fc980b868725387e983ac31ec6480613fd151e1b624e682774","guid":"bfdfe7dc352907fc980b868725387e988317fab1628f437d63db45ecb4a066d8"},{"fileReference":"bfdfe7dc352907fc980b868725387e982281f17e05329e9e471231e98f942168","guid":"bfdfe7dc352907fc980b868725387e98b90a390daffb6b05d6e7b1b7c4ea7e7d"},{"fileReference":"bfdfe7dc352907fc980b868725387e98147317a5801ba72c5dde82a8e257712f","guid":"bfdfe7dc352907fc980b868725387e9853895820dca86d44e54fa26282d4ff84"},{"fileReference":"bfdfe7dc352907fc980b868725387e98760f6bc37adfc3ac8632fa54f20c218f","guid":"bfdfe7dc352907fc980b868725387e9860c4ef284b6c1adfec9622391b781ad3"},{"fileReference":"bfdfe7dc352907fc980b868725387e9815cfebf454d95d6d62ffbab198236c6c","guid":"bfdfe7dc352907fc980b868725387e98ea7bc478420d17681a494a8d8f3f65db"},{"fileReference":"bfdfe7dc352907fc980b868725387e98048f3e8812e4b1dbde8a2d474f511920","guid":"bfdfe7dc352907fc980b868725387e983df14ef77635bd83b3fd1debb9136c51"},{"fileReference":"bfdfe7dc352907fc980b868725387e98e0475a3f5954ad23ef9e699046810e3b","guid":"bfdfe7dc352907fc980b868725387e98855019121a75246ee32dc26615ea17e3"},{"fileReference":"bfdfe7dc352907fc980b868725387e985ae4ef538e0272a808791bf1392f7c73","guid":"bfdfe7dc352907fc980b868725387e98cdd8508a934a9e834d5a29f64c865988"},{"fileReference":"bfdfe7dc352907fc980b868725387e981bf4bcbaf79a603383c23645090bc955","guid":"bfdfe7dc352907fc980b868725387e98d67b8d6e3b8ffe5c3335096e12a5d549"},{"fileReference":"bfdfe7dc352907fc980b868725387e98bb573db16d21ecd76a77b185c52f7253","guid":"bfdfe7dc352907fc980b868725387e988333ba14f3a1fcae6d60e2b422e436a9"},{"fileReference":"bfdfe7dc352907fc980b868725387e98e50cbcfd7237202c92423678a691838b","guid":"bfdfe7dc352907fc980b868725387e98da07a2d5bba557b3acc9dc679e97aa6b"},{"fileReference":"bfdfe7dc352907fc980b868725387e987e0d2c8d0bc0abdac28d339bd37fbf90","guid":"bfdfe7dc352907fc980b868725387e98de00129e3270ecf6ff3b9a1449b10c5c"}],"guid":"bfdfe7dc352907fc980b868725387e98ef387155c7be58dd1abcd21a411a4e6e","type":"com.apple.buildphase.sources"},{"buildFiles":[{"fileReference":"bfdfe7dc352907fc980b868725387e98b14af7c49882340ad551cb13b0a1e06d","guid":"bfdfe7dc352907fc980b868725387e98c961a969fb41a7bdab90c538b30528fd"}],"guid":"bfdfe7dc352907fc980b868725387e9817c34e700eb0a17b1be9eca81b57986b","type":"com.apple.buildphase.frameworks"},{"buildFiles":[],"guid":"bfdfe7dc352907fc980b868725387e984da9032ff76790acb4b37e742746ef15","type":"com.apple.buildphase.resources"}],"buildRules":[],"dependencies":[{"guid":"bfdfe7dc352907fc980b868725387e989da425bb6d6d5d8dbb95e4afffb82217","name":"Flutter"},{"guid":"bfdfe7dc352907fc980b868725387e98cd53d937e824fad9f4527eeeb684cb40","name":"Google-Mobile-Ads-SDK"},{"guid":"bfdfe7dc352907fc980b868725387e9804037656a8578d8e730f9d99c54e40e2","name":"google_mobile_ads-google_mobile_ads"},{"guid":"bfdfe7dc352907fc980b868725387e988efdc4dd0ac29b43123295eca853f4ed","name":"webview_flutter_wkwebview"}],"guid":"bfdfe7dc352907fc980b868725387e9811f9347c979613c5502173cd5b43060d","name":"google_mobile_ads","predominantSourceCodeLanguage":"Xcode.SourceCodeLanguage.Objective-C-Plus-Plus","productReference":{"guid":"bfdfe7dc352907fc980b868725387e98b1f16b2926bf8e21151b2cb149aa6540","name":"google_mobile_ads.framework","type":"product"},"productTypeIdentifier":"com.apple.product-type.framework","provisioningSourceData":[{"bundleIdentifierFromInfoPlist":"${PRODUCT_BUNDLE_IDENTIFIER}","configurationName":"Debug","provisioningStyle":1},{"bundleIdentifierFromInfoPlist":"${PRODUCT_BUNDLE_IDENTIFIER}","configurationName":"Profile","provisioningStyle":1},{"bundleIdentifierFromInfoPlist":"${PRODUCT_BUNDLE_IDENTIFIER}","configurationName":"Release","provisioningStyle":1}],"type":"standard"} \ No newline at end of file diff --git a/mih_ui/android/build/ios/XCBuildData/PIFCache/target/TARGET@v11_hash=a1626071b7e4461b7a78f87d063ecc17-json b/mih_ui/android/build/ios/XCBuildData/PIFCache/target/TARGET@v11_hash=a1626071b7e4461b7a78f87d063ecc17-json new file mode 100644 index 00000000..5c1b4d25 --- /dev/null +++ b/mih_ui/android/build/ios/XCBuildData/PIFCache/target/TARGET@v11_hash=a1626071b7e4461b7a78f87d063ecc17-json @@ -0,0 +1 @@ +{"buildConfigurations":[{"baseConfigurationFileReference":"bfdfe7dc352907fc980b868725387e98be516318204b40d33cd2aae70dc8508d","buildSettings":{"CLANG_ENABLE_OBJC_WEAK":"NO","CLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER":"NO","CODE_SIGN_IDENTITY[sdk=appletvos*]":"","CODE_SIGN_IDENTITY[sdk=iphoneos*]":"","CODE_SIGN_IDENTITY[sdk=watchos*]":"","CURRENT_PROJECT_VERSION":"1","DYLIB_COMPATIBILITY_VERSION":"1","DYLIB_CURRENT_VERSION":"1","DYLIB_INSTALL_NAME_BASE":"@rpath","ENABLE_BITCODE":"NO","ENABLE_MODULE_VERIFIER":"NO","ENABLE_USER_SCRIPT_SANDBOXING":"NO","EXCLUDED_ARCHS[sdk=iphoneos*]":"$(inherited) armv7","EXCLUDED_ARCHS[sdk=iphonesimulator*]":"$(inherited) i386","FRAMEWORK_SEARCH_PATHS[sdk=iphoneos*]":"\"/Users/yaso_meth/Git/flutter/bin/cache/artifacts/engine/ios/Flutter.xcframework/ios-arm64\" $(inherited)","FRAMEWORK_SEARCH_PATHS[sdk=iphonesimulator*]":"\"/Users/yaso_meth/Git/flutter/bin/cache/artifacts/engine/ios/Flutter.xcframework/ios-arm64_x86_64-simulator\" $(inherited)","GCC_PREFIX_HEADER":"Target Support Files/image_picker_ios/image_picker_ios-prefix.pch","GENERATE_INFOPLIST_FILE":"NO","INFOPLIST_FILE":"Target Support Files/image_picker_ios/image_picker_ios-Info.plist","INSTALL_PATH":"$(LOCAL_LIBRARY_DIR)/Frameworks","LD_RUNPATH_SEARCH_PATHS":"$(inherited) @executable_path/Frameworks @loader_path/Frameworks","MODULEMAP_FILE":"Target Support Files/image_picker_ios/image_picker_ios.modulemap","ONLY_ACTIVE_ARCH":"NO","OTHER_LDFLAGS":"$(inherited) -framework Flutter","PRODUCT_MODULE_NAME":"image_picker_ios","PRODUCT_NAME":"image_picker_ios","SDKROOT":"iphoneos","SKIP_INSTALL":"YES","SWIFT_ACTIVE_COMPILATION_CONDITIONS":"$(inherited) ","SWIFT_INSTALL_OBJC_HEADER":"YES","SWIFT_VERSION":"5.0","TARGETED_DEVICE_FAMILY":"1,2","VALID_ARCHS[sdk=iphonesimulator*]":"$(ARCHS_STANDARD)","VERSIONING_SYSTEM":"apple-generic","VERSION_INFO_PREFIX":""},"guid":"bfdfe7dc352907fc980b868725387e9864dece58fe8898e7f0b46391fe2d091f","name":"Debug"},{"baseConfigurationFileReference":"bfdfe7dc352907fc980b868725387e988b179e3ba3eb0643314ef47fd544fc52","buildSettings":{"CLANG_ENABLE_OBJC_WEAK":"NO","CLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER":"NO","CODE_SIGN_IDENTITY[sdk=appletvos*]":"","CODE_SIGN_IDENTITY[sdk=iphoneos*]":"","CODE_SIGN_IDENTITY[sdk=watchos*]":"","CURRENT_PROJECT_VERSION":"1","DYLIB_COMPATIBILITY_VERSION":"1","DYLIB_CURRENT_VERSION":"1","DYLIB_INSTALL_NAME_BASE":"@rpath","ENABLE_BITCODE":"NO","ENABLE_MODULE_VERIFIER":"NO","ENABLE_USER_SCRIPT_SANDBOXING":"NO","EXCLUDED_ARCHS[sdk=iphoneos*]":"$(inherited) armv7","EXCLUDED_ARCHS[sdk=iphonesimulator*]":"$(inherited) i386","FRAMEWORK_SEARCH_PATHS[sdk=iphoneos*]":"\"/Users/yaso_meth/Git/flutter/bin/cache/artifacts/engine/ios-release/Flutter.xcframework/ios-arm64\" $(inherited)","FRAMEWORK_SEARCH_PATHS[sdk=iphonesimulator*]":"\"/Users/yaso_meth/Git/flutter/bin/cache/artifacts/engine/ios-release/Flutter.xcframework/ios-arm64_x86_64-simulator\" $(inherited)","GCC_PREFIX_HEADER":"Target Support Files/image_picker_ios/image_picker_ios-prefix.pch","GENERATE_INFOPLIST_FILE":"NO","INFOPLIST_FILE":"Target Support Files/image_picker_ios/image_picker_ios-Info.plist","INSTALL_PATH":"$(LOCAL_LIBRARY_DIR)/Frameworks","LD_RUNPATH_SEARCH_PATHS":"$(inherited) @executable_path/Frameworks @loader_path/Frameworks","MODULEMAP_FILE":"Target Support Files/image_picker_ios/image_picker_ios.modulemap","OTHER_LDFLAGS":"$(inherited) -framework Flutter","PRODUCT_MODULE_NAME":"image_picker_ios","PRODUCT_NAME":"image_picker_ios","SDKROOT":"iphoneos","SKIP_INSTALL":"YES","SWIFT_ACTIVE_COMPILATION_CONDITIONS":"$(inherited) ","SWIFT_INSTALL_OBJC_HEADER":"YES","SWIFT_VERSION":"5.0","TARGETED_DEVICE_FAMILY":"1,2","VALIDATE_PRODUCT":"YES","VALID_ARCHS[sdk=iphonesimulator*]":"$(ARCHS_STANDARD)","VERSIONING_SYSTEM":"apple-generic","VERSION_INFO_PREFIX":""},"guid":"bfdfe7dc352907fc980b868725387e981b08ec94c515cc2b895c3ae9b4c03834","name":"Profile"},{"baseConfigurationFileReference":"bfdfe7dc352907fc980b868725387e988b179e3ba3eb0643314ef47fd544fc52","buildSettings":{"CLANG_ENABLE_OBJC_WEAK":"NO","CLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER":"NO","CODE_SIGN_IDENTITY[sdk=appletvos*]":"","CODE_SIGN_IDENTITY[sdk=iphoneos*]":"","CODE_SIGN_IDENTITY[sdk=watchos*]":"","CURRENT_PROJECT_VERSION":"1","DYLIB_COMPATIBILITY_VERSION":"1","DYLIB_CURRENT_VERSION":"1","DYLIB_INSTALL_NAME_BASE":"@rpath","ENABLE_BITCODE":"NO","ENABLE_MODULE_VERIFIER":"NO","ENABLE_USER_SCRIPT_SANDBOXING":"NO","EXCLUDED_ARCHS[sdk=iphoneos*]":"$(inherited) armv7","EXCLUDED_ARCHS[sdk=iphonesimulator*]":"$(inherited) i386","FRAMEWORK_SEARCH_PATHS[sdk=iphoneos*]":"\"/Users/yaso_meth/Git/flutter/bin/cache/artifacts/engine/ios-release/Flutter.xcframework/ios-arm64\" $(inherited)","FRAMEWORK_SEARCH_PATHS[sdk=iphonesimulator*]":"\"/Users/yaso_meth/Git/flutter/bin/cache/artifacts/engine/ios-release/Flutter.xcframework/ios-arm64_x86_64-simulator\" $(inherited)","GCC_PREFIX_HEADER":"Target Support Files/image_picker_ios/image_picker_ios-prefix.pch","GENERATE_INFOPLIST_FILE":"NO","INFOPLIST_FILE":"Target Support Files/image_picker_ios/image_picker_ios-Info.plist","INSTALL_PATH":"$(LOCAL_LIBRARY_DIR)/Frameworks","LD_RUNPATH_SEARCH_PATHS":"$(inherited) @executable_path/Frameworks @loader_path/Frameworks","MODULEMAP_FILE":"Target Support Files/image_picker_ios/image_picker_ios.modulemap","OTHER_LDFLAGS":"$(inherited) -framework Flutter","PRODUCT_MODULE_NAME":"image_picker_ios","PRODUCT_NAME":"image_picker_ios","SDKROOT":"iphoneos","SKIP_INSTALL":"YES","SWIFT_ACTIVE_COMPILATION_CONDITIONS":"$(inherited) ","SWIFT_INSTALL_OBJC_HEADER":"YES","SWIFT_VERSION":"5.0","TARGETED_DEVICE_FAMILY":"1,2","VALIDATE_PRODUCT":"YES","VALID_ARCHS[sdk=iphonesimulator*]":"$(ARCHS_STANDARD)","VERSIONING_SYSTEM":"apple-generic","VERSION_INFO_PREFIX":""},"guid":"bfdfe7dc352907fc980b868725387e982b03ce4519745554a82e5cffe58f25e2","name":"Release"}],"buildPhases":[{"buildFiles":[{"fileReference":"bfdfe7dc352907fc980b868725387e98455184b1ebf4d6916746f5fbc500d738","guid":"bfdfe7dc352907fc980b868725387e98b6791fb8e76ffddc1e11f5185e6ba9d9","headerVisibility":"public"},{"fileReference":"bfdfe7dc352907fc980b868725387e98c324ea36454852a92ca5c1e7c63badd3","guid":"bfdfe7dc352907fc980b868725387e982744c0d0f0a36505d1c15c23d6935447","headerVisibility":"public"},{"fileReference":"bfdfe7dc352907fc980b868725387e9874d33145b4eb026db783767a8627f331","guid":"bfdfe7dc352907fc980b868725387e9852492bcf209a038e7a16b3ac8411c283","headerVisibility":"public"},{"fileReference":"bfdfe7dc352907fc980b868725387e989aa410188bb1b807675bd70c43b501ec","guid":"bfdfe7dc352907fc980b868725387e987a1e9c44d52440ca1f5e324cd3b19909","headerVisibility":"public"},{"fileReference":"bfdfe7dc352907fc980b868725387e98bb38f172fc4f9f4727a3dedcca07fc48","guid":"bfdfe7dc352907fc980b868725387e98f8f8c2601b0779c699d2dac5bd278ac1","headerVisibility":"public"},{"fileReference":"bfdfe7dc352907fc980b868725387e98ee2e909a182ee943c5a04d5112d38a65","guid":"bfdfe7dc352907fc980b868725387e98db97cd107876494aea98961b286c86c1","headerVisibility":"public"},{"fileReference":"bfdfe7dc352907fc980b868725387e987912c452cf5c073488f6736d535565ca","guid":"bfdfe7dc352907fc980b868725387e98221b63a32b3332c8e7b2aaf405a29507","headerVisibility":"public"},{"fileReference":"bfdfe7dc352907fc980b868725387e9866acc8882d2e86af3542c91447a63240","guid":"bfdfe7dc352907fc980b868725387e9861e5543a107bb7225169297ccd2207c5","headerVisibility":"public"}],"guid":"bfdfe7dc352907fc980b868725387e987c543487347cac13b6462fae62598e7f","type":"com.apple.buildphase.headers"},{"buildFiles":[{"fileReference":"bfdfe7dc352907fc980b868725387e98566106fb34bacfb516ebf07d57920aa6","guid":"bfdfe7dc352907fc980b868725387e980e85bc855779f80744931a46e8bb9083"},{"fileReference":"bfdfe7dc352907fc980b868725387e98f8dc4d6581fb8f5b5c907ac0b21fbb8c","guid":"bfdfe7dc352907fc980b868725387e98c3e5c8ae8b4830c962871e88641350bc"},{"fileReference":"bfdfe7dc352907fc980b868725387e98247c332c7d249620a850bd09f2121a84","guid":"bfdfe7dc352907fc980b868725387e98c053e736621f9e5f8a4ad65a0f016f28"},{"fileReference":"bfdfe7dc352907fc980b868725387e98d989ee30069916d663cfe91d1c5986fe","guid":"bfdfe7dc352907fc980b868725387e9812f4be99a5a001879dcf3624e793e714"},{"fileReference":"bfdfe7dc352907fc980b868725387e9851702874b3473204d01c1a11a3c97351","guid":"bfdfe7dc352907fc980b868725387e98c8131c01c4a3f0decb5349a83ef7df1c"},{"fileReference":"bfdfe7dc352907fc980b868725387e981b14112e34d16a8429f88ce19e8279b2","guid":"bfdfe7dc352907fc980b868725387e98e0ab939fbafbd88342244f2b4a6d7f2e"},{"fileReference":"bfdfe7dc352907fc980b868725387e9822975da8370cfc43e8dbd1e7dc4f64f1","guid":"bfdfe7dc352907fc980b868725387e98d36dcd652bf15a28b5d5cb5df79be25e"}],"guid":"bfdfe7dc352907fc980b868725387e98ce67561b68c83c2e24888c94da999914","type":"com.apple.buildphase.sources"},{"buildFiles":[{"fileReference":"bfdfe7dc352907fc980b868725387e98b14af7c49882340ad551cb13b0a1e06d","guid":"bfdfe7dc352907fc980b868725387e98cf1fddec899afc6c9825c5eb5ec44493"}],"guid":"bfdfe7dc352907fc980b868725387e98434353ef3b38c3699582ee30b73fe6a8","type":"com.apple.buildphase.frameworks"},{"buildFiles":[{"guid":"bfdfe7dc352907fc980b868725387e9872ef11792920b3966776ea469c5092df","targetReference":"bfdfe7dc352907fc980b868725387e98082dc85da1fc941e5234c7cc1f11b27d"}],"guid":"bfdfe7dc352907fc980b868725387e9811e9e8a5f23273fd9234f4740a75ccb9","type":"com.apple.buildphase.resources"}],"buildRules":[],"dependencies":[{"guid":"bfdfe7dc352907fc980b868725387e989da425bb6d6d5d8dbb95e4afffb82217","name":"Flutter"},{"guid":"bfdfe7dc352907fc980b868725387e98082dc85da1fc941e5234c7cc1f11b27d","name":"image_picker_ios-image_picker_ios_privacy"}],"guid":"bfdfe7dc352907fc980b868725387e981f000f066404b97b12e9c4ca84d38d0f","name":"image_picker_ios","predominantSourceCodeLanguage":"Xcode.SourceCodeLanguage.Objective-C-Plus-Plus","productReference":{"guid":"bfdfe7dc352907fc980b868725387e988e06e8c3685b7c12032d8059f412f4cb","name":"image_picker_ios.framework","type":"product"},"productTypeIdentifier":"com.apple.product-type.framework","provisioningSourceData":[{"bundleIdentifierFromInfoPlist":"${PRODUCT_BUNDLE_IDENTIFIER}","configurationName":"Debug","provisioningStyle":1},{"bundleIdentifierFromInfoPlist":"${PRODUCT_BUNDLE_IDENTIFIER}","configurationName":"Profile","provisioningStyle":1},{"bundleIdentifierFromInfoPlist":"${PRODUCT_BUNDLE_IDENTIFIER}","configurationName":"Release","provisioningStyle":1}],"type":"standard"} \ No newline at end of file diff --git a/mih_ui/android/build/ios/XCBuildData/PIFCache/target/TARGET@v11_hash=a6be57b3049abd7b9f2b4e20f4ba91af-json b/mih_ui/android/build/ios/XCBuildData/PIFCache/target/TARGET@v11_hash=a6be57b3049abd7b9f2b4e20f4ba91af-json new file mode 100644 index 00000000..78dae6f9 --- /dev/null +++ b/mih_ui/android/build/ios/XCBuildData/PIFCache/target/TARGET@v11_hash=a6be57b3049abd7b9f2b4e20f4ba91af-json @@ -0,0 +1 @@ +{"buildConfigurations":[{"baseConfigurationFileReference":"bfdfe7dc352907fc980b868725387e98d8979ec56d38d5f43a66a4cc2fbcb401","buildSettings":{"CODE_SIGNING_ALLOWED":"NO","CODE_SIGNING_IDENTITY":"-","CODE_SIGNING_REQUIRED":"NO","CONFIGURATION_BUILD_DIR":"$(BUILD_DIR)/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME)/webview_flutter_wkwebview","EXPANDED_CODE_SIGN_IDENTITY":"-","IBSC_MODULE":"webview_flutter_wkwebview","INFOPLIST_FILE":"Target Support Files/webview_flutter_wkwebview/ResourceBundle-webview_flutter_wkwebview_privacy-webview_flutter_wkwebview-Info.plist","IPHONEOS_DEPLOYMENT_TARGET":"12.0","ONLY_ACTIVE_ARCH":"NO","PRODUCT_NAME":"webview_flutter_wkwebview_privacy","SDKROOT":"iphoneos","SKIP_INSTALL":"YES","TARGETED_DEVICE_FAMILY":"1,2","WRAPPER_EXTENSION":"bundle"},"guid":"bfdfe7dc352907fc980b868725387e98bada7907d535f3a8b4ff5ea15a0eccf0","name":"Debug"},{"baseConfigurationFileReference":"bfdfe7dc352907fc980b868725387e984206827662d5208f461a0eccfc0e621b","buildSettings":{"CLANG_ENABLE_OBJC_WEAK":"NO","CODE_SIGNING_ALLOWED":"NO","CODE_SIGNING_IDENTITY":"-","CODE_SIGNING_REQUIRED":"NO","CONFIGURATION_BUILD_DIR":"$(BUILD_DIR)/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME)/webview_flutter_wkwebview","EXPANDED_CODE_SIGN_IDENTITY":"-","IBSC_MODULE":"webview_flutter_wkwebview","INFOPLIST_FILE":"Target Support Files/webview_flutter_wkwebview/ResourceBundle-webview_flutter_wkwebview_privacy-webview_flutter_wkwebview-Info.plist","IPHONEOS_DEPLOYMENT_TARGET":"12.0","PRODUCT_NAME":"webview_flutter_wkwebview_privacy","SDKROOT":"iphoneos","SKIP_INSTALL":"YES","TARGETED_DEVICE_FAMILY":"1,2","VALIDATE_PRODUCT":"YES","WRAPPER_EXTENSION":"bundle"},"guid":"bfdfe7dc352907fc980b868725387e989442ce00206aca38985ec9f9cca4ebaa","name":"Profile"},{"baseConfigurationFileReference":"bfdfe7dc352907fc980b868725387e984206827662d5208f461a0eccfc0e621b","buildSettings":{"CODE_SIGNING_ALLOWED":"NO","CODE_SIGNING_IDENTITY":"-","CODE_SIGNING_REQUIRED":"NO","CONFIGURATION_BUILD_DIR":"$(BUILD_DIR)/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME)/webview_flutter_wkwebview","EXPANDED_CODE_SIGN_IDENTITY":"-","IBSC_MODULE":"webview_flutter_wkwebview","INFOPLIST_FILE":"Target Support Files/webview_flutter_wkwebview/ResourceBundle-webview_flutter_wkwebview_privacy-webview_flutter_wkwebview-Info.plist","IPHONEOS_DEPLOYMENT_TARGET":"12.0","PRODUCT_NAME":"webview_flutter_wkwebview_privacy","SDKROOT":"iphoneos","SKIP_INSTALL":"YES","TARGETED_DEVICE_FAMILY":"1,2","WRAPPER_EXTENSION":"bundle"},"guid":"bfdfe7dc352907fc980b868725387e980e63dd39c72da64ac849e5fa7a32455e","name":"Release"}],"buildPhases":[{"buildFiles":[],"guid":"bfdfe7dc352907fc980b868725387e98b71e13813068a8f42815fa6985ca3a16","type":"com.apple.buildphase.sources"},{"buildFiles":[],"guid":"bfdfe7dc352907fc980b868725387e980ce4cc1aa52fa13fc3aaa64b1179c020","type":"com.apple.buildphase.frameworks"},{"buildFiles":[{"fileReference":"bfdfe7dc352907fc980b868725387e9835179e6884138d623d1c2669625be172","guid":"bfdfe7dc352907fc980b868725387e983cb9e9258cb37dd196c17b38d2026ca5"}],"guid":"bfdfe7dc352907fc980b868725387e98dd58b73e0338cd55ce259842a1ab5fe4","type":"com.apple.buildphase.resources"}],"buildRules":[],"dependencies":[],"guid":"bfdfe7dc352907fc980b868725387e987c93e943aa0a38b5f6684beaf6b4a3a1","name":"webview_flutter_wkwebview-webview_flutter_wkwebview_privacy","productReference":{"guid":"bfdfe7dc352907fc980b868725387e98a0c2ea56ea4c64a4495566659e5fdb93","name":"webview_flutter_wkwebview_privacy.bundle","type":"product"},"productTypeIdentifier":"com.apple.product-type.bundle","provisioningSourceData":[{"bundleIdentifierFromInfoPlist":"${PRODUCT_BUNDLE_IDENTIFIER}","configurationName":"Debug","provisioningStyle":0},{"bundleIdentifierFromInfoPlist":"${PRODUCT_BUNDLE_IDENTIFIER}","configurationName":"Profile","provisioningStyle":0},{"bundleIdentifierFromInfoPlist":"${PRODUCT_BUNDLE_IDENTIFIER}","configurationName":"Release","provisioningStyle":0}],"type":"standard"} \ No newline at end of file diff --git a/mih_ui/android/build/ios/XCBuildData/PIFCache/target/TARGET@v11_hash=a771b9f79fd75fad08749ef861b3bddf-json b/mih_ui/android/build/ios/XCBuildData/PIFCache/target/TARGET@v11_hash=a771b9f79fd75fad08749ef861b3bddf-json new file mode 100644 index 00000000..5b1c8378 --- /dev/null +++ b/mih_ui/android/build/ios/XCBuildData/PIFCache/target/TARGET@v11_hash=a771b9f79fd75fad08749ef861b3bddf-json @@ -0,0 +1 @@ +{"buildConfigurations":[{"baseConfigurationFileReference":"bfdfe7dc352907fc980b868725387e980e6a79d9461f52673e9cd16e5e9ce12b","buildSettings":{"CLANG_ENABLE_OBJC_WEAK":"NO","CLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER":"NO","CODE_SIGN_IDENTITY[sdk=appletvos*]":"","CODE_SIGN_IDENTITY[sdk=iphoneos*]":"","CODE_SIGN_IDENTITY[sdk=watchos*]":"","CURRENT_PROJECT_VERSION":"1","DEFINES_MODULE":"YES","DYLIB_COMPATIBILITY_VERSION":"1","DYLIB_CURRENT_VERSION":"1","DYLIB_INSTALL_NAME_BASE":"@rpath","ENABLE_BITCODE":"NO","ENABLE_MODULE_VERIFIER":"NO","ENABLE_USER_SCRIPT_SANDBOXING":"NO","EXCLUDED_ARCHS[sdk=iphoneos*]":"$(inherited) armv7","EXCLUDED_ARCHS[sdk=iphonesimulator*]":"$(inherited) i386","FRAMEWORK_SEARCH_PATHS[sdk=iphoneos*]":"\"/Users/yaso_meth/Git/flutter/bin/cache/artifacts/engine/ios/Flutter.xcframework/ios-arm64\" $(inherited)","FRAMEWORK_SEARCH_PATHS[sdk=iphonesimulator*]":"\"/Users/yaso_meth/Git/flutter/bin/cache/artifacts/engine/ios/Flutter.xcframework/ios-arm64_x86_64-simulator\" $(inherited)","GCC_PREFIX_HEADER":"Target Support Files/file_picker/file_picker-prefix.pch","GENERATE_INFOPLIST_FILE":"NO","INFOPLIST_FILE":"Target Support Files/file_picker/file_picker-Info.plist","INSTALL_PATH":"$(LOCAL_LIBRARY_DIR)/Frameworks","LD_RUNPATH_SEARCH_PATHS":"$(inherited) @executable_path/Frameworks @loader_path/Frameworks","MODULEMAP_FILE":"Target Support Files/file_picker/file_picker.modulemap","ONLY_ACTIVE_ARCH":"NO","OTHER_LDFLAGS":"$(inherited) -framework Flutter","PRODUCT_MODULE_NAME":"file_picker","PRODUCT_NAME":"file_picker","SDKROOT":"iphoneos","SKIP_INSTALL":"YES","SWIFT_ACTIVE_COMPILATION_CONDITIONS":"$(inherited) ","SWIFT_INSTALL_OBJC_HEADER":"YES","SWIFT_VERSION":"5.0","TARGETED_DEVICE_FAMILY":"1,2","VALID_ARCHS[sdk=iphonesimulator*]":"$(ARCHS_STANDARD)","VERSIONING_SYSTEM":"apple-generic","VERSION_INFO_PREFIX":""},"guid":"bfdfe7dc352907fc980b868725387e98b3839b441583705f02a5120c8d8aa8af","name":"Debug"},{"baseConfigurationFileReference":"bfdfe7dc352907fc980b868725387e9855ea28d68c6105425b28b0dc67fbf53b","buildSettings":{"CLANG_ENABLE_OBJC_WEAK":"NO","CLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER":"NO","CODE_SIGN_IDENTITY[sdk=appletvos*]":"","CODE_SIGN_IDENTITY[sdk=iphoneos*]":"","CODE_SIGN_IDENTITY[sdk=watchos*]":"","CURRENT_PROJECT_VERSION":"1","DEFINES_MODULE":"YES","DYLIB_COMPATIBILITY_VERSION":"1","DYLIB_CURRENT_VERSION":"1","DYLIB_INSTALL_NAME_BASE":"@rpath","ENABLE_BITCODE":"NO","ENABLE_MODULE_VERIFIER":"NO","ENABLE_USER_SCRIPT_SANDBOXING":"NO","EXCLUDED_ARCHS[sdk=iphoneos*]":"$(inherited) armv7","EXCLUDED_ARCHS[sdk=iphonesimulator*]":"$(inherited) i386","FRAMEWORK_SEARCH_PATHS[sdk=iphoneos*]":"\"/Users/yaso_meth/Git/flutter/bin/cache/artifacts/engine/ios-release/Flutter.xcframework/ios-arm64\" $(inherited)","FRAMEWORK_SEARCH_PATHS[sdk=iphonesimulator*]":"\"/Users/yaso_meth/Git/flutter/bin/cache/artifacts/engine/ios-release/Flutter.xcframework/ios-arm64_x86_64-simulator\" $(inherited)","GCC_PREFIX_HEADER":"Target Support Files/file_picker/file_picker-prefix.pch","GENERATE_INFOPLIST_FILE":"NO","INFOPLIST_FILE":"Target Support Files/file_picker/file_picker-Info.plist","INSTALL_PATH":"$(LOCAL_LIBRARY_DIR)/Frameworks","LD_RUNPATH_SEARCH_PATHS":"$(inherited) @executable_path/Frameworks @loader_path/Frameworks","MODULEMAP_FILE":"Target Support Files/file_picker/file_picker.modulemap","OTHER_LDFLAGS":"$(inherited) -framework Flutter","PRODUCT_MODULE_NAME":"file_picker","PRODUCT_NAME":"file_picker","SDKROOT":"iphoneos","SKIP_INSTALL":"YES","SWIFT_ACTIVE_COMPILATION_CONDITIONS":"$(inherited) ","SWIFT_INSTALL_OBJC_HEADER":"YES","SWIFT_VERSION":"5.0","TARGETED_DEVICE_FAMILY":"1,2","VALIDATE_PRODUCT":"YES","VALID_ARCHS[sdk=iphonesimulator*]":"$(ARCHS_STANDARD)","VERSIONING_SYSTEM":"apple-generic","VERSION_INFO_PREFIX":""},"guid":"bfdfe7dc352907fc980b868725387e98bf7c85eda27e5e9e0261324bd88a67cb","name":"Profile"},{"baseConfigurationFileReference":"bfdfe7dc352907fc980b868725387e9855ea28d68c6105425b28b0dc67fbf53b","buildSettings":{"CLANG_ENABLE_OBJC_WEAK":"NO","CLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER":"NO","CODE_SIGN_IDENTITY[sdk=appletvos*]":"","CODE_SIGN_IDENTITY[sdk=iphoneos*]":"","CODE_SIGN_IDENTITY[sdk=watchos*]":"","CURRENT_PROJECT_VERSION":"1","DEFINES_MODULE":"YES","DYLIB_COMPATIBILITY_VERSION":"1","DYLIB_CURRENT_VERSION":"1","DYLIB_INSTALL_NAME_BASE":"@rpath","ENABLE_BITCODE":"NO","ENABLE_MODULE_VERIFIER":"NO","ENABLE_USER_SCRIPT_SANDBOXING":"NO","EXCLUDED_ARCHS[sdk=iphoneos*]":"$(inherited) armv7","EXCLUDED_ARCHS[sdk=iphonesimulator*]":"$(inherited) i386","FRAMEWORK_SEARCH_PATHS[sdk=iphoneos*]":"\"/Users/yaso_meth/Git/flutter/bin/cache/artifacts/engine/ios-release/Flutter.xcframework/ios-arm64\" $(inherited)","FRAMEWORK_SEARCH_PATHS[sdk=iphonesimulator*]":"\"/Users/yaso_meth/Git/flutter/bin/cache/artifacts/engine/ios-release/Flutter.xcframework/ios-arm64_x86_64-simulator\" $(inherited)","GCC_PREFIX_HEADER":"Target Support Files/file_picker/file_picker-prefix.pch","GENERATE_INFOPLIST_FILE":"NO","INFOPLIST_FILE":"Target Support Files/file_picker/file_picker-Info.plist","INSTALL_PATH":"$(LOCAL_LIBRARY_DIR)/Frameworks","LD_RUNPATH_SEARCH_PATHS":"$(inherited) @executable_path/Frameworks @loader_path/Frameworks","MODULEMAP_FILE":"Target Support Files/file_picker/file_picker.modulemap","OTHER_LDFLAGS":"$(inherited) -framework Flutter","PRODUCT_MODULE_NAME":"file_picker","PRODUCT_NAME":"file_picker","SDKROOT":"iphoneos","SKIP_INSTALL":"YES","SWIFT_ACTIVE_COMPILATION_CONDITIONS":"$(inherited) ","SWIFT_INSTALL_OBJC_HEADER":"YES","SWIFT_VERSION":"5.0","TARGETED_DEVICE_FAMILY":"1,2","VALIDATE_PRODUCT":"YES","VALID_ARCHS[sdk=iphonesimulator*]":"$(ARCHS_STANDARD)","VERSIONING_SYSTEM":"apple-generic","VERSION_INFO_PREFIX":""},"guid":"bfdfe7dc352907fc980b868725387e9892027ea2a6fa425b67809870c0e18fdf","name":"Release"}],"buildPhases":[{"buildFiles":[{"fileReference":"bfdfe7dc352907fc980b868725387e98194a7baf55c88f6759045c696de2d397","guid":"bfdfe7dc352907fc980b868725387e98c3154b28584fbc56128e7bc90d1ad537","headerVisibility":"public"},{"fileReference":"bfdfe7dc352907fc980b868725387e98f2597b2bfcfbe350f782de7028884db9","guid":"bfdfe7dc352907fc980b868725387e982745fee4238df0ba4c30f405f9ceb311","headerVisibility":"public"},{"fileReference":"bfdfe7dc352907fc980b868725387e9848c85bbc8fed7f463b54a8a831976dcb","guid":"bfdfe7dc352907fc980b868725387e98d775035456af40c8df68042b9f67214a","headerVisibility":"public"},{"fileReference":"bfdfe7dc352907fc980b868725387e980bb97ec29a5da2b10289db8377230b28","guid":"bfdfe7dc352907fc980b868725387e98072eac5d00c04d5afed78f580a9379ca","headerVisibility":"public"},{"fileReference":"bfdfe7dc352907fc980b868725387e9815da8454f786c30d7b23218e31792c1f","guid":"bfdfe7dc352907fc980b868725387e98f879c2bd74c858de2624663875100089","headerVisibility":"public"}],"guid":"bfdfe7dc352907fc980b868725387e9874a8e10d0d4d6a8e4d51cadd3de25a1f","type":"com.apple.buildphase.headers"},{"buildFiles":[{"fileReference":"bfdfe7dc352907fc980b868725387e98d5f93b22efc88a714a54d4c0f0e25b81","guid":"bfdfe7dc352907fc980b868725387e98a1de3a054407d1c738e24f5374fa74a5"},{"fileReference":"bfdfe7dc352907fc980b868725387e981339c3a7ce270306613c6cbf72ac67cd","guid":"bfdfe7dc352907fc980b868725387e98b4f77a39ccf0813bbd85099167af4311"},{"fileReference":"bfdfe7dc352907fc980b868725387e9801fd6a14089a47c1e1b32718bdf22178","guid":"bfdfe7dc352907fc980b868725387e98f868ffd01ce81b1910bd85586fa30587"},{"fileReference":"bfdfe7dc352907fc980b868725387e986778635029f602b4f750099540bf2fc6","guid":"bfdfe7dc352907fc980b868725387e98c7bef4a161d4b5e2d85fd85daa44e661"},{"fileReference":"bfdfe7dc352907fc980b868725387e98bfd42a1232cd7e5dc79651040aca6fa8","guid":"bfdfe7dc352907fc980b868725387e98b789e4f458ffb91b232ec4825ba9a8af"}],"guid":"bfdfe7dc352907fc980b868725387e9833a0422bc02947bdd25cd49f9b0b26c7","type":"com.apple.buildphase.sources"},{"buildFiles":[{"fileReference":"bfdfe7dc352907fc980b868725387e98b14af7c49882340ad551cb13b0a1e06d","guid":"bfdfe7dc352907fc980b868725387e986cf52231b3e99539039502256cc80d97"}],"guid":"bfdfe7dc352907fc980b868725387e98a0e062b1c169ee922cd5cc09aef279dd","type":"com.apple.buildphase.frameworks"},{"buildFiles":[{"guid":"bfdfe7dc352907fc980b868725387e98a9270cf577ade730d8197570f3744af9","targetReference":"bfdfe7dc352907fc980b868725387e985452a642045cac0ef7c37f93da2d994e"}],"guid":"bfdfe7dc352907fc980b868725387e98300e823ab028234f8b351b783dfd9d7a","type":"com.apple.buildphase.resources"}],"buildRules":[],"dependencies":[{"guid":"bfdfe7dc352907fc980b868725387e985fd5cdb9993b1816141f0c012ffa62bd","name":"DKImagePickerController"},{"guid":"bfdfe7dc352907fc980b868725387e989da425bb6d6d5d8dbb95e4afffb82217","name":"Flutter"},{"guid":"bfdfe7dc352907fc980b868725387e985452a642045cac0ef7c37f93da2d994e","name":"file_picker-file_picker_ios_privacy"}],"guid":"bfdfe7dc352907fc980b868725387e98bf75f71a2aa7fdc38a7d7d70e6c200c1","name":"file_picker","predominantSourceCodeLanguage":"Xcode.SourceCodeLanguage.Objective-C","productReference":{"guid":"bfdfe7dc352907fc980b868725387e981da9957ede39da2a81727560e62463b0","name":"file_picker.framework","type":"product"},"productTypeIdentifier":"com.apple.product-type.framework","provisioningSourceData":[{"bundleIdentifierFromInfoPlist":"${PRODUCT_BUNDLE_IDENTIFIER}","configurationName":"Debug","provisioningStyle":1},{"bundleIdentifierFromInfoPlist":"${PRODUCT_BUNDLE_IDENTIFIER}","configurationName":"Profile","provisioningStyle":1},{"bundleIdentifierFromInfoPlist":"${PRODUCT_BUNDLE_IDENTIFIER}","configurationName":"Release","provisioningStyle":1}],"type":"standard"} \ No newline at end of file diff --git a/mih_ui/android/build/ios/XCBuildData/PIFCache/target/TARGET@v11_hash=aa56745ff0f6a68146d6117b991ff12e-json b/mih_ui/android/build/ios/XCBuildData/PIFCache/target/TARGET@v11_hash=aa56745ff0f6a68146d6117b991ff12e-json new file mode 100644 index 00000000..dd032665 --- /dev/null +++ b/mih_ui/android/build/ios/XCBuildData/PIFCache/target/TARGET@v11_hash=aa56745ff0f6a68146d6117b991ff12e-json @@ -0,0 +1 @@ +{"buildConfigurations":[{"baseConfigurationFileReference":"bfdfe7dc352907fc980b868725387e98478e27dfe1d9ad49d28fafd65b85bf34","buildSettings":{"CLANG_ENABLE_OBJC_WEAK":"NO","CODE_SIGN_IDENTITY[sdk=appletvos*]":"","CODE_SIGN_IDENTITY[sdk=iphoneos*]":"","CODE_SIGN_IDENTITY[sdk=watchos*]":"","CURRENT_PROJECT_VERSION":"1","DYLIB_COMPATIBILITY_VERSION":"1","DYLIB_CURRENT_VERSION":"1","DYLIB_INSTALL_NAME_BASE":"@rpath","ENABLE_MODULE_VERIFIER":"NO","ENABLE_USER_SCRIPT_SANDBOXING":"NO","GENERATE_INFOPLIST_FILE":"NO","INFOPLIST_FILE":"Target Support Files/GTMSessionFetcher/GTMSessionFetcher-Info.plist","INSTALL_PATH":"$(LOCAL_LIBRARY_DIR)/Frameworks","IPHONEOS_DEPLOYMENT_TARGET":"15.0","LD_RUNPATH_SEARCH_PATHS":"$(inherited) @executable_path/Frameworks @loader_path/Frameworks","MODULEMAP_FILE":"Target Support Files/GTMSessionFetcher/GTMSessionFetcher.modulemap","ONLY_ACTIVE_ARCH":"NO","PRODUCT_MODULE_NAME":"GTMSessionFetcher","PRODUCT_NAME":"GTMSessionFetcher","SDKROOT":"iphoneos","SKIP_INSTALL":"YES","SWIFT_ACTIVE_COMPILATION_CONDITIONS":"$(inherited) ","SWIFT_INSTALL_OBJC_HEADER":"YES","SWIFT_VERSION":"5.0","TARGETED_DEVICE_FAMILY":"1,2","VERSIONING_SYSTEM":"apple-generic","VERSION_INFO_PREFIX":""},"guid":"bfdfe7dc352907fc980b868725387e98b550d9cbb5a5b1883a64aca754ed9a28","name":"Debug"},{"baseConfigurationFileReference":"bfdfe7dc352907fc980b868725387e980d155ae95de828a9ae777ff4d23d3419","buildSettings":{"CLANG_ENABLE_OBJC_WEAK":"NO","CODE_SIGN_IDENTITY[sdk=appletvos*]":"","CODE_SIGN_IDENTITY[sdk=iphoneos*]":"","CODE_SIGN_IDENTITY[sdk=watchos*]":"","CURRENT_PROJECT_VERSION":"1","DYLIB_COMPATIBILITY_VERSION":"1","DYLIB_CURRENT_VERSION":"1","DYLIB_INSTALL_NAME_BASE":"@rpath","ENABLE_MODULE_VERIFIER":"NO","ENABLE_USER_SCRIPT_SANDBOXING":"NO","GENERATE_INFOPLIST_FILE":"NO","INFOPLIST_FILE":"Target Support Files/GTMSessionFetcher/GTMSessionFetcher-Info.plist","INSTALL_PATH":"$(LOCAL_LIBRARY_DIR)/Frameworks","IPHONEOS_DEPLOYMENT_TARGET":"15.0","LD_RUNPATH_SEARCH_PATHS":"$(inherited) @executable_path/Frameworks @loader_path/Frameworks","MODULEMAP_FILE":"Target Support Files/GTMSessionFetcher/GTMSessionFetcher.modulemap","PRODUCT_MODULE_NAME":"GTMSessionFetcher","PRODUCT_NAME":"GTMSessionFetcher","SDKROOT":"iphoneos","SKIP_INSTALL":"YES","SWIFT_ACTIVE_COMPILATION_CONDITIONS":"$(inherited) ","SWIFT_INSTALL_OBJC_HEADER":"YES","SWIFT_VERSION":"5.0","TARGETED_DEVICE_FAMILY":"1,2","VALIDATE_PRODUCT":"YES","VERSIONING_SYSTEM":"apple-generic","VERSION_INFO_PREFIX":""},"guid":"bfdfe7dc352907fc980b868725387e980724459bcc96ad9ae15e006d971276b5","name":"Profile"},{"baseConfigurationFileReference":"bfdfe7dc352907fc980b868725387e980d155ae95de828a9ae777ff4d23d3419","buildSettings":{"CLANG_ENABLE_OBJC_WEAK":"NO","CODE_SIGN_IDENTITY[sdk=appletvos*]":"","CODE_SIGN_IDENTITY[sdk=iphoneos*]":"","CODE_SIGN_IDENTITY[sdk=watchos*]":"","CURRENT_PROJECT_VERSION":"1","DYLIB_COMPATIBILITY_VERSION":"1","DYLIB_CURRENT_VERSION":"1","DYLIB_INSTALL_NAME_BASE":"@rpath","ENABLE_MODULE_VERIFIER":"NO","ENABLE_USER_SCRIPT_SANDBOXING":"NO","GENERATE_INFOPLIST_FILE":"NO","INFOPLIST_FILE":"Target Support Files/GTMSessionFetcher/GTMSessionFetcher-Info.plist","INSTALL_PATH":"$(LOCAL_LIBRARY_DIR)/Frameworks","IPHONEOS_DEPLOYMENT_TARGET":"15.0","LD_RUNPATH_SEARCH_PATHS":"$(inherited) @executable_path/Frameworks @loader_path/Frameworks","MODULEMAP_FILE":"Target Support Files/GTMSessionFetcher/GTMSessionFetcher.modulemap","PRODUCT_MODULE_NAME":"GTMSessionFetcher","PRODUCT_NAME":"GTMSessionFetcher","SDKROOT":"iphoneos","SKIP_INSTALL":"YES","SWIFT_ACTIVE_COMPILATION_CONDITIONS":"$(inherited) ","SWIFT_INSTALL_OBJC_HEADER":"YES","SWIFT_VERSION":"5.0","TARGETED_DEVICE_FAMILY":"1,2","VALIDATE_PRODUCT":"YES","VERSIONING_SYSTEM":"apple-generic","VERSION_INFO_PREFIX":""},"guid":"bfdfe7dc352907fc980b868725387e98a8848bea8636652191740ffcbabf2880","name":"Release"}],"buildPhases":[{"buildFiles":[{"fileReference":"bfdfe7dc352907fc980b868725387e98eb4aaedbcf9860120c58f6d4d062f032","guid":"bfdfe7dc352907fc980b868725387e988563942b64807f4e8b4f03ddc85d2d57","headerVisibility":"public"},{"fileReference":"bfdfe7dc352907fc980b868725387e983987a537a915850cc63a9531255da27c","guid":"bfdfe7dc352907fc980b868725387e98611d73e0353201771b302ffa48bac290","headerVisibility":"public"},{"fileReference":"bfdfe7dc352907fc980b868725387e98dfa923d33e197f2f10f071abff2371ff","guid":"bfdfe7dc352907fc980b868725387e98734c9257f56678921b39462bd212351b","headerVisibility":"public"},{"fileReference":"bfdfe7dc352907fc980b868725387e98d312b9b5d7afb9da1592f829033a3206","guid":"bfdfe7dc352907fc980b868725387e98397650ca1ecab34f0d3e04f58b22aebd","headerVisibility":"public"},{"fileReference":"bfdfe7dc352907fc980b868725387e983d4c09b113cf1215cd28e8d9ac61a23f","guid":"bfdfe7dc352907fc980b868725387e98cd40dc3db8bb82b3155de60d17499d4a"},{"fileReference":"bfdfe7dc352907fc980b868725387e9885235b209117c45670e8a7e932ed032d","guid":"bfdfe7dc352907fc980b868725387e986009430d38dfc9178aa961543af2a36d","headerVisibility":"public"}],"guid":"bfdfe7dc352907fc980b868725387e98efce177caf6f851e7498eaa2d39fa5b2","type":"com.apple.buildphase.headers"},{"buildFiles":[{"fileReference":"bfdfe7dc352907fc980b868725387e98cc293d93ed0348775d80402fa066a035","guid":"bfdfe7dc352907fc980b868725387e9846e72a20e759e4a1f8d30b3565d478ab"},{"fileReference":"bfdfe7dc352907fc980b868725387e98043df5bc2e7d05caf248348a4d634e19","guid":"bfdfe7dc352907fc980b868725387e981a3249d92689bbcb292bf0c163124dd6"},{"fileReference":"bfdfe7dc352907fc980b868725387e98e555f92b94394e98b028c2f2173f7a28","guid":"bfdfe7dc352907fc980b868725387e98da8980140af446b24328e775a18d88d5"},{"fileReference":"bfdfe7dc352907fc980b868725387e983b71212203a0dad88a8868b08a6dbc06","guid":"bfdfe7dc352907fc980b868725387e98c10cb1ca0893a79fbc28c8a8f9b74f6c"},{"fileReference":"bfdfe7dc352907fc980b868725387e98f0441880a424196f2e774e387ed25a77","guid":"bfdfe7dc352907fc980b868725387e989a231f8fc2d1019fe4641fcc3321eb46"}],"guid":"bfdfe7dc352907fc980b868725387e98dc057af249a902b110f3a08f3e0d11f2","type":"com.apple.buildphase.sources"},{"buildFiles":[{"fileReference":"bfdfe7dc352907fc980b868725387e98b14af7c49882340ad551cb13b0a1e06d","guid":"bfdfe7dc352907fc980b868725387e9867dd418f34545a9d0e00cd3dd1ed8856"},{"fileReference":"bfdfe7dc352907fc980b868725387e9820c167798bdb228b4ab52bb2aa7eb24b","guid":"bfdfe7dc352907fc980b868725387e98eba6d5a9331fc07032c864b0569cadd6"}],"guid":"bfdfe7dc352907fc980b868725387e98d1bc46a72df41ab8ad7c27d649c7eec3","type":"com.apple.buildphase.frameworks"},{"buildFiles":[{"guid":"bfdfe7dc352907fc980b868725387e984d676f5872d9f5405805a0c5f9b58829","targetReference":"bfdfe7dc352907fc980b868725387e9801af34ddea6be97d757786022edb34b1"}],"guid":"bfdfe7dc352907fc980b868725387e98240bda713eaa26eb6174af89993368f9","type":"com.apple.buildphase.resources"}],"buildRules":[],"dependencies":[{"guid":"bfdfe7dc352907fc980b868725387e9801af34ddea6be97d757786022edb34b1","name":"GTMSessionFetcher-GTMSessionFetcher_Core_Privacy"}],"guid":"bfdfe7dc352907fc980b868725387e98dd3a6a519ed4181bf31ea6bc1f18ebc5","name":"GTMSessionFetcher","predominantSourceCodeLanguage":"Xcode.SourceCodeLanguage.Objective-C-Plus-Plus","productReference":{"guid":"bfdfe7dc352907fc980b868725387e98f65e88472d384b1ba0888326befb3a8e","name":"GTMSessionFetcher.framework","type":"product"},"productTypeIdentifier":"com.apple.product-type.framework","provisioningSourceData":[{"bundleIdentifierFromInfoPlist":"${PRODUCT_BUNDLE_IDENTIFIER}","configurationName":"Debug","provisioningStyle":1},{"bundleIdentifierFromInfoPlist":"${PRODUCT_BUNDLE_IDENTIFIER}","configurationName":"Profile","provisioningStyle":1},{"bundleIdentifierFromInfoPlist":"${PRODUCT_BUNDLE_IDENTIFIER}","configurationName":"Release","provisioningStyle":1}],"type":"standard"} \ No newline at end of file diff --git a/mih_ui/android/build/ios/XCBuildData/PIFCache/target/TARGET@v11_hash=ab724a4a507acc9a546958f9aaaa80fd-json b/mih_ui/android/build/ios/XCBuildData/PIFCache/target/TARGET@v11_hash=ab724a4a507acc9a546958f9aaaa80fd-json new file mode 100644 index 00000000..1641b96e --- /dev/null +++ b/mih_ui/android/build/ios/XCBuildData/PIFCache/target/TARGET@v11_hash=ab724a4a507acc9a546958f9aaaa80fd-json @@ -0,0 +1 @@ +{"buildConfigurations":[{"baseConfigurationFileReference":"bfdfe7dc352907fc980b868725387e98089a265d15a8f52f9e25ea32540ea5cd","buildSettings":{"CLANG_ENABLE_OBJC_WEAK":"NO","CLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER":"NO","CODE_SIGN_IDENTITY[sdk=appletvos*]":"","CODE_SIGN_IDENTITY[sdk=iphoneos*]":"","CODE_SIGN_IDENTITY[sdk=watchos*]":"","CURRENT_PROJECT_VERSION":"1","DYLIB_COMPATIBILITY_VERSION":"1","DYLIB_CURRENT_VERSION":"1","DYLIB_INSTALL_NAME_BASE":"@rpath","ENABLE_BITCODE":"NO","ENABLE_MODULE_VERIFIER":"NO","ENABLE_USER_SCRIPT_SANDBOXING":"NO","EXCLUDED_ARCHS[sdk=iphoneos*]":"$(inherited) armv7","EXCLUDED_ARCHS[sdk=iphonesimulator*]":"$(inherited) i386","FRAMEWORK_SEARCH_PATHS[sdk=iphoneos*]":"\"/Users/yaso_meth/Git/flutter/bin/cache/artifacts/engine/ios/Flutter.xcframework/ios-arm64\" $(inherited)","FRAMEWORK_SEARCH_PATHS[sdk=iphonesimulator*]":"\"/Users/yaso_meth/Git/flutter/bin/cache/artifacts/engine/ios/Flutter.xcframework/ios-arm64_x86_64-simulator\" $(inherited)","GCC_PREFIX_HEADER":"Target Support Files/package_info_plus/package_info_plus-prefix.pch","GENERATE_INFOPLIST_FILE":"NO","INFOPLIST_FILE":"Target Support Files/package_info_plus/package_info_plus-Info.plist","INSTALL_PATH":"$(LOCAL_LIBRARY_DIR)/Frameworks","LD_RUNPATH_SEARCH_PATHS":"$(inherited) @executable_path/Frameworks @loader_path/Frameworks","MODULEMAP_FILE":"Target Support Files/package_info_plus/package_info_plus.modulemap","ONLY_ACTIVE_ARCH":"NO","OTHER_LDFLAGS":"$(inherited) -framework Flutter","PRODUCT_MODULE_NAME":"package_info_plus","PRODUCT_NAME":"package_info_plus","SDKROOT":"iphoneos","SKIP_INSTALL":"YES","SWIFT_ACTIVE_COMPILATION_CONDITIONS":"$(inherited) ","SWIFT_INSTALL_OBJC_HEADER":"YES","SWIFT_VERSION":"5.0","TARGETED_DEVICE_FAMILY":"1,2","VALID_ARCHS[sdk=iphonesimulator*]":"$(ARCHS_STANDARD)","VERSIONING_SYSTEM":"apple-generic","VERSION_INFO_PREFIX":""},"guid":"bfdfe7dc352907fc980b868725387e9897051622773a9cd7d8fae6ba3be0988b","name":"Debug"},{"baseConfigurationFileReference":"bfdfe7dc352907fc980b868725387e9811034d0cd45341ec5fddd8ae14b45098","buildSettings":{"CLANG_ENABLE_OBJC_WEAK":"NO","CLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER":"NO","CODE_SIGN_IDENTITY[sdk=appletvos*]":"","CODE_SIGN_IDENTITY[sdk=iphoneos*]":"","CODE_SIGN_IDENTITY[sdk=watchos*]":"","CURRENT_PROJECT_VERSION":"1","DYLIB_COMPATIBILITY_VERSION":"1","DYLIB_CURRENT_VERSION":"1","DYLIB_INSTALL_NAME_BASE":"@rpath","ENABLE_BITCODE":"NO","ENABLE_MODULE_VERIFIER":"NO","ENABLE_USER_SCRIPT_SANDBOXING":"NO","EXCLUDED_ARCHS[sdk=iphoneos*]":"$(inherited) armv7","EXCLUDED_ARCHS[sdk=iphonesimulator*]":"$(inherited) i386","FRAMEWORK_SEARCH_PATHS[sdk=iphoneos*]":"\"/Users/yaso_meth/Git/flutter/bin/cache/artifacts/engine/ios-release/Flutter.xcframework/ios-arm64\" $(inherited)","FRAMEWORK_SEARCH_PATHS[sdk=iphonesimulator*]":"\"/Users/yaso_meth/Git/flutter/bin/cache/artifacts/engine/ios-release/Flutter.xcframework/ios-arm64_x86_64-simulator\" $(inherited)","GCC_PREFIX_HEADER":"Target Support Files/package_info_plus/package_info_plus-prefix.pch","GENERATE_INFOPLIST_FILE":"NO","INFOPLIST_FILE":"Target Support Files/package_info_plus/package_info_plus-Info.plist","INSTALL_PATH":"$(LOCAL_LIBRARY_DIR)/Frameworks","LD_RUNPATH_SEARCH_PATHS":"$(inherited) @executable_path/Frameworks @loader_path/Frameworks","MODULEMAP_FILE":"Target Support Files/package_info_plus/package_info_plus.modulemap","OTHER_LDFLAGS":"$(inherited) -framework Flutter","PRODUCT_MODULE_NAME":"package_info_plus","PRODUCT_NAME":"package_info_plus","SDKROOT":"iphoneos","SKIP_INSTALL":"YES","SWIFT_ACTIVE_COMPILATION_CONDITIONS":"$(inherited) ","SWIFT_INSTALL_OBJC_HEADER":"YES","SWIFT_VERSION":"5.0","TARGETED_DEVICE_FAMILY":"1,2","VALIDATE_PRODUCT":"YES","VALID_ARCHS[sdk=iphonesimulator*]":"$(ARCHS_STANDARD)","VERSIONING_SYSTEM":"apple-generic","VERSION_INFO_PREFIX":""},"guid":"bfdfe7dc352907fc980b868725387e98937974f840ad34ce898c3a62a0a52a8d","name":"Profile"},{"baseConfigurationFileReference":"bfdfe7dc352907fc980b868725387e9811034d0cd45341ec5fddd8ae14b45098","buildSettings":{"CLANG_ENABLE_OBJC_WEAK":"NO","CLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER":"NO","CODE_SIGN_IDENTITY[sdk=appletvos*]":"","CODE_SIGN_IDENTITY[sdk=iphoneos*]":"","CODE_SIGN_IDENTITY[sdk=watchos*]":"","CURRENT_PROJECT_VERSION":"1","DYLIB_COMPATIBILITY_VERSION":"1","DYLIB_CURRENT_VERSION":"1","DYLIB_INSTALL_NAME_BASE":"@rpath","ENABLE_BITCODE":"NO","ENABLE_MODULE_VERIFIER":"NO","ENABLE_USER_SCRIPT_SANDBOXING":"NO","EXCLUDED_ARCHS[sdk=iphoneos*]":"$(inherited) armv7","EXCLUDED_ARCHS[sdk=iphonesimulator*]":"$(inherited) i386","FRAMEWORK_SEARCH_PATHS[sdk=iphoneos*]":"\"/Users/yaso_meth/Git/flutter/bin/cache/artifacts/engine/ios-release/Flutter.xcframework/ios-arm64\" $(inherited)","FRAMEWORK_SEARCH_PATHS[sdk=iphonesimulator*]":"\"/Users/yaso_meth/Git/flutter/bin/cache/artifacts/engine/ios-release/Flutter.xcframework/ios-arm64_x86_64-simulator\" $(inherited)","GCC_PREFIX_HEADER":"Target Support Files/package_info_plus/package_info_plus-prefix.pch","GENERATE_INFOPLIST_FILE":"NO","INFOPLIST_FILE":"Target Support Files/package_info_plus/package_info_plus-Info.plist","INSTALL_PATH":"$(LOCAL_LIBRARY_DIR)/Frameworks","LD_RUNPATH_SEARCH_PATHS":"$(inherited) @executable_path/Frameworks @loader_path/Frameworks","MODULEMAP_FILE":"Target Support Files/package_info_plus/package_info_plus.modulemap","OTHER_LDFLAGS":"$(inherited) -framework Flutter","PRODUCT_MODULE_NAME":"package_info_plus","PRODUCT_NAME":"package_info_plus","SDKROOT":"iphoneos","SKIP_INSTALL":"YES","SWIFT_ACTIVE_COMPILATION_CONDITIONS":"$(inherited) ","SWIFT_INSTALL_OBJC_HEADER":"YES","SWIFT_VERSION":"5.0","TARGETED_DEVICE_FAMILY":"1,2","VALIDATE_PRODUCT":"YES","VALID_ARCHS[sdk=iphonesimulator*]":"$(ARCHS_STANDARD)","VERSIONING_SYSTEM":"apple-generic","VERSION_INFO_PREFIX":""},"guid":"bfdfe7dc352907fc980b868725387e98f7c4cdd694f93dd8f9baf8a7be82dba5","name":"Release"}],"buildPhases":[{"buildFiles":[{"fileReference":"bfdfe7dc352907fc980b868725387e9863bbc9af63b79ccfc69082c52a621490","guid":"bfdfe7dc352907fc980b868725387e988d7afa72893fb24fe059f2d1654db428","headerVisibility":"public"},{"fileReference":"bfdfe7dc352907fc980b868725387e9833f3c33eca65f1240c201c729d3fbde7","guid":"bfdfe7dc352907fc980b868725387e984a3cde720e889627fced5106f157da46","headerVisibility":"public"}],"guid":"bfdfe7dc352907fc980b868725387e9882bf16bb6e470ae110c9ab32e9a6916b","type":"com.apple.buildphase.headers"},{"buildFiles":[{"fileReference":"bfdfe7dc352907fc980b868725387e98fc1d853ed7c38ec64399121ac6e96d53","guid":"bfdfe7dc352907fc980b868725387e98b36210ea7ea6f2dc56f34a75a5f98870"},{"fileReference":"bfdfe7dc352907fc980b868725387e98c0d03884f20c6bbb2234aee407c81ed1","guid":"bfdfe7dc352907fc980b868725387e98807c0f13ab38bf78a255422ace44851d"}],"guid":"bfdfe7dc352907fc980b868725387e9802e6907f47df982f511318ee6421866b","type":"com.apple.buildphase.sources"},{"buildFiles":[{"fileReference":"bfdfe7dc352907fc980b868725387e98b14af7c49882340ad551cb13b0a1e06d","guid":"bfdfe7dc352907fc980b868725387e98f9972619f6373dcc7a588e3720ff6b1d"}],"guid":"bfdfe7dc352907fc980b868725387e9853f06540a2b47e2bce34c4f52b96b9b7","type":"com.apple.buildphase.frameworks"},{"buildFiles":[{"guid":"bfdfe7dc352907fc980b868725387e98d3f2eef9a97764f5506e64926c3bef1a","targetReference":"bfdfe7dc352907fc980b868725387e987b6c2f882d164ef4f3c76673562685a1"}],"guid":"bfdfe7dc352907fc980b868725387e981ef7df0f5e6435e5f909151e5c6d893c","type":"com.apple.buildphase.resources"}],"buildRules":[],"dependencies":[{"guid":"bfdfe7dc352907fc980b868725387e989da425bb6d6d5d8dbb95e4afffb82217","name":"Flutter"},{"guid":"bfdfe7dc352907fc980b868725387e987b6c2f882d164ef4f3c76673562685a1","name":"package_info_plus-package_info_plus_privacy"}],"guid":"bfdfe7dc352907fc980b868725387e98a5ae7244e41cc249cf7186dbb9962ecb","name":"package_info_plus","predominantSourceCodeLanguage":"Xcode.SourceCodeLanguage.Objective-C","productReference":{"guid":"bfdfe7dc352907fc980b868725387e98d9c4afca85b28d898f3002d0bb74c874","name":"package_info_plus.framework","type":"product"},"productTypeIdentifier":"com.apple.product-type.framework","provisioningSourceData":[{"bundleIdentifierFromInfoPlist":"${PRODUCT_BUNDLE_IDENTIFIER}","configurationName":"Debug","provisioningStyle":1},{"bundleIdentifierFromInfoPlist":"${PRODUCT_BUNDLE_IDENTIFIER}","configurationName":"Profile","provisioningStyle":1},{"bundleIdentifierFromInfoPlist":"${PRODUCT_BUNDLE_IDENTIFIER}","configurationName":"Release","provisioningStyle":1}],"type":"standard"} \ No newline at end of file diff --git a/mih_ui/android/build/ios/XCBuildData/PIFCache/target/TARGET@v11_hash=b02384d9efc0e497521a0ba9096939bd-json b/mih_ui/android/build/ios/XCBuildData/PIFCache/target/TARGET@v11_hash=b02384d9efc0e497521a0ba9096939bd-json new file mode 100644 index 00000000..fc2aa7ba --- /dev/null +++ b/mih_ui/android/build/ios/XCBuildData/PIFCache/target/TARGET@v11_hash=b02384d9efc0e497521a0ba9096939bd-json @@ -0,0 +1 @@ +{"buildConfigurations":[{"baseConfigurationFileReference":"bfdfe7dc352907fc980b868725387e9875a911280513a51a1fcc833a02e1e86d","buildSettings":{"CLANG_ENABLE_OBJC_WEAK":"NO","CLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER":"NO","CODE_SIGN_IDENTITY[sdk=appletvos*]":"","CODE_SIGN_IDENTITY[sdk=iphoneos*]":"","CODE_SIGN_IDENTITY[sdk=watchos*]":"","CURRENT_PROJECT_VERSION":"1","DYLIB_COMPATIBILITY_VERSION":"1","DYLIB_CURRENT_VERSION":"1","DYLIB_INSTALL_NAME_BASE":"@rpath","ENABLE_BITCODE":"NO","ENABLE_MODULE_VERIFIER":"NO","ENABLE_USER_SCRIPT_SANDBOXING":"NO","EXCLUDED_ARCHS[sdk=iphoneos*]":"$(inherited) armv7","EXCLUDED_ARCHS[sdk=iphonesimulator*]":"$(inherited) i386","FRAMEWORK_SEARCH_PATHS[sdk=iphoneos*]":"\"/Users/yaso_meth/Git/flutter/bin/cache/artifacts/engine/ios/Flutter.xcframework/ios-arm64\" $(inherited)","FRAMEWORK_SEARCH_PATHS[sdk=iphonesimulator*]":"\"/Users/yaso_meth/Git/flutter/bin/cache/artifacts/engine/ios/Flutter.xcframework/ios-arm64_x86_64-simulator\" $(inherited)","GCC_PREFIX_HEADER":"Target Support Files/sqflite_darwin/sqflite_darwin-prefix.pch","GENERATE_INFOPLIST_FILE":"NO","INFOPLIST_FILE":"Target Support Files/sqflite_darwin/sqflite_darwin-Info.plist","INSTALL_PATH":"$(LOCAL_LIBRARY_DIR)/Frameworks","LD_RUNPATH_SEARCH_PATHS":"$(inherited) @executable_path/Frameworks @loader_path/Frameworks","MODULEMAP_FILE":"Target Support Files/sqflite_darwin/sqflite_darwin.modulemap","ONLY_ACTIVE_ARCH":"NO","OTHER_LDFLAGS":"$(inherited) -framework Flutter","PRODUCT_MODULE_NAME":"sqflite_darwin","PRODUCT_NAME":"sqflite_darwin","SDKROOT":"iphoneos","SKIP_INSTALL":"YES","SWIFT_ACTIVE_COMPILATION_CONDITIONS":"$(inherited) ","SWIFT_INSTALL_OBJC_HEADER":"YES","SWIFT_VERSION":"5.0","TARGETED_DEVICE_FAMILY":"1,2","VALID_ARCHS[sdk=iphonesimulator*]":"$(ARCHS_STANDARD)","VERSIONING_SYSTEM":"apple-generic","VERSION_INFO_PREFIX":""},"guid":"bfdfe7dc352907fc980b868725387e98ee49f65d26d8a0c930cc03d16e0ffcc8","name":"Debug"},{"baseConfigurationFileReference":"bfdfe7dc352907fc980b868725387e98b2e50aea12e109eb95c45970b36f8a43","buildSettings":{"CLANG_ENABLE_OBJC_WEAK":"NO","CLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER":"NO","CODE_SIGN_IDENTITY[sdk=appletvos*]":"","CODE_SIGN_IDENTITY[sdk=iphoneos*]":"","CODE_SIGN_IDENTITY[sdk=watchos*]":"","CURRENT_PROJECT_VERSION":"1","DYLIB_COMPATIBILITY_VERSION":"1","DYLIB_CURRENT_VERSION":"1","DYLIB_INSTALL_NAME_BASE":"@rpath","ENABLE_BITCODE":"NO","ENABLE_MODULE_VERIFIER":"NO","ENABLE_USER_SCRIPT_SANDBOXING":"NO","EXCLUDED_ARCHS[sdk=iphoneos*]":"$(inherited) armv7","EXCLUDED_ARCHS[sdk=iphonesimulator*]":"$(inherited) i386","FRAMEWORK_SEARCH_PATHS[sdk=iphoneos*]":"\"/Users/yaso_meth/Git/flutter/bin/cache/artifacts/engine/ios-release/Flutter.xcframework/ios-arm64\" $(inherited)","FRAMEWORK_SEARCH_PATHS[sdk=iphonesimulator*]":"\"/Users/yaso_meth/Git/flutter/bin/cache/artifacts/engine/ios-release/Flutter.xcframework/ios-arm64_x86_64-simulator\" $(inherited)","GCC_PREFIX_HEADER":"Target Support Files/sqflite_darwin/sqflite_darwin-prefix.pch","GENERATE_INFOPLIST_FILE":"NO","INFOPLIST_FILE":"Target Support Files/sqflite_darwin/sqflite_darwin-Info.plist","INSTALL_PATH":"$(LOCAL_LIBRARY_DIR)/Frameworks","LD_RUNPATH_SEARCH_PATHS":"$(inherited) @executable_path/Frameworks @loader_path/Frameworks","MODULEMAP_FILE":"Target Support Files/sqflite_darwin/sqflite_darwin.modulemap","OTHER_LDFLAGS":"$(inherited) -framework Flutter","PRODUCT_MODULE_NAME":"sqflite_darwin","PRODUCT_NAME":"sqflite_darwin","SDKROOT":"iphoneos","SKIP_INSTALL":"YES","SWIFT_ACTIVE_COMPILATION_CONDITIONS":"$(inherited) ","SWIFT_INSTALL_OBJC_HEADER":"YES","SWIFT_VERSION":"5.0","TARGETED_DEVICE_FAMILY":"1,2","VALIDATE_PRODUCT":"YES","VALID_ARCHS[sdk=iphonesimulator*]":"$(ARCHS_STANDARD)","VERSIONING_SYSTEM":"apple-generic","VERSION_INFO_PREFIX":""},"guid":"bfdfe7dc352907fc980b868725387e987d3fcd01a34fff9e18dec0764bcc371e","name":"Profile"},{"baseConfigurationFileReference":"bfdfe7dc352907fc980b868725387e98b2e50aea12e109eb95c45970b36f8a43","buildSettings":{"CLANG_ENABLE_OBJC_WEAK":"NO","CLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER":"NO","CODE_SIGN_IDENTITY[sdk=appletvos*]":"","CODE_SIGN_IDENTITY[sdk=iphoneos*]":"","CODE_SIGN_IDENTITY[sdk=watchos*]":"","CURRENT_PROJECT_VERSION":"1","DYLIB_COMPATIBILITY_VERSION":"1","DYLIB_CURRENT_VERSION":"1","DYLIB_INSTALL_NAME_BASE":"@rpath","ENABLE_BITCODE":"NO","ENABLE_MODULE_VERIFIER":"NO","ENABLE_USER_SCRIPT_SANDBOXING":"NO","EXCLUDED_ARCHS[sdk=iphoneos*]":"$(inherited) armv7","EXCLUDED_ARCHS[sdk=iphonesimulator*]":"$(inherited) i386","FRAMEWORK_SEARCH_PATHS[sdk=iphoneos*]":"\"/Users/yaso_meth/Git/flutter/bin/cache/artifacts/engine/ios-release/Flutter.xcframework/ios-arm64\" $(inherited)","FRAMEWORK_SEARCH_PATHS[sdk=iphonesimulator*]":"\"/Users/yaso_meth/Git/flutter/bin/cache/artifacts/engine/ios-release/Flutter.xcframework/ios-arm64_x86_64-simulator\" $(inherited)","GCC_PREFIX_HEADER":"Target Support Files/sqflite_darwin/sqflite_darwin-prefix.pch","GENERATE_INFOPLIST_FILE":"NO","INFOPLIST_FILE":"Target Support Files/sqflite_darwin/sqflite_darwin-Info.plist","INSTALL_PATH":"$(LOCAL_LIBRARY_DIR)/Frameworks","LD_RUNPATH_SEARCH_PATHS":"$(inherited) @executable_path/Frameworks @loader_path/Frameworks","MODULEMAP_FILE":"Target Support Files/sqflite_darwin/sqflite_darwin.modulemap","OTHER_LDFLAGS":"$(inherited) -framework Flutter","PRODUCT_MODULE_NAME":"sqflite_darwin","PRODUCT_NAME":"sqflite_darwin","SDKROOT":"iphoneos","SKIP_INSTALL":"YES","SWIFT_ACTIVE_COMPILATION_CONDITIONS":"$(inherited) ","SWIFT_INSTALL_OBJC_HEADER":"YES","SWIFT_VERSION":"5.0","TARGETED_DEVICE_FAMILY":"1,2","VALIDATE_PRODUCT":"YES","VALID_ARCHS[sdk=iphonesimulator*]":"$(ARCHS_STANDARD)","VERSIONING_SYSTEM":"apple-generic","VERSION_INFO_PREFIX":""},"guid":"bfdfe7dc352907fc980b868725387e984def481d54810d0de6d3335b228b2a5d","name":"Release"}],"buildPhases":[{"buildFiles":[{"fileReference":"bfdfe7dc352907fc980b868725387e983e7d9fa60b774739ab0d6568bf07a351","guid":"bfdfe7dc352907fc980b868725387e98f74bfe561cdc142d140be02f934f1dd5","headerVisibility":"public"},{"fileReference":"bfdfe7dc352907fc980b868725387e9879477fd65084cc006d19101f02256fe0","guid":"bfdfe7dc352907fc980b868725387e98128d41c6be7fab5e0c350afb32404ee9"},{"fileReference":"bfdfe7dc352907fc980b868725387e980e35fc805e7942676dde7f6a6cceca96","guid":"bfdfe7dc352907fc980b868725387e98996eaada1ef569420cabc129d90e2da5"},{"fileReference":"bfdfe7dc352907fc980b868725387e98592da7f3a49d3059663aa71a58cd0a4a","guid":"bfdfe7dc352907fc980b868725387e987840c2aacd1ce55599623d2fd8219817"},{"fileReference":"bfdfe7dc352907fc980b868725387e98ac0abeeeb91ccc5902df814d398020ae","guid":"bfdfe7dc352907fc980b868725387e9843bbc6c7e6cfcb0b409324fd055d0733"},{"fileReference":"bfdfe7dc352907fc980b868725387e980c6eff3a04d8f600b147b66f518c810b","guid":"bfdfe7dc352907fc980b868725387e9808d4ef82ccec1924430403b3fad24e14"},{"fileReference":"bfdfe7dc352907fc980b868725387e9812a82c89a68ff3aa4668003694edb150","guid":"bfdfe7dc352907fc980b868725387e9848d7f4c6b424b5eb3bda0e21cd2f4b1a"},{"fileReference":"bfdfe7dc352907fc980b868725387e987a187bee2cf8e65d0c11cbf842b8d0a7","guid":"bfdfe7dc352907fc980b868725387e98fe5a8d4fd311a1de8df3b173d547fb02"},{"fileReference":"bfdfe7dc352907fc980b868725387e985d2f0271270070876a34fb6538811993","guid":"bfdfe7dc352907fc980b868725387e98d7926028771abe4490aea6eb057df0a7"},{"fileReference":"bfdfe7dc352907fc980b868725387e985e37b28cf8fbbaa7f69a2cadcd43d21c","guid":"bfdfe7dc352907fc980b868725387e98ba15d3216bf17a3026096f27b47b2084"},{"fileReference":"bfdfe7dc352907fc980b868725387e98d68895a313533798394d82163692c629","guid":"bfdfe7dc352907fc980b868725387e9866e8ad8c42705df73de9d3ea6a45d657","headerVisibility":"public"},{"fileReference":"bfdfe7dc352907fc980b868725387e988b79e3ba836e166f4d2c19a363e77ef6","guid":"bfdfe7dc352907fc980b868725387e986ed45bb24536a4f4c65921c87272200d"},{"fileReference":"bfdfe7dc352907fc980b868725387e98c9475c24e421f8b84743f5f595dcf902","guid":"bfdfe7dc352907fc980b868725387e9839c167ada258f3fc19ab5c4d03331d93"},{"fileReference":"bfdfe7dc352907fc980b868725387e985cac4af7f944cc0b3df8c11a0e43e286","guid":"bfdfe7dc352907fc980b868725387e9812641da7dad587b2e5c4f906d00a4d67","headerVisibility":"public"}],"guid":"bfdfe7dc352907fc980b868725387e98cc465b98567e5be1dff8b7284a07e4e3","type":"com.apple.buildphase.headers"},{"buildFiles":[{"fileReference":"bfdfe7dc352907fc980b868725387e982eb21757b507687455f8acb8e01017e3","guid":"bfdfe7dc352907fc980b868725387e985adaa6c4e40f33315ac0cec984200988"},{"fileReference":"bfdfe7dc352907fc980b868725387e9830c704358e50b5466ffb0fa7d6c2e209","guid":"bfdfe7dc352907fc980b868725387e98b66bc2a5e8397ad7553c7550ed81a8b3"},{"fileReference":"bfdfe7dc352907fc980b868725387e982ce4fd3b13126d36c4c105bebc0d9fd1","guid":"bfdfe7dc352907fc980b868725387e984dfb7eb30a2be401cd610bfeffd4e000"},{"fileReference":"bfdfe7dc352907fc980b868725387e98c6a0774da49442d88e4fb061e345fcbf","guid":"bfdfe7dc352907fc980b868725387e98f121c456012e84e3920b1e569a862cc8"},{"fileReference":"bfdfe7dc352907fc980b868725387e98018efb908ca6e0716b824fc860f61c9b","guid":"bfdfe7dc352907fc980b868725387e981a3796db56db3bbb0b570434bd6eaebc"},{"fileReference":"bfdfe7dc352907fc980b868725387e9853e6f394a4d03f7b423702095b9e1482","guid":"bfdfe7dc352907fc980b868725387e986949c0ee9f19296b1da4b9965340e04f"},{"fileReference":"bfdfe7dc352907fc980b868725387e98c8dd825ce814e57bbe46ce1cda93d700","guid":"bfdfe7dc352907fc980b868725387e988dfb0b3f564c83890326c01342984f36"},{"fileReference":"bfdfe7dc352907fc980b868725387e98f0b4b8929472bef1ea1691b2d60d35bb","guid":"bfdfe7dc352907fc980b868725387e983c190223341c96acab486a2921e070db"},{"fileReference":"bfdfe7dc352907fc980b868725387e98e7fb17279cf291b6e4e53390f27f299e","guid":"bfdfe7dc352907fc980b868725387e9868a5700dd6e3280ea41f8cb79e1d012a"}],"guid":"bfdfe7dc352907fc980b868725387e9837c2f0a37c50e959478519168227e455","type":"com.apple.buildphase.sources"},{"buildFiles":[{"fileReference":"bfdfe7dc352907fc980b868725387e98b14af7c49882340ad551cb13b0a1e06d","guid":"bfdfe7dc352907fc980b868725387e982f461d51c284a55b8f869fc9092ae5dc"}],"guid":"bfdfe7dc352907fc980b868725387e98dd47f73652ff7b522b7942f6a87afd23","type":"com.apple.buildphase.frameworks"},{"buildFiles":[{"guid":"bfdfe7dc352907fc980b868725387e98d17544c34b81de618417de5f9c91b4ec","targetReference":"bfdfe7dc352907fc980b868725387e9883134bb5f399cb37a1eb075d4fea30d8"}],"guid":"bfdfe7dc352907fc980b868725387e98e60a652c76bfee084293e97b00176921","type":"com.apple.buildphase.resources"}],"buildRules":[],"dependencies":[{"guid":"bfdfe7dc352907fc980b868725387e989da425bb6d6d5d8dbb95e4afffb82217","name":"Flutter"},{"guid":"bfdfe7dc352907fc980b868725387e9883134bb5f399cb37a1eb075d4fea30d8","name":"sqflite_darwin-sqflite_darwin_privacy"}],"guid":"bfdfe7dc352907fc980b868725387e981304d3d2169071b3ca365b19f5340b7c","name":"sqflite_darwin","predominantSourceCodeLanguage":"Xcode.SourceCodeLanguage.Objective-C-Plus-Plus","productReference":{"guid":"bfdfe7dc352907fc980b868725387e98dbbec3eebed26c79cc653713be723aba","name":"sqflite_darwin.framework","type":"product"},"productTypeIdentifier":"com.apple.product-type.framework","provisioningSourceData":[{"bundleIdentifierFromInfoPlist":"${PRODUCT_BUNDLE_IDENTIFIER}","configurationName":"Debug","provisioningStyle":1},{"bundleIdentifierFromInfoPlist":"${PRODUCT_BUNDLE_IDENTIFIER}","configurationName":"Profile","provisioningStyle":1},{"bundleIdentifierFromInfoPlist":"${PRODUCT_BUNDLE_IDENTIFIER}","configurationName":"Release","provisioningStyle":1}],"type":"standard"} \ No newline at end of file diff --git a/mih_ui/android/build/ios/XCBuildData/PIFCache/target/TARGET@v11_hash=b77db6430f49f02a32943c46bd03734b-json b/mih_ui/android/build/ios/XCBuildData/PIFCache/target/TARGET@v11_hash=b77db6430f49f02a32943c46bd03734b-json new file mode 100644 index 00000000..d89e2b5f --- /dev/null +++ b/mih_ui/android/build/ios/XCBuildData/PIFCache/target/TARGET@v11_hash=b77db6430f49f02a32943c46bd03734b-json @@ -0,0 +1 @@ +{"buildConfigurations":[{"baseConfigurationFileReference":"bfdfe7dc352907fc980b868725387e98de35fcdac3f67fe0119b4d27e7b7c6d4","buildSettings":{"CODE_SIGNING_ALLOWED":"NO","CODE_SIGNING_IDENTITY":"-","CODE_SIGNING_REQUIRED":"NO","CONFIGURATION_BUILD_DIR":"$(BUILD_DIR)/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME)/share_plus","EXPANDED_CODE_SIGN_IDENTITY":"-","IBSC_MODULE":"share_plus","INFOPLIST_FILE":"Target Support Files/share_plus/ResourceBundle-share_plus_privacy-share_plus-Info.plist","IPHONEOS_DEPLOYMENT_TARGET":"12.0","ONLY_ACTIVE_ARCH":"NO","PRODUCT_NAME":"share_plus_privacy","SDKROOT":"iphoneos","SKIP_INSTALL":"YES","TARGETED_DEVICE_FAMILY":"1,2","WRAPPER_EXTENSION":"bundle"},"guid":"bfdfe7dc352907fc980b868725387e98e5a3d2d567b139959df75218c71b66fd","name":"Debug"},{"baseConfigurationFileReference":"bfdfe7dc352907fc980b868725387e98d3219dc3abe23add073ba57e4e5929db","buildSettings":{"CLANG_ENABLE_OBJC_WEAK":"NO","CODE_SIGNING_ALLOWED":"NO","CODE_SIGNING_IDENTITY":"-","CODE_SIGNING_REQUIRED":"NO","CONFIGURATION_BUILD_DIR":"$(BUILD_DIR)/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME)/share_plus","EXPANDED_CODE_SIGN_IDENTITY":"-","IBSC_MODULE":"share_plus","INFOPLIST_FILE":"Target Support Files/share_plus/ResourceBundle-share_plus_privacy-share_plus-Info.plist","IPHONEOS_DEPLOYMENT_TARGET":"12.0","PRODUCT_NAME":"share_plus_privacy","SDKROOT":"iphoneos","SKIP_INSTALL":"YES","TARGETED_DEVICE_FAMILY":"1,2","VALIDATE_PRODUCT":"YES","WRAPPER_EXTENSION":"bundle"},"guid":"bfdfe7dc352907fc980b868725387e986d4684892a6fdb9c01a08656828b5ab4","name":"Profile"},{"baseConfigurationFileReference":"bfdfe7dc352907fc980b868725387e98d3219dc3abe23add073ba57e4e5929db","buildSettings":{"CODE_SIGNING_ALLOWED":"NO","CODE_SIGNING_IDENTITY":"-","CODE_SIGNING_REQUIRED":"NO","CONFIGURATION_BUILD_DIR":"$(BUILD_DIR)/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME)/share_plus","EXPANDED_CODE_SIGN_IDENTITY":"-","IBSC_MODULE":"share_plus","INFOPLIST_FILE":"Target Support Files/share_plus/ResourceBundle-share_plus_privacy-share_plus-Info.plist","IPHONEOS_DEPLOYMENT_TARGET":"12.0","PRODUCT_NAME":"share_plus_privacy","SDKROOT":"iphoneos","SKIP_INSTALL":"YES","TARGETED_DEVICE_FAMILY":"1,2","WRAPPER_EXTENSION":"bundle"},"guid":"bfdfe7dc352907fc980b868725387e98faa8faccc0ce834a2f40454a96ae0f16","name":"Release"}],"buildPhases":[{"buildFiles":[],"guid":"bfdfe7dc352907fc980b868725387e98f228107ed7261ebdcf699369e1ff469b","type":"com.apple.buildphase.sources"},{"buildFiles":[],"guid":"bfdfe7dc352907fc980b868725387e9831f10af7cac106e78a3f4ac65215ce6c","type":"com.apple.buildphase.frameworks"},{"buildFiles":[{"fileReference":"bfdfe7dc352907fc980b868725387e98599bbd5b1a4bdbf5bed39a964d34f18c","guid":"bfdfe7dc352907fc980b868725387e9841c969f816d52d2934fec436e4bcc8ad"}],"guid":"bfdfe7dc352907fc980b868725387e9838153627aa97afe0a969918517cff7fc","type":"com.apple.buildphase.resources"}],"buildRules":[],"dependencies":[],"guid":"bfdfe7dc352907fc980b868725387e98de00f90750e7753637464fe34137709d","name":"share_plus-share_plus_privacy","productReference":{"guid":"bfdfe7dc352907fc980b868725387e987f86a96a3ca03f6247aa68a7b2c0bfd0","name":"share_plus_privacy.bundle","type":"product"},"productTypeIdentifier":"com.apple.product-type.bundle","provisioningSourceData":[{"bundleIdentifierFromInfoPlist":"${PRODUCT_BUNDLE_IDENTIFIER}","configurationName":"Debug","provisioningStyle":0},{"bundleIdentifierFromInfoPlist":"${PRODUCT_BUNDLE_IDENTIFIER}","configurationName":"Profile","provisioningStyle":0},{"bundleIdentifierFromInfoPlist":"${PRODUCT_BUNDLE_IDENTIFIER}","configurationName":"Release","provisioningStyle":0}],"type":"standard"} \ No newline at end of file diff --git a/mih_ui/android/build/ios/XCBuildData/PIFCache/target/TARGET@v11_hash=bca7282312c3cbd6420517c0b06b2299-json b/mih_ui/android/build/ios/XCBuildData/PIFCache/target/TARGET@v11_hash=bca7282312c3cbd6420517c0b06b2299-json new file mode 100644 index 00000000..b8afac45 --- /dev/null +++ b/mih_ui/android/build/ios/XCBuildData/PIFCache/target/TARGET@v11_hash=bca7282312c3cbd6420517c0b06b2299-json @@ -0,0 +1 @@ +{"buildConfigurations":[{"baseConfigurationFileReference":"bfdfe7dc352907fc980b868725387e980e6a79d9461f52673e9cd16e5e9ce12b","buildSettings":{"CODE_SIGNING_ALLOWED":"NO","CODE_SIGNING_IDENTITY":"-","CODE_SIGNING_REQUIRED":"NO","CONFIGURATION_BUILD_DIR":"$(BUILD_DIR)/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME)/file_picker","EXPANDED_CODE_SIGN_IDENTITY":"-","IBSC_MODULE":"file_picker","INFOPLIST_FILE":"Target Support Files/file_picker/ResourceBundle-file_picker_ios_privacy-file_picker-Info.plist","IPHONEOS_DEPLOYMENT_TARGET":"12.0","ONLY_ACTIVE_ARCH":"NO","PRODUCT_NAME":"file_picker_ios_privacy","SDKROOT":"iphoneos","SKIP_INSTALL":"YES","TARGETED_DEVICE_FAMILY":"1,2","WRAPPER_EXTENSION":"bundle"},"guid":"bfdfe7dc352907fc980b868725387e98e7e78ac96f79fef2cdccc6cc993884eb","name":"Debug"},{"baseConfigurationFileReference":"bfdfe7dc352907fc980b868725387e9855ea28d68c6105425b28b0dc67fbf53b","buildSettings":{"CLANG_ENABLE_OBJC_WEAK":"NO","CODE_SIGNING_ALLOWED":"NO","CODE_SIGNING_IDENTITY":"-","CODE_SIGNING_REQUIRED":"NO","CONFIGURATION_BUILD_DIR":"$(BUILD_DIR)/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME)/file_picker","EXPANDED_CODE_SIGN_IDENTITY":"-","IBSC_MODULE":"file_picker","INFOPLIST_FILE":"Target Support Files/file_picker/ResourceBundle-file_picker_ios_privacy-file_picker-Info.plist","IPHONEOS_DEPLOYMENT_TARGET":"12.0","PRODUCT_NAME":"file_picker_ios_privacy","SDKROOT":"iphoneos","SKIP_INSTALL":"YES","TARGETED_DEVICE_FAMILY":"1,2","VALIDATE_PRODUCT":"YES","WRAPPER_EXTENSION":"bundle"},"guid":"bfdfe7dc352907fc980b868725387e98030df92af3ffb7185e5f144aaca5e69d","name":"Profile"},{"baseConfigurationFileReference":"bfdfe7dc352907fc980b868725387e9855ea28d68c6105425b28b0dc67fbf53b","buildSettings":{"CODE_SIGNING_ALLOWED":"NO","CODE_SIGNING_IDENTITY":"-","CODE_SIGNING_REQUIRED":"NO","CONFIGURATION_BUILD_DIR":"$(BUILD_DIR)/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME)/file_picker","EXPANDED_CODE_SIGN_IDENTITY":"-","IBSC_MODULE":"file_picker","INFOPLIST_FILE":"Target Support Files/file_picker/ResourceBundle-file_picker_ios_privacy-file_picker-Info.plist","IPHONEOS_DEPLOYMENT_TARGET":"12.0","PRODUCT_NAME":"file_picker_ios_privacy","SDKROOT":"iphoneos","SKIP_INSTALL":"YES","TARGETED_DEVICE_FAMILY":"1,2","WRAPPER_EXTENSION":"bundle"},"guid":"bfdfe7dc352907fc980b868725387e98a14345481287e8e98db95bfecc704979","name":"Release"}],"buildPhases":[{"buildFiles":[],"guid":"bfdfe7dc352907fc980b868725387e98b1fa9f9f46dd0e1ce069cb3a890829f1","type":"com.apple.buildphase.sources"},{"buildFiles":[],"guid":"bfdfe7dc352907fc980b868725387e9819ce6287b1cc301d39929c98d63e4509","type":"com.apple.buildphase.frameworks"},{"buildFiles":[{"fileReference":"bfdfe7dc352907fc980b868725387e98b551b0a25b90abd62be165059ca67d67","guid":"bfdfe7dc352907fc980b868725387e98c89ed2b7d867d492dce9accf965b0a06"}],"guid":"bfdfe7dc352907fc980b868725387e988e8f9fb9411ed3d8661c320a247fd84e","type":"com.apple.buildphase.resources"}],"buildRules":[],"dependencies":[],"guid":"bfdfe7dc352907fc980b868725387e985452a642045cac0ef7c37f93da2d994e","name":"file_picker-file_picker_ios_privacy","productReference":{"guid":"bfdfe7dc352907fc980b868725387e985ae769d0b989789f9e90cfb215ac5a2e","name":"file_picker_ios_privacy.bundle","type":"product"},"productTypeIdentifier":"com.apple.product-type.bundle","provisioningSourceData":[{"bundleIdentifierFromInfoPlist":"${PRODUCT_BUNDLE_IDENTIFIER}","configurationName":"Debug","provisioningStyle":0},{"bundleIdentifierFromInfoPlist":"${PRODUCT_BUNDLE_IDENTIFIER}","configurationName":"Profile","provisioningStyle":0},{"bundleIdentifierFromInfoPlist":"${PRODUCT_BUNDLE_IDENTIFIER}","configurationName":"Release","provisioningStyle":0}],"type":"standard"} \ No newline at end of file diff --git a/mih_ui/android/build/ios/XCBuildData/PIFCache/target/TARGET@v11_hash=bec8a7e752ab7d5daa41943969c542ce-json b/mih_ui/android/build/ios/XCBuildData/PIFCache/target/TARGET@v11_hash=bec8a7e752ab7d5daa41943969c542ce-json new file mode 100644 index 00000000..d6fa787b --- /dev/null +++ b/mih_ui/android/build/ios/XCBuildData/PIFCache/target/TARGET@v11_hash=bec8a7e752ab7d5daa41943969c542ce-json @@ -0,0 +1 @@ +{"buildConfigurations":[{"baseConfigurationFileReference":"bfdfe7dc352907fc980b868725387e981ccda656ca076caea1e69514af198f0f","buildSettings":{"CLANG_ENABLE_OBJC_WEAK":"NO","CODE_SIGN_IDENTITY[sdk=appletvos*]":"","CODE_SIGN_IDENTITY[sdk=iphoneos*]":"","CODE_SIGN_IDENTITY[sdk=watchos*]":"","CURRENT_PROJECT_VERSION":"1","DEFINES_MODULE":"YES","DYLIB_COMPATIBILITY_VERSION":"1","DYLIB_CURRENT_VERSION":"1","DYLIB_INSTALL_NAME_BASE":"@rpath","ENABLE_MODULE_VERIFIER":"NO","ENABLE_USER_SCRIPT_SANDBOXING":"NO","GENERATE_INFOPLIST_FILE":"NO","INFOPLIST_FILE":"Target Support Files/GoogleUtilities/GoogleUtilities-Info.plist","INSTALL_PATH":"$(LOCAL_LIBRARY_DIR)/Frameworks","IPHONEOS_DEPLOYMENT_TARGET":"12.0","LD_RUNPATH_SEARCH_PATHS":"$(inherited) @executable_path/Frameworks @loader_path/Frameworks","MODULEMAP_FILE":"Target Support Files/GoogleUtilities/GoogleUtilities.modulemap","ONLY_ACTIVE_ARCH":"NO","PRODUCT_MODULE_NAME":"GoogleUtilities","PRODUCT_NAME":"GoogleUtilities","SDKROOT":"iphoneos","SKIP_INSTALL":"YES","SWIFT_ACTIVE_COMPILATION_CONDITIONS":"$(inherited) ","SWIFT_INSTALL_OBJC_HEADER":"YES","SWIFT_VERSION":"5.0","TARGETED_DEVICE_FAMILY":"1,2","VERSIONING_SYSTEM":"apple-generic","VERSION_INFO_PREFIX":""},"guid":"bfdfe7dc352907fc980b868725387e98793392d0b2a0b5d47aa3f042e39e70ae","name":"Debug"},{"baseConfigurationFileReference":"bfdfe7dc352907fc980b868725387e984a59f58d9dc78fdedc9a249bdac259e0","buildSettings":{"CLANG_ENABLE_OBJC_WEAK":"NO","CODE_SIGN_IDENTITY[sdk=appletvos*]":"","CODE_SIGN_IDENTITY[sdk=iphoneos*]":"","CODE_SIGN_IDENTITY[sdk=watchos*]":"","CURRENT_PROJECT_VERSION":"1","DEFINES_MODULE":"YES","DYLIB_COMPATIBILITY_VERSION":"1","DYLIB_CURRENT_VERSION":"1","DYLIB_INSTALL_NAME_BASE":"@rpath","ENABLE_MODULE_VERIFIER":"NO","ENABLE_USER_SCRIPT_SANDBOXING":"NO","GENERATE_INFOPLIST_FILE":"NO","INFOPLIST_FILE":"Target Support Files/GoogleUtilities/GoogleUtilities-Info.plist","INSTALL_PATH":"$(LOCAL_LIBRARY_DIR)/Frameworks","IPHONEOS_DEPLOYMENT_TARGET":"12.0","LD_RUNPATH_SEARCH_PATHS":"$(inherited) @executable_path/Frameworks @loader_path/Frameworks","MODULEMAP_FILE":"Target Support Files/GoogleUtilities/GoogleUtilities.modulemap","PRODUCT_MODULE_NAME":"GoogleUtilities","PRODUCT_NAME":"GoogleUtilities","SDKROOT":"iphoneos","SKIP_INSTALL":"YES","SWIFT_ACTIVE_COMPILATION_CONDITIONS":"$(inherited) ","SWIFT_INSTALL_OBJC_HEADER":"YES","SWIFT_VERSION":"5.0","TARGETED_DEVICE_FAMILY":"1,2","VALIDATE_PRODUCT":"YES","VERSIONING_SYSTEM":"apple-generic","VERSION_INFO_PREFIX":""},"guid":"bfdfe7dc352907fc980b868725387e9865b9fba70050dac6138d14ba73a94446","name":"Profile"},{"baseConfigurationFileReference":"bfdfe7dc352907fc980b868725387e984a59f58d9dc78fdedc9a249bdac259e0","buildSettings":{"CLANG_ENABLE_OBJC_WEAK":"NO","CODE_SIGN_IDENTITY[sdk=appletvos*]":"","CODE_SIGN_IDENTITY[sdk=iphoneos*]":"","CODE_SIGN_IDENTITY[sdk=watchos*]":"","CURRENT_PROJECT_VERSION":"1","DEFINES_MODULE":"YES","DYLIB_COMPATIBILITY_VERSION":"1","DYLIB_CURRENT_VERSION":"1","DYLIB_INSTALL_NAME_BASE":"@rpath","ENABLE_MODULE_VERIFIER":"NO","ENABLE_USER_SCRIPT_SANDBOXING":"NO","GENERATE_INFOPLIST_FILE":"NO","INFOPLIST_FILE":"Target Support Files/GoogleUtilities/GoogleUtilities-Info.plist","INSTALL_PATH":"$(LOCAL_LIBRARY_DIR)/Frameworks","IPHONEOS_DEPLOYMENT_TARGET":"12.0","LD_RUNPATH_SEARCH_PATHS":"$(inherited) @executable_path/Frameworks @loader_path/Frameworks","MODULEMAP_FILE":"Target Support Files/GoogleUtilities/GoogleUtilities.modulemap","PRODUCT_MODULE_NAME":"GoogleUtilities","PRODUCT_NAME":"GoogleUtilities","SDKROOT":"iphoneos","SKIP_INSTALL":"YES","SWIFT_ACTIVE_COMPILATION_CONDITIONS":"$(inherited) ","SWIFT_INSTALL_OBJC_HEADER":"YES","SWIFT_VERSION":"5.0","TARGETED_DEVICE_FAMILY":"1,2","VALIDATE_PRODUCT":"YES","VERSIONING_SYSTEM":"apple-generic","VERSION_INFO_PREFIX":""},"guid":"bfdfe7dc352907fc980b868725387e98519621d5de4a46cb8b7b01ccba5eacb9","name":"Release"}],"buildPhases":[{"buildFiles":[{"fileReference":"bfdfe7dc352907fc980b868725387e98845f39c98795e88b4a4937d3cf6cf467","guid":"bfdfe7dc352907fc980b868725387e98c0262c52c9f15ef9b1cc1cf21b27b91c","headerVisibility":"public"},{"fileReference":"bfdfe7dc352907fc980b868725387e98c29046bbab936122dbb0c2cfc14ba72d","guid":"bfdfe7dc352907fc980b868725387e985fa36fcbbe638b46a9f4e712443948b4","headerVisibility":"public"},{"fileReference":"bfdfe7dc352907fc980b868725387e98eab1d503d7f2282f98d6d9a02d7ec14d","guid":"bfdfe7dc352907fc980b868725387e981d941a5de8bead97782cad810830a5a9"},{"fileReference":"bfdfe7dc352907fc980b868725387e98d2f8185c0a44a500020d910dc85efd9a","guid":"bfdfe7dc352907fc980b868725387e9830090dec5db655b35732530148a40c7b","headerVisibility":"public"},{"fileReference":"bfdfe7dc352907fc980b868725387e980cb51518c389a1e74d47410a29888c54","guid":"bfdfe7dc352907fc980b868725387e982356d4b36aed609ad10f91702457d2d2","headerVisibility":"public"},{"fileReference":"bfdfe7dc352907fc980b868725387e985108977873122d0fd57cf870ac976fae","guid":"bfdfe7dc352907fc980b868725387e988cc9ac141aeb4adbaae609c44b9a4fe6","headerVisibility":"public"},{"fileReference":"bfdfe7dc352907fc980b868725387e9852edbfb572efb173287d7f90327aaf76","guid":"bfdfe7dc352907fc980b868725387e98bd963f63c09db904c898ba55d88dc71d","headerVisibility":"public"},{"fileReference":"bfdfe7dc352907fc980b868725387e98618f336933ff6de3d4b3c21ed135498e","guid":"bfdfe7dc352907fc980b868725387e980021e82b1497257aa0218fd3c8f86e17","headerVisibility":"public"},{"fileReference":"bfdfe7dc352907fc980b868725387e98475fd4618ac5ac675f5ed1b8f6b6716f","guid":"bfdfe7dc352907fc980b868725387e98a3c778a2514863bfcb2200fbf5100c9e"},{"fileReference":"bfdfe7dc352907fc980b868725387e981958c32a9380d192ba5d6d582d804a04","guid":"bfdfe7dc352907fc980b868725387e98958acf964d2ae7e3caee0b8c451b09e2","headerVisibility":"public"},{"fileReference":"bfdfe7dc352907fc980b868725387e98873946fb03e9b9792f4f2c868cb04157","guid":"bfdfe7dc352907fc980b868725387e98b343a1a932677bfa2d18cb1a0b144e68","headerVisibility":"public"},{"fileReference":"bfdfe7dc352907fc980b868725387e98b539eaa0485467aec39f108decf7ce35","guid":"bfdfe7dc352907fc980b868725387e9801eeb14b9dd6704e7b6066d9c8d61296","headerVisibility":"public"},{"fileReference":"bfdfe7dc352907fc980b868725387e98f596251d1ba47fb590a11c4fedd4bad6","guid":"bfdfe7dc352907fc980b868725387e9846adbe422c2bde237a26674cdee17b78","headerVisibility":"public"},{"fileReference":"bfdfe7dc352907fc980b868725387e98ed0c4266fd7527af26b4180205338e03","guid":"bfdfe7dc352907fc980b868725387e98d2f912486e901ca4584510e98f725ace","headerVisibility":"public"},{"fileReference":"bfdfe7dc352907fc980b868725387e988a9a3e02046e4440587c711dad22de63","guid":"bfdfe7dc352907fc980b868725387e98d327704c98281573a8ec6d9f45cd28e1"},{"fileReference":"bfdfe7dc352907fc980b868725387e98676e9831ef9ffb5a827c77d203afd919","guid":"bfdfe7dc352907fc980b868725387e98d5b724d922712a9f76e08f61fb9fc70a","headerVisibility":"public"},{"fileReference":"bfdfe7dc352907fc980b868725387e98436c7dd83d7131340adf9904ee2a22d7","guid":"bfdfe7dc352907fc980b868725387e98206fab94717a61cfafb039ff58d35a0c","headerVisibility":"public"},{"fileReference":"bfdfe7dc352907fc980b868725387e98e8161f35d2f39b644227bef4985f0d59","guid":"bfdfe7dc352907fc980b868725387e984f0c21ccd5e36ab7f241e3e752a500d5","headerVisibility":"public"},{"fileReference":"bfdfe7dc352907fc980b868725387e98e22f64f75d44ed26f0063f98c220931a","guid":"bfdfe7dc352907fc980b868725387e98d02fb7f9dfd74d0dec91d6fd11390716","headerVisibility":"public"},{"fileReference":"bfdfe7dc352907fc980b868725387e98c794a9f352278aabf8d2fa9bcf1b4ee3","guid":"bfdfe7dc352907fc980b868725387e988d2bd0cc39ccea78c5be517ca9aa42f5","headerVisibility":"public"},{"fileReference":"bfdfe7dc352907fc980b868725387e988c2d21cc3ccea47a9793788238de5094","guid":"bfdfe7dc352907fc980b868725387e981abe0c3f1cd919f7bd4e32b734e6bbbb"},{"fileReference":"bfdfe7dc352907fc980b868725387e987937768805e8acc718e8e50513d69cbd","guid":"bfdfe7dc352907fc980b868725387e98feba0120075400ed3b201e8a30659f68"},{"fileReference":"bfdfe7dc352907fc980b868725387e98ade842c0931397013938f333262dace9","guid":"bfdfe7dc352907fc980b868725387e98b05dbd36b34edd4e1be09d01b2284cdc","headerVisibility":"public"},{"fileReference":"bfdfe7dc352907fc980b868725387e988abc52683367496919aa598227a1331f","guid":"bfdfe7dc352907fc980b868725387e983596e2b4984780a693f2792b1b5a7f18"},{"fileReference":"bfdfe7dc352907fc980b868725387e98c5a84dc841d16549464a86e97f593c03","guid":"bfdfe7dc352907fc980b868725387e98b90568286da862f16e2f88320a146302","headerVisibility":"public"},{"fileReference":"bfdfe7dc352907fc980b868725387e985c18bce96838a531d4d7946d6ee3e86f","guid":"bfdfe7dc352907fc980b868725387e980dd4450c821da3e2ad3d478e338edb04"}],"guid":"bfdfe7dc352907fc980b868725387e98a415572b1562595f0c46e5b5cf8592bd","type":"com.apple.buildphase.headers"},{"buildFiles":[{"fileReference":"bfdfe7dc352907fc980b868725387e98d975ca315b4242d5baed303cb7aab051","guid":"bfdfe7dc352907fc980b868725387e98a4e7a20628e3d8b892e2b48e14f91028"},{"fileReference":"bfdfe7dc352907fc980b868725387e9836a90af84591e983274e6666393b3a2e","guid":"bfdfe7dc352907fc980b868725387e98ee00a6c9a0a56d9de69a03305b6e1921"},{"fileReference":"bfdfe7dc352907fc980b868725387e98c27f8b93b1c490fbac91a853d0924367","guid":"bfdfe7dc352907fc980b868725387e9862c73f036c4c9fdbb78c54f564e9215d"},{"fileReference":"bfdfe7dc352907fc980b868725387e9804c38c80ac78ea91dfede61e8a02a9f4","guid":"bfdfe7dc352907fc980b868725387e9886b3f0d7704f9a75be922ea3657120f9"},{"fileReference":"bfdfe7dc352907fc980b868725387e98e76ed7edc7a31347233120173cdb2e3a","guid":"bfdfe7dc352907fc980b868725387e985c49d2645e456f63d33f45596d887b24"},{"fileReference":"bfdfe7dc352907fc980b868725387e984a49ba4137eac58897391a09f550b916","guid":"bfdfe7dc352907fc980b868725387e98eb3975180c5f303377eaa8dcb3c5e4b9"},{"fileReference":"bfdfe7dc352907fc980b868725387e983e9921832e287ee04048d221e1bee849","guid":"bfdfe7dc352907fc980b868725387e98e09616b72f88ba692ee8f54bc10ea5f2"},{"fileReference":"bfdfe7dc352907fc980b868725387e987128275d56f53442e3921be1a6970593","guid":"bfdfe7dc352907fc980b868725387e981dfcf72b4e28b55038f17a958454cd59"},{"fileReference":"bfdfe7dc352907fc980b868725387e985b8cba972f211425405a63011c53445a","guid":"bfdfe7dc352907fc980b868725387e980effb268955087e7db669e1da6146955"},{"fileReference":"bfdfe7dc352907fc980b868725387e98089b73b727d89e627dc2d8e0e82dc186","guid":"bfdfe7dc352907fc980b868725387e982db3d27f87f50556ca44b543574d7b21"},{"fileReference":"bfdfe7dc352907fc980b868725387e9823abfe0467d22e8134a5c86c0381cf91","guid":"bfdfe7dc352907fc980b868725387e98e6a3c5ca501d74d506859ab16548b704"},{"fileReference":"bfdfe7dc352907fc980b868725387e9817e6f355fc27ce11ca9eca96e7177a5a","guid":"bfdfe7dc352907fc980b868725387e9832f2896fe76316470f82abcc257092b7"},{"fileReference":"bfdfe7dc352907fc980b868725387e986a169b3bbe51ae95f696d081d0a7c6eb","guid":"bfdfe7dc352907fc980b868725387e9875ad916c74e8c7cdcd6bb32d8b717aad"},{"fileReference":"bfdfe7dc352907fc980b868725387e98bb8b15be2869f96e89cb90c94f936c88","guid":"bfdfe7dc352907fc980b868725387e989a97cc9235d7af64c66d6b89dfc849f1"},{"fileReference":"bfdfe7dc352907fc980b868725387e98ab52ae4e38d39e8507fe9603aa99a926","guid":"bfdfe7dc352907fc980b868725387e986765d5ed97e290f49fbf5472819df038"},{"fileReference":"bfdfe7dc352907fc980b868725387e98c93ef45b447d11d19620fa2627f46021","guid":"bfdfe7dc352907fc980b868725387e987fc888c7b9d41ccda5cc7e0bc571494f"}],"guid":"bfdfe7dc352907fc980b868725387e98baa793ef163ae38add98dde80ec0f028","type":"com.apple.buildphase.sources"},{"buildFiles":[{"fileReference":"bfdfe7dc352907fc980b868725387e98b14af7c49882340ad551cb13b0a1e06d","guid":"bfdfe7dc352907fc980b868725387e989cc92cbf6cfd341c97b42afe5ef3ae15"},{"fileReference":"bfdfe7dc352907fc980b868725387e9820c167798bdb228b4ab52bb2aa7eb24b","guid":"bfdfe7dc352907fc980b868725387e984219e8ad2796683567b161d56d0542fc"},{"fileReference":"bfdfe7dc352907fc980b868725387e98e0217d662efb0603efc52f1254a3c7a8","guid":"bfdfe7dc352907fc980b868725387e98494756648d148dfd85a540d5dfa40c0b"}],"guid":"bfdfe7dc352907fc980b868725387e9888e6a5479802250bf82d036ca17f7195","type":"com.apple.buildphase.frameworks"},{"buildFiles":[{"guid":"bfdfe7dc352907fc980b868725387e98fa55bb6ad9a1e437351d0ec8ac00da47","targetReference":"bfdfe7dc352907fc980b868725387e981a9fac6eb9c80f8eed49fda0531af6a4"}],"guid":"bfdfe7dc352907fc980b868725387e9807086d74acbea69d70cf2d58f1edcc28","type":"com.apple.buildphase.resources"}],"buildRules":[],"dependencies":[{"guid":"bfdfe7dc352907fc980b868725387e981a9fac6eb9c80f8eed49fda0531af6a4","name":"GoogleUtilities-GoogleUtilities_Privacy"}],"guid":"bfdfe7dc352907fc980b868725387e98718890dfdac589615663a02d43d9af3e","name":"GoogleUtilities","predominantSourceCodeLanguage":"Xcode.SourceCodeLanguage.Objective-C-Plus-Plus","productReference":{"guid":"bfdfe7dc352907fc980b868725387e98ca49ca851f2777b997a3e74ccb860358","name":"GoogleUtilities.framework","type":"product"},"productTypeIdentifier":"com.apple.product-type.framework","provisioningSourceData":[{"bundleIdentifierFromInfoPlist":"${PRODUCT_BUNDLE_IDENTIFIER}","configurationName":"Debug","provisioningStyle":1},{"bundleIdentifierFromInfoPlist":"${PRODUCT_BUNDLE_IDENTIFIER}","configurationName":"Profile","provisioningStyle":1},{"bundleIdentifierFromInfoPlist":"${PRODUCT_BUNDLE_IDENTIFIER}","configurationName":"Release","provisioningStyle":1}],"type":"standard"} \ No newline at end of file diff --git a/mih_ui/android/build/ios/XCBuildData/PIFCache/target/TARGET@v11_hash=c1be6d82376acb043052cbc000a547ae-json b/mih_ui/android/build/ios/XCBuildData/PIFCache/target/TARGET@v11_hash=c1be6d82376acb043052cbc000a547ae-json new file mode 100644 index 00000000..18e5871b --- /dev/null +++ b/mih_ui/android/build/ios/XCBuildData/PIFCache/target/TARGET@v11_hash=c1be6d82376acb043052cbc000a547ae-json @@ -0,0 +1 @@ +{"buildConfigurations":[{"baseConfigurationFileReference":"bfdfe7dc352907fc980b868725387e982b66b547d250357cf91d1817df7cb423","buildSettings":{"CODE_SIGNING_ALLOWED":"NO","CODE_SIGNING_IDENTITY":"-","CODE_SIGNING_REQUIRED":"NO","CONFIGURATION_BUILD_DIR":"$(BUILD_DIR)/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME)/file_selector_ios","EXPANDED_CODE_SIGN_IDENTITY":"-","IBSC_MODULE":"file_selector_ios","INFOPLIST_FILE":"Target Support Files/file_selector_ios/ResourceBundle-file_selector_ios_privacy-file_selector_ios-Info.plist","IPHONEOS_DEPLOYMENT_TARGET":"12.0","ONLY_ACTIVE_ARCH":"NO","PRODUCT_NAME":"file_selector_ios_privacy","SDKROOT":"iphoneos","SKIP_INSTALL":"YES","TARGETED_DEVICE_FAMILY":"1,2","WRAPPER_EXTENSION":"bundle"},"guid":"bfdfe7dc352907fc980b868725387e98eba1323e3dd271e674c3ba6f2a782347","name":"Debug"},{"baseConfigurationFileReference":"bfdfe7dc352907fc980b868725387e98f68cdcb857b34033c4bd7d63083cfeef","buildSettings":{"CLANG_ENABLE_OBJC_WEAK":"NO","CODE_SIGNING_ALLOWED":"NO","CODE_SIGNING_IDENTITY":"-","CODE_SIGNING_REQUIRED":"NO","CONFIGURATION_BUILD_DIR":"$(BUILD_DIR)/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME)/file_selector_ios","EXPANDED_CODE_SIGN_IDENTITY":"-","IBSC_MODULE":"file_selector_ios","INFOPLIST_FILE":"Target Support Files/file_selector_ios/ResourceBundle-file_selector_ios_privacy-file_selector_ios-Info.plist","IPHONEOS_DEPLOYMENT_TARGET":"12.0","PRODUCT_NAME":"file_selector_ios_privacy","SDKROOT":"iphoneos","SKIP_INSTALL":"YES","TARGETED_DEVICE_FAMILY":"1,2","VALIDATE_PRODUCT":"YES","WRAPPER_EXTENSION":"bundle"},"guid":"bfdfe7dc352907fc980b868725387e98fdbc6e81278bdd854b5da56b6983cac8","name":"Profile"},{"baseConfigurationFileReference":"bfdfe7dc352907fc980b868725387e98f68cdcb857b34033c4bd7d63083cfeef","buildSettings":{"CODE_SIGNING_ALLOWED":"NO","CODE_SIGNING_IDENTITY":"-","CODE_SIGNING_REQUIRED":"NO","CONFIGURATION_BUILD_DIR":"$(BUILD_DIR)/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME)/file_selector_ios","EXPANDED_CODE_SIGN_IDENTITY":"-","IBSC_MODULE":"file_selector_ios","INFOPLIST_FILE":"Target Support Files/file_selector_ios/ResourceBundle-file_selector_ios_privacy-file_selector_ios-Info.plist","IPHONEOS_DEPLOYMENT_TARGET":"12.0","PRODUCT_NAME":"file_selector_ios_privacy","SDKROOT":"iphoneos","SKIP_INSTALL":"YES","TARGETED_DEVICE_FAMILY":"1,2","WRAPPER_EXTENSION":"bundle"},"guid":"bfdfe7dc352907fc980b868725387e986442f840b2209922c85f4e1df1016096","name":"Release"}],"buildPhases":[{"buildFiles":[],"guid":"bfdfe7dc352907fc980b868725387e9873c1f4137498928a8efc00e6d59a0cd2","type":"com.apple.buildphase.sources"},{"buildFiles":[],"guid":"bfdfe7dc352907fc980b868725387e98f1ee2d7e135b464c46b9d2c75d8df4ce","type":"com.apple.buildphase.frameworks"},{"buildFiles":[{"fileReference":"bfdfe7dc352907fc980b868725387e9829fbee1379c76a8f9639197078562c42","guid":"bfdfe7dc352907fc980b868725387e98582312471fe04e4750555118964d8479"}],"guid":"bfdfe7dc352907fc980b868725387e9895fd39c9cc061b537d91a78419bbb412","type":"com.apple.buildphase.resources"}],"buildRules":[],"dependencies":[],"guid":"bfdfe7dc352907fc980b868725387e9865c7202c1fc33b2af510b64e6d532fb2","name":"file_selector_ios-file_selector_ios_privacy","productReference":{"guid":"bfdfe7dc352907fc980b868725387e98eea7ddd1978d7c6c4a7d366f56242af7","name":"file_selector_ios_privacy.bundle","type":"product"},"productTypeIdentifier":"com.apple.product-type.bundle","provisioningSourceData":[{"bundleIdentifierFromInfoPlist":"${PRODUCT_BUNDLE_IDENTIFIER}","configurationName":"Debug","provisioningStyle":0},{"bundleIdentifierFromInfoPlist":"${PRODUCT_BUNDLE_IDENTIFIER}","configurationName":"Profile","provisioningStyle":0},{"bundleIdentifierFromInfoPlist":"${PRODUCT_BUNDLE_IDENTIFIER}","configurationName":"Release","provisioningStyle":0}],"type":"standard"} \ No newline at end of file diff --git a/mih_ui/android/build/ios/XCBuildData/PIFCache/target/TARGET@v11_hash=c369ca2358afe46d56e9c4f067675637-json b/mih_ui/android/build/ios/XCBuildData/PIFCache/target/TARGET@v11_hash=c369ca2358afe46d56e9c4f067675637-json new file mode 100644 index 00000000..099db5b5 --- /dev/null +++ b/mih_ui/android/build/ios/XCBuildData/PIFCache/target/TARGET@v11_hash=c369ca2358afe46d56e9c4f067675637-json @@ -0,0 +1 @@ +{"buildConfigurations":[{"baseConfigurationFileReference":"bfdfe7dc352907fc980b868725387e98d8979ec56d38d5f43a66a4cc2fbcb401","buildSettings":{"CLANG_ENABLE_OBJC_WEAK":"NO","CLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER":"NO","CODE_SIGN_IDENTITY[sdk=appletvos*]":"","CODE_SIGN_IDENTITY[sdk=iphoneos*]":"","CODE_SIGN_IDENTITY[sdk=watchos*]":"","CURRENT_PROJECT_VERSION":"1","DYLIB_COMPATIBILITY_VERSION":"1","DYLIB_CURRENT_VERSION":"1","DYLIB_INSTALL_NAME_BASE":"@rpath","ENABLE_BITCODE":"NO","ENABLE_MODULE_VERIFIER":"NO","ENABLE_USER_SCRIPT_SANDBOXING":"NO","EXCLUDED_ARCHS[sdk=iphoneos*]":"$(inherited) armv7","EXCLUDED_ARCHS[sdk=iphonesimulator*]":"$(inherited) i386","FRAMEWORK_SEARCH_PATHS[sdk=iphoneos*]":"\"/Users/yaso_meth/Git/flutter/bin/cache/artifacts/engine/ios/Flutter.xcframework/ios-arm64\" $(inherited)","FRAMEWORK_SEARCH_PATHS[sdk=iphonesimulator*]":"\"/Users/yaso_meth/Git/flutter/bin/cache/artifacts/engine/ios/Flutter.xcframework/ios-arm64_x86_64-simulator\" $(inherited)","GCC_PREFIX_HEADER":"Target Support Files/webview_flutter_wkwebview/webview_flutter_wkwebview-prefix.pch","GENERATE_INFOPLIST_FILE":"NO","INFOPLIST_FILE":"Target Support Files/webview_flutter_wkwebview/webview_flutter_wkwebview-Info.plist","INSTALL_PATH":"$(LOCAL_LIBRARY_DIR)/Frameworks","MODULEMAP_FILE":"Target Support Files/webview_flutter_wkwebview/webview_flutter_wkwebview.modulemap","ONLY_ACTIVE_ARCH":"NO","OTHER_LDFLAGS":"$(inherited) -framework Flutter","PRODUCT_MODULE_NAME":"webview_flutter_wkwebview","PRODUCT_NAME":"webview_flutter_wkwebview","SDKROOT":"iphoneos","SKIP_INSTALL":"YES","SWIFT_ACTIVE_COMPILATION_CONDITIONS":"$(inherited) ","SWIFT_INSTALL_OBJC_HEADER":"YES","SWIFT_VERSION":"5.0","TARGETED_DEVICE_FAMILY":"1,2","VALID_ARCHS[sdk=iphonesimulator*]":"$(ARCHS_STANDARD)","VERSIONING_SYSTEM":"apple-generic","VERSION_INFO_PREFIX":""},"guid":"bfdfe7dc352907fc980b868725387e981ff4ee6b2d87a9b32a1fe29a8421b0e6","name":"Debug"},{"baseConfigurationFileReference":"bfdfe7dc352907fc980b868725387e984206827662d5208f461a0eccfc0e621b","buildSettings":{"CLANG_ENABLE_OBJC_WEAK":"NO","CLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER":"NO","CODE_SIGN_IDENTITY[sdk=appletvos*]":"","CODE_SIGN_IDENTITY[sdk=iphoneos*]":"","CODE_SIGN_IDENTITY[sdk=watchos*]":"","CURRENT_PROJECT_VERSION":"1","DYLIB_COMPATIBILITY_VERSION":"1","DYLIB_CURRENT_VERSION":"1","DYLIB_INSTALL_NAME_BASE":"@rpath","ENABLE_BITCODE":"NO","ENABLE_MODULE_VERIFIER":"NO","ENABLE_USER_SCRIPT_SANDBOXING":"NO","EXCLUDED_ARCHS[sdk=iphoneos*]":"$(inherited) armv7","EXCLUDED_ARCHS[sdk=iphonesimulator*]":"$(inherited) i386","FRAMEWORK_SEARCH_PATHS[sdk=iphoneos*]":"\"/Users/yaso_meth/Git/flutter/bin/cache/artifacts/engine/ios-release/Flutter.xcframework/ios-arm64\" $(inherited)","FRAMEWORK_SEARCH_PATHS[sdk=iphonesimulator*]":"\"/Users/yaso_meth/Git/flutter/bin/cache/artifacts/engine/ios-release/Flutter.xcframework/ios-arm64_x86_64-simulator\" $(inherited)","GCC_PREFIX_HEADER":"Target Support Files/webview_flutter_wkwebview/webview_flutter_wkwebview-prefix.pch","GENERATE_INFOPLIST_FILE":"NO","INFOPLIST_FILE":"Target Support Files/webview_flutter_wkwebview/webview_flutter_wkwebview-Info.plist","INSTALL_PATH":"$(LOCAL_LIBRARY_DIR)/Frameworks","MODULEMAP_FILE":"Target Support Files/webview_flutter_wkwebview/webview_flutter_wkwebview.modulemap","OTHER_LDFLAGS":"$(inherited) -framework Flutter","PRODUCT_MODULE_NAME":"webview_flutter_wkwebview","PRODUCT_NAME":"webview_flutter_wkwebview","SDKROOT":"iphoneos","SKIP_INSTALL":"YES","SWIFT_ACTIVE_COMPILATION_CONDITIONS":"$(inherited) ","SWIFT_INSTALL_OBJC_HEADER":"YES","SWIFT_VERSION":"5.0","TARGETED_DEVICE_FAMILY":"1,2","VALIDATE_PRODUCT":"YES","VALID_ARCHS[sdk=iphonesimulator*]":"$(ARCHS_STANDARD)","VERSIONING_SYSTEM":"apple-generic","VERSION_INFO_PREFIX":""},"guid":"bfdfe7dc352907fc980b868725387e98b244d36e17c524559c280c5efd5caedf","name":"Profile"},{"baseConfigurationFileReference":"bfdfe7dc352907fc980b868725387e984206827662d5208f461a0eccfc0e621b","buildSettings":{"CLANG_ENABLE_OBJC_WEAK":"NO","CLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER":"NO","CODE_SIGN_IDENTITY[sdk=appletvos*]":"","CODE_SIGN_IDENTITY[sdk=iphoneos*]":"","CODE_SIGN_IDENTITY[sdk=watchos*]":"","CURRENT_PROJECT_VERSION":"1","DYLIB_COMPATIBILITY_VERSION":"1","DYLIB_CURRENT_VERSION":"1","DYLIB_INSTALL_NAME_BASE":"@rpath","ENABLE_BITCODE":"NO","ENABLE_MODULE_VERIFIER":"NO","ENABLE_USER_SCRIPT_SANDBOXING":"NO","EXCLUDED_ARCHS[sdk=iphoneos*]":"$(inherited) armv7","EXCLUDED_ARCHS[sdk=iphonesimulator*]":"$(inherited) i386","FRAMEWORK_SEARCH_PATHS[sdk=iphoneos*]":"\"/Users/yaso_meth/Git/flutter/bin/cache/artifacts/engine/ios-release/Flutter.xcframework/ios-arm64\" $(inherited)","FRAMEWORK_SEARCH_PATHS[sdk=iphonesimulator*]":"\"/Users/yaso_meth/Git/flutter/bin/cache/artifacts/engine/ios-release/Flutter.xcframework/ios-arm64_x86_64-simulator\" $(inherited)","GCC_PREFIX_HEADER":"Target Support Files/webview_flutter_wkwebview/webview_flutter_wkwebview-prefix.pch","GENERATE_INFOPLIST_FILE":"NO","INFOPLIST_FILE":"Target Support Files/webview_flutter_wkwebview/webview_flutter_wkwebview-Info.plist","INSTALL_PATH":"$(LOCAL_LIBRARY_DIR)/Frameworks","MODULEMAP_FILE":"Target Support Files/webview_flutter_wkwebview/webview_flutter_wkwebview.modulemap","OTHER_LDFLAGS":"$(inherited) -framework Flutter","PRODUCT_MODULE_NAME":"webview_flutter_wkwebview","PRODUCT_NAME":"webview_flutter_wkwebview","SDKROOT":"iphoneos","SKIP_INSTALL":"YES","SWIFT_ACTIVE_COMPILATION_CONDITIONS":"$(inherited) ","SWIFT_INSTALL_OBJC_HEADER":"YES","SWIFT_VERSION":"5.0","TARGETED_DEVICE_FAMILY":"1,2","VALIDATE_PRODUCT":"YES","VALID_ARCHS[sdk=iphonesimulator*]":"$(ARCHS_STANDARD)","VERSIONING_SYSTEM":"apple-generic","VERSION_INFO_PREFIX":""},"guid":"bfdfe7dc352907fc980b868725387e98e47e65136b50e077c8953dbf59006fc4","name":"Release"}],"buildPhases":[{"buildFiles":[{"fileReference":"bfdfe7dc352907fc980b868725387e98be6867ee97e573510941c1420420ae39","guid":"bfdfe7dc352907fc980b868725387e98e0a1b1bbd80a1d9ab7e3e2b4fcedc873","headerVisibility":"public"}],"guid":"bfdfe7dc352907fc980b868725387e9879a9cedcfbca7cfcd9ba78e739bf32b6","type":"com.apple.buildphase.headers"},{"buildFiles":[{"fileReference":"bfdfe7dc352907fc980b868725387e986ae0ecde56284e1c58ce266e014e4407","guid":"bfdfe7dc352907fc980b868725387e9804497387339cafa9cc0710798da9ab64"},{"fileReference":"bfdfe7dc352907fc980b868725387e98ffad4f1ea24597bdb838ed18709ce0bc","guid":"bfdfe7dc352907fc980b868725387e9843ac0921cd4dffc47af17967f5b9c6ce"},{"fileReference":"bfdfe7dc352907fc980b868725387e986cf40d51c23844c27b2d3847574a999b","guid":"bfdfe7dc352907fc980b868725387e98d890a6ca4f2c764e0fca35bc611a04f4"},{"fileReference":"bfdfe7dc352907fc980b868725387e98ccb07914d3f2ac2700b37e1af527dcb6","guid":"bfdfe7dc352907fc980b868725387e98814241f3358abc9857a079a41bf1b6e7"},{"fileReference":"bfdfe7dc352907fc980b868725387e98c274a9bb2f458649df20b73def238a31","guid":"bfdfe7dc352907fc980b868725387e98dbbae3640a8353a0e9a293c659d45397"},{"fileReference":"bfdfe7dc352907fc980b868725387e98b087fab6a6147e88ea8188b98eb479b2","guid":"bfdfe7dc352907fc980b868725387e9833be444c57cc0be316f626b45c704949"},{"fileReference":"bfdfe7dc352907fc980b868725387e983f800f06f13b5c13b4116ae2800ebd62","guid":"bfdfe7dc352907fc980b868725387e9821369c9e099718006da852370f44fbfd"},{"fileReference":"bfdfe7dc352907fc980b868725387e9858a1908524c1677a38ba9bec48112f5d","guid":"bfdfe7dc352907fc980b868725387e98d72cc48cc1d54e0688fca37b330a2e1d"},{"fileReference":"bfdfe7dc352907fc980b868725387e98936d1a39e1338c5cff1f46f1bdcbd970","guid":"bfdfe7dc352907fc980b868725387e987583e6f4a703ae590962a4382dfc5fb0"},{"fileReference":"bfdfe7dc352907fc980b868725387e98b7c272896c5e5a1f7466f96e730ef7f7","guid":"bfdfe7dc352907fc980b868725387e985c17fc1fb796a67ef777f60e1717153d"},{"fileReference":"bfdfe7dc352907fc980b868725387e98c92dad67cbc17d9bb7df16017787161e","guid":"bfdfe7dc352907fc980b868725387e987e9b17b47846c4b2a6277c4abbd35061"},{"fileReference":"bfdfe7dc352907fc980b868725387e989c9816f986731e3e1d1441ad2f76dc0e","guid":"bfdfe7dc352907fc980b868725387e98007dc0ddb0e127b1a5671d0008a272f3"},{"fileReference":"bfdfe7dc352907fc980b868725387e9880ed52f43c3c027879cb9c6fa4a7ad00","guid":"bfdfe7dc352907fc980b868725387e98755ada3e2b64bb977e99bf43b9026bdf"},{"fileReference":"bfdfe7dc352907fc980b868725387e98978f7d76a4c8e6fe24dc8571670abd23","guid":"bfdfe7dc352907fc980b868725387e981f8977c1d4425fc583ccc5400ae5d18c"},{"fileReference":"bfdfe7dc352907fc980b868725387e986681d4e22fff219fca4ec770df70c9e1","guid":"bfdfe7dc352907fc980b868725387e98350d85f6b218fefc56e5c4fbe12c79ba"},{"fileReference":"bfdfe7dc352907fc980b868725387e98d4eec0353bf3d879db362a265046b0e7","guid":"bfdfe7dc352907fc980b868725387e98a98a965bbbe16ed249af77c3b5ab3401"},{"fileReference":"bfdfe7dc352907fc980b868725387e980d2fd3010d16903a103f41c3d714b7e9","guid":"bfdfe7dc352907fc980b868725387e98c4cb265a1860102b4c54c2f462f29ac4"},{"fileReference":"bfdfe7dc352907fc980b868725387e988a05d69eb8d96765483690bed6c8821a","guid":"bfdfe7dc352907fc980b868725387e98b0598cc906ed0036c8b88aa60059401b"},{"fileReference":"bfdfe7dc352907fc980b868725387e98758323be30595585a4e9d22cb3236be5","guid":"bfdfe7dc352907fc980b868725387e989e8b0793dc1d5c92ae425907dac008bf"},{"fileReference":"bfdfe7dc352907fc980b868725387e98b4d68270040b8330c48a9bfda2ee1f78","guid":"bfdfe7dc352907fc980b868725387e9869ea031087413fd4090b2b02ba609845"},{"fileReference":"bfdfe7dc352907fc980b868725387e98e3f1b198c65452c6f005bd694e225209","guid":"bfdfe7dc352907fc980b868725387e981414040a2834de2dbd9637ac4f1cfa08"},{"fileReference":"bfdfe7dc352907fc980b868725387e983ea44e48c15b67058eab146e81a72a1b","guid":"bfdfe7dc352907fc980b868725387e986c0d146f8cfba8a7f0d0c55d64870918"},{"fileReference":"bfdfe7dc352907fc980b868725387e9847e082023cbf1f0ad654c010c16055b9","guid":"bfdfe7dc352907fc980b868725387e98b938c7f743065b74bb9ca1dc7477d29b"},{"fileReference":"bfdfe7dc352907fc980b868725387e9888e40043e949782763c5e735d32e3a70","guid":"bfdfe7dc352907fc980b868725387e9858a580b83d292a930544934f57a5718c"},{"fileReference":"bfdfe7dc352907fc980b868725387e9881237e59a4bd058f54f8676a7cd5b107","guid":"bfdfe7dc352907fc980b868725387e98b92c9489cd59260396946a41ba58fafd"},{"fileReference":"bfdfe7dc352907fc980b868725387e985a450fed3b83a420034fb96375aeaa79","guid":"bfdfe7dc352907fc980b868725387e988a4f4239ede72ab7e8922905b5aa2e58"},{"fileReference":"bfdfe7dc352907fc980b868725387e98f452d1e497caac321e297e891b43bdb8","guid":"bfdfe7dc352907fc980b868725387e98cc382c3acf3dd29c9f32dc46bee90b52"},{"fileReference":"bfdfe7dc352907fc980b868725387e9813ac29d09ae3837e5525c4b1de95e553","guid":"bfdfe7dc352907fc980b868725387e982b87084c9a83b96bf37c4927bd9678c8"},{"fileReference":"bfdfe7dc352907fc980b868725387e98fb109f357f6fb05d543e2466bcb69c4d","guid":"bfdfe7dc352907fc980b868725387e9847d5a54a6dae7c8f2308ac848fa3b054"},{"fileReference":"bfdfe7dc352907fc980b868725387e98823c5c55a09222a1e95e42f7723b1e09","guid":"bfdfe7dc352907fc980b868725387e9884c71385d871476ef7cffdf9fbbe2e22"},{"fileReference":"bfdfe7dc352907fc980b868725387e98d37a1bf89227943cc5f9bf8dedaec4de","guid":"bfdfe7dc352907fc980b868725387e98d39e285a97235c21ed8fb578a8217419"},{"fileReference":"bfdfe7dc352907fc980b868725387e9809ccb0b60ddd3aa24d201b1fbbf78872","guid":"bfdfe7dc352907fc980b868725387e9821a546435ddb540d19676b751b14b9fc"},{"fileReference":"bfdfe7dc352907fc980b868725387e985e9a33b760a4323436cf8a2ac5237f2c","guid":"bfdfe7dc352907fc980b868725387e980f1cb66fba3ef968844a70a896340de4"},{"fileReference":"bfdfe7dc352907fc980b868725387e98507cc65c36bbdd5e0f5f59644120aa86","guid":"bfdfe7dc352907fc980b868725387e98281cd180c02d9272bc18f2a08984bf02"},{"fileReference":"bfdfe7dc352907fc980b868725387e985144a306910625f395b522423bd48599","guid":"bfdfe7dc352907fc980b868725387e98f7bced146748f847485cd1f302b2f0a8"},{"fileReference":"bfdfe7dc352907fc980b868725387e983eb7aeab09594d1843bdb8ee61e437b3","guid":"bfdfe7dc352907fc980b868725387e98b79d76c44769f57337a5cd1a455fa902"},{"fileReference":"bfdfe7dc352907fc980b868725387e98d5f967adad441e2ff1ad91ba479d4fcd","guid":"bfdfe7dc352907fc980b868725387e98f1bb703c89e6ca91a4e2a0d3959b07c6"},{"fileReference":"bfdfe7dc352907fc980b868725387e987d4bd25f4b769d8f640b3dd0b8ae5a1c","guid":"bfdfe7dc352907fc980b868725387e98e309e19dc03b36bd23901e28ae223d12"},{"fileReference":"bfdfe7dc352907fc980b868725387e9859611e05685d6f3b5c95a6eec6a330ea","guid":"bfdfe7dc352907fc980b868725387e98857d8feaed8a37a106927cef8fc88ebc"},{"fileReference":"bfdfe7dc352907fc980b868725387e986201e1488ad29294b96f9cba25c0615c","guid":"bfdfe7dc352907fc980b868725387e9865ef2fd4b4dac4d75c4ce457bd7b29da"},{"fileReference":"bfdfe7dc352907fc980b868725387e9861f6692e45bf40cd6897b227a33ace1d","guid":"bfdfe7dc352907fc980b868725387e9876a7199f6857234bd7f8a09a196d6a55"},{"fileReference":"bfdfe7dc352907fc980b868725387e98639301e9eea43149be010207d55747c9","guid":"bfdfe7dc352907fc980b868725387e98e7610a3878889873b335f8473a930955"},{"fileReference":"bfdfe7dc352907fc980b868725387e98494f5fc7ec16230a398c9f181fa0e807","guid":"bfdfe7dc352907fc980b868725387e98a4a20ab870fa902d9dabc0fd394cca80"}],"guid":"bfdfe7dc352907fc980b868725387e98d4e227abc1c57dee11b04c0677be8616","type":"com.apple.buildphase.sources"},{"buildFiles":[{"fileReference":"bfdfe7dc352907fc980b868725387e98b14af7c49882340ad551cb13b0a1e06d","guid":"bfdfe7dc352907fc980b868725387e98a7ed74afb34752809424c1b2ac24db77"}],"guid":"bfdfe7dc352907fc980b868725387e9866a573d4e48c5bbeb13b62681d9717c9","type":"com.apple.buildphase.frameworks"},{"buildFiles":[{"guid":"bfdfe7dc352907fc980b868725387e987c92de85c218b74dbd9157bc9f7aed23","targetReference":"bfdfe7dc352907fc980b868725387e987c93e943aa0a38b5f6684beaf6b4a3a1"}],"guid":"bfdfe7dc352907fc980b868725387e984f679f16df53a306ffce2a9c05640f8a","type":"com.apple.buildphase.resources"}],"buildRules":[],"dependencies":[{"guid":"bfdfe7dc352907fc980b868725387e989da425bb6d6d5d8dbb95e4afffb82217","name":"Flutter"},{"guid":"bfdfe7dc352907fc980b868725387e987c93e943aa0a38b5f6684beaf6b4a3a1","name":"webview_flutter_wkwebview-webview_flutter_wkwebview_privacy"}],"guid":"bfdfe7dc352907fc980b868725387e988efdc4dd0ac29b43123295eca853f4ed","name":"webview_flutter_wkwebview","predominantSourceCodeLanguage":"Xcode.SourceCodeLanguage.Swift","productReference":{"guid":"bfdfe7dc352907fc980b868725387e980823710353e0487822d6da09bf8d6254","name":"webview_flutter_wkwebview.framework","type":"product"},"productTypeIdentifier":"com.apple.product-type.framework","provisioningSourceData":[{"bundleIdentifierFromInfoPlist":"${PRODUCT_BUNDLE_IDENTIFIER}","configurationName":"Debug","provisioningStyle":1},{"bundleIdentifierFromInfoPlist":"${PRODUCT_BUNDLE_IDENTIFIER}","configurationName":"Profile","provisioningStyle":1},{"bundleIdentifierFromInfoPlist":"${PRODUCT_BUNDLE_IDENTIFIER}","configurationName":"Release","provisioningStyle":1}],"type":"standard"} \ No newline at end of file diff --git a/mih_ui/android/build/ios/XCBuildData/PIFCache/target/TARGET@v11_hash=c57ff86689b99a8853e2ae591b9ac8c6-json b/mih_ui/android/build/ios/XCBuildData/PIFCache/target/TARGET@v11_hash=c57ff86689b99a8853e2ae591b9ac8c6-json new file mode 100644 index 00000000..4e5303ca --- /dev/null +++ b/mih_ui/android/build/ios/XCBuildData/PIFCache/target/TARGET@v11_hash=c57ff86689b99a8853e2ae591b9ac8c6-json @@ -0,0 +1 @@ +{"buildConfigurations":[{"baseConfigurationFileReference":"bfdfe7dc352907fc980b868725387e98853911a66086d603dff7e7f648c6248b","buildSettings":{"CODE_SIGNING_ALLOWED":"NO","CODE_SIGNING_IDENTITY":"-","CODE_SIGNING_REQUIRED":"NO","CONFIGURATION_BUILD_DIR":"$(BUILD_DIR)/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME)/SDWebImage","EXPANDED_CODE_SIGN_IDENTITY":"-","IBSC_MODULE":"SDWebImage","INFOPLIST_FILE":"Target Support Files/SDWebImage/ResourceBundle-SDWebImage-SDWebImage-Info.plist","IPHONEOS_DEPLOYMENT_TARGET":"9.0","ONLY_ACTIVE_ARCH":"NO","PRODUCT_NAME":"SDWebImage","SDKROOT":"iphoneos","SKIP_INSTALL":"YES","TARGETED_DEVICE_FAMILY":"1,2","WRAPPER_EXTENSION":"bundle"},"guid":"bfdfe7dc352907fc980b868725387e987218912d294645b3b061e54e6c882221","name":"Debug"},{"baseConfigurationFileReference":"bfdfe7dc352907fc980b868725387e98924a369cb6c964ba34275d7ca3bc2dda","buildSettings":{"CLANG_ENABLE_OBJC_WEAK":"NO","CODE_SIGNING_ALLOWED":"NO","CODE_SIGNING_IDENTITY":"-","CODE_SIGNING_REQUIRED":"NO","CONFIGURATION_BUILD_DIR":"$(BUILD_DIR)/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME)/SDWebImage","EXPANDED_CODE_SIGN_IDENTITY":"-","IBSC_MODULE":"SDWebImage","INFOPLIST_FILE":"Target Support Files/SDWebImage/ResourceBundle-SDWebImage-SDWebImage-Info.plist","IPHONEOS_DEPLOYMENT_TARGET":"9.0","PRODUCT_NAME":"SDWebImage","SDKROOT":"iphoneos","SKIP_INSTALL":"YES","TARGETED_DEVICE_FAMILY":"1,2","VALIDATE_PRODUCT":"YES","WRAPPER_EXTENSION":"bundle"},"guid":"bfdfe7dc352907fc980b868725387e98b213cdb98f11db9ecabdd1455560e3fa","name":"Profile"},{"baseConfigurationFileReference":"bfdfe7dc352907fc980b868725387e98924a369cb6c964ba34275d7ca3bc2dda","buildSettings":{"CODE_SIGNING_ALLOWED":"NO","CODE_SIGNING_IDENTITY":"-","CODE_SIGNING_REQUIRED":"NO","CONFIGURATION_BUILD_DIR":"$(BUILD_DIR)/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME)/SDWebImage","EXPANDED_CODE_SIGN_IDENTITY":"-","IBSC_MODULE":"SDWebImage","INFOPLIST_FILE":"Target Support Files/SDWebImage/ResourceBundle-SDWebImage-SDWebImage-Info.plist","IPHONEOS_DEPLOYMENT_TARGET":"9.0","PRODUCT_NAME":"SDWebImage","SDKROOT":"iphoneos","SKIP_INSTALL":"YES","TARGETED_DEVICE_FAMILY":"1,2","WRAPPER_EXTENSION":"bundle"},"guid":"bfdfe7dc352907fc980b868725387e98b6c6260be17345855bd089cbb61b41f4","name":"Release"}],"buildPhases":[{"buildFiles":[],"guid":"bfdfe7dc352907fc980b868725387e9832f8c2b10ec49e95a69b9f72be30b01b","type":"com.apple.buildphase.sources"},{"buildFiles":[],"guid":"bfdfe7dc352907fc980b868725387e98854260f87d35c4ac72c21ca3148ffe52","type":"com.apple.buildphase.frameworks"},{"buildFiles":[{"fileReference":"bfdfe7dc352907fc980b868725387e98f00a9964af8b3d1e72008eb9a3395135","guid":"bfdfe7dc352907fc980b868725387e988bd3504482fe41a43249d3c6d8d5b4a3"}],"guid":"bfdfe7dc352907fc980b868725387e983443094cc631a439428563c47a920aa9","type":"com.apple.buildphase.resources"}],"buildRules":[],"dependencies":[],"guid":"bfdfe7dc352907fc980b868725387e9826e2628dc041aabe2d77e75ccb1dc95b","name":"SDWebImage-SDWebImage","productReference":{"guid":"bfdfe7dc352907fc980b868725387e986798c379d76b6055dc2d719d4bd63a69","name":"SDWebImage.bundle","type":"product"},"productTypeIdentifier":"com.apple.product-type.bundle","provisioningSourceData":[{"bundleIdentifierFromInfoPlist":"${PRODUCT_BUNDLE_IDENTIFIER}","configurationName":"Debug","provisioningStyle":0},{"bundleIdentifierFromInfoPlist":"${PRODUCT_BUNDLE_IDENTIFIER}","configurationName":"Profile","provisioningStyle":0},{"bundleIdentifierFromInfoPlist":"${PRODUCT_BUNDLE_IDENTIFIER}","configurationName":"Release","provisioningStyle":0}],"type":"standard"} \ No newline at end of file diff --git a/mih_ui/android/build/ios/XCBuildData/PIFCache/target/TARGET@v11_hash=c5e74116acf786c1a12c0ae36c3b648b-json b/mih_ui/android/build/ios/XCBuildData/PIFCache/target/TARGET@v11_hash=c5e74116acf786c1a12c0ae36c3b648b-json new file mode 100644 index 00000000..e0488bc0 --- /dev/null +++ b/mih_ui/android/build/ios/XCBuildData/PIFCache/target/TARGET@v11_hash=c5e74116acf786c1a12c0ae36c3b648b-json @@ -0,0 +1 @@ +{"buildConfigurations":[{"baseConfigurationFileReference":"bfdfe7dc352907fc980b868725387e98bcd767e09eacb2538a5dd8f4781036cb","buildSettings":{"CLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER":"NO","CODE_SIGN_IDENTITY[sdk=appletvos*]":"","CODE_SIGN_IDENTITY[sdk=iphoneos*]":"","CODE_SIGN_IDENTITY[sdk=watchos*]":"","CURRENT_PROJECT_VERSION":"1","DYLIB_COMPATIBILITY_VERSION":"1","DYLIB_CURRENT_VERSION":"1","DYLIB_INSTALL_NAME_BASE":"@rpath","ENABLE_BITCODE":"NO","ENABLE_MODULE_VERIFIER":"NO","ENABLE_USER_SCRIPT_SANDBOXING":"NO","EXCLUDED_ARCHS[sdk=iphoneos*]":"$(inherited) armv7","EXCLUDED_ARCHS[sdk=iphonesimulator*]":"$(inherited) i386","FRAMEWORK_SEARCH_PATHS[sdk=iphoneos*]":"\"/Users/yaso_meth/Git/flutter/bin/cache/artifacts/engine/ios/Flutter.xcframework/ios-arm64\" $(inherited)","FRAMEWORK_SEARCH_PATHS[sdk=iphonesimulator*]":"\"/Users/yaso_meth/Git/flutter/bin/cache/artifacts/engine/ios/Flutter.xcframework/ios-arm64_x86_64-simulator\" $(inherited)","GCC_PREFIX_HEADER":"Target Support Files/screen_brightness_ios/screen_brightness_ios-prefix.pch","GENERATE_INFOPLIST_FILE":"NO","INFOPLIST_FILE":"Target Support Files/screen_brightness_ios/screen_brightness_ios-Info.plist","INSTALL_PATH":"$(LOCAL_LIBRARY_DIR)/Frameworks","LD_RUNPATH_SEARCH_PATHS":"$(inherited) @executable_path/Frameworks @loader_path/Frameworks","MODULEMAP_FILE":"Target Support Files/screen_brightness_ios/screen_brightness_ios.modulemap","ONLY_ACTIVE_ARCH":"NO","OTHER_LDFLAGS":"$(inherited) -framework Flutter","PRODUCT_MODULE_NAME":"screen_brightness_ios","PRODUCT_NAME":"screen_brightness_ios","SDKROOT":"iphoneos","SKIP_INSTALL":"YES","SWIFT_ACTIVE_COMPILATION_CONDITIONS":"$(inherited) ","SWIFT_INSTALL_OBJC_HEADER":"YES","SWIFT_VERSION":"5.0","TARGETED_DEVICE_FAMILY":"1,2","VALID_ARCHS[sdk=iphonesimulator*]":"$(ARCHS_STANDARD)","VERSIONING_SYSTEM":"apple-generic","VERSION_INFO_PREFIX":""},"guid":"bfdfe7dc352907fc980b868725387e98a2af83387b7f3af699711d80a904da92","name":"Debug"},{"baseConfigurationFileReference":"bfdfe7dc352907fc980b868725387e98e478cdbb3210aa9b19b78eddddb7437c","buildSettings":{"CLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER":"NO","CODE_SIGN_IDENTITY[sdk=appletvos*]":"","CODE_SIGN_IDENTITY[sdk=iphoneos*]":"","CODE_SIGN_IDENTITY[sdk=watchos*]":"","CURRENT_PROJECT_VERSION":"1","DYLIB_COMPATIBILITY_VERSION":"1","DYLIB_CURRENT_VERSION":"1","DYLIB_INSTALL_NAME_BASE":"@rpath","ENABLE_BITCODE":"NO","ENABLE_MODULE_VERIFIER":"NO","ENABLE_USER_SCRIPT_SANDBOXING":"NO","EXCLUDED_ARCHS[sdk=iphoneos*]":"$(inherited) armv7","EXCLUDED_ARCHS[sdk=iphonesimulator*]":"$(inherited) i386","FRAMEWORK_SEARCH_PATHS[sdk=iphoneos*]":"\"/Users/yaso_meth/Git/flutter/bin/cache/artifacts/engine/ios-release/Flutter.xcframework/ios-arm64\" $(inherited)","FRAMEWORK_SEARCH_PATHS[sdk=iphonesimulator*]":"\"/Users/yaso_meth/Git/flutter/bin/cache/artifacts/engine/ios-release/Flutter.xcframework/ios-arm64_x86_64-simulator\" $(inherited)","GCC_PREFIX_HEADER":"Target Support Files/screen_brightness_ios/screen_brightness_ios-prefix.pch","GENERATE_INFOPLIST_FILE":"NO","INFOPLIST_FILE":"Target Support Files/screen_brightness_ios/screen_brightness_ios-Info.plist","INSTALL_PATH":"$(LOCAL_LIBRARY_DIR)/Frameworks","LD_RUNPATH_SEARCH_PATHS":"$(inherited) @executable_path/Frameworks @loader_path/Frameworks","MODULEMAP_FILE":"Target Support Files/screen_brightness_ios/screen_brightness_ios.modulemap","OTHER_LDFLAGS":"$(inherited) -framework Flutter","PRODUCT_MODULE_NAME":"screen_brightness_ios","PRODUCT_NAME":"screen_brightness_ios","SDKROOT":"iphoneos","SKIP_INSTALL":"YES","SWIFT_ACTIVE_COMPILATION_CONDITIONS":"$(inherited) ","SWIFT_INSTALL_OBJC_HEADER":"YES","SWIFT_VERSION":"5.0","TARGETED_DEVICE_FAMILY":"1,2","VALIDATE_PRODUCT":"YES","VALID_ARCHS[sdk=iphonesimulator*]":"$(ARCHS_STANDARD)","VERSIONING_SYSTEM":"apple-generic","VERSION_INFO_PREFIX":""},"guid":"bfdfe7dc352907fc980b868725387e98df48769a0fc5dc7cafbde54a79e119b8","name":"Profile"},{"baseConfigurationFileReference":"bfdfe7dc352907fc980b868725387e98e478cdbb3210aa9b19b78eddddb7437c","buildSettings":{"CLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER":"NO","CODE_SIGN_IDENTITY[sdk=appletvos*]":"","CODE_SIGN_IDENTITY[sdk=iphoneos*]":"","CODE_SIGN_IDENTITY[sdk=watchos*]":"","CURRENT_PROJECT_VERSION":"1","DYLIB_COMPATIBILITY_VERSION":"1","DYLIB_CURRENT_VERSION":"1","DYLIB_INSTALL_NAME_BASE":"@rpath","ENABLE_BITCODE":"NO","ENABLE_MODULE_VERIFIER":"NO","ENABLE_USER_SCRIPT_SANDBOXING":"NO","EXCLUDED_ARCHS[sdk=iphoneos*]":"$(inherited) armv7","EXCLUDED_ARCHS[sdk=iphonesimulator*]":"$(inherited) i386","FRAMEWORK_SEARCH_PATHS[sdk=iphoneos*]":"\"/Users/yaso_meth/Git/flutter/bin/cache/artifacts/engine/ios-release/Flutter.xcframework/ios-arm64\" $(inherited)","FRAMEWORK_SEARCH_PATHS[sdk=iphonesimulator*]":"\"/Users/yaso_meth/Git/flutter/bin/cache/artifacts/engine/ios-release/Flutter.xcframework/ios-arm64_x86_64-simulator\" $(inherited)","GCC_PREFIX_HEADER":"Target Support Files/screen_brightness_ios/screen_brightness_ios-prefix.pch","GENERATE_INFOPLIST_FILE":"NO","INFOPLIST_FILE":"Target Support Files/screen_brightness_ios/screen_brightness_ios-Info.plist","INSTALL_PATH":"$(LOCAL_LIBRARY_DIR)/Frameworks","LD_RUNPATH_SEARCH_PATHS":"$(inherited) @executable_path/Frameworks @loader_path/Frameworks","MODULEMAP_FILE":"Target Support Files/screen_brightness_ios/screen_brightness_ios.modulemap","OTHER_LDFLAGS":"$(inherited) -framework Flutter","PRODUCT_MODULE_NAME":"screen_brightness_ios","PRODUCT_NAME":"screen_brightness_ios","SDKROOT":"iphoneos","SKIP_INSTALL":"YES","SWIFT_ACTIVE_COMPILATION_CONDITIONS":"$(inherited) ","SWIFT_INSTALL_OBJC_HEADER":"YES","SWIFT_VERSION":"5.0","TARGETED_DEVICE_FAMILY":"1,2","VALIDATE_PRODUCT":"YES","VALID_ARCHS[sdk=iphonesimulator*]":"$(ARCHS_STANDARD)","VERSIONING_SYSTEM":"apple-generic","VERSION_INFO_PREFIX":""},"guid":"bfdfe7dc352907fc980b868725387e989fefe900bb2130e1e726407ba4e2e561","name":"Release"}],"buildPhases":[{"buildFiles":[{"fileReference":"bfdfe7dc352907fc980b868725387e987ab43a0db493d8c4b0f8700a9bfc1b25","guid":"bfdfe7dc352907fc980b868725387e98d6c1da118da235177a9397058e862c48","headerVisibility":"public"}],"guid":"bfdfe7dc352907fc980b868725387e98517a14fedf6aa01968b8a59f4d7f5262","type":"com.apple.buildphase.headers"},{"buildFiles":[{"fileReference":"bfdfe7dc352907fc980b868725387e98cf5aede3c3831b4f8bb98fbaee4e8fbb","guid":"bfdfe7dc352907fc980b868725387e9871dc3b6d091b7ca1e83d8da47ff66fa2"},{"fileReference":"bfdfe7dc352907fc980b868725387e98d17b81a48ac298f16189bcd229ac4ecc","guid":"bfdfe7dc352907fc980b868725387e9809abfeeb7eb19d943e849561924b830c"},{"fileReference":"bfdfe7dc352907fc980b868725387e988e75d6c80cb6aa025440d7188964cd4c","guid":"bfdfe7dc352907fc980b868725387e98712e1e09d35effc38f167fb5b3c3c932"},{"fileReference":"bfdfe7dc352907fc980b868725387e982068862e6717c819c4fbc09fb536b24a","guid":"bfdfe7dc352907fc980b868725387e98518ec4d404496f3c73d93ec41b9ab6ba"}],"guid":"bfdfe7dc352907fc980b868725387e98eb5b89b7940e57fc9e4c6e0b580085c5","type":"com.apple.buildphase.sources"},{"buildFiles":[{"fileReference":"bfdfe7dc352907fc980b868725387e98b14af7c49882340ad551cb13b0a1e06d","guid":"bfdfe7dc352907fc980b868725387e98ded547427679d36d2213c27860bb1ca1"}],"guid":"bfdfe7dc352907fc980b868725387e98a56bbbbc075976e8dcfb497aa10844ff","type":"com.apple.buildphase.frameworks"},{"buildFiles":[{"guid":"bfdfe7dc352907fc980b868725387e988d81158616dbbb23e539b8849635a386","targetReference":"bfdfe7dc352907fc980b868725387e98e778028627b75b5d409ed7c4767eb6e1"}],"guid":"bfdfe7dc352907fc980b868725387e98bee5b610c5d575db1acc7bab68c103b6","type":"com.apple.buildphase.resources"}],"buildRules":[],"dependencies":[{"guid":"bfdfe7dc352907fc980b868725387e989da425bb6d6d5d8dbb95e4afffb82217","name":"Flutter"},{"guid":"bfdfe7dc352907fc980b868725387e98e778028627b75b5d409ed7c4767eb6e1","name":"screen_brightness_ios-screen_brightness_ios_privacy"}],"guid":"bfdfe7dc352907fc980b868725387e980c3d3b60e3a8ded9747b35c2abc6c55a","name":"screen_brightness_ios","predominantSourceCodeLanguage":"Xcode.SourceCodeLanguage.Swift","productReference":{"guid":"bfdfe7dc352907fc980b868725387e98068fa378c761628650c0ac4b495bd4f4","name":"screen_brightness_ios.framework","type":"product"},"productTypeIdentifier":"com.apple.product-type.framework","provisioningSourceData":[{"bundleIdentifierFromInfoPlist":"${PRODUCT_BUNDLE_IDENTIFIER}","configurationName":"Debug","provisioningStyle":1},{"bundleIdentifierFromInfoPlist":"${PRODUCT_BUNDLE_IDENTIFIER}","configurationName":"Profile","provisioningStyle":1},{"bundleIdentifierFromInfoPlist":"${PRODUCT_BUNDLE_IDENTIFIER}","configurationName":"Release","provisioningStyle":1}],"type":"standard"} \ No newline at end of file diff --git a/mih_ui/android/build/ios/XCBuildData/PIFCache/target/TARGET@v11_hash=c7e279690d57f8e9617670c2dd8215da-json b/mih_ui/android/build/ios/XCBuildData/PIFCache/target/TARGET@v11_hash=c7e279690d57f8e9617670c2dd8215da-json new file mode 100644 index 00000000..68478a06 --- /dev/null +++ b/mih_ui/android/build/ios/XCBuildData/PIFCache/target/TARGET@v11_hash=c7e279690d57f8e9617670c2dd8215da-json @@ -0,0 +1 @@ +{"buildConfigurations":[{"baseConfigurationFileReference":"bfdfe7dc352907fc980b868725387e98c744f4c75270e1fd52589ff556e2583a","buildSettings":{"CLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER":"NO","CODE_SIGN_IDENTITY[sdk=appletvos*]":"","CODE_SIGN_IDENTITY[sdk=iphoneos*]":"","CODE_SIGN_IDENTITY[sdk=watchos*]":"","CURRENT_PROJECT_VERSION":"1","DEFINES_MODULE":"YES","DYLIB_COMPATIBILITY_VERSION":"1","DYLIB_CURRENT_VERSION":"1","DYLIB_INSTALL_NAME_BASE":"@rpath","ENABLE_BITCODE":"NO","ENABLE_MODULE_VERIFIER":"NO","ENABLE_USER_SCRIPT_SANDBOXING":"NO","EXCLUDED_ARCHS[sdk=iphoneos*]":"$(inherited) armv7","EXCLUDED_ARCHS[sdk=iphonesimulator*]":"$(inherited) i386","FRAMEWORK_SEARCH_PATHS[sdk=iphoneos*]":"\"/Users/yaso_meth/Git/flutter/bin/cache/artifacts/engine/ios/Flutter.xcframework/ios-arm64\" $(inherited)","FRAMEWORK_SEARCH_PATHS[sdk=iphonesimulator*]":"\"/Users/yaso_meth/Git/flutter/bin/cache/artifacts/engine/ios/Flutter.xcframework/ios-arm64_x86_64-simulator\" $(inherited)","GCC_PREFIX_HEADER":"Target Support Files/printing/printing-prefix.pch","GENERATE_INFOPLIST_FILE":"NO","INFOPLIST_FILE":"Target Support Files/printing/printing-Info.plist","INSTALL_PATH":"$(LOCAL_LIBRARY_DIR)/Frameworks","LD_RUNPATH_SEARCH_PATHS":"$(inherited) @executable_path/Frameworks @loader_path/Frameworks","MODULEMAP_FILE":"Target Support Files/printing/printing.modulemap","ONLY_ACTIVE_ARCH":"NO","OTHER_LDFLAGS":"$(inherited) -framework Flutter","PRODUCT_MODULE_NAME":"printing","PRODUCT_NAME":"printing","SDKROOT":"iphoneos","SKIP_INSTALL":"YES","SWIFT_ACTIVE_COMPILATION_CONDITIONS":"$(inherited) ","SWIFT_INSTALL_OBJC_HEADER":"YES","SWIFT_VERSION":"4.2","TARGETED_DEVICE_FAMILY":"1,2","VALID_ARCHS[sdk=iphonesimulator*]":"$(ARCHS_STANDARD)","VERSIONING_SYSTEM":"apple-generic","VERSION_INFO_PREFIX":""},"guid":"bfdfe7dc352907fc980b868725387e989180cbb294342c37c56fef1b2a496a3e","name":"Debug"},{"baseConfigurationFileReference":"bfdfe7dc352907fc980b868725387e9848711414c4cdd6db7086eae6ec63ab7b","buildSettings":{"CLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER":"NO","CODE_SIGN_IDENTITY[sdk=appletvos*]":"","CODE_SIGN_IDENTITY[sdk=iphoneos*]":"","CODE_SIGN_IDENTITY[sdk=watchos*]":"","CURRENT_PROJECT_VERSION":"1","DEFINES_MODULE":"YES","DYLIB_COMPATIBILITY_VERSION":"1","DYLIB_CURRENT_VERSION":"1","DYLIB_INSTALL_NAME_BASE":"@rpath","ENABLE_BITCODE":"NO","ENABLE_MODULE_VERIFIER":"NO","ENABLE_USER_SCRIPT_SANDBOXING":"NO","EXCLUDED_ARCHS[sdk=iphoneos*]":"$(inherited) armv7","EXCLUDED_ARCHS[sdk=iphonesimulator*]":"$(inherited) i386","FRAMEWORK_SEARCH_PATHS[sdk=iphoneos*]":"\"/Users/yaso_meth/Git/flutter/bin/cache/artifacts/engine/ios-release/Flutter.xcframework/ios-arm64\" $(inherited)","FRAMEWORK_SEARCH_PATHS[sdk=iphonesimulator*]":"\"/Users/yaso_meth/Git/flutter/bin/cache/artifacts/engine/ios-release/Flutter.xcframework/ios-arm64_x86_64-simulator\" $(inherited)","GCC_PREFIX_HEADER":"Target Support Files/printing/printing-prefix.pch","GENERATE_INFOPLIST_FILE":"NO","INFOPLIST_FILE":"Target Support Files/printing/printing-Info.plist","INSTALL_PATH":"$(LOCAL_LIBRARY_DIR)/Frameworks","LD_RUNPATH_SEARCH_PATHS":"$(inherited) @executable_path/Frameworks @loader_path/Frameworks","MODULEMAP_FILE":"Target Support Files/printing/printing.modulemap","OTHER_LDFLAGS":"$(inherited) -framework Flutter","PRODUCT_MODULE_NAME":"printing","PRODUCT_NAME":"printing","SDKROOT":"iphoneos","SKIP_INSTALL":"YES","SWIFT_ACTIVE_COMPILATION_CONDITIONS":"$(inherited) ","SWIFT_INSTALL_OBJC_HEADER":"YES","SWIFT_VERSION":"4.2","TARGETED_DEVICE_FAMILY":"1,2","VALIDATE_PRODUCT":"YES","VALID_ARCHS[sdk=iphonesimulator*]":"$(ARCHS_STANDARD)","VERSIONING_SYSTEM":"apple-generic","VERSION_INFO_PREFIX":""},"guid":"bfdfe7dc352907fc980b868725387e982f826a4dc5d774d621798c14630037db","name":"Profile"},{"baseConfigurationFileReference":"bfdfe7dc352907fc980b868725387e9848711414c4cdd6db7086eae6ec63ab7b","buildSettings":{"CLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER":"NO","CODE_SIGN_IDENTITY[sdk=appletvos*]":"","CODE_SIGN_IDENTITY[sdk=iphoneos*]":"","CODE_SIGN_IDENTITY[sdk=watchos*]":"","CURRENT_PROJECT_VERSION":"1","DEFINES_MODULE":"YES","DYLIB_COMPATIBILITY_VERSION":"1","DYLIB_CURRENT_VERSION":"1","DYLIB_INSTALL_NAME_BASE":"@rpath","ENABLE_BITCODE":"NO","ENABLE_MODULE_VERIFIER":"NO","ENABLE_USER_SCRIPT_SANDBOXING":"NO","EXCLUDED_ARCHS[sdk=iphoneos*]":"$(inherited) armv7","EXCLUDED_ARCHS[sdk=iphonesimulator*]":"$(inherited) i386","FRAMEWORK_SEARCH_PATHS[sdk=iphoneos*]":"\"/Users/yaso_meth/Git/flutter/bin/cache/artifacts/engine/ios-release/Flutter.xcframework/ios-arm64\" $(inherited)","FRAMEWORK_SEARCH_PATHS[sdk=iphonesimulator*]":"\"/Users/yaso_meth/Git/flutter/bin/cache/artifacts/engine/ios-release/Flutter.xcframework/ios-arm64_x86_64-simulator\" $(inherited)","GCC_PREFIX_HEADER":"Target Support Files/printing/printing-prefix.pch","GENERATE_INFOPLIST_FILE":"NO","INFOPLIST_FILE":"Target Support Files/printing/printing-Info.plist","INSTALL_PATH":"$(LOCAL_LIBRARY_DIR)/Frameworks","LD_RUNPATH_SEARCH_PATHS":"$(inherited) @executable_path/Frameworks @loader_path/Frameworks","MODULEMAP_FILE":"Target Support Files/printing/printing.modulemap","OTHER_LDFLAGS":"$(inherited) -framework Flutter","PRODUCT_MODULE_NAME":"printing","PRODUCT_NAME":"printing","SDKROOT":"iphoneos","SKIP_INSTALL":"YES","SWIFT_ACTIVE_COMPILATION_CONDITIONS":"$(inherited) ","SWIFT_INSTALL_OBJC_HEADER":"YES","SWIFT_VERSION":"4.2","TARGETED_DEVICE_FAMILY":"1,2","VALIDATE_PRODUCT":"YES","VALID_ARCHS[sdk=iphonesimulator*]":"$(ARCHS_STANDARD)","VERSIONING_SYSTEM":"apple-generic","VERSION_INFO_PREFIX":""},"guid":"bfdfe7dc352907fc980b868725387e98afa791a1e715b561d31327b1e18fa2fa","name":"Release"}],"buildPhases":[{"buildFiles":[{"fileReference":"bfdfe7dc352907fc980b868725387e98bd71f2ad20b6a88b723ff05b2d7e23ad","guid":"bfdfe7dc352907fc980b868725387e98c5232107b13054f10b2125348c3b89be","headerVisibility":"public"}],"guid":"bfdfe7dc352907fc980b868725387e98f8c7b0feb00d4a0d796038a589dcbff4","type":"com.apple.buildphase.headers"},{"buildFiles":[{"fileReference":"bfdfe7dc352907fc980b868725387e983df66a6182a9ad3e5e664af1554596bb","guid":"bfdfe7dc352907fc980b868725387e989998bbcd9cfe43fdb81f921bbd512cd0"},{"fileReference":"bfdfe7dc352907fc980b868725387e986c7db250b8f3f408d66f6e7a19972379","guid":"bfdfe7dc352907fc980b868725387e986d0f5149546efd2bae23df8631a6d086"},{"fileReference":"bfdfe7dc352907fc980b868725387e98f47fd36e52148ce929fdb4b957af7e73","guid":"bfdfe7dc352907fc980b868725387e982a196f855aa1f83323a5de96d3fa205b"},{"fileReference":"bfdfe7dc352907fc980b868725387e98176d3062b5d63f50555ac516d1a7b762","guid":"bfdfe7dc352907fc980b868725387e98e7cce645e1a486b20be6ea77f4446896"},{"fileReference":"bfdfe7dc352907fc980b868725387e98151367d82561314a10d2c18601c9b287","guid":"bfdfe7dc352907fc980b868725387e98138beb7de231d45c702665b1097b614e"}],"guid":"bfdfe7dc352907fc980b868725387e98762120b03e967ca976ed83bb9ff49e9e","type":"com.apple.buildphase.sources"},{"buildFiles":[{"fileReference":"bfdfe7dc352907fc980b868725387e98b14af7c49882340ad551cb13b0a1e06d","guid":"bfdfe7dc352907fc980b868725387e986aa8e5e3dd58adad6e672f929ff69a9d"}],"guid":"bfdfe7dc352907fc980b868725387e988677d1d09f996e86d984b8e885573392","type":"com.apple.buildphase.frameworks"},{"buildFiles":[],"guid":"bfdfe7dc352907fc980b868725387e988e57b82a9a8cfa20eca24bd310928f38","type":"com.apple.buildphase.resources"}],"buildRules":[],"dependencies":[{"guid":"bfdfe7dc352907fc980b868725387e989da425bb6d6d5d8dbb95e4afffb82217","name":"Flutter"}],"guid":"bfdfe7dc352907fc980b868725387e9868b3737835b98c013ea1e742f994ae22","name":"printing","predominantSourceCodeLanguage":"Xcode.SourceCodeLanguage.Swift","productReference":{"guid":"bfdfe7dc352907fc980b868725387e983541805154b8a0a140f969f779b5ca3a","name":"printing.framework","type":"product"},"productTypeIdentifier":"com.apple.product-type.framework","provisioningSourceData":[{"bundleIdentifierFromInfoPlist":"${PRODUCT_BUNDLE_IDENTIFIER}","configurationName":"Debug","provisioningStyle":1},{"bundleIdentifierFromInfoPlist":"${PRODUCT_BUNDLE_IDENTIFIER}","configurationName":"Profile","provisioningStyle":1},{"bundleIdentifierFromInfoPlist":"${PRODUCT_BUNDLE_IDENTIFIER}","configurationName":"Release","provisioningStyle":1}],"type":"standard"} \ No newline at end of file diff --git a/mih_ui/android/build/ios/XCBuildData/PIFCache/target/TARGET@v11_hash=c832b6797055a73fc2a937f2ace5a80c-json b/mih_ui/android/build/ios/XCBuildData/PIFCache/target/TARGET@v11_hash=c832b6797055a73fc2a937f2ace5a80c-json new file mode 100644 index 00000000..62ef455a --- /dev/null +++ b/mih_ui/android/build/ios/XCBuildData/PIFCache/target/TARGET@v11_hash=c832b6797055a73fc2a937f2ace5a80c-json @@ -0,0 +1 @@ +{"buildConfigurations":[{"baseConfigurationFileReference":"bfdfe7dc352907fc980b868725387e9850cc7fc2d23136fb4fac488d6c47df20","buildSettings":{"ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES":"NO","CLANG_ENABLE_OBJC_WEAK":"NO","CLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER":"NO","CODE_SIGN_IDENTITY[sdk=appletvos*]":"","CODE_SIGN_IDENTITY[sdk=iphoneos*]":"","CODE_SIGN_IDENTITY[sdk=watchos*]":"","CURRENT_PROJECT_VERSION":"1","DEFINES_MODULE":"YES","DYLIB_COMPATIBILITY_VERSION":"1","DYLIB_CURRENT_VERSION":"1","DYLIB_INSTALL_NAME_BASE":"@rpath","ENABLE_BITCODE":"NO","ENABLE_MODULE_VERIFIER":"NO","ENABLE_USER_SCRIPT_SANDBOXING":"NO","EXCLUDED_ARCHS[sdk=iphoneos*]":"$(inherited) armv7","EXCLUDED_ARCHS[sdk=iphonesimulator*]":"$(inherited) i386","FRAMEWORK_SEARCH_PATHS[sdk=iphoneos*]":"\"/Users/yaso_meth/Git/flutter/bin/cache/artifacts/engine/ios/Flutter.xcframework/ios-arm64\" $(inherited)","FRAMEWORK_SEARCH_PATHS[sdk=iphonesimulator*]":"\"/Users/yaso_meth/Git/flutter/bin/cache/artifacts/engine/ios/Flutter.xcframework/ios-arm64_x86_64-simulator\" $(inherited)","INFOPLIST_FILE":"Target Support Files/Pods-Runner/Pods-Runner-Info.plist","INSTALL_PATH":"$(LOCAL_LIBRARY_DIR)/Frameworks","IPHONEOS_DEPLOYMENT_TARGET":"15.5.0","LD_RUNPATH_SEARCH_PATHS":"$(inherited) @executable_path/Frameworks @loader_path/Frameworks","MACH_O_TYPE":"staticlib","MODULEMAP_FILE":"Target Support Files/Pods-Runner/Pods-Runner.modulemap","ONLY_ACTIVE_ARCH":"NO","OTHER_LDFLAGS":"$(inherited) -framework Flutter","OTHER_LIBTOOLFLAGS":"","PODS_ROOT":"$(SRCROOT)","PRODUCT_BUNDLE_IDENTIFIER":"org.cocoapods.${PRODUCT_NAME:rfc1034identifier}","PRODUCT_NAME":"$(TARGET_NAME:c99extidentifier)","SDKROOT":"iphoneos","SKIP_INSTALL":"YES","TARGETED_DEVICE_FAMILY":"1,2","VALID_ARCHS[sdk=iphonesimulator*]":"$(ARCHS_STANDARD)","VERSIONING_SYSTEM":"apple-generic","VERSION_INFO_PREFIX":""},"guid":"bfdfe7dc352907fc980b868725387e98cc17ac4a853e48900fef73bc45c77506","name":"Debug"},{"baseConfigurationFileReference":"bfdfe7dc352907fc980b868725387e98dc1a21852c7a085c7dd8f65cf0fa9907","buildSettings":{"ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES":"NO","CLANG_ENABLE_OBJC_WEAK":"NO","CLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER":"NO","CODE_SIGN_IDENTITY[sdk=appletvos*]":"","CODE_SIGN_IDENTITY[sdk=iphoneos*]":"","CODE_SIGN_IDENTITY[sdk=watchos*]":"","CURRENT_PROJECT_VERSION":"1","DEFINES_MODULE":"YES","DYLIB_COMPATIBILITY_VERSION":"1","DYLIB_CURRENT_VERSION":"1","DYLIB_INSTALL_NAME_BASE":"@rpath","ENABLE_BITCODE":"NO","ENABLE_MODULE_VERIFIER":"NO","ENABLE_USER_SCRIPT_SANDBOXING":"NO","EXCLUDED_ARCHS[sdk=iphoneos*]":"$(inherited) armv7","EXCLUDED_ARCHS[sdk=iphonesimulator*]":"$(inherited) i386","FRAMEWORK_SEARCH_PATHS[sdk=iphoneos*]":"\"/Users/yaso_meth/Git/flutter/bin/cache/artifacts/engine/ios-release/Flutter.xcframework/ios-arm64\" $(inherited)","FRAMEWORK_SEARCH_PATHS[sdk=iphonesimulator*]":"\"/Users/yaso_meth/Git/flutter/bin/cache/artifacts/engine/ios-release/Flutter.xcframework/ios-arm64_x86_64-simulator\" $(inherited)","INFOPLIST_FILE":"Target Support Files/Pods-Runner/Pods-Runner-Info.plist","INSTALL_PATH":"$(LOCAL_LIBRARY_DIR)/Frameworks","IPHONEOS_DEPLOYMENT_TARGET":"15.5.0","LD_RUNPATH_SEARCH_PATHS":"$(inherited) @executable_path/Frameworks @loader_path/Frameworks","MACH_O_TYPE":"staticlib","MODULEMAP_FILE":"Target Support Files/Pods-Runner/Pods-Runner.modulemap","OTHER_LDFLAGS":"$(inherited) -framework Flutter","OTHER_LIBTOOLFLAGS":"","PODS_ROOT":"$(SRCROOT)","PRODUCT_BUNDLE_IDENTIFIER":"org.cocoapods.${PRODUCT_NAME:rfc1034identifier}","PRODUCT_NAME":"$(TARGET_NAME:c99extidentifier)","SDKROOT":"iphoneos","SKIP_INSTALL":"YES","TARGETED_DEVICE_FAMILY":"1,2","VALIDATE_PRODUCT":"YES","VALID_ARCHS[sdk=iphonesimulator*]":"$(ARCHS_STANDARD)","VERSIONING_SYSTEM":"apple-generic","VERSION_INFO_PREFIX":""},"guid":"bfdfe7dc352907fc980b868725387e987d8f9a1b84227cfbdc591476163d8a88","name":"Profile"},{"baseConfigurationFileReference":"bfdfe7dc352907fc980b868725387e98f17abf55d75f35efcaf45a1185b085b6","buildSettings":{"ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES":"NO","CLANG_ENABLE_OBJC_WEAK":"NO","CLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER":"NO","CODE_SIGN_IDENTITY[sdk=appletvos*]":"","CODE_SIGN_IDENTITY[sdk=iphoneos*]":"","CODE_SIGN_IDENTITY[sdk=watchos*]":"","CURRENT_PROJECT_VERSION":"1","DEFINES_MODULE":"YES","DYLIB_COMPATIBILITY_VERSION":"1","DYLIB_CURRENT_VERSION":"1","DYLIB_INSTALL_NAME_BASE":"@rpath","ENABLE_BITCODE":"NO","ENABLE_MODULE_VERIFIER":"NO","ENABLE_USER_SCRIPT_SANDBOXING":"NO","EXCLUDED_ARCHS[sdk=iphoneos*]":"$(inherited) armv7","EXCLUDED_ARCHS[sdk=iphonesimulator*]":"$(inherited) i386","FRAMEWORK_SEARCH_PATHS[sdk=iphoneos*]":"\"/Users/yaso_meth/Git/flutter/bin/cache/artifacts/engine/ios-release/Flutter.xcframework/ios-arm64\" $(inherited)","FRAMEWORK_SEARCH_PATHS[sdk=iphonesimulator*]":"\"/Users/yaso_meth/Git/flutter/bin/cache/artifacts/engine/ios-release/Flutter.xcframework/ios-arm64_x86_64-simulator\" $(inherited)","INFOPLIST_FILE":"Target Support Files/Pods-Runner/Pods-Runner-Info.plist","INSTALL_PATH":"$(LOCAL_LIBRARY_DIR)/Frameworks","IPHONEOS_DEPLOYMENT_TARGET":"15.5.0","LD_RUNPATH_SEARCH_PATHS":"$(inherited) @executable_path/Frameworks @loader_path/Frameworks","MACH_O_TYPE":"staticlib","MODULEMAP_FILE":"Target Support Files/Pods-Runner/Pods-Runner.modulemap","OTHER_LDFLAGS":"$(inherited) -framework Flutter","OTHER_LIBTOOLFLAGS":"","PODS_ROOT":"$(SRCROOT)","PRODUCT_BUNDLE_IDENTIFIER":"org.cocoapods.${PRODUCT_NAME:rfc1034identifier}","PRODUCT_NAME":"$(TARGET_NAME:c99extidentifier)","SDKROOT":"iphoneos","SKIP_INSTALL":"YES","TARGETED_DEVICE_FAMILY":"1,2","VALIDATE_PRODUCT":"YES","VALID_ARCHS[sdk=iphonesimulator*]":"$(ARCHS_STANDARD)","VERSIONING_SYSTEM":"apple-generic","VERSION_INFO_PREFIX":""},"guid":"bfdfe7dc352907fc980b868725387e98de61797bc95845f506a94d8a3f0d074e","name":"Release"}],"buildPhases":[{"buildFiles":[{"fileReference":"bfdfe7dc352907fc980b868725387e980ec6fbca7264a6936f2adfc48dd7f5bc","guid":"bfdfe7dc352907fc980b868725387e987f252fe794679d3a8adfaf2c33f51316","headerVisibility":"public"}],"guid":"bfdfe7dc352907fc980b868725387e98c8faf61c8ceeabc5b5e6b6c279f1a223","type":"com.apple.buildphase.headers"},{"buildFiles":[{"fileReference":"bfdfe7dc352907fc980b868725387e98fed0970e703d355c9aff813f280aafdc","guid":"bfdfe7dc352907fc980b868725387e9850e904616f5713acdb9ce4319e4bb0be"}],"guid":"bfdfe7dc352907fc980b868725387e98ba7b3484a09e2c1ce7f1b8e52bde6bd9","type":"com.apple.buildphase.sources"},{"buildFiles":[{"fileReference":"bfdfe7dc352907fc980b868725387e98b14af7c49882340ad551cb13b0a1e06d","guid":"bfdfe7dc352907fc980b868725387e987ce943584c3ffff55d9320cd1190a5e6"}],"guid":"bfdfe7dc352907fc980b868725387e9813731d23b33ca055aa03dd2874ce97ab","type":"com.apple.buildphase.frameworks"},{"buildFiles":[],"guid":"bfdfe7dc352907fc980b868725387e985166ce798dfc9a0dff05a4e2cde56403","type":"com.apple.buildphase.resources"}],"buildRules":[],"dependencies":[{"guid":"bfdfe7dc352907fc980b868725387e98cd8162b601eb6c17e4d86eec112a388c","name":"AppCheckCore"},{"guid":"bfdfe7dc352907fc980b868725387e985fd5cdb9993b1816141f0c012ffa62bd","name":"DKImagePickerController"},{"guid":"bfdfe7dc352907fc980b868725387e989d0a1858a86fd6e6731ed20f88a1e515","name":"DKPhotoGallery"},{"guid":"bfdfe7dc352907fc980b868725387e98c16926158ef45fa2ac81bd3203fcd49e","name":"FBAudienceNetwork"},{"guid":"bfdfe7dc352907fc980b868725387e98d57b8bce60a0f11113f4cff532db68d3","name":"Firebase"},{"guid":"bfdfe7dc352907fc980b868725387e98ecaebc2b66f6675fbaa388164aa6c8dd","name":"FirebaseAppCheck"},{"guid":"bfdfe7dc352907fc980b868725387e981f0a8508efd61386103314ddbb82a530","name":"FirebaseAppCheckInterop"},{"guid":"bfdfe7dc352907fc980b868725387e98b762d5de103fb6cfc7506aa6be1d4f33","name":"FirebaseAuth"},{"guid":"bfdfe7dc352907fc980b868725387e988e935c81efc4686179f554b8fe37864a","name":"FirebaseAuthInterop"},{"guid":"bfdfe7dc352907fc980b868725387e98a408a4c1f668e62161cdeba76f57d50c","name":"FirebaseCore"},{"guid":"bfdfe7dc352907fc980b868725387e982fcb5e27d041e48b96b3ab14ce32d5f2","name":"FirebaseCoreExtension"},{"guid":"bfdfe7dc352907fc980b868725387e98020791fd2e7b7ddc8fb2658339c42e16","name":"FirebaseCoreInternal"},{"guid":"bfdfe7dc352907fc980b868725387e989da425bb6d6d5d8dbb95e4afffb82217","name":"Flutter"},{"guid":"bfdfe7dc352907fc980b868725387e98dd3a6a519ed4181bf31ea6bc1f18ebc5","name":"GTMSessionFetcher"},{"guid":"bfdfe7dc352907fc980b868725387e98cd53d937e824fad9f4527eeeb684cb40","name":"Google-Mobile-Ads-SDK"},{"guid":"bfdfe7dc352907fc980b868725387e98bbd9e0ed4cdc41b93625c3661dbcaa81","name":"GoogleMobileAdsMediationFacebook"},{"guid":"bfdfe7dc352907fc980b868725387e98c777611770584bd7c20ebf80e3d30200","name":"GoogleUserMessagingPlatform"},{"guid":"bfdfe7dc352907fc980b868725387e98718890dfdac589615663a02d43d9af3e","name":"GoogleUtilities"},{"guid":"bfdfe7dc352907fc980b868725387e98f10882e1684b8a3dfdec597bc0a47af3","name":"PromisesObjC"},{"guid":"bfdfe7dc352907fc980b868725387e98da29652de71b686743df2bd56decf7ef","name":"RecaptchaInterop"},{"guid":"bfdfe7dc352907fc980b868725387e98c46180aea4e87057640961e6db37df0d","name":"SDWebImage"},{"guid":"bfdfe7dc352907fc980b868725387e9872eabefc63c14dfe52fb0c95ad90294e","name":"SwiftyGif"},{"guid":"bfdfe7dc352907fc980b868725387e98c7dd3f56f799b35458f81928cf1cb47b","name":"app_settings"},{"guid":"bfdfe7dc352907fc980b868725387e98f08a09402d437c098acddc7bcf497e64","name":"camera_avfoundation"},{"guid":"bfdfe7dc352907fc980b868725387e98d41ce0bf2141365ff0288286787936d9","name":"device_info_plus"},{"guid":"bfdfe7dc352907fc980b868725387e98bf75f71a2aa7fdc38a7d7d70e6c200c1","name":"file_picker"},{"guid":"bfdfe7dc352907fc980b868725387e9875e40ebaf7773ac78830d9822a5265df","name":"file_saver"},{"guid":"bfdfe7dc352907fc980b868725387e984c83246bc20987a37ea775a535d55cc9","name":"file_selector_ios"},{"guid":"bfdfe7dc352907fc980b868725387e98213dce80d6344a36faf6079e42d20067","name":"firebase_app_check"},{"guid":"bfdfe7dc352907fc980b868725387e983788d8769c821650606514be955fca93","name":"firebase_auth"},{"guid":"bfdfe7dc352907fc980b868725387e987f74324bfc5c78140e34d510e26e00c1","name":"firebase_core"},{"guid":"bfdfe7dc352907fc980b868725387e98cfaa9701b1371f15b99c4f66ff385fb3","name":"fl_downloader"},{"guid":"bfdfe7dc352907fc980b868725387e9822a19f6c224a402387a233be75a6e268","name":"flutter_native_splash"},{"guid":"bfdfe7dc352907fc980b868725387e98b342d8d6d2a8c1bb89705e2a22345264","name":"flutter_tts"},{"guid":"bfdfe7dc352907fc980b868725387e9821d372cc1e7c7587a12aeda843619e39","name":"geolocator_apple"},{"guid":"bfdfe7dc352907fc980b868725387e98ec9201ffba3c82781a28590604d34ce4","name":"gma_mediation_meta"},{"guid":"bfdfe7dc352907fc980b868725387e9811f9347c979613c5502173cd5b43060d","name":"google_mobile_ads"},{"guid":"bfdfe7dc352907fc980b868725387e981f000f066404b97b12e9c4ca84d38d0f","name":"image_picker_ios"},{"guid":"bfdfe7dc352907fc980b868725387e988cbaddc02f6ec7fadc6b543cd6534960","name":"local_auth_darwin"},{"guid":"bfdfe7dc352907fc980b868725387e98b54f2bdfc3ce691d3ad04972a364d2a5","name":"mobile_scanner"},{"guid":"bfdfe7dc352907fc980b868725387e98a5ae7244e41cc249cf7186dbb9962ecb","name":"package_info_plus"},{"guid":"bfdfe7dc352907fc980b868725387e9830037b09fee48cfce1f8562d753688c8","name":"path_provider_foundation"},{"guid":"bfdfe7dc352907fc980b868725387e9868b3737835b98c013ea1e742f994ae22","name":"printing"},{"guid":"bfdfe7dc352907fc980b868725387e986a7f857d9699ce0307f844d6d31566d3","name":"quick_actions_ios"},{"guid":"bfdfe7dc352907fc980b868725387e98ff12fc6cf192a2fce22083281b19ee98","name":"record_ios"},{"guid":"bfdfe7dc352907fc980b868725387e980c3d3b60e3a8ded9747b35c2abc6c55a","name":"screen_brightness_ios"},{"guid":"bfdfe7dc352907fc980b868725387e98848ff9cf74c635f5324731538a1c853f","name":"share_plus"},{"guid":"bfdfe7dc352907fc980b868725387e9828cab1f188854e0a973e6ff6905c5ffe","name":"shared_preferences_foundation"},{"guid":"bfdfe7dc352907fc980b868725387e981304d3d2169071b3ca365b19f5340b7c","name":"sqflite_darwin"},{"guid":"bfdfe7dc352907fc980b868725387e9869b9058bfc96f2a6a75b4b5dd4df3117","name":"syncfusion_flutter_pdfviewer"},{"guid":"bfdfe7dc352907fc980b868725387e98903e66fa03d6d27edaa18126a82c20fd","name":"url_launcher_ios"},{"guid":"bfdfe7dc352907fc980b868725387e988efdc4dd0ac29b43123295eca853f4ed","name":"webview_flutter_wkwebview"}],"guid":"bfdfe7dc352907fc980b868725387e98312b4bc59bbbe2c06c205bf4da6737f5","name":"Pods-Runner","predominantSourceCodeLanguage":"Xcode.SourceCodeLanguage.Objective-C","productReference":{"guid":"bfdfe7dc352907fc980b868725387e98699846e06e93b50cafdb00290784c775","name":"Pods_Runner.framework","type":"product"},"productTypeIdentifier":"com.apple.product-type.framework","provisioningSourceData":[{"bundleIdentifierFromInfoPlist":"${PRODUCT_BUNDLE_IDENTIFIER}","configurationName":"Debug","provisioningStyle":1},{"bundleIdentifierFromInfoPlist":"${PRODUCT_BUNDLE_IDENTIFIER}","configurationName":"Profile","provisioningStyle":1},{"bundleIdentifierFromInfoPlist":"${PRODUCT_BUNDLE_IDENTIFIER}","configurationName":"Release","provisioningStyle":1}],"type":"standard"} \ No newline at end of file diff --git a/mih_ui/android/build/ios/XCBuildData/PIFCache/target/TARGET@v11_hash=cbb1eb454f498b998b145ed6dace7d98-json b/mih_ui/android/build/ios/XCBuildData/PIFCache/target/TARGET@v11_hash=cbb1eb454f498b998b145ed6dace7d98-json new file mode 100644 index 00000000..5ca30f17 --- /dev/null +++ b/mih_ui/android/build/ios/XCBuildData/PIFCache/target/TARGET@v11_hash=cbb1eb454f498b998b145ed6dace7d98-json @@ -0,0 +1 @@ +{"buildConfigurations":[{"baseConfigurationFileReference":"bfdfe7dc352907fc980b868725387e983535bec86897f82e29e35c2a37087d79","buildSettings":{"CODE_SIGNING_ALLOWED":"NO","CODE_SIGNING_IDENTITY":"-","CODE_SIGNING_REQUIRED":"NO","CONFIGURATION_BUILD_DIR":"$(BUILD_DIR)/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME)/camera_avfoundation","EXPANDED_CODE_SIGN_IDENTITY":"-","IBSC_MODULE":"camera_avfoundation","INFOPLIST_FILE":"Target Support Files/camera_avfoundation/ResourceBundle-camera_avfoundation_privacy-camera_avfoundation-Info.plist","IPHONEOS_DEPLOYMENT_TARGET":"12.0","ONLY_ACTIVE_ARCH":"NO","PRODUCT_NAME":"camera_avfoundation_privacy","SDKROOT":"iphoneos","SKIP_INSTALL":"YES","TARGETED_DEVICE_FAMILY":"1,2","WRAPPER_EXTENSION":"bundle"},"guid":"bfdfe7dc352907fc980b868725387e983eb5b47f46c85c0de877a296628c3f1e","name":"Debug"},{"baseConfigurationFileReference":"bfdfe7dc352907fc980b868725387e989ea7a1b7622f37728c5db7b6902fabc9","buildSettings":{"CLANG_ENABLE_OBJC_WEAK":"NO","CODE_SIGNING_ALLOWED":"NO","CODE_SIGNING_IDENTITY":"-","CODE_SIGNING_REQUIRED":"NO","CONFIGURATION_BUILD_DIR":"$(BUILD_DIR)/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME)/camera_avfoundation","EXPANDED_CODE_SIGN_IDENTITY":"-","IBSC_MODULE":"camera_avfoundation","INFOPLIST_FILE":"Target Support Files/camera_avfoundation/ResourceBundle-camera_avfoundation_privacy-camera_avfoundation-Info.plist","IPHONEOS_DEPLOYMENT_TARGET":"12.0","PRODUCT_NAME":"camera_avfoundation_privacy","SDKROOT":"iphoneos","SKIP_INSTALL":"YES","TARGETED_DEVICE_FAMILY":"1,2","VALIDATE_PRODUCT":"YES","WRAPPER_EXTENSION":"bundle"},"guid":"bfdfe7dc352907fc980b868725387e981f9b7500d4a6aa1a9968638a39f51879","name":"Profile"},{"baseConfigurationFileReference":"bfdfe7dc352907fc980b868725387e989ea7a1b7622f37728c5db7b6902fabc9","buildSettings":{"CODE_SIGNING_ALLOWED":"NO","CODE_SIGNING_IDENTITY":"-","CODE_SIGNING_REQUIRED":"NO","CONFIGURATION_BUILD_DIR":"$(BUILD_DIR)/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME)/camera_avfoundation","EXPANDED_CODE_SIGN_IDENTITY":"-","IBSC_MODULE":"camera_avfoundation","INFOPLIST_FILE":"Target Support Files/camera_avfoundation/ResourceBundle-camera_avfoundation_privacy-camera_avfoundation-Info.plist","IPHONEOS_DEPLOYMENT_TARGET":"12.0","PRODUCT_NAME":"camera_avfoundation_privacy","SDKROOT":"iphoneos","SKIP_INSTALL":"YES","TARGETED_DEVICE_FAMILY":"1,2","WRAPPER_EXTENSION":"bundle"},"guid":"bfdfe7dc352907fc980b868725387e98de8a7c14b69ef452eba8aa2276e33ff1","name":"Release"}],"buildPhases":[{"buildFiles":[],"guid":"bfdfe7dc352907fc980b868725387e987b426121b7548413d88986dc83300f8c","type":"com.apple.buildphase.sources"},{"buildFiles":[],"guid":"bfdfe7dc352907fc980b868725387e989c52abe5cb58976985aa045a25733adb","type":"com.apple.buildphase.frameworks"},{"buildFiles":[{"fileReference":"bfdfe7dc352907fc980b868725387e982f6dd2634fb467a93787bdea5788bf12","guid":"bfdfe7dc352907fc980b868725387e98c53113c2881ba9ebc2dbd234f782b734"}],"guid":"bfdfe7dc352907fc980b868725387e987c700ecbb719f85f1a935ddff0540717","type":"com.apple.buildphase.resources"}],"buildRules":[],"dependencies":[],"guid":"bfdfe7dc352907fc980b868725387e98b9038e7e871b75150c57ed973218b158","name":"camera_avfoundation-camera_avfoundation_privacy","productReference":{"guid":"bfdfe7dc352907fc980b868725387e98a8d4c68aa344dd716b8838fcfafaf16f","name":"camera_avfoundation_privacy.bundle","type":"product"},"productTypeIdentifier":"com.apple.product-type.bundle","provisioningSourceData":[{"bundleIdentifierFromInfoPlist":"${PRODUCT_BUNDLE_IDENTIFIER}","configurationName":"Debug","provisioningStyle":0},{"bundleIdentifierFromInfoPlist":"${PRODUCT_BUNDLE_IDENTIFIER}","configurationName":"Profile","provisioningStyle":0},{"bundleIdentifierFromInfoPlist":"${PRODUCT_BUNDLE_IDENTIFIER}","configurationName":"Release","provisioningStyle":0}],"type":"standard"} \ No newline at end of file diff --git a/mih_ui/android/build/ios/XCBuildData/PIFCache/target/TARGET@v11_hash=cc4efb059f8f4ef111f94e7221f71ad1-json b/mih_ui/android/build/ios/XCBuildData/PIFCache/target/TARGET@v11_hash=cc4efb059f8f4ef111f94e7221f71ad1-json new file mode 100644 index 00000000..079de28a --- /dev/null +++ b/mih_ui/android/build/ios/XCBuildData/PIFCache/target/TARGET@v11_hash=cc4efb059f8f4ef111f94e7221f71ad1-json @@ -0,0 +1 @@ +{"buildConfigurations":[{"baseConfigurationFileReference":"bfdfe7dc352907fc980b868725387e98bcd767e09eacb2538a5dd8f4781036cb","buildSettings":{"CODE_SIGNING_ALLOWED":"NO","CODE_SIGNING_IDENTITY":"-","CODE_SIGNING_REQUIRED":"NO","CONFIGURATION_BUILD_DIR":"$(BUILD_DIR)/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME)/screen_brightness_ios","EXPANDED_CODE_SIGN_IDENTITY":"-","IBSC_MODULE":"screen_brightness_ios","INFOPLIST_FILE":"Target Support Files/screen_brightness_ios/ResourceBundle-screen_brightness_ios_privacy-screen_brightness_ios-Info.plist","IPHONEOS_DEPLOYMENT_TARGET":"9.0","ONLY_ACTIVE_ARCH":"NO","PRODUCT_NAME":"screen_brightness_ios_privacy","SDKROOT":"iphoneos","SKIP_INSTALL":"YES","TARGETED_DEVICE_FAMILY":"1,2","WRAPPER_EXTENSION":"bundle"},"guid":"bfdfe7dc352907fc980b868725387e985723a52fca48de9f7b73c801bd073223","name":"Debug"},{"baseConfigurationFileReference":"bfdfe7dc352907fc980b868725387e98e478cdbb3210aa9b19b78eddddb7437c","buildSettings":{"CLANG_ENABLE_OBJC_WEAK":"NO","CODE_SIGNING_ALLOWED":"NO","CODE_SIGNING_IDENTITY":"-","CODE_SIGNING_REQUIRED":"NO","CONFIGURATION_BUILD_DIR":"$(BUILD_DIR)/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME)/screen_brightness_ios","EXPANDED_CODE_SIGN_IDENTITY":"-","IBSC_MODULE":"screen_brightness_ios","INFOPLIST_FILE":"Target Support Files/screen_brightness_ios/ResourceBundle-screen_brightness_ios_privacy-screen_brightness_ios-Info.plist","IPHONEOS_DEPLOYMENT_TARGET":"9.0","PRODUCT_NAME":"screen_brightness_ios_privacy","SDKROOT":"iphoneos","SKIP_INSTALL":"YES","TARGETED_DEVICE_FAMILY":"1,2","VALIDATE_PRODUCT":"YES","WRAPPER_EXTENSION":"bundle"},"guid":"bfdfe7dc352907fc980b868725387e98983416a16fd32fdb65b2fa2ead8aceff","name":"Profile"},{"baseConfigurationFileReference":"bfdfe7dc352907fc980b868725387e98e478cdbb3210aa9b19b78eddddb7437c","buildSettings":{"CODE_SIGNING_ALLOWED":"NO","CODE_SIGNING_IDENTITY":"-","CODE_SIGNING_REQUIRED":"NO","CONFIGURATION_BUILD_DIR":"$(BUILD_DIR)/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME)/screen_brightness_ios","EXPANDED_CODE_SIGN_IDENTITY":"-","IBSC_MODULE":"screen_brightness_ios","INFOPLIST_FILE":"Target Support Files/screen_brightness_ios/ResourceBundle-screen_brightness_ios_privacy-screen_brightness_ios-Info.plist","IPHONEOS_DEPLOYMENT_TARGET":"9.0","PRODUCT_NAME":"screen_brightness_ios_privacy","SDKROOT":"iphoneos","SKIP_INSTALL":"YES","TARGETED_DEVICE_FAMILY":"1,2","WRAPPER_EXTENSION":"bundle"},"guid":"bfdfe7dc352907fc980b868725387e98b607cd4376423ba1e0f3f7d51dc7eec5","name":"Release"}],"buildPhases":[{"buildFiles":[],"guid":"bfdfe7dc352907fc980b868725387e989e565c9e0abe20769ebd3c57fb43ab87","type":"com.apple.buildphase.sources"},{"buildFiles":[],"guid":"bfdfe7dc352907fc980b868725387e98a074c1e178dad9a1a5a6f0a30f1925b5","type":"com.apple.buildphase.frameworks"},{"buildFiles":[{"fileReference":"bfdfe7dc352907fc980b868725387e98b567af24496618e3e6787600e87a49bf","guid":"bfdfe7dc352907fc980b868725387e98f5ec6a16ef0ec31fa90e90ec55c533fb"}],"guid":"bfdfe7dc352907fc980b868725387e98c096b214d31386355ce33c7becf542f0","type":"com.apple.buildphase.resources"}],"buildRules":[],"dependencies":[],"guid":"bfdfe7dc352907fc980b868725387e98e778028627b75b5d409ed7c4767eb6e1","name":"screen_brightness_ios-screen_brightness_ios_privacy","productReference":{"guid":"bfdfe7dc352907fc980b868725387e980618668f1945e57ca1ef133e5e4cd0fa","name":"screen_brightness_ios_privacy.bundle","type":"product"},"productTypeIdentifier":"com.apple.product-type.bundle","provisioningSourceData":[{"bundleIdentifierFromInfoPlist":"${PRODUCT_BUNDLE_IDENTIFIER}","configurationName":"Debug","provisioningStyle":0},{"bundleIdentifierFromInfoPlist":"${PRODUCT_BUNDLE_IDENTIFIER}","configurationName":"Profile","provisioningStyle":0},{"bundleIdentifierFromInfoPlist":"${PRODUCT_BUNDLE_IDENTIFIER}","configurationName":"Release","provisioningStyle":0}],"type":"standard"} \ No newline at end of file diff --git a/mih_ui/android/build/ios/XCBuildData/PIFCache/target/TARGET@v11_hash=cc9ef9cfbfe34cf5230700b7d8fcc951-json b/mih_ui/android/build/ios/XCBuildData/PIFCache/target/TARGET@v11_hash=cc9ef9cfbfe34cf5230700b7d8fcc951-json new file mode 100644 index 00000000..cdc22416 --- /dev/null +++ b/mih_ui/android/build/ios/XCBuildData/PIFCache/target/TARGET@v11_hash=cc9ef9cfbfe34cf5230700b7d8fcc951-json @@ -0,0 +1 @@ +{"buildConfigurations":[{"baseConfigurationFileReference":"bfdfe7dc352907fc980b868725387e98ae2b6e690d9c19a64378428b59f82e0b","buildSettings":{"CODE_SIGNING_ALLOWED":"NO","CODE_SIGNING_IDENTITY":"-","CODE_SIGNING_REQUIRED":"NO","CONFIGURATION_BUILD_DIR":"$(BUILD_DIR)/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME)/FBAudienceNetwork","EXPANDED_CODE_SIGN_IDENTITY":"-","IBSC_MODULE":"FBAudienceNetwork","INFOPLIST_FILE":"Target Support Files/FBAudienceNetwork/ResourceBundle-FBAudienceNetwork-FBAudienceNetwork-Info.plist","IPHONEOS_DEPLOYMENT_TARGET":"12.0","ONLY_ACTIVE_ARCH":"NO","PRODUCT_NAME":"FBAudienceNetwork","SDKROOT":"iphoneos","SKIP_INSTALL":"YES","TARGETED_DEVICE_FAMILY":"1,2","WRAPPER_EXTENSION":"bundle"},"guid":"bfdfe7dc352907fc980b868725387e98dde23b97725dd241725862953973d5e2","name":"Debug"},{"baseConfigurationFileReference":"bfdfe7dc352907fc980b868725387e98bf594d3cbb3ba4c66c475a7d56edf012","buildSettings":{"CLANG_ENABLE_OBJC_WEAK":"NO","CODE_SIGNING_ALLOWED":"NO","CODE_SIGNING_IDENTITY":"-","CODE_SIGNING_REQUIRED":"NO","CONFIGURATION_BUILD_DIR":"$(BUILD_DIR)/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME)/FBAudienceNetwork","EXPANDED_CODE_SIGN_IDENTITY":"-","IBSC_MODULE":"FBAudienceNetwork","INFOPLIST_FILE":"Target Support Files/FBAudienceNetwork/ResourceBundle-FBAudienceNetwork-FBAudienceNetwork-Info.plist","IPHONEOS_DEPLOYMENT_TARGET":"12.0","PRODUCT_NAME":"FBAudienceNetwork","SDKROOT":"iphoneos","SKIP_INSTALL":"YES","TARGETED_DEVICE_FAMILY":"1,2","VALIDATE_PRODUCT":"YES","WRAPPER_EXTENSION":"bundle"},"guid":"bfdfe7dc352907fc980b868725387e98dddf221c40151c14a2c635254cbfa43d","name":"Profile"},{"baseConfigurationFileReference":"bfdfe7dc352907fc980b868725387e98bf594d3cbb3ba4c66c475a7d56edf012","buildSettings":{"CODE_SIGNING_ALLOWED":"NO","CODE_SIGNING_IDENTITY":"-","CODE_SIGNING_REQUIRED":"NO","CONFIGURATION_BUILD_DIR":"$(BUILD_DIR)/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME)/FBAudienceNetwork","EXPANDED_CODE_SIGN_IDENTITY":"-","IBSC_MODULE":"FBAudienceNetwork","INFOPLIST_FILE":"Target Support Files/FBAudienceNetwork/ResourceBundle-FBAudienceNetwork-FBAudienceNetwork-Info.plist","IPHONEOS_DEPLOYMENT_TARGET":"12.0","PRODUCT_NAME":"FBAudienceNetwork","SDKROOT":"iphoneos","SKIP_INSTALL":"YES","TARGETED_DEVICE_FAMILY":"1,2","WRAPPER_EXTENSION":"bundle"},"guid":"bfdfe7dc352907fc980b868725387e9802da13b531fa227d301691556eb8e71a","name":"Release"}],"buildPhases":[{"buildFiles":[],"guid":"bfdfe7dc352907fc980b868725387e98e43c2dc576b2b1dff115fe00e995ad34","type":"com.apple.buildphase.sources"},{"buildFiles":[],"guid":"bfdfe7dc352907fc980b868725387e98e4f3b36443e3681be38cef5963954b6d","type":"com.apple.buildphase.frameworks"},{"buildFiles":[{"fileReference":"bfdfe7dc352907fc980b868725387e9800817c14be55ffe583e047275a4b3cda","guid":"bfdfe7dc352907fc980b868725387e98cf1e790998556aaef8584105749282bd"}],"guid":"bfdfe7dc352907fc980b868725387e988b2b0dd93c751ed80e081fc01d0cfe60","type":"com.apple.buildphase.resources"}],"buildRules":[],"dependencies":[],"guid":"bfdfe7dc352907fc980b868725387e988a4e25c3b6648d4c88499e02f77b811a","name":"FBAudienceNetwork-FBAudienceNetwork","productReference":{"guid":"bfdfe7dc352907fc980b868725387e9809cddfc82cd5ea2ec210b80200def916","name":"FBAudienceNetwork.bundle","type":"product"},"productTypeIdentifier":"com.apple.product-type.bundle","provisioningSourceData":[{"bundleIdentifierFromInfoPlist":"${PRODUCT_BUNDLE_IDENTIFIER}","configurationName":"Debug","provisioningStyle":0},{"bundleIdentifierFromInfoPlist":"${PRODUCT_BUNDLE_IDENTIFIER}","configurationName":"Profile","provisioningStyle":0},{"bundleIdentifierFromInfoPlist":"${PRODUCT_BUNDLE_IDENTIFIER}","configurationName":"Release","provisioningStyle":0}],"type":"standard"} \ No newline at end of file diff --git a/mih_ui/android/build/ios/XCBuildData/PIFCache/target/TARGET@v11_hash=cccb0eb2cb0393abaa5f1f05d755160e-json b/mih_ui/android/build/ios/XCBuildData/PIFCache/target/TARGET@v11_hash=cccb0eb2cb0393abaa5f1f05d755160e-json new file mode 100644 index 00000000..d21782b2 --- /dev/null +++ b/mih_ui/android/build/ios/XCBuildData/PIFCache/target/TARGET@v11_hash=cccb0eb2cb0393abaa5f1f05d755160e-json @@ -0,0 +1 @@ +{"buildConfigurations":[{"baseConfigurationFileReference":"bfdfe7dc352907fc980b868725387e988dc0dcaabffa36a9e85d057769df808d","buildSettings":{"CODE_SIGNING_ALLOWED":"NO","CODE_SIGNING_IDENTITY":"-","CODE_SIGNING_REQUIRED":"NO","CONFIGURATION_BUILD_DIR":"$(BUILD_DIR)/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME)/google_mobile_ads","EXPANDED_CODE_SIGN_IDENTITY":"-","IBSC_MODULE":"google_mobile_ads","INFOPLIST_FILE":"Target Support Files/google_mobile_ads/ResourceBundle-google_mobile_ads-google_mobile_ads-Info.plist","IPHONEOS_DEPLOYMENT_TARGET":"12.0","ONLY_ACTIVE_ARCH":"NO","PRODUCT_NAME":"google_mobile_ads","SDKROOT":"iphoneos","SKIP_INSTALL":"YES","TARGETED_DEVICE_FAMILY":"1,2","WRAPPER_EXTENSION":"bundle"},"guid":"bfdfe7dc352907fc980b868725387e986c911657d6ac059feda98c12db51010e","name":"Debug"},{"baseConfigurationFileReference":"bfdfe7dc352907fc980b868725387e987e81c25c7cd2ea8e1b445f8bd4d6b142","buildSettings":{"CLANG_ENABLE_OBJC_WEAK":"NO","CODE_SIGNING_ALLOWED":"NO","CODE_SIGNING_IDENTITY":"-","CODE_SIGNING_REQUIRED":"NO","CONFIGURATION_BUILD_DIR":"$(BUILD_DIR)/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME)/google_mobile_ads","EXPANDED_CODE_SIGN_IDENTITY":"-","IBSC_MODULE":"google_mobile_ads","INFOPLIST_FILE":"Target Support Files/google_mobile_ads/ResourceBundle-google_mobile_ads-google_mobile_ads-Info.plist","IPHONEOS_DEPLOYMENT_TARGET":"12.0","PRODUCT_NAME":"google_mobile_ads","SDKROOT":"iphoneos","SKIP_INSTALL":"YES","TARGETED_DEVICE_FAMILY":"1,2","VALIDATE_PRODUCT":"YES","WRAPPER_EXTENSION":"bundle"},"guid":"bfdfe7dc352907fc980b868725387e981ef12a0a1c6fd0e6c6aec00900a484b2","name":"Profile"},{"baseConfigurationFileReference":"bfdfe7dc352907fc980b868725387e987e81c25c7cd2ea8e1b445f8bd4d6b142","buildSettings":{"CODE_SIGNING_ALLOWED":"NO","CODE_SIGNING_IDENTITY":"-","CODE_SIGNING_REQUIRED":"NO","CONFIGURATION_BUILD_DIR":"$(BUILD_DIR)/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME)/google_mobile_ads","EXPANDED_CODE_SIGN_IDENTITY":"-","IBSC_MODULE":"google_mobile_ads","INFOPLIST_FILE":"Target Support Files/google_mobile_ads/ResourceBundle-google_mobile_ads-google_mobile_ads-Info.plist","IPHONEOS_DEPLOYMENT_TARGET":"12.0","PRODUCT_NAME":"google_mobile_ads","SDKROOT":"iphoneos","SKIP_INSTALL":"YES","TARGETED_DEVICE_FAMILY":"1,2","WRAPPER_EXTENSION":"bundle"},"guid":"bfdfe7dc352907fc980b868725387e982b2034e654edde92840ada339a8cddae","name":"Release"}],"buildPhases":[{"buildFiles":[],"guid":"bfdfe7dc352907fc980b868725387e980ed54f5352662a0124c0119f9db0abda","type":"com.apple.buildphase.sources"},{"buildFiles":[],"guid":"bfdfe7dc352907fc980b868725387e9881976eb1fa9e0a491341ad5560f9a2c6","type":"com.apple.buildphase.frameworks"},{"buildFiles":[{"fileReference":"bfdfe7dc352907fc980b868725387e982d53de7511db5a956fe99a4cfd6a3fc6","guid":"bfdfe7dc352907fc980b868725387e9894e33589982c634a6f477a4d790d1caf"},{"fileReference":"bfdfe7dc352907fc980b868725387e98fb4a1331e3e12b4a42dc22a871d90dbc","guid":"bfdfe7dc352907fc980b868725387e9830805bb02df8d52a0b3e9d7391ab2884"},{"fileReference":"bfdfe7dc352907fc980b868725387e983b2fa426a77c6733b0fe8cfa17eaaa44","guid":"bfdfe7dc352907fc980b868725387e98085b71502c539a264c6d03cc6b68fdaa"}],"guid":"bfdfe7dc352907fc980b868725387e98e41180d575b58451a1687e098db94663","type":"com.apple.buildphase.resources"}],"buildRules":[],"dependencies":[],"guid":"bfdfe7dc352907fc980b868725387e9804037656a8578d8e730f9d99c54e40e2","name":"google_mobile_ads-google_mobile_ads","productReference":{"guid":"bfdfe7dc352907fc980b868725387e98bfcaaabe96491183229cf5e8736513d4","name":"google_mobile_ads.bundle","type":"product"},"productTypeIdentifier":"com.apple.product-type.bundle","provisioningSourceData":[{"bundleIdentifierFromInfoPlist":"${PRODUCT_BUNDLE_IDENTIFIER}","configurationName":"Debug","provisioningStyle":0},{"bundleIdentifierFromInfoPlist":"${PRODUCT_BUNDLE_IDENTIFIER}","configurationName":"Profile","provisioningStyle":0},{"bundleIdentifierFromInfoPlist":"${PRODUCT_BUNDLE_IDENTIFIER}","configurationName":"Release","provisioningStyle":0}],"type":"standard"} \ No newline at end of file diff --git a/mih_ui/android/build/ios/XCBuildData/PIFCache/target/TARGET@v11_hash=cf214d336cf673b4a25ba8952e58ad2f-json b/mih_ui/android/build/ios/XCBuildData/PIFCache/target/TARGET@v11_hash=cf214d336cf673b4a25ba8952e58ad2f-json new file mode 100644 index 00000000..d40c8633 --- /dev/null +++ b/mih_ui/android/build/ios/XCBuildData/PIFCache/target/TARGET@v11_hash=cf214d336cf673b4a25ba8952e58ad2f-json @@ -0,0 +1 @@ +{"buildConfigurations":[{"baseConfigurationFileReference":"bfdfe7dc352907fc980b868725387e98b8e89d3c9864142bc7587bc7895448f7","buildSettings":{"CLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER":"NO","CODE_SIGN_IDENTITY[sdk=appletvos*]":"","CODE_SIGN_IDENTITY[sdk=iphoneos*]":"","CODE_SIGN_IDENTITY[sdk=watchos*]":"","CURRENT_PROJECT_VERSION":"1","DEFINES_MODULE":"YES","DYLIB_COMPATIBILITY_VERSION":"1","DYLIB_CURRENT_VERSION":"1","DYLIB_INSTALL_NAME_BASE":"@rpath","ENABLE_BITCODE":"NO","ENABLE_MODULE_VERIFIER":"NO","ENABLE_USER_SCRIPT_SANDBOXING":"NO","EXCLUDED_ARCHS[sdk=iphoneos*]":"$(inherited) armv7","EXCLUDED_ARCHS[sdk=iphonesimulator*]":"$(inherited) i386","FRAMEWORK_SEARCH_PATHS[sdk=iphoneos*]":"\"/Users/yaso_meth/Git/flutter/bin/cache/artifacts/engine/ios/Flutter.xcframework/ios-arm64\" $(inherited)","FRAMEWORK_SEARCH_PATHS[sdk=iphonesimulator*]":"\"/Users/yaso_meth/Git/flutter/bin/cache/artifacts/engine/ios/Flutter.xcframework/ios-arm64_x86_64-simulator\" $(inherited)","GCC_PREFIX_HEADER":"Target Support Files/flutter_tts/flutter_tts-prefix.pch","GENERATE_INFOPLIST_FILE":"NO","INFOPLIST_FILE":"Target Support Files/flutter_tts/flutter_tts-Info.plist","INSTALL_PATH":"$(LOCAL_LIBRARY_DIR)/Frameworks","LD_RUNPATH_SEARCH_PATHS":"$(inherited) @executable_path/Frameworks @loader_path/Frameworks","MACH_O_TYPE":"staticlib","MODULEMAP_FILE":"Target Support Files/flutter_tts/flutter_tts.modulemap","ONLY_ACTIVE_ARCH":"NO","OTHER_LDFLAGS":"$(inherited) -framework Flutter","PRODUCT_MODULE_NAME":"flutter_tts","PRODUCT_NAME":"flutter_tts","SDKROOT":"iphoneos","SKIP_INSTALL":"YES","SWIFT_ACTIVE_COMPILATION_CONDITIONS":"$(inherited) ","SWIFT_INSTALL_OBJC_HEADER":"YES","SWIFT_VERSION":"4.2","TARGETED_DEVICE_FAMILY":"1,2","VALID_ARCHS[sdk=iphonesimulator*]":"$(ARCHS_STANDARD)","VERSIONING_SYSTEM":"apple-generic","VERSION_INFO_PREFIX":""},"guid":"bfdfe7dc352907fc980b868725387e987c21dec9912de8dd48c2961102a548da","name":"Debug"},{"baseConfigurationFileReference":"bfdfe7dc352907fc980b868725387e98111c994b75369b574157edb8fabcd0dc","buildSettings":{"CLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER":"NO","CODE_SIGN_IDENTITY[sdk=appletvos*]":"","CODE_SIGN_IDENTITY[sdk=iphoneos*]":"","CODE_SIGN_IDENTITY[sdk=watchos*]":"","CURRENT_PROJECT_VERSION":"1","DEFINES_MODULE":"YES","DYLIB_COMPATIBILITY_VERSION":"1","DYLIB_CURRENT_VERSION":"1","DYLIB_INSTALL_NAME_BASE":"@rpath","ENABLE_BITCODE":"NO","ENABLE_MODULE_VERIFIER":"NO","ENABLE_USER_SCRIPT_SANDBOXING":"NO","EXCLUDED_ARCHS[sdk=iphoneos*]":"$(inherited) armv7","EXCLUDED_ARCHS[sdk=iphonesimulator*]":"$(inherited) i386","FRAMEWORK_SEARCH_PATHS[sdk=iphoneos*]":"\"/Users/yaso_meth/Git/flutter/bin/cache/artifacts/engine/ios-release/Flutter.xcframework/ios-arm64\" $(inherited)","FRAMEWORK_SEARCH_PATHS[sdk=iphonesimulator*]":"\"/Users/yaso_meth/Git/flutter/bin/cache/artifacts/engine/ios-release/Flutter.xcframework/ios-arm64_x86_64-simulator\" $(inherited)","GCC_PREFIX_HEADER":"Target Support Files/flutter_tts/flutter_tts-prefix.pch","GENERATE_INFOPLIST_FILE":"NO","INFOPLIST_FILE":"Target Support Files/flutter_tts/flutter_tts-Info.plist","INSTALL_PATH":"$(LOCAL_LIBRARY_DIR)/Frameworks","LD_RUNPATH_SEARCH_PATHS":"$(inherited) @executable_path/Frameworks @loader_path/Frameworks","MACH_O_TYPE":"staticlib","MODULEMAP_FILE":"Target Support Files/flutter_tts/flutter_tts.modulemap","OTHER_LDFLAGS":"$(inherited) -framework Flutter","PRODUCT_MODULE_NAME":"flutter_tts","PRODUCT_NAME":"flutter_tts","SDKROOT":"iphoneos","SKIP_INSTALL":"YES","SWIFT_ACTIVE_COMPILATION_CONDITIONS":"$(inherited) ","SWIFT_INSTALL_OBJC_HEADER":"YES","SWIFT_VERSION":"4.2","TARGETED_DEVICE_FAMILY":"1,2","VALIDATE_PRODUCT":"YES","VALID_ARCHS[sdk=iphonesimulator*]":"$(ARCHS_STANDARD)","VERSIONING_SYSTEM":"apple-generic","VERSION_INFO_PREFIX":""},"guid":"bfdfe7dc352907fc980b868725387e980c53d9195ad8c7b478ee93c3e371d243","name":"Profile"},{"baseConfigurationFileReference":"bfdfe7dc352907fc980b868725387e98111c994b75369b574157edb8fabcd0dc","buildSettings":{"CLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER":"NO","CODE_SIGN_IDENTITY[sdk=appletvos*]":"","CODE_SIGN_IDENTITY[sdk=iphoneos*]":"","CODE_SIGN_IDENTITY[sdk=watchos*]":"","CURRENT_PROJECT_VERSION":"1","DEFINES_MODULE":"YES","DYLIB_COMPATIBILITY_VERSION":"1","DYLIB_CURRENT_VERSION":"1","DYLIB_INSTALL_NAME_BASE":"@rpath","ENABLE_BITCODE":"NO","ENABLE_MODULE_VERIFIER":"NO","ENABLE_USER_SCRIPT_SANDBOXING":"NO","EXCLUDED_ARCHS[sdk=iphoneos*]":"$(inherited) armv7","EXCLUDED_ARCHS[sdk=iphonesimulator*]":"$(inherited) i386","FRAMEWORK_SEARCH_PATHS[sdk=iphoneos*]":"\"/Users/yaso_meth/Git/flutter/bin/cache/artifacts/engine/ios-release/Flutter.xcframework/ios-arm64\" $(inherited)","FRAMEWORK_SEARCH_PATHS[sdk=iphonesimulator*]":"\"/Users/yaso_meth/Git/flutter/bin/cache/artifacts/engine/ios-release/Flutter.xcframework/ios-arm64_x86_64-simulator\" $(inherited)","GCC_PREFIX_HEADER":"Target Support Files/flutter_tts/flutter_tts-prefix.pch","GENERATE_INFOPLIST_FILE":"NO","INFOPLIST_FILE":"Target Support Files/flutter_tts/flutter_tts-Info.plist","INSTALL_PATH":"$(LOCAL_LIBRARY_DIR)/Frameworks","LD_RUNPATH_SEARCH_PATHS":"$(inherited) @executable_path/Frameworks @loader_path/Frameworks","MACH_O_TYPE":"staticlib","MODULEMAP_FILE":"Target Support Files/flutter_tts/flutter_tts.modulemap","OTHER_LDFLAGS":"$(inherited) -framework Flutter","PRODUCT_MODULE_NAME":"flutter_tts","PRODUCT_NAME":"flutter_tts","SDKROOT":"iphoneos","SKIP_INSTALL":"YES","SWIFT_ACTIVE_COMPILATION_CONDITIONS":"$(inherited) ","SWIFT_INSTALL_OBJC_HEADER":"YES","SWIFT_VERSION":"4.2","TARGETED_DEVICE_FAMILY":"1,2","VALIDATE_PRODUCT":"YES","VALID_ARCHS[sdk=iphonesimulator*]":"$(ARCHS_STANDARD)","VERSIONING_SYSTEM":"apple-generic","VERSION_INFO_PREFIX":""},"guid":"bfdfe7dc352907fc980b868725387e98580e5289bd35cea1ad82b295518eeca5","name":"Release"}],"buildPhases":[{"buildFiles":[{"fileReference":"bfdfe7dc352907fc980b868725387e9825cfe228bef73c17089a941802e513b1","guid":"bfdfe7dc352907fc980b868725387e98aa4a9e8e8bbf670e2186afb9344708d9","headerVisibility":"public"},{"fileReference":"bfdfe7dc352907fc980b868725387e98df53373bea73f458559a5c4b8e8a4d93","guid":"bfdfe7dc352907fc980b868725387e984fe29b4a3467f9a27602703ddea30611","headerVisibility":"public"}],"guid":"bfdfe7dc352907fc980b868725387e9814445869fbeae769a49c8e54c2b20845","type":"com.apple.buildphase.headers"},{"buildFiles":[{"fileReference":"bfdfe7dc352907fc980b868725387e98273545ef5ac201300b0bb57c4690f008","guid":"bfdfe7dc352907fc980b868725387e988b58ae42c4344a0957add32c30def327"},{"fileReference":"bfdfe7dc352907fc980b868725387e988f4f0b636ec4f957216c6e152d4e6b99","guid":"bfdfe7dc352907fc980b868725387e9855247ceee2656d809bc03a95fb73d03c"},{"fileReference":"bfdfe7dc352907fc980b868725387e98497ea7215b16a92c8bf53dd577da1a03","guid":"bfdfe7dc352907fc980b868725387e984764ca785930289888f450b49955aa21"},{"fileReference":"bfdfe7dc352907fc980b868725387e98b11e2a9ab729e7e8322eb0a54ccd2fb5","guid":"bfdfe7dc352907fc980b868725387e98cc55721341fbdd8f8618883eae3422bd"},{"fileReference":"bfdfe7dc352907fc980b868725387e98bfeb1e815de07bb393e068cd889f2c82","guid":"bfdfe7dc352907fc980b868725387e983aec172ab0af09596fddeb87d9ea754b"},{"fileReference":"bfdfe7dc352907fc980b868725387e989645eb0ac136e2e344e1b31f8f5743b7","guid":"bfdfe7dc352907fc980b868725387e984e6204af82101e190cdeca07c73d2841"}],"guid":"bfdfe7dc352907fc980b868725387e98680422fb5b2b688026c70eaeae5b6c83","type":"com.apple.buildphase.sources"},{"buildFiles":[{"fileReference":"bfdfe7dc352907fc980b868725387e98b14af7c49882340ad551cb13b0a1e06d","guid":"bfdfe7dc352907fc980b868725387e98fa7e636c2fe620d708188f11c6211032"}],"guid":"bfdfe7dc352907fc980b868725387e98146323fd34b1855743f3e2d7257195f2","type":"com.apple.buildphase.frameworks"},{"buildFiles":[],"guid":"bfdfe7dc352907fc980b868725387e9811a51cddc529c93c2490d8bdbf4abac5","type":"com.apple.buildphase.resources"}],"buildRules":[],"dependencies":[{"guid":"bfdfe7dc352907fc980b868725387e989da425bb6d6d5d8dbb95e4afffb82217","name":"Flutter"}],"guid":"bfdfe7dc352907fc980b868725387e98b342d8d6d2a8c1bb89705e2a22345264","name":"flutter_tts","predominantSourceCodeLanguage":"Xcode.SourceCodeLanguage.Swift","productReference":{"guid":"bfdfe7dc352907fc980b868725387e98ed8855c6c2348477429e791b76577a29","name":"flutter_tts.framework","type":"product"},"productTypeIdentifier":"com.apple.product-type.framework","provisioningSourceData":[{"bundleIdentifierFromInfoPlist":"${PRODUCT_BUNDLE_IDENTIFIER}","configurationName":"Debug","provisioningStyle":1},{"bundleIdentifierFromInfoPlist":"${PRODUCT_BUNDLE_IDENTIFIER}","configurationName":"Profile","provisioningStyle":1},{"bundleIdentifierFromInfoPlist":"${PRODUCT_BUNDLE_IDENTIFIER}","configurationName":"Release","provisioningStyle":1}],"type":"standard"} \ No newline at end of file diff --git a/mih_ui/android/build/ios/XCBuildData/PIFCache/target/TARGET@v11_hash=d014b307105d5d21e3d383fba60d7745-json b/mih_ui/android/build/ios/XCBuildData/PIFCache/target/TARGET@v11_hash=d014b307105d5d21e3d383fba60d7745-json new file mode 100644 index 00000000..39d826e3 --- /dev/null +++ b/mih_ui/android/build/ios/XCBuildData/PIFCache/target/TARGET@v11_hash=d014b307105d5d21e3d383fba60d7745-json @@ -0,0 +1 @@ +{"buildConfigurations":[{"baseConfigurationFileReference":"bfdfe7dc352907fc980b868725387e98e8f5202bf6c2927877bbede594254bac","buildSettings":{"CLANG_ENABLE_OBJC_WEAK":"NO","CODE_SIGN_IDENTITY[sdk=appletvos*]":"","CODE_SIGN_IDENTITY[sdk=iphoneos*]":"","CODE_SIGN_IDENTITY[sdk=watchos*]":"","CURRENT_PROJECT_VERSION":"1","DYLIB_COMPATIBILITY_VERSION":"1","DYLIB_CURRENT_VERSION":"1","DYLIB_INSTALL_NAME_BASE":"@rpath","ENABLE_MODULE_VERIFIER":"NO","ENABLE_USER_SCRIPT_SANDBOXING":"NO","GCC_PREFIX_HEADER":"Target Support Files/FirebaseCoreExtension/FirebaseCoreExtension-prefix.pch","GENERATE_INFOPLIST_FILE":"NO","INFOPLIST_FILE":"Target Support Files/FirebaseCoreExtension/FirebaseCoreExtension-Info.plist","INSTALL_PATH":"$(LOCAL_LIBRARY_DIR)/Frameworks","IPHONEOS_DEPLOYMENT_TARGET":"15.0","LD_RUNPATH_SEARCH_PATHS":"$(inherited) @executable_path/Frameworks @loader_path/Frameworks","MODULEMAP_FILE":"Target Support Files/FirebaseCoreExtension/FirebaseCoreExtension.modulemap","ONLY_ACTIVE_ARCH":"NO","PRODUCT_MODULE_NAME":"FirebaseCoreExtension","PRODUCT_NAME":"FirebaseCoreExtension","SDKROOT":"iphoneos","SKIP_INSTALL":"YES","SWIFT_ACTIVE_COMPILATION_CONDITIONS":"$(inherited) ","SWIFT_INSTALL_OBJC_HEADER":"YES","SWIFT_VERSION":"5.9","TARGETED_DEVICE_FAMILY":"1,2","VERSIONING_SYSTEM":"apple-generic","VERSION_INFO_PREFIX":""},"guid":"bfdfe7dc352907fc980b868725387e98d7d5560296933c11495f1b9d11cd96b8","name":"Debug"},{"baseConfigurationFileReference":"bfdfe7dc352907fc980b868725387e986a53acd8d9569d0c22497ed69917f900","buildSettings":{"CLANG_ENABLE_OBJC_WEAK":"NO","CODE_SIGN_IDENTITY[sdk=appletvos*]":"","CODE_SIGN_IDENTITY[sdk=iphoneos*]":"","CODE_SIGN_IDENTITY[sdk=watchos*]":"","CURRENT_PROJECT_VERSION":"1","DYLIB_COMPATIBILITY_VERSION":"1","DYLIB_CURRENT_VERSION":"1","DYLIB_INSTALL_NAME_BASE":"@rpath","ENABLE_MODULE_VERIFIER":"NO","ENABLE_USER_SCRIPT_SANDBOXING":"NO","GCC_PREFIX_HEADER":"Target Support Files/FirebaseCoreExtension/FirebaseCoreExtension-prefix.pch","GENERATE_INFOPLIST_FILE":"NO","INFOPLIST_FILE":"Target Support Files/FirebaseCoreExtension/FirebaseCoreExtension-Info.plist","INSTALL_PATH":"$(LOCAL_LIBRARY_DIR)/Frameworks","IPHONEOS_DEPLOYMENT_TARGET":"15.0","LD_RUNPATH_SEARCH_PATHS":"$(inherited) @executable_path/Frameworks @loader_path/Frameworks","MODULEMAP_FILE":"Target Support Files/FirebaseCoreExtension/FirebaseCoreExtension.modulemap","PRODUCT_MODULE_NAME":"FirebaseCoreExtension","PRODUCT_NAME":"FirebaseCoreExtension","SDKROOT":"iphoneos","SKIP_INSTALL":"YES","SWIFT_ACTIVE_COMPILATION_CONDITIONS":"$(inherited) ","SWIFT_INSTALL_OBJC_HEADER":"YES","SWIFT_VERSION":"5.9","TARGETED_DEVICE_FAMILY":"1,2","VALIDATE_PRODUCT":"YES","VERSIONING_SYSTEM":"apple-generic","VERSION_INFO_PREFIX":""},"guid":"bfdfe7dc352907fc980b868725387e9849ebef47a96a617098daadb98777ee5b","name":"Profile"},{"baseConfigurationFileReference":"bfdfe7dc352907fc980b868725387e986a53acd8d9569d0c22497ed69917f900","buildSettings":{"CLANG_ENABLE_OBJC_WEAK":"NO","CODE_SIGN_IDENTITY[sdk=appletvos*]":"","CODE_SIGN_IDENTITY[sdk=iphoneos*]":"","CODE_SIGN_IDENTITY[sdk=watchos*]":"","CURRENT_PROJECT_VERSION":"1","DYLIB_COMPATIBILITY_VERSION":"1","DYLIB_CURRENT_VERSION":"1","DYLIB_INSTALL_NAME_BASE":"@rpath","ENABLE_MODULE_VERIFIER":"NO","ENABLE_USER_SCRIPT_SANDBOXING":"NO","GCC_PREFIX_HEADER":"Target Support Files/FirebaseCoreExtension/FirebaseCoreExtension-prefix.pch","GENERATE_INFOPLIST_FILE":"NO","INFOPLIST_FILE":"Target Support Files/FirebaseCoreExtension/FirebaseCoreExtension-Info.plist","INSTALL_PATH":"$(LOCAL_LIBRARY_DIR)/Frameworks","IPHONEOS_DEPLOYMENT_TARGET":"15.0","LD_RUNPATH_SEARCH_PATHS":"$(inherited) @executable_path/Frameworks @loader_path/Frameworks","MODULEMAP_FILE":"Target Support Files/FirebaseCoreExtension/FirebaseCoreExtension.modulemap","PRODUCT_MODULE_NAME":"FirebaseCoreExtension","PRODUCT_NAME":"FirebaseCoreExtension","SDKROOT":"iphoneos","SKIP_INSTALL":"YES","SWIFT_ACTIVE_COMPILATION_CONDITIONS":"$(inherited) ","SWIFT_INSTALL_OBJC_HEADER":"YES","SWIFT_VERSION":"5.9","TARGETED_DEVICE_FAMILY":"1,2","VALIDATE_PRODUCT":"YES","VERSIONING_SYSTEM":"apple-generic","VERSION_INFO_PREFIX":""},"guid":"bfdfe7dc352907fc980b868725387e98afcc28efd14c04d85527eff3f30d6c30","name":"Release"}],"buildPhases":[{"buildFiles":[{"fileReference":"bfdfe7dc352907fc980b868725387e980e9aa4b7906b3dcf65a309a2ebea54da","guid":"bfdfe7dc352907fc980b868725387e9814e3c34bd5815835972bdff811822f6b","headerVisibility":"public"},{"fileReference":"bfdfe7dc352907fc980b868725387e98a4ef9427196371e4dc2731c21e69d49f","guid":"bfdfe7dc352907fc980b868725387e98a60be59bffa07302eabd51261ea4af9a","headerVisibility":"public"},{"fileReference":"bfdfe7dc352907fc980b868725387e9809785dc11744809391b61338a4ffac7b","guid":"bfdfe7dc352907fc980b868725387e987f84684122f41339c53680afc7b733fa","headerVisibility":"public"},{"fileReference":"bfdfe7dc352907fc980b868725387e9862c85af582e57841e77b952dde7fa94c","guid":"bfdfe7dc352907fc980b868725387e98fcca368266dbcbe7b865e931d91de4f5","headerVisibility":"public"},{"fileReference":"bfdfe7dc352907fc980b868725387e98ddc20f433ccc0f56de9a35da32254a03","guid":"bfdfe7dc352907fc980b868725387e98276181fd4d562612cf9016425b498c7d","headerVisibility":"public"},{"fileReference":"bfdfe7dc352907fc980b868725387e98ed46d3d90ff2fcfaef63e49a4aef56da","guid":"bfdfe7dc352907fc980b868725387e988cb1eb93ffcd82ef6996e6c1317e087e","headerVisibility":"public"},{"fileReference":"bfdfe7dc352907fc980b868725387e9865742a13f039fe40a602469ea5f2c5a4","guid":"bfdfe7dc352907fc980b868725387e988f69cd36a38ac0679fe7837ea106f281","headerVisibility":"public"},{"fileReference":"bfdfe7dc352907fc980b868725387e98355f9a272a7cc11736b4566ee8b3947d","guid":"bfdfe7dc352907fc980b868725387e98e08bee2d9d4f0245dbc88ad45427f0e2","headerVisibility":"public"},{"fileReference":"bfdfe7dc352907fc980b868725387e98f21af28e616ee0d4ff04c7a6421f4400","guid":"bfdfe7dc352907fc980b868725387e98a5c749b84e8d3c2926f5a48b1af8ee1a","headerVisibility":"public"}],"guid":"bfdfe7dc352907fc980b868725387e98f3daf0106f316a7cd58f1be2cce95475","type":"com.apple.buildphase.headers"},{"buildFiles":[{"fileReference":"bfdfe7dc352907fc980b868725387e983addcf97f99326db0f50c64ef67acf87","guid":"bfdfe7dc352907fc980b868725387e98cb512a9a98c5d9916c3e269aa3c900f3"},{"fileReference":"bfdfe7dc352907fc980b868725387e988de8032ed3bcd43a2fa9cb6a98756979","guid":"bfdfe7dc352907fc980b868725387e989f18abf1675f5d8ecb93bf9782e03684"}],"guid":"bfdfe7dc352907fc980b868725387e9850d59ee46a73fe123ccc500d948c6892","type":"com.apple.buildphase.sources"},{"buildFiles":[{"fileReference":"bfdfe7dc352907fc980b868725387e98b14af7c49882340ad551cb13b0a1e06d","guid":"bfdfe7dc352907fc980b868725387e989d6c63b4845c3d140507e25d719b2b3c"}],"guid":"bfdfe7dc352907fc980b868725387e986151f6ce33582729b1cb033c4952f378","type":"com.apple.buildphase.frameworks"},{"buildFiles":[{"guid":"bfdfe7dc352907fc980b868725387e98a090c75adb6b9a2c5ab87c39b490c3cd","targetReference":"bfdfe7dc352907fc980b868725387e98c04ead258c2ba3f656422d1784107881"}],"guid":"bfdfe7dc352907fc980b868725387e984ef42a6e5935f83d2a808f2a201eb147","type":"com.apple.buildphase.resources"}],"buildRules":[],"dependencies":[{"guid":"bfdfe7dc352907fc980b868725387e98a408a4c1f668e62161cdeba76f57d50c","name":"FirebaseCore"},{"guid":"bfdfe7dc352907fc980b868725387e98c04ead258c2ba3f656422d1784107881","name":"FirebaseCoreExtension-FirebaseCoreExtension_Privacy"}],"guid":"bfdfe7dc352907fc980b868725387e982fcb5e27d041e48b96b3ab14ce32d5f2","name":"FirebaseCoreExtension","predominantSourceCodeLanguage":"Xcode.SourceCodeLanguage.Objective-C-Plus-Plus","productReference":{"guid":"bfdfe7dc352907fc980b868725387e98311e6292af5af43c801705cd189cc184","name":"FirebaseCoreExtension.framework","type":"product"},"productTypeIdentifier":"com.apple.product-type.framework","provisioningSourceData":[{"bundleIdentifierFromInfoPlist":"${PRODUCT_BUNDLE_IDENTIFIER}","configurationName":"Debug","provisioningStyle":1},{"bundleIdentifierFromInfoPlist":"${PRODUCT_BUNDLE_IDENTIFIER}","configurationName":"Profile","provisioningStyle":1},{"bundleIdentifierFromInfoPlist":"${PRODUCT_BUNDLE_IDENTIFIER}","configurationName":"Release","provisioningStyle":1}],"type":"standard"} \ No newline at end of file diff --git a/mih_ui/android/build/ios/XCBuildData/PIFCache/target/TARGET@v11_hash=d1efbd94e043870162f1a431e0d81426-json b/mih_ui/android/build/ios/XCBuildData/PIFCache/target/TARGET@v11_hash=d1efbd94e043870162f1a431e0d81426-json new file mode 100644 index 00000000..964642fe --- /dev/null +++ b/mih_ui/android/build/ios/XCBuildData/PIFCache/target/TARGET@v11_hash=d1efbd94e043870162f1a431e0d81426-json @@ -0,0 +1 @@ +{"buildConfigurations":[{"baseConfigurationFileReference":"bfdfe7dc352907fc980b868725387e98eef3be20c160fe75bf8789e71fe75d9a","buildSettings":{"CODE_SIGNING_ALLOWED":"NO","CODE_SIGNING_IDENTITY":"-","CODE_SIGNING_REQUIRED":"NO","CONFIGURATION_BUILD_DIR":"$(BUILD_DIR)/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME)/Google-Mobile-Ads-SDK","EXPANDED_CODE_SIGN_IDENTITY":"-","IBSC_MODULE":"Google_Mobile_Ads_SDK","INFOPLIST_FILE":"Target Support Files/Google-Mobile-Ads-SDK/ResourceBundle-GoogleMobileAdsResources-Google-Mobile-Ads-SDK-Info.plist","IPHONEOS_DEPLOYMENT_TARGET":"12.0","ONLY_ACTIVE_ARCH":"NO","PRODUCT_NAME":"GoogleMobileAdsResources","SDKROOT":"iphoneos","SKIP_INSTALL":"YES","TARGETED_DEVICE_FAMILY":"1,2","WRAPPER_EXTENSION":"bundle"},"guid":"bfdfe7dc352907fc980b868725387e98543aedfb2a113f779397a112d1969849","name":"Debug"},{"baseConfigurationFileReference":"bfdfe7dc352907fc980b868725387e988ad1fd18441580496a4b9e0a44f0cae8","buildSettings":{"CLANG_ENABLE_OBJC_WEAK":"NO","CODE_SIGNING_ALLOWED":"NO","CODE_SIGNING_IDENTITY":"-","CODE_SIGNING_REQUIRED":"NO","CONFIGURATION_BUILD_DIR":"$(BUILD_DIR)/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME)/Google-Mobile-Ads-SDK","EXPANDED_CODE_SIGN_IDENTITY":"-","IBSC_MODULE":"Google_Mobile_Ads_SDK","INFOPLIST_FILE":"Target Support Files/Google-Mobile-Ads-SDK/ResourceBundle-GoogleMobileAdsResources-Google-Mobile-Ads-SDK-Info.plist","IPHONEOS_DEPLOYMENT_TARGET":"12.0","PRODUCT_NAME":"GoogleMobileAdsResources","SDKROOT":"iphoneos","SKIP_INSTALL":"YES","TARGETED_DEVICE_FAMILY":"1,2","VALIDATE_PRODUCT":"YES","WRAPPER_EXTENSION":"bundle"},"guid":"bfdfe7dc352907fc980b868725387e98f65e87fd0fed71f9730423420a296aba","name":"Profile"},{"baseConfigurationFileReference":"bfdfe7dc352907fc980b868725387e988ad1fd18441580496a4b9e0a44f0cae8","buildSettings":{"CODE_SIGNING_ALLOWED":"NO","CODE_SIGNING_IDENTITY":"-","CODE_SIGNING_REQUIRED":"NO","CONFIGURATION_BUILD_DIR":"$(BUILD_DIR)/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME)/Google-Mobile-Ads-SDK","EXPANDED_CODE_SIGN_IDENTITY":"-","IBSC_MODULE":"Google_Mobile_Ads_SDK","INFOPLIST_FILE":"Target Support Files/Google-Mobile-Ads-SDK/ResourceBundle-GoogleMobileAdsResources-Google-Mobile-Ads-SDK-Info.plist","IPHONEOS_DEPLOYMENT_TARGET":"12.0","PRODUCT_NAME":"GoogleMobileAdsResources","SDKROOT":"iphoneos","SKIP_INSTALL":"YES","TARGETED_DEVICE_FAMILY":"1,2","WRAPPER_EXTENSION":"bundle"},"guid":"bfdfe7dc352907fc980b868725387e98c649bfda7d075fcc93fa3f398f4a5eab","name":"Release"}],"buildPhases":[{"buildFiles":[],"guid":"bfdfe7dc352907fc980b868725387e98f3925c17b7ecee1483b16deaa934334d","type":"com.apple.buildphase.sources"},{"buildFiles":[],"guid":"bfdfe7dc352907fc980b868725387e98a4da7e96df183882a2b6247cdb8680fb","type":"com.apple.buildphase.frameworks"},{"buildFiles":[{"fileReference":"bfdfe7dc352907fc980b868725387e9848de9a416078da1867623b75fba91210","guid":"bfdfe7dc352907fc980b868725387e98a6befa8e692964e73338cfe4ff6624aa"}],"guid":"bfdfe7dc352907fc980b868725387e98959f895b3e56aa34e86e358d41306fb1","type":"com.apple.buildphase.resources"}],"buildRules":[],"dependencies":[],"guid":"bfdfe7dc352907fc980b868725387e98468089666b04a941512e80a0cc9cf153","name":"Google-Mobile-Ads-SDK-GoogleMobileAdsResources","productReference":{"guid":"bfdfe7dc352907fc980b868725387e98d1290e807753728a1c85832ecdf321af","name":"GoogleMobileAdsResources.bundle","type":"product"},"productTypeIdentifier":"com.apple.product-type.bundle","provisioningSourceData":[{"bundleIdentifierFromInfoPlist":"${PRODUCT_BUNDLE_IDENTIFIER}","configurationName":"Debug","provisioningStyle":0},{"bundleIdentifierFromInfoPlist":"${PRODUCT_BUNDLE_IDENTIFIER}","configurationName":"Profile","provisioningStyle":0},{"bundleIdentifierFromInfoPlist":"${PRODUCT_BUNDLE_IDENTIFIER}","configurationName":"Release","provisioningStyle":0}],"type":"standard"} \ No newline at end of file diff --git a/mih_ui/android/build/ios/XCBuildData/PIFCache/target/TARGET@v11_hash=d204a2d23a6add831c951cc6c525c071-json b/mih_ui/android/build/ios/XCBuildData/PIFCache/target/TARGET@v11_hash=d204a2d23a6add831c951cc6c525c071-json new file mode 100644 index 00000000..23a91f86 --- /dev/null +++ b/mih_ui/android/build/ios/XCBuildData/PIFCache/target/TARGET@v11_hash=d204a2d23a6add831c951cc6c525c071-json @@ -0,0 +1 @@ +{"buildConfigurations":[{"baseConfigurationFileReference":"bfdfe7dc352907fc980b868725387e981ccda656ca076caea1e69514af198f0f","buildSettings":{"CODE_SIGNING_ALLOWED":"NO","CODE_SIGNING_IDENTITY":"-","CODE_SIGNING_REQUIRED":"NO","CONFIGURATION_BUILD_DIR":"$(BUILD_DIR)/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME)/GoogleUtilities","EXPANDED_CODE_SIGN_IDENTITY":"-","IBSC_MODULE":"GoogleUtilities","INFOPLIST_FILE":"Target Support Files/GoogleUtilities/ResourceBundle-GoogleUtilities_Privacy-GoogleUtilities-Info.plist","IPHONEOS_DEPLOYMENT_TARGET":"12.0","ONLY_ACTIVE_ARCH":"NO","PRODUCT_NAME":"GoogleUtilities_Privacy","SDKROOT":"iphoneos","SKIP_INSTALL":"YES","TARGETED_DEVICE_FAMILY":"1,2","WRAPPER_EXTENSION":"bundle"},"guid":"bfdfe7dc352907fc980b868725387e9844ce9a11001e6b1022a30e252440d4b7","name":"Debug"},{"baseConfigurationFileReference":"bfdfe7dc352907fc980b868725387e984a59f58d9dc78fdedc9a249bdac259e0","buildSettings":{"CLANG_ENABLE_OBJC_WEAK":"NO","CODE_SIGNING_ALLOWED":"NO","CODE_SIGNING_IDENTITY":"-","CODE_SIGNING_REQUIRED":"NO","CONFIGURATION_BUILD_DIR":"$(BUILD_DIR)/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME)/GoogleUtilities","EXPANDED_CODE_SIGN_IDENTITY":"-","IBSC_MODULE":"GoogleUtilities","INFOPLIST_FILE":"Target Support Files/GoogleUtilities/ResourceBundle-GoogleUtilities_Privacy-GoogleUtilities-Info.plist","IPHONEOS_DEPLOYMENT_TARGET":"12.0","PRODUCT_NAME":"GoogleUtilities_Privacy","SDKROOT":"iphoneos","SKIP_INSTALL":"YES","TARGETED_DEVICE_FAMILY":"1,2","VALIDATE_PRODUCT":"YES","WRAPPER_EXTENSION":"bundle"},"guid":"bfdfe7dc352907fc980b868725387e982897b6622e539dc70aad26f9fbabcec9","name":"Profile"},{"baseConfigurationFileReference":"bfdfe7dc352907fc980b868725387e984a59f58d9dc78fdedc9a249bdac259e0","buildSettings":{"CODE_SIGNING_ALLOWED":"NO","CODE_SIGNING_IDENTITY":"-","CODE_SIGNING_REQUIRED":"NO","CONFIGURATION_BUILD_DIR":"$(BUILD_DIR)/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME)/GoogleUtilities","EXPANDED_CODE_SIGN_IDENTITY":"-","IBSC_MODULE":"GoogleUtilities","INFOPLIST_FILE":"Target Support Files/GoogleUtilities/ResourceBundle-GoogleUtilities_Privacy-GoogleUtilities-Info.plist","IPHONEOS_DEPLOYMENT_TARGET":"12.0","PRODUCT_NAME":"GoogleUtilities_Privacy","SDKROOT":"iphoneos","SKIP_INSTALL":"YES","TARGETED_DEVICE_FAMILY":"1,2","WRAPPER_EXTENSION":"bundle"},"guid":"bfdfe7dc352907fc980b868725387e98b76e3b7d45b03be6c82463330e06d2d4","name":"Release"}],"buildPhases":[{"buildFiles":[],"guid":"bfdfe7dc352907fc980b868725387e98a05287c2a85bed2ebcbba8432f66c3bc","type":"com.apple.buildphase.sources"},{"buildFiles":[],"guid":"bfdfe7dc352907fc980b868725387e982dfd74f90d537b87be9453ae905cbe0f","type":"com.apple.buildphase.frameworks"},{"buildFiles":[{"fileReference":"bfdfe7dc352907fc980b868725387e985d3def67c82fae95425ab472ba727077","guid":"bfdfe7dc352907fc980b868725387e98b03e09af0870a6b60d95b5d023148f82"}],"guid":"bfdfe7dc352907fc980b868725387e9897d7aecd1a21b5e60fbbb71cecae5075","type":"com.apple.buildphase.resources"}],"buildRules":[],"dependencies":[],"guid":"bfdfe7dc352907fc980b868725387e981a9fac6eb9c80f8eed49fda0531af6a4","name":"GoogleUtilities-GoogleUtilities_Privacy","productReference":{"guid":"bfdfe7dc352907fc980b868725387e981f1852a7971aaa5e479d216071487d3a","name":"GoogleUtilities_Privacy.bundle","type":"product"},"productTypeIdentifier":"com.apple.product-type.bundle","provisioningSourceData":[{"bundleIdentifierFromInfoPlist":"${PRODUCT_BUNDLE_IDENTIFIER}","configurationName":"Debug","provisioningStyle":0},{"bundleIdentifierFromInfoPlist":"${PRODUCT_BUNDLE_IDENTIFIER}","configurationName":"Profile","provisioningStyle":0},{"bundleIdentifierFromInfoPlist":"${PRODUCT_BUNDLE_IDENTIFIER}","configurationName":"Release","provisioningStyle":0}],"type":"standard"} \ No newline at end of file diff --git a/mih_ui/android/build/ios/XCBuildData/PIFCache/target/TARGET@v11_hash=d360bbd5e759c5936a6004b5766066e3-json b/mih_ui/android/build/ios/XCBuildData/PIFCache/target/TARGET@v11_hash=d360bbd5e759c5936a6004b5766066e3-json new file mode 100644 index 00000000..904abff2 --- /dev/null +++ b/mih_ui/android/build/ios/XCBuildData/PIFCache/target/TARGET@v11_hash=d360bbd5e759c5936a6004b5766066e3-json @@ -0,0 +1 @@ +{"buildConfigurations":[{"baseConfigurationFileReference":"bfdfe7dc352907fc980b868725387e98e09431f2c48fb9c271b2728be33c6101","buildSettings":{"CLANG_ENABLE_OBJC_WEAK":"NO","CLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER":"NO","CODE_SIGN_IDENTITY[sdk=appletvos*]":"","CODE_SIGN_IDENTITY[sdk=iphoneos*]":"","CODE_SIGN_IDENTITY[sdk=watchos*]":"","CURRENT_PROJECT_VERSION":"1","DYLIB_COMPATIBILITY_VERSION":"1","DYLIB_CURRENT_VERSION":"1","DYLIB_INSTALL_NAME_BASE":"@rpath","ENABLE_BITCODE":"NO","ENABLE_MODULE_VERIFIER":"NO","ENABLE_USER_SCRIPT_SANDBOXING":"NO","EXCLUDED_ARCHS[sdk=iphoneos*]":"$(inherited) armv7","EXCLUDED_ARCHS[sdk=iphonesimulator*]":"$(inherited) i386","FRAMEWORK_SEARCH_PATHS[sdk=iphoneos*]":"\"/Users/yaso_meth/Git/flutter/bin/cache/artifacts/engine/ios/Flutter.xcframework/ios-arm64\" $(inherited)","FRAMEWORK_SEARCH_PATHS[sdk=iphonesimulator*]":"\"/Users/yaso_meth/Git/flutter/bin/cache/artifacts/engine/ios/Flutter.xcframework/ios-arm64_x86_64-simulator\" $(inherited)","GCC_PREFIX_HEADER":"Target Support Files/syncfusion_flutter_pdfviewer/syncfusion_flutter_pdfviewer-prefix.pch","GENERATE_INFOPLIST_FILE":"NO","INFOPLIST_FILE":"Target Support Files/syncfusion_flutter_pdfviewer/syncfusion_flutter_pdfviewer-Info.plist","INSTALL_PATH":"$(LOCAL_LIBRARY_DIR)/Frameworks","LD_RUNPATH_SEARCH_PATHS":"$(inherited) @executable_path/Frameworks @loader_path/Frameworks","MODULEMAP_FILE":"Target Support Files/syncfusion_flutter_pdfviewer/syncfusion_flutter_pdfviewer.modulemap","ONLY_ACTIVE_ARCH":"NO","OTHER_LDFLAGS":"$(inherited) -framework Flutter","PRODUCT_MODULE_NAME":"syncfusion_flutter_pdfviewer","PRODUCT_NAME":"syncfusion_flutter_pdfviewer","SDKROOT":"iphoneos","SKIP_INSTALL":"YES","SWIFT_ACTIVE_COMPILATION_CONDITIONS":"$(inherited) ","SWIFT_INSTALL_OBJC_HEADER":"YES","SWIFT_VERSION":"5.0","TARGETED_DEVICE_FAMILY":"1,2","VALID_ARCHS[sdk=iphonesimulator*]":"$(ARCHS_STANDARD)","VERSIONING_SYSTEM":"apple-generic","VERSION_INFO_PREFIX":""},"guid":"bfdfe7dc352907fc980b868725387e98e92f8760229b7c40169ecc5dd466efe2","name":"Debug"},{"baseConfigurationFileReference":"bfdfe7dc352907fc980b868725387e98029debb13536e6240d86d056b253ac21","buildSettings":{"CLANG_ENABLE_OBJC_WEAK":"NO","CLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER":"NO","CODE_SIGN_IDENTITY[sdk=appletvos*]":"","CODE_SIGN_IDENTITY[sdk=iphoneos*]":"","CODE_SIGN_IDENTITY[sdk=watchos*]":"","CURRENT_PROJECT_VERSION":"1","DYLIB_COMPATIBILITY_VERSION":"1","DYLIB_CURRENT_VERSION":"1","DYLIB_INSTALL_NAME_BASE":"@rpath","ENABLE_BITCODE":"NO","ENABLE_MODULE_VERIFIER":"NO","ENABLE_USER_SCRIPT_SANDBOXING":"NO","EXCLUDED_ARCHS[sdk=iphoneos*]":"$(inherited) armv7","EXCLUDED_ARCHS[sdk=iphonesimulator*]":"$(inherited) i386","FRAMEWORK_SEARCH_PATHS[sdk=iphoneos*]":"\"/Users/yaso_meth/Git/flutter/bin/cache/artifacts/engine/ios-release/Flutter.xcframework/ios-arm64\" $(inherited)","FRAMEWORK_SEARCH_PATHS[sdk=iphonesimulator*]":"\"/Users/yaso_meth/Git/flutter/bin/cache/artifacts/engine/ios-release/Flutter.xcframework/ios-arm64_x86_64-simulator\" $(inherited)","GCC_PREFIX_HEADER":"Target Support Files/syncfusion_flutter_pdfviewer/syncfusion_flutter_pdfviewer-prefix.pch","GENERATE_INFOPLIST_FILE":"NO","INFOPLIST_FILE":"Target Support Files/syncfusion_flutter_pdfviewer/syncfusion_flutter_pdfviewer-Info.plist","INSTALL_PATH":"$(LOCAL_LIBRARY_DIR)/Frameworks","LD_RUNPATH_SEARCH_PATHS":"$(inherited) @executable_path/Frameworks @loader_path/Frameworks","MODULEMAP_FILE":"Target Support Files/syncfusion_flutter_pdfviewer/syncfusion_flutter_pdfviewer.modulemap","OTHER_LDFLAGS":"$(inherited) -framework Flutter","PRODUCT_MODULE_NAME":"syncfusion_flutter_pdfviewer","PRODUCT_NAME":"syncfusion_flutter_pdfviewer","SDKROOT":"iphoneos","SKIP_INSTALL":"YES","SWIFT_ACTIVE_COMPILATION_CONDITIONS":"$(inherited) ","SWIFT_INSTALL_OBJC_HEADER":"YES","SWIFT_VERSION":"5.0","TARGETED_DEVICE_FAMILY":"1,2","VALIDATE_PRODUCT":"YES","VALID_ARCHS[sdk=iphonesimulator*]":"$(ARCHS_STANDARD)","VERSIONING_SYSTEM":"apple-generic","VERSION_INFO_PREFIX":""},"guid":"bfdfe7dc352907fc980b868725387e983729e97f504caf068ca6520a04738b64","name":"Profile"},{"baseConfigurationFileReference":"bfdfe7dc352907fc980b868725387e98029debb13536e6240d86d056b253ac21","buildSettings":{"CLANG_ENABLE_OBJC_WEAK":"NO","CLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER":"NO","CODE_SIGN_IDENTITY[sdk=appletvos*]":"","CODE_SIGN_IDENTITY[sdk=iphoneos*]":"","CODE_SIGN_IDENTITY[sdk=watchos*]":"","CURRENT_PROJECT_VERSION":"1","DYLIB_COMPATIBILITY_VERSION":"1","DYLIB_CURRENT_VERSION":"1","DYLIB_INSTALL_NAME_BASE":"@rpath","ENABLE_BITCODE":"NO","ENABLE_MODULE_VERIFIER":"NO","ENABLE_USER_SCRIPT_SANDBOXING":"NO","EXCLUDED_ARCHS[sdk=iphoneos*]":"$(inherited) armv7","EXCLUDED_ARCHS[sdk=iphonesimulator*]":"$(inherited) i386","FRAMEWORK_SEARCH_PATHS[sdk=iphoneos*]":"\"/Users/yaso_meth/Git/flutter/bin/cache/artifacts/engine/ios-release/Flutter.xcframework/ios-arm64\" $(inherited)","FRAMEWORK_SEARCH_PATHS[sdk=iphonesimulator*]":"\"/Users/yaso_meth/Git/flutter/bin/cache/artifacts/engine/ios-release/Flutter.xcframework/ios-arm64_x86_64-simulator\" $(inherited)","GCC_PREFIX_HEADER":"Target Support Files/syncfusion_flutter_pdfviewer/syncfusion_flutter_pdfviewer-prefix.pch","GENERATE_INFOPLIST_FILE":"NO","INFOPLIST_FILE":"Target Support Files/syncfusion_flutter_pdfviewer/syncfusion_flutter_pdfviewer-Info.plist","INSTALL_PATH":"$(LOCAL_LIBRARY_DIR)/Frameworks","LD_RUNPATH_SEARCH_PATHS":"$(inherited) @executable_path/Frameworks @loader_path/Frameworks","MODULEMAP_FILE":"Target Support Files/syncfusion_flutter_pdfviewer/syncfusion_flutter_pdfviewer.modulemap","OTHER_LDFLAGS":"$(inherited) -framework Flutter","PRODUCT_MODULE_NAME":"syncfusion_flutter_pdfviewer","PRODUCT_NAME":"syncfusion_flutter_pdfviewer","SDKROOT":"iphoneos","SKIP_INSTALL":"YES","SWIFT_ACTIVE_COMPILATION_CONDITIONS":"$(inherited) ","SWIFT_INSTALL_OBJC_HEADER":"YES","SWIFT_VERSION":"5.0","TARGETED_DEVICE_FAMILY":"1,2","VALIDATE_PRODUCT":"YES","VALID_ARCHS[sdk=iphonesimulator*]":"$(ARCHS_STANDARD)","VERSIONING_SYSTEM":"apple-generic","VERSION_INFO_PREFIX":""},"guid":"bfdfe7dc352907fc980b868725387e982e2319c198381b7baabaf4fe9102ad09","name":"Release"}],"buildPhases":[{"buildFiles":[{"fileReference":"bfdfe7dc352907fc980b868725387e98d31e2d30267b93d0385170731adefbb0","guid":"bfdfe7dc352907fc980b868725387e987ecc2f248a1b83d7047d9c7702aa300a","headerVisibility":"public"}],"guid":"bfdfe7dc352907fc980b868725387e98986e9aa32f7516e12f353d00ee31c9c2","type":"com.apple.buildphase.headers"},{"buildFiles":[{"fileReference":"bfdfe7dc352907fc980b868725387e98532284d033f3de271a1fd34a6aa57476","guid":"bfdfe7dc352907fc980b868725387e98aa71677cadb913a7d3d768a57a1c4eeb"},{"fileReference":"bfdfe7dc352907fc980b868725387e9853502a1c45cb54adc332a8b75ff6be4e","guid":"bfdfe7dc352907fc980b868725387e98e39b0e36dfb6cca4d1ba1ac694c46953"}],"guid":"bfdfe7dc352907fc980b868725387e98e91ced1e5e7578937e8ac0579096b99e","type":"com.apple.buildphase.sources"},{"buildFiles":[{"fileReference":"bfdfe7dc352907fc980b868725387e98b14af7c49882340ad551cb13b0a1e06d","guid":"bfdfe7dc352907fc980b868725387e985c86e1e1ed48253b696ddf1ae2d943b6"}],"guid":"bfdfe7dc352907fc980b868725387e984c87df8814132b0cd79561e17b239f7d","type":"com.apple.buildphase.frameworks"},{"buildFiles":[],"guid":"bfdfe7dc352907fc980b868725387e98ca5b4323584e2043d9709fdfb75e4e12","type":"com.apple.buildphase.resources"}],"buildRules":[],"dependencies":[{"guid":"bfdfe7dc352907fc980b868725387e989da425bb6d6d5d8dbb95e4afffb82217","name":"Flutter"}],"guid":"bfdfe7dc352907fc980b868725387e9869b9058bfc96f2a6a75b4b5dd4df3117","name":"syncfusion_flutter_pdfviewer","predominantSourceCodeLanguage":"Xcode.SourceCodeLanguage.Swift","productReference":{"guid":"bfdfe7dc352907fc980b868725387e988d881935b77e0a6a63d6fed20bc032b1","name":"syncfusion_flutter_pdfviewer.framework","type":"product"},"productTypeIdentifier":"com.apple.product-type.framework","provisioningSourceData":[{"bundleIdentifierFromInfoPlist":"${PRODUCT_BUNDLE_IDENTIFIER}","configurationName":"Debug","provisioningStyle":1},{"bundleIdentifierFromInfoPlist":"${PRODUCT_BUNDLE_IDENTIFIER}","configurationName":"Profile","provisioningStyle":1},{"bundleIdentifierFromInfoPlist":"${PRODUCT_BUNDLE_IDENTIFIER}","configurationName":"Release","provisioningStyle":1}],"type":"standard"} \ No newline at end of file diff --git a/mih_ui/android/build/ios/XCBuildData/PIFCache/target/TARGET@v11_hash=d560c2e797b744ca35425688afeb9717-json b/mih_ui/android/build/ios/XCBuildData/PIFCache/target/TARGET@v11_hash=d560c2e797b744ca35425688afeb9717-json new file mode 100644 index 00000000..6f8519cd --- /dev/null +++ b/mih_ui/android/build/ios/XCBuildData/PIFCache/target/TARGET@v11_hash=d560c2e797b744ca35425688afeb9717-json @@ -0,0 +1 @@ +{"buildConfigurations":[{"baseConfigurationFileReference":"bfdfe7dc352907fc980b868725387e98cca55d6c772db4d637cf770c880e5bab","buildSettings":{"CODE_SIGNING_ALLOWED":"NO","CODE_SIGNING_IDENTITY":"-","CODE_SIGNING_REQUIRED":"NO","CONFIGURATION_BUILD_DIR":"$(BUILD_DIR)/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME)/geolocator_apple","EXPANDED_CODE_SIGN_IDENTITY":"-","IBSC_MODULE":"geolocator_apple","INFOPLIST_FILE":"Target Support Files/geolocator_apple/ResourceBundle-geolocator_apple_privacy-geolocator_apple-Info.plist","IPHONEOS_DEPLOYMENT_TARGET":"11.0","ONLY_ACTIVE_ARCH":"NO","PRODUCT_NAME":"geolocator_apple_privacy","SDKROOT":"iphoneos","SKIP_INSTALL":"YES","TARGETED_DEVICE_FAMILY":"1,2","WRAPPER_EXTENSION":"bundle"},"guid":"bfdfe7dc352907fc980b868725387e98803aea759e07ea4eddf8d986c4c89b65","name":"Debug"},{"baseConfigurationFileReference":"bfdfe7dc352907fc980b868725387e98563a39b273a0c88e1e2a4a289bb4eff2","buildSettings":{"CLANG_ENABLE_OBJC_WEAK":"NO","CODE_SIGNING_ALLOWED":"NO","CODE_SIGNING_IDENTITY":"-","CODE_SIGNING_REQUIRED":"NO","CONFIGURATION_BUILD_DIR":"$(BUILD_DIR)/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME)/geolocator_apple","EXPANDED_CODE_SIGN_IDENTITY":"-","IBSC_MODULE":"geolocator_apple","INFOPLIST_FILE":"Target Support Files/geolocator_apple/ResourceBundle-geolocator_apple_privacy-geolocator_apple-Info.plist","IPHONEOS_DEPLOYMENT_TARGET":"11.0","PRODUCT_NAME":"geolocator_apple_privacy","SDKROOT":"iphoneos","SKIP_INSTALL":"YES","TARGETED_DEVICE_FAMILY":"1,2","VALIDATE_PRODUCT":"YES","WRAPPER_EXTENSION":"bundle"},"guid":"bfdfe7dc352907fc980b868725387e98560e1ba7a5e42f80a90f70c60180f82c","name":"Profile"},{"baseConfigurationFileReference":"bfdfe7dc352907fc980b868725387e98563a39b273a0c88e1e2a4a289bb4eff2","buildSettings":{"CODE_SIGNING_ALLOWED":"NO","CODE_SIGNING_IDENTITY":"-","CODE_SIGNING_REQUIRED":"NO","CONFIGURATION_BUILD_DIR":"$(BUILD_DIR)/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME)/geolocator_apple","EXPANDED_CODE_SIGN_IDENTITY":"-","IBSC_MODULE":"geolocator_apple","INFOPLIST_FILE":"Target Support Files/geolocator_apple/ResourceBundle-geolocator_apple_privacy-geolocator_apple-Info.plist","IPHONEOS_DEPLOYMENT_TARGET":"11.0","PRODUCT_NAME":"geolocator_apple_privacy","SDKROOT":"iphoneos","SKIP_INSTALL":"YES","TARGETED_DEVICE_FAMILY":"1,2","WRAPPER_EXTENSION":"bundle"},"guid":"bfdfe7dc352907fc980b868725387e9875e787c92418669546bc9678b26d4929","name":"Release"}],"buildPhases":[{"buildFiles":[],"guid":"bfdfe7dc352907fc980b868725387e98cd585c1c1c68fdee3b86cf64c28d1bd9","type":"com.apple.buildphase.sources"},{"buildFiles":[],"guid":"bfdfe7dc352907fc980b868725387e98eafc0b13c8cff64cb7eb7cb8f7aef5f6","type":"com.apple.buildphase.frameworks"},{"buildFiles":[{"fileReference":"bfdfe7dc352907fc980b868725387e98a5e5404fb09ecfe1c9c3cd85e3ab5448","guid":"bfdfe7dc352907fc980b868725387e985150e661237d7724afdfd4eb9a7d30eb"}],"guid":"bfdfe7dc352907fc980b868725387e98be1f3cef15a360878635f9921178c3bf","type":"com.apple.buildphase.resources"}],"buildRules":[],"dependencies":[],"guid":"bfdfe7dc352907fc980b868725387e98e1aba8ff8dc833f2269ce0a7182533b3","name":"geolocator_apple-geolocator_apple_privacy","productReference":{"guid":"bfdfe7dc352907fc980b868725387e980ae07e1806c3af2f5550d2e89780c766","name":"geolocator_apple_privacy.bundle","type":"product"},"productTypeIdentifier":"com.apple.product-type.bundle","provisioningSourceData":[{"bundleIdentifierFromInfoPlist":"${PRODUCT_BUNDLE_IDENTIFIER}","configurationName":"Debug","provisioningStyle":0},{"bundleIdentifierFromInfoPlist":"${PRODUCT_BUNDLE_IDENTIFIER}","configurationName":"Profile","provisioningStyle":0},{"bundleIdentifierFromInfoPlist":"${PRODUCT_BUNDLE_IDENTIFIER}","configurationName":"Release","provisioningStyle":0}],"type":"standard"} \ No newline at end of file diff --git a/mih_ui/android/build/ios/XCBuildData/PIFCache/target/TARGET@v11_hash=d5f04c64bab0734f1ab47fd9bcf15bc4-json b/mih_ui/android/build/ios/XCBuildData/PIFCache/target/TARGET@v11_hash=d5f04c64bab0734f1ab47fd9bcf15bc4-json new file mode 100644 index 00000000..89db2292 --- /dev/null +++ b/mih_ui/android/build/ios/XCBuildData/PIFCache/target/TARGET@v11_hash=d5f04c64bab0734f1ab47fd9bcf15bc4-json @@ -0,0 +1 @@ +{"buildConfigurations":[{"baseConfigurationFileReference":"bfdfe7dc352907fc980b868725387e981144f00ce89ffa4e0260914a9ffec527","buildSettings":{"CLANG_ENABLE_OBJC_WEAK":"NO","CLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER":"NO","CODE_SIGN_IDENTITY[sdk=appletvos*]":"","CODE_SIGN_IDENTITY[sdk=iphoneos*]":"","CODE_SIGN_IDENTITY[sdk=watchos*]":"","CURRENT_PROJECT_VERSION":"1","DYLIB_COMPATIBILITY_VERSION":"1","DYLIB_CURRENT_VERSION":"1","DYLIB_INSTALL_NAME_BASE":"@rpath","ENABLE_BITCODE":"NO","ENABLE_MODULE_VERIFIER":"NO","ENABLE_USER_SCRIPT_SANDBOXING":"NO","EXCLUDED_ARCHS[sdk=iphoneos*]":"$(inherited) armv7","EXCLUDED_ARCHS[sdk=iphonesimulator*]":"$(inherited) i386","FRAMEWORK_SEARCH_PATHS[sdk=iphoneos*]":"\"/Users/yaso_meth/Git/flutter/bin/cache/artifacts/engine/ios/Flutter.xcframework/ios-arm64\" $(inherited)","FRAMEWORK_SEARCH_PATHS[sdk=iphonesimulator*]":"\"/Users/yaso_meth/Git/flutter/bin/cache/artifacts/engine/ios/Flutter.xcframework/ios-arm64_x86_64-simulator\" $(inherited)","GCC_PREFIX_HEADER":"Target Support Files/mobile_scanner/mobile_scanner-prefix.pch","GENERATE_INFOPLIST_FILE":"NO","INFOPLIST_FILE":"Target Support Files/mobile_scanner/mobile_scanner-Info.plist","INSTALL_PATH":"$(LOCAL_LIBRARY_DIR)/Frameworks","LD_RUNPATH_SEARCH_PATHS":"$(inherited) @executable_path/Frameworks @loader_path/Frameworks","MODULEMAP_FILE":"Target Support Files/mobile_scanner/mobile_scanner.modulemap","ONLY_ACTIVE_ARCH":"NO","OTHER_LDFLAGS":"$(inherited) -framework Flutter","PRODUCT_MODULE_NAME":"mobile_scanner","PRODUCT_NAME":"mobile_scanner","SDKROOT":"iphoneos","SKIP_INSTALL":"YES","SWIFT_ACTIVE_COMPILATION_CONDITIONS":"$(inherited) ","SWIFT_INSTALL_OBJC_HEADER":"YES","SWIFT_VERSION":"5.0","TARGETED_DEVICE_FAMILY":"1,2","VALID_ARCHS[sdk=iphonesimulator*]":"$(ARCHS_STANDARD)","VERSIONING_SYSTEM":"apple-generic","VERSION_INFO_PREFIX":""},"guid":"bfdfe7dc352907fc980b868725387e98cdfd765d89c800c39981a3166f6eb58e","name":"Debug"},{"baseConfigurationFileReference":"bfdfe7dc352907fc980b868725387e98227c1f919eedf604acd47c56a9ef7ec4","buildSettings":{"CLANG_ENABLE_OBJC_WEAK":"NO","CLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER":"NO","CODE_SIGN_IDENTITY[sdk=appletvos*]":"","CODE_SIGN_IDENTITY[sdk=iphoneos*]":"","CODE_SIGN_IDENTITY[sdk=watchos*]":"","CURRENT_PROJECT_VERSION":"1","DYLIB_COMPATIBILITY_VERSION":"1","DYLIB_CURRENT_VERSION":"1","DYLIB_INSTALL_NAME_BASE":"@rpath","ENABLE_BITCODE":"NO","ENABLE_MODULE_VERIFIER":"NO","ENABLE_USER_SCRIPT_SANDBOXING":"NO","EXCLUDED_ARCHS[sdk=iphoneos*]":"$(inherited) armv7","EXCLUDED_ARCHS[sdk=iphonesimulator*]":"$(inherited) i386","FRAMEWORK_SEARCH_PATHS[sdk=iphoneos*]":"\"/Users/yaso_meth/Git/flutter/bin/cache/artifacts/engine/ios-release/Flutter.xcframework/ios-arm64\" $(inherited)","FRAMEWORK_SEARCH_PATHS[sdk=iphonesimulator*]":"\"/Users/yaso_meth/Git/flutter/bin/cache/artifacts/engine/ios-release/Flutter.xcframework/ios-arm64_x86_64-simulator\" $(inherited)","GCC_PREFIX_HEADER":"Target Support Files/mobile_scanner/mobile_scanner-prefix.pch","GENERATE_INFOPLIST_FILE":"NO","INFOPLIST_FILE":"Target Support Files/mobile_scanner/mobile_scanner-Info.plist","INSTALL_PATH":"$(LOCAL_LIBRARY_DIR)/Frameworks","LD_RUNPATH_SEARCH_PATHS":"$(inherited) @executable_path/Frameworks @loader_path/Frameworks","MODULEMAP_FILE":"Target Support Files/mobile_scanner/mobile_scanner.modulemap","OTHER_LDFLAGS":"$(inherited) -framework Flutter","PRODUCT_MODULE_NAME":"mobile_scanner","PRODUCT_NAME":"mobile_scanner","SDKROOT":"iphoneos","SKIP_INSTALL":"YES","SWIFT_ACTIVE_COMPILATION_CONDITIONS":"$(inherited) ","SWIFT_INSTALL_OBJC_HEADER":"YES","SWIFT_VERSION":"5.0","TARGETED_DEVICE_FAMILY":"1,2","VALIDATE_PRODUCT":"YES","VALID_ARCHS[sdk=iphonesimulator*]":"$(ARCHS_STANDARD)","VERSIONING_SYSTEM":"apple-generic","VERSION_INFO_PREFIX":""},"guid":"bfdfe7dc352907fc980b868725387e98db33fe3671dba70a9981816dcb538f2f","name":"Profile"},{"baseConfigurationFileReference":"bfdfe7dc352907fc980b868725387e98227c1f919eedf604acd47c56a9ef7ec4","buildSettings":{"CLANG_ENABLE_OBJC_WEAK":"NO","CLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER":"NO","CODE_SIGN_IDENTITY[sdk=appletvos*]":"","CODE_SIGN_IDENTITY[sdk=iphoneos*]":"","CODE_SIGN_IDENTITY[sdk=watchos*]":"","CURRENT_PROJECT_VERSION":"1","DYLIB_COMPATIBILITY_VERSION":"1","DYLIB_CURRENT_VERSION":"1","DYLIB_INSTALL_NAME_BASE":"@rpath","ENABLE_BITCODE":"NO","ENABLE_MODULE_VERIFIER":"NO","ENABLE_USER_SCRIPT_SANDBOXING":"NO","EXCLUDED_ARCHS[sdk=iphoneos*]":"$(inherited) armv7","EXCLUDED_ARCHS[sdk=iphonesimulator*]":"$(inherited) i386","FRAMEWORK_SEARCH_PATHS[sdk=iphoneos*]":"\"/Users/yaso_meth/Git/flutter/bin/cache/artifacts/engine/ios-release/Flutter.xcframework/ios-arm64\" $(inherited)","FRAMEWORK_SEARCH_PATHS[sdk=iphonesimulator*]":"\"/Users/yaso_meth/Git/flutter/bin/cache/artifacts/engine/ios-release/Flutter.xcframework/ios-arm64_x86_64-simulator\" $(inherited)","GCC_PREFIX_HEADER":"Target Support Files/mobile_scanner/mobile_scanner-prefix.pch","GENERATE_INFOPLIST_FILE":"NO","INFOPLIST_FILE":"Target Support Files/mobile_scanner/mobile_scanner-Info.plist","INSTALL_PATH":"$(LOCAL_LIBRARY_DIR)/Frameworks","LD_RUNPATH_SEARCH_PATHS":"$(inherited) @executable_path/Frameworks @loader_path/Frameworks","MODULEMAP_FILE":"Target Support Files/mobile_scanner/mobile_scanner.modulemap","OTHER_LDFLAGS":"$(inherited) -framework Flutter","PRODUCT_MODULE_NAME":"mobile_scanner","PRODUCT_NAME":"mobile_scanner","SDKROOT":"iphoneos","SKIP_INSTALL":"YES","SWIFT_ACTIVE_COMPILATION_CONDITIONS":"$(inherited) ","SWIFT_INSTALL_OBJC_HEADER":"YES","SWIFT_VERSION":"5.0","TARGETED_DEVICE_FAMILY":"1,2","VALIDATE_PRODUCT":"YES","VALID_ARCHS[sdk=iphonesimulator*]":"$(ARCHS_STANDARD)","VERSIONING_SYSTEM":"apple-generic","VERSION_INFO_PREFIX":""},"guid":"bfdfe7dc352907fc980b868725387e9846ccb4b1c121a7dfeb02643174c4b6cc","name":"Release"}],"buildPhases":[{"buildFiles":[{"fileReference":"bfdfe7dc352907fc980b868725387e98be2efddfa0659e6c19ce1a5acc94ec6d","guid":"bfdfe7dc352907fc980b868725387e986bf686767dad5a23092e77ca0a446a9d","headerVisibility":"public"}],"guid":"bfdfe7dc352907fc980b868725387e987864d6534a1cfe750375a1690e0d41ee","type":"com.apple.buildphase.headers"},{"buildFiles":[{"fileReference":"bfdfe7dc352907fc980b868725387e98883be13daebbdfdcf10e362bc3ef4ebb","guid":"bfdfe7dc352907fc980b868725387e98a70ef071f3f451428660d11962ea82d4"},{"fileReference":"bfdfe7dc352907fc980b868725387e98e4be4892db4744593107b72e6b06cf75","guid":"bfdfe7dc352907fc980b868725387e9863ed24d99240b448ebd91bae41774c7b"},{"fileReference":"bfdfe7dc352907fc980b868725387e98cbd2a7736d3f622183620d97dabb51d6","guid":"bfdfe7dc352907fc980b868725387e985987309b98717b9c8713bae689a87a13"},{"fileReference":"bfdfe7dc352907fc980b868725387e982f3d32c7820c33deaf24eed4a2774a69","guid":"bfdfe7dc352907fc980b868725387e98be016dbb72e105cfc4902c58c1e8eacb"},{"fileReference":"bfdfe7dc352907fc980b868725387e98c373041b232771156d382a714478862a","guid":"bfdfe7dc352907fc980b868725387e98ce2a238b52d44e33fd88454a634cde8e"},{"fileReference":"bfdfe7dc352907fc980b868725387e98168d2dc9c91bbc22b520b7c63b90d589","guid":"bfdfe7dc352907fc980b868725387e9829ebdf92672015add48e807e88a7ee9b"}],"guid":"bfdfe7dc352907fc980b868725387e981316f83063c35be8314794975de5fdd3","type":"com.apple.buildphase.sources"},{"buildFiles":[{"fileReference":"bfdfe7dc352907fc980b868725387e98b14af7c49882340ad551cb13b0a1e06d","guid":"bfdfe7dc352907fc980b868725387e980475a39ebe52eb7b3754e111eac95569"}],"guid":"bfdfe7dc352907fc980b868725387e98946d19d6a5b186917c91965a818b56d7","type":"com.apple.buildphase.frameworks"},{"buildFiles":[{"guid":"bfdfe7dc352907fc980b868725387e986c07d430f969c2c80c9bde510147b89f","targetReference":"bfdfe7dc352907fc980b868725387e98e39aae0c91f0bdebfb6ac42304942a79"}],"guid":"bfdfe7dc352907fc980b868725387e981b10a6a7b436fc7f8c97b0f686f8a8c5","type":"com.apple.buildphase.resources"}],"buildRules":[],"dependencies":[{"guid":"bfdfe7dc352907fc980b868725387e989da425bb6d6d5d8dbb95e4afffb82217","name":"Flutter"},{"guid":"bfdfe7dc352907fc980b868725387e98e39aae0c91f0bdebfb6ac42304942a79","name":"mobile_scanner-mobile_scanner_privacy"}],"guid":"bfdfe7dc352907fc980b868725387e98b54f2bdfc3ce691d3ad04972a364d2a5","name":"mobile_scanner","predominantSourceCodeLanguage":"Xcode.SourceCodeLanguage.Swift","productReference":{"guid":"bfdfe7dc352907fc980b868725387e9819d278982b4910681a163531507644fe","name":"mobile_scanner.framework","type":"product"},"productTypeIdentifier":"com.apple.product-type.framework","provisioningSourceData":[{"bundleIdentifierFromInfoPlist":"${PRODUCT_BUNDLE_IDENTIFIER}","configurationName":"Debug","provisioningStyle":1},{"bundleIdentifierFromInfoPlist":"${PRODUCT_BUNDLE_IDENTIFIER}","configurationName":"Profile","provisioningStyle":1},{"bundleIdentifierFromInfoPlist":"${PRODUCT_BUNDLE_IDENTIFIER}","configurationName":"Release","provisioningStyle":1}],"type":"standard"} \ No newline at end of file diff --git a/mih_ui/android/build/ios/XCBuildData/PIFCache/target/TARGET@v11_hash=d67c7fe50f94aa30e853cef078cfecc9-json b/mih_ui/android/build/ios/XCBuildData/PIFCache/target/TARGET@v11_hash=d67c7fe50f94aa30e853cef078cfecc9-json new file mode 100644 index 00000000..ce544d1f --- /dev/null +++ b/mih_ui/android/build/ios/XCBuildData/PIFCache/target/TARGET@v11_hash=d67c7fe50f94aa30e853cef078cfecc9-json @@ -0,0 +1 @@ +{"buildConfigurations":[{"baseConfigurationFileReference":"bfdfe7dc352907fc980b868725387e9826aabbf6d6b2201c6400dd7fc8a0967f","buildSettings":{"CODE_SIGNING_ALLOWED":"NO","CODE_SIGNING_IDENTITY":"-","CODE_SIGNING_REQUIRED":"NO","CONFIGURATION_BUILD_DIR":"$(BUILD_DIR)/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME)/local_auth_darwin","EXPANDED_CODE_SIGN_IDENTITY":"-","IBSC_MODULE":"local_auth_darwin","INFOPLIST_FILE":"Target Support Files/local_auth_darwin/ResourceBundle-local_auth_darwin_privacy-local_auth_darwin-Info.plist","IPHONEOS_DEPLOYMENT_TARGET":"12.0","ONLY_ACTIVE_ARCH":"NO","PRODUCT_NAME":"local_auth_darwin_privacy","SDKROOT":"iphoneos","SKIP_INSTALL":"YES","TARGETED_DEVICE_FAMILY":"1,2","WRAPPER_EXTENSION":"bundle"},"guid":"bfdfe7dc352907fc980b868725387e9821167a4cd0084e2aff71487ad47adb6e","name":"Debug"},{"baseConfigurationFileReference":"bfdfe7dc352907fc980b868725387e9835c7588ceebde0ed281cc6f972ef1ccc","buildSettings":{"CLANG_ENABLE_OBJC_WEAK":"NO","CODE_SIGNING_ALLOWED":"NO","CODE_SIGNING_IDENTITY":"-","CODE_SIGNING_REQUIRED":"NO","CONFIGURATION_BUILD_DIR":"$(BUILD_DIR)/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME)/local_auth_darwin","EXPANDED_CODE_SIGN_IDENTITY":"-","IBSC_MODULE":"local_auth_darwin","INFOPLIST_FILE":"Target Support Files/local_auth_darwin/ResourceBundle-local_auth_darwin_privacy-local_auth_darwin-Info.plist","IPHONEOS_DEPLOYMENT_TARGET":"12.0","PRODUCT_NAME":"local_auth_darwin_privacy","SDKROOT":"iphoneos","SKIP_INSTALL":"YES","TARGETED_DEVICE_FAMILY":"1,2","VALIDATE_PRODUCT":"YES","WRAPPER_EXTENSION":"bundle"},"guid":"bfdfe7dc352907fc980b868725387e98fcd58e589d13ee873a59c5574d309686","name":"Profile"},{"baseConfigurationFileReference":"bfdfe7dc352907fc980b868725387e9835c7588ceebde0ed281cc6f972ef1ccc","buildSettings":{"CODE_SIGNING_ALLOWED":"NO","CODE_SIGNING_IDENTITY":"-","CODE_SIGNING_REQUIRED":"NO","CONFIGURATION_BUILD_DIR":"$(BUILD_DIR)/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME)/local_auth_darwin","EXPANDED_CODE_SIGN_IDENTITY":"-","IBSC_MODULE":"local_auth_darwin","INFOPLIST_FILE":"Target Support Files/local_auth_darwin/ResourceBundle-local_auth_darwin_privacy-local_auth_darwin-Info.plist","IPHONEOS_DEPLOYMENT_TARGET":"12.0","PRODUCT_NAME":"local_auth_darwin_privacy","SDKROOT":"iphoneos","SKIP_INSTALL":"YES","TARGETED_DEVICE_FAMILY":"1,2","WRAPPER_EXTENSION":"bundle"},"guid":"bfdfe7dc352907fc980b868725387e9869f1896b0a3d90b12b1fbfa70e956785","name":"Release"}],"buildPhases":[{"buildFiles":[],"guid":"bfdfe7dc352907fc980b868725387e98924acef17ca8c3362146d5df11002941","type":"com.apple.buildphase.sources"},{"buildFiles":[],"guid":"bfdfe7dc352907fc980b868725387e9855620e7b64d5cd7cf1a09dddd9ea32ad","type":"com.apple.buildphase.frameworks"},{"buildFiles":[{"fileReference":"bfdfe7dc352907fc980b868725387e988634a8b747b6724232b5af5f382a225c","guid":"bfdfe7dc352907fc980b868725387e98993630a4e34675696479e6e917ca45c7"}],"guid":"bfdfe7dc352907fc980b868725387e984dbc3d8396ea7babbdbe62191a1dad8a","type":"com.apple.buildphase.resources"}],"buildRules":[],"dependencies":[],"guid":"bfdfe7dc352907fc980b868725387e98afb8e8e2ed6a0ef9cb1d99282c22f170","name":"local_auth_darwin-local_auth_darwin_privacy","productReference":{"guid":"bfdfe7dc352907fc980b868725387e9899e37153e5b26774a3fd38635d02a847","name":"local_auth_darwin_privacy.bundle","type":"product"},"productTypeIdentifier":"com.apple.product-type.bundle","provisioningSourceData":[{"bundleIdentifierFromInfoPlist":"${PRODUCT_BUNDLE_IDENTIFIER}","configurationName":"Debug","provisioningStyle":0},{"bundleIdentifierFromInfoPlist":"${PRODUCT_BUNDLE_IDENTIFIER}","configurationName":"Profile","provisioningStyle":0},{"bundleIdentifierFromInfoPlist":"${PRODUCT_BUNDLE_IDENTIFIER}","configurationName":"Release","provisioningStyle":0}],"type":"standard"} \ No newline at end of file diff --git a/mih_ui/android/build/ios/XCBuildData/PIFCache/target/TARGET@v11_hash=d6e43cdf0cbce99338da86c88c7a9b38-json b/mih_ui/android/build/ios/XCBuildData/PIFCache/target/TARGET@v11_hash=d6e43cdf0cbce99338da86c88c7a9b38-json new file mode 100644 index 00000000..e8bb7a9f --- /dev/null +++ b/mih_ui/android/build/ios/XCBuildData/PIFCache/target/TARGET@v11_hash=d6e43cdf0cbce99338da86c88c7a9b38-json @@ -0,0 +1 @@ +{"buildConfigurations":[{"baseConfigurationFileReference":"bfdfe7dc352907fc980b868725387e98284ffc1eae91e8f4cf71938bb6a26644","buildSettings":{"CODE_SIGNING_ALLOWED":"NO","CODE_SIGNING_IDENTITY":"-","CODE_SIGNING_REQUIRED":"NO","CONFIGURATION_BUILD_DIR":"$(BUILD_DIR)/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME)/DKPhotoGallery","EXPANDED_CODE_SIGN_IDENTITY":"-","IBSC_MODULE":"DKPhotoGallery","INFOPLIST_FILE":"Target Support Files/DKPhotoGallery/ResourceBundle-DKPhotoGallery-DKPhotoGallery-Info.plist","IPHONEOS_DEPLOYMENT_TARGET":"9.0","ONLY_ACTIVE_ARCH":"NO","PRODUCT_NAME":"DKPhotoGallery","SDKROOT":"iphoneos","SKIP_INSTALL":"YES","TARGETED_DEVICE_FAMILY":"1,2","WRAPPER_EXTENSION":"bundle"},"guid":"bfdfe7dc352907fc980b868725387e9863d709d85955662eec26f230fb1a0156","name":"Debug"},{"baseConfigurationFileReference":"bfdfe7dc352907fc980b868725387e986051e77661008cd9b8c42c9db89a8f91","buildSettings":{"CLANG_ENABLE_OBJC_WEAK":"NO","CODE_SIGNING_ALLOWED":"NO","CODE_SIGNING_IDENTITY":"-","CODE_SIGNING_REQUIRED":"NO","CONFIGURATION_BUILD_DIR":"$(BUILD_DIR)/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME)/DKPhotoGallery","EXPANDED_CODE_SIGN_IDENTITY":"-","IBSC_MODULE":"DKPhotoGallery","INFOPLIST_FILE":"Target Support Files/DKPhotoGallery/ResourceBundle-DKPhotoGallery-DKPhotoGallery-Info.plist","IPHONEOS_DEPLOYMENT_TARGET":"9.0","PRODUCT_NAME":"DKPhotoGallery","SDKROOT":"iphoneos","SKIP_INSTALL":"YES","TARGETED_DEVICE_FAMILY":"1,2","VALIDATE_PRODUCT":"YES","WRAPPER_EXTENSION":"bundle"},"guid":"bfdfe7dc352907fc980b868725387e985360f3c81b6bc650f3d49f6d1754981b","name":"Profile"},{"baseConfigurationFileReference":"bfdfe7dc352907fc980b868725387e986051e77661008cd9b8c42c9db89a8f91","buildSettings":{"CODE_SIGNING_ALLOWED":"NO","CODE_SIGNING_IDENTITY":"-","CODE_SIGNING_REQUIRED":"NO","CONFIGURATION_BUILD_DIR":"$(BUILD_DIR)/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME)/DKPhotoGallery","EXPANDED_CODE_SIGN_IDENTITY":"-","IBSC_MODULE":"DKPhotoGallery","INFOPLIST_FILE":"Target Support Files/DKPhotoGallery/ResourceBundle-DKPhotoGallery-DKPhotoGallery-Info.plist","IPHONEOS_DEPLOYMENT_TARGET":"9.0","PRODUCT_NAME":"DKPhotoGallery","SDKROOT":"iphoneos","SKIP_INSTALL":"YES","TARGETED_DEVICE_FAMILY":"1,2","WRAPPER_EXTENSION":"bundle"},"guid":"bfdfe7dc352907fc980b868725387e98abe21851be7f38d4bb7f9d3e74c78ab2","name":"Release"}],"buildPhases":[{"buildFiles":[],"guid":"bfdfe7dc352907fc980b868725387e98c722650b97524f652cb60639ce3e52c9","type":"com.apple.buildphase.sources"},{"buildFiles":[],"guid":"bfdfe7dc352907fc980b868725387e9844830a8106b17c97462f17d37e937150","type":"com.apple.buildphase.frameworks"},{"buildFiles":[{"fileReference":"bfdfe7dc352907fc980b868725387e9803baa2fc67f8d76b2b108bf635be93dc","guid":"bfdfe7dc352907fc980b868725387e98077c18fd825071b5517de595c447b6b2"},{"fileReference":"bfdfe7dc352907fc980b868725387e982a3b28f4eed66179cc3316238b0b3ee7","guid":"bfdfe7dc352907fc980b868725387e98924a9936d45ac8728bedefa3385ebf7b"},{"fileReference":"bfdfe7dc352907fc980b868725387e98812489e746316b8b3716cadbcf8878f0","guid":"bfdfe7dc352907fc980b868725387e98980d2ae065915cef447e5eb3952dfcbc"},{"fileReference":"bfdfe7dc352907fc980b868725387e988c57c65d211d763f44ecd815974cdf8f","guid":"bfdfe7dc352907fc980b868725387e9837a850c83dc077bdbe1c2f5bbd492236"},{"fileReference":"bfdfe7dc352907fc980b868725387e98af5703700ee022e99305baf3e4656a2c","guid":"bfdfe7dc352907fc980b868725387e98a63f1bbe973de8ba31cac4f606f9613a"}],"guid":"bfdfe7dc352907fc980b868725387e9847dc59d7e12614b1f4c048158b210d96","type":"com.apple.buildphase.resources"}],"buildRules":[],"dependencies":[],"guid":"bfdfe7dc352907fc980b868725387e98d3f65728b12dd217475d1283ee417937","name":"DKPhotoGallery-DKPhotoGallery","productReference":{"guid":"bfdfe7dc352907fc980b868725387e9845db4417944723d8b91f4a6c67e94d3c","name":"DKPhotoGallery.bundle","type":"product"},"productTypeIdentifier":"com.apple.product-type.bundle","provisioningSourceData":[{"bundleIdentifierFromInfoPlist":"${PRODUCT_BUNDLE_IDENTIFIER}","configurationName":"Debug","provisioningStyle":0},{"bundleIdentifierFromInfoPlist":"${PRODUCT_BUNDLE_IDENTIFIER}","configurationName":"Profile","provisioningStyle":0},{"bundleIdentifierFromInfoPlist":"${PRODUCT_BUNDLE_IDENTIFIER}","configurationName":"Release","provisioningStyle":0}],"type":"standard"} \ No newline at end of file diff --git a/mih_ui/android/build/ios/XCBuildData/PIFCache/target/TARGET@v11_hash=dbb0219d17436c670986b94b7945fa23-json b/mih_ui/android/build/ios/XCBuildData/PIFCache/target/TARGET@v11_hash=dbb0219d17436c670986b94b7945fa23-json new file mode 100644 index 00000000..0754a499 --- /dev/null +++ b/mih_ui/android/build/ios/XCBuildData/PIFCache/target/TARGET@v11_hash=dbb0219d17436c670986b94b7945fa23-json @@ -0,0 +1 @@ +{"buildConfigurations":[{"baseConfigurationFileReference":"bfdfe7dc352907fc980b868725387e984615091c333da42672bfd26263153e2c","buildSettings":{"CLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER":"NO","CODE_SIGN_IDENTITY[sdk=appletvos*]":"","CODE_SIGN_IDENTITY[sdk=iphoneos*]":"","CODE_SIGN_IDENTITY[sdk=watchos*]":"","CURRENT_PROJECT_VERSION":"1","DYLIB_COMPATIBILITY_VERSION":"1","DYLIB_CURRENT_VERSION":"1","DYLIB_INSTALL_NAME_BASE":"@rpath","ENABLE_BITCODE":"NO","ENABLE_MODULE_VERIFIER":"NO","ENABLE_USER_SCRIPT_SANDBOXING":"NO","EXCLUDED_ARCHS[sdk=iphoneos*]":"$(inherited) armv7","EXCLUDED_ARCHS[sdk=iphonesimulator*]":"$(inherited) i386","FRAMEWORK_SEARCH_PATHS[sdk=iphoneos*]":"\"/Users/yaso_meth/Git/flutter/bin/cache/artifacts/engine/ios/Flutter.xcframework/ios-arm64\" $(inherited)","FRAMEWORK_SEARCH_PATHS[sdk=iphonesimulator*]":"\"/Users/yaso_meth/Git/flutter/bin/cache/artifacts/engine/ios/Flutter.xcframework/ios-arm64_x86_64-simulator\" $(inherited)","GCC_PREFIX_HEADER":"Target Support Files/flutter_native_splash/flutter_native_splash-prefix.pch","GENERATE_INFOPLIST_FILE":"NO","INFOPLIST_FILE":"Target Support Files/flutter_native_splash/flutter_native_splash-Info.plist","INSTALL_PATH":"$(LOCAL_LIBRARY_DIR)/Frameworks","LD_RUNPATH_SEARCH_PATHS":"$(inherited) @executable_path/Frameworks @loader_path/Frameworks","MODULEMAP_FILE":"Target Support Files/flutter_native_splash/flutter_native_splash.modulemap","ONLY_ACTIVE_ARCH":"NO","OTHER_LDFLAGS":"$(inherited) -framework Flutter","PRODUCT_MODULE_NAME":"flutter_native_splash","PRODUCT_NAME":"flutter_native_splash","SDKROOT":"iphoneos","SKIP_INSTALL":"YES","SWIFT_ACTIVE_COMPILATION_CONDITIONS":"$(inherited) ","SWIFT_INSTALL_OBJC_HEADER":"YES","SWIFT_VERSION":"5.0","TARGETED_DEVICE_FAMILY":"1,2","VALID_ARCHS[sdk=iphonesimulator*]":"$(ARCHS_STANDARD)","VERSIONING_SYSTEM":"apple-generic","VERSION_INFO_PREFIX":""},"guid":"bfdfe7dc352907fc980b868725387e98542d46a1c227dffcd81ba310fa86fe75","name":"Debug"},{"baseConfigurationFileReference":"bfdfe7dc352907fc980b868725387e98eccf4b0b561ffd1dcb573fa88f797247","buildSettings":{"CLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER":"NO","CODE_SIGN_IDENTITY[sdk=appletvos*]":"","CODE_SIGN_IDENTITY[sdk=iphoneos*]":"","CODE_SIGN_IDENTITY[sdk=watchos*]":"","CURRENT_PROJECT_VERSION":"1","DYLIB_COMPATIBILITY_VERSION":"1","DYLIB_CURRENT_VERSION":"1","DYLIB_INSTALL_NAME_BASE":"@rpath","ENABLE_BITCODE":"NO","ENABLE_MODULE_VERIFIER":"NO","ENABLE_USER_SCRIPT_SANDBOXING":"NO","EXCLUDED_ARCHS[sdk=iphoneos*]":"$(inherited) armv7","EXCLUDED_ARCHS[sdk=iphonesimulator*]":"$(inherited) i386","FRAMEWORK_SEARCH_PATHS[sdk=iphoneos*]":"\"/Users/yaso_meth/Git/flutter/bin/cache/artifacts/engine/ios-release/Flutter.xcframework/ios-arm64\" $(inherited)","FRAMEWORK_SEARCH_PATHS[sdk=iphonesimulator*]":"\"/Users/yaso_meth/Git/flutter/bin/cache/artifacts/engine/ios-release/Flutter.xcframework/ios-arm64_x86_64-simulator\" $(inherited)","GCC_PREFIX_HEADER":"Target Support Files/flutter_native_splash/flutter_native_splash-prefix.pch","GENERATE_INFOPLIST_FILE":"NO","INFOPLIST_FILE":"Target Support Files/flutter_native_splash/flutter_native_splash-Info.plist","INSTALL_PATH":"$(LOCAL_LIBRARY_DIR)/Frameworks","LD_RUNPATH_SEARCH_PATHS":"$(inherited) @executable_path/Frameworks @loader_path/Frameworks","MODULEMAP_FILE":"Target Support Files/flutter_native_splash/flutter_native_splash.modulemap","OTHER_LDFLAGS":"$(inherited) -framework Flutter","PRODUCT_MODULE_NAME":"flutter_native_splash","PRODUCT_NAME":"flutter_native_splash","SDKROOT":"iphoneos","SKIP_INSTALL":"YES","SWIFT_ACTIVE_COMPILATION_CONDITIONS":"$(inherited) ","SWIFT_INSTALL_OBJC_HEADER":"YES","SWIFT_VERSION":"5.0","TARGETED_DEVICE_FAMILY":"1,2","VALIDATE_PRODUCT":"YES","VALID_ARCHS[sdk=iphonesimulator*]":"$(ARCHS_STANDARD)","VERSIONING_SYSTEM":"apple-generic","VERSION_INFO_PREFIX":""},"guid":"bfdfe7dc352907fc980b868725387e9823f4254e0770592b8f46fb4fbb025206","name":"Profile"},{"baseConfigurationFileReference":"bfdfe7dc352907fc980b868725387e98eccf4b0b561ffd1dcb573fa88f797247","buildSettings":{"CLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER":"NO","CODE_SIGN_IDENTITY[sdk=appletvos*]":"","CODE_SIGN_IDENTITY[sdk=iphoneos*]":"","CODE_SIGN_IDENTITY[sdk=watchos*]":"","CURRENT_PROJECT_VERSION":"1","DYLIB_COMPATIBILITY_VERSION":"1","DYLIB_CURRENT_VERSION":"1","DYLIB_INSTALL_NAME_BASE":"@rpath","ENABLE_BITCODE":"NO","ENABLE_MODULE_VERIFIER":"NO","ENABLE_USER_SCRIPT_SANDBOXING":"NO","EXCLUDED_ARCHS[sdk=iphoneos*]":"$(inherited) armv7","EXCLUDED_ARCHS[sdk=iphonesimulator*]":"$(inherited) i386","FRAMEWORK_SEARCH_PATHS[sdk=iphoneos*]":"\"/Users/yaso_meth/Git/flutter/bin/cache/artifacts/engine/ios-release/Flutter.xcframework/ios-arm64\" $(inherited)","FRAMEWORK_SEARCH_PATHS[sdk=iphonesimulator*]":"\"/Users/yaso_meth/Git/flutter/bin/cache/artifacts/engine/ios-release/Flutter.xcframework/ios-arm64_x86_64-simulator\" $(inherited)","GCC_PREFIX_HEADER":"Target Support Files/flutter_native_splash/flutter_native_splash-prefix.pch","GENERATE_INFOPLIST_FILE":"NO","INFOPLIST_FILE":"Target Support Files/flutter_native_splash/flutter_native_splash-Info.plist","INSTALL_PATH":"$(LOCAL_LIBRARY_DIR)/Frameworks","LD_RUNPATH_SEARCH_PATHS":"$(inherited) @executable_path/Frameworks @loader_path/Frameworks","MODULEMAP_FILE":"Target Support Files/flutter_native_splash/flutter_native_splash.modulemap","OTHER_LDFLAGS":"$(inherited) -framework Flutter","PRODUCT_MODULE_NAME":"flutter_native_splash","PRODUCT_NAME":"flutter_native_splash","SDKROOT":"iphoneos","SKIP_INSTALL":"YES","SWIFT_ACTIVE_COMPILATION_CONDITIONS":"$(inherited) ","SWIFT_INSTALL_OBJC_HEADER":"YES","SWIFT_VERSION":"5.0","TARGETED_DEVICE_FAMILY":"1,2","VALIDATE_PRODUCT":"YES","VALID_ARCHS[sdk=iphonesimulator*]":"$(ARCHS_STANDARD)","VERSIONING_SYSTEM":"apple-generic","VERSION_INFO_PREFIX":""},"guid":"bfdfe7dc352907fc980b868725387e98f07bc7dbdbe34af75a03f9c11cf11c50","name":"Release"}],"buildPhases":[{"buildFiles":[{"fileReference":"bfdfe7dc352907fc980b868725387e98c086e8c7ed209047f486aa181b9d15d3","guid":"bfdfe7dc352907fc980b868725387e98ae83221afb93616a2b42114c6693e756","headerVisibility":"public"},{"fileReference":"bfdfe7dc352907fc980b868725387e98f50f5cea49c7a2be171197f72c2cb1ad","guid":"bfdfe7dc352907fc980b868725387e9841077393e2a0ff8edfeb119426569035","headerVisibility":"public"}],"guid":"bfdfe7dc352907fc980b868725387e985ed144159bcebbb64c754bdbdaa159a2","type":"com.apple.buildphase.headers"},{"buildFiles":[{"fileReference":"bfdfe7dc352907fc980b868725387e98c166ee5988b20398d317d310c58eb4b1","guid":"bfdfe7dc352907fc980b868725387e9834623d0f10c2ebfd5dcdcd7163d68abd"},{"fileReference":"bfdfe7dc352907fc980b868725387e98ed4c5781f08ac474801af38d03dae69c","guid":"bfdfe7dc352907fc980b868725387e98356c380165f16742a800b27751b12dce"}],"guid":"bfdfe7dc352907fc980b868725387e98bf343bcb5da439175c7ff2a128f7a39c","type":"com.apple.buildphase.sources"},{"buildFiles":[{"fileReference":"bfdfe7dc352907fc980b868725387e98b14af7c49882340ad551cb13b0a1e06d","guid":"bfdfe7dc352907fc980b868725387e9893a4ed39f6f94e150fa3721525891095"}],"guid":"bfdfe7dc352907fc980b868725387e9880eaa46668f967ac50f6577cb9b26348","type":"com.apple.buildphase.frameworks"},{"buildFiles":[{"guid":"bfdfe7dc352907fc980b868725387e9831795ef1e63d65d4fa054e4bc1dd66a5","targetReference":"bfdfe7dc352907fc980b868725387e9861233620df33996cccf430ed75b4a999"}],"guid":"bfdfe7dc352907fc980b868725387e987745cc5b5a4b3b50ae3fbbec4c2f9f2d","type":"com.apple.buildphase.resources"}],"buildRules":[],"dependencies":[{"guid":"bfdfe7dc352907fc980b868725387e989da425bb6d6d5d8dbb95e4afffb82217","name":"Flutter"},{"guid":"bfdfe7dc352907fc980b868725387e9861233620df33996cccf430ed75b4a999","name":"flutter_native_splash-flutter_native_splash_privacy"}],"guid":"bfdfe7dc352907fc980b868725387e9822a19f6c224a402387a233be75a6e268","name":"flutter_native_splash","predominantSourceCodeLanguage":"Xcode.SourceCodeLanguage.Objective-C","productReference":{"guid":"bfdfe7dc352907fc980b868725387e98c62d527a87861e4e9c2265bba2aed9bb","name":"flutter_native_splash.framework","type":"product"},"productTypeIdentifier":"com.apple.product-type.framework","provisioningSourceData":[{"bundleIdentifierFromInfoPlist":"${PRODUCT_BUNDLE_IDENTIFIER}","configurationName":"Debug","provisioningStyle":1},{"bundleIdentifierFromInfoPlist":"${PRODUCT_BUNDLE_IDENTIFIER}","configurationName":"Profile","provisioningStyle":1},{"bundleIdentifierFromInfoPlist":"${PRODUCT_BUNDLE_IDENTIFIER}","configurationName":"Release","provisioningStyle":1}],"type":"standard"} \ No newline at end of file diff --git a/mih_ui/android/build/ios/XCBuildData/PIFCache/target/TARGET@v11_hash=ddbefab0336a5b7a75af7835b2eb8ae3-json b/mih_ui/android/build/ios/XCBuildData/PIFCache/target/TARGET@v11_hash=ddbefab0336a5b7a75af7835b2eb8ae3-json new file mode 100644 index 00000000..9b449a99 --- /dev/null +++ b/mih_ui/android/build/ios/XCBuildData/PIFCache/target/TARGET@v11_hash=ddbefab0336a5b7a75af7835b2eb8ae3-json @@ -0,0 +1 @@ +{"buildConfigurations":[{"baseConfigurationFileReference":"bfdfe7dc352907fc980b868725387e98c5ea3636852338c982e52209ddd197d0","buildSettings":{"CLANG_ENABLE_OBJC_WEAK":"NO","CLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER":"NO","CODE_SIGN_IDENTITY[sdk=appletvos*]":"","CODE_SIGN_IDENTITY[sdk=iphoneos*]":"","CODE_SIGN_IDENTITY[sdk=watchos*]":"","CURRENT_PROJECT_VERSION":"1","DYLIB_COMPATIBILITY_VERSION":"1","DYLIB_CURRENT_VERSION":"1","DYLIB_INSTALL_NAME_BASE":"@rpath","ENABLE_BITCODE":"NO","ENABLE_MODULE_VERIFIER":"NO","ENABLE_USER_SCRIPT_SANDBOXING":"NO","EXCLUDED_ARCHS[sdk=iphoneos*]":"$(inherited) armv7","EXCLUDED_ARCHS[sdk=iphonesimulator*]":"$(inherited) i386","FRAMEWORK_SEARCH_PATHS[sdk=iphoneos*]":"\"/Users/yaso_meth/Git/flutter/bin/cache/artifacts/engine/ios/Flutter.xcframework/ios-arm64\" $(inherited)","FRAMEWORK_SEARCH_PATHS[sdk=iphonesimulator*]":"\"/Users/yaso_meth/Git/flutter/bin/cache/artifacts/engine/ios/Flutter.xcframework/ios-arm64_x86_64-simulator\" $(inherited)","GCC_PREFIX_HEADER":"Target Support Files/device_info_plus/device_info_plus-prefix.pch","GENERATE_INFOPLIST_FILE":"NO","INFOPLIST_FILE":"Target Support Files/device_info_plus/device_info_plus-Info.plist","INSTALL_PATH":"$(LOCAL_LIBRARY_DIR)/Frameworks","LD_RUNPATH_SEARCH_PATHS":"$(inherited) @executable_path/Frameworks @loader_path/Frameworks","MODULEMAP_FILE":"Target Support Files/device_info_plus/device_info_plus.modulemap","ONLY_ACTIVE_ARCH":"NO","OTHER_LDFLAGS":"$(inherited) -framework Flutter","PRODUCT_MODULE_NAME":"device_info_plus","PRODUCT_NAME":"device_info_plus","SDKROOT":"iphoneos","SKIP_INSTALL":"YES","SWIFT_ACTIVE_COMPILATION_CONDITIONS":"$(inherited) ","SWIFT_INSTALL_OBJC_HEADER":"YES","SWIFT_VERSION":"5.0","TARGETED_DEVICE_FAMILY":"1,2","VALID_ARCHS[sdk=iphonesimulator*]":"$(ARCHS_STANDARD)","VERSIONING_SYSTEM":"apple-generic","VERSION_INFO_PREFIX":""},"guid":"bfdfe7dc352907fc980b868725387e9816a8336f082ec9a3669234f3df3ef306","name":"Debug"},{"baseConfigurationFileReference":"bfdfe7dc352907fc980b868725387e98c321042b295c1853a19a7fc9918a7454","buildSettings":{"CLANG_ENABLE_OBJC_WEAK":"NO","CLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER":"NO","CODE_SIGN_IDENTITY[sdk=appletvos*]":"","CODE_SIGN_IDENTITY[sdk=iphoneos*]":"","CODE_SIGN_IDENTITY[sdk=watchos*]":"","CURRENT_PROJECT_VERSION":"1","DYLIB_COMPATIBILITY_VERSION":"1","DYLIB_CURRENT_VERSION":"1","DYLIB_INSTALL_NAME_BASE":"@rpath","ENABLE_BITCODE":"NO","ENABLE_MODULE_VERIFIER":"NO","ENABLE_USER_SCRIPT_SANDBOXING":"NO","EXCLUDED_ARCHS[sdk=iphoneos*]":"$(inherited) armv7","EXCLUDED_ARCHS[sdk=iphonesimulator*]":"$(inherited) i386","FRAMEWORK_SEARCH_PATHS[sdk=iphoneos*]":"\"/Users/yaso_meth/Git/flutter/bin/cache/artifacts/engine/ios-release/Flutter.xcframework/ios-arm64\" $(inherited)","FRAMEWORK_SEARCH_PATHS[sdk=iphonesimulator*]":"\"/Users/yaso_meth/Git/flutter/bin/cache/artifacts/engine/ios-release/Flutter.xcframework/ios-arm64_x86_64-simulator\" $(inherited)","GCC_PREFIX_HEADER":"Target Support Files/device_info_plus/device_info_plus-prefix.pch","GENERATE_INFOPLIST_FILE":"NO","INFOPLIST_FILE":"Target Support Files/device_info_plus/device_info_plus-Info.plist","INSTALL_PATH":"$(LOCAL_LIBRARY_DIR)/Frameworks","LD_RUNPATH_SEARCH_PATHS":"$(inherited) @executable_path/Frameworks @loader_path/Frameworks","MODULEMAP_FILE":"Target Support Files/device_info_plus/device_info_plus.modulemap","OTHER_LDFLAGS":"$(inherited) -framework Flutter","PRODUCT_MODULE_NAME":"device_info_plus","PRODUCT_NAME":"device_info_plus","SDKROOT":"iphoneos","SKIP_INSTALL":"YES","SWIFT_ACTIVE_COMPILATION_CONDITIONS":"$(inherited) ","SWIFT_INSTALL_OBJC_HEADER":"YES","SWIFT_VERSION":"5.0","TARGETED_DEVICE_FAMILY":"1,2","VALIDATE_PRODUCT":"YES","VALID_ARCHS[sdk=iphonesimulator*]":"$(ARCHS_STANDARD)","VERSIONING_SYSTEM":"apple-generic","VERSION_INFO_PREFIX":""},"guid":"bfdfe7dc352907fc980b868725387e98da658f6e11c8f9a5b0898bfe9485a0c1","name":"Profile"},{"baseConfigurationFileReference":"bfdfe7dc352907fc980b868725387e98c321042b295c1853a19a7fc9918a7454","buildSettings":{"CLANG_ENABLE_OBJC_WEAK":"NO","CLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER":"NO","CODE_SIGN_IDENTITY[sdk=appletvos*]":"","CODE_SIGN_IDENTITY[sdk=iphoneos*]":"","CODE_SIGN_IDENTITY[sdk=watchos*]":"","CURRENT_PROJECT_VERSION":"1","DYLIB_COMPATIBILITY_VERSION":"1","DYLIB_CURRENT_VERSION":"1","DYLIB_INSTALL_NAME_BASE":"@rpath","ENABLE_BITCODE":"NO","ENABLE_MODULE_VERIFIER":"NO","ENABLE_USER_SCRIPT_SANDBOXING":"NO","EXCLUDED_ARCHS[sdk=iphoneos*]":"$(inherited) armv7","EXCLUDED_ARCHS[sdk=iphonesimulator*]":"$(inherited) i386","FRAMEWORK_SEARCH_PATHS[sdk=iphoneos*]":"\"/Users/yaso_meth/Git/flutter/bin/cache/artifacts/engine/ios-release/Flutter.xcframework/ios-arm64\" $(inherited)","FRAMEWORK_SEARCH_PATHS[sdk=iphonesimulator*]":"\"/Users/yaso_meth/Git/flutter/bin/cache/artifacts/engine/ios-release/Flutter.xcframework/ios-arm64_x86_64-simulator\" $(inherited)","GCC_PREFIX_HEADER":"Target Support Files/device_info_plus/device_info_plus-prefix.pch","GENERATE_INFOPLIST_FILE":"NO","INFOPLIST_FILE":"Target Support Files/device_info_plus/device_info_plus-Info.plist","INSTALL_PATH":"$(LOCAL_LIBRARY_DIR)/Frameworks","LD_RUNPATH_SEARCH_PATHS":"$(inherited) @executable_path/Frameworks @loader_path/Frameworks","MODULEMAP_FILE":"Target Support Files/device_info_plus/device_info_plus.modulemap","OTHER_LDFLAGS":"$(inherited) -framework Flutter","PRODUCT_MODULE_NAME":"device_info_plus","PRODUCT_NAME":"device_info_plus","SDKROOT":"iphoneos","SKIP_INSTALL":"YES","SWIFT_ACTIVE_COMPILATION_CONDITIONS":"$(inherited) ","SWIFT_INSTALL_OBJC_HEADER":"YES","SWIFT_VERSION":"5.0","TARGETED_DEVICE_FAMILY":"1,2","VALIDATE_PRODUCT":"YES","VALID_ARCHS[sdk=iphonesimulator*]":"$(ARCHS_STANDARD)","VERSIONING_SYSTEM":"apple-generic","VERSION_INFO_PREFIX":""},"guid":"bfdfe7dc352907fc980b868725387e98c8a212801b2d5d63b36bf1f67475af99","name":"Release"}],"buildPhases":[{"buildFiles":[{"fileReference":"bfdfe7dc352907fc980b868725387e9835406ea787e507a99238a6afb0ce83bf","guid":"bfdfe7dc352907fc980b868725387e98e22287c8a8e4e993d61ec55644f61c22","headerVisibility":"public"},{"fileReference":"bfdfe7dc352907fc980b868725387e98bd45822b13e3ce1eed9c6622596d0bb0","guid":"bfdfe7dc352907fc980b868725387e987f21151cf9c1c415a4660d42766a0194","headerVisibility":"public"},{"fileReference":"bfdfe7dc352907fc980b868725387e98c2d16edfd8321a1d2a6421b3cbc221c7","guid":"bfdfe7dc352907fc980b868725387e98c28ac01c14bf242ff799731ddfee2d48","headerVisibility":"public"}],"guid":"bfdfe7dc352907fc980b868725387e9840d98c3753b2d39f106825c4fdf513ae","type":"com.apple.buildphase.headers"},{"buildFiles":[{"fileReference":"bfdfe7dc352907fc980b868725387e9807f6b982d3ceb175b963a37c743705ca","guid":"bfdfe7dc352907fc980b868725387e98453d8b54a590feea4df4d6cb1f93d63d"},{"fileReference":"bfdfe7dc352907fc980b868725387e98a14950a917a0df000272111b3af00e58","guid":"bfdfe7dc352907fc980b868725387e985371a20400ba6d5877eaa27a28092ddb"},{"fileReference":"bfdfe7dc352907fc980b868725387e98f1edbc3ed8b2196eaa0d7f969ebdde47","guid":"bfdfe7dc352907fc980b868725387e988c13d8ad191e7451e598b02aa34ee7b3"}],"guid":"bfdfe7dc352907fc980b868725387e985bdcfdad3c1bf6d3fac02e0e2d77829f","type":"com.apple.buildphase.sources"},{"buildFiles":[{"fileReference":"bfdfe7dc352907fc980b868725387e98b14af7c49882340ad551cb13b0a1e06d","guid":"bfdfe7dc352907fc980b868725387e98b8f30e51613d62290c400ac5362c0882"}],"guid":"bfdfe7dc352907fc980b868725387e981367a14a577154ba59aeeab53f667469","type":"com.apple.buildphase.frameworks"},{"buildFiles":[{"guid":"bfdfe7dc352907fc980b868725387e98c53380dbd9f7caae5cbdb4ca2b1391f5","targetReference":"bfdfe7dc352907fc980b868725387e98583f48d08e567205bb589ccf43c23e63"}],"guid":"bfdfe7dc352907fc980b868725387e984b38ce846840f6ccefd735c9e1b71a5b","type":"com.apple.buildphase.resources"}],"buildRules":[],"dependencies":[{"guid":"bfdfe7dc352907fc980b868725387e989da425bb6d6d5d8dbb95e4afffb82217","name":"Flutter"},{"guid":"bfdfe7dc352907fc980b868725387e98583f48d08e567205bb589ccf43c23e63","name":"device_info_plus-device_info_plus_privacy"}],"guid":"bfdfe7dc352907fc980b868725387e98d41ce0bf2141365ff0288286787936d9","name":"device_info_plus","predominantSourceCodeLanguage":"Xcode.SourceCodeLanguage.Objective-C","productReference":{"guid":"bfdfe7dc352907fc980b868725387e9892a13085952e1452517bc40d45a802eb","name":"device_info_plus.framework","type":"product"},"productTypeIdentifier":"com.apple.product-type.framework","provisioningSourceData":[{"bundleIdentifierFromInfoPlist":"${PRODUCT_BUNDLE_IDENTIFIER}","configurationName":"Debug","provisioningStyle":1},{"bundleIdentifierFromInfoPlist":"${PRODUCT_BUNDLE_IDENTIFIER}","configurationName":"Profile","provisioningStyle":1},{"bundleIdentifierFromInfoPlist":"${PRODUCT_BUNDLE_IDENTIFIER}","configurationName":"Release","provisioningStyle":1}],"type":"standard"} \ No newline at end of file diff --git a/mih_ui/android/build/ios/XCBuildData/PIFCache/target/TARGET@v11_hash=de9cdf72fffe1fdedbf989540b2a67e3-json b/mih_ui/android/build/ios/XCBuildData/PIFCache/target/TARGET@v11_hash=de9cdf72fffe1fdedbf989540b2a67e3-json new file mode 100644 index 00000000..0aae7e43 --- /dev/null +++ b/mih_ui/android/build/ios/XCBuildData/PIFCache/target/TARGET@v11_hash=de9cdf72fffe1fdedbf989540b2a67e3-json @@ -0,0 +1 @@ +{"buildConfigurations":[{"baseConfigurationFileReference":"bfdfe7dc352907fc980b868725387e98e9790273c34cf01756c3ac2cbd541c6d","buildSettings":{"CODE_SIGNING_ALLOWED":"NO","CODE_SIGNING_IDENTITY":"-","CODE_SIGNING_REQUIRED":"NO","CONFIGURATION_BUILD_DIR":"$(BUILD_DIR)/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME)/app_settings","EXPANDED_CODE_SIGN_IDENTITY":"-","IBSC_MODULE":"app_settings","INFOPLIST_FILE":"Target Support Files/app_settings/ResourceBundle-app_settings_privacy-app_settings-Info.plist","IPHONEOS_DEPLOYMENT_TARGET":"11.0","ONLY_ACTIVE_ARCH":"NO","PRODUCT_NAME":"app_settings_privacy","SDKROOT":"iphoneos","SKIP_INSTALL":"YES","TARGETED_DEVICE_FAMILY":"1,2","WRAPPER_EXTENSION":"bundle"},"guid":"bfdfe7dc352907fc980b868725387e988399767a3d3dd1838558c42b7460d9f1","name":"Debug"},{"baseConfigurationFileReference":"bfdfe7dc352907fc980b868725387e981916adc978ad471261fb8f5e1e97ed3a","buildSettings":{"CLANG_ENABLE_OBJC_WEAK":"NO","CODE_SIGNING_ALLOWED":"NO","CODE_SIGNING_IDENTITY":"-","CODE_SIGNING_REQUIRED":"NO","CONFIGURATION_BUILD_DIR":"$(BUILD_DIR)/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME)/app_settings","EXPANDED_CODE_SIGN_IDENTITY":"-","IBSC_MODULE":"app_settings","INFOPLIST_FILE":"Target Support Files/app_settings/ResourceBundle-app_settings_privacy-app_settings-Info.plist","IPHONEOS_DEPLOYMENT_TARGET":"11.0","PRODUCT_NAME":"app_settings_privacy","SDKROOT":"iphoneos","SKIP_INSTALL":"YES","TARGETED_DEVICE_FAMILY":"1,2","VALIDATE_PRODUCT":"YES","WRAPPER_EXTENSION":"bundle"},"guid":"bfdfe7dc352907fc980b868725387e98ddc284e322ccf885e5d3affffcb1418f","name":"Profile"},{"baseConfigurationFileReference":"bfdfe7dc352907fc980b868725387e981916adc978ad471261fb8f5e1e97ed3a","buildSettings":{"CODE_SIGNING_ALLOWED":"NO","CODE_SIGNING_IDENTITY":"-","CODE_SIGNING_REQUIRED":"NO","CONFIGURATION_BUILD_DIR":"$(BUILD_DIR)/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME)/app_settings","EXPANDED_CODE_SIGN_IDENTITY":"-","IBSC_MODULE":"app_settings","INFOPLIST_FILE":"Target Support Files/app_settings/ResourceBundle-app_settings_privacy-app_settings-Info.plist","IPHONEOS_DEPLOYMENT_TARGET":"11.0","PRODUCT_NAME":"app_settings_privacy","SDKROOT":"iphoneos","SKIP_INSTALL":"YES","TARGETED_DEVICE_FAMILY":"1,2","WRAPPER_EXTENSION":"bundle"},"guid":"bfdfe7dc352907fc980b868725387e98ff8337412b741d81d04ac48ac07e5728","name":"Release"}],"buildPhases":[{"buildFiles":[],"guid":"bfdfe7dc352907fc980b868725387e98abfdf521994743941901da646f4d1fb0","type":"com.apple.buildphase.sources"},{"buildFiles":[],"guid":"bfdfe7dc352907fc980b868725387e98ca2076c2c04db10da445aa6e73378372","type":"com.apple.buildphase.frameworks"},{"buildFiles":[{"fileReference":"bfdfe7dc352907fc980b868725387e98a3dc3576e1e38afd167d6415d986fe47","guid":"bfdfe7dc352907fc980b868725387e98361ebd4004ebbba5ed5ae28397b8e9ee"}],"guid":"bfdfe7dc352907fc980b868725387e98bb0e6b4ff0d230190d958e7dfca2b78c","type":"com.apple.buildphase.resources"}],"buildRules":[],"dependencies":[],"guid":"bfdfe7dc352907fc980b868725387e98cf3ab2030ed25c0947bdaa95034b1488","name":"app_settings-app_settings_privacy","productReference":{"guid":"bfdfe7dc352907fc980b868725387e98e37e29d3db6e76df1c3263033c15095e","name":"app_settings_privacy.bundle","type":"product"},"productTypeIdentifier":"com.apple.product-type.bundle","provisioningSourceData":[{"bundleIdentifierFromInfoPlist":"${PRODUCT_BUNDLE_IDENTIFIER}","configurationName":"Debug","provisioningStyle":0},{"bundleIdentifierFromInfoPlist":"${PRODUCT_BUNDLE_IDENTIFIER}","configurationName":"Profile","provisioningStyle":0},{"bundleIdentifierFromInfoPlist":"${PRODUCT_BUNDLE_IDENTIFIER}","configurationName":"Release","provisioningStyle":0}],"type":"standard"} \ No newline at end of file diff --git a/mih_ui/android/build/ios/XCBuildData/PIFCache/target/TARGET@v11_hash=dfe05d0a1a29529d21d126a4eec3834c-json b/mih_ui/android/build/ios/XCBuildData/PIFCache/target/TARGET@v11_hash=dfe05d0a1a29529d21d126a4eec3834c-json new file mode 100644 index 00000000..fa956c97 --- /dev/null +++ b/mih_ui/android/build/ios/XCBuildData/PIFCache/target/TARGET@v11_hash=dfe05d0a1a29529d21d126a4eec3834c-json @@ -0,0 +1 @@ +{"buildConfigurations":[{"baseConfigurationFileReference":"bfdfe7dc352907fc980b868725387e981ea619c6c09d50e42998ac2381b017c9","buildSettings":{"CODE_SIGNING_ALLOWED":"NO","CODE_SIGNING_IDENTITY":"-","CODE_SIGNING_REQUIRED":"NO","CONFIGURATION_BUILD_DIR":"$(BUILD_DIR)/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME)/shared_preferences_foundation","EXPANDED_CODE_SIGN_IDENTITY":"-","IBSC_MODULE":"shared_preferences_foundation","INFOPLIST_FILE":"Target Support Files/shared_preferences_foundation/ResourceBundle-shared_preferences_foundation_privacy-shared_preferences_foundation-Info.plist","IPHONEOS_DEPLOYMENT_TARGET":"12.0","ONLY_ACTIVE_ARCH":"NO","PRODUCT_NAME":"shared_preferences_foundation_privacy","SDKROOT":"iphoneos","SKIP_INSTALL":"YES","TARGETED_DEVICE_FAMILY":"1,2","WRAPPER_EXTENSION":"bundle"},"guid":"bfdfe7dc352907fc980b868725387e9801a7d33f842ed94eea034969d03bdc43","name":"Debug"},{"baseConfigurationFileReference":"bfdfe7dc352907fc980b868725387e988abaddbc7dac244a9dd3a827969bb097","buildSettings":{"CLANG_ENABLE_OBJC_WEAK":"NO","CODE_SIGNING_ALLOWED":"NO","CODE_SIGNING_IDENTITY":"-","CODE_SIGNING_REQUIRED":"NO","CONFIGURATION_BUILD_DIR":"$(BUILD_DIR)/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME)/shared_preferences_foundation","EXPANDED_CODE_SIGN_IDENTITY":"-","IBSC_MODULE":"shared_preferences_foundation","INFOPLIST_FILE":"Target Support Files/shared_preferences_foundation/ResourceBundle-shared_preferences_foundation_privacy-shared_preferences_foundation-Info.plist","IPHONEOS_DEPLOYMENT_TARGET":"12.0","PRODUCT_NAME":"shared_preferences_foundation_privacy","SDKROOT":"iphoneos","SKIP_INSTALL":"YES","TARGETED_DEVICE_FAMILY":"1,2","VALIDATE_PRODUCT":"YES","WRAPPER_EXTENSION":"bundle"},"guid":"bfdfe7dc352907fc980b868725387e983ce11dbc6e5ddc5549f3ca37ef707d53","name":"Profile"},{"baseConfigurationFileReference":"bfdfe7dc352907fc980b868725387e988abaddbc7dac244a9dd3a827969bb097","buildSettings":{"CODE_SIGNING_ALLOWED":"NO","CODE_SIGNING_IDENTITY":"-","CODE_SIGNING_REQUIRED":"NO","CONFIGURATION_BUILD_DIR":"$(BUILD_DIR)/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME)/shared_preferences_foundation","EXPANDED_CODE_SIGN_IDENTITY":"-","IBSC_MODULE":"shared_preferences_foundation","INFOPLIST_FILE":"Target Support Files/shared_preferences_foundation/ResourceBundle-shared_preferences_foundation_privacy-shared_preferences_foundation-Info.plist","IPHONEOS_DEPLOYMENT_TARGET":"12.0","PRODUCT_NAME":"shared_preferences_foundation_privacy","SDKROOT":"iphoneos","SKIP_INSTALL":"YES","TARGETED_DEVICE_FAMILY":"1,2","WRAPPER_EXTENSION":"bundle"},"guid":"bfdfe7dc352907fc980b868725387e98053a99e813142171ef05fbfd349bbfca","name":"Release"}],"buildPhases":[{"buildFiles":[],"guid":"bfdfe7dc352907fc980b868725387e982856acfc533f1b54203f3d7825e4e141","type":"com.apple.buildphase.sources"},{"buildFiles":[],"guid":"bfdfe7dc352907fc980b868725387e98514cb0dec1540eecbf00396fffae81ce","type":"com.apple.buildphase.frameworks"},{"buildFiles":[{"fileReference":"bfdfe7dc352907fc980b868725387e98251f6f0c0dfa900ccd058f8d5f09e39b","guid":"bfdfe7dc352907fc980b868725387e987beae696e16cd3af4ed9013a0309dd3e"}],"guid":"bfdfe7dc352907fc980b868725387e98d6ff0b32981e31400a2921efd0321163","type":"com.apple.buildphase.resources"}],"buildRules":[],"dependencies":[],"guid":"bfdfe7dc352907fc980b868725387e98e0be3b0d5ad56f1985578b1f97431765","name":"shared_preferences_foundation-shared_preferences_foundation_privacy","productReference":{"guid":"bfdfe7dc352907fc980b868725387e98ad625504a4c1e61077bbfd33bd1d1785","name":"shared_preferences_foundation_privacy.bundle","type":"product"},"productTypeIdentifier":"com.apple.product-type.bundle","provisioningSourceData":[{"bundleIdentifierFromInfoPlist":"${PRODUCT_BUNDLE_IDENTIFIER}","configurationName":"Debug","provisioningStyle":0},{"bundleIdentifierFromInfoPlist":"${PRODUCT_BUNDLE_IDENTIFIER}","configurationName":"Profile","provisioningStyle":0},{"bundleIdentifierFromInfoPlist":"${PRODUCT_BUNDLE_IDENTIFIER}","configurationName":"Release","provisioningStyle":0}],"type":"standard"} \ No newline at end of file diff --git a/mih_ui/android/build/ios/XCBuildData/PIFCache/target/TARGET@v11_hash=e04e9400c66a280cff3815703b38f084-json b/mih_ui/android/build/ios/XCBuildData/PIFCache/target/TARGET@v11_hash=e04e9400c66a280cff3815703b38f084-json new file mode 100644 index 00000000..d8244208 --- /dev/null +++ b/mih_ui/android/build/ios/XCBuildData/PIFCache/target/TARGET@v11_hash=e04e9400c66a280cff3815703b38f084-json @@ -0,0 +1 @@ +{"buildConfigurations":[{"baseConfigurationFileReference":"bfdfe7dc352907fc980b868725387e982b66b547d250357cf91d1817df7cb423","buildSettings":{"CLANG_ENABLE_OBJC_WEAK":"NO","CLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER":"NO","CODE_SIGN_IDENTITY[sdk=appletvos*]":"","CODE_SIGN_IDENTITY[sdk=iphoneos*]":"","CODE_SIGN_IDENTITY[sdk=watchos*]":"","CURRENT_PROJECT_VERSION":"1","DYLIB_COMPATIBILITY_VERSION":"1","DYLIB_CURRENT_VERSION":"1","DYLIB_INSTALL_NAME_BASE":"@rpath","ENABLE_BITCODE":"NO","ENABLE_MODULE_VERIFIER":"NO","ENABLE_USER_SCRIPT_SANDBOXING":"NO","EXCLUDED_ARCHS[sdk=iphoneos*]":"$(inherited) armv7","EXCLUDED_ARCHS[sdk=iphonesimulator*]":"$(inherited) i386","FRAMEWORK_SEARCH_PATHS[sdk=iphoneos*]":"\"/Users/yaso_meth/Git/flutter/bin/cache/artifacts/engine/ios/Flutter.xcframework/ios-arm64\" $(inherited)","FRAMEWORK_SEARCH_PATHS[sdk=iphonesimulator*]":"\"/Users/yaso_meth/Git/flutter/bin/cache/artifacts/engine/ios/Flutter.xcframework/ios-arm64_x86_64-simulator\" $(inherited)","GCC_PREFIX_HEADER":"Target Support Files/file_selector_ios/file_selector_ios-prefix.pch","GENERATE_INFOPLIST_FILE":"NO","INFOPLIST_FILE":"Target Support Files/file_selector_ios/file_selector_ios-Info.plist","INSTALL_PATH":"$(LOCAL_LIBRARY_DIR)/Frameworks","MODULEMAP_FILE":"Target Support Files/file_selector_ios/file_selector_ios.modulemap","ONLY_ACTIVE_ARCH":"NO","OTHER_LDFLAGS":"$(inherited) -framework Flutter","PRODUCT_MODULE_NAME":"file_selector_ios","PRODUCT_NAME":"file_selector_ios","SDKROOT":"iphoneos","SKIP_INSTALL":"YES","SWIFT_ACTIVE_COMPILATION_CONDITIONS":"$(inherited) ","SWIFT_INSTALL_OBJC_HEADER":"YES","SWIFT_VERSION":"5.0","TARGETED_DEVICE_FAMILY":"1,2","VALID_ARCHS[sdk=iphonesimulator*]":"$(ARCHS_STANDARD)","VERSIONING_SYSTEM":"apple-generic","VERSION_INFO_PREFIX":""},"guid":"bfdfe7dc352907fc980b868725387e984c78e1f657d786fc062232f5be7a4c97","name":"Debug"},{"baseConfigurationFileReference":"bfdfe7dc352907fc980b868725387e98f68cdcb857b34033c4bd7d63083cfeef","buildSettings":{"CLANG_ENABLE_OBJC_WEAK":"NO","CLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER":"NO","CODE_SIGN_IDENTITY[sdk=appletvos*]":"","CODE_SIGN_IDENTITY[sdk=iphoneos*]":"","CODE_SIGN_IDENTITY[sdk=watchos*]":"","CURRENT_PROJECT_VERSION":"1","DYLIB_COMPATIBILITY_VERSION":"1","DYLIB_CURRENT_VERSION":"1","DYLIB_INSTALL_NAME_BASE":"@rpath","ENABLE_BITCODE":"NO","ENABLE_MODULE_VERIFIER":"NO","ENABLE_USER_SCRIPT_SANDBOXING":"NO","EXCLUDED_ARCHS[sdk=iphoneos*]":"$(inherited) armv7","EXCLUDED_ARCHS[sdk=iphonesimulator*]":"$(inherited) i386","FRAMEWORK_SEARCH_PATHS[sdk=iphoneos*]":"\"/Users/yaso_meth/Git/flutter/bin/cache/artifacts/engine/ios-release/Flutter.xcframework/ios-arm64\" $(inherited)","FRAMEWORK_SEARCH_PATHS[sdk=iphonesimulator*]":"\"/Users/yaso_meth/Git/flutter/bin/cache/artifacts/engine/ios-release/Flutter.xcframework/ios-arm64_x86_64-simulator\" $(inherited)","GCC_PREFIX_HEADER":"Target Support Files/file_selector_ios/file_selector_ios-prefix.pch","GENERATE_INFOPLIST_FILE":"NO","INFOPLIST_FILE":"Target Support Files/file_selector_ios/file_selector_ios-Info.plist","INSTALL_PATH":"$(LOCAL_LIBRARY_DIR)/Frameworks","MODULEMAP_FILE":"Target Support Files/file_selector_ios/file_selector_ios.modulemap","OTHER_LDFLAGS":"$(inherited) -framework Flutter","PRODUCT_MODULE_NAME":"file_selector_ios","PRODUCT_NAME":"file_selector_ios","SDKROOT":"iphoneos","SKIP_INSTALL":"YES","SWIFT_ACTIVE_COMPILATION_CONDITIONS":"$(inherited) ","SWIFT_INSTALL_OBJC_HEADER":"YES","SWIFT_VERSION":"5.0","TARGETED_DEVICE_FAMILY":"1,2","VALIDATE_PRODUCT":"YES","VALID_ARCHS[sdk=iphonesimulator*]":"$(ARCHS_STANDARD)","VERSIONING_SYSTEM":"apple-generic","VERSION_INFO_PREFIX":""},"guid":"bfdfe7dc352907fc980b868725387e982f41bce8b433a1eb5a28e8b47bdcf7c2","name":"Profile"},{"baseConfigurationFileReference":"bfdfe7dc352907fc980b868725387e98f68cdcb857b34033c4bd7d63083cfeef","buildSettings":{"CLANG_ENABLE_OBJC_WEAK":"NO","CLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER":"NO","CODE_SIGN_IDENTITY[sdk=appletvos*]":"","CODE_SIGN_IDENTITY[sdk=iphoneos*]":"","CODE_SIGN_IDENTITY[sdk=watchos*]":"","CURRENT_PROJECT_VERSION":"1","DYLIB_COMPATIBILITY_VERSION":"1","DYLIB_CURRENT_VERSION":"1","DYLIB_INSTALL_NAME_BASE":"@rpath","ENABLE_BITCODE":"NO","ENABLE_MODULE_VERIFIER":"NO","ENABLE_USER_SCRIPT_SANDBOXING":"NO","EXCLUDED_ARCHS[sdk=iphoneos*]":"$(inherited) armv7","EXCLUDED_ARCHS[sdk=iphonesimulator*]":"$(inherited) i386","FRAMEWORK_SEARCH_PATHS[sdk=iphoneos*]":"\"/Users/yaso_meth/Git/flutter/bin/cache/artifacts/engine/ios-release/Flutter.xcframework/ios-arm64\" $(inherited)","FRAMEWORK_SEARCH_PATHS[sdk=iphonesimulator*]":"\"/Users/yaso_meth/Git/flutter/bin/cache/artifacts/engine/ios-release/Flutter.xcframework/ios-arm64_x86_64-simulator\" $(inherited)","GCC_PREFIX_HEADER":"Target Support Files/file_selector_ios/file_selector_ios-prefix.pch","GENERATE_INFOPLIST_FILE":"NO","INFOPLIST_FILE":"Target Support Files/file_selector_ios/file_selector_ios-Info.plist","INSTALL_PATH":"$(LOCAL_LIBRARY_DIR)/Frameworks","MODULEMAP_FILE":"Target Support Files/file_selector_ios/file_selector_ios.modulemap","OTHER_LDFLAGS":"$(inherited) -framework Flutter","PRODUCT_MODULE_NAME":"file_selector_ios","PRODUCT_NAME":"file_selector_ios","SDKROOT":"iphoneos","SKIP_INSTALL":"YES","SWIFT_ACTIVE_COMPILATION_CONDITIONS":"$(inherited) ","SWIFT_INSTALL_OBJC_HEADER":"YES","SWIFT_VERSION":"5.0","TARGETED_DEVICE_FAMILY":"1,2","VALIDATE_PRODUCT":"YES","VALID_ARCHS[sdk=iphonesimulator*]":"$(ARCHS_STANDARD)","VERSIONING_SYSTEM":"apple-generic","VERSION_INFO_PREFIX":""},"guid":"bfdfe7dc352907fc980b868725387e98e4b40a1b1e34033e3fe80d9f29e9a3ea","name":"Release"}],"buildPhases":[{"buildFiles":[{"fileReference":"bfdfe7dc352907fc980b868725387e9844d411eb7b3f7cc8e9589148720c721a","guid":"bfdfe7dc352907fc980b868725387e9807f448b26a149156d6ad7762ea029db3","headerVisibility":"public"}],"guid":"bfdfe7dc352907fc980b868725387e98d06e263c8c4c22bf01433b389dea226c","type":"com.apple.buildphase.headers"},{"buildFiles":[{"fileReference":"bfdfe7dc352907fc980b868725387e98c109472dcd25a3e59c31080f0ebdf811","guid":"bfdfe7dc352907fc980b868725387e980529f91d8d31f8c0ae17d526b7576bb6"},{"fileReference":"bfdfe7dc352907fc980b868725387e98f0ea88b68751cab794b769dc586bd419","guid":"bfdfe7dc352907fc980b868725387e9853e5c8fe2994ace8d62c63b32e5ba586"},{"fileReference":"bfdfe7dc352907fc980b868725387e981d83a354ff745f0961d1610ff6de246a","guid":"bfdfe7dc352907fc980b868725387e983a9f922684fca4ce0666ab6ab5de0526"},{"fileReference":"bfdfe7dc352907fc980b868725387e98179ec458b3b02e28a62624469e6b3a80","guid":"bfdfe7dc352907fc980b868725387e98a4193fad52f6bdd2c33aaf98c41b890c"}],"guid":"bfdfe7dc352907fc980b868725387e987d137a8dde5d27a87e012c2d0d25bdb5","type":"com.apple.buildphase.sources"},{"buildFiles":[{"fileReference":"bfdfe7dc352907fc980b868725387e98b14af7c49882340ad551cb13b0a1e06d","guid":"bfdfe7dc352907fc980b868725387e987abe237170fc2f507e176beab102403a"}],"guid":"bfdfe7dc352907fc980b868725387e98bb686d736760c1aafeb2585a7df097b0","type":"com.apple.buildphase.frameworks"},{"buildFiles":[{"guid":"bfdfe7dc352907fc980b868725387e988868bb129e921eb7047f300ed055ff61","targetReference":"bfdfe7dc352907fc980b868725387e9865c7202c1fc33b2af510b64e6d532fb2"}],"guid":"bfdfe7dc352907fc980b868725387e981895301765af8239f23097fad7798abb","type":"com.apple.buildphase.resources"}],"buildRules":[],"dependencies":[{"guid":"bfdfe7dc352907fc980b868725387e989da425bb6d6d5d8dbb95e4afffb82217","name":"Flutter"},{"guid":"bfdfe7dc352907fc980b868725387e9865c7202c1fc33b2af510b64e6d532fb2","name":"file_selector_ios-file_selector_ios_privacy"}],"guid":"bfdfe7dc352907fc980b868725387e984c83246bc20987a37ea775a535d55cc9","name":"file_selector_ios","predominantSourceCodeLanguage":"Xcode.SourceCodeLanguage.Swift","productReference":{"guid":"bfdfe7dc352907fc980b868725387e982efdaf2d28b3a8e59a402711ff1abdd2","name":"file_selector_ios.framework","type":"product"},"productTypeIdentifier":"com.apple.product-type.framework","provisioningSourceData":[{"bundleIdentifierFromInfoPlist":"${PRODUCT_BUNDLE_IDENTIFIER}","configurationName":"Debug","provisioningStyle":1},{"bundleIdentifierFromInfoPlist":"${PRODUCT_BUNDLE_IDENTIFIER}","configurationName":"Profile","provisioningStyle":1},{"bundleIdentifierFromInfoPlist":"${PRODUCT_BUNDLE_IDENTIFIER}","configurationName":"Release","provisioningStyle":1}],"type":"standard"} \ No newline at end of file diff --git a/mih_ui/android/build/ios/XCBuildData/PIFCache/target/TARGET@v11_hash=e48e30a0663eeb6ce1b0165ff162002a-json b/mih_ui/android/build/ios/XCBuildData/PIFCache/target/TARGET@v11_hash=e48e30a0663eeb6ce1b0165ff162002a-json new file mode 100644 index 00000000..6d5cdc2c --- /dev/null +++ b/mih_ui/android/build/ios/XCBuildData/PIFCache/target/TARGET@v11_hash=e48e30a0663eeb6ce1b0165ff162002a-json @@ -0,0 +1 @@ +{"buildConfigurations":[{"baseConfigurationFileReference":"bfdfe7dc352907fc980b868725387e983daf253e7f620ff0705af75496c7b612","buildSettings":{"CODE_SIGNING_ALLOWED":"NO","CODE_SIGNING_IDENTITY":"-","CODE_SIGNING_REQUIRED":"NO","CONFIGURATION_BUILD_DIR":"$(BUILD_DIR)/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME)/record_ios","EXPANDED_CODE_SIGN_IDENTITY":"-","IBSC_MODULE":"record_ios","INFOPLIST_FILE":"Target Support Files/record_ios/ResourceBundle-record_ios_privacy-record_ios-Info.plist","IPHONEOS_DEPLOYMENT_TARGET":"12.0","ONLY_ACTIVE_ARCH":"NO","PRODUCT_NAME":"record_ios_privacy","SDKROOT":"iphoneos","SKIP_INSTALL":"YES","TARGETED_DEVICE_FAMILY":"1,2","WRAPPER_EXTENSION":"bundle"},"guid":"bfdfe7dc352907fc980b868725387e985ffdaaba1cb6e9f107cf2dfdca7edd29","name":"Debug"},{"baseConfigurationFileReference":"bfdfe7dc352907fc980b868725387e985629505f5ce763e2c6637f93384c9362","buildSettings":{"CLANG_ENABLE_OBJC_WEAK":"NO","CODE_SIGNING_ALLOWED":"NO","CODE_SIGNING_IDENTITY":"-","CODE_SIGNING_REQUIRED":"NO","CONFIGURATION_BUILD_DIR":"$(BUILD_DIR)/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME)/record_ios","EXPANDED_CODE_SIGN_IDENTITY":"-","IBSC_MODULE":"record_ios","INFOPLIST_FILE":"Target Support Files/record_ios/ResourceBundle-record_ios_privacy-record_ios-Info.plist","IPHONEOS_DEPLOYMENT_TARGET":"12.0","PRODUCT_NAME":"record_ios_privacy","SDKROOT":"iphoneos","SKIP_INSTALL":"YES","TARGETED_DEVICE_FAMILY":"1,2","VALIDATE_PRODUCT":"YES","WRAPPER_EXTENSION":"bundle"},"guid":"bfdfe7dc352907fc980b868725387e9893e658ced745883c1a5256eca0fbe4e9","name":"Profile"},{"baseConfigurationFileReference":"bfdfe7dc352907fc980b868725387e985629505f5ce763e2c6637f93384c9362","buildSettings":{"CODE_SIGNING_ALLOWED":"NO","CODE_SIGNING_IDENTITY":"-","CODE_SIGNING_REQUIRED":"NO","CONFIGURATION_BUILD_DIR":"$(BUILD_DIR)/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME)/record_ios","EXPANDED_CODE_SIGN_IDENTITY":"-","IBSC_MODULE":"record_ios","INFOPLIST_FILE":"Target Support Files/record_ios/ResourceBundle-record_ios_privacy-record_ios-Info.plist","IPHONEOS_DEPLOYMENT_TARGET":"12.0","PRODUCT_NAME":"record_ios_privacy","SDKROOT":"iphoneos","SKIP_INSTALL":"YES","TARGETED_DEVICE_FAMILY":"1,2","WRAPPER_EXTENSION":"bundle"},"guid":"bfdfe7dc352907fc980b868725387e98d8db4589f2e390610a58c85c3f6dfda2","name":"Release"}],"buildPhases":[{"buildFiles":[],"guid":"bfdfe7dc352907fc980b868725387e9871f89e8e1848e114f018c543b999f4a1","type":"com.apple.buildphase.sources"},{"buildFiles":[],"guid":"bfdfe7dc352907fc980b868725387e98665f4fffa149ee94e7a1e7a09c00af10","type":"com.apple.buildphase.frameworks"},{"buildFiles":[{"fileReference":"bfdfe7dc352907fc980b868725387e98174d15dc574e8aee233cdb78708e065d","guid":"bfdfe7dc352907fc980b868725387e98018f269fbe47e05293180fefd0d51955"}],"guid":"bfdfe7dc352907fc980b868725387e98cbc501eb6814aa3920e8e785c77c133d","type":"com.apple.buildphase.resources"}],"buildRules":[],"dependencies":[],"guid":"bfdfe7dc352907fc980b868725387e982a2ee81fc4f9376a4b6bb6d6bb502a00","name":"record_ios-record_ios_privacy","productReference":{"guid":"bfdfe7dc352907fc980b868725387e98c34601a2dc07dcfea6b09ca49bc4da60","name":"record_ios_privacy.bundle","type":"product"},"productTypeIdentifier":"com.apple.product-type.bundle","provisioningSourceData":[{"bundleIdentifierFromInfoPlist":"${PRODUCT_BUNDLE_IDENTIFIER}","configurationName":"Debug","provisioningStyle":0},{"bundleIdentifierFromInfoPlist":"${PRODUCT_BUNDLE_IDENTIFIER}","configurationName":"Profile","provisioningStyle":0},{"bundleIdentifierFromInfoPlist":"${PRODUCT_BUNDLE_IDENTIFIER}","configurationName":"Release","provisioningStyle":0}],"type":"standard"} \ No newline at end of file diff --git a/mih_ui/android/build/ios/XCBuildData/PIFCache/target/TARGET@v11_hash=eb424d111b233087eeb27f0dcd5e1868-json b/mih_ui/android/build/ios/XCBuildData/PIFCache/target/TARGET@v11_hash=eb424d111b233087eeb27f0dcd5e1868-json new file mode 100644 index 00000000..e7a53f07 --- /dev/null +++ b/mih_ui/android/build/ios/XCBuildData/PIFCache/target/TARGET@v11_hash=eb424d111b233087eeb27f0dcd5e1868-json @@ -0,0 +1 @@ +{"buildConfigurations":[{"baseConfigurationFileReference":"bfdfe7dc352907fc980b868725387e983535bec86897f82e29e35c2a37087d79","buildSettings":{"CLANG_ENABLE_OBJC_WEAK":"NO","CLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER":"NO","CODE_SIGN_IDENTITY[sdk=appletvos*]":"","CODE_SIGN_IDENTITY[sdk=iphoneos*]":"","CODE_SIGN_IDENTITY[sdk=watchos*]":"","CURRENT_PROJECT_VERSION":"1","DYLIB_COMPATIBILITY_VERSION":"1","DYLIB_CURRENT_VERSION":"1","DYLIB_INSTALL_NAME_BASE":"@rpath","ENABLE_BITCODE":"NO","ENABLE_MODULE_VERIFIER":"NO","ENABLE_USER_SCRIPT_SANDBOXING":"NO","EXCLUDED_ARCHS[sdk=iphoneos*]":"$(inherited) armv7","EXCLUDED_ARCHS[sdk=iphonesimulator*]":"$(inherited) i386","FRAMEWORK_SEARCH_PATHS[sdk=iphoneos*]":"\"/Users/yaso_meth/Git/flutter/bin/cache/artifacts/engine/ios/Flutter.xcframework/ios-arm64\" $(inherited)","FRAMEWORK_SEARCH_PATHS[sdk=iphonesimulator*]":"\"/Users/yaso_meth/Git/flutter/bin/cache/artifacts/engine/ios/Flutter.xcframework/ios-arm64_x86_64-simulator\" $(inherited)","GCC_PREFIX_HEADER":"Target Support Files/camera_avfoundation/camera_avfoundation-prefix.pch","GENERATE_INFOPLIST_FILE":"NO","INFOPLIST_FILE":"Target Support Files/camera_avfoundation/camera_avfoundation-Info.plist","INSTALL_PATH":"$(LOCAL_LIBRARY_DIR)/Frameworks","MODULEMAP_FILE":"Target Support Files/camera_avfoundation/camera_avfoundation.modulemap","ONLY_ACTIVE_ARCH":"NO","OTHER_LDFLAGS":"$(inherited) -framework Flutter","PRODUCT_MODULE_NAME":"camera_avfoundation","PRODUCT_NAME":"camera_avfoundation","SDKROOT":"iphoneos","SKIP_INSTALL":"YES","SWIFT_ACTIVE_COMPILATION_CONDITIONS":"$(inherited) ","SWIFT_INSTALL_OBJC_HEADER":"YES","SWIFT_VERSION":"5.0","TARGETED_DEVICE_FAMILY":"1,2","VALID_ARCHS[sdk=iphonesimulator*]":"$(ARCHS_STANDARD)","VERSIONING_SYSTEM":"apple-generic","VERSION_INFO_PREFIX":""},"guid":"bfdfe7dc352907fc980b868725387e9825a4fb8242ef8a94bbdcd828c87eb13f","name":"Debug"},{"baseConfigurationFileReference":"bfdfe7dc352907fc980b868725387e989ea7a1b7622f37728c5db7b6902fabc9","buildSettings":{"CLANG_ENABLE_OBJC_WEAK":"NO","CLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER":"NO","CODE_SIGN_IDENTITY[sdk=appletvos*]":"","CODE_SIGN_IDENTITY[sdk=iphoneos*]":"","CODE_SIGN_IDENTITY[sdk=watchos*]":"","CURRENT_PROJECT_VERSION":"1","DYLIB_COMPATIBILITY_VERSION":"1","DYLIB_CURRENT_VERSION":"1","DYLIB_INSTALL_NAME_BASE":"@rpath","ENABLE_BITCODE":"NO","ENABLE_MODULE_VERIFIER":"NO","ENABLE_USER_SCRIPT_SANDBOXING":"NO","EXCLUDED_ARCHS[sdk=iphoneos*]":"$(inherited) armv7","EXCLUDED_ARCHS[sdk=iphonesimulator*]":"$(inherited) i386","FRAMEWORK_SEARCH_PATHS[sdk=iphoneos*]":"\"/Users/yaso_meth/Git/flutter/bin/cache/artifacts/engine/ios-release/Flutter.xcframework/ios-arm64\" $(inherited)","FRAMEWORK_SEARCH_PATHS[sdk=iphonesimulator*]":"\"/Users/yaso_meth/Git/flutter/bin/cache/artifacts/engine/ios-release/Flutter.xcframework/ios-arm64_x86_64-simulator\" $(inherited)","GCC_PREFIX_HEADER":"Target Support Files/camera_avfoundation/camera_avfoundation-prefix.pch","GENERATE_INFOPLIST_FILE":"NO","INFOPLIST_FILE":"Target Support Files/camera_avfoundation/camera_avfoundation-Info.plist","INSTALL_PATH":"$(LOCAL_LIBRARY_DIR)/Frameworks","MODULEMAP_FILE":"Target Support Files/camera_avfoundation/camera_avfoundation.modulemap","OTHER_LDFLAGS":"$(inherited) -framework Flutter","PRODUCT_MODULE_NAME":"camera_avfoundation","PRODUCT_NAME":"camera_avfoundation","SDKROOT":"iphoneos","SKIP_INSTALL":"YES","SWIFT_ACTIVE_COMPILATION_CONDITIONS":"$(inherited) ","SWIFT_INSTALL_OBJC_HEADER":"YES","SWIFT_VERSION":"5.0","TARGETED_DEVICE_FAMILY":"1,2","VALIDATE_PRODUCT":"YES","VALID_ARCHS[sdk=iphonesimulator*]":"$(ARCHS_STANDARD)","VERSIONING_SYSTEM":"apple-generic","VERSION_INFO_PREFIX":""},"guid":"bfdfe7dc352907fc980b868725387e98414cd678aa6ff810b7bd6dd28f5f7e64","name":"Profile"},{"baseConfigurationFileReference":"bfdfe7dc352907fc980b868725387e989ea7a1b7622f37728c5db7b6902fabc9","buildSettings":{"CLANG_ENABLE_OBJC_WEAK":"NO","CLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER":"NO","CODE_SIGN_IDENTITY[sdk=appletvos*]":"","CODE_SIGN_IDENTITY[sdk=iphoneos*]":"","CODE_SIGN_IDENTITY[sdk=watchos*]":"","CURRENT_PROJECT_VERSION":"1","DYLIB_COMPATIBILITY_VERSION":"1","DYLIB_CURRENT_VERSION":"1","DYLIB_INSTALL_NAME_BASE":"@rpath","ENABLE_BITCODE":"NO","ENABLE_MODULE_VERIFIER":"NO","ENABLE_USER_SCRIPT_SANDBOXING":"NO","EXCLUDED_ARCHS[sdk=iphoneos*]":"$(inherited) armv7","EXCLUDED_ARCHS[sdk=iphonesimulator*]":"$(inherited) i386","FRAMEWORK_SEARCH_PATHS[sdk=iphoneos*]":"\"/Users/yaso_meth/Git/flutter/bin/cache/artifacts/engine/ios-release/Flutter.xcframework/ios-arm64\" $(inherited)","FRAMEWORK_SEARCH_PATHS[sdk=iphonesimulator*]":"\"/Users/yaso_meth/Git/flutter/bin/cache/artifacts/engine/ios-release/Flutter.xcframework/ios-arm64_x86_64-simulator\" $(inherited)","GCC_PREFIX_HEADER":"Target Support Files/camera_avfoundation/camera_avfoundation-prefix.pch","GENERATE_INFOPLIST_FILE":"NO","INFOPLIST_FILE":"Target Support Files/camera_avfoundation/camera_avfoundation-Info.plist","INSTALL_PATH":"$(LOCAL_LIBRARY_DIR)/Frameworks","MODULEMAP_FILE":"Target Support Files/camera_avfoundation/camera_avfoundation.modulemap","OTHER_LDFLAGS":"$(inherited) -framework Flutter","PRODUCT_MODULE_NAME":"camera_avfoundation","PRODUCT_NAME":"camera_avfoundation","SDKROOT":"iphoneos","SKIP_INSTALL":"YES","SWIFT_ACTIVE_COMPILATION_CONDITIONS":"$(inherited) ","SWIFT_INSTALL_OBJC_HEADER":"YES","SWIFT_VERSION":"5.0","TARGETED_DEVICE_FAMILY":"1,2","VALIDATE_PRODUCT":"YES","VALID_ARCHS[sdk=iphonesimulator*]":"$(ARCHS_STANDARD)","VERSIONING_SYSTEM":"apple-generic","VERSION_INFO_PREFIX":""},"guid":"bfdfe7dc352907fc980b868725387e98ef3f94148fe7a046d728d110af328fa8","name":"Release"}],"buildPhases":[{"buildFiles":[{"fileReference":"bfdfe7dc352907fc980b868725387e988a496b0b1313fdf74b9c7b937fa522af","guid":"bfdfe7dc352907fc980b868725387e98114f165fd17a1f0a141af70efd88cf74","headerVisibility":"public"},{"fileReference":"bfdfe7dc352907fc980b868725387e98571a31becba8fba4259df5e7da0ef95b","guid":"bfdfe7dc352907fc980b868725387e98cf036e804673f99e037e55d8a59f179b","headerVisibility":"public"},{"fileReference":"bfdfe7dc352907fc980b868725387e98bec2388e2d0f9bf3dcc989355dae261c","guid":"bfdfe7dc352907fc980b868725387e9858bba8a33f8d91e4ae427d14c8b083ae","headerVisibility":"public"},{"fileReference":"bfdfe7dc352907fc980b868725387e982d376cf7afbf6b4a27ea861e42e9e18a","guid":"bfdfe7dc352907fc980b868725387e98b18a2d4b62b725a62cda3056d980d7f8","headerVisibility":"public"},{"fileReference":"bfdfe7dc352907fc980b868725387e98bdcc6ea8f95ca3d31fda7ca6d0ec07bf","guid":"bfdfe7dc352907fc980b868725387e984ce0f9c6c21ff72a0b25c54b8ed237c0","headerVisibility":"public"},{"fileReference":"bfdfe7dc352907fc980b868725387e98061b944840a544e7c2244b7dec0cea3c","guid":"bfdfe7dc352907fc980b868725387e989c980fb37914e9dae0069648fd2f64ea","headerVisibility":"public"},{"fileReference":"bfdfe7dc352907fc980b868725387e9884ca4421e20e7795c8f05c67c31cd7a6","guid":"bfdfe7dc352907fc980b868725387e98aa31224c2552791dc68d7e338d8ebb03","headerVisibility":"public"},{"fileReference":"bfdfe7dc352907fc980b868725387e981307d949f1eec051061c3f81e12003be","guid":"bfdfe7dc352907fc980b868725387e983f68e3a6fdbd8b8e8f6c51483152bce5","headerVisibility":"public"},{"fileReference":"bfdfe7dc352907fc980b868725387e98b73d4fa19990e40f5ed65965564379bb","guid":"bfdfe7dc352907fc980b868725387e9831dc752ea4ddbf286632440e685e9589","headerVisibility":"public"},{"fileReference":"bfdfe7dc352907fc980b868725387e9806d75717294b36105ee335141a42c17c","guid":"bfdfe7dc352907fc980b868725387e98472fe9d646ae69fa759469d36c341c63","headerVisibility":"public"},{"fileReference":"bfdfe7dc352907fc980b868725387e981fbc9e9c8a4aa0a1eaacee019fdbf2f4","guid":"bfdfe7dc352907fc980b868725387e98d272b0e90c4a047203f1128b42d7be42","headerVisibility":"public"},{"fileReference":"bfdfe7dc352907fc980b868725387e989b272d09f5b565b076e8b0a8a66fb95c","guid":"bfdfe7dc352907fc980b868725387e98ca4c97be3268fa9df541782e677fbdca","headerVisibility":"public"},{"fileReference":"bfdfe7dc352907fc980b868725387e98bbc3cd20c75ab4d15083fe2822084151","guid":"bfdfe7dc352907fc980b868725387e9881ac7d6cdbad7577b09ddfb248b21582","headerVisibility":"public"},{"fileReference":"bfdfe7dc352907fc980b868725387e9827732205233ea745d3d17d702bae0902","guid":"bfdfe7dc352907fc980b868725387e98a3325fd7cffce854e665cb4e365829a2","headerVisibility":"public"},{"fileReference":"bfdfe7dc352907fc980b868725387e98aa00a66f606a5894ff7b9c4193c2336d","guid":"bfdfe7dc352907fc980b868725387e982d9a9ef2da841b230fd56434ec3c38ff","headerVisibility":"public"},{"fileReference":"bfdfe7dc352907fc980b868725387e9805f59dff71b98dff44bcb35e99826611","guid":"bfdfe7dc352907fc980b868725387e98db3d5ee855a77fce514b67efa05bfb88","headerVisibility":"public"},{"fileReference":"bfdfe7dc352907fc980b868725387e98f88bdf71c2ece055e64ef37dfcb946a1","guid":"bfdfe7dc352907fc980b868725387e98046b6337ca1a2931e38d87ecfb6d0aed","headerVisibility":"public"},{"fileReference":"bfdfe7dc352907fc980b868725387e98b5b5f640e4853c81fca0b5da550bdcf5","guid":"bfdfe7dc352907fc980b868725387e98b78eaa35a396bf3a9b589ac2227b7834","headerVisibility":"public"},{"fileReference":"bfdfe7dc352907fc980b868725387e9841f506e6acdddbc3a5d078988dde4c22","guid":"bfdfe7dc352907fc980b868725387e9879f7b9f948cabb5d9017f96a382e735a","headerVisibility":"public"},{"fileReference":"bfdfe7dc352907fc980b868725387e9877689363904fdc263f22d395bf46b7ff","guid":"bfdfe7dc352907fc980b868725387e98516323cc760e475d3acdbd312245076e","headerVisibility":"public"},{"fileReference":"bfdfe7dc352907fc980b868725387e98dc0df62ffc0de3ec3f484ffd1a9ef4da","guid":"bfdfe7dc352907fc980b868725387e987e8e35019550f95157af306eff0978ec","headerVisibility":"public"},{"fileReference":"bfdfe7dc352907fc980b868725387e98d2795a25b9f9f995f8a6605e26802aa1","guid":"bfdfe7dc352907fc980b868725387e98341f00c35cdd3c73460126a03385b926","headerVisibility":"public"},{"fileReference":"bfdfe7dc352907fc980b868725387e98c013c9fa841e7f4843f3a4bde01ca879","guid":"bfdfe7dc352907fc980b868725387e98bba1f2d66f66ee182d357b847f1b141e","headerVisibility":"public"},{"fileReference":"bfdfe7dc352907fc980b868725387e98646bcd0bc1969f167312816d9267a516","guid":"bfdfe7dc352907fc980b868725387e98833f381b225ef00cf6f51933ca63b95a","headerVisibility":"public"},{"fileReference":"bfdfe7dc352907fc980b868725387e98d35201bc6359822c132fbf3930cae9a9","guid":"bfdfe7dc352907fc980b868725387e98b8d493d56e2b37563dd9d77061496e25","headerVisibility":"public"},{"fileReference":"bfdfe7dc352907fc980b868725387e98df47c568f003e0086d5a88268b6eb7a7","guid":"bfdfe7dc352907fc980b868725387e987135620a5d21fb6997c197c1242898c9","headerVisibility":"public"},{"fileReference":"bfdfe7dc352907fc980b868725387e98bd068a0e6483485d78dc23696eba3638","guid":"bfdfe7dc352907fc980b868725387e989282f4ceadd511a531ce04f0b0f6b313","headerVisibility":"public"},{"fileReference":"bfdfe7dc352907fc980b868725387e9809496e61d8f399d92800b33bdded072b","guid":"bfdfe7dc352907fc980b868725387e98ca34dc6ec6d59f68c72fae9469a4ca11","headerVisibility":"public"}],"guid":"bfdfe7dc352907fc980b868725387e987426a7dafac1d2394f10c16127971def","type":"com.apple.buildphase.headers"},{"buildFiles":[{"fileReference":"bfdfe7dc352907fc980b868725387e982078aae39ae683382f05de711a185375","guid":"bfdfe7dc352907fc980b868725387e98b01673f8cc0bfd223b723bdc1c7ac67b"},{"fileReference":"bfdfe7dc352907fc980b868725387e986340a78c7da800e0528a24e97f21d303","guid":"bfdfe7dc352907fc980b868725387e981d4b62e7cda0d76579551741b4ebdd3b"},{"fileReference":"bfdfe7dc352907fc980b868725387e98f60a8d6ef410a8896e992632f5a8d7ab","guid":"bfdfe7dc352907fc980b868725387e98c0f2e45f794d36fe785483c45c11eabd"},{"fileReference":"bfdfe7dc352907fc980b868725387e98405619e08eb70b9dac88141b45809428","guid":"bfdfe7dc352907fc980b868725387e987701428c43942c72aba5159424b045ab"},{"fileReference":"bfdfe7dc352907fc980b868725387e9831ffb27713bc35caf090dde2758982a0","guid":"bfdfe7dc352907fc980b868725387e9857290a4d90e4cd3b4d113f8e7a139169"},{"fileReference":"bfdfe7dc352907fc980b868725387e98dcb3e4b3f551bf7e25dfd5bbe6837c44","guid":"bfdfe7dc352907fc980b868725387e98d6063cc7c2f6615de2b5a211c4157dd4"},{"fileReference":"bfdfe7dc352907fc980b868725387e98a03e14e92e8450839f90b1192ebe60f9","guid":"bfdfe7dc352907fc980b868725387e9876289c2c9d3fb085fcacd346afc0dfc0"},{"fileReference":"bfdfe7dc352907fc980b868725387e989ae78c91c7fe89bf08cd07030744a390","guid":"bfdfe7dc352907fc980b868725387e98e5f676e9893a0b508b8bcc5646ba5569"},{"fileReference":"bfdfe7dc352907fc980b868725387e987cc915a467358158a059f6a1005df343","guid":"bfdfe7dc352907fc980b868725387e982bc6848edbea6ddcf109b3a836c959d2"},{"fileReference":"bfdfe7dc352907fc980b868725387e981c411b19a591008768a1751626bec02c","guid":"bfdfe7dc352907fc980b868725387e98b356878988b98ee3276998fe25c3012c"},{"fileReference":"bfdfe7dc352907fc980b868725387e98e7037d382b9763757e10e512c62f1916","guid":"bfdfe7dc352907fc980b868725387e9854acebc0a961e3e0f7847b074493aa37"},{"fileReference":"bfdfe7dc352907fc980b868725387e98121c74ca9aaca4dbb8b55621309a9732","guid":"bfdfe7dc352907fc980b868725387e98bb399586f4a0d8d363d6cbe92b1c7bf4"},{"fileReference":"bfdfe7dc352907fc980b868725387e980bd9f3a524e2e4dba9733fa90f4aac3b","guid":"bfdfe7dc352907fc980b868725387e986d007dc46ab9126bc5c3d4076b33afe7"},{"fileReference":"bfdfe7dc352907fc980b868725387e98903b72cc5b5c782aaff128c3205f4efe","guid":"bfdfe7dc352907fc980b868725387e9805242ec11b20e79273d9263207f6d0bf"},{"fileReference":"bfdfe7dc352907fc980b868725387e989d8f330e18415a31deb52b2bed8a2137","guid":"bfdfe7dc352907fc980b868725387e98027bacb8a5cff4d569a98a2350fdf886"},{"fileReference":"bfdfe7dc352907fc980b868725387e984824be8742f3e743f090fe6c33d6ef75","guid":"bfdfe7dc352907fc980b868725387e98c7f2c4ef1b665707d72fb9fd6b53bc1f"},{"fileReference":"bfdfe7dc352907fc980b868725387e98ea07288fba88427eaf97221cb0a082ea","guid":"bfdfe7dc352907fc980b868725387e98f9dea6c80335e9260774267d46f32889"},{"fileReference":"bfdfe7dc352907fc980b868725387e98c741b00c0189ecdcede99a30c61cf5ca","guid":"bfdfe7dc352907fc980b868725387e9867bc5110f96af1479073b5b678317f50"},{"fileReference":"bfdfe7dc352907fc980b868725387e98b6418130a13953d8c503f48653d8efa3","guid":"bfdfe7dc352907fc980b868725387e988463dd92263356fac7000c6e05ba2df5"},{"fileReference":"bfdfe7dc352907fc980b868725387e98b2170aed3422e923d0c594950dc68411","guid":"bfdfe7dc352907fc980b868725387e984efea462f57cda6e5aa0cd40f269068a"},{"fileReference":"bfdfe7dc352907fc980b868725387e98df6cdfb488e9420dcab5902c4835df8f","guid":"bfdfe7dc352907fc980b868725387e98aabf9280d3e8e8fb7822124dca08f63e"},{"fileReference":"bfdfe7dc352907fc980b868725387e982a862aae24ada2357f02abc8f69dfd4e","guid":"bfdfe7dc352907fc980b868725387e98650c54f22d832769fbc7f38a4235b38f"},{"fileReference":"bfdfe7dc352907fc980b868725387e9867161938a759dfccd8e5a78c167a3c1d","guid":"bfdfe7dc352907fc980b868725387e9810f5665434e2123de1e289381441cbd7"},{"fileReference":"bfdfe7dc352907fc980b868725387e9805a0d5448fe595b27ad6b8273406e808","guid":"bfdfe7dc352907fc980b868725387e98881615f4fc12b38e5e31d319621f3235"},{"fileReference":"bfdfe7dc352907fc980b868725387e983e9ded2512976d1035610e24a7a82a62","guid":"bfdfe7dc352907fc980b868725387e986c72171a470a82a85e40b25501efc6f9"},{"fileReference":"bfdfe7dc352907fc980b868725387e9851599d94c80ec88693114889217d19ec","guid":"bfdfe7dc352907fc980b868725387e98854e85be1e0328ea97f96705ea114756"},{"fileReference":"bfdfe7dc352907fc980b868725387e98e5dd02315188486cffb3b793528ee079","guid":"bfdfe7dc352907fc980b868725387e98d086dac7bafb22d7dac9d5e75f4fc119"}],"guid":"bfdfe7dc352907fc980b868725387e9877363964029d8ad42a403062036a7c87","type":"com.apple.buildphase.sources"},{"buildFiles":[{"fileReference":"bfdfe7dc352907fc980b868725387e98b14af7c49882340ad551cb13b0a1e06d","guid":"bfdfe7dc352907fc980b868725387e986833ee1301fc896ca7cc18dee79bf078"}],"guid":"bfdfe7dc352907fc980b868725387e981557d72eca0c38666dfd53933b835a06","type":"com.apple.buildphase.frameworks"},{"buildFiles":[{"guid":"bfdfe7dc352907fc980b868725387e98e2c4e89c618ae2feca2ecdbf2be263c7","targetReference":"bfdfe7dc352907fc980b868725387e98b9038e7e871b75150c57ed973218b158"}],"guid":"bfdfe7dc352907fc980b868725387e982fd2d25df49aacaaca253cad31fd43c2","type":"com.apple.buildphase.resources"}],"buildRules":[],"dependencies":[{"guid":"bfdfe7dc352907fc980b868725387e989da425bb6d6d5d8dbb95e4afffb82217","name":"Flutter"},{"guid":"bfdfe7dc352907fc980b868725387e98b9038e7e871b75150c57ed973218b158","name":"camera_avfoundation-camera_avfoundation_privacy"}],"guid":"bfdfe7dc352907fc980b868725387e98f08a09402d437c098acddc7bcf497e64","name":"camera_avfoundation","predominantSourceCodeLanguage":"Xcode.SourceCodeLanguage.Objective-C-Plus-Plus","productReference":{"guid":"bfdfe7dc352907fc980b868725387e983903b9d6299cde09dc2b081ad04abafe","name":"camera_avfoundation.framework","type":"product"},"productTypeIdentifier":"com.apple.product-type.framework","provisioningSourceData":[{"bundleIdentifierFromInfoPlist":"${PRODUCT_BUNDLE_IDENTIFIER}","configurationName":"Debug","provisioningStyle":1},{"bundleIdentifierFromInfoPlist":"${PRODUCT_BUNDLE_IDENTIFIER}","configurationName":"Profile","provisioningStyle":1},{"bundleIdentifierFromInfoPlist":"${PRODUCT_BUNDLE_IDENTIFIER}","configurationName":"Release","provisioningStyle":1}],"type":"standard"} \ No newline at end of file diff --git a/mih_ui/android/build/ios/XCBuildData/PIFCache/target/TARGET@v11_hash=eb71d09d11dfb3cc8ccae98e4e65ea84-json b/mih_ui/android/build/ios/XCBuildData/PIFCache/target/TARGET@v11_hash=eb71d09d11dfb3cc8ccae98e4e65ea84-json new file mode 100644 index 00000000..77a64fa2 --- /dev/null +++ b/mih_ui/android/build/ios/XCBuildData/PIFCache/target/TARGET@v11_hash=eb71d09d11dfb3cc8ccae98e4e65ea84-json @@ -0,0 +1 @@ +{"buildConfigurations":[{"baseConfigurationFileReference":"bfdfe7dc352907fc980b868725387e98f850c18f6937fd120321475e01101b34","buildSettings":{"ASSETCATALOG_COMPILER_APPICON_NAME":"AppIcon","ASSETCATALOG_COMPILER_GLOBAL_ACCENT_COLOR_NAME":"AccentColor","CLANG_ENABLE_OBJC_WEAK":"NO","ENABLE_USER_SCRIPT_SANDBOXING":"NO","IPHONEOS_DEPLOYMENT_TARGET":"12.0","LD_RUNPATH_SEARCH_PATHS":"$(inherited) @executable_path/Frameworks","ONLY_ACTIVE_ARCH":"NO","SDKROOT":"iphoneos","TARGETED_DEVICE_FAMILY":"1,2"},"guid":"bfdfe7dc352907fc980b868725387e988f7c95cfe7c05e7c498c4effb83b8ca9","name":"Debug"},{"baseConfigurationFileReference":"bfdfe7dc352907fc980b868725387e98f12a631782f8376926b89f77c119f385","buildSettings":{"ASSETCATALOG_COMPILER_APPICON_NAME":"AppIcon","ASSETCATALOG_COMPILER_GLOBAL_ACCENT_COLOR_NAME":"AccentColor","CLANG_ENABLE_OBJC_WEAK":"NO","ENABLE_USER_SCRIPT_SANDBOXING":"NO","IPHONEOS_DEPLOYMENT_TARGET":"12.0","LD_RUNPATH_SEARCH_PATHS":"$(inherited) @executable_path/Frameworks","SDKROOT":"iphoneos","TARGETED_DEVICE_FAMILY":"1,2","VALIDATE_PRODUCT":"YES"},"guid":"bfdfe7dc352907fc980b868725387e982781b45ebc68bec548f6cde3050d45db","name":"Profile"},{"baseConfigurationFileReference":"bfdfe7dc352907fc980b868725387e98f12a631782f8376926b89f77c119f385","buildSettings":{"ASSETCATALOG_COMPILER_APPICON_NAME":"AppIcon","ASSETCATALOG_COMPILER_GLOBAL_ACCENT_COLOR_NAME":"AccentColor","CLANG_ENABLE_OBJC_WEAK":"NO","ENABLE_USER_SCRIPT_SANDBOXING":"NO","IPHONEOS_DEPLOYMENT_TARGET":"12.0","LD_RUNPATH_SEARCH_PATHS":"$(inherited) @executable_path/Frameworks","SDKROOT":"iphoneos","TARGETED_DEVICE_FAMILY":"1,2","VALIDATE_PRODUCT":"YES"},"guid":"bfdfe7dc352907fc980b868725387e985b28985a46abb62214b40b026e01f674","name":"Release"}],"buildPhases":[{"alwaysOutOfDate":"false","alwaysRunForInstallHdrs":"false","buildFiles":[],"emitEnvironment":"false","guid":"bfdfe7dc352907fc980b868725387e984e2176ef4539053c6517ce3088ac9698","inputFileListPaths":["${PODS_ROOT}/Target Support Files/GoogleMobileAdsMediationFacebook/GoogleMobileAdsMediationFacebook-xcframeworks-input-files.xcfilelist"],"inputFilePaths":[],"name":"[CP] Copy XCFrameworks","originalObjectID":"9AD31E84B8BE0888085C7057A8395CFF","outputFileListPaths":["${PODS_ROOT}/Target Support Files/GoogleMobileAdsMediationFacebook/GoogleMobileAdsMediationFacebook-xcframeworks-output-files.xcfilelist"],"outputFilePaths":[],"sandboxingOverride":"basedOnBuildSetting","scriptContents":"\"${PODS_ROOT}/Target Support Files/GoogleMobileAdsMediationFacebook/GoogleMobileAdsMediationFacebook-xcframeworks.sh\"\n","shellPath":"/bin/sh","type":"com.apple.buildphase.shell-script"}],"buildRules":[],"dependencies":[{"guid":"bfdfe7dc352907fc980b868725387e98c16926158ef45fa2ac81bd3203fcd49e","name":"FBAudienceNetwork"},{"guid":"bfdfe7dc352907fc980b868725387e98cd53d937e824fad9f4527eeeb684cb40","name":"Google-Mobile-Ads-SDK"}],"guid":"bfdfe7dc352907fc980b868725387e98bbd9e0ed4cdc41b93625c3661dbcaa81","name":"GoogleMobileAdsMediationFacebook","provisioningSourceData":[{"bundleIdentifierFromInfoPlist":"","configurationName":"Debug","provisioningStyle":0},{"bundleIdentifierFromInfoPlist":"","configurationName":"Profile","provisioningStyle":0},{"bundleIdentifierFromInfoPlist":"","configurationName":"Release","provisioningStyle":0}],"type":"aggregate"} \ No newline at end of file diff --git a/mih_ui/android/build/ios/XCBuildData/PIFCache/target/TARGET@v11_hash=ebe021611ae425ec05c93c24ce7a6607-json b/mih_ui/android/build/ios/XCBuildData/PIFCache/target/TARGET@v11_hash=ebe021611ae425ec05c93c24ce7a6607-json new file mode 100644 index 00000000..1c7edb40 --- /dev/null +++ b/mih_ui/android/build/ios/XCBuildData/PIFCache/target/TARGET@v11_hash=ebe021611ae425ec05c93c24ce7a6607-json @@ -0,0 +1 @@ +{"buildConfigurations":[{"baseConfigurationFileReference":"bfdfe7dc352907fc980b868725387e98c25cf455db1669644df3712dd48f7fb4","buildSettings":{"CLANG_ENABLE_OBJC_WEAK":"NO","CLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER":"NO","CODE_SIGN_IDENTITY[sdk=appletvos*]":"","CODE_SIGN_IDENTITY[sdk=iphoneos*]":"","CODE_SIGN_IDENTITY[sdk=watchos*]":"","CURRENT_PROJECT_VERSION":"1","DYLIB_COMPATIBILITY_VERSION":"1","DYLIB_CURRENT_VERSION":"1","DYLIB_INSTALL_NAME_BASE":"@rpath","ENABLE_BITCODE":"NO","ENABLE_MODULE_VERIFIER":"NO","ENABLE_USER_SCRIPT_SANDBOXING":"NO","EXCLUDED_ARCHS[sdk=iphoneos*]":"$(inherited) armv7","EXCLUDED_ARCHS[sdk=iphonesimulator*]":"$(inherited) i386","FRAMEWORK_SEARCH_PATHS[sdk=iphoneos*]":"\"/Users/yaso_meth/Git/flutter/bin/cache/artifacts/engine/ios/Flutter.xcframework/ios-arm64\" $(inherited)","FRAMEWORK_SEARCH_PATHS[sdk=iphonesimulator*]":"\"/Users/yaso_meth/Git/flutter/bin/cache/artifacts/engine/ios/Flutter.xcframework/ios-arm64_x86_64-simulator\" $(inherited)","GCC_PREFIX_HEADER":"Target Support Files/firebase_app_check/firebase_app_check-prefix.pch","GENERATE_INFOPLIST_FILE":"NO","INFOPLIST_FILE":"Target Support Files/firebase_app_check/firebase_app_check-Info.plist","INSTALL_PATH":"$(LOCAL_LIBRARY_DIR)/Frameworks","IPHONEOS_DEPLOYMENT_TARGET":"15.0","LD_RUNPATH_SEARCH_PATHS":"$(inherited) @executable_path/Frameworks @loader_path/Frameworks","MACH_O_TYPE":"staticlib","MODULEMAP_FILE":"Target Support Files/firebase_app_check/firebase_app_check.modulemap","ONLY_ACTIVE_ARCH":"NO","OTHER_LDFLAGS":"$(inherited) -framework Flutter","PRODUCT_MODULE_NAME":"firebase_app_check","PRODUCT_NAME":"firebase_app_check","SDKROOT":"iphoneos","SKIP_INSTALL":"YES","SWIFT_ACTIVE_COMPILATION_CONDITIONS":"$(inherited) ","SWIFT_INSTALL_OBJC_HEADER":"YES","SWIFT_VERSION":"5.0","TARGETED_DEVICE_FAMILY":"1,2","VALID_ARCHS[sdk=iphonesimulator*]":"$(ARCHS_STANDARD)","VERSIONING_SYSTEM":"apple-generic","VERSION_INFO_PREFIX":""},"guid":"bfdfe7dc352907fc980b868725387e9811aa18dd7699f02a30902896801d56af","name":"Debug"},{"baseConfigurationFileReference":"bfdfe7dc352907fc980b868725387e98e912e07d424cdf8e7522667434d5bd3f","buildSettings":{"CLANG_ENABLE_OBJC_WEAK":"NO","CLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER":"NO","CODE_SIGN_IDENTITY[sdk=appletvos*]":"","CODE_SIGN_IDENTITY[sdk=iphoneos*]":"","CODE_SIGN_IDENTITY[sdk=watchos*]":"","CURRENT_PROJECT_VERSION":"1","DYLIB_COMPATIBILITY_VERSION":"1","DYLIB_CURRENT_VERSION":"1","DYLIB_INSTALL_NAME_BASE":"@rpath","ENABLE_BITCODE":"NO","ENABLE_MODULE_VERIFIER":"NO","ENABLE_USER_SCRIPT_SANDBOXING":"NO","EXCLUDED_ARCHS[sdk=iphoneos*]":"$(inherited) armv7","EXCLUDED_ARCHS[sdk=iphonesimulator*]":"$(inherited) i386","FRAMEWORK_SEARCH_PATHS[sdk=iphoneos*]":"\"/Users/yaso_meth/Git/flutter/bin/cache/artifacts/engine/ios-release/Flutter.xcframework/ios-arm64\" $(inherited)","FRAMEWORK_SEARCH_PATHS[sdk=iphonesimulator*]":"\"/Users/yaso_meth/Git/flutter/bin/cache/artifacts/engine/ios-release/Flutter.xcframework/ios-arm64_x86_64-simulator\" $(inherited)","GCC_PREFIX_HEADER":"Target Support Files/firebase_app_check/firebase_app_check-prefix.pch","GENERATE_INFOPLIST_FILE":"NO","INFOPLIST_FILE":"Target Support Files/firebase_app_check/firebase_app_check-Info.plist","INSTALL_PATH":"$(LOCAL_LIBRARY_DIR)/Frameworks","IPHONEOS_DEPLOYMENT_TARGET":"15.0","LD_RUNPATH_SEARCH_PATHS":"$(inherited) @executable_path/Frameworks @loader_path/Frameworks","MACH_O_TYPE":"staticlib","MODULEMAP_FILE":"Target Support Files/firebase_app_check/firebase_app_check.modulemap","OTHER_LDFLAGS":"$(inherited) -framework Flutter","PRODUCT_MODULE_NAME":"firebase_app_check","PRODUCT_NAME":"firebase_app_check","SDKROOT":"iphoneos","SKIP_INSTALL":"YES","SWIFT_ACTIVE_COMPILATION_CONDITIONS":"$(inherited) ","SWIFT_INSTALL_OBJC_HEADER":"YES","SWIFT_VERSION":"5.0","TARGETED_DEVICE_FAMILY":"1,2","VALIDATE_PRODUCT":"YES","VALID_ARCHS[sdk=iphonesimulator*]":"$(ARCHS_STANDARD)","VERSIONING_SYSTEM":"apple-generic","VERSION_INFO_PREFIX":""},"guid":"bfdfe7dc352907fc980b868725387e988a063649f4f054b30081157d6cfcaa4c","name":"Profile"},{"baseConfigurationFileReference":"bfdfe7dc352907fc980b868725387e98e912e07d424cdf8e7522667434d5bd3f","buildSettings":{"CLANG_ENABLE_OBJC_WEAK":"NO","CLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER":"NO","CODE_SIGN_IDENTITY[sdk=appletvos*]":"","CODE_SIGN_IDENTITY[sdk=iphoneos*]":"","CODE_SIGN_IDENTITY[sdk=watchos*]":"","CURRENT_PROJECT_VERSION":"1","DYLIB_COMPATIBILITY_VERSION":"1","DYLIB_CURRENT_VERSION":"1","DYLIB_INSTALL_NAME_BASE":"@rpath","ENABLE_BITCODE":"NO","ENABLE_MODULE_VERIFIER":"NO","ENABLE_USER_SCRIPT_SANDBOXING":"NO","EXCLUDED_ARCHS[sdk=iphoneos*]":"$(inherited) armv7","EXCLUDED_ARCHS[sdk=iphonesimulator*]":"$(inherited) i386","FRAMEWORK_SEARCH_PATHS[sdk=iphoneos*]":"\"/Users/yaso_meth/Git/flutter/bin/cache/artifacts/engine/ios-release/Flutter.xcframework/ios-arm64\" $(inherited)","FRAMEWORK_SEARCH_PATHS[sdk=iphonesimulator*]":"\"/Users/yaso_meth/Git/flutter/bin/cache/artifacts/engine/ios-release/Flutter.xcframework/ios-arm64_x86_64-simulator\" $(inherited)","GCC_PREFIX_HEADER":"Target Support Files/firebase_app_check/firebase_app_check-prefix.pch","GENERATE_INFOPLIST_FILE":"NO","INFOPLIST_FILE":"Target Support Files/firebase_app_check/firebase_app_check-Info.plist","INSTALL_PATH":"$(LOCAL_LIBRARY_DIR)/Frameworks","IPHONEOS_DEPLOYMENT_TARGET":"15.0","LD_RUNPATH_SEARCH_PATHS":"$(inherited) @executable_path/Frameworks @loader_path/Frameworks","MACH_O_TYPE":"staticlib","MODULEMAP_FILE":"Target Support Files/firebase_app_check/firebase_app_check.modulemap","OTHER_LDFLAGS":"$(inherited) -framework Flutter","PRODUCT_MODULE_NAME":"firebase_app_check","PRODUCT_NAME":"firebase_app_check","SDKROOT":"iphoneos","SKIP_INSTALL":"YES","SWIFT_ACTIVE_COMPILATION_CONDITIONS":"$(inherited) ","SWIFT_INSTALL_OBJC_HEADER":"YES","SWIFT_VERSION":"5.0","TARGETED_DEVICE_FAMILY":"1,2","VALIDATE_PRODUCT":"YES","VALID_ARCHS[sdk=iphonesimulator*]":"$(ARCHS_STANDARD)","VERSIONING_SYSTEM":"apple-generic","VERSION_INFO_PREFIX":""},"guid":"bfdfe7dc352907fc980b868725387e98c9eda022570d8bade79621c2c6ccdfbe","name":"Release"}],"buildPhases":[{"buildFiles":[{"fileReference":"bfdfe7dc352907fc980b868725387e98d6d26726976b2e08a5c89968805d3304","guid":"bfdfe7dc352907fc980b868725387e986429c3609fb596acb9ef85af74363599","headerVisibility":"public"},{"fileReference":"bfdfe7dc352907fc980b868725387e987257dfc73b43963823ab3e833020d53b","guid":"bfdfe7dc352907fc980b868725387e989af0ff5eb2d6b0c5253b0de31189d720","headerVisibility":"public"},{"fileReference":"bfdfe7dc352907fc980b868725387e98e6e862ae88920fd2aa08c4d49b573983","guid":"bfdfe7dc352907fc980b868725387e98d89cb77a27ba98000e028c382a5cc52b","headerVisibility":"public"},{"fileReference":"bfdfe7dc352907fc980b868725387e9872317cb485910fd1580965e87f2fb858","guid":"bfdfe7dc352907fc980b868725387e98d30d35d1b5ba70d2e2898c982c4ecea3","headerVisibility":"public"},{"fileReference":"bfdfe7dc352907fc980b868725387e980c7e27df05ae77bf0663c37468ec4d68","guid":"bfdfe7dc352907fc980b868725387e9804b03e8d77afb7cd7ab6ad315f355b9a","headerVisibility":"public"}],"guid":"bfdfe7dc352907fc980b868725387e98f8bd1276980959d08e50d551f643e3f6","type":"com.apple.buildphase.headers"},{"buildFiles":[{"fileReference":"bfdfe7dc352907fc980b868725387e98b3b0eb48012053daff698e8d2eecd384","guid":"bfdfe7dc352907fc980b868725387e98b560bcec930c02e36024acbe22501a4e"},{"fileReference":"bfdfe7dc352907fc980b868725387e98157eaa509705c5a0a8cf3ea2683f01c3","guid":"bfdfe7dc352907fc980b868725387e98f7d918f7cbb66e428250c231e8b678d2"},{"fileReference":"bfdfe7dc352907fc980b868725387e9811391913961f2b0ab6847057591d15a2","guid":"bfdfe7dc352907fc980b868725387e983d702bdbceda77734fde931632e99c61"},{"fileReference":"bfdfe7dc352907fc980b868725387e988426fad311447aa6640aeb8b4fe3b1d2","guid":"bfdfe7dc352907fc980b868725387e980a04201fef45be55090d423324fcd152"},{"fileReference":"bfdfe7dc352907fc980b868725387e986cf945052e9a5cc9cf921ff7b6631624","guid":"bfdfe7dc352907fc980b868725387e98245ebf0ff7e55665e7a560111f075217"}],"guid":"bfdfe7dc352907fc980b868725387e9845deb996ecac2f34333396d059ec4e5e","type":"com.apple.buildphase.sources"},{"buildFiles":[{"fileReference":"bfdfe7dc352907fc980b868725387e98b14af7c49882340ad551cb13b0a1e06d","guid":"bfdfe7dc352907fc980b868725387e98e73f4ea779ab24f3c49aa627356a839c"}],"guid":"bfdfe7dc352907fc980b868725387e989bbfdc15c577d12bc28cd60ea06dae27","type":"com.apple.buildphase.frameworks"},{"buildFiles":[],"guid":"bfdfe7dc352907fc980b868725387e9875cbcb21229fc528c24a78bf6a32e9bf","type":"com.apple.buildphase.resources"}],"buildRules":[],"dependencies":[{"guid":"bfdfe7dc352907fc980b868725387e98d57b8bce60a0f11113f4cff532db68d3","name":"Firebase"},{"guid":"bfdfe7dc352907fc980b868725387e98ecaebc2b66f6675fbaa388164aa6c8dd","name":"FirebaseAppCheck"},{"guid":"bfdfe7dc352907fc980b868725387e989da425bb6d6d5d8dbb95e4afffb82217","name":"Flutter"},{"guid":"bfdfe7dc352907fc980b868725387e987f74324bfc5c78140e34d510e26e00c1","name":"firebase_core"}],"guid":"bfdfe7dc352907fc980b868725387e98213dce80d6344a36faf6079e42d20067","name":"firebase_app_check","predominantSourceCodeLanguage":"Xcode.SourceCodeLanguage.Objective-C","productReference":{"guid":"bfdfe7dc352907fc980b868725387e98b45c9f0525cc477a414dac35b7dfddb5","name":"firebase_app_check.framework","type":"product"},"productTypeIdentifier":"com.apple.product-type.framework","provisioningSourceData":[{"bundleIdentifierFromInfoPlist":"${PRODUCT_BUNDLE_IDENTIFIER}","configurationName":"Debug","provisioningStyle":1},{"bundleIdentifierFromInfoPlist":"${PRODUCT_BUNDLE_IDENTIFIER}","configurationName":"Profile","provisioningStyle":1},{"bundleIdentifierFromInfoPlist":"${PRODUCT_BUNDLE_IDENTIFIER}","configurationName":"Release","provisioningStyle":1}],"type":"standard"} \ No newline at end of file diff --git a/mih_ui/android/build/ios/XCBuildData/PIFCache/target/TARGET@v11_hash=ec851e59095ec5bf084fefcd5588ef75-json b/mih_ui/android/build/ios/XCBuildData/PIFCache/target/TARGET@v11_hash=ec851e59095ec5bf084fefcd5588ef75-json new file mode 100644 index 00000000..015af6a6 --- /dev/null +++ b/mih_ui/android/build/ios/XCBuildData/PIFCache/target/TARGET@v11_hash=ec851e59095ec5bf084fefcd5588ef75-json @@ -0,0 +1 @@ +{"buildConfigurations":[{"baseConfigurationFileReference":"bfdfe7dc352907fc980b868725387e9820adfbf68e5990b89cefc5d0ec651cfd","buildSettings":{"CLANG_ENABLE_OBJC_WEAK":"NO","CODE_SIGN_IDENTITY[sdk=appletvos*]":"","CODE_SIGN_IDENTITY[sdk=iphoneos*]":"","CODE_SIGN_IDENTITY[sdk=watchos*]":"","CURRENT_PROJECT_VERSION":"1","DEFINES_MODULE":"YES","DYLIB_COMPATIBILITY_VERSION":"1","DYLIB_CURRENT_VERSION":"1","DYLIB_INSTALL_NAME_BASE":"@rpath","ENABLE_MODULE_VERIFIER":"NO","ENABLE_USER_SCRIPT_SANDBOXING":"NO","GCC_PREFIX_HEADER":"Target Support Files/RecaptchaInterop/RecaptchaInterop-prefix.pch","GENERATE_INFOPLIST_FILE":"NO","INFOPLIST_FILE":"Target Support Files/RecaptchaInterop/RecaptchaInterop-Info.plist","INSTALL_PATH":"$(LOCAL_LIBRARY_DIR)/Frameworks","IPHONEOS_DEPLOYMENT_TARGET":"11.0","LD_RUNPATH_SEARCH_PATHS":"$(inherited) @executable_path/Frameworks @loader_path/Frameworks","MODULEMAP_FILE":"Target Support Files/RecaptchaInterop/RecaptchaInterop.modulemap","ONLY_ACTIVE_ARCH":"NO","PRODUCT_MODULE_NAME":"RecaptchaInterop","PRODUCT_NAME":"RecaptchaInterop","SDKROOT":"iphoneos","SKIP_INSTALL":"YES","SWIFT_ACTIVE_COMPILATION_CONDITIONS":"$(inherited) ","SWIFT_INSTALL_OBJC_HEADER":"YES","SWIFT_VERSION":"5.0","TARGETED_DEVICE_FAMILY":"1,2","VERSIONING_SYSTEM":"apple-generic","VERSION_INFO_PREFIX":""},"guid":"bfdfe7dc352907fc980b868725387e982029642174afaeaf5f6d6a171228990e","name":"Debug"},{"baseConfigurationFileReference":"bfdfe7dc352907fc980b868725387e98e4c67bec0da225378144113a5283f5e7","buildSettings":{"CLANG_ENABLE_OBJC_WEAK":"NO","CODE_SIGN_IDENTITY[sdk=appletvos*]":"","CODE_SIGN_IDENTITY[sdk=iphoneos*]":"","CODE_SIGN_IDENTITY[sdk=watchos*]":"","CURRENT_PROJECT_VERSION":"1","DEFINES_MODULE":"YES","DYLIB_COMPATIBILITY_VERSION":"1","DYLIB_CURRENT_VERSION":"1","DYLIB_INSTALL_NAME_BASE":"@rpath","ENABLE_MODULE_VERIFIER":"NO","ENABLE_USER_SCRIPT_SANDBOXING":"NO","GCC_PREFIX_HEADER":"Target Support Files/RecaptchaInterop/RecaptchaInterop-prefix.pch","GENERATE_INFOPLIST_FILE":"NO","INFOPLIST_FILE":"Target Support Files/RecaptchaInterop/RecaptchaInterop-Info.plist","INSTALL_PATH":"$(LOCAL_LIBRARY_DIR)/Frameworks","IPHONEOS_DEPLOYMENT_TARGET":"11.0","LD_RUNPATH_SEARCH_PATHS":"$(inherited) @executable_path/Frameworks @loader_path/Frameworks","MODULEMAP_FILE":"Target Support Files/RecaptchaInterop/RecaptchaInterop.modulemap","PRODUCT_MODULE_NAME":"RecaptchaInterop","PRODUCT_NAME":"RecaptchaInterop","SDKROOT":"iphoneos","SKIP_INSTALL":"YES","SWIFT_ACTIVE_COMPILATION_CONDITIONS":"$(inherited) ","SWIFT_INSTALL_OBJC_HEADER":"YES","SWIFT_VERSION":"5.0","TARGETED_DEVICE_FAMILY":"1,2","VALIDATE_PRODUCT":"YES","VERSIONING_SYSTEM":"apple-generic","VERSION_INFO_PREFIX":""},"guid":"bfdfe7dc352907fc980b868725387e98ca6298affe3b2251336f81d4d31cda29","name":"Profile"},{"baseConfigurationFileReference":"bfdfe7dc352907fc980b868725387e98e4c67bec0da225378144113a5283f5e7","buildSettings":{"CLANG_ENABLE_OBJC_WEAK":"NO","CODE_SIGN_IDENTITY[sdk=appletvos*]":"","CODE_SIGN_IDENTITY[sdk=iphoneos*]":"","CODE_SIGN_IDENTITY[sdk=watchos*]":"","CURRENT_PROJECT_VERSION":"1","DEFINES_MODULE":"YES","DYLIB_COMPATIBILITY_VERSION":"1","DYLIB_CURRENT_VERSION":"1","DYLIB_INSTALL_NAME_BASE":"@rpath","ENABLE_MODULE_VERIFIER":"NO","ENABLE_USER_SCRIPT_SANDBOXING":"NO","GCC_PREFIX_HEADER":"Target Support Files/RecaptchaInterop/RecaptchaInterop-prefix.pch","GENERATE_INFOPLIST_FILE":"NO","INFOPLIST_FILE":"Target Support Files/RecaptchaInterop/RecaptchaInterop-Info.plist","INSTALL_PATH":"$(LOCAL_LIBRARY_DIR)/Frameworks","IPHONEOS_DEPLOYMENT_TARGET":"11.0","LD_RUNPATH_SEARCH_PATHS":"$(inherited) @executable_path/Frameworks @loader_path/Frameworks","MODULEMAP_FILE":"Target Support Files/RecaptchaInterop/RecaptchaInterop.modulemap","PRODUCT_MODULE_NAME":"RecaptchaInterop","PRODUCT_NAME":"RecaptchaInterop","SDKROOT":"iphoneos","SKIP_INSTALL":"YES","SWIFT_ACTIVE_COMPILATION_CONDITIONS":"$(inherited) ","SWIFT_INSTALL_OBJC_HEADER":"YES","SWIFT_VERSION":"5.0","TARGETED_DEVICE_FAMILY":"1,2","VALIDATE_PRODUCT":"YES","VERSIONING_SYSTEM":"apple-generic","VERSION_INFO_PREFIX":""},"guid":"bfdfe7dc352907fc980b868725387e98184f30de80282b2325a9c5c50e5a4ca8","name":"Release"}],"buildPhases":[{"buildFiles":[{"fileReference":"bfdfe7dc352907fc980b868725387e9846288276371e5cec52e9a8a0d7bce8d6","guid":"bfdfe7dc352907fc980b868725387e985b9ef788a2f63e42989d87e2d4bd928a","headerVisibility":"public"},{"fileReference":"bfdfe7dc352907fc980b868725387e9888baa60dc9fe0ff0987f46e74e092236","guid":"bfdfe7dc352907fc980b868725387e98f5e1aa42ff5659b24b8e057d94120384","headerVisibility":"public"},{"fileReference":"bfdfe7dc352907fc980b868725387e985616a2553f97c6ad675d654cea953c03","guid":"bfdfe7dc352907fc980b868725387e9844857006c39671f0f8e35bf97e2f9f8c","headerVisibility":"public"},{"fileReference":"bfdfe7dc352907fc980b868725387e9898b4264b684c69bf23f82e2a6781718d","guid":"bfdfe7dc352907fc980b868725387e98d94d198f5505923b258d8bf7459691b0","headerVisibility":"public"},{"fileReference":"bfdfe7dc352907fc980b868725387e98c54e5d70b03e206695cd4cd8927c8cc8","guid":"bfdfe7dc352907fc980b868725387e9845d58770cb5cb2ddf38c6f2018b590ba","headerVisibility":"public"}],"guid":"bfdfe7dc352907fc980b868725387e9895443977c38e1be0af3feb46fe9915bd","type":"com.apple.buildphase.headers"},{"buildFiles":[{"fileReference":"bfdfe7dc352907fc980b868725387e98f53a2b9142a2e19252d075f8af76efe2","guid":"bfdfe7dc352907fc980b868725387e985d8a68069d64fdfbac4efe7f4ed68dec"},{"fileReference":"bfdfe7dc352907fc980b868725387e98eaaffa60434f1c632748d87268193d14","guid":"bfdfe7dc352907fc980b868725387e980dffea18c5e488dd570ae3e6af4ec6ee"}],"guid":"bfdfe7dc352907fc980b868725387e981c11a08274f8e5b3329c63cb2e7c62f9","type":"com.apple.buildphase.sources"},{"buildFiles":[{"fileReference":"bfdfe7dc352907fc980b868725387e98b14af7c49882340ad551cb13b0a1e06d","guid":"bfdfe7dc352907fc980b868725387e986b5a3a20dc5941822d7ad4dca8f05ec5"}],"guid":"bfdfe7dc352907fc980b868725387e98b9a9049f06ad3c296a3207e49fcff82c","type":"com.apple.buildphase.frameworks"},{"buildFiles":[],"guid":"bfdfe7dc352907fc980b868725387e988d47cc2208426e3b9186cf19fde1addb","type":"com.apple.buildphase.resources"}],"buildRules":[],"dependencies":[],"guid":"bfdfe7dc352907fc980b868725387e98da29652de71b686743df2bd56decf7ef","name":"RecaptchaInterop","predominantSourceCodeLanguage":"Xcode.SourceCodeLanguage.Objective-C-Plus-Plus","productReference":{"guid":"bfdfe7dc352907fc980b868725387e988c2a56cd963a48a63ab689fe60f47236","name":"RecaptchaInterop.framework","type":"product"},"productTypeIdentifier":"com.apple.product-type.framework","provisioningSourceData":[{"bundleIdentifierFromInfoPlist":"${PRODUCT_BUNDLE_IDENTIFIER}","configurationName":"Debug","provisioningStyle":1},{"bundleIdentifierFromInfoPlist":"${PRODUCT_BUNDLE_IDENTIFIER}","configurationName":"Profile","provisioningStyle":1},{"bundleIdentifierFromInfoPlist":"${PRODUCT_BUNDLE_IDENTIFIER}","configurationName":"Release","provisioningStyle":1}],"type":"standard"} \ No newline at end of file diff --git a/mih_ui/android/build/ios/XCBuildData/PIFCache/target/TARGET@v11_hash=f3bbe05679242975dafb6d8e69ca7557-json b/mih_ui/android/build/ios/XCBuildData/PIFCache/target/TARGET@v11_hash=f3bbe05679242975dafb6d8e69ca7557-json new file mode 100644 index 00000000..4a2254fe --- /dev/null +++ b/mih_ui/android/build/ios/XCBuildData/PIFCache/target/TARGET@v11_hash=f3bbe05679242975dafb6d8e69ca7557-json @@ -0,0 +1 @@ +{"buildConfigurations":[{"baseConfigurationFileReference":"bfdfe7dc352907fc980b868725387e984e4a588da55ed3c53fbd1e10e58fd1c6","buildSettings":{"CODE_SIGNING_ALLOWED":"NO","CODE_SIGNING_IDENTITY":"-","CODE_SIGNING_REQUIRED":"NO","CONFIGURATION_BUILD_DIR":"$(BUILD_DIR)/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME)/fl_downloader","EXPANDED_CODE_SIGN_IDENTITY":"-","IBSC_MODULE":"fl_downloader","INFOPLIST_FILE":"Target Support Files/fl_downloader/ResourceBundle-fl_downloader_privacy-fl_downloader-Info.plist","IPHONEOS_DEPLOYMENT_TARGET":"9.0","ONLY_ACTIVE_ARCH":"NO","PRODUCT_NAME":"fl_downloader_privacy","SDKROOT":"iphoneos","SKIP_INSTALL":"YES","TARGETED_DEVICE_FAMILY":"1,2","WRAPPER_EXTENSION":"bundle"},"guid":"bfdfe7dc352907fc980b868725387e981d747fe2f1d7335ed7d95e8f047a6545","name":"Debug"},{"baseConfigurationFileReference":"bfdfe7dc352907fc980b868725387e98c91d9e268657e7dd6c060d3e603cc2b1","buildSettings":{"CLANG_ENABLE_OBJC_WEAK":"NO","CODE_SIGNING_ALLOWED":"NO","CODE_SIGNING_IDENTITY":"-","CODE_SIGNING_REQUIRED":"NO","CONFIGURATION_BUILD_DIR":"$(BUILD_DIR)/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME)/fl_downloader","EXPANDED_CODE_SIGN_IDENTITY":"-","IBSC_MODULE":"fl_downloader","INFOPLIST_FILE":"Target Support Files/fl_downloader/ResourceBundle-fl_downloader_privacy-fl_downloader-Info.plist","IPHONEOS_DEPLOYMENT_TARGET":"9.0","PRODUCT_NAME":"fl_downloader_privacy","SDKROOT":"iphoneos","SKIP_INSTALL":"YES","TARGETED_DEVICE_FAMILY":"1,2","VALIDATE_PRODUCT":"YES","WRAPPER_EXTENSION":"bundle"},"guid":"bfdfe7dc352907fc980b868725387e98c68b47ec61c5cde3fadfea8837611f8e","name":"Profile"},{"baseConfigurationFileReference":"bfdfe7dc352907fc980b868725387e98c91d9e268657e7dd6c060d3e603cc2b1","buildSettings":{"CODE_SIGNING_ALLOWED":"NO","CODE_SIGNING_IDENTITY":"-","CODE_SIGNING_REQUIRED":"NO","CONFIGURATION_BUILD_DIR":"$(BUILD_DIR)/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME)/fl_downloader","EXPANDED_CODE_SIGN_IDENTITY":"-","IBSC_MODULE":"fl_downloader","INFOPLIST_FILE":"Target Support Files/fl_downloader/ResourceBundle-fl_downloader_privacy-fl_downloader-Info.plist","IPHONEOS_DEPLOYMENT_TARGET":"9.0","PRODUCT_NAME":"fl_downloader_privacy","SDKROOT":"iphoneos","SKIP_INSTALL":"YES","TARGETED_DEVICE_FAMILY":"1,2","WRAPPER_EXTENSION":"bundle"},"guid":"bfdfe7dc352907fc980b868725387e9829bfc4b15e8bff2687d3072f648c807f","name":"Release"}],"buildPhases":[{"buildFiles":[],"guid":"bfdfe7dc352907fc980b868725387e98105b212d6bda99b4525303daa6279240","type":"com.apple.buildphase.sources"},{"buildFiles":[],"guid":"bfdfe7dc352907fc980b868725387e98b38bb11290a0f3cb4344a95bb29dc03e","type":"com.apple.buildphase.frameworks"},{"buildFiles":[{"fileReference":"bfdfe7dc352907fc980b868725387e9831fe485b45a69a8422a609fface14279","guid":"bfdfe7dc352907fc980b868725387e98c78b6e00db5873683b83629ebf8b0578"}],"guid":"bfdfe7dc352907fc980b868725387e98f211d7ac8c20ab3b210377b8f3ef8a71","type":"com.apple.buildphase.resources"}],"buildRules":[],"dependencies":[],"guid":"bfdfe7dc352907fc980b868725387e98abdd64503b5f23b8e73dd13a311548b1","name":"fl_downloader-fl_downloader_privacy","productReference":{"guid":"bfdfe7dc352907fc980b868725387e98e14c0052b63c62c18c33ff7e46988a66","name":"fl_downloader_privacy.bundle","type":"product"},"productTypeIdentifier":"com.apple.product-type.bundle","provisioningSourceData":[{"bundleIdentifierFromInfoPlist":"${PRODUCT_BUNDLE_IDENTIFIER}","configurationName":"Debug","provisioningStyle":0},{"bundleIdentifierFromInfoPlist":"${PRODUCT_BUNDLE_IDENTIFIER}","configurationName":"Profile","provisioningStyle":0},{"bundleIdentifierFromInfoPlist":"${PRODUCT_BUNDLE_IDENTIFIER}","configurationName":"Release","provisioningStyle":0}],"type":"standard"} \ No newline at end of file diff --git a/mih_ui/android/build/ios/XCBuildData/PIFCache/target/TARGET@v11_hash=f8fcc6d355b2806d43f663daae6a06d4-json b/mih_ui/android/build/ios/XCBuildData/PIFCache/target/TARGET@v11_hash=f8fcc6d355b2806d43f663daae6a06d4-json new file mode 100644 index 00000000..3b8047e0 --- /dev/null +++ b/mih_ui/android/build/ios/XCBuildData/PIFCache/target/TARGET@v11_hash=f8fcc6d355b2806d43f663daae6a06d4-json @@ -0,0 +1 @@ +{"buildConfigurations":[{"baseConfigurationFileReference":"bfdfe7dc352907fc980b868725387e989ea1b5ad8cedbe34b515d7efe8552fea","buildSettings":{"CLANG_ENABLE_OBJC_WEAK":"NO","CODE_SIGN_IDENTITY[sdk=appletvos*]":"","CODE_SIGN_IDENTITY[sdk=iphoneos*]":"","CODE_SIGN_IDENTITY[sdk=watchos*]":"","CURRENT_PROJECT_VERSION":"1","DEFINES_MODULE":"YES","DYLIB_COMPATIBILITY_VERSION":"1","DYLIB_CURRENT_VERSION":"1","DYLIB_INSTALL_NAME_BASE":"@rpath","ENABLE_MODULE_VERIFIER":"NO","ENABLE_USER_SCRIPT_SANDBOXING":"NO","GENERATE_INFOPLIST_FILE":"NO","INFOPLIST_FILE":"Target Support Files/AppCheckCore/AppCheckCore-Info.plist","INSTALL_PATH":"$(LOCAL_LIBRARY_DIR)/Frameworks","IPHONEOS_DEPLOYMENT_TARGET":"12.0","LD_RUNPATH_SEARCH_PATHS":"$(inherited) @executable_path/Frameworks @loader_path/Frameworks","MODULEMAP_FILE":"Target Support Files/AppCheckCore/AppCheckCore.modulemap","ONLY_ACTIVE_ARCH":"NO","PRODUCT_MODULE_NAME":"AppCheckCore","PRODUCT_NAME":"AppCheckCore","SDKROOT":"iphoneos","SKIP_INSTALL":"YES","SWIFT_ACTIVE_COMPILATION_CONDITIONS":"$(inherited) ","SWIFT_INSTALL_OBJC_HEADER":"YES","SWIFT_VERSION":"5.5","TARGETED_DEVICE_FAMILY":"1,2","VERSIONING_SYSTEM":"apple-generic","VERSION_INFO_PREFIX":""},"guid":"bfdfe7dc352907fc980b868725387e98e7a99df6e6a4873f55b3ad33955c73d7","name":"Debug"},{"baseConfigurationFileReference":"bfdfe7dc352907fc980b868725387e98bc298d5906127a42ca6675d4cbce0891","buildSettings":{"CLANG_ENABLE_OBJC_WEAK":"NO","CODE_SIGN_IDENTITY[sdk=appletvos*]":"","CODE_SIGN_IDENTITY[sdk=iphoneos*]":"","CODE_SIGN_IDENTITY[sdk=watchos*]":"","CURRENT_PROJECT_VERSION":"1","DEFINES_MODULE":"YES","DYLIB_COMPATIBILITY_VERSION":"1","DYLIB_CURRENT_VERSION":"1","DYLIB_INSTALL_NAME_BASE":"@rpath","ENABLE_MODULE_VERIFIER":"NO","ENABLE_USER_SCRIPT_SANDBOXING":"NO","GENERATE_INFOPLIST_FILE":"NO","INFOPLIST_FILE":"Target Support Files/AppCheckCore/AppCheckCore-Info.plist","INSTALL_PATH":"$(LOCAL_LIBRARY_DIR)/Frameworks","IPHONEOS_DEPLOYMENT_TARGET":"12.0","LD_RUNPATH_SEARCH_PATHS":"$(inherited) @executable_path/Frameworks @loader_path/Frameworks","MODULEMAP_FILE":"Target Support Files/AppCheckCore/AppCheckCore.modulemap","PRODUCT_MODULE_NAME":"AppCheckCore","PRODUCT_NAME":"AppCheckCore","SDKROOT":"iphoneos","SKIP_INSTALL":"YES","SWIFT_ACTIVE_COMPILATION_CONDITIONS":"$(inherited) ","SWIFT_INSTALL_OBJC_HEADER":"YES","SWIFT_VERSION":"5.5","TARGETED_DEVICE_FAMILY":"1,2","VALIDATE_PRODUCT":"YES","VERSIONING_SYSTEM":"apple-generic","VERSION_INFO_PREFIX":""},"guid":"bfdfe7dc352907fc980b868725387e98961e7c9baafe5b4e26a5c59132394731","name":"Profile"},{"baseConfigurationFileReference":"bfdfe7dc352907fc980b868725387e98bc298d5906127a42ca6675d4cbce0891","buildSettings":{"CLANG_ENABLE_OBJC_WEAK":"NO","CODE_SIGN_IDENTITY[sdk=appletvos*]":"","CODE_SIGN_IDENTITY[sdk=iphoneos*]":"","CODE_SIGN_IDENTITY[sdk=watchos*]":"","CURRENT_PROJECT_VERSION":"1","DEFINES_MODULE":"YES","DYLIB_COMPATIBILITY_VERSION":"1","DYLIB_CURRENT_VERSION":"1","DYLIB_INSTALL_NAME_BASE":"@rpath","ENABLE_MODULE_VERIFIER":"NO","ENABLE_USER_SCRIPT_SANDBOXING":"NO","GENERATE_INFOPLIST_FILE":"NO","INFOPLIST_FILE":"Target Support Files/AppCheckCore/AppCheckCore-Info.plist","INSTALL_PATH":"$(LOCAL_LIBRARY_DIR)/Frameworks","IPHONEOS_DEPLOYMENT_TARGET":"12.0","LD_RUNPATH_SEARCH_PATHS":"$(inherited) @executable_path/Frameworks @loader_path/Frameworks","MODULEMAP_FILE":"Target Support Files/AppCheckCore/AppCheckCore.modulemap","PRODUCT_MODULE_NAME":"AppCheckCore","PRODUCT_NAME":"AppCheckCore","SDKROOT":"iphoneos","SKIP_INSTALL":"YES","SWIFT_ACTIVE_COMPILATION_CONDITIONS":"$(inherited) ","SWIFT_INSTALL_OBJC_HEADER":"YES","SWIFT_VERSION":"5.5","TARGETED_DEVICE_FAMILY":"1,2","VALIDATE_PRODUCT":"YES","VERSIONING_SYSTEM":"apple-generic","VERSION_INFO_PREFIX":""},"guid":"bfdfe7dc352907fc980b868725387e98a5e2f4ec47caf1c35a822cf8398efdf7","name":"Release"}],"buildPhases":[{"buildFiles":[{"fileReference":"bfdfe7dc352907fc980b868725387e98014d81339f7078c553aad067e2c1e542","guid":"bfdfe7dc352907fc980b868725387e983a7f56a8bda7f4a32b582f3e3543ec6b","headerVisibility":"public"},{"fileReference":"bfdfe7dc352907fc980b868725387e981b9edf1174753b93be76528df893f4d1","guid":"bfdfe7dc352907fc980b868725387e98eefa1fbb52d5820fb2f74287e89fa5be","headerVisibility":"public"},{"fileReference":"bfdfe7dc352907fc980b868725387e9828b098957cb273088cb9694f57f6aa9b","guid":"bfdfe7dc352907fc980b868725387e98731bf14971647468f98880f5ab2ecebd"},{"fileReference":"bfdfe7dc352907fc980b868725387e982d5afb74f6affa743e0f460b5372128c","guid":"bfdfe7dc352907fc980b868725387e985188a1987f7cf2a34653743fc646f39e"},{"fileReference":"bfdfe7dc352907fc980b868725387e98c693a9d5b43f3dd47c9a722b20606f0d","guid":"bfdfe7dc352907fc980b868725387e988f117cd19bea713411f7d886e3ee57f4"},{"fileReference":"bfdfe7dc352907fc980b868725387e9895fad991994f740ea3a0d0ae15aa1ae4","guid":"bfdfe7dc352907fc980b868725387e98f7013b8d08955f03cd9ad217b6575ec4"},{"fileReference":"bfdfe7dc352907fc980b868725387e9879746c4764bdf06155261adb67d0ecda","guid":"bfdfe7dc352907fc980b868725387e98c3717fce461d8c3c727f6ab1e1ef8dd8"},{"fileReference":"bfdfe7dc352907fc980b868725387e9858fc7456770843d79df60a4fac1e1f21","guid":"bfdfe7dc352907fc980b868725387e98971d704d92f697bb1c3431227aeca581"},{"fileReference":"bfdfe7dc352907fc980b868725387e98881b0a9e4c6413cc3a4330c7764cb89e","guid":"bfdfe7dc352907fc980b868725387e987fb0a97b5514da31c86f2442dd9c5c3f","headerVisibility":"public"},{"fileReference":"bfdfe7dc352907fc980b868725387e98fb187d533907cbad809ebd88436c4a78","guid":"bfdfe7dc352907fc980b868725387e98557eecafb08f3d4c91d7a27a04cbc98f"},{"fileReference":"bfdfe7dc352907fc980b868725387e987f13dc02d10ed5c4ba105bb7b6fbc4e4","guid":"bfdfe7dc352907fc980b868725387e9831a692eeee4b67a14159ea381967273a"},{"fileReference":"bfdfe7dc352907fc980b868725387e98492f8c730664e908ffe340f7496c9f79","guid":"bfdfe7dc352907fc980b868725387e986a533507042bc1b488b8d411b4e467dd"},{"fileReference":"bfdfe7dc352907fc980b868725387e98aea1bf88784f644740e8ef1f765d1763","guid":"bfdfe7dc352907fc980b868725387e98ae7871cec43b2a430799debd34abfca4"},{"fileReference":"bfdfe7dc352907fc980b868725387e98f0b1f732a61c77e8d848d5868deb0b62","guid":"bfdfe7dc352907fc980b868725387e9843848d640b95d66ae7b0609d40822a18","headerVisibility":"public"},{"fileReference":"bfdfe7dc352907fc980b868725387e9837bc6335678372d578e6d02db1629af0","guid":"bfdfe7dc352907fc980b868725387e985df37ff259fbebfcef0385a6ec8da199"},{"fileReference":"bfdfe7dc352907fc980b868725387e98c61395722d06659205139c45a25e2676","guid":"bfdfe7dc352907fc980b868725387e98f8b9a4332a9d35d417da9e60a68e1e5f","headerVisibility":"public"},{"fileReference":"bfdfe7dc352907fc980b868725387e98da0f4edada96d01491b50b373b8e2d17","guid":"bfdfe7dc352907fc980b868725387e987016ef18ef8e69d7bc59d3c64c1062eb"},{"fileReference":"bfdfe7dc352907fc980b868725387e98b1e121e7f892a1088bfc28fd83c4b2dc","guid":"bfdfe7dc352907fc980b868725387e98638fdbf659b7db656daaabefeb0fa1e0"},{"fileReference":"bfdfe7dc352907fc980b868725387e9838ab10c273a7e47d831e4ac8a3a5ac4c","guid":"bfdfe7dc352907fc980b868725387e982366610e765f0b5c67b62d5d700c6ccd","headerVisibility":"public"},{"fileReference":"bfdfe7dc352907fc980b868725387e98dac18db19a745421b5c65b10b4f4d79a","guid":"bfdfe7dc352907fc980b868725387e98201a1ca6306b21611dc8f609d62d8e10"},{"fileReference":"bfdfe7dc352907fc980b868725387e98e1dae2413b60766fd26fdafb05789b08","guid":"bfdfe7dc352907fc980b868725387e9805d1768fe792537334f391c041c31f35","headerVisibility":"public"},{"fileReference":"bfdfe7dc352907fc980b868725387e9829d2cfb34695f3b70daac392c3ac42be","guid":"bfdfe7dc352907fc980b868725387e981ca2893936b4e0ab83db00de99e3fe4b"},{"fileReference":"bfdfe7dc352907fc980b868725387e9840d287a87e37c64d0a718e1abe22ea0b","guid":"bfdfe7dc352907fc980b868725387e98df05095938a6e6a95d183f2debb7eeca"},{"fileReference":"bfdfe7dc352907fc980b868725387e98cd2ca0d4f82d3b33ee4ad429fe8459b0","guid":"bfdfe7dc352907fc980b868725387e988f3992c3226d3fffed029e44a32d785f","headerVisibility":"public"},{"fileReference":"bfdfe7dc352907fc980b868725387e98bd9686f220f85a0a984b226ac6bf56e2","guid":"bfdfe7dc352907fc980b868725387e98325b799f84feca7cce3ae0c158b3d6d7"},{"fileReference":"bfdfe7dc352907fc980b868725387e9874128677a6ece04c6192ff43793cd2a3","guid":"bfdfe7dc352907fc980b868725387e98d73be45a5c15dbc80c5e29415079a21a","headerVisibility":"public"},{"fileReference":"bfdfe7dc352907fc980b868725387e98782156c69d76c8c6493e13d013c7ce68","guid":"bfdfe7dc352907fc980b868725387e9895e853d89407c6a61308b8ed634f6c83","headerVisibility":"public"},{"fileReference":"bfdfe7dc352907fc980b868725387e986a8e8f52ce1983fc319f91887811f274","guid":"bfdfe7dc352907fc980b868725387e983f07250a53c4dcc69dfbcf67ebdc325b"},{"fileReference":"bfdfe7dc352907fc980b868725387e9829195948780728699af6ecdf82603694","guid":"bfdfe7dc352907fc980b868725387e987481fc11365e35e19c58f07f6f4b732c"},{"fileReference":"bfdfe7dc352907fc980b868725387e98e10e47fb86648c98be3656c0ccca10e5","guid":"bfdfe7dc352907fc980b868725387e985b6c7b86e2e3ddab6f8772c5362a6fba"},{"fileReference":"bfdfe7dc352907fc980b868725387e9818e104a51a5ccc214c42f6a98edeef45","guid":"bfdfe7dc352907fc980b868725387e988919c6af1499779a90e7598a5e84fabe"},{"fileReference":"bfdfe7dc352907fc980b868725387e98a20441f218b6e5f9df32f6fd2cd3c3a6","guid":"bfdfe7dc352907fc980b868725387e98d6d0fe9c6b6c404e0d62b0cbcd05dfdf","headerVisibility":"public"},{"fileReference":"bfdfe7dc352907fc980b868725387e98ab95d45482b4f15cf9b35a49cabce56a","guid":"bfdfe7dc352907fc980b868725387e9810d41d30cf3c158f9509077744b70505"},{"fileReference":"bfdfe7dc352907fc980b868725387e98ed76d12f5c543a6a57822cdb488c14fc","guid":"bfdfe7dc352907fc980b868725387e9865d6cb4f29a80f2f2ce4e60e0090a0bb","headerVisibility":"public"},{"fileReference":"bfdfe7dc352907fc980b868725387e98835e9bec84d11ab061c8232c82eb1d7e","guid":"bfdfe7dc352907fc980b868725387e98ea323f1a49908e40b0b598e61db59b71"},{"fileReference":"bfdfe7dc352907fc980b868725387e9806f6d128aff99460ffc6c94ba1bc162c","guid":"bfdfe7dc352907fc980b868725387e9866a81d67491e84a3ef0e7b3befdbdaba"},{"fileReference":"bfdfe7dc352907fc980b868725387e980c5f74743a1066c09331ff78287d8b6a","guid":"bfdfe7dc352907fc980b868725387e98f9a04fb7607f394362f9bff3a632b600","headerVisibility":"public"},{"fileReference":"bfdfe7dc352907fc980b868725387e98b18aaaf052e27db0b53d9fa8af58d2c2","guid":"bfdfe7dc352907fc980b868725387e98c1b9cbe39894801763b170085b67c5ad"},{"fileReference":"bfdfe7dc352907fc980b868725387e98ea3377b1e0c0bdef3341745d6980d9c2","guid":"bfdfe7dc352907fc980b868725387e984e87e4b3e6b500cceaa46ede0ec13dfb","headerVisibility":"public"},{"fileReference":"bfdfe7dc352907fc980b868725387e986d751b4b66302242538b97dc19e6cc3c","guid":"bfdfe7dc352907fc980b868725387e9804e24ee381ecd94ecdaeb870ed0114ce"},{"fileReference":"bfdfe7dc352907fc980b868725387e98a451f8861c61957089616af539f9e48b","guid":"bfdfe7dc352907fc980b868725387e987e8729dc670ba4e8dc2e7ab782a73fb8"},{"fileReference":"bfdfe7dc352907fc980b868725387e98695cb111b5ba9a097c1007af207f49de","guid":"bfdfe7dc352907fc980b868725387e980673b86a47f0fe84859c2176137bfbd7"}],"guid":"bfdfe7dc352907fc980b868725387e98dc3f6c017f50c3291e26862a62071ad6","type":"com.apple.buildphase.headers"},{"buildFiles":[{"fileReference":"bfdfe7dc352907fc980b868725387e98c7d21c3328d9ad46039795667d6cc430","guid":"bfdfe7dc352907fc980b868725387e981251f36c01e0bb324ca1cf7a8d9bddb0"},{"fileReference":"bfdfe7dc352907fc980b868725387e98eda68ffa8acf6341bdd6764dc69f14ea","guid":"bfdfe7dc352907fc980b868725387e98d8db050f1c7a5fd0ec0a4596c587f92c"},{"fileReference":"bfdfe7dc352907fc980b868725387e98c82d9f039480b6a3f302f98e59983983","guid":"bfdfe7dc352907fc980b868725387e98251d465f7239177f9eb05186be427f1b"},{"fileReference":"bfdfe7dc352907fc980b868725387e98539f97205232fdc1451a9f7c8097d9f6","guid":"bfdfe7dc352907fc980b868725387e98b9bf91278debb41b3833f220f1b435bc"},{"fileReference":"bfdfe7dc352907fc980b868725387e98b83a24afd65346b2bf12ca652c517f99","guid":"bfdfe7dc352907fc980b868725387e98af769f021239e440439d2f37c2a8b47a"},{"fileReference":"bfdfe7dc352907fc980b868725387e98087e9537dc37fc002b865cca978e783c","guid":"bfdfe7dc352907fc980b868725387e98f4410e2eefcc5e3073d1057d8a440acc"},{"fileReference":"bfdfe7dc352907fc980b868725387e988feba12f52eda30148e94b936a418633","guid":"bfdfe7dc352907fc980b868725387e981c659a32af5c88dd60c9e7e92e503c73"},{"fileReference":"bfdfe7dc352907fc980b868725387e98577f1fe42e5dc5c2e7e55299acf301aa","guid":"bfdfe7dc352907fc980b868725387e98385e9f712da19f3fdeab81bd33335d87"},{"fileReference":"bfdfe7dc352907fc980b868725387e98358267319aee2a1f6097c2d48c844228","guid":"bfdfe7dc352907fc980b868725387e98a44cf29d16204615eb6acc6a177ed90d"},{"fileReference":"bfdfe7dc352907fc980b868725387e98ca28cb9281f2e84ed045a06550b0e564","guid":"bfdfe7dc352907fc980b868725387e981759ea69ef13d9431585b07246de10e5"},{"fileReference":"bfdfe7dc352907fc980b868725387e985813b18e8935c4f95e05bcd74f837249","guid":"bfdfe7dc352907fc980b868725387e98c7a014a0f2696eb65fdde5d95ff8a377"},{"fileReference":"bfdfe7dc352907fc980b868725387e9827ca8bd13e7ceee923e143162527ddf4","guid":"bfdfe7dc352907fc980b868725387e987d3c88b047f31c79453e480da1cee745"},{"fileReference":"bfdfe7dc352907fc980b868725387e984e54641bd8600d981f2b8ae39a870e00","guid":"bfdfe7dc352907fc980b868725387e98754dd466afb74dc55b83de8dbd18dd4e"},{"fileReference":"bfdfe7dc352907fc980b868725387e98174dfe48f0936468875402ed704dabc2","guid":"bfdfe7dc352907fc980b868725387e98d346057307b65a0c4cb63b7ce2cfbc65"},{"fileReference":"bfdfe7dc352907fc980b868725387e9829007e4ebcafeb1e46a41c025d1c75c6","guid":"bfdfe7dc352907fc980b868725387e9831a5a7cf4456b84e8b2fb59d15681b76"},{"fileReference":"bfdfe7dc352907fc980b868725387e984be13140013cec049e7b151fd1988622","guid":"bfdfe7dc352907fc980b868725387e98630b01bae14ac405faf80a562b3c32b2"},{"fileReference":"bfdfe7dc352907fc980b868725387e9808d0d0571ccc4b7e15d946a45268ab43","guid":"bfdfe7dc352907fc980b868725387e98c9f34912719e77ba96475461238e0e02"},{"fileReference":"bfdfe7dc352907fc980b868725387e98f3de26ba5b5c36f5aeffb5c06f1623ec","guid":"bfdfe7dc352907fc980b868725387e984867af3440057818079d08ea0c4d6195"},{"fileReference":"bfdfe7dc352907fc980b868725387e981cf6381f55e9ecb15799f109ba22813e","guid":"bfdfe7dc352907fc980b868725387e9804dbc6bc4a995fc03805e33bbdc61583"},{"fileReference":"bfdfe7dc352907fc980b868725387e9893049ceada4e29aa457dfc968b35d04d","guid":"bfdfe7dc352907fc980b868725387e98d92cafd93ccc407f0b67993abcefdce5"},{"fileReference":"bfdfe7dc352907fc980b868725387e983ef18a79e17b5bdc30cb4f2b4274fdb9","guid":"bfdfe7dc352907fc980b868725387e9820143a2be1e220fac8de61a11087c01f"},{"fileReference":"bfdfe7dc352907fc980b868725387e982441595d23425e7fc95dc3f4a540e4da","guid":"bfdfe7dc352907fc980b868725387e98f5c29ea9255f8220e21e5404dc5a3f8e"},{"fileReference":"bfdfe7dc352907fc980b868725387e982b8462cd169d1e0749ac27072f89f63e","guid":"bfdfe7dc352907fc980b868725387e982693cc42ebb05a72e63217341d71bd9e"},{"fileReference":"bfdfe7dc352907fc980b868725387e9828e7a28a227cdf431de4bf2858a41bbe","guid":"bfdfe7dc352907fc980b868725387e985d0530ef6188ebe958e1f0d3f3298d82"},{"fileReference":"bfdfe7dc352907fc980b868725387e987533d8eadf98de75a39414c45f84c97a","guid":"bfdfe7dc352907fc980b868725387e9829041b1e039eb006c470ff92591bf911"},{"fileReference":"bfdfe7dc352907fc980b868725387e98f4e9b20932af00aaa09e6fad037bc675","guid":"bfdfe7dc352907fc980b868725387e98b92b9cf860855796967f283ce7415d09"},{"fileReference":"bfdfe7dc352907fc980b868725387e988d91cc71f5ce438497a6057117f8c354","guid":"bfdfe7dc352907fc980b868725387e98debe9957367259f62596ede328df84af"},{"fileReference":"bfdfe7dc352907fc980b868725387e985f834f5e6923ec908549b8f62a618c71","guid":"bfdfe7dc352907fc980b868725387e98ec8f6bff25068400792a0da62301d62a"},{"fileReference":"bfdfe7dc352907fc980b868725387e98234709d52c7321a4980d4abdb69bdab2","guid":"bfdfe7dc352907fc980b868725387e981808cef69632857ddb48af8a1b5faf76"},{"fileReference":"bfdfe7dc352907fc980b868725387e98c749ee5587e64f95f2b09ed09f61b050","guid":"bfdfe7dc352907fc980b868725387e980f230ea024b72dbc683a1fabead8d6bf"},{"fileReference":"bfdfe7dc352907fc980b868725387e9848eaaee93b51e8f77bc9842360a966dd","guid":"bfdfe7dc352907fc980b868725387e98deca3a41ff15842151e1be841cc3fff0"},{"fileReference":"bfdfe7dc352907fc980b868725387e98a68711618db6b4b78c1e1f9eba53a069","guid":"bfdfe7dc352907fc980b868725387e98f21ff164321f2d57d89d63e9fa8d5d8e"},{"fileReference":"bfdfe7dc352907fc980b868725387e9827dd64bc5511da2695473b94ff768e19","guid":"bfdfe7dc352907fc980b868725387e981618ab1789cddc3783305bb624a1280e"},{"fileReference":"bfdfe7dc352907fc980b868725387e98c0bd7a1ba78b0e4556aa605a1ba1a2e1","guid":"bfdfe7dc352907fc980b868725387e98c367e72e8bce33e83d8a76f05c126e9d"},{"fileReference":"bfdfe7dc352907fc980b868725387e98bbce17ed01d5c32b82156eaf7a9cc458","guid":"bfdfe7dc352907fc980b868725387e98c36efdc476e07ebbd7263ace396ae758"}],"guid":"bfdfe7dc352907fc980b868725387e98053600d677a0ee3a6e8294a5f6c29926","type":"com.apple.buildphase.sources"},{"buildFiles":[{"fileReference":"bfdfe7dc352907fc980b868725387e98b14af7c49882340ad551cb13b0a1e06d","guid":"bfdfe7dc352907fc980b868725387e98a7f5c11a3ddc6c6109c703c9daffc90f"}],"guid":"bfdfe7dc352907fc980b868725387e986ef21295949b1adf438aaa172cba7c15","type":"com.apple.buildphase.frameworks"},{"buildFiles":[],"guid":"bfdfe7dc352907fc980b868725387e987799c6ff721a2f90b939c7d64edb78cc","type":"com.apple.buildphase.resources"}],"buildRules":[],"dependencies":[{"guid":"bfdfe7dc352907fc980b868725387e98718890dfdac589615663a02d43d9af3e","name":"GoogleUtilities"},{"guid":"bfdfe7dc352907fc980b868725387e98f10882e1684b8a3dfdec597bc0a47af3","name":"PromisesObjC"}],"guid":"bfdfe7dc352907fc980b868725387e98cd8162b601eb6c17e4d86eec112a388c","name":"AppCheckCore","predominantSourceCodeLanguage":"Xcode.SourceCodeLanguage.Objective-C-Plus-Plus","productReference":{"guid":"bfdfe7dc352907fc980b868725387e985c8c1a45791dbc15ae7565c9ac08e62e","name":"AppCheckCore.framework","type":"product"},"productTypeIdentifier":"com.apple.product-type.framework","provisioningSourceData":[{"bundleIdentifierFromInfoPlist":"${PRODUCT_BUNDLE_IDENTIFIER}","configurationName":"Debug","provisioningStyle":1},{"bundleIdentifierFromInfoPlist":"${PRODUCT_BUNDLE_IDENTIFIER}","configurationName":"Profile","provisioningStyle":1},{"bundleIdentifierFromInfoPlist":"${PRODUCT_BUNDLE_IDENTIFIER}","configurationName":"Release","provisioningStyle":1}],"type":"standard"} \ No newline at end of file diff --git a/mih_ui/android/build/ios/XCBuildData/PIFCache/target/TARGET@v11_hash=fbb75b67977f7fd3136c2c9e82b06c66-json b/mih_ui/android/build/ios/XCBuildData/PIFCache/target/TARGET@v11_hash=fbb75b67977f7fd3136c2c9e82b06c66-json new file mode 100644 index 00000000..32110e53 --- /dev/null +++ b/mih_ui/android/build/ios/XCBuildData/PIFCache/target/TARGET@v11_hash=fbb75b67977f7fd3136c2c9e82b06c66-json @@ -0,0 +1 @@ +{"buildConfigurations":[{"baseConfigurationFileReference":"bfdfe7dc352907fc980b868725387e9858f3b516df641443530da1bc57fe9cb2","buildSettings":{"CODE_SIGNING_ALLOWED":"NO","CODE_SIGNING_IDENTITY":"-","CODE_SIGNING_REQUIRED":"NO","CONFIGURATION_BUILD_DIR":"$(BUILD_DIR)/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME)/SwiftyGif","EXPANDED_CODE_SIGN_IDENTITY":"-","IBSC_MODULE":"SwiftyGif","INFOPLIST_FILE":"Target Support Files/SwiftyGif/ResourceBundle-SwiftyGif-SwiftyGif-Info.plist","IPHONEOS_DEPLOYMENT_TARGET":"9.0","ONLY_ACTIVE_ARCH":"NO","PRODUCT_NAME":"SwiftyGif","SDKROOT":"iphoneos","SKIP_INSTALL":"YES","TARGETED_DEVICE_FAMILY":"1,2","WRAPPER_EXTENSION":"bundle"},"guid":"bfdfe7dc352907fc980b868725387e9806b9aaab628b0b376322c048fad9e215","name":"Debug"},{"baseConfigurationFileReference":"bfdfe7dc352907fc980b868725387e98ee297b6d0e4054f62dc3e42830b40034","buildSettings":{"CLANG_ENABLE_OBJC_WEAK":"NO","CODE_SIGNING_ALLOWED":"NO","CODE_SIGNING_IDENTITY":"-","CODE_SIGNING_REQUIRED":"NO","CONFIGURATION_BUILD_DIR":"$(BUILD_DIR)/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME)/SwiftyGif","EXPANDED_CODE_SIGN_IDENTITY":"-","IBSC_MODULE":"SwiftyGif","INFOPLIST_FILE":"Target Support Files/SwiftyGif/ResourceBundle-SwiftyGif-SwiftyGif-Info.plist","IPHONEOS_DEPLOYMENT_TARGET":"9.0","PRODUCT_NAME":"SwiftyGif","SDKROOT":"iphoneos","SKIP_INSTALL":"YES","TARGETED_DEVICE_FAMILY":"1,2","VALIDATE_PRODUCT":"YES","WRAPPER_EXTENSION":"bundle"},"guid":"bfdfe7dc352907fc980b868725387e986cca4cd0cfe5897bd20687cf94b99eb6","name":"Profile"},{"baseConfigurationFileReference":"bfdfe7dc352907fc980b868725387e98ee297b6d0e4054f62dc3e42830b40034","buildSettings":{"CODE_SIGNING_ALLOWED":"NO","CODE_SIGNING_IDENTITY":"-","CODE_SIGNING_REQUIRED":"NO","CONFIGURATION_BUILD_DIR":"$(BUILD_DIR)/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME)/SwiftyGif","EXPANDED_CODE_SIGN_IDENTITY":"-","IBSC_MODULE":"SwiftyGif","INFOPLIST_FILE":"Target Support Files/SwiftyGif/ResourceBundle-SwiftyGif-SwiftyGif-Info.plist","IPHONEOS_DEPLOYMENT_TARGET":"9.0","PRODUCT_NAME":"SwiftyGif","SDKROOT":"iphoneos","SKIP_INSTALL":"YES","TARGETED_DEVICE_FAMILY":"1,2","WRAPPER_EXTENSION":"bundle"},"guid":"bfdfe7dc352907fc980b868725387e98edbb20537df13b747231792e67230350","name":"Release"}],"buildPhases":[{"buildFiles":[],"guid":"bfdfe7dc352907fc980b868725387e98bf85d6781eaa8e2307ca9becfe7debd9","type":"com.apple.buildphase.sources"},{"buildFiles":[],"guid":"bfdfe7dc352907fc980b868725387e987fd9d8a6181d78ab5a9c86986248aa32","type":"com.apple.buildphase.frameworks"},{"buildFiles":[{"fileReference":"bfdfe7dc352907fc980b868725387e98b3294ad38a1a774f918eb06a0d82d5fc","guid":"bfdfe7dc352907fc980b868725387e9823ca68cbbab4250d50c6ef9758b67ab4"}],"guid":"bfdfe7dc352907fc980b868725387e98617f31f14f5d20f06300593fb19e3def","type":"com.apple.buildphase.resources"}],"buildRules":[],"dependencies":[],"guid":"bfdfe7dc352907fc980b868725387e98f5cd644fc2aeb8654450a2168f52697c","name":"SwiftyGif-SwiftyGif","productReference":{"guid":"bfdfe7dc352907fc980b868725387e9824d08d80a11ec6e34ca1c1e17eca0844","name":"SwiftyGif.bundle","type":"product"},"productTypeIdentifier":"com.apple.product-type.bundle","provisioningSourceData":[{"bundleIdentifierFromInfoPlist":"${PRODUCT_BUNDLE_IDENTIFIER}","configurationName":"Debug","provisioningStyle":0},{"bundleIdentifierFromInfoPlist":"${PRODUCT_BUNDLE_IDENTIFIER}","configurationName":"Profile","provisioningStyle":0},{"bundleIdentifierFromInfoPlist":"${PRODUCT_BUNDLE_IDENTIFIER}","configurationName":"Release","provisioningStyle":0}],"type":"standard"} \ No newline at end of file diff --git a/mih_ui/android/build/ios/XCBuildData/PIFCache/target/TARGET@v11_hash=ff36872ab1512227359a12a6bdfb005a-json b/mih_ui/android/build/ios/XCBuildData/PIFCache/target/TARGET@v11_hash=ff36872ab1512227359a12a6bdfb005a-json new file mode 100644 index 00000000..3ff304b9 --- /dev/null +++ b/mih_ui/android/build/ios/XCBuildData/PIFCache/target/TARGET@v11_hash=ff36872ab1512227359a12a6bdfb005a-json @@ -0,0 +1 @@ +{"buildConfigurations":[{"baseConfigurationFileReference":"bfdfe7dc352907fc980b868725387e984e4a588da55ed3c53fbd1e10e58fd1c6","buildSettings":{"CLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER":"NO","CODE_SIGN_IDENTITY[sdk=appletvos*]":"","CODE_SIGN_IDENTITY[sdk=iphoneos*]":"","CODE_SIGN_IDENTITY[sdk=watchos*]":"","CURRENT_PROJECT_VERSION":"1","DYLIB_COMPATIBILITY_VERSION":"1","DYLIB_CURRENT_VERSION":"1","DYLIB_INSTALL_NAME_BASE":"@rpath","ENABLE_BITCODE":"NO","ENABLE_MODULE_VERIFIER":"NO","ENABLE_USER_SCRIPT_SANDBOXING":"NO","EXCLUDED_ARCHS[sdk=iphoneos*]":"$(inherited) armv7","EXCLUDED_ARCHS[sdk=iphonesimulator*]":"$(inherited) i386","FRAMEWORK_SEARCH_PATHS[sdk=iphoneos*]":"\"/Users/yaso_meth/Git/flutter/bin/cache/artifacts/engine/ios/Flutter.xcframework/ios-arm64\" $(inherited)","FRAMEWORK_SEARCH_PATHS[sdk=iphonesimulator*]":"\"/Users/yaso_meth/Git/flutter/bin/cache/artifacts/engine/ios/Flutter.xcframework/ios-arm64_x86_64-simulator\" $(inherited)","GCC_PREFIX_HEADER":"Target Support Files/fl_downloader/fl_downloader-prefix.pch","GENERATE_INFOPLIST_FILE":"NO","INFOPLIST_FILE":"Target Support Files/fl_downloader/fl_downloader-Info.plist","INSTALL_PATH":"$(LOCAL_LIBRARY_DIR)/Frameworks","LD_RUNPATH_SEARCH_PATHS":"$(inherited) @executable_path/Frameworks @loader_path/Frameworks","MODULEMAP_FILE":"Target Support Files/fl_downloader/fl_downloader.modulemap","ONLY_ACTIVE_ARCH":"NO","OTHER_LDFLAGS":"$(inherited) -framework Flutter","PRODUCT_MODULE_NAME":"fl_downloader","PRODUCT_NAME":"fl_downloader","SDKROOT":"iphoneos","SKIP_INSTALL":"YES","SWIFT_ACTIVE_COMPILATION_CONDITIONS":"$(inherited) ","SWIFT_INSTALL_OBJC_HEADER":"YES","SWIFT_VERSION":"5.0","TARGETED_DEVICE_FAMILY":"1,2","VALID_ARCHS[sdk=iphonesimulator*]":"$(ARCHS_STANDARD)","VERSIONING_SYSTEM":"apple-generic","VERSION_INFO_PREFIX":""},"guid":"bfdfe7dc352907fc980b868725387e98b3e9af480c11026dda651b1a259d5331","name":"Debug"},{"baseConfigurationFileReference":"bfdfe7dc352907fc980b868725387e98c91d9e268657e7dd6c060d3e603cc2b1","buildSettings":{"CLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER":"NO","CODE_SIGN_IDENTITY[sdk=appletvos*]":"","CODE_SIGN_IDENTITY[sdk=iphoneos*]":"","CODE_SIGN_IDENTITY[sdk=watchos*]":"","CURRENT_PROJECT_VERSION":"1","DYLIB_COMPATIBILITY_VERSION":"1","DYLIB_CURRENT_VERSION":"1","DYLIB_INSTALL_NAME_BASE":"@rpath","ENABLE_BITCODE":"NO","ENABLE_MODULE_VERIFIER":"NO","ENABLE_USER_SCRIPT_SANDBOXING":"NO","EXCLUDED_ARCHS[sdk=iphoneos*]":"$(inherited) armv7","EXCLUDED_ARCHS[sdk=iphonesimulator*]":"$(inherited) i386","FRAMEWORK_SEARCH_PATHS[sdk=iphoneos*]":"\"/Users/yaso_meth/Git/flutter/bin/cache/artifacts/engine/ios-release/Flutter.xcframework/ios-arm64\" $(inherited)","FRAMEWORK_SEARCH_PATHS[sdk=iphonesimulator*]":"\"/Users/yaso_meth/Git/flutter/bin/cache/artifacts/engine/ios-release/Flutter.xcframework/ios-arm64_x86_64-simulator\" $(inherited)","GCC_PREFIX_HEADER":"Target Support Files/fl_downloader/fl_downloader-prefix.pch","GENERATE_INFOPLIST_FILE":"NO","INFOPLIST_FILE":"Target Support Files/fl_downloader/fl_downloader-Info.plist","INSTALL_PATH":"$(LOCAL_LIBRARY_DIR)/Frameworks","LD_RUNPATH_SEARCH_PATHS":"$(inherited) @executable_path/Frameworks @loader_path/Frameworks","MODULEMAP_FILE":"Target Support Files/fl_downloader/fl_downloader.modulemap","OTHER_LDFLAGS":"$(inherited) -framework Flutter","PRODUCT_MODULE_NAME":"fl_downloader","PRODUCT_NAME":"fl_downloader","SDKROOT":"iphoneos","SKIP_INSTALL":"YES","SWIFT_ACTIVE_COMPILATION_CONDITIONS":"$(inherited) ","SWIFT_INSTALL_OBJC_HEADER":"YES","SWIFT_VERSION":"5.0","TARGETED_DEVICE_FAMILY":"1,2","VALIDATE_PRODUCT":"YES","VALID_ARCHS[sdk=iphonesimulator*]":"$(ARCHS_STANDARD)","VERSIONING_SYSTEM":"apple-generic","VERSION_INFO_PREFIX":""},"guid":"bfdfe7dc352907fc980b868725387e9811e0df8bbacae27f0a82a011919f4e9b","name":"Profile"},{"baseConfigurationFileReference":"bfdfe7dc352907fc980b868725387e98c91d9e268657e7dd6c060d3e603cc2b1","buildSettings":{"CLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER":"NO","CODE_SIGN_IDENTITY[sdk=appletvos*]":"","CODE_SIGN_IDENTITY[sdk=iphoneos*]":"","CODE_SIGN_IDENTITY[sdk=watchos*]":"","CURRENT_PROJECT_VERSION":"1","DYLIB_COMPATIBILITY_VERSION":"1","DYLIB_CURRENT_VERSION":"1","DYLIB_INSTALL_NAME_BASE":"@rpath","ENABLE_BITCODE":"NO","ENABLE_MODULE_VERIFIER":"NO","ENABLE_USER_SCRIPT_SANDBOXING":"NO","EXCLUDED_ARCHS[sdk=iphoneos*]":"$(inherited) armv7","EXCLUDED_ARCHS[sdk=iphonesimulator*]":"$(inherited) i386","FRAMEWORK_SEARCH_PATHS[sdk=iphoneos*]":"\"/Users/yaso_meth/Git/flutter/bin/cache/artifacts/engine/ios-release/Flutter.xcframework/ios-arm64\" $(inherited)","FRAMEWORK_SEARCH_PATHS[sdk=iphonesimulator*]":"\"/Users/yaso_meth/Git/flutter/bin/cache/artifacts/engine/ios-release/Flutter.xcframework/ios-arm64_x86_64-simulator\" $(inherited)","GCC_PREFIX_HEADER":"Target Support Files/fl_downloader/fl_downloader-prefix.pch","GENERATE_INFOPLIST_FILE":"NO","INFOPLIST_FILE":"Target Support Files/fl_downloader/fl_downloader-Info.plist","INSTALL_PATH":"$(LOCAL_LIBRARY_DIR)/Frameworks","LD_RUNPATH_SEARCH_PATHS":"$(inherited) @executable_path/Frameworks @loader_path/Frameworks","MODULEMAP_FILE":"Target Support Files/fl_downloader/fl_downloader.modulemap","OTHER_LDFLAGS":"$(inherited) -framework Flutter","PRODUCT_MODULE_NAME":"fl_downloader","PRODUCT_NAME":"fl_downloader","SDKROOT":"iphoneos","SKIP_INSTALL":"YES","SWIFT_ACTIVE_COMPILATION_CONDITIONS":"$(inherited) ","SWIFT_INSTALL_OBJC_HEADER":"YES","SWIFT_VERSION":"5.0","TARGETED_DEVICE_FAMILY":"1,2","VALIDATE_PRODUCT":"YES","VALID_ARCHS[sdk=iphonesimulator*]":"$(ARCHS_STANDARD)","VERSIONING_SYSTEM":"apple-generic","VERSION_INFO_PREFIX":""},"guid":"bfdfe7dc352907fc980b868725387e9895ec683195519d210f0111debbce5b1c","name":"Release"}],"buildPhases":[{"buildFiles":[{"fileReference":"bfdfe7dc352907fc980b868725387e98e9683ad27cd35a81b03f764dc06cfad0","guid":"bfdfe7dc352907fc980b868725387e986f918640bedf880f8783ce5c84300e56","headerVisibility":"public"},{"fileReference":"bfdfe7dc352907fc980b868725387e98a8bcf9b778aff46eca5e22cafa52131b","guid":"bfdfe7dc352907fc980b868725387e987a440fd8dbb8990c10e50c6d04775930","headerVisibility":"public"}],"guid":"bfdfe7dc352907fc980b868725387e980148d04120ca1e2af555fdd146152f97","type":"com.apple.buildphase.headers"},{"buildFiles":[{"fileReference":"bfdfe7dc352907fc980b868725387e9841face9f91cced866f2eca4a4b6c1da2","guid":"bfdfe7dc352907fc980b868725387e9885f8bd51676cb9cdd800921899e45cf9"},{"fileReference":"bfdfe7dc352907fc980b868725387e98914c048b53a42f42ba49718548e5cd81","guid":"bfdfe7dc352907fc980b868725387e98b5db47fc9c7ba16e239cd25e0812cfc1"},{"fileReference":"bfdfe7dc352907fc980b868725387e9851df058efa51527351690153e2e7a913","guid":"bfdfe7dc352907fc980b868725387e987e5c996dc8776989987ed9646a7c33de"}],"guid":"bfdfe7dc352907fc980b868725387e987e25f6baebcb92061fa7a3fe54d30e5d","type":"com.apple.buildphase.sources"},{"buildFiles":[{"fileReference":"bfdfe7dc352907fc980b868725387e98b14af7c49882340ad551cb13b0a1e06d","guid":"bfdfe7dc352907fc980b868725387e98400c79d78219652b39963f49b82a5dd5"}],"guid":"bfdfe7dc352907fc980b868725387e98ef6187d6ee599104273156a3c19ede19","type":"com.apple.buildphase.frameworks"},{"buildFiles":[{"guid":"bfdfe7dc352907fc980b868725387e98ca83a8acf6416e0c3bd8b6afadb8bce2","targetReference":"bfdfe7dc352907fc980b868725387e98abdd64503b5f23b8e73dd13a311548b1"}],"guid":"bfdfe7dc352907fc980b868725387e9815833bb8cff325841f5f1bc61766efa0","type":"com.apple.buildphase.resources"}],"buildRules":[],"dependencies":[{"guid":"bfdfe7dc352907fc980b868725387e989da425bb6d6d5d8dbb95e4afffb82217","name":"Flutter"},{"guid":"bfdfe7dc352907fc980b868725387e98abdd64503b5f23b8e73dd13a311548b1","name":"fl_downloader-fl_downloader_privacy"}],"guid":"bfdfe7dc352907fc980b868725387e98cfaa9701b1371f15b99c4f66ff385fb3","name":"fl_downloader","predominantSourceCodeLanguage":"Xcode.SourceCodeLanguage.Objective-C","productReference":{"guid":"bfdfe7dc352907fc980b868725387e9803300d8065febd8b73cf4bb47635a5a9","name":"fl_downloader.framework","type":"product"},"productTypeIdentifier":"com.apple.product-type.framework","provisioningSourceData":[{"bundleIdentifierFromInfoPlist":"${PRODUCT_BUNDLE_IDENTIFIER}","configurationName":"Debug","provisioningStyle":1},{"bundleIdentifierFromInfoPlist":"${PRODUCT_BUNDLE_IDENTIFIER}","configurationName":"Profile","provisioningStyle":1},{"bundleIdentifierFromInfoPlist":"${PRODUCT_BUNDLE_IDENTIFIER}","configurationName":"Release","provisioningStyle":1}],"type":"standard"} \ No newline at end of file diff --git a/mih_ui/android/build/ios/XCBuildData/PIFCache/target/TARGET@v11_hash=ff5000f2df75d09390a7c02a18cf47cb-json b/mih_ui/android/build/ios/XCBuildData/PIFCache/target/TARGET@v11_hash=ff5000f2df75d09390a7c02a18cf47cb-json new file mode 100644 index 00000000..44f24899 --- /dev/null +++ b/mih_ui/android/build/ios/XCBuildData/PIFCache/target/TARGET@v11_hash=ff5000f2df75d09390a7c02a18cf47cb-json @@ -0,0 +1 @@ +{"buildConfigurations":[{"baseConfigurationFileReference":"bfdfe7dc352907fc980b868725387e98e9790273c34cf01756c3ac2cbd541c6d","buildSettings":{"CLANG_ENABLE_OBJC_WEAK":"NO","CLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER":"NO","CODE_SIGN_IDENTITY[sdk=appletvos*]":"","CODE_SIGN_IDENTITY[sdk=iphoneos*]":"","CODE_SIGN_IDENTITY[sdk=watchos*]":"","CURRENT_PROJECT_VERSION":"1","DYLIB_COMPATIBILITY_VERSION":"1","DYLIB_CURRENT_VERSION":"1","DYLIB_INSTALL_NAME_BASE":"@rpath","ENABLE_BITCODE":"NO","ENABLE_MODULE_VERIFIER":"NO","ENABLE_USER_SCRIPT_SANDBOXING":"NO","EXCLUDED_ARCHS[sdk=iphoneos*]":"$(inherited) armv7","EXCLUDED_ARCHS[sdk=iphonesimulator*]":"$(inherited) i386","FRAMEWORK_SEARCH_PATHS[sdk=iphoneos*]":"\"/Users/yaso_meth/Git/flutter/bin/cache/artifacts/engine/ios/Flutter.xcframework/ios-arm64\" $(inherited)","FRAMEWORK_SEARCH_PATHS[sdk=iphonesimulator*]":"\"/Users/yaso_meth/Git/flutter/bin/cache/artifacts/engine/ios/Flutter.xcframework/ios-arm64_x86_64-simulator\" $(inherited)","GCC_PREFIX_HEADER":"Target Support Files/app_settings/app_settings-prefix.pch","GENERATE_INFOPLIST_FILE":"NO","INFOPLIST_FILE":"Target Support Files/app_settings/app_settings-Info.plist","INSTALL_PATH":"$(LOCAL_LIBRARY_DIR)/Frameworks","LD_RUNPATH_SEARCH_PATHS":"$(inherited) @executable_path/Frameworks @loader_path/Frameworks","MODULEMAP_FILE":"Target Support Files/app_settings/app_settings.modulemap","ONLY_ACTIVE_ARCH":"NO","OTHER_LDFLAGS":"$(inherited) -framework Flutter","PRODUCT_MODULE_NAME":"app_settings","PRODUCT_NAME":"app_settings","SDKROOT":"iphoneos","SKIP_INSTALL":"YES","SWIFT_ACTIVE_COMPILATION_CONDITIONS":"$(inherited) ","SWIFT_INSTALL_OBJC_HEADER":"YES","SWIFT_VERSION":"5.0.1","TARGETED_DEVICE_FAMILY":"1,2","VALID_ARCHS[sdk=iphonesimulator*]":"$(ARCHS_STANDARD)","VERSIONING_SYSTEM":"apple-generic","VERSION_INFO_PREFIX":""},"guid":"bfdfe7dc352907fc980b868725387e9830d6bb49fe670aedf25696dacb5a931b","name":"Debug"},{"baseConfigurationFileReference":"bfdfe7dc352907fc980b868725387e981916adc978ad471261fb8f5e1e97ed3a","buildSettings":{"CLANG_ENABLE_OBJC_WEAK":"NO","CLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER":"NO","CODE_SIGN_IDENTITY[sdk=appletvos*]":"","CODE_SIGN_IDENTITY[sdk=iphoneos*]":"","CODE_SIGN_IDENTITY[sdk=watchos*]":"","CURRENT_PROJECT_VERSION":"1","DYLIB_COMPATIBILITY_VERSION":"1","DYLIB_CURRENT_VERSION":"1","DYLIB_INSTALL_NAME_BASE":"@rpath","ENABLE_BITCODE":"NO","ENABLE_MODULE_VERIFIER":"NO","ENABLE_USER_SCRIPT_SANDBOXING":"NO","EXCLUDED_ARCHS[sdk=iphoneos*]":"$(inherited) armv7","EXCLUDED_ARCHS[sdk=iphonesimulator*]":"$(inherited) i386","FRAMEWORK_SEARCH_PATHS[sdk=iphoneos*]":"\"/Users/yaso_meth/Git/flutter/bin/cache/artifacts/engine/ios-release/Flutter.xcframework/ios-arm64\" $(inherited)","FRAMEWORK_SEARCH_PATHS[sdk=iphonesimulator*]":"\"/Users/yaso_meth/Git/flutter/bin/cache/artifacts/engine/ios-release/Flutter.xcframework/ios-arm64_x86_64-simulator\" $(inherited)","GCC_PREFIX_HEADER":"Target Support Files/app_settings/app_settings-prefix.pch","GENERATE_INFOPLIST_FILE":"NO","INFOPLIST_FILE":"Target Support Files/app_settings/app_settings-Info.plist","INSTALL_PATH":"$(LOCAL_LIBRARY_DIR)/Frameworks","LD_RUNPATH_SEARCH_PATHS":"$(inherited) @executable_path/Frameworks @loader_path/Frameworks","MODULEMAP_FILE":"Target Support Files/app_settings/app_settings.modulemap","OTHER_LDFLAGS":"$(inherited) -framework Flutter","PRODUCT_MODULE_NAME":"app_settings","PRODUCT_NAME":"app_settings","SDKROOT":"iphoneos","SKIP_INSTALL":"YES","SWIFT_ACTIVE_COMPILATION_CONDITIONS":"$(inherited) ","SWIFT_INSTALL_OBJC_HEADER":"YES","SWIFT_VERSION":"5.0.1","TARGETED_DEVICE_FAMILY":"1,2","VALIDATE_PRODUCT":"YES","VALID_ARCHS[sdk=iphonesimulator*]":"$(ARCHS_STANDARD)","VERSIONING_SYSTEM":"apple-generic","VERSION_INFO_PREFIX":""},"guid":"bfdfe7dc352907fc980b868725387e986565976926f5320bfcba72107d42606d","name":"Profile"},{"baseConfigurationFileReference":"bfdfe7dc352907fc980b868725387e981916adc978ad471261fb8f5e1e97ed3a","buildSettings":{"CLANG_ENABLE_OBJC_WEAK":"NO","CLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER":"NO","CODE_SIGN_IDENTITY[sdk=appletvos*]":"","CODE_SIGN_IDENTITY[sdk=iphoneos*]":"","CODE_SIGN_IDENTITY[sdk=watchos*]":"","CURRENT_PROJECT_VERSION":"1","DYLIB_COMPATIBILITY_VERSION":"1","DYLIB_CURRENT_VERSION":"1","DYLIB_INSTALL_NAME_BASE":"@rpath","ENABLE_BITCODE":"NO","ENABLE_MODULE_VERIFIER":"NO","ENABLE_USER_SCRIPT_SANDBOXING":"NO","EXCLUDED_ARCHS[sdk=iphoneos*]":"$(inherited) armv7","EXCLUDED_ARCHS[sdk=iphonesimulator*]":"$(inherited) i386","FRAMEWORK_SEARCH_PATHS[sdk=iphoneos*]":"\"/Users/yaso_meth/Git/flutter/bin/cache/artifacts/engine/ios-release/Flutter.xcframework/ios-arm64\" $(inherited)","FRAMEWORK_SEARCH_PATHS[sdk=iphonesimulator*]":"\"/Users/yaso_meth/Git/flutter/bin/cache/artifacts/engine/ios-release/Flutter.xcframework/ios-arm64_x86_64-simulator\" $(inherited)","GCC_PREFIX_HEADER":"Target Support Files/app_settings/app_settings-prefix.pch","GENERATE_INFOPLIST_FILE":"NO","INFOPLIST_FILE":"Target Support Files/app_settings/app_settings-Info.plist","INSTALL_PATH":"$(LOCAL_LIBRARY_DIR)/Frameworks","LD_RUNPATH_SEARCH_PATHS":"$(inherited) @executable_path/Frameworks @loader_path/Frameworks","MODULEMAP_FILE":"Target Support Files/app_settings/app_settings.modulemap","OTHER_LDFLAGS":"$(inherited) -framework Flutter","PRODUCT_MODULE_NAME":"app_settings","PRODUCT_NAME":"app_settings","SDKROOT":"iphoneos","SKIP_INSTALL":"YES","SWIFT_ACTIVE_COMPILATION_CONDITIONS":"$(inherited) ","SWIFT_INSTALL_OBJC_HEADER":"YES","SWIFT_VERSION":"5.0.1","TARGETED_DEVICE_FAMILY":"1,2","VALIDATE_PRODUCT":"YES","VALID_ARCHS[sdk=iphonesimulator*]":"$(ARCHS_STANDARD)","VERSIONING_SYSTEM":"apple-generic","VERSION_INFO_PREFIX":""},"guid":"bfdfe7dc352907fc980b868725387e98b04a0b792901225c2ea31d5baa82eed5","name":"Release"}],"buildPhases":[{"buildFiles":[{"fileReference":"bfdfe7dc352907fc980b868725387e98fdf0be27e7b47159d9d8b87c584ea45f","guid":"bfdfe7dc352907fc980b868725387e98ba9395f2c1b607eec43204cf621f1d9c","headerVisibility":"public"}],"guid":"bfdfe7dc352907fc980b868725387e98ccf8550e493f2144cf1f6ed0eff21468","type":"com.apple.buildphase.headers"},{"buildFiles":[{"fileReference":"bfdfe7dc352907fc980b868725387e98b8ecd436f5a48de64e24bcea345336fb","guid":"bfdfe7dc352907fc980b868725387e98bccb4c9cc2671489be299602d7cecd08"},{"fileReference":"bfdfe7dc352907fc980b868725387e98f5e4ec7c8e38b008f7f7c3a9bd4a401e","guid":"bfdfe7dc352907fc980b868725387e9885691fe2efdd2cc3f1243fa80c796d16"}],"guid":"bfdfe7dc352907fc980b868725387e982b69e8d5a8dbfbb8b7206d0771ee52f1","type":"com.apple.buildphase.sources"},{"buildFiles":[{"fileReference":"bfdfe7dc352907fc980b868725387e98b14af7c49882340ad551cb13b0a1e06d","guid":"bfdfe7dc352907fc980b868725387e98e522bc3058aaf05bd33d5dbc6762fd75"}],"guid":"bfdfe7dc352907fc980b868725387e980b74592459c3dd5d4365fc3ac6bb1e04","type":"com.apple.buildphase.frameworks"},{"buildFiles":[{"guid":"bfdfe7dc352907fc980b868725387e98167fba69bdf7f86529ed5b907d751eff","targetReference":"bfdfe7dc352907fc980b868725387e98cf3ab2030ed25c0947bdaa95034b1488"}],"guid":"bfdfe7dc352907fc980b868725387e986f601b731d225ae92d96971fdbfc381f","type":"com.apple.buildphase.resources"}],"buildRules":[],"dependencies":[{"guid":"bfdfe7dc352907fc980b868725387e989da425bb6d6d5d8dbb95e4afffb82217","name":"Flutter"},{"guid":"bfdfe7dc352907fc980b868725387e98cf3ab2030ed25c0947bdaa95034b1488","name":"app_settings-app_settings_privacy"}],"guid":"bfdfe7dc352907fc980b868725387e98c7dd3f56f799b35458f81928cf1cb47b","name":"app_settings","predominantSourceCodeLanguage":"Xcode.SourceCodeLanguage.Swift","productReference":{"guid":"bfdfe7dc352907fc980b868725387e98d29eb572b0b4c6acbe0dc048bab4bd1d","name":"app_settings.framework","type":"product"},"productTypeIdentifier":"com.apple.product-type.framework","provisioningSourceData":[{"bundleIdentifierFromInfoPlist":"${PRODUCT_BUNDLE_IDENTIFIER}","configurationName":"Debug","provisioningStyle":1},{"bundleIdentifierFromInfoPlist":"${PRODUCT_BUNDLE_IDENTIFIER}","configurationName":"Profile","provisioningStyle":1},{"bundleIdentifierFromInfoPlist":"${PRODUCT_BUNDLE_IDENTIFIER}","configurationName":"Release","provisioningStyle":1}],"type":"standard"} \ No newline at end of file diff --git a/mih_ui/android/build/ios/XCBuildData/PIFCache/target/TARGET@v11_hash=ff93596a3d92ba01970679242c7f2f1b-json b/mih_ui/android/build/ios/XCBuildData/PIFCache/target/TARGET@v11_hash=ff93596a3d92ba01970679242c7f2f1b-json new file mode 100644 index 00000000..a9e2ad89 --- /dev/null +++ b/mih_ui/android/build/ios/XCBuildData/PIFCache/target/TARGET@v11_hash=ff93596a3d92ba01970679242c7f2f1b-json @@ -0,0 +1 @@ +{"buildConfigurations":[{"baseConfigurationFileReference":"bfdfe7dc352907fc980b868725387e9837b4eae1f2290b03d7d4aabded8138b2","buildSettings":{"CODE_SIGN_IDENTITY[sdk=appletvos*]":"","CODE_SIGN_IDENTITY[sdk=iphoneos*]":"","CODE_SIGN_IDENTITY[sdk=watchos*]":"","CURRENT_PROJECT_VERSION":"1","DEFINES_MODULE":"YES","DYLIB_COMPATIBILITY_VERSION":"1","DYLIB_CURRENT_VERSION":"1","DYLIB_INSTALL_NAME_BASE":"@rpath","ENABLE_MODULE_VERIFIER":"NO","ENABLE_USER_SCRIPT_SANDBOXING":"NO","GCC_PREFIX_HEADER":"Target Support Files/DKImagePickerController/DKImagePickerController-prefix.pch","GENERATE_INFOPLIST_FILE":"NO","INFOPLIST_FILE":"Target Support Files/DKImagePickerController/DKImagePickerController-Info.plist","INSTALL_PATH":"$(LOCAL_LIBRARY_DIR)/Frameworks","IPHONEOS_DEPLOYMENT_TARGET":"9.0","LD_RUNPATH_SEARCH_PATHS":"$(inherited) @executable_path/Frameworks @loader_path/Frameworks","MODULEMAP_FILE":"Target Support Files/DKImagePickerController/DKImagePickerController.modulemap","ONLY_ACTIVE_ARCH":"NO","PRODUCT_MODULE_NAME":"DKImagePickerController","PRODUCT_NAME":"DKImagePickerController","SDKROOT":"iphoneos","SKIP_INSTALL":"YES","SWIFT_ACTIVE_COMPILATION_CONDITIONS":"$(inherited) ","SWIFT_INSTALL_OBJC_HEADER":"YES","SWIFT_VERSION":"5","TARGETED_DEVICE_FAMILY":"1,2","VERSIONING_SYSTEM":"apple-generic","VERSION_INFO_PREFIX":""},"guid":"bfdfe7dc352907fc980b868725387e987c1a49d2eb4928f38153fbb752b43f0d","name":"Debug"},{"baseConfigurationFileReference":"bfdfe7dc352907fc980b868725387e98c17784c5efe37bcec77e0c17b5660c20","buildSettings":{"CODE_SIGN_IDENTITY[sdk=appletvos*]":"","CODE_SIGN_IDENTITY[sdk=iphoneos*]":"","CODE_SIGN_IDENTITY[sdk=watchos*]":"","CURRENT_PROJECT_VERSION":"1","DEFINES_MODULE":"YES","DYLIB_COMPATIBILITY_VERSION":"1","DYLIB_CURRENT_VERSION":"1","DYLIB_INSTALL_NAME_BASE":"@rpath","ENABLE_MODULE_VERIFIER":"NO","ENABLE_USER_SCRIPT_SANDBOXING":"NO","GCC_PREFIX_HEADER":"Target Support Files/DKImagePickerController/DKImagePickerController-prefix.pch","GENERATE_INFOPLIST_FILE":"NO","INFOPLIST_FILE":"Target Support Files/DKImagePickerController/DKImagePickerController-Info.plist","INSTALL_PATH":"$(LOCAL_LIBRARY_DIR)/Frameworks","IPHONEOS_DEPLOYMENT_TARGET":"9.0","LD_RUNPATH_SEARCH_PATHS":"$(inherited) @executable_path/Frameworks @loader_path/Frameworks","MODULEMAP_FILE":"Target Support Files/DKImagePickerController/DKImagePickerController.modulemap","PRODUCT_MODULE_NAME":"DKImagePickerController","PRODUCT_NAME":"DKImagePickerController","SDKROOT":"iphoneos","SKIP_INSTALL":"YES","SWIFT_ACTIVE_COMPILATION_CONDITIONS":"$(inherited) ","SWIFT_INSTALL_OBJC_HEADER":"YES","SWIFT_VERSION":"5","TARGETED_DEVICE_FAMILY":"1,2","VALIDATE_PRODUCT":"YES","VERSIONING_SYSTEM":"apple-generic","VERSION_INFO_PREFIX":""},"guid":"bfdfe7dc352907fc980b868725387e981a061109697a6fecb5c4052027830873","name":"Profile"},{"baseConfigurationFileReference":"bfdfe7dc352907fc980b868725387e98c17784c5efe37bcec77e0c17b5660c20","buildSettings":{"CODE_SIGN_IDENTITY[sdk=appletvos*]":"","CODE_SIGN_IDENTITY[sdk=iphoneos*]":"","CODE_SIGN_IDENTITY[sdk=watchos*]":"","CURRENT_PROJECT_VERSION":"1","DEFINES_MODULE":"YES","DYLIB_COMPATIBILITY_VERSION":"1","DYLIB_CURRENT_VERSION":"1","DYLIB_INSTALL_NAME_BASE":"@rpath","ENABLE_MODULE_VERIFIER":"NO","ENABLE_USER_SCRIPT_SANDBOXING":"NO","GCC_PREFIX_HEADER":"Target Support Files/DKImagePickerController/DKImagePickerController-prefix.pch","GENERATE_INFOPLIST_FILE":"NO","INFOPLIST_FILE":"Target Support Files/DKImagePickerController/DKImagePickerController-Info.plist","INSTALL_PATH":"$(LOCAL_LIBRARY_DIR)/Frameworks","IPHONEOS_DEPLOYMENT_TARGET":"9.0","LD_RUNPATH_SEARCH_PATHS":"$(inherited) @executable_path/Frameworks @loader_path/Frameworks","MODULEMAP_FILE":"Target Support Files/DKImagePickerController/DKImagePickerController.modulemap","PRODUCT_MODULE_NAME":"DKImagePickerController","PRODUCT_NAME":"DKImagePickerController","SDKROOT":"iphoneos","SKIP_INSTALL":"YES","SWIFT_ACTIVE_COMPILATION_CONDITIONS":"$(inherited) ","SWIFT_INSTALL_OBJC_HEADER":"YES","SWIFT_VERSION":"5","TARGETED_DEVICE_FAMILY":"1,2","VALIDATE_PRODUCT":"YES","VERSIONING_SYSTEM":"apple-generic","VERSION_INFO_PREFIX":""},"guid":"bfdfe7dc352907fc980b868725387e984a2bfc0afebe00a97dd280fbd3b086c7","name":"Release"}],"buildPhases":[{"buildFiles":[{"fileReference":"bfdfe7dc352907fc980b868725387e98e6b5d8425df9cc686639898d81ab29bb","guid":"bfdfe7dc352907fc980b868725387e98305321bb0f6c61d76ab6f8f834f9e1bc","headerVisibility":"public"}],"guid":"bfdfe7dc352907fc980b868725387e989c7318c71e29c5c2fa728fab937f84e4","type":"com.apple.buildphase.headers"},{"buildFiles":[{"fileReference":"bfdfe7dc352907fc980b868725387e98335a94dbe483545144593a747bf57488","guid":"bfdfe7dc352907fc980b868725387e986b9c07eb90d1c19fb7ac9f978eac2cfd"},{"fileReference":"bfdfe7dc352907fc980b868725387e98c856fc1f1a5df75e1f335a24f80a324c","guid":"bfdfe7dc352907fc980b868725387e9899bf2eef86ec86d3071d0464ba311bc3"},{"fileReference":"bfdfe7dc352907fc980b868725387e9883b700d4c655a66d2eb0ecd5009867cc","guid":"bfdfe7dc352907fc980b868725387e989923225760583f9044f3477d68370fb4"},{"fileReference":"bfdfe7dc352907fc980b868725387e98227220f91dfab4c4322ac4ed581b024b","guid":"bfdfe7dc352907fc980b868725387e980b8fe6bd9ce7b7f7f9b672f675ac40ea"},{"fileReference":"bfdfe7dc352907fc980b868725387e98a7167b35e446804e288fc5f3108fd0e0","guid":"bfdfe7dc352907fc980b868725387e98c7914d6db7a604491a406b7ffd04ffdc"},{"fileReference":"bfdfe7dc352907fc980b868725387e984737ea76e0a4c76036af3b355fdec0ed","guid":"bfdfe7dc352907fc980b868725387e98eb2913c855fd2bba90610341d1005093"},{"fileReference":"bfdfe7dc352907fc980b868725387e98eba5be275263271fcd1bf32ee797809b","guid":"bfdfe7dc352907fc980b868725387e9818bf3e3f4e2e4ff6409fd3de93a3e67b"},{"fileReference":"bfdfe7dc352907fc980b868725387e98b76a64655dc550f5ebec2f9ff3200413","guid":"bfdfe7dc352907fc980b868725387e9862f3f56aa2a92efeb6d501703a17fb78"},{"fileReference":"bfdfe7dc352907fc980b868725387e980f1347790a1fae83f056fa4b808c3cd0","guid":"bfdfe7dc352907fc980b868725387e986f0a5a4d4d049699b38b834e5127e27c"},{"fileReference":"bfdfe7dc352907fc980b868725387e9876da5a8044ee25187970ba558822731d","guid":"bfdfe7dc352907fc980b868725387e98b11d52cb23817759d43df3901c9dfdcf"},{"fileReference":"bfdfe7dc352907fc980b868725387e9849e6729fc1e44edf7426ac54b962a26b","guid":"bfdfe7dc352907fc980b868725387e982e2cfaddbe60c31e36e71f4cf7b78cf2"},{"fileReference":"bfdfe7dc352907fc980b868725387e98a8ca137552a3696b8a3ae1c151998fe9","guid":"bfdfe7dc352907fc980b868725387e9880b17e68f279e7d7783a51e9bb5287b7"},{"fileReference":"bfdfe7dc352907fc980b868725387e98add192413820866011e7588ab8d50a1b","guid":"bfdfe7dc352907fc980b868725387e98edb05713e1e170990070d795fbfd9ad1"},{"fileReference":"bfdfe7dc352907fc980b868725387e98df6555ed20370a218636d2d1ef042bff","guid":"bfdfe7dc352907fc980b868725387e98571373774a6c562d2a57eeef6625aad4"},{"fileReference":"bfdfe7dc352907fc980b868725387e983c5b7868d9cf3226bd45e2f7fde341f2","guid":"bfdfe7dc352907fc980b868725387e982b8ddf46d054df8e6dd54a4248a7bf7d"},{"fileReference":"bfdfe7dc352907fc980b868725387e986747ae603292c978ec451164346bb561","guid":"bfdfe7dc352907fc980b868725387e98a0be07ca2e426e3bc60d30898d361288"},{"fileReference":"bfdfe7dc352907fc980b868725387e9873c16ebd0704c7e74ef2732a8617faf4","guid":"bfdfe7dc352907fc980b868725387e98b3f4cf0af8ed4ae02ddeeb10e435cd75"},{"fileReference":"bfdfe7dc352907fc980b868725387e98034544f799334fac9753d3c062ac4eb5","guid":"bfdfe7dc352907fc980b868725387e9812c712ccbecb48d4ce26f86166ff880e"},{"fileReference":"bfdfe7dc352907fc980b868725387e9804eba36085f83cab0f06e047a1723201","guid":"bfdfe7dc352907fc980b868725387e982a440638f7cb9965d090ab0c181da156"},{"fileReference":"bfdfe7dc352907fc980b868725387e9805cbd30dca7799b8a62e2c9aa2908321","guid":"bfdfe7dc352907fc980b868725387e9803b6b2b356410bc7bcfcc1b875c69472"},{"fileReference":"bfdfe7dc352907fc980b868725387e985f34fcdb8acab7b808291804ea4c93a4","guid":"bfdfe7dc352907fc980b868725387e98ec9c4546923a074af807de40344c27c3"},{"fileReference":"bfdfe7dc352907fc980b868725387e98c04e1fef39dccde86db40118bcaf63f7","guid":"bfdfe7dc352907fc980b868725387e985cfeda817f2be498febfcb296540639a"},{"fileReference":"bfdfe7dc352907fc980b868725387e9804fc4899b4975caa6c83b0bcabd7bdcd","guid":"bfdfe7dc352907fc980b868725387e982082b1aebfa678d630e6c739c18a5003"},{"fileReference":"bfdfe7dc352907fc980b868725387e9847c7fe098b50f268068840c428bc95bc","guid":"bfdfe7dc352907fc980b868725387e987c4d107baf407af054f8312cf0ad4178"}],"guid":"bfdfe7dc352907fc980b868725387e98239213265a3abaa90df058a8c1bb91cf","type":"com.apple.buildphase.sources"},{"buildFiles":[{"fileReference":"bfdfe7dc352907fc980b868725387e98b14af7c49882340ad551cb13b0a1e06d","guid":"bfdfe7dc352907fc980b868725387e9840e570f7d28f64055b1dab9dc749246d"},{"fileReference":"bfdfe7dc352907fc980b868725387e98fc74d0fed09821b42c8c83fca08fddb2","guid":"bfdfe7dc352907fc980b868725387e98192e2db6ac44b70d83d52bc9a34503d6"},{"fileReference":"bfdfe7dc352907fc980b868725387e98f2f44ab0d0f0ce315b53d31757eb8db6","guid":"bfdfe7dc352907fc980b868725387e98f0a88717dff9f0a44bc37f82f0d7d1f4"}],"guid":"bfdfe7dc352907fc980b868725387e98819fd04ebca59115ef049e04b7b72408","type":"com.apple.buildphase.frameworks"},{"buildFiles":[{"guid":"bfdfe7dc352907fc980b868725387e988c2f740ef6174a43ddde75c8d424f6f2","targetReference":"bfdfe7dc352907fc980b868725387e9898fccba7a2febdedb43dddbf2e949fc3"}],"guid":"bfdfe7dc352907fc980b868725387e984c4b1b52a05e595bcc1230a93d57ff06","type":"com.apple.buildphase.resources"}],"buildRules":[],"dependencies":[{"guid":"bfdfe7dc352907fc980b868725387e9898fccba7a2febdedb43dddbf2e949fc3","name":"DKImagePickerController-DKImagePickerController"},{"guid":"bfdfe7dc352907fc980b868725387e989d0a1858a86fd6e6731ed20f88a1e515","name":"DKPhotoGallery"}],"guid":"bfdfe7dc352907fc980b868725387e985fd5cdb9993b1816141f0c012ffa62bd","name":"DKImagePickerController","predominantSourceCodeLanguage":"Xcode.SourceCodeLanguage.Swift","productReference":{"guid":"bfdfe7dc352907fc980b868725387e98f752ba05adf197c3696519e901961310","name":"DKImagePickerController.framework","type":"product"},"productTypeIdentifier":"com.apple.product-type.framework","provisioningSourceData":[{"bundleIdentifierFromInfoPlist":"${PRODUCT_BUNDLE_IDENTIFIER}","configurationName":"Debug","provisioningStyle":1},{"bundleIdentifierFromInfoPlist":"${PRODUCT_BUNDLE_IDENTIFIER}","configurationName":"Profile","provisioningStyle":1},{"bundleIdentifierFromInfoPlist":"${PRODUCT_BUNDLE_IDENTIFIER}","configurationName":"Release","provisioningStyle":1}],"type":"standard"} \ No newline at end of file diff --git a/mih_ui/android/build/ios/XCBuildData/PIFCache/workspace/WORKSPACE@v11_hash=(null)_subobjects=d4d37871a9d2a6dba5291c9ce70cda86-json b/mih_ui/android/build/ios/XCBuildData/PIFCache/workspace/WORKSPACE@v11_hash=(null)_subobjects=d4d37871a9d2a6dba5291c9ce70cda86-json new file mode 100644 index 00000000..c59e6bf0 --- /dev/null +++ b/mih_ui/android/build/ios/XCBuildData/PIFCache/workspace/WORKSPACE@v11_hash=(null)_subobjects=d4d37871a9d2a6dba5291c9ce70cda86-json @@ -0,0 +1 @@ +{"guid":"dc4b70c03e8043e50e38f2068887b1d4","name":"Pods","path":"/Users/yaso_meth/Git/mih_main/mih-project/mih_ui/ios/Pods/Pods.xcodeproj/project.xcworkspace","projects":["PROJECT@v11_mod=d0293ee0112d0357cf900112c05ab991_hash=bfdfe7dc352907fc980b868725387e98plugins=1OJSG6M1FOV3XYQCBH7Z29RZ0FPR9XDE1"]} \ No newline at end of file diff --git a/mih_ui/android/build/macos/SourcePackages/firebase_app_check-0.4.5/CHANGELOG.md b/mih_ui/android/build/macos/SourcePackages/firebase_app_check-0.4.5/CHANGELOG.md new file mode 100644 index 00000000..ee988ff3 --- /dev/null +++ b/mih_ui/android/build/macos/SourcePackages/firebase_app_check-0.4.5/CHANGELOG.md @@ -0,0 +1,576 @@ +## 0.4.5 + + - **FEAT**(appcheck): appcheck reCAPTCHA mobile support (gradually rolling out) ([#18261](https://github.com/firebase/flutterfire/issues/18261)). ([036a860a](https://github.com/firebase/flutterfire/commit/036a860a0e66d46b5c57eb3df3a0f9e5846ef00b)) + +## 0.4.4+2 + + - Update a dependency to the latest release. + +## 0.4.4+1 + + - Update a dependency to the latest release. + +## 0.4.4 + + - **REFACTOR**: move all packages to workspace ([#18182](https://github.com/firebase/flutterfire/issues/18182)). ([6cdfcb10](https://github.com/firebase/flutterfire/commit/6cdfcb103da7be46ccb190d7e107d8c537aa1ff8)) + - **FIX**: update core, auth and app-check logic so internal resources on method channels are properly disposed ([#18268](https://github.com/firebase/flutterfire/issues/18268)). ([a0de4ed8](https://github.com/firebase/flutterfire/commit/a0de4ed86b0dff89bb9e557f2a54f38cd2546016)) + - **FEAT**(core): Add Auth and AppCheck as App's registered service. ([#18237](https://github.com/firebase/flutterfire/issues/18237)). ([7ce191cb](https://github.com/firebase/flutterfire/commit/7ce191cbd598b299cd0ec64b45d1366914367a5d)) + +## 0.4.3 + + - **FEAT**(app_check,windows): add support for AppCheck for Windows ([#18140](https://github.com/firebase/flutterfire/issues/18140)). ([81f30325](https://github.com/firebase/flutterfire/commit/81f30325fc926fe94b630e49f56b795c781a4cbe)) + - **FEAT**: use local firebase_core instead of remote SPM dependency ([#18141](https://github.com/firebase/flutterfire/issues/18141)). ([995caf40](https://github.com/firebase/flutterfire/commit/995caf400df80c0fde7151c651ccc6c0f756e381)) + +## 0.4.2 + + - **FEAT**(messaging,web): add support for debug tokens on Web ([#18057](https://github.com/firebase/flutterfire/issues/18057)). ([b853386e](https://github.com/firebase/flutterfire/commit/b853386e987d686eab4b8fd9b8dad14eda97479c)) + - **FEAT**(ios): migrate iOS to UIScene lifecycle ([#18054](https://github.com/firebase/flutterfire/issues/18054)). ([3ffa4110](https://github.com/firebase/flutterfire/commit/3ffa411098132fd5182a84be4e7a226106bc7451)) + +## 0.4.1+5 + + - Update a dependency to the latest release. + +## 0.4.1+4 + + - Update a dependency to the latest release. + +## 0.4.1+3 + + - Update a dependency to the latest release. + +## 0.4.1+2 + + - Update a dependency to the latest release. + +## 0.4.1+1 + + - **FIX**(app_check): Deprecate androidProvider and appleProvider parameters in activate method ([#17742](https://github.com/firebase/flutterfire/issues/17742)). ([4e7f800e](https://github.com/firebase/flutterfire/commit/4e7f800e94a895c6553bd3c1595b4f06ac69bb81)) + - **FIX**(app_check): Expose AppleAppAttestProvider without importing platform interface ([#17740](https://github.com/firebase/flutterfire/issues/17740)). ([6c2355a0](https://github.com/firebase/flutterfire/commit/6c2355a05d6bba763768ce3bc09c3cc0528fa900)) + +## 0.4.1 + + - **FEAT**(app-check): Debug token support for the activate method ([#17723](https://github.com/firebase/flutterfire/issues/17723)). ([3c638264](https://github.com/firebase/flutterfire/commit/3c638264565d902ddbe4dff5bb027aef9e1c2140)) + +## 0.4.0+1 + + - **FIX**(app_check,iOS): correctly parse `forceRefresh` argument using `boolValue` ([#17627](https://github.com/firebase/flutterfire/issues/17627)). ([8c0802d0](https://github.com/firebase/flutterfire/commit/8c0802d098c970740a34e83952f56dbe9eb279fd)) + +## 0.4.0 + +> Note: This release has breaking changes. + + - **BREAKING** **FEAT**: bump iOS SDK to version 12.0.0 ([#17549](https://github.com/firebase/flutterfire/issues/17549)). ([b2619e68](https://github.com/firebase/flutterfire/commit/b2619e685fec897513483df1d7be347b64f95606)) + - **BREAKING** **FEAT**(app-check): remove deprecated functions ([#17561](https://github.com/firebase/flutterfire/issues/17561)). ([3e4302c4](https://github.com/firebase/flutterfire/commit/3e4302c4281d1d39c140ff116643d700cd3c5ace)) + - **BREAKING** **FEAT**: bump Android SDK to version 34.0.0 ([#17554](https://github.com/firebase/flutterfire/issues/17554)). ([a5bdc051](https://github.com/firebase/flutterfire/commit/a5bdc051d40ee44e39cf0b8d2a7801bc6f618b67)) + +## 0.3.2+10 + + - Update a dependency to the latest release. + +## 0.3.2+9 + + - Update a dependency to the latest release. + +## 0.3.2+8 + + - Update a dependency to the latest release. + +## 0.3.2+7 + + - Update a dependency to the latest release. + +## 0.3.2+6 + + - Update a dependency to the latest release. + +## 0.3.2+5 + + - Update a dependency to the latest release. + +## 0.3.2+4 + + - Update a dependency to the latest release. + +## 0.3.2+3 + + - Update a dependency to the latest release. + +## 0.3.2+2 + + - Update a dependency to the latest release. + +## 0.3.2+1 + + - Update a dependency to the latest release. + +## 0.3.2 + + + - **FEAT**(app-check): Swift Package Manager support ([#16810](https://github.com/firebase/flutterfire/issues/16810)). ([f2e3f396](https://github.com/firebase/flutterfire/commit/f2e3f3965e83a6bf8c52c1cd9f80509a08907a84)) + +## 0.3.1+7 + + - Update a dependency to the latest release. + +## 0.3.1+6 + + - Update a dependency to the latest release. + +## 0.3.1+5 + + - Update a dependency to the latest release. + +## 0.3.1+4 + + - Update a dependency to the latest release. + +## 0.3.1+3 + + - **FIX**(all,apple): use modular headers to import ([#13400](https://github.com/firebase/flutterfire/issues/13400)). ([d7d2d4b9](https://github.com/firebase/flutterfire/commit/d7d2d4b93e7c00226027fffde46699f3d5388a41)) + +## 0.3.1+2 + + - Update a dependency to the latest release. + +## 0.3.1+1 + + - Update a dependency to the latest release. + +## 0.3.1 + + - **FEAT**(firestore,web): expose `webExperimentalForceLongPolling`, `webExperimentalAutoDetectLongPolling` and `timeoutSeconds` on web ([#13201](https://github.com/firebase/flutterfire/issues/13201)). ([6ec2a103](https://github.com/firebase/flutterfire/commit/6ec2a103a3a325a73550bdfff4c0d524ae7e4068)) + +## 0.3.0+5 + + - **DOCS**: remove reference to flutter.io and firebase.flutter.dev ([#13152](https://github.com/firebase/flutterfire/issues/13152)). ([5f0874b9](https://github.com/firebase/flutterfire/commit/5f0874b91e28a203dd62d37d391e5760c91f5729)) + +## 0.3.0+4 + + - Update a dependency to the latest release. + +## 0.3.0+3 + + - Update a dependency to the latest release. + +## 0.3.0+2 + + - Update a dependency to the latest release. + +## 0.3.0+1 + + - **FIX**(app-check,web): fixed broken `onTokenChanged` and ensured it is properly cleaned up. Streams are also cleaned up on "hot restart" ([#12933](https://github.com/firebase/flutterfire/issues/12933)). ([093b5fef](https://github.com/firebase/flutterfire/commit/093b5fef8c3b8314835dc954ce02daacd1e077f4)) + - **FIX**(firebase_app_check,ios): Replace angles with quotes in import statement ([#12929](https://github.com/firebase/flutterfire/issues/12929)). ([f2fc902b](https://github.com/firebase/flutterfire/commit/f2fc902b9e954baf9d72bd3863a85bde402d2133)) + - **FIX**(app-check,ios): update app check to stable release ([#12924](https://github.com/firebase/flutterfire/issues/12924)). ([ced11684](https://github.com/firebase/flutterfire/commit/ced1168482c3b8e8b4746abde13649d212a503fd)) + +## 0.3.0 + +> Note: This release has breaking changes. + + - **BREAKING** **REFACTOR**: android plugins require `minSdk 21`, auth requires `minSdk 23` ahead of android BOM `>=33.0.0` ([#12873](https://github.com/firebase/flutterfire/issues/12873)). ([52accfc6](https://github.com/firebase/flutterfire/commit/52accfc6c39d6360d9c0f36efe369ede990b7362)) + - **BREAKING** **REFACTOR**: bump all iOS deployment targets to iOS 13 ahead of Firebase iOS SDK `v11` breaking change ([#12872](https://github.com/firebase/flutterfire/issues/12872)). ([de0cea2c](https://github.com/firebase/flutterfire/commit/de0cea2c3c36694a76361be784255986fac84a43)) + +## 0.2.2+7 + + - Update a dependency to the latest release. + +## 0.2.2+6 + + - Update a dependency to the latest release. + +## 0.2.2+5 + + - Update a dependency to the latest release. + +## 0.2.2+4 + + - Update a dependency to the latest release. + +## 0.2.2+3 + + - Update a dependency to the latest release. + +## 0.2.2+2 + + - Update a dependency to the latest release. + +## 0.2.2+1 + + - **FIX**(app-check,android): fix unnecessary deprecation warning ([#12578](https://github.com/firebase/flutterfire/issues/12578)). ([805ca028](https://github.com/firebase/flutterfire/commit/805ca028d20c582e93bcebbeca3105deab365edc)) + +## 0.2.2 + + - **FEAT**(android): Bump `compileSdk` version of Android plugins to latest stable (34) ([#12566](https://github.com/firebase/flutterfire/issues/12566)). ([e891fab2](https://github.com/firebase/flutterfire/commit/e891fab291e9beebc223000b133a6097e066a7fc)) + +## 0.2.1+19 + + - **REFACTOR**(app_check,web): small refactor around initialisation of FirebaseAppCheckWeb ([#12474](https://github.com/firebase/flutterfire/issues/12474)). ([83aab7f8](https://github.com/firebase/flutterfire/commit/83aab7f8f6a6dde6e71765826c0e1f9aabc110a0)) + +## 0.2.1+18 + + - Update a dependency to the latest release. + +## 0.2.1+17 + + - Update a dependency to the latest release. + +## 0.2.1+16 + + - Update a dependency to the latest release. + +## 0.2.1+15 + + - Update a dependency to the latest release. + +## 0.2.1+14 + + - Update a dependency to the latest release. + +## 0.2.1+13 + + - Update a dependency to the latest release. + +## 0.2.1+12 + + - Update a dependency to the latest release. + +## 0.2.1+11 + + - Update a dependency to the latest release. + +## 0.2.1+10 + + - Update a dependency to the latest release. + +## 0.2.1+9 + + - Update a dependency to the latest release. + +## 0.2.1+8 + + - Update a dependency to the latest release. + +## 0.2.1+7 + + - Update a dependency to the latest release. + +## 0.2.1+6 + + - Update a dependency to the latest release. + +## 0.2.1+5 + + - Update a dependency to the latest release. + +## 0.2.1+4 + + - Update a dependency to the latest release. + +## 0.2.1+3 + + - Update a dependency to the latest release. + +## 0.2.1+2 + + - Update a dependency to the latest release. + +## 0.2.1+1 + + - Update a dependency to the latest release. + +## 0.2.1 + + - **REFACTOR**(app-check,android): update linting warnings ([#11666](https://github.com/firebase/flutterfire/issues/11666)). ([fa9c8181](https://github.com/firebase/flutterfire/commit/fa9c8181156697a96b2615906b24613f28346175)) + - **FIX**(firebase_app_check): Allow non-default app for Android debug provider ([#11680](https://github.com/firebase/flutterfire/issues/11680)). ([dd20c0c7](https://github.com/firebase/flutterfire/commit/dd20c0c7413dd9c9cd4c54426afc2572f9438607)) + - **FEAT**: Full support of AGP 8 ([#11699](https://github.com/firebase/flutterfire/issues/11699)). ([bdb5b270](https://github.com/firebase/flutterfire/commit/bdb5b27084d225809883bdaa6aa5954650551927)) + - **FEAT**(app_check): Use Android dependencies from Firebase BOM ([#11671](https://github.com/firebase/flutterfire/issues/11671)). ([378fcbdc](https://github.com/firebase/flutterfire/commit/378fcbdc4909e448d47cc204147a2ecd978b4fb7)) + - **DOCS**: Updated documentation link in firebase_app_check README.md ([#11712](https://github.com/firebase/flutterfire/issues/11712)). ([dd3e56c6](https://github.com/firebase/flutterfire/commit/dd3e56c67a2ddad0a11043f00e9d80544d36355a)) + +## 0.2.0+1 + + - Update a dependency to the latest release. + +## 0.2.0 + +> Note: This release has breaking changes. + + - **BREAKING** **FEAT**(app-check,web): support for `ReCaptchaEnterpriseProvider`. User facing API updated. ([#11573](https://github.com/firebase/flutterfire/issues/11573)). ([09825edd](https://github.com/firebase/flutterfire/commit/09825edd0e1ecd609e2046fdefda439ce4099087)) + +## 0.1.5+2 + + - Update a dependency to the latest release. + +## 0.1.5+1 + + - Update a dependency to the latest release. + +## 0.1.5 + + - **FEAT**(app-check): support for `getLimitedUseToken()` API ([#11091](https://github.com/firebase/flutterfire/issues/11091)). ([9db9326f](https://github.com/firebase/flutterfire/commit/9db9326fe503c31299c9685449150e809543974e)) + +## 0.1.4+3 + + - Update a dependency to the latest release. + +## 0.1.4+2 + + - Update a dependency to the latest release. + +## 0.1.4+1 + + - Update a dependency to the latest release. + +## 0.1.4 + + - **FEAT**: update dependency constraints to `sdk: '>=2.18.0 <4.0.0'` `flutter: '>=3.3.0'` ([#10946](https://github.com/firebase/flutterfire/issues/10946)). ([2772d10f](https://github.com/firebase/flutterfire/commit/2772d10fe510dcc28ec2d37a26b266c935699fa6)) + - **FEAT**: update libraries to be compatible with Flutter 3.10.0 ([#10944](https://github.com/firebase/flutterfire/issues/10944)). ([e1f5a5ea](https://github.com/firebase/flutterfire/commit/e1f5a5ea798c54f19d1d2f7b8f2250f8819f44b7)) + +## 0.1.3 + + - **FIX**: add support for AGP 8.0 ([#10901](https://github.com/firebase/flutterfire/issues/10901)). ([a3b96735](https://github.com/firebase/flutterfire/commit/a3b967354294c295a9be8d699a6adb7f4b1dba7f)) + - **FEAT**: upgrade to dart 3 compatible dependencies ([#10890](https://github.com/firebase/flutterfire/issues/10890)). ([4bd7e59b](https://github.com/firebase/flutterfire/commit/4bd7e59b1f2b09a2230c49830159342dd4592041)) + +## 0.1.2+3 + + - **FIX**(app-check): use correct `getAppCheckToken()` method. Print out debug token for iOS. ([#10819](https://github.com/firebase/flutterfire/issues/10819)). ([66909a9c](https://github.com/firebase/flutterfire/commit/66909a9c5b10e85f93565cbc308fdbee4ec6f607)) + +## 0.1.2+2 + + - Update a dependency to the latest release. + +## 0.1.2+1 + + - **FIX**(app-check): fix 'Semantic Issue (Xcode): `new` is unavailable' on XCode 14.3 ([#10734](https://github.com/firebase/flutterfire/issues/10734)). ([cc6d1c28](https://github.com/firebase/flutterfire/commit/cc6d1c28193d5cdaaa564729340c380b5f632982)) + +## 0.1.2 + + - **FEAT**: bump dart sdk constraint to 2.18 ([#10618](https://github.com/firebase/flutterfire/issues/10618)). ([f80948a2](https://github.com/firebase/flutterfire/commit/f80948a28b62eead358bdb900d5a0dfb97cebb33)) + +## 0.1.1+14 + + - Update a dependency to the latest release. + +## 0.1.1+13 + + - Update a dependency to the latest release. + +## 0.1.1+12 + + - Update a dependency to the latest release. + +## 0.1.1+11 + + - Update a dependency to the latest release. + +## 0.1.1+10 + + - Update a dependency to the latest release. + +## 0.1.1+9 + + - Update a dependency to the latest release. + +## 0.1.1+8 + + - Update a dependency to the latest release. + +## 0.1.1+7 + + - Update a dependency to the latest release. + +## 0.1.1+6 + + - Update a dependency to the latest release. + +## 0.1.1+5 + + - Update a dependency to the latest release. + +## 0.1.1+4 + + - Update a dependency to the latest release. + +## 0.1.1+3 + + - Update a dependency to the latest release. + +## 0.1.1+2 + + - **REFACTOR**: add `verify` to `QueryPlatform` and change internal `verifyToken` API to `verify` ([#9711](https://github.com/firebase/flutterfire/issues/9711)). ([c99a842f](https://github.com/firebase/flutterfire/commit/c99a842f3e3f5f10246e73f51530cc58c42b49a3)) + +## 0.1.1+1 + + - Update a dependency to the latest release. + +## 0.1.1 + +- Update a dependency to the latest release. + +## 0.1.0 + +> Note: This release has breaking changes. + + - **BREAKING** **FEAT**: Firebase iOS SDK version: `10.0.0` ([#9708](https://github.com/firebase/flutterfire/issues/9708)). ([9627c56a](https://github.com/firebase/flutterfire/commit/9627c56a37d657d0250b6f6b87d0fec1c31d4ba3)) + +## 0.0.9+1 + + - Update a dependency to the latest release. + +## 0.0.9 + + - **FEAT**: provide `androidDebugProvider` boolean for android debug provider & update app check example app ([#9412](https://github.com/firebase/flutterfire/issues/9412)). ([f1f26748](https://github.com/firebase/flutterfire/commit/f1f26748615c7c9d406e1d3d605e2987e1134ee7)) + +## 0.0.8 + + - **FEAT**: provide `androidDebugProvider` boolean for android debug provider & update app check example app ([#9412](https://github.com/firebase/flutterfire/issues/9412)). ([f1f26748](https://github.com/firebase/flutterfire/commit/f1f26748615c7c9d406e1d3d605e2987e1134ee7)) + +## 0.0.7+2 + + - Update a dependency to the latest release. + +## 0.0.7+1 + + - Update a dependency to the latest release. + +## 0.0.7 + + - **FEAT**: update the example app with webRecaptcha in activate button ([#9373](https://github.com/firebase/flutterfire/issues/9373)). ([1ff76c1b](https://github.com/firebase/flutterfire/commit/1ff76c1b87b623ff21c921d6a6cc2c586cf43ac3)) + - **REFACTOR**: update deprecated `Tasks.call()` to `TaskCompletionSource` API ([#9404](https://github.com/firebase/flutterfire/pull/9404)). ([837d68ea](https://github.com/firebase/flutterfire/commit/5aa9f665e70297fecb88bd0fda5445753470660f)) + +## 0.0.6+20 + + - Update a dependency to the latest release. + +## 0.0.6+19 + + - Update a dependency to the latest release. + +## 0.0.6+18 + + - Update a dependency to the latest release. + +## 0.0.6+17 + + - Update a dependency to the latest release. + +## 0.0.6+16 + + - **FIX**: bump `firebase_core_platform_interface` version to fix previous release. ([bea70ea5](https://github.com/firebase/flutterfire/commit/bea70ea5cbbb62cbfd2a7a74ae3a07cb12b3ee5a)) + +## 0.0.6+15 + + - **DOCS**: separate the first sentence of a doc comment into its own paragraph for `getToken()` (#8968). ([4d487ef7](https://github.com/firebase/flutterfire/commit/4d487ef7abdb9a8333735ced9c40438fef9912a3)) + +## 0.0.6+14 + + - **REFACTOR**: use `firebase.google.com` link for `homepage` in `pubspec.yaml` (#8727). ([41a963b3](https://github.com/firebase/flutterfire/commit/41a963b376ae4ec23e1394bc074f8feee6ae16b2)) + - **REFACTOR**: use "firebase" instead of "FirebaseExtended" as organisation in all links for this repository (#8791). ([d90b8357](https://github.com/firebase/flutterfire/commit/d90b8357db01d65e753021358668f0b129713e6b)) + - **DOCS**: point to "firebase.google" domain for hyperlinks in the usage section of `README.md` files (for the missing packages) (#8818). ([5bda8c92](https://github.com/firebase/flutterfire/commit/5bda8c92be1651a941d1285d36e885ee0b967b11)) + +## 0.0.6+13 + + - **DOCS**: use camel case style for "FlutterFire" in `README.md` (#8747). ([e2a022d7](https://github.com/firebase/flutterfire/commit/e2a022d7427817002e4114eb7434aa6e53384891)) + +## 0.0.6+12 + + - Update a dependency to the latest release. + +## 0.0.6+11 + + - Update a dependency to the latest release. + +## 0.0.6+10 + + - Update a dependency to the latest release. + +## 0.0.6+9 + + - Update a dependency to the latest release. + +## 0.0.6+8 + + - Update a dependency to the latest release. + +## 0.0.6+7 + + - **FIX**: update all Dart SDK version constraints to Dart >= 2.16.0 (#8184). ([df4a5bab](https://github.com/firebase/flutterfire/commit/df4a5bab3c029399b4f257a5dd658d302efe3908)) + +## 0.0.6+6 + + - Update a dependency to the latest release. + +## 0.0.6+5 + + - **FIX**: workaround iOS build issue when targeting platforms < iOS 11. ([c78e0b79](https://github.com/firebase/flutterfire/commit/c78e0b79bde479e78c558d3df92988c130280e81)) + +## 0.0.6+4 + + - **FIX**: bump Android `compileSdkVersion` to 31 (#7726). ([a9562bac](https://github.com/firebase/flutterfire/commit/a9562bac60ba927fb3664a47a7f7eaceb277dca6)) + +## 0.0.6+3 + + - **REFACTOR**: fix all `unnecessary_import` analyzer issues introduced with Flutter 2.8. ([7f0e82c9](https://github.com/firebase/flutterfire/commit/7f0e82c978a3f5a707dd95c7e9136a3e106ff75e)) + +## 0.0.6+2 + + - Update a dependency to the latest release. + +## 0.0.6+1 + + - Update a dependency to the latest release. + +## 0.0.6 + + - **FEAT**: add token apis and documentation (#7419). + +## 0.0.5 + +- **NEW**: Added support for multi-app via the `instanceFor()` method. +- **NEW**: Added support for getting the current App Check token via the `getToken()` method. +- **NEW**: Added support for enabling automatic token refreshing via the `setTokenAutoRefreshEnabled()` method. +- **NEW**: Added support for subscribing to token change events (as a `Stream`) via `onTokenChange`. + +## 0.0.4 + + - **REFACTOR**: migrate remaining examples & e2e tests to null-safety (#7393). + - **FEAT**: automatically inject Firebase JS SDKs (#7359). + +## 0.0.3 + + - **FEAT**: support initializing default `FirebaseApp` instances from Dart (#6549). + +## 0.0.2+4 + + - Update a dependency to the latest release. + +## 0.0.2+3 + + - Update a dependency to the latest release. + +## 0.0.2+2 + + - Update a dependency to the latest release. + +## 0.0.2+1 + + - **DOCS**: using for version `0.0.1` the same markdown headline level as the other versions have in the changelog (#6845). + +## 0.0.2 + + - **STYLE**: enable additional lint rules (#6832). + - **FEAT**: lower iOS & macOS deployment targets for relevant plugins (#6757). + +## 0.0.1+3 + + - Update a dependency to the latest release. + +## 0.0.1+2 + + - Update a dependency to the latest release. + +## 0.0.1+1 + + - Update a dependency to the latest release. + +## 0.0.1 + + - Initial release. diff --git a/mih_ui/android/build/macos/SourcePackages/firebase_app_check-0.4.5/LICENSE b/mih_ui/android/build/macos/SourcePackages/firebase_app_check-0.4.5/LICENSE new file mode 100644 index 00000000..88629004 --- /dev/null +++ b/mih_ui/android/build/macos/SourcePackages/firebase_app_check-0.4.5/LICENSE @@ -0,0 +1,27 @@ +// Copyright 2021 The Chromium Authors. All rights reserved. +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are +// met: +// +// * Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// * Redistributions in binary form must reproduce the above +// copyright notice, this list of conditions and the following disclaimer +// in the documentation and/or other materials provided with the +// distribution. +// * Neither the name of Google Inc. nor the names of its +// contributors may be used to endorse or promote products derived from +// this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. diff --git a/mih_ui/android/build/macos/SourcePackages/firebase_app_check-0.4.5/README.md b/mih_ui/android/build/macos/SourcePackages/firebase_app_check-0.4.5/README.md new file mode 100644 index 00000000..1d0c9574 --- /dev/null +++ b/mih_ui/android/build/macos/SourcePackages/firebase_app_check-0.4.5/README.md @@ -0,0 +1,24 @@ +# Firebase App Check for Flutter +[![pub package](https://img.shields.io/pub/v/firebase_app_check.svg)](https://pub.dev/packages/firebase_app_check) + +A Flutter plugin to use the [Firebase App Check API](https://firebase.google.com/docs/app-check/). + +To learn more about Firebase App Check, please visit the [Firebase website](https://firebase.google.com/docs/app-check) + +## Getting Started + +To get started with Firebase App Check for Flutter, please [see the documentation](https://firebase.google.com/docs/app-check/flutter/default-providers). + +## Usage + +To use this plugin, please visit the [App Check Usage documentation](https://firebase.google.com/docs/app-check/flutter/default-providers#initialize) + +## Issues and feedback + +Please file FlutterFire specific issues, bugs, or feature requests in our [issue tracker](https://github.com/firebase/flutterfire/issues/new). + +Plugin issues that are not specific to FlutterFire can be filed in the [Flutter issue tracker](https://github.com/flutter/flutter/issues/new). + +To contribute a change to this plugin, +please review our [contribution guide](https://github.com/firebase/flutterfire/blob/main/CONTRIBUTING.md) +and open a [pull request](https://github.com/firebase/flutterfire/pulls). diff --git a/mih_ui/android/build/macos/SourcePackages/firebase_app_check-0.4.5/android/build.gradle b/mih_ui/android/build/macos/SourcePackages/firebase_app_check-0.4.5/android/build.gradle new file mode 100644 index 00000000..cc7c342a --- /dev/null +++ b/mih_ui/android/build/macos/SourcePackages/firebase_app_check-0.4.5/android/build.gradle @@ -0,0 +1,94 @@ +group 'io.flutter.plugins.firebase.appcheck' +version '1.0-SNAPSHOT' + +apply plugin: 'com.android.library' +apply from: file("local-config.gradle") + +buildscript { + ext.kotlin_version = "2.0.0" + repositories { + google() + mavenCentral() + } +} + +rootProject.allprojects { + repositories { + google() + mavenCentral() + } +} + +// AGP 9+ has built-in Kotlin support unless Flutter opts out via android.builtInKotlin=false. +def agpMajor = com.android.Version.ANDROID_GRADLE_PLUGIN_VERSION.tokenize('.')[0] as int +def builtInKotlin = providers.gradleProperty("android.builtInKotlin") + .map { it.toBoolean() } + .orElse(agpMajor >= 9) + .get() +if (agpMajor < 9 || !builtInKotlin) { + apply plugin: 'kotlin-android' +} + +def firebaseCoreProject = findProject(':firebase_core') +if (firebaseCoreProject == null) { + throw new GradleException('Could not find the firebase_core FlutterFire plugin, have you added it as a dependency in your pubspec?') +} else if (!firebaseCoreProject.properties['FirebaseSDKVersion']) { + throw new GradleException('A newer version of the firebase_core FlutterFire plugin is required, please update your firebase_core pubspec dependency.') +} + +def getRootProjectExtOrCoreProperty(name, firebaseCoreProject) { + if (!rootProject.ext.has('FlutterFire')) return firebaseCoreProject.properties[name] + if (!rootProject.ext.get('FlutterFire')[name]) return firebaseCoreProject.properties[name] + return rootProject.ext.get('FlutterFire').get(name) +} + +android { + // Conditional for compatibility with AGP <4.2. + if (project.android.hasProperty("namespace")) { + namespace 'io.flutter.plugins.firebase.appcheck' + } + + compileSdkVersion project.ext.compileSdk + + defaultConfig { + minSdkVersion project.ext.minSdk + testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner" + } + + compileOptions { + sourceCompatibility project.ext.javaVersion + targetCompatibility project.ext.javaVersion + } + + sourceSets { + main.java.srcDirs += "src/main/kotlin" + test.java.srcDirs += "src/test/kotlin" + } + + buildFeatures { + buildConfig true + } + + lintOptions { + disable 'InvalidPackage' + } + + dependencies { + api firebaseCoreProject + implementation platform("com.google.firebase:firebase-bom:${getRootProjectExtOrCoreProperty("FirebaseSDKVersion", firebaseCoreProject)}") + implementation 'com.google.firebase:firebase-appcheck-debug' + implementation 'com.google.firebase:firebase-appcheck-playintegrity' + implementation 'com.google.firebase:firebase-appcheck-recaptcha' + implementation 'androidx.annotation:annotation:1.7.0' + } +} + +plugins.withId("org.jetbrains.kotlin.android") { + kotlin { + compilerOptions { + jvmTarget = org.jetbrains.kotlin.gradle.dsl.JvmTarget.fromTarget(project.ext.javaVersion.toString()) + } + } +} + +apply from: file("./user-agent.gradle") diff --git a/mih_ui/android/build/macos/SourcePackages/firebase_app_check-0.4.5/android/gradle.properties b/mih_ui/android/build/macos/SourcePackages/firebase_app_check-0.4.5/android/gradle.properties new file mode 100644 index 00000000..d9cf55df --- /dev/null +++ b/mih_ui/android/build/macos/SourcePackages/firebase_app_check-0.4.5/android/gradle.properties @@ -0,0 +1,2 @@ +org.gradle.jvmargs=-Xmx1536M +android.useAndroidX=true diff --git a/mih_ui/android/build/macos/SourcePackages/firebase_app_check-0.4.5/android/gradle/wrapper/gradle-wrapper.properties b/mih_ui/android/build/macos/SourcePackages/firebase_app_check-0.4.5/android/gradle/wrapper/gradle-wrapper.properties new file mode 100644 index 00000000..e411586a --- /dev/null +++ b/mih_ui/android/build/macos/SourcePackages/firebase_app_check-0.4.5/android/gradle/wrapper/gradle-wrapper.properties @@ -0,0 +1,5 @@ +distributionBase=GRADLE_USER_HOME +distributionPath=wrapper/dists +distributionUrl=https\://services.gradle.org/distributions/gradle-8.4-bin.zip +zipStoreBase=GRADLE_USER_HOME +zipStorePath=wrapper/dists diff --git a/mih_ui/android/build/macos/SourcePackages/firebase_app_check-0.4.5/android/local-config.gradle b/mih_ui/android/build/macos/SourcePackages/firebase_app_check-0.4.5/android/local-config.gradle new file mode 100644 index 00000000..802b7e1d --- /dev/null +++ b/mih_ui/android/build/macos/SourcePackages/firebase_app_check-0.4.5/android/local-config.gradle @@ -0,0 +1,7 @@ +ext { + compileSdk=34 + minSdk=23 + targetSdk=34 + javaVersion = JavaVersion.toVersion(17) + androidGradlePluginVersion = '8.3.0' +} \ No newline at end of file diff --git a/mih_ui/android/build/macos/SourcePackages/firebase_app_check-0.4.5/android/settings.gradle b/mih_ui/android/build/macos/SourcePackages/firebase_app_check-0.4.5/android/settings.gradle new file mode 100644 index 00000000..11ac1690 --- /dev/null +++ b/mih_ui/android/build/macos/SourcePackages/firebase_app_check-0.4.5/android/settings.gradle @@ -0,0 +1,10 @@ +rootProject.name = 'firebase_app_check' + +apply from: file("local-config.gradle") + +pluginManagement { + plugins { + id "com.android.application" version project.ext.androidGradlePluginVersion + id "com.android.library" version project.ext.androidGradlePluginVersion + } +} diff --git a/mih_ui/android/build/macos/SourcePackages/firebase_app_check-0.4.5/android/src/main/AndroidManifest.xml b/mih_ui/android/build/macos/SourcePackages/firebase_app_check-0.4.5/android/src/main/AndroidManifest.xml new file mode 100644 index 00000000..18867831 --- /dev/null +++ b/mih_ui/android/build/macos/SourcePackages/firebase_app_check-0.4.5/android/src/main/AndroidManifest.xml @@ -0,0 +1,9 @@ + + + + + + + diff --git a/mih_ui/android/build/macos/SourcePackages/firebase_app_check-0.4.5/android/src/main/kotlin/io/flutter/plugins/firebase/appcheck/FirebaseAppCheckPlugin.kt b/mih_ui/android/build/macos/SourcePackages/firebase_app_check-0.4.5/android/src/main/kotlin/io/flutter/plugins/firebase/appcheck/FirebaseAppCheckPlugin.kt new file mode 100644 index 00000000..99aab95e --- /dev/null +++ b/mih_ui/android/build/macos/SourcePackages/firebase_app_check-0.4.5/android/src/main/kotlin/io/flutter/plugins/firebase/appcheck/FirebaseAppCheckPlugin.kt @@ -0,0 +1,161 @@ +// Copyright 2025 The Chromium Authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. +package io.flutter.plugins.firebase.appcheck + +import android.os.Handler +import android.os.Looper +import com.google.android.gms.tasks.Task +import com.google.android.gms.tasks.TaskCompletionSource +import com.google.firebase.FirebaseApp +import com.google.firebase.appcheck.FirebaseAppCheck +import com.google.firebase.appcheck.debug.DebugAppCheckProviderFactory +import com.google.firebase.appcheck.playintegrity.PlayIntegrityAppCheckProviderFactory +import com.google.firebase.appcheck.recaptcha.RecaptchaAppCheckProviderFactory +import io.flutter.embedding.engine.plugins.FlutterPlugin +import io.flutter.embedding.engine.plugins.FlutterPlugin.FlutterPluginBinding +import io.flutter.plugin.common.BinaryMessenger +import io.flutter.plugin.common.EventChannel +import io.flutter.plugins.firebase.core.FlutterFirebasePlugin +import io.flutter.plugins.firebase.core.FlutterFirebasePluginRegistry + +class FirebaseAppCheckPlugin : FlutterFirebasePlugin, FlutterPlugin, FirebaseAppCheckHostApi { + + private val streamHandlers: MutableMap = HashMap() + private val eventChannels: MutableMap = HashMap() + private val mainThreadHandler = Handler(Looper.getMainLooper()) + private var messenger: BinaryMessenger? = null + + companion object { + const val METHOD_CHANNEL = "plugins.flutter.io/firebase_app_check" + const val EVENT_CHANNEL_PREFIX = "plugins.flutter.io/firebase_app_check/token/" + } + + override fun onAttachedToEngine(binding: FlutterPluginBinding) { + messenger = binding.binaryMessenger + FirebaseAppCheckHostApi.setUp(binding.binaryMessenger, this) + FlutterFirebasePluginRegistry.registerPlugin(METHOD_CHANNEL, this) + } + + override fun onDetachedFromEngine(binding: FlutterPluginBinding) { + FirebaseAppCheckHostApi.setUp(binding.binaryMessenger, null) + messenger = null + removeEventListeners() + } + + private fun getAppCheck(appName: String): FirebaseAppCheck { + val app = FirebaseApp.getInstance(appName) + return FirebaseAppCheck.getInstance(app) + } + + override fun activate( + appName: String, + androidProvider: String?, + appleProvider: String?, + debugToken: String?, + callback: (Result) -> Unit + ) { + try { + val firebaseAppCheck = getAppCheck(appName) + when (androidProvider) { + "debug" -> { + FlutterFirebaseAppRegistrar.debugToken = debugToken + firebaseAppCheck.installAppCheckProviderFactory( + DebugAppCheckProviderFactory.getInstance()) + } + "recaptcha" -> { + firebaseAppCheck.installAppCheckProviderFactory( + RecaptchaAppCheckProviderFactory.getInstance()) + } + else -> { + firebaseAppCheck.installAppCheckProviderFactory( + PlayIntegrityAppCheckProviderFactory.getInstance()) + } + } + callback(Result.success(Unit)) + } catch (e: Exception) { + callback(Result.failure(FlutterError("unknown", e.message, null))) + } + } + + override fun getToken( + appName: String, + forceRefresh: Boolean, + callback: (Result) -> Unit + ) { + val firebaseAppCheck = getAppCheck(appName) + firebaseAppCheck.getAppCheckToken(forceRefresh).addOnCompleteListener { task -> + if (task.isSuccessful) { + callback(Result.success(task.result?.token)) + } else { + callback(Result.failure(FlutterError("firebase_app_check", task.exception?.message, null))) + } + } + } + + override fun setTokenAutoRefreshEnabled( + appName: String, + isTokenAutoRefreshEnabled: Boolean, + callback: (Result) -> Unit + ) { + try { + val firebaseAppCheck = getAppCheck(appName) + firebaseAppCheck.setTokenAutoRefreshEnabled(isTokenAutoRefreshEnabled) + callback(Result.success(Unit)) + } catch (e: Exception) { + callback(Result.failure(FlutterError("unknown", e.message, null))) + } + } + + override fun registerTokenListener(appName: String, callback: (Result) -> Unit) { + try { + val firebaseAppCheck = getAppCheck(appName) + val name = EVENT_CHANNEL_PREFIX + appName + + val handler = TokenChannelStreamHandler(firebaseAppCheck) + val channel = EventChannel(messenger, name) + channel.setStreamHandler(handler) + eventChannels[name] = channel + streamHandlers[name] = handler + + callback(Result.success(name)) + } catch (e: Exception) { + callback(Result.failure(FlutterError("unknown", e.message, null))) + } + } + + override fun getLimitedUseAppCheckToken(appName: String, callback: (Result) -> Unit) { + val firebaseAppCheck = getAppCheck(appName) + firebaseAppCheck.limitedUseAppCheckToken.addOnCompleteListener { task -> + if (task.isSuccessful) { + callback(Result.success(task.result?.token ?: "")) + } else { + callback(Result.failure(FlutterError("firebase_app_check", task.exception?.message, null))) + } + } + } + + override fun getPluginConstantsForFirebaseApp(firebaseApp: FirebaseApp): Task> { + val taskCompletionSource = TaskCompletionSource>() + taskCompletionSource.setResult(HashMap()) + return taskCompletionSource.task + } + + override fun didReinitializeFirebaseCore(): Task { + val taskCompletionSource = TaskCompletionSource() + removeEventListeners() + taskCompletionSource.setResult(null) + return taskCompletionSource.task + } + + private fun removeEventListeners() { + for ((name, channel) in eventChannels) { + channel.setStreamHandler(null) + } + for ((name, handler) in streamHandlers) { + handler.onCancel(null) + } + eventChannels.clear() + streamHandlers.clear() + } +} diff --git a/mih_ui/android/build/macos/SourcePackages/firebase_app_check-0.4.5/android/src/main/kotlin/io/flutter/plugins/firebase/appcheck/FlutterFirebaseAppRegistrar.kt b/mih_ui/android/build/macos/SourcePackages/firebase_app_check-0.4.5/android/src/main/kotlin/io/flutter/plugins/firebase/appcheck/FlutterFirebaseAppRegistrar.kt new file mode 100644 index 00000000..1f1087b1 --- /dev/null +++ b/mih_ui/android/build/macos/SourcePackages/firebase_app_check-0.4.5/android/src/main/kotlin/io/flutter/plugins/firebase/appcheck/FlutterFirebaseAppRegistrar.kt @@ -0,0 +1,37 @@ +// Copyright 2025 The Chromium Authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. +package io.flutter.plugins.firebase.appcheck + +import androidx.annotation.Keep +import com.google.firebase.appcheck.debug.InternalDebugSecretProvider +import com.google.firebase.components.Component +import com.google.firebase.components.ComponentRegistrar +import com.google.firebase.platforminfo.LibraryVersionComponent + +@Keep +class FlutterFirebaseAppRegistrar : ComponentRegistrar, InternalDebugSecretProvider { + + companion object { + private const val DEBUG_SECRET_NAME = "fire-app-check-debug-secret" + + @JvmStatic var debugToken: String? = null + } + + override fun getComponents(): List> { + val library = + LibraryVersionComponent.create(BuildConfig.LIBRARY_NAME, BuildConfig.LIBRARY_VERSION) + + val debugSecretProvider = + Component.builder(InternalDebugSecretProvider::class.java) + .name(DEBUG_SECRET_NAME) + .factory { this } + .build() + + return listOf(library, debugSecretProvider) + } + + override fun getDebugSecret(): String? { + return debugToken + } +} diff --git a/mih_ui/android/build/macos/SourcePackages/firebase_app_check-0.4.5/android/src/main/kotlin/io/flutter/plugins/firebase/appcheck/GeneratedAndroidFirebaseAppCheck.g.kt b/mih_ui/android/build/macos/SourcePackages/firebase_app_check-0.4.5/android/src/main/kotlin/io/flutter/plugins/firebase/appcheck/GeneratedAndroidFirebaseAppCheck.g.kt new file mode 100644 index 00000000..4cd7a39b --- /dev/null +++ b/mih_ui/android/build/macos/SourcePackages/firebase_app_check-0.4.5/android/src/main/kotlin/io/flutter/plugins/firebase/appcheck/GeneratedAndroidFirebaseAppCheck.g.kt @@ -0,0 +1,223 @@ +// Copyright 2025, the Chromium project authors. Please see the AUTHORS file +// for details. All rights reserved. Use of this source code is governed by a +// BSD-style license that can be found in the LICENSE file. +// Autogenerated from Pigeon (v26.3.4), do not edit directly. +// See also: https://pub.dev/packages/pigeon +@file:Suppress("UNCHECKED_CAST", "ArrayInDataClass") + +package io.flutter.plugins.firebase.appcheck + +import android.util.Log +import io.flutter.plugin.common.BasicMessageChannel +import io.flutter.plugin.common.BinaryMessenger +import io.flutter.plugin.common.MessageCodec +import io.flutter.plugin.common.StandardMessageCodec +import java.io.ByteArrayOutputStream +import java.nio.ByteBuffer + +private object GeneratedAndroidFirebaseAppCheckPigeonUtils { + + fun wrapResult(result: Any?): List { + return listOf(result) + } + + fun wrapError(exception: Throwable): List { + return if (exception is FlutterError) { + listOf(exception.code, exception.message, exception.details) + } else { + listOf( + exception.javaClass.simpleName, + exception.toString(), + "Cause: " + exception.cause + ", Stacktrace: " + Log.getStackTraceString(exception)) + } + } +} + +/** + * Error class for passing custom error details to Flutter via a thrown PlatformException. + * + * @property code The error code. + * @property message The error message. + * @property details The error details. Must be a datatype supported by the api codec. + */ +class FlutterError( + val code: String, + override val message: String? = null, + val details: Any? = null +) : RuntimeException() + +private open class GeneratedAndroidFirebaseAppCheckPigeonCodec : StandardMessageCodec() { + override fun readValueOfType(type: Byte, buffer: ByteBuffer): Any? { + return super.readValueOfType(type, buffer) + } + + override fun writeValue(stream: ByteArrayOutputStream, value: Any?) { + super.writeValue(stream, value) + } +} + +/** Generated interface from Pigeon that represents a handler of messages from Flutter. */ +interface FirebaseAppCheckHostApi { + fun activate( + appName: String, + androidProvider: String?, + appleProvider: String?, + debugToken: String?, + callback: (Result) -> Unit + ) + + fun getToken(appName: String, forceRefresh: Boolean, callback: (Result) -> Unit) + + fun setTokenAutoRefreshEnabled( + appName: String, + isTokenAutoRefreshEnabled: Boolean, + callback: (Result) -> Unit + ) + + fun registerTokenListener(appName: String, callback: (Result) -> Unit) + + fun getLimitedUseAppCheckToken(appName: String, callback: (Result) -> Unit) + + companion object { + /** The codec used by FirebaseAppCheckHostApi. */ + val codec: MessageCodec by lazy { GeneratedAndroidFirebaseAppCheckPigeonCodec() } + /** + * Sets up an instance of `FirebaseAppCheckHostApi` to handle messages through the + * `binaryMessenger`. + */ + @JvmOverloads + fun setUp( + binaryMessenger: BinaryMessenger, + api: FirebaseAppCheckHostApi?, + messageChannelSuffix: String = "" + ) { + val separatedMessageChannelSuffix = + if (messageChannelSuffix.isNotEmpty()) ".$messageChannelSuffix" else "" + run { + val channel = + BasicMessageChannel( + binaryMessenger, + "dev.flutter.pigeon.firebase_app_check_platform_interface.FirebaseAppCheckHostApi.activate$separatedMessageChannelSuffix", + codec) + if (api != null) { + channel.setMessageHandler { message, reply -> + val args = message as List + val appNameArg = args[0] as String + val androidProviderArg = args[1] as String? + val appleProviderArg = args[2] as String? + val debugTokenArg = args[3] as String? + api.activate(appNameArg, androidProviderArg, appleProviderArg, debugTokenArg) { + result: Result -> + val error = result.exceptionOrNull() + if (error != null) { + reply.reply(GeneratedAndroidFirebaseAppCheckPigeonUtils.wrapError(error)) + } else { + reply.reply(GeneratedAndroidFirebaseAppCheckPigeonUtils.wrapResult(null)) + } + } + } + } else { + channel.setMessageHandler(null) + } + } + run { + val channel = + BasicMessageChannel( + binaryMessenger, + "dev.flutter.pigeon.firebase_app_check_platform_interface.FirebaseAppCheckHostApi.getToken$separatedMessageChannelSuffix", + codec) + if (api != null) { + channel.setMessageHandler { message, reply -> + val args = message as List + val appNameArg = args[0] as String + val forceRefreshArg = args[1] as Boolean + api.getToken(appNameArg, forceRefreshArg) { result: Result -> + val error = result.exceptionOrNull() + if (error != null) { + reply.reply(GeneratedAndroidFirebaseAppCheckPigeonUtils.wrapError(error)) + } else { + val data = result.getOrNull() + reply.reply(GeneratedAndroidFirebaseAppCheckPigeonUtils.wrapResult(data)) + } + } + } + } else { + channel.setMessageHandler(null) + } + } + run { + val channel = + BasicMessageChannel( + binaryMessenger, + "dev.flutter.pigeon.firebase_app_check_platform_interface.FirebaseAppCheckHostApi.setTokenAutoRefreshEnabled$separatedMessageChannelSuffix", + codec) + if (api != null) { + channel.setMessageHandler { message, reply -> + val args = message as List + val appNameArg = args[0] as String + val isTokenAutoRefreshEnabledArg = args[1] as Boolean + api.setTokenAutoRefreshEnabled(appNameArg, isTokenAutoRefreshEnabledArg) { + result: Result -> + val error = result.exceptionOrNull() + if (error != null) { + reply.reply(GeneratedAndroidFirebaseAppCheckPigeonUtils.wrapError(error)) + } else { + reply.reply(GeneratedAndroidFirebaseAppCheckPigeonUtils.wrapResult(null)) + } + } + } + } else { + channel.setMessageHandler(null) + } + } + run { + val channel = + BasicMessageChannel( + binaryMessenger, + "dev.flutter.pigeon.firebase_app_check_platform_interface.FirebaseAppCheckHostApi.registerTokenListener$separatedMessageChannelSuffix", + codec) + if (api != null) { + channel.setMessageHandler { message, reply -> + val args = message as List + val appNameArg = args[0] as String + api.registerTokenListener(appNameArg) { result: Result -> + val error = result.exceptionOrNull() + if (error != null) { + reply.reply(GeneratedAndroidFirebaseAppCheckPigeonUtils.wrapError(error)) + } else { + val data = result.getOrNull() + reply.reply(GeneratedAndroidFirebaseAppCheckPigeonUtils.wrapResult(data)) + } + } + } + } else { + channel.setMessageHandler(null) + } + } + run { + val channel = + BasicMessageChannel( + binaryMessenger, + "dev.flutter.pigeon.firebase_app_check_platform_interface.FirebaseAppCheckHostApi.getLimitedUseAppCheckToken$separatedMessageChannelSuffix", + codec) + if (api != null) { + channel.setMessageHandler { message, reply -> + val args = message as List + val appNameArg = args[0] as String + api.getLimitedUseAppCheckToken(appNameArg) { result: Result -> + val error = result.exceptionOrNull() + if (error != null) { + reply.reply(GeneratedAndroidFirebaseAppCheckPigeonUtils.wrapError(error)) + } else { + val data = result.getOrNull() + reply.reply(GeneratedAndroidFirebaseAppCheckPigeonUtils.wrapResult(data)) + } + } + } + } else { + channel.setMessageHandler(null) + } + } + } + } +} diff --git a/mih_ui/android/build/macos/SourcePackages/firebase_app_check-0.4.5/android/src/main/kotlin/io/flutter/plugins/firebase/appcheck/TokenChannelStreamHandler.kt b/mih_ui/android/build/macos/SourcePackages/firebase_app_check-0.4.5/android/src/main/kotlin/io/flutter/plugins/firebase/appcheck/TokenChannelStreamHandler.kt new file mode 100644 index 00000000..81d1b83e --- /dev/null +++ b/mih_ui/android/build/macos/SourcePackages/firebase_app_check-0.4.5/android/src/main/kotlin/io/flutter/plugins/firebase/appcheck/TokenChannelStreamHandler.kt @@ -0,0 +1,30 @@ +// Copyright 2025 The Chromium Authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. +package io.flutter.plugins.firebase.appcheck + +import com.google.firebase.appcheck.FirebaseAppCheck +import io.flutter.plugin.common.EventChannel + +class TokenChannelStreamHandler(private val firebaseAppCheck: FirebaseAppCheck) : + EventChannel.StreamHandler { + + private var listener: FirebaseAppCheck.AppCheckListener? = null + + override fun onListen(arguments: Any?, events: EventChannel.EventSink) { + listener = + FirebaseAppCheck.AppCheckListener { result -> + val event = HashMap() + event["token"] = result.token + events.success(event) + } + firebaseAppCheck.addAppCheckListener(listener!!) + } + + override fun onCancel(arguments: Any?) { + listener?.let { + firebaseAppCheck.removeAppCheckListener(it) + listener = null + } + } +} diff --git a/mih_ui/android/build/macos/SourcePackages/firebase_app_check-0.4.5/android/user-agent.gradle b/mih_ui/android/build/macos/SourcePackages/firebase_app_check-0.4.5/android/user-agent.gradle new file mode 100644 index 00000000..7b9c028a --- /dev/null +++ b/mih_ui/android/build/macos/SourcePackages/firebase_app_check-0.4.5/android/user-agent.gradle @@ -0,0 +1,22 @@ +import java.util.regex.Matcher +import java.util.regex.Pattern + +String libraryVersionName = "UNKNOWN" +String libraryName = "flutter-fire-app-check" +File pubspec = new File(project.projectDir.parentFile, 'pubspec.yaml') + +if (pubspec.exists()) { + String yaml = pubspec.text + // Using \s*['|"]?([^\n|'|"]*)['|"]? to extract version number. + Matcher versionMatcher = Pattern.compile("^version:\\s*['|\"]?([^\\n|'|\"]*)['|\"]?\$", Pattern.MULTILINE).matcher(yaml) + if (versionMatcher.find()) libraryVersionName = versionMatcher.group(1).replaceAll("\\+", "-") +} + +android { + defaultConfig { + // BuildConfig.VERSION_NAME + buildConfigField 'String', 'LIBRARY_VERSION', "\"${libraryVersionName}\"" + // BuildConfig.LIBRARY_NAME + buildConfigField 'String', 'LIBRARY_NAME', "\"${libraryName}\"" + } +} diff --git a/mih_ui/android/build/macos/SourcePackages/firebase_app_check-0.4.5/example/README.md b/mih_ui/android/build/macos/SourcePackages/firebase_app_check-0.4.5/example/README.md new file mode 100644 index 00000000..595e1145 --- /dev/null +++ b/mih_ui/android/build/macos/SourcePackages/firebase_app_check-0.4.5/example/README.md @@ -0,0 +1,8 @@ +# firebase_app_check_example + +Demonstrates how to use the firebase_app_check plugin. + +## Getting Started + +For help getting started with Flutter, view our online +[documentation](https://flutter.dev/). diff --git a/mih_ui/android/build/macos/SourcePackages/firebase_app_check-0.4.5/example/analysis_options.yaml b/mih_ui/android/build/macos/SourcePackages/firebase_app_check-0.4.5/example/analysis_options.yaml new file mode 100644 index 00000000..b6cd704f --- /dev/null +++ b/mih_ui/android/build/macos/SourcePackages/firebase_app_check-0.4.5/example/analysis_options.yaml @@ -0,0 +1,10 @@ +# Copyright 2021 The Chromium Authors. All rights reserved. +# Use of this source code is governed by a BSD-style license that can be +# in the LICENSE file. + +include: ../../../../analysis_options.yaml +linter: + rules: + avoid_print: false + depend_on_referenced_packages: false + library_private_types_in_public_api: false diff --git a/mih_ui/android/build/macos/SourcePackages/firebase_app_check-0.4.5/example/android/app/build.gradle b/mih_ui/android/build/macos/SourcePackages/firebase_app_check-0.4.5/example/android/app/build.gradle new file mode 100644 index 00000000..92298e72 --- /dev/null +++ b/mih_ui/android/build/macos/SourcePackages/firebase_app_check-0.4.5/example/android/app/build.gradle @@ -0,0 +1,65 @@ +plugins { + id "com.android.application" + // START: FlutterFire Configuration + id 'com.google.gms.google-services' + // END: FlutterFire Configuration + id "kotlin-android" + // The Flutter Gradle Plugin must be applied after the Android and Kotlin Gradle plugins. + id "dev.flutter.flutter-gradle-plugin" +} +apply from: file("../../../android/local-config.gradle") + +def localProperties = new Properties() +def localPropertiesFile = rootProject.file("local.properties") +if (localPropertiesFile.exists()) { + localPropertiesFile.withReader("UTF-8") { reader -> + localProperties.load(reader) + } +} + +def flutterVersionCode = localProperties.getProperty("flutter.versionCode") +if (flutterVersionCode == null) { + flutterVersionCode = "1" +} + +def flutterVersionName = localProperties.getProperty("flutter.versionName") +if (flutterVersionName == null) { + flutterVersionName = "1.0" +} + +android { + namespace = "io.flutter.plugins.firebase.appcheck.example" + compileSdk = flutter.compileSdkVersion + ndkVersion = flutter.ndkVersion + + compileOptions { + sourceCompatibility = project.ext.javaVersion + targetCompatibility = project.ext.javaVersion + } + + kotlinOptions { + jvmTarget = "17" + } + + defaultConfig { + applicationId = "io.flutter.plugins.firebase.appcheck.example" + // You can update the following values to match your application needs. + // For more information, see: https://docs.flutter.dev/deployment/android#reviewing-the-gradle-build-configuration. + minSdkVersion = flutter.minSdkVersion + targetSdk = flutter.targetSdkVersion + versionCode = flutterVersionCode.toInteger() + versionName = flutterVersionName + } + + buildTypes { + release { + // TODO: Add your own signing config for the release build. + // Signing with the debug keys for now, so `flutter run --release` works. + signingConfig = signingConfigs.debug + } + } +} + +flutter { + source = "../.." +} diff --git a/mih_ui/android/build/macos/SourcePackages/firebase_app_check-0.4.5/example/android/app/google-services.json b/mih_ui/android/build/macos/SourcePackages/firebase_app_check-0.4.5/example/android/app/google-services.json new file mode 100644 index 00000000..6b7e0408 --- /dev/null +++ b/mih_ui/android/build/macos/SourcePackages/firebase_app_check-0.4.5/example/android/app/google-services.json @@ -0,0 +1,615 @@ +{ + "project_info": { + "project_number": "406099696497", + "firebase_url": "https://flutterfire-e2e-tests-default-rtdb.europe-west1.firebasedatabase.app", + "project_id": "flutterfire-e2e-tests", + "storage_bucket": "flutterfire-e2e-tests.appspot.com" + }, + "client": [ + { + "client_info": { + "mobilesdk_app_id": "1:406099696497:android:d86a91cc7b338b233574d0", + "android_client_info": { + "package_name": "io.flutter.plugins.firebase.analytics.example" + } + }, + "oauth_client": [ + { + "client_id": "406099696497-a12gakvts4epfk5pkio7dphc1anjiggc.apps.googleusercontent.com", + "client_type": 3 + } + ], + "api_key": [ + { + "current_key": "AIzaSyCdRjCVZlhrq72RuEklEyyxYlBRCYhI2Sw" + } + ], + "services": { + "appinvite_service": { + "other_platform_oauth_client": [ + { + "client_id": "406099696497-a12gakvts4epfk5pkio7dphc1anjiggc.apps.googleusercontent.com", + "client_type": 3 + }, + { + "client_id": "406099696497-0mofiof3ofcgmpmirb6q0fllvb372sme.apps.googleusercontent.com", + "client_type": 2, + "ios_info": { + "bundle_id": "io.flutter.plugins.firebase.example" + } + } + ] + } + } + }, + { + "client_info": { + "mobilesdk_app_id": "1:406099696497:android:a241c4b471513a203574d0", + "android_client_info": { + "package_name": "io.flutter.plugins.firebase.appcheck.example" + } + }, + "oauth_client": [ + { + "client_id": "406099696497-7bvmqp0fffe24vm2arng0dtdeh2tvkgl.apps.googleusercontent.com", + "client_type": 1, + "android_info": { + "package_name": "io.flutter.plugins.firebase.appcheck.example", + "certificate_hash": "909ca1482ef022bbae45a2db6b6d05d807a4c4aa" + } + }, + { + "client_id": "406099696497-a12gakvts4epfk5pkio7dphc1anjiggc.apps.googleusercontent.com", + "client_type": 3 + } + ], + "api_key": [ + { + "current_key": "AIzaSyCdRjCVZlhrq72RuEklEyyxYlBRCYhI2Sw" + } + ], + "services": { + "appinvite_service": { + "other_platform_oauth_client": [ + { + "client_id": "406099696497-a12gakvts4epfk5pkio7dphc1anjiggc.apps.googleusercontent.com", + "client_type": 3 + }, + { + "client_id": "406099696497-0mofiof3ofcgmpmirb6q0fllvb372sme.apps.googleusercontent.com", + "client_type": 2, + "ios_info": { + "bundle_id": "io.flutter.plugins.firebase.example" + } + } + ] + } + } + }, + { + "client_info": { + "mobilesdk_app_id": "1:406099696497:android:21d5142deea38dda3574d0", + "android_client_info": { + "package_name": "io.flutter.plugins.firebase.auth.example" + } + }, + "oauth_client": [ + { + "client_id": "406099696497-emmujnd7g2ammh5uu9ni6v04p4ateqac.apps.googleusercontent.com", + "client_type": 1, + "android_info": { + "package_name": "io.flutter.plugins.firebase.auth.example", + "certificate_hash": "5ad0d6d5cbe577ca185b8df246656bebc3957128" + } + }, + { + "client_id": "406099696497-in8bfp0nali85oul1o98huoar6eo1vv1.apps.googleusercontent.com", + "client_type": 1, + "android_info": { + "package_name": "io.flutter.plugins.firebase.auth.example", + "certificate_hash": "909ca1482ef022bbae45a2db6b6d05d807a4c4aa" + } + }, + { + "client_id": "406099696497-a12gakvts4epfk5pkio7dphc1anjiggc.apps.googleusercontent.com", + "client_type": 3 + } + ], + "api_key": [ + { + "current_key": "AIzaSyCdRjCVZlhrq72RuEklEyyxYlBRCYhI2Sw" + } + ], + "services": { + "appinvite_service": { + "other_platform_oauth_client": [ + { + "client_id": "406099696497-a12gakvts4epfk5pkio7dphc1anjiggc.apps.googleusercontent.com", + "client_type": 3 + }, + { + "client_id": "406099696497-0mofiof3ofcgmpmirb6q0fllvb372sme.apps.googleusercontent.com", + "client_type": 2, + "ios_info": { + "bundle_id": "io.flutter.plugins.firebase.example" + } + } + ] + } + } + }, + { + "client_info": { + "mobilesdk_app_id": "1:406099696497:android:3ef965ff044efc0b3574d0", + "android_client_info": { + "package_name": "io.flutter.plugins.firebase.database.example" + } + }, + "oauth_client": [ + { + "client_id": "406099696497-a12gakvts4epfk5pkio7dphc1anjiggc.apps.googleusercontent.com", + "client_type": 3 + } + ], + "api_key": [ + { + "current_key": "AIzaSyCdRjCVZlhrq72RuEklEyyxYlBRCYhI2Sw" + } + ], + "services": { + "appinvite_service": { + "other_platform_oauth_client": [ + { + "client_id": "406099696497-a12gakvts4epfk5pkio7dphc1anjiggc.apps.googleusercontent.com", + "client_type": 3 + }, + { + "client_id": "406099696497-0mofiof3ofcgmpmirb6q0fllvb372sme.apps.googleusercontent.com", + "client_type": 2, + "ios_info": { + "bundle_id": "io.flutter.plugins.firebase.example" + } + } + ] + } + } + }, + { + "client_info": { + "mobilesdk_app_id": "1:406099696497:android:40da41183cb3d3ff3574d0", + "android_client_info": { + "package_name": "io.flutter.plugins.firebase.dynamiclinksexample" + } + }, + "oauth_client": [ + { + "client_id": "406099696497-a12gakvts4epfk5pkio7dphc1anjiggc.apps.googleusercontent.com", + "client_type": 3 + } + ], + "api_key": [ + { + "current_key": "AIzaSyCdRjCVZlhrq72RuEklEyyxYlBRCYhI2Sw" + } + ], + "services": { + "appinvite_service": { + "other_platform_oauth_client": [ + { + "client_id": "406099696497-a12gakvts4epfk5pkio7dphc1anjiggc.apps.googleusercontent.com", + "client_type": 3 + }, + { + "client_id": "406099696497-0mofiof3ofcgmpmirb6q0fllvb372sme.apps.googleusercontent.com", + "client_type": 2, + "ios_info": { + "bundle_id": "io.flutter.plugins.firebase.example" + } + } + ] + } + } + }, + { + "client_info": { + "mobilesdk_app_id": "1:406099696497:android:175ea7a64b2faf5e3574d0", + "android_client_info": { + "package_name": "io.flutter.plugins.firebase.firestore.example" + } + }, + "oauth_client": [ + { + "client_id": "406099696497-a12gakvts4epfk5pkio7dphc1anjiggc.apps.googleusercontent.com", + "client_type": 3 + } + ], + "api_key": [ + { + "current_key": "AIzaSyCdRjCVZlhrq72RuEklEyyxYlBRCYhI2Sw" + } + ], + "services": { + "appinvite_service": { + "other_platform_oauth_client": [ + { + "client_id": "406099696497-a12gakvts4epfk5pkio7dphc1anjiggc.apps.googleusercontent.com", + "client_type": 3 + }, + { + "client_id": "406099696497-0mofiof3ofcgmpmirb6q0fllvb372sme.apps.googleusercontent.com", + "client_type": 2, + "ios_info": { + "bundle_id": "io.flutter.plugins.firebase.example" + } + } + ] + } + } + }, + { + "client_info": { + "mobilesdk_app_id": "1:406099696497:android:7ca3394493cc601a3574d0", + "android_client_info": { + "package_name": "io.flutter.plugins.firebase.functions.example" + } + }, + "oauth_client": [ + { + "client_id": "406099696497-17qn06u8a0dc717u8ul7s49ampk13lul.apps.googleusercontent.com", + "client_type": 1, + "android_info": { + "package_name": "io.flutter.plugins.firebase.functions.example", + "certificate_hash": "a4256c0612686b336af6d138a5479b7dc1ee1af6" + } + }, + { + "client_id": "406099696497-tvtvuiqogct1gs1s6lh114jeps7hpjm5.apps.googleusercontent.com", + "client_type": 1, + "android_info": { + "package_name": "io.flutter.plugins.firebase.functions.example", + "certificate_hash": "909ca1482ef022bbae45a2db6b6d05d807a4c4aa" + } + }, + { + "client_id": "406099696497-a12gakvts4epfk5pkio7dphc1anjiggc.apps.googleusercontent.com", + "client_type": 3 + } + ], + "api_key": [ + { + "current_key": "AIzaSyCdRjCVZlhrq72RuEklEyyxYlBRCYhI2Sw" + } + ], + "services": { + "appinvite_service": { + "other_platform_oauth_client": [ + { + "client_id": "406099696497-a12gakvts4epfk5pkio7dphc1anjiggc.apps.googleusercontent.com", + "client_type": 3 + }, + { + "client_id": "406099696497-0mofiof3ofcgmpmirb6q0fllvb372sme.apps.googleusercontent.com", + "client_type": 2, + "ios_info": { + "bundle_id": "io.flutter.plugins.firebase.example" + } + } + ] + } + } + }, + { + "client_info": { + "mobilesdk_app_id": "1:406099696497:android:6d1c1fbf4688f39c3574d0", + "android_client_info": { + "package_name": "io.flutter.plugins.firebase.installations.example" + } + }, + "oauth_client": [ + { + "client_id": "406099696497-a12gakvts4epfk5pkio7dphc1anjiggc.apps.googleusercontent.com", + "client_type": 3 + } + ], + "api_key": [ + { + "current_key": "AIzaSyCdRjCVZlhrq72RuEklEyyxYlBRCYhI2Sw" + } + ], + "services": { + "appinvite_service": { + "other_platform_oauth_client": [ + { + "client_id": "406099696497-a12gakvts4epfk5pkio7dphc1anjiggc.apps.googleusercontent.com", + "client_type": 3 + }, + { + "client_id": "406099696497-0mofiof3ofcgmpmirb6q0fllvb372sme.apps.googleusercontent.com", + "client_type": 2, + "ios_info": { + "bundle_id": "io.flutter.plugins.firebase.example" + } + } + ] + } + } + }, + { + "client_info": { + "mobilesdk_app_id": "1:406099696497:android:74ebb073d7727cd43574d0", + "android_client_info": { + "package_name": "io.flutter.plugins.firebase.messaging.example" + } + }, + "oauth_client": [ + { + "client_id": "406099696497-a12gakvts4epfk5pkio7dphc1anjiggc.apps.googleusercontent.com", + "client_type": 3 + } + ], + "api_key": [ + { + "current_key": "AIzaSyCdRjCVZlhrq72RuEklEyyxYlBRCYhI2Sw" + } + ], + "services": { + "appinvite_service": { + "other_platform_oauth_client": [ + { + "client_id": "406099696497-a12gakvts4epfk5pkio7dphc1anjiggc.apps.googleusercontent.com", + "client_type": 3 + }, + { + "client_id": "406099696497-0mofiof3ofcgmpmirb6q0fllvb372sme.apps.googleusercontent.com", + "client_type": 2, + "ios_info": { + "bundle_id": "io.flutter.plugins.firebase.example" + } + } + ] + } + } + }, + { + "client_info": { + "mobilesdk_app_id": "1:406099696497:android:f54b85cfa36a39f73574d0", + "android_client_info": { + "package_name": "io.flutter.plugins.firebase.remoteconfig.example" + } + }, + "oauth_client": [ + { + "client_id": "406099696497-a12gakvts4epfk5pkio7dphc1anjiggc.apps.googleusercontent.com", + "client_type": 3 + } + ], + "api_key": [ + { + "current_key": "AIzaSyCdRjCVZlhrq72RuEklEyyxYlBRCYhI2Sw" + } + ], + "services": { + "appinvite_service": { + "other_platform_oauth_client": [ + { + "client_id": "406099696497-a12gakvts4epfk5pkio7dphc1anjiggc.apps.googleusercontent.com", + "client_type": 3 + }, + { + "client_id": "406099696497-0mofiof3ofcgmpmirb6q0fllvb372sme.apps.googleusercontent.com", + "client_type": 2, + "ios_info": { + "bundle_id": "io.flutter.plugins.firebase.example" + } + } + ] + } + } + }, + { + "client_info": { + "mobilesdk_app_id": "1:406099696497:android:0d4ed619c031c0ac3574d0", + "android_client_info": { + "package_name": "io.flutter.plugins.firebase.tests" + } + }, + "oauth_client": [ + { + "client_id": "406099696497-ib9hj9281l3343cm3nfvvdotaojrthdc.apps.googleusercontent.com", + "client_type": 1, + "android_info": { + "package_name": "io.flutter.plugins.firebase.tests", + "certificate_hash": "5ad0d6d5cbe577ca185b8df246656bebc3957128" + } + }, + { + "client_id": "406099696497-lc54d5l8sp90k39r0bb39ovsgo1s9bek.apps.googleusercontent.com", + "client_type": 1, + "android_info": { + "package_name": "io.flutter.plugins.firebase.tests", + "certificate_hash": "909ca1482ef022bbae45a2db6b6d05d807a4c4aa" + } + }, + { + "client_id": "406099696497-a12gakvts4epfk5pkio7dphc1anjiggc.apps.googleusercontent.com", + "client_type": 3 + } + ], + "api_key": [ + { + "current_key": "AIzaSyCdRjCVZlhrq72RuEklEyyxYlBRCYhI2Sw" + } + ], + "services": { + "appinvite_service": { + "other_platform_oauth_client": [ + { + "client_id": "406099696497-a12gakvts4epfk5pkio7dphc1anjiggc.apps.googleusercontent.com", + "client_type": 3 + }, + { + "client_id": "406099696497-0mofiof3ofcgmpmirb6q0fllvb372sme.apps.googleusercontent.com", + "client_type": 2, + "ios_info": { + "bundle_id": "io.flutter.plugins.firebase.example" + } + } + ] + } + } + }, + { + "client_info": { + "mobilesdk_app_id": "1:406099696497:android:899c6485cfce26c13574d0", + "android_client_info": { + "package_name": "io.flutter.plugins.firebase_ui_example" + } + }, + "oauth_client": [ + { + "client_id": "406099696497-ltgvphphcckosvqhituel5km2k3aecg8.apps.googleusercontent.com", + "client_type": 1, + "android_info": { + "package_name": "io.flutter.plugins.firebase_ui_example", + "certificate_hash": "a4256c0612686b336af6d138a5479b7dc1ee1af6" + } + }, + { + "client_id": "406099696497-a12gakvts4epfk5pkio7dphc1anjiggc.apps.googleusercontent.com", + "client_type": 3 + } + ], + "api_key": [ + { + "current_key": "AIzaSyCdRjCVZlhrq72RuEklEyyxYlBRCYhI2Sw" + } + ], + "services": { + "appinvite_service": { + "other_platform_oauth_client": [ + { + "client_id": "406099696497-a12gakvts4epfk5pkio7dphc1anjiggc.apps.googleusercontent.com", + "client_type": 3 + }, + { + "client_id": "406099696497-0mofiof3ofcgmpmirb6q0fllvb372sme.apps.googleusercontent.com", + "client_type": 2, + "ios_info": { + "bundle_id": "io.flutter.plugins.firebase.example" + } + } + ] + } + } + }, + { + "client_info": { + "mobilesdk_app_id": "1:406099696497:android:bc0b12b0605df8633574d0", + "android_client_info": { + "package_name": "io.flutter.plugins.firebasecoreexample" + } + }, + "oauth_client": [ + { + "client_id": "406099696497-a12gakvts4epfk5pkio7dphc1anjiggc.apps.googleusercontent.com", + "client_type": 3 + } + ], + "api_key": [ + { + "current_key": "AIzaSyCdRjCVZlhrq72RuEklEyyxYlBRCYhI2Sw" + } + ], + "services": { + "appinvite_service": { + "other_platform_oauth_client": [ + { + "client_id": "406099696497-a12gakvts4epfk5pkio7dphc1anjiggc.apps.googleusercontent.com", + "client_type": 3 + }, + { + "client_id": "406099696497-0mofiof3ofcgmpmirb6q0fllvb372sme.apps.googleusercontent.com", + "client_type": 2, + "ios_info": { + "bundle_id": "io.flutter.plugins.firebase.example" + } + } + ] + } + } + }, + { + "client_info": { + "mobilesdk_app_id": "1:406099696497:android:0f3f7bfe78b8b7103574d0", + "android_client_info": { + "package_name": "io.flutter.plugins.firebasecrashlyticsexample" + } + }, + "oauth_client": [ + { + "client_id": "406099696497-a12gakvts4epfk5pkio7dphc1anjiggc.apps.googleusercontent.com", + "client_type": 3 + } + ], + "api_key": [ + { + "current_key": "AIzaSyCdRjCVZlhrq72RuEklEyyxYlBRCYhI2Sw" + } + ], + "services": { + "appinvite_service": { + "other_platform_oauth_client": [ + { + "client_id": "406099696497-a12gakvts4epfk5pkio7dphc1anjiggc.apps.googleusercontent.com", + "client_type": 3 + }, + { + "client_id": "406099696497-0mofiof3ofcgmpmirb6q0fllvb372sme.apps.googleusercontent.com", + "client_type": 2, + "ios_info": { + "bundle_id": "io.flutter.plugins.firebase.example" + } + } + ] + } + } + }, + { + "client_info": { + "mobilesdk_app_id": "1:406099696497:android:2751af6868a69f073574d0", + "android_client_info": { + "package_name": "io.flutter.plugins.firebasestorageexample" + } + }, + "oauth_client": [ + { + "client_id": "406099696497-a12gakvts4epfk5pkio7dphc1anjiggc.apps.googleusercontent.com", + "client_type": 3 + } + ], + "api_key": [ + { + "current_key": "AIzaSyCdRjCVZlhrq72RuEklEyyxYlBRCYhI2Sw" + } + ], + "services": { + "appinvite_service": { + "other_platform_oauth_client": [ + { + "client_id": "406099696497-a12gakvts4epfk5pkio7dphc1anjiggc.apps.googleusercontent.com", + "client_type": 3 + }, + { + "client_id": "406099696497-0mofiof3ofcgmpmirb6q0fllvb372sme.apps.googleusercontent.com", + "client_type": 2, + "ios_info": { + "bundle_id": "io.flutter.plugins.firebase.example" + } + } + ] + } + } + } + ], + "configuration_version": "1" +} \ No newline at end of file diff --git a/mih_ui/android/build/macos/SourcePackages/firebase_app_check-0.4.5/example/android/app/src/debug/AndroidManifest.xml b/mih_ui/android/build/macos/SourcePackages/firebase_app_check-0.4.5/example/android/app/src/debug/AndroidManifest.xml new file mode 100644 index 00000000..399f6981 --- /dev/null +++ b/mih_ui/android/build/macos/SourcePackages/firebase_app_check-0.4.5/example/android/app/src/debug/AndroidManifest.xml @@ -0,0 +1,7 @@ + + + + diff --git a/mih_ui/android/build/macos/SourcePackages/firebase_app_check-0.4.5/example/android/app/src/main/AndroidManifest.xml b/mih_ui/android/build/macos/SourcePackages/firebase_app_check-0.4.5/example/android/app/src/main/AndroidManifest.xml new file mode 100644 index 00000000..74a78b93 --- /dev/null +++ b/mih_ui/android/build/macos/SourcePackages/firebase_app_check-0.4.5/example/android/app/src/main/AndroidManifest.xml @@ -0,0 +1,45 @@ + + + + + + + + + + + + + + + + + + + + + diff --git a/mih_ui/android/build/macos/SourcePackages/firebase_app_check-0.4.5/example/android/app/src/main/kotlin/io/flutter/plugins/firebase/appcheck/example/MainActivity.kt b/mih_ui/android/build/macos/SourcePackages/firebase_app_check-0.4.5/example/android/app/src/main/kotlin/io/flutter/plugins/firebase/appcheck/example/MainActivity.kt new file mode 100644 index 00000000..fd3526f1 --- /dev/null +++ b/mih_ui/android/build/macos/SourcePackages/firebase_app_check-0.4.5/example/android/app/src/main/kotlin/io/flutter/plugins/firebase/appcheck/example/MainActivity.kt @@ -0,0 +1,5 @@ +package io.flutter.plugins.firebase.appcheck.example + +import io.flutter.embedding.android.FlutterActivity + +class MainActivity : FlutterActivity() diff --git a/mih_ui/android/build/macos/SourcePackages/firebase_app_check-0.4.5/example/android/app/src/main/res/drawable-v21/launch_background.xml b/mih_ui/android/build/macos/SourcePackages/firebase_app_check-0.4.5/example/android/app/src/main/res/drawable-v21/launch_background.xml new file mode 100644 index 00000000..f74085f3 --- /dev/null +++ b/mih_ui/android/build/macos/SourcePackages/firebase_app_check-0.4.5/example/android/app/src/main/res/drawable-v21/launch_background.xml @@ -0,0 +1,12 @@ + + + + + + + + diff --git a/mih_ui/android/build/macos/SourcePackages/firebase_app_check-0.4.5/example/android/app/src/main/res/drawable/launch_background.xml b/mih_ui/android/build/macos/SourcePackages/firebase_app_check-0.4.5/example/android/app/src/main/res/drawable/launch_background.xml new file mode 100644 index 00000000..304732f8 --- /dev/null +++ b/mih_ui/android/build/macos/SourcePackages/firebase_app_check-0.4.5/example/android/app/src/main/res/drawable/launch_background.xml @@ -0,0 +1,12 @@ + + + + + + + + diff --git a/mih_ui/android/build/macos/SourcePackages/firebase_app_check-0.4.5/example/android/app/src/main/res/mipmap-hdpi/ic_launcher.png b/mih_ui/android/build/macos/SourcePackages/firebase_app_check-0.4.5/example/android/app/src/main/res/mipmap-hdpi/ic_launcher.png new file mode 100644 index 0000000000000000000000000000000000000000..db77bb4b7b0906d62b1847e87f15cdcacf6a4f29 GIT binary patch literal 544 zcmeAS@N?(olHy`uVBq!ia0vp^9w5xY3?!3`olAj~WQl7;NpOBzNqJ&XDuZK6ep0G} zXKrG8YEWuoN@d~6R2!h8bpbvhu0Wd6uZuB!w&u2PAxD2eNXD>P5D~Wn-+_Wa#27Xc zC?Zj|6r#X(-D3u$NCt}(Ms06KgJ4FxJVv{GM)!I~&n8Bnc94O7-Hd)cjDZswgC;Qs zO=b+9!WcT8F?0rF7!Uys2bs@gozCP?z~o%U|N3vA*22NaGQG zlg@K`O_XuxvZ&Ks^m&R!`&1=spLvfx7oGDKDwpwW`#iqdw@AL`7MR}m`rwr|mZgU`8P7SBkL78fFf!WnuYWm$5Z0 zNXhDbCv&49sM544K|?c)WrFfiZvCi9h0O)B3Pgg&ebxsLQ05GG~ AQ2+n{ literal 0 HcmV?d00001 diff --git a/mih_ui/android/build/macos/SourcePackages/firebase_app_check-0.4.5/example/android/app/src/main/res/mipmap-mdpi/ic_launcher.png b/mih_ui/android/build/macos/SourcePackages/firebase_app_check-0.4.5/example/android/app/src/main/res/mipmap-mdpi/ic_launcher.png new file mode 100644 index 0000000000000000000000000000000000000000..17987b79bb8a35cc66c3c1fd44f5a5526c1b78be GIT binary patch literal 442 zcmeAS@N?(olHy`uVBq!ia0vp^1|ZDA3?vioaBc-sk|nMYCBgY=CFO}lsSJ)O`AMk? zp1FzXsX?iUDV2pMQ*D5Xx&nMcT!A!W`0S9QKQy;}1Cl^CgaH=;G9cpY;r$Q>i*pfB zP2drbID<_#qf;rPZx^FqH)F_D#*k@@q03KywUtLX8Ua?`H+NMzkczFPK3lFz@i_kW%1NOn0|D2I9n9wzH8m|-tHjsw|9>@K=iMBhxvkv6m8Y-l zytQ?X=U+MF$@3 zt`~i=@j|6y)RWMK--}M|=T`o&^Ni>IoWKHEbBXz7?A@mgWoL>!*SXo`SZH-*HSdS+ yn*9;$7;m`l>wYBC5bq;=U}IMqLzqbYCidGC!)_gkIk_C@Uy!y&wkt5C($~2D>~)O*cj@FGjOCM)M>_ixfudOh)?xMu#Fs z#}Y=@YDTwOM)x{K_j*Q;dPdJ?Mz0n|pLRx{4n|)f>SXlmV)XB04CrSJn#dS5nK2lM zrZ9#~WelCp7&e13Y$jvaEXHskn$2V!!DN-nWS__6T*l;H&Fopn?A6HZ-6WRLFP=R` zqG+CE#d4|IbyAI+rJJ`&x9*T`+a=p|0O(+s{UBcyZdkhj=yS1>AirP+0R;mf2uMgM zC}@~JfByORAh4SyRgi&!(cja>F(l*O+nd+@4m$|6K6KDn_&uvCpV23&>G9HJp{xgg zoq1^2_p9@|WEo z*X_Uko@K)qYYv~>43eQGMdbiGbo>E~Q& zrYBH{QP^@Sti!`2)uG{irBBq@y*$B zi#&(U-*=fp74j)RyIw49+0MRPMRU)+a2r*PJ$L5roHt2$UjExCTZSbq%V!HeS7J$N zdG@vOZB4v_lF7Plrx+hxo7(fCV&}fHq)$ literal 0 HcmV?d00001 diff --git a/mih_ui/android/build/macos/SourcePackages/firebase_app_check-0.4.5/example/android/app/src/main/res/mipmap-xxhdpi/ic_launcher.png b/mih_ui/android/build/macos/SourcePackages/firebase_app_check-0.4.5/example/android/app/src/main/res/mipmap-xxhdpi/ic_launcher.png new file mode 100644 index 0000000000000000000000000000000000000000..d5f1c8d34e7a88e3f88bea192c3a370d44689c3c GIT binary patch literal 1031 zcmeAS@N?(olHy`uVBq!ia0vp^6F``Q8Ax83A=Cw=BuiW)N`mv#O3D+9QW+dm@{>{( zJaZG%Q-e|yQz{EjrrIztFa`(sgt!6~Yi|1%a`XoT0ojZ}lNrNjb9xjc(B0U1_% zz5^97Xt*%oq$rQy4?0GKNfJ44uvxI)gC`h-NZ|&0-7(qS@?b!5r36oQ}zyZrNO3 zMO=Or+<~>+A&uN&E!^Sl+>xE!QC-|oJv`ApDhqC^EWD|@=#J`=d#Xzxs4ah}w&Jnc z$|q_opQ^2TrnVZ0o~wh<3t%W&flvYGe#$xqda2bR_R zvPYgMcHgjZ5nSA^lJr%;<&0do;O^tDDh~=pIxA#coaCY>&N%M2^tq^U%3DB@ynvKo}b?yu-bFc-u0JHzced$sg7S3zqI(2 z#Km{dPr7I=pQ5>FuK#)QwK?Y`E`B?nP+}U)I#c1+FM*1kNvWG|a(TpksZQ3B@sD~b zpQ2)*V*TdwjFOtHvV|;OsiDqHi=6%)o4b!)x$)%9pGTsE z-JL={-Ffv+T87W(Xpooq<`r*VzWQcgBN$$`u}f>-ZQI1BB8ykN*=e4rIsJx9>z}*o zo~|9I;xof literal 0 HcmV?d00001 diff --git a/mih_ui/android/build/macos/SourcePackages/firebase_app_check-0.4.5/example/android/app/src/main/res/mipmap-xxxhdpi/ic_launcher.png b/mih_ui/android/build/macos/SourcePackages/firebase_app_check-0.4.5/example/android/app/src/main/res/mipmap-xxxhdpi/ic_launcher.png new file mode 100644 index 0000000000000000000000000000000000000000..4d6372eebdb28e45604e46eeda8dd24651419bc0 GIT binary patch literal 1443 zcmb`G{WsKk6vsdJTdFg%tJav9_E4vzrOaqkWF|A724Nly!y+?N9`YV6wZ}5(X(D_N(?!*n3`|_r0Hc?=PQw&*vnU?QTFY zB_MsH|!j$PP;I}?dppoE_gA(4uc!jV&0!l7_;&p2^pxNo>PEcNJv za5_RT$o2Mf!<+r?&EbHH6nMoTsDOa;mN(wv8RNsHpG)`^ymG-S5By8=l9iVXzN_eG%Xg2@Xeq76tTZ*dGh~Lo9vl;Zfs+W#BydUw zCkZ$o1LqWQO$FC9aKlLl*7x9^0q%0}$OMlp@Kk_jHXOjofdePND+j!A{q!8~Jn+s3 z?~~w@4?egS02}8NuulUA=L~QQfm;MzCGd)XhiftT;+zFO&JVyp2mBww?;QByS_1w! zrQlx%{^cMj0|Bo1FjwY@Q8?Hx0cIPF*@-ZRFpPc#bBw{5@tD(5%sClzIfl8WU~V#u zm5Q;_F!wa$BSpqhN>W@2De?TKWR*!ujY;Yylk_X5#~V!L*Gw~;$%4Q8~Mad z@`-kG?yb$a9cHIApZDVZ^U6Xkp<*4rU82O7%}0jjHlK{id@?-wpN*fCHXyXh(bLt* zPc}H-x0e4E&nQ>y%B-(EL=9}RyC%MyX=upHuFhAk&MLbsF0LP-q`XnH78@fT+pKPW zu72MW`|?8ht^tz$iC}ZwLp4tB;Q49K!QCF3@!iB1qOI=?w z7In!}F~ij(18UYUjnbmC!qKhPo%24?8U1x{7o(+?^Zu0Hx81|FuS?bJ0jgBhEMzf< zCgUq7r2OCB(`XkKcN-TL>u5y#dD6D!)5W?`O5)V^>jb)P)GBdy%t$uUMpf$SNV31$ zb||OojAbvMP?T@$h_ZiFLFVHDmbyMhJF|-_)HX3%m=CDI+ID$0^C>kzxprBW)hw(v zr!Gmda);ICoQyhV_oP5+C%?jcG8v+D@9f?Dk*!BxY}dazmrT@64UrP3hlslANK)bq z$67n83eh}OeW&SV@HG95P|bjfqJ7gw$e+`Hxo!4cx`jdK1bJ>YDSpGKLPZ^1cv$ek zIB?0S<#tX?SJCLWdMd{-ME?$hc7A$zBOdIJ)4!KcAwb=VMov)nK;9z>x~rfT1>dS+ zZ6#`2v@`jgbqq)P22H)Tx2CpmM^o1$B+xT6`(v%5xJ(?j#>Q$+rx_R|7TzDZe{J6q zG1*EcU%tE?!kO%^M;3aM6JN*LAKUVb^xz8-Pxo#jR5(-KBeLJvA@-gxNHx0M-ZJLl z;#JwQoh~9V?`UVo#}{6ka@II>++D@%KqGpMdlQ}?9E*wFcf5(#XQnP$Dk5~%iX^>f z%$y;?M0BLp{O3a(-4A?ewryHrrD%cx#Q^%KY1H zNre$ve+vceSLZcNY4U(RBX&)oZn*Py()h)XkE?PL$!bNb{N5FVI2Y%LKEm%yvpyTP z(1P?z~7YxD~Rf<(a@_y` literal 0 HcmV?d00001 diff --git a/mih_ui/android/build/macos/SourcePackages/firebase_app_check-0.4.5/example/android/app/src/main/res/values-night/styles.xml b/mih_ui/android/build/macos/SourcePackages/firebase_app_check-0.4.5/example/android/app/src/main/res/values-night/styles.xml new file mode 100644 index 00000000..06952be7 --- /dev/null +++ b/mih_ui/android/build/macos/SourcePackages/firebase_app_check-0.4.5/example/android/app/src/main/res/values-night/styles.xml @@ -0,0 +1,18 @@ + + + + + + + diff --git a/mih_ui/android/build/macos/SourcePackages/firebase_app_check-0.4.5/example/android/app/src/main/res/values/styles.xml b/mih_ui/android/build/macos/SourcePackages/firebase_app_check-0.4.5/example/android/app/src/main/res/values/styles.xml new file mode 100644 index 00000000..cb1ef880 --- /dev/null +++ b/mih_ui/android/build/macos/SourcePackages/firebase_app_check-0.4.5/example/android/app/src/main/res/values/styles.xml @@ -0,0 +1,18 @@ + + + + + + + diff --git a/mih_ui/android/build/macos/SourcePackages/firebase_app_check-0.4.5/example/android/app/src/profile/AndroidManifest.xml b/mih_ui/android/build/macos/SourcePackages/firebase_app_check-0.4.5/example/android/app/src/profile/AndroidManifest.xml new file mode 100644 index 00000000..399f6981 --- /dev/null +++ b/mih_ui/android/build/macos/SourcePackages/firebase_app_check-0.4.5/example/android/app/src/profile/AndroidManifest.xml @@ -0,0 +1,7 @@ + + + + diff --git a/mih_ui/android/build/macos/SourcePackages/firebase_app_check-0.4.5/example/android/build.gradle b/mih_ui/android/build/macos/SourcePackages/firebase_app_check-0.4.5/example/android/build.gradle new file mode 100644 index 00000000..d2ffbffa --- /dev/null +++ b/mih_ui/android/build/macos/SourcePackages/firebase_app_check-0.4.5/example/android/build.gradle @@ -0,0 +1,18 @@ +allprojects { + repositories { + google() + mavenCentral() + } +} + +rootProject.buildDir = "../build" +subprojects { + project.buildDir = "${rootProject.buildDir}/${project.name}" +} +subprojects { + project.evaluationDependsOn(":app") +} + +tasks.register("clean", Delete) { + delete rootProject.buildDir +} diff --git a/mih_ui/android/build/macos/SourcePackages/firebase_app_check-0.4.5/example/android/gradle.properties b/mih_ui/android/build/macos/SourcePackages/firebase_app_check-0.4.5/example/android/gradle.properties new file mode 100644 index 00000000..3c0f502f --- /dev/null +++ b/mih_ui/android/build/macos/SourcePackages/firebase_app_check-0.4.5/example/android/gradle.properties @@ -0,0 +1,4 @@ +org.gradle.jvmargs=-Xmx4G -XX:+HeapDumpOnOutOfMemoryError +android.useAndroidX=true +android.enableJetifier=true +androidGradlePluginVersion=8.3.0 \ No newline at end of file diff --git a/mih_ui/android/build/macos/SourcePackages/firebase_app_check-0.4.5/example/android/gradle/wrapper/gradle-wrapper.properties b/mih_ui/android/build/macos/SourcePackages/firebase_app_check-0.4.5/example/android/gradle/wrapper/gradle-wrapper.properties new file mode 100644 index 00000000..e411586a --- /dev/null +++ b/mih_ui/android/build/macos/SourcePackages/firebase_app_check-0.4.5/example/android/gradle/wrapper/gradle-wrapper.properties @@ -0,0 +1,5 @@ +distributionBase=GRADLE_USER_HOME +distributionPath=wrapper/dists +distributionUrl=https\://services.gradle.org/distributions/gradle-8.4-bin.zip +zipStoreBase=GRADLE_USER_HOME +zipStorePath=wrapper/dists diff --git a/mih_ui/android/build/macos/SourcePackages/firebase_app_check-0.4.5/example/android/settings.gradle b/mih_ui/android/build/macos/SourcePackages/firebase_app_check-0.4.5/example/android/settings.gradle new file mode 100644 index 00000000..4fb566e9 --- /dev/null +++ b/mih_ui/android/build/macos/SourcePackages/firebase_app_check-0.4.5/example/android/settings.gradle @@ -0,0 +1,28 @@ +pluginManagement { + def flutterSdkPath = { + def properties = new Properties() + file("local.properties").withInputStream { properties.load(it) } + def flutterSdkPath = properties.getProperty("flutter.sdk") + assert flutterSdkPath != null, "flutter.sdk not set in local.properties" + return flutterSdkPath + }() + + includeBuild("$flutterSdkPath/packages/flutter_tools/gradle") + + repositories { + google() + mavenCentral() + gradlePluginPortal() + } +} + +plugins { + id "dev.flutter.flutter-plugin-loader" version "1.0.0" + id "com.android.application" version "${androidGradlePluginVersion}" apply false + // START: FlutterFire Configuration + id "com.google.gms.google-services" version "4.3.15" apply false + // END: FlutterFire Configuration + id "org.jetbrains.kotlin.android" version "2.1.0" apply false +} + +include ":app" diff --git a/mih_ui/android/build/macos/SourcePackages/firebase_app_check-0.4.5/example/ios/Flutter/AppFrameworkInfo.plist b/mih_ui/android/build/macos/SourcePackages/firebase_app_check-0.4.5/example/ios/Flutter/AppFrameworkInfo.plist new file mode 100644 index 00000000..391a902b --- /dev/null +++ b/mih_ui/android/build/macos/SourcePackages/firebase_app_check-0.4.5/example/ios/Flutter/AppFrameworkInfo.plist @@ -0,0 +1,24 @@ + + + + + CFBundleDevelopmentRegion + en + CFBundleExecutable + App + CFBundleIdentifier + io.flutter.flutter.app + CFBundleInfoDictionaryVersion + 6.0 + CFBundleName + App + CFBundlePackageType + FMWK + CFBundleShortVersionString + 1.0 + CFBundleSignature + ???? + CFBundleVersion + 1.0 + + diff --git a/mih_ui/android/build/macos/SourcePackages/firebase_app_check-0.4.5/example/ios/Flutter/Debug.xcconfig b/mih_ui/android/build/macos/SourcePackages/firebase_app_check-0.4.5/example/ios/Flutter/Debug.xcconfig new file mode 100644 index 00000000..ec97fc6f --- /dev/null +++ b/mih_ui/android/build/macos/SourcePackages/firebase_app_check-0.4.5/example/ios/Flutter/Debug.xcconfig @@ -0,0 +1,2 @@ +#include? "Pods/Target Support Files/Pods-Runner/Pods-Runner.debug.xcconfig" +#include "Generated.xcconfig" diff --git a/mih_ui/android/build/macos/SourcePackages/firebase_app_check-0.4.5/example/ios/Flutter/Release.xcconfig b/mih_ui/android/build/macos/SourcePackages/firebase_app_check-0.4.5/example/ios/Flutter/Release.xcconfig new file mode 100644 index 00000000..c4855bfe --- /dev/null +++ b/mih_ui/android/build/macos/SourcePackages/firebase_app_check-0.4.5/example/ios/Flutter/Release.xcconfig @@ -0,0 +1,2 @@ +#include? "Pods/Target Support Files/Pods-Runner/Pods-Runner.release.xcconfig" +#include "Generated.xcconfig" diff --git a/mih_ui/android/build/macos/SourcePackages/firebase_app_check-0.4.5/example/ios/Podfile b/mih_ui/android/build/macos/SourcePackages/firebase_app_check-0.4.5/example/ios/Podfile new file mode 100644 index 00000000..620e46eb --- /dev/null +++ b/mih_ui/android/build/macos/SourcePackages/firebase_app_check-0.4.5/example/ios/Podfile @@ -0,0 +1,43 @@ +# Uncomment this line to define a global platform for your project +# platform :ios, '13.0' + +# CocoaPods analytics sends network stats synchronously affecting flutter build latency. +ENV['COCOAPODS_DISABLE_STATS'] = 'true' + +project 'Runner', { + 'Debug' => :debug, + 'Profile' => :release, + 'Release' => :release, +} + +def flutter_root + generated_xcode_build_settings_path = File.expand_path(File.join('..', 'Flutter', 'Generated.xcconfig'), __FILE__) + unless File.exist?(generated_xcode_build_settings_path) + raise "#{generated_xcode_build_settings_path} must exist. If you're running pod install manually, make sure flutter pub get is executed first" + end + + File.foreach(generated_xcode_build_settings_path) do |line| + matches = line.match(/FLUTTER_ROOT\=(.*)/) + return matches[1].strip if matches + end + raise "FLUTTER_ROOT not found in #{generated_xcode_build_settings_path}. Try deleting Generated.xcconfig, then run flutter pub get" +end + +require File.expand_path(File.join('packages', 'flutter_tools', 'bin', 'podhelper'), flutter_root) + +flutter_ios_podfile_setup + +target 'Runner' do + use_frameworks! + + flutter_install_all_ios_pods File.dirname(File.realpath(__FILE__)) + target 'RunnerTests' do + inherit! :search_paths + end +end + +post_install do |installer| + installer.pods_project.targets.each do |target| + flutter_additional_ios_build_settings(target) + end +end diff --git a/mih_ui/android/build/macos/SourcePackages/firebase_app_check-0.4.5/example/ios/Runner.xcodeproj/project.pbxproj b/mih_ui/android/build/macos/SourcePackages/firebase_app_check-0.4.5/example/ios/Runner.xcodeproj/project.pbxproj new file mode 100644 index 00000000..1ef35c77 --- /dev/null +++ b/mih_ui/android/build/macos/SourcePackages/firebase_app_check-0.4.5/example/ios/Runner.xcodeproj/project.pbxproj @@ -0,0 +1,553 @@ +// !$*UTF8*$! +{ + archiveVersion = 1; + classes = { + }; + objectVersion = 54; + objects = { + +/* Begin PBXBuildFile section */ + 1498D2341E8E89220040F4C2 /* GeneratedPluginRegistrant.m in Sources */ = {isa = PBXBuildFile; fileRef = 1498D2331E8E89220040F4C2 /* GeneratedPluginRegistrant.m */; }; + 3B3967161E833CAA004F5970 /* AppFrameworkInfo.plist in Resources */ = {isa = PBXBuildFile; fileRef = 3B3967151E833CAA004F5970 /* AppFrameworkInfo.plist */; }; + 4627F94B299406540090DA25 /* GoogleService-Info.plist in Resources */ = {isa = PBXBuildFile; fileRef = BBE2A093D0D5DFBA7CE858E4 /* GoogleService-Info.plist */; }; + 78A318202AECB46A00862997 /* FlutterGeneratedPluginSwiftPackage in Frameworks */ = {isa = PBXBuildFile; productRef = 78A3181F2AECB46A00862997 /* FlutterGeneratedPluginSwiftPackage */; }; + 978B8F6F1D3862AE00F588F7 /* AppDelegate.m in Sources */ = {isa = PBXBuildFile; fileRef = 7AFFD8EE1D35381100E5BB4D /* AppDelegate.m */; }; + 97C146F31CF9000F007C117D /* main.m in Sources */ = {isa = PBXBuildFile; fileRef = 97C146F21CF9000F007C117D /* main.m */; }; + 97C146FC1CF9000F007C117D /* Main.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 97C146FA1CF9000F007C117D /* Main.storyboard */; }; + 97C146FE1CF9000F007C117D /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 97C146FD1CF9000F007C117D /* Assets.xcassets */; }; + 97C147011CF9000F007C117D /* LaunchScreen.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 97C146FF1CF9000F007C117D /* LaunchScreen.storyboard */; }; +/* End PBXBuildFile section */ + +/* Begin PBXCopyFilesBuildPhase section */ + 9705A1C41CF9048500538489 /* Embed Frameworks */ = { + isa = PBXCopyFilesBuildPhase; + buildActionMask = 2147483647; + dstPath = ""; + dstSubfolderSpec = 10; + files = ( + ); + name = "Embed Frameworks"; + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXCopyFilesBuildPhase section */ + +/* Begin PBXFileReference section */ + 1498D2321E8E86230040F4C2 /* GeneratedPluginRegistrant.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = GeneratedPluginRegistrant.h; sourceTree = ""; }; + 1498D2331E8E89220040F4C2 /* GeneratedPluginRegistrant.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = GeneratedPluginRegistrant.m; sourceTree = ""; }; + 3B3967151E833CAA004F5970 /* AppFrameworkInfo.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; name = AppFrameworkInfo.plist; path = Flutter/AppFrameworkInfo.plist; sourceTree = ""; }; + 4632D5BC275CD47A0059DC83 /* Runner.entitlements */ = {isa = PBXFileReference; lastKnownFileType = text.plist.entitlements; path = Runner.entitlements; sourceTree = ""; }; + 46A64A032996811C003FC4F3 /* RunnerRelease.entitlements */ = {isa = PBXFileReference; lastKnownFileType = text.plist.entitlements; path = RunnerRelease.entitlements; sourceTree = ""; }; + 78E0A7A72DC9AD7400C4905E /* FlutterGeneratedPluginSwiftPackage */ = {isa = PBXFileReference; lastKnownFileType = wrapper; name = FlutterGeneratedPluginSwiftPackage; path = Flutter/ephemeral/Packages/FlutterGeneratedPluginSwiftPackage; sourceTree = ""; }; + 7AFA3C8E1D35360C0083082E /* Release.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; name = Release.xcconfig; path = Flutter/Release.xcconfig; sourceTree = ""; }; + 7AFFD8ED1D35381100E5BB4D /* AppDelegate.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = AppDelegate.h; sourceTree = ""; }; + 7AFFD8EE1D35381100E5BB4D /* AppDelegate.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = AppDelegate.m; sourceTree = ""; }; + 9740EEB21CF90195004384FC /* Debug.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; name = Debug.xcconfig; path = Flutter/Debug.xcconfig; sourceTree = ""; }; + 9740EEB31CF90195004384FC /* Generated.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; name = Generated.xcconfig; path = Flutter/Generated.xcconfig; sourceTree = ""; }; + 97C146EE1CF9000F007C117D /* Runner.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = Runner.app; sourceTree = BUILT_PRODUCTS_DIR; }; + 97C146F21CF9000F007C117D /* main.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = main.m; sourceTree = ""; }; + 97C146FB1CF9000F007C117D /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/Main.storyboard; sourceTree = ""; }; + 97C146FD1CF9000F007C117D /* Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Assets.xcassets; sourceTree = ""; }; + 97C147001CF9000F007C117D /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/LaunchScreen.storyboard; sourceTree = ""; }; + 97C147021CF9000F007C117D /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; + BBE2A093D0D5DFBA7CE858E4 /* GoogleService-Info.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; name = "GoogleService-Info.plist"; path = "Runner/GoogleService-Info.plist"; sourceTree = ""; }; +/* End PBXFileReference section */ + +/* Begin PBXFrameworksBuildPhase section */ + 97C146EB1CF9000F007C117D /* Frameworks */ = { + isa = PBXFrameworksBuildPhase; + buildActionMask = 2147483647; + files = ( + 78A318202AECB46A00862997 /* FlutterGeneratedPluginSwiftPackage in Frameworks */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXFrameworksBuildPhase section */ + +/* Begin PBXGroup section */ + 9740EEB11CF90186004384FC /* Flutter */ = { + isa = PBXGroup; + children = ( + 78E0A7A72DC9AD7400C4905E /* FlutterGeneratedPluginSwiftPackage */, + 3B3967151E833CAA004F5970 /* AppFrameworkInfo.plist */, + 9740EEB21CF90195004384FC /* Debug.xcconfig */, + 7AFA3C8E1D35360C0083082E /* Release.xcconfig */, + 9740EEB31CF90195004384FC /* Generated.xcconfig */, + ); + name = Flutter; + sourceTree = ""; + }; + 97C146E51CF9000F007C117D = { + isa = PBXGroup; + children = ( + 9740EEB11CF90186004384FC /* Flutter */, + 97C146F01CF9000F007C117D /* Runner */, + 97C146EF1CF9000F007C117D /* Products */, + F919868105D7CB93D33CAD83 /* Pods */, + BBE2A093D0D5DFBA7CE858E4 /* GoogleService-Info.plist */, + ); + sourceTree = ""; + }; + 97C146EF1CF9000F007C117D /* Products */ = { + isa = PBXGroup; + children = ( + 97C146EE1CF9000F007C117D /* Runner.app */, + ); + name = Products; + sourceTree = ""; + }; + 97C146F01CF9000F007C117D /* Runner */ = { + isa = PBXGroup; + children = ( + 46A64A032996811C003FC4F3 /* RunnerRelease.entitlements */, + 4632D5BC275CD47A0059DC83 /* Runner.entitlements */, + 7AFFD8ED1D35381100E5BB4D /* AppDelegate.h */, + 7AFFD8EE1D35381100E5BB4D /* AppDelegate.m */, + 97C146FA1CF9000F007C117D /* Main.storyboard */, + 97C146FD1CF9000F007C117D /* Assets.xcassets */, + 97C146FF1CF9000F007C117D /* LaunchScreen.storyboard */, + 97C147021CF9000F007C117D /* Info.plist */, + 97C146F11CF9000F007C117D /* Supporting Files */, + 1498D2321E8E86230040F4C2 /* GeneratedPluginRegistrant.h */, + 1498D2331E8E89220040F4C2 /* GeneratedPluginRegistrant.m */, + ); + path = Runner; + sourceTree = ""; + }; + 97C146F11CF9000F007C117D /* Supporting Files */ = { + isa = PBXGroup; + children = ( + 97C146F21CF9000F007C117D /* main.m */, + ); + name = "Supporting Files"; + sourceTree = ""; + }; + F919868105D7CB93D33CAD83 /* Pods */ = { + isa = PBXGroup; + children = ( + ); + path = Pods; + sourceTree = ""; + }; +/* End PBXGroup section */ + +/* Begin PBXNativeTarget section */ + 97C146ED1CF9000F007C117D /* Runner */ = { + isa = PBXNativeTarget; + buildConfigurationList = 97C147051CF9000F007C117D /* Build configuration list for PBXNativeTarget "Runner" */; + buildPhases = ( + 9740EEB61CF901F6004384FC /* Run Script */, + 97C146EA1CF9000F007C117D /* Sources */, + 97C146EB1CF9000F007C117D /* Frameworks */, + 97C146EC1CF9000F007C117D /* Resources */, + 9705A1C41CF9048500538489 /* Embed Frameworks */, + 3B06AD1E1E4923F5004D2608 /* Thin Binary */, + 46A64A04299681F5003FC4F3 /* ShellScript */, + ); + buildRules = ( + ); + dependencies = ( + ); + name = Runner; + packageProductDependencies = ( + 78A3181F2AECB46A00862997 /* FlutterGeneratedPluginSwiftPackage */, + ); + productName = Runner; + productReference = 97C146EE1CF9000F007C117D /* Runner.app */; + productType = "com.apple.product-type.application"; + }; +/* End PBXNativeTarget section */ + +/* Begin PBXProject section */ + 97C146E61CF9000F007C117D /* Project object */ = { + isa = PBXProject; + attributes = { + LastUpgradeCheck = 1510; + ORGANIZATIONNAME = ""; + TargetAttributes = { + 97C146ED1CF9000F007C117D = { + CreatedOnToolsVersion = 7.3.1; + }; + }; + }; + buildConfigurationList = 97C146E91CF9000F007C117D /* Build configuration list for PBXProject "Runner" */; + compatibilityVersion = "Xcode 9.3"; + developmentRegion = en; + hasScannedForEncodings = 0; + knownRegions = ( + en, + Base, + ); + mainGroup = 97C146E51CF9000F007C117D; + packageReferences = ( + 781AD8BC2B33823900A9FFBB /* XCLocalSwiftPackageReference "FlutterGeneratedPluginSwiftPackage" */, + ); + productRefGroup = 97C146EF1CF9000F007C117D /* Products */; + projectDirPath = ""; + projectRoot = ""; + targets = ( + 97C146ED1CF9000F007C117D /* Runner */, + ); + }; +/* End PBXProject section */ + +/* Begin PBXResourcesBuildPhase section */ + 97C146EC1CF9000F007C117D /* Resources */ = { + isa = PBXResourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + 4627F94B299406540090DA25 /* GoogleService-Info.plist in Resources */, + 97C147011CF9000F007C117D /* LaunchScreen.storyboard in Resources */, + 3B3967161E833CAA004F5970 /* AppFrameworkInfo.plist in Resources */, + 97C146FE1CF9000F007C117D /* Assets.xcassets in Resources */, + 97C146FC1CF9000F007C117D /* Main.storyboard in Resources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXResourcesBuildPhase section */ + +/* Begin PBXShellScriptBuildPhase section */ + 3B06AD1E1E4923F5004D2608 /* Thin Binary */ = { + isa = PBXShellScriptBuildPhase; + alwaysOutOfDate = 1; + buildActionMask = 2147483647; + files = ( + ); + inputPaths = ( + "${TARGET_BUILD_DIR}/${INFOPLIST_PATH}", + ); + name = "Thin Binary"; + outputPaths = ( + ); + runOnlyForDeploymentPostprocessing = 0; + shellPath = /bin/sh; + shellScript = "/bin/sh \"$FLUTTER_ROOT/packages/flutter_tools/bin/xcode_backend.sh\" embed_and_thin"; + }; + 46A64A04299681F5003FC4F3 /* ShellScript */ = { + isa = PBXShellScriptBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + inputFileListPaths = ( + ); + inputPaths = ( + ); + outputFileListPaths = ( + ); + outputPaths = ( + ); + runOnlyForDeploymentPostprocessing = 0; + shellPath = /bin/sh; + shellScript = "# Type a script or drag a script file from your workspace to insert its path.\necho \"YYYYYYYY: ${CONFIGURATION}\"\n"; + }; + 9740EEB61CF901F6004384FC /* Run Script */ = { + isa = PBXShellScriptBuildPhase; + alwaysOutOfDate = 1; + buildActionMask = 2147483647; + files = ( + ); + inputPaths = ( + ); + name = "Run Script"; + outputPaths = ( + ); + runOnlyForDeploymentPostprocessing = 0; + shellPath = /bin/sh; + shellScript = "/bin/sh \"$FLUTTER_ROOT/packages/flutter_tools/bin/xcode_backend.sh\" build\n"; + }; +/* End PBXShellScriptBuildPhase section */ + +/* Begin PBXSourcesBuildPhase section */ + 97C146EA1CF9000F007C117D /* Sources */ = { + isa = PBXSourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + 978B8F6F1D3862AE00F588F7 /* AppDelegate.m in Sources */, + 97C146F31CF9000F007C117D /* main.m in Sources */, + 1498D2341E8E89220040F4C2 /* GeneratedPluginRegistrant.m in Sources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXSourcesBuildPhase section */ + +/* Begin PBXVariantGroup section */ + 97C146FA1CF9000F007C117D /* Main.storyboard */ = { + isa = PBXVariantGroup; + children = ( + 97C146FB1CF9000F007C117D /* Base */, + ); + name = Main.storyboard; + sourceTree = ""; + }; + 97C146FF1CF9000F007C117D /* LaunchScreen.storyboard */ = { + isa = PBXVariantGroup; + children = ( + 97C147001CF9000F007C117D /* Base */, + ); + name = LaunchScreen.storyboard; + sourceTree = ""; + }; +/* End PBXVariantGroup section */ + +/* Begin XCBuildConfiguration section */ + 249021D3217E4FDB00AE95B9 /* Profile */ = { + isa = XCBuildConfiguration; + buildSettings = { + ALWAYS_SEARCH_USER_PATHS = NO; + CLANG_ANALYZER_NONNULL = YES; + CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x"; + CLANG_CXX_LIBRARY = "libc++"; + CLANG_ENABLE_MODULES = YES; + CLANG_ENABLE_OBJC_ARC = YES; + CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES; + CLANG_WARN_BOOL_CONVERSION = YES; + CLANG_WARN_COMMA = YES; + CLANG_WARN_CONSTANT_CONVERSION = YES; + CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES; + CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; + CLANG_WARN_EMPTY_BODY = YES; + CLANG_WARN_ENUM_CONVERSION = YES; + CLANG_WARN_INFINITE_RECURSION = YES; + CLANG_WARN_INT_CONVERSION = YES; + CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES; + CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES; + CLANG_WARN_OBJC_LITERAL_CONVERSION = YES; + CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; + CLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = YES; + CLANG_WARN_RANGE_LOOP_ANALYSIS = YES; + CLANG_WARN_STRICT_PROTOTYPES = YES; + CLANG_WARN_SUSPICIOUS_MOVE = YES; + CLANG_WARN_UNREACHABLE_CODE = YES; + CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; + "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer"; + COPY_PHASE_STRIP = NO; + DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; + ENABLE_NS_ASSERTIONS = NO; + ENABLE_STRICT_OBJC_MSGSEND = YES; + GCC_C_LANGUAGE_STANDARD = gnu99; + GCC_NO_COMMON_BLOCKS = YES; + GCC_WARN_64_TO_32_BIT_CONVERSION = YES; + GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; + GCC_WARN_UNDECLARED_SELECTOR = YES; + GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; + GCC_WARN_UNUSED_FUNCTION = YES; + GCC_WARN_UNUSED_VARIABLE = YES; + IPHONEOS_DEPLOYMENT_TARGET = 15.0; + MTL_ENABLE_DEBUG_INFO = NO; + SDKROOT = iphoneos; + SUPPORTED_PLATFORMS = iphoneos; + TARGETED_DEVICE_FAMILY = "1,2"; + VALIDATE_PRODUCT = YES; + }; + name = Profile; + }; + 249021D4217E4FDB00AE95B9 /* Profile */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = 7AFA3C8E1D35360C0083082E /* Release.xcconfig */; + buildSettings = { + ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = YES; + ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; + CODE_SIGN_ENTITLEMENTS = Runner/Runner.entitlements; + CURRENT_PROJECT_VERSION = "$(FLUTTER_BUILD_NUMBER)"; + DEVELOPMENT_TEAM = YYX2P3XVJ7; + ENABLE_BITCODE = NO; + INFOPLIST_FILE = Runner/Info.plist; + LD_RUNPATH_SEARCH_PATHS = ( + "$(inherited)", + "@executable_path/Frameworks", + ); + PRODUCT_BUNDLE_IDENTIFIER = io.flutter.plugins.firebase.appcheck.example; + PRODUCT_NAME = "$(TARGET_NAME)"; + VERSIONING_SYSTEM = "apple-generic"; + }; + name = Profile; + }; + 97C147031CF9000F007C117D /* Debug */ = { + isa = XCBuildConfiguration; + buildSettings = { + ALWAYS_SEARCH_USER_PATHS = NO; + CLANG_ANALYZER_NONNULL = YES; + CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x"; + CLANG_CXX_LIBRARY = "libc++"; + CLANG_ENABLE_MODULES = YES; + CLANG_ENABLE_OBJC_ARC = YES; + CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES; + CLANG_WARN_BOOL_CONVERSION = YES; + CLANG_WARN_COMMA = YES; + CLANG_WARN_CONSTANT_CONVERSION = YES; + CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES; + CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; + CLANG_WARN_EMPTY_BODY = YES; + CLANG_WARN_ENUM_CONVERSION = YES; + CLANG_WARN_INFINITE_RECURSION = YES; + CLANG_WARN_INT_CONVERSION = YES; + CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES; + CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES; + CLANG_WARN_OBJC_LITERAL_CONVERSION = YES; + CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; + CLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = YES; + CLANG_WARN_RANGE_LOOP_ANALYSIS = YES; + CLANG_WARN_STRICT_PROTOTYPES = YES; + CLANG_WARN_SUSPICIOUS_MOVE = YES; + CLANG_WARN_UNREACHABLE_CODE = YES; + CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; + "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer"; + COPY_PHASE_STRIP = NO; + DEBUG_INFORMATION_FORMAT = dwarf; + ENABLE_STRICT_OBJC_MSGSEND = YES; + ENABLE_TESTABILITY = YES; + GCC_C_LANGUAGE_STANDARD = gnu99; + GCC_DYNAMIC_NO_PIC = NO; + GCC_NO_COMMON_BLOCKS = YES; + GCC_OPTIMIZATION_LEVEL = 0; + GCC_PREPROCESSOR_DEFINITIONS = ( + "DEBUG=1", + "$(inherited)", + ); + GCC_WARN_64_TO_32_BIT_CONVERSION = YES; + GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; + GCC_WARN_UNDECLARED_SELECTOR = YES; + GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; + GCC_WARN_UNUSED_FUNCTION = YES; + GCC_WARN_UNUSED_VARIABLE = YES; + IPHONEOS_DEPLOYMENT_TARGET = 15.0; + MTL_ENABLE_DEBUG_INFO = YES; + ONLY_ACTIVE_ARCH = YES; + SDKROOT = iphoneos; + TARGETED_DEVICE_FAMILY = "1,2"; + }; + name = Debug; + }; + 97C147041CF9000F007C117D /* Release */ = { + isa = XCBuildConfiguration; + buildSettings = { + ALWAYS_SEARCH_USER_PATHS = NO; + CLANG_ANALYZER_NONNULL = YES; + CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x"; + CLANG_CXX_LIBRARY = "libc++"; + CLANG_ENABLE_MODULES = YES; + CLANG_ENABLE_OBJC_ARC = YES; + CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES; + CLANG_WARN_BOOL_CONVERSION = YES; + CLANG_WARN_COMMA = YES; + CLANG_WARN_CONSTANT_CONVERSION = YES; + CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES; + CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; + CLANG_WARN_EMPTY_BODY = YES; + CLANG_WARN_ENUM_CONVERSION = YES; + CLANG_WARN_INFINITE_RECURSION = YES; + CLANG_WARN_INT_CONVERSION = YES; + CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES; + CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES; + CLANG_WARN_OBJC_LITERAL_CONVERSION = YES; + CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; + CLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = YES; + CLANG_WARN_RANGE_LOOP_ANALYSIS = YES; + CLANG_WARN_STRICT_PROTOTYPES = YES; + CLANG_WARN_SUSPICIOUS_MOVE = YES; + CLANG_WARN_UNREACHABLE_CODE = YES; + CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; + "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer"; + COPY_PHASE_STRIP = NO; + DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; + ENABLE_NS_ASSERTIONS = NO; + ENABLE_STRICT_OBJC_MSGSEND = YES; + GCC_C_LANGUAGE_STANDARD = gnu99; + GCC_NO_COMMON_BLOCKS = YES; + GCC_WARN_64_TO_32_BIT_CONVERSION = YES; + GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; + GCC_WARN_UNDECLARED_SELECTOR = YES; + GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; + GCC_WARN_UNUSED_FUNCTION = YES; + GCC_WARN_UNUSED_VARIABLE = YES; + IPHONEOS_DEPLOYMENT_TARGET = 15.0; + MTL_ENABLE_DEBUG_INFO = NO; + SDKROOT = iphoneos; + SUPPORTED_PLATFORMS = iphoneos; + TARGETED_DEVICE_FAMILY = "1,2"; + VALIDATE_PRODUCT = YES; + }; + name = Release; + }; + 97C147061CF9000F007C117D /* Debug */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = 9740EEB21CF90195004384FC /* Debug.xcconfig */; + buildSettings = { + ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = YES; + ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; + CODE_SIGN_ENTITLEMENTS = Runner/Runner.entitlements; + CURRENT_PROJECT_VERSION = "$(FLUTTER_BUILD_NUMBER)"; + DEVELOPMENT_TEAM = YYX2P3XVJ7; + ENABLE_BITCODE = NO; + INFOPLIST_FILE = Runner/Info.plist; + LD_RUNPATH_SEARCH_PATHS = ( + "$(inherited)", + "@executable_path/Frameworks", + ); + PRODUCT_BUNDLE_IDENTIFIER = io.flutter.plugins.firebase.appcheck.example; + PRODUCT_NAME = "$(TARGET_NAME)"; + VERSIONING_SYSTEM = "apple-generic"; + }; + name = Debug; + }; + 97C147071CF9000F007C117D /* Release */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = 7AFA3C8E1D35360C0083082E /* Release.xcconfig */; + buildSettings = { + ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = YES; + ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; + CODE_SIGN_ENTITLEMENTS = Runner/RunnerRelease.entitlements; + CURRENT_PROJECT_VERSION = "$(FLUTTER_BUILD_NUMBER)"; + DEVELOPMENT_TEAM = YYX2P3XVJ7; + ENABLE_BITCODE = NO; + INFOPLIST_FILE = Runner/Info.plist; + LD_RUNPATH_SEARCH_PATHS = ( + "$(inherited)", + "@executable_path/Frameworks", + ); + PRODUCT_BUNDLE_IDENTIFIER = io.flutter.plugins.firebase.appcheck.example; + PRODUCT_NAME = "$(TARGET_NAME)"; + VERSIONING_SYSTEM = "apple-generic"; + }; + name = Release; + }; +/* End XCBuildConfiguration section */ + +/* Begin XCConfigurationList section */ + 97C146E91CF9000F007C117D /* Build configuration list for PBXProject "Runner" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + 97C147031CF9000F007C117D /* Debug */, + 97C147041CF9000F007C117D /* Release */, + 249021D3217E4FDB00AE95B9 /* Profile */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; + 97C147051CF9000F007C117D /* Build configuration list for PBXNativeTarget "Runner" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + 97C147061CF9000F007C117D /* Debug */, + 97C147071CF9000F007C117D /* Release */, + 249021D4217E4FDB00AE95B9 /* Profile */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; +/* End XCConfigurationList section */ + +/* Begin XCLocalSwiftPackageReference section */ + 781AD8BC2B33823900A9FFBB /* XCLocalSwiftPackageReference "FlutterGeneratedPluginSwiftPackage" */ = { + isa = XCLocalSwiftPackageReference; + relativePath = Flutter/ephemeral/Packages/FlutterGeneratedPluginSwiftPackage; + }; +/* End XCLocalSwiftPackageReference section */ + +/* Begin XCSwiftPackageProductDependency section */ + 78A3181F2AECB46A00862997 /* FlutterGeneratedPluginSwiftPackage */ = { + isa = XCSwiftPackageProductDependency; + productName = FlutterGeneratedPluginSwiftPackage; + }; +/* End XCSwiftPackageProductDependency section */ + }; + rootObject = 97C146E61CF9000F007C117D /* Project object */; +} diff --git a/mih_ui/android/build/macos/SourcePackages/firebase_app_check-0.4.5/example/ios/Runner.xcodeproj/project.xcworkspace/contents.xcworkspacedata b/mih_ui/android/build/macos/SourcePackages/firebase_app_check-0.4.5/example/ios/Runner.xcodeproj/project.xcworkspace/contents.xcworkspacedata new file mode 100644 index 00000000..919434a6 --- /dev/null +++ b/mih_ui/android/build/macos/SourcePackages/firebase_app_check-0.4.5/example/ios/Runner.xcodeproj/project.xcworkspace/contents.xcworkspacedata @@ -0,0 +1,7 @@ + + + + + diff --git a/mih_ui/android/build/macos/SourcePackages/firebase_app_check-0.4.5/example/ios/Runner.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist b/mih_ui/android/build/macos/SourcePackages/firebase_app_check-0.4.5/example/ios/Runner.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist new file mode 100644 index 00000000..18d98100 --- /dev/null +++ b/mih_ui/android/build/macos/SourcePackages/firebase_app_check-0.4.5/example/ios/Runner.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist @@ -0,0 +1,8 @@ + + + + + IDEDidComputeMac32BitWarning + + + diff --git a/mih_ui/android/build/macos/SourcePackages/firebase_app_check-0.4.5/example/ios/Runner.xcodeproj/project.xcworkspace/xcshareddata/WorkspaceSettings.xcsettings b/mih_ui/android/build/macos/SourcePackages/firebase_app_check-0.4.5/example/ios/Runner.xcodeproj/project.xcworkspace/xcshareddata/WorkspaceSettings.xcsettings new file mode 100644 index 00000000..f9b0d7c5 --- /dev/null +++ b/mih_ui/android/build/macos/SourcePackages/firebase_app_check-0.4.5/example/ios/Runner.xcodeproj/project.xcworkspace/xcshareddata/WorkspaceSettings.xcsettings @@ -0,0 +1,8 @@ + + + + + PreviewsEnabled + + + diff --git a/mih_ui/android/build/macos/SourcePackages/firebase_app_check-0.4.5/example/ios/Runner.xcodeproj/xcshareddata/xcschemes/Runner.xcscheme b/mih_ui/android/build/macos/SourcePackages/firebase_app_check-0.4.5/example/ios/Runner.xcodeproj/xcshareddata/xcschemes/Runner.xcscheme new file mode 100644 index 00000000..8a6c683e --- /dev/null +++ b/mih_ui/android/build/macos/SourcePackages/firebase_app_check-0.4.5/example/ios/Runner.xcodeproj/xcshareddata/xcschemes/Runner.xcscheme @@ -0,0 +1,114 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/mih_ui/android/build/macos/SourcePackages/firebase_app_check-0.4.5/example/ios/Runner.xcworkspace/contents.xcworkspacedata b/mih_ui/android/build/macos/SourcePackages/firebase_app_check-0.4.5/example/ios/Runner.xcworkspace/contents.xcworkspacedata new file mode 100644 index 00000000..21a3cc14 --- /dev/null +++ b/mih_ui/android/build/macos/SourcePackages/firebase_app_check-0.4.5/example/ios/Runner.xcworkspace/contents.xcworkspacedata @@ -0,0 +1,10 @@ + + + + + + + diff --git a/mih_ui/android/build/macos/SourcePackages/firebase_app_check-0.4.5/example/ios/Runner.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist b/mih_ui/android/build/macos/SourcePackages/firebase_app_check-0.4.5/example/ios/Runner.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist new file mode 100644 index 00000000..18d98100 --- /dev/null +++ b/mih_ui/android/build/macos/SourcePackages/firebase_app_check-0.4.5/example/ios/Runner.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist @@ -0,0 +1,8 @@ + + + + + IDEDidComputeMac32BitWarning + + + diff --git a/mih_ui/android/build/macos/SourcePackages/firebase_app_check-0.4.5/example/ios/Runner.xcworkspace/xcshareddata/WorkspaceSettings.xcsettings b/mih_ui/android/build/macos/SourcePackages/firebase_app_check-0.4.5/example/ios/Runner.xcworkspace/xcshareddata/WorkspaceSettings.xcsettings new file mode 100644 index 00000000..f9b0d7c5 --- /dev/null +++ b/mih_ui/android/build/macos/SourcePackages/firebase_app_check-0.4.5/example/ios/Runner.xcworkspace/xcshareddata/WorkspaceSettings.xcsettings @@ -0,0 +1,8 @@ + + + + + PreviewsEnabled + + + diff --git a/mih_ui/android/build/macos/SourcePackages/firebase_app_check-0.4.5/example/ios/Runner/AppDelegate.h b/mih_ui/android/build/macos/SourcePackages/firebase_app_check-0.4.5/example/ios/Runner/AppDelegate.h new file mode 100644 index 00000000..01e6e1d4 --- /dev/null +++ b/mih_ui/android/build/macos/SourcePackages/firebase_app_check-0.4.5/example/ios/Runner/AppDelegate.h @@ -0,0 +1,6 @@ +#import +#import + +@interface AppDelegate : FlutterAppDelegate + +@end diff --git a/mih_ui/android/build/macos/SourcePackages/firebase_app_check-0.4.5/example/ios/Runner/AppDelegate.m b/mih_ui/android/build/macos/SourcePackages/firebase_app_check-0.4.5/example/ios/Runner/AppDelegate.m new file mode 100644 index 00000000..7171162c --- /dev/null +++ b/mih_ui/android/build/macos/SourcePackages/firebase_app_check-0.4.5/example/ios/Runner/AppDelegate.m @@ -0,0 +1,16 @@ +#import "AppDelegate.h" +#import "GeneratedPluginRegistrant.h" +@import Firebase; + +@implementation AppDelegate + +- (BOOL)application:(UIApplication *)application + didFinishLaunchingWithOptions:(NSDictionary *)launchOptions { + return [super application:application didFinishLaunchingWithOptions:launchOptions]; +} + +- (void)didInitializeImplicitFlutterEngine:(NSObject *)engineBridge { + [GeneratedPluginRegistrant registerWithRegistry:engineBridge.pluginRegistry]; +} + +@end diff --git a/mih_ui/android/build/macos/SourcePackages/firebase_app_check-0.4.5/example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Contents.json b/mih_ui/android/build/macos/SourcePackages/firebase_app_check-0.4.5/example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Contents.json new file mode 100644 index 00000000..d36b1fab --- /dev/null +++ b/mih_ui/android/build/macos/SourcePackages/firebase_app_check-0.4.5/example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Contents.json @@ -0,0 +1,122 @@ +{ + "images" : [ + { + "size" : "20x20", + "idiom" : "iphone", + "filename" : "Icon-App-20x20@2x.png", + "scale" : "2x" + }, + { + "size" : "20x20", + "idiom" : "iphone", + "filename" : "Icon-App-20x20@3x.png", + "scale" : "3x" + }, + { + "size" : "29x29", + "idiom" : "iphone", + "filename" : "Icon-App-29x29@1x.png", + "scale" : "1x" + }, + { + "size" : "29x29", + "idiom" : "iphone", + "filename" : "Icon-App-29x29@2x.png", + "scale" : "2x" + }, + { + "size" : "29x29", + "idiom" : "iphone", + "filename" : "Icon-App-29x29@3x.png", + "scale" : "3x" + }, + { + "size" : "40x40", + "idiom" : "iphone", + "filename" : "Icon-App-40x40@2x.png", + "scale" : "2x" + }, + { + "size" : "40x40", + "idiom" : "iphone", + "filename" : "Icon-App-40x40@3x.png", + "scale" : "3x" + }, + { + "size" : "60x60", + "idiom" : "iphone", + "filename" : "Icon-App-60x60@2x.png", + "scale" : "2x" + }, + { + "size" : "60x60", + "idiom" : "iphone", + "filename" : "Icon-App-60x60@3x.png", + "scale" : "3x" + }, + { + "size" : "20x20", + "idiom" : "ipad", + "filename" : "Icon-App-20x20@1x.png", + "scale" : "1x" + }, + { + "size" : "20x20", + "idiom" : "ipad", + "filename" : "Icon-App-20x20@2x.png", + "scale" : "2x" + }, + { + "size" : "29x29", + "idiom" : "ipad", + "filename" : "Icon-App-29x29@1x.png", + "scale" : "1x" + }, + { + "size" : "29x29", + "idiom" : "ipad", + "filename" : "Icon-App-29x29@2x.png", + "scale" : "2x" + }, + { + "size" : "40x40", + "idiom" : "ipad", + "filename" : "Icon-App-40x40@1x.png", + "scale" : "1x" + }, + { + "size" : "40x40", + "idiom" : "ipad", + "filename" : "Icon-App-40x40@2x.png", + "scale" : "2x" + }, + { + "size" : "76x76", + "idiom" : "ipad", + "filename" : "Icon-App-76x76@1x.png", + "scale" : "1x" + }, + { + "size" : "76x76", + "idiom" : "ipad", + "filename" : "Icon-App-76x76@2x.png", + "scale" : "2x" + }, + { + "size" : "83.5x83.5", + "idiom" : "ipad", + "filename" : "Icon-App-83.5x83.5@2x.png", + "scale" : "2x" + }, + { + "size" : "1024x1024", + "idiom" : "ios-marketing", + "filename" : "Icon-App-1024x1024@1x.png", + "scale" : "1x" + } + ], + "info" : { + "version" : 1, + "author" : "xcode" + } +} diff --git a/mih_ui/android/build/macos/SourcePackages/firebase_app_check-0.4.5/example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-1024x1024@1x.png b/mih_ui/android/build/macos/SourcePackages/firebase_app_check-0.4.5/example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-1024x1024@1x.png new file mode 100644 index 0000000000000000000000000000000000000000..dc9ada4725e9b0ddb1deab583e5b5102493aa332 GIT binary patch literal 10932 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 literal 0 HcmV?d00001 diff --git a/mih_ui/android/build/macos/SourcePackages/firebase_app_check-0.4.5/example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@3x.png b/mih_ui/android/build/macos/SourcePackages/firebase_app_check-0.4.5/example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@3x.png new file mode 100644 index 0000000000000000000000000000000000000000..f091b6b0bca859a3f474b03065bef75ba58a9e4c GIT binary patch literal 1588 zcmV-42Fv-0P)C1SqPt}wig>|5Crh^=oyX$BK<}M8eLU3e2hGT;=G|!_SP)7zNI6fqUMB=)y zRAZ>eDe#*r`yDAVgB_R*LB*MAc)8(b{g{9McCXW!lq7r(btRoB9!8B-#AI6JMb~YFBEvdsV)`mEQO^&#eRKx@b&x- z5lZm*!WfD8oCLzfHGz#u7sT0^VLMI1MqGxF^v+`4YYnVYgk*=kU?HsSz{v({E3lb9 z>+xILjBN)t6`=g~IBOelGQ(O990@BfXf(DRI5I$qN$0Gkz-FSc$3a+2fX$AedL4u{ z4V+5Ong(9LiGcIKW?_352sR;LtDPmPJXI{YtT=O8=76o9;*n%_m|xo!i>7$IrZ-{l z-x3`7M}qzHsPV@$v#>H-TpjDh2UE$9g6sysUREDy_R(a)>=eHw-WAyfIN z*qb!_hW>G)Tu8nSw9yn#3wFMiLcfc4pY0ek1}8(NqkBR@t4{~oC>ryc-h_ByH(Cg5 z>ao-}771+xE3um9lWAY1FeQFxowa1(!J(;Jg*wrg!=6FdRX+t_<%z&d&?|Bn){>zm zZQj(aA_HeBY&OC^jj*)N`8fa^ePOU72VpInJoI1?`ty#lvlNzs(&MZX+R%2xS~5Kh zX*|AU4QE#~SgPzOXe9>tRj>hjU@c1k5Y_mW*Jp3fI;)1&g3j|zDgC+}2Q_v%YfDax z!?umcN^n}KYQ|a$Lr+51Nf9dkkYFSjZZjkma$0KOj+;aQ&721~t7QUKx61J3(P4P1 zstI~7-wOACnWP4=8oGOwz%vNDqD8w&Q`qcNGGrbbf&0s9L0De{4{mRS?o0MU+nR_! zrvshUau0G^DeMhM_v{5BuLjb#Hh@r23lDAk8oF(C+P0rsBpv85EP>4CVMx#04MOfG z;P%vktHcXwTj~+IE(~px)3*MY77e}p#|c>TD?sMatC0Tu4iKKJ0(X8jxQY*gYtxsC z(zYC$g|@+I+kY;dg_dE>scBf&bP1Nc@Hz<3R)V`=AGkc;8CXqdi=B4l2k|g;2%#m& z*jfX^%b!A8#bI!j9-0Fi0bOXl(-c^AB9|nQaE`*)Hw+o&jS9@7&Gov#HbD~#d{twV zXd^Tr^mWLfFh$@Dr$e;PBEz4(-2q1FF0}c;~B5sA}+Q>TOoP+t>wf)V9Iy=5ruQa;z)y zI9C9*oUga6=hxw6QasLPnee@3^Rr*M{CdaL5=R41nLs(AHk_=Y+A9$2&H(B7!_pURs&8aNw7?`&Z&xY_Ye z)~D5Bog^td-^QbUtkTirdyK^mTHAOuptDflut!#^lnKqU md>ggs(5nOWAqO?umG&QVYK#ibz}*4>0000U6E9hRK9^#O7(mu>ETqrXGsduA8$)?`v2seloOCza43C{NQ$$gAOH**MCn0Q?+L7dl7qnbRdqZ8LSVp1ItDxhxD?t@5_yHg6A8yI zC*%Wgg22K|8E#!~cTNYR~@Y9KepMPrrB8cABapAFa=`H+UGhkXUZV1GnwR1*lPyZ;*K(i~2gp|@bzp8}og7e*#% zEnr|^CWdVV!-4*Y_7rFvlww2Ze+>j*!Z!pQ?2l->4q#nqRu9`ELo6RMS5=br47g_X zRw}P9a7RRYQ%2Vsd0Me{_(EggTnuN6j=-?uFS6j^u69elMypu?t>op*wBx<=Wx8?( ztpe^(fwM6jJX7M-l*k3kEpWOl_Vk3@(_w4oc}4YF4|Rt=2V^XU?#Yz`8(e?aZ@#li0n*=g^qOcVpd-Wbok=@b#Yw zqn8u9a)z>l(1kEaPYZ6hwubN6i<8QHgsu0oE) ziJ(p;Wxm>sf!K+cw>R-(^Y2_bahB+&KI9y^);#0qt}t-$C|Bo71lHi{_+lg#f%RFy z0um=e3$K3i6K{U_4K!EX?F&rExl^W|G8Z8;`5z-k}OGNZ0#WVb$WCpQu-_YsiqKP?BB# vzVHS-CTUF4Ozn5G+mq_~Qqto~ahA+K`|lyv3(-e}00000NkvXXu0mjfd`9t{ literal 0 HcmV?d00001 diff --git a/mih_ui/android/build/macos/SourcePackages/firebase_app_check-0.4.5/example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@2x.png b/mih_ui/android/build/macos/SourcePackages/firebase_app_check-0.4.5/example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@2x.png new file mode 100644 index 0000000000000000000000000000000000000000..d0ef06e7edb86cdfe0d15b4b0d98334a86163658 GIT binary patch literal 1716 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 literal 0 HcmV?d00001 diff --git a/mih_ui/android/build/macos/SourcePackages/firebase_app_check-0.4.5/example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@2x.png b/mih_ui/android/build/macos/SourcePackages/firebase_app_check-0.4.5/example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@2x.png new file mode 100644 index 0000000000000000000000000000000000000000..c8f9ed8f5cee1c98386d13b17e89f719e83555b2 GIT binary patch literal 1895 zcmV-t2blPYP)FQtfgmafE#=YDCq`qUBt#QpG%*H6QHY765~R=q zZ6iudfM}q!Pz#~9JgOi8QJ|DSu?1-*(kSi1K4#~5?#|rh?sS)(-JQqX*}ciXJ56_H zdw=^s_srbAdqxlvGyrgGet#6T7_|j;95sL%MtM;q86vOxKM$f#puR)Bjv9Zvz9-di zXOTSsZkM83)E9PYBXC<$6(|>lNLVBb&&6y{NByFCp%6+^ALR@NCTse_wqvNmSWI-m z!$%KlHFH2omF!>#%1l3LTZg(s7eof$7*xB)ZQ0h?ejh?Ta9fDv59+u#MokW+1t8Zb zgHv%K(u9G^Lv`lh#f3<6!JVTL3(dCpxHbnbA;kKqQyd1~^Xe0VIaYBSWm6nsr;dFj z4;G-RyL?cYgsN1{L4ZFFNa;8)Rv0fM0C(~Tkit94 zz#~A)59?QjD&pAPSEQ)p8gP|DS{ng)j=2ux)_EzzJ773GmQ_Cic%3JJhC0t2cx>|v zJcVusIB!%F90{+}8hG3QU4KNeKmK%T>mN57NnCZ^56=0?&3@!j>a>B43pi{!u z7JyDj7`6d)qVp^R=%j>UIY6f+3`+qzIc!Y_=+uN^3BYV|o+$vGo-j-Wm<10%A=(Yk^beI{t%ld@yhKjq0iNjqN4XMGgQtbKubPM$JWBz}YA65k%dm*awtC^+f;a-x4+ddbH^7iDWGg&N0n#MW{kA|=8iMUiFYvMoDY@sPC#t$55gn6ykUTPAr`a@!(;np824>2xJthS z*ZdmT`g5-`BuJs`0LVhz+D9NNa3<=6m;cQLaF?tCv8)zcRSh66*Z|vXhG@$I%U~2l z?`Q zykI#*+rQ=z6Jm=Bui-SfpDYLA=|vzGE(dYm=OC8XM&MDo7ux4UF1~0J1+i%aCUpRe zt3L_uNyQ*cE(38Uy03H%I*)*Bh=Lb^Xj3?I^Hnbeq72(EOK^Y93CNp*uAA{5Lc=ky zx=~RKa4{iTm{_>_vSCm?$Ej=i6@=m%@VvAITnigVg{&@!7CDgs908761meDK5azA} z4?=NOH|PdvabgJ&fW2{Mo$Q0CcD8Qc84%{JPYt5EiG{MdLIAeX%T=D7NIP4%Hw}p9 zg)==!2Lbp#j{u_}hMiao9=!VSyx0gHbeCS`;q&vzeq|fs`y&^X-lso(Ls@-706qmA z7u*T5PMo_w3{se1t2`zWeO^hOvTsohG_;>J0wVqVe+n)AbQCx)yh9;w+J6?NF5Lmo zecS@ieAKL8%bVd@+-KT{yI|S}O>pYckUFs;ry9Ow$CD@ztz5K-*D$^{i(_1llhSh^ zEkL$}tsQt5>QA^;QgjgIfBDmcOgi5YDyu?t6vSnbp=1+@6D& z5MJ}B8q;bRlVoxasyhcUF1+)o`&3r0colr}QJ3hcSdLu;9;td>kf@Tcn<@9sIx&=m z;AD;SCh95=&p;$r{Xz3iWCO^MX83AGJ(yH&eTXgv|0=34#-&WAmw{)U7OU9!Wz^!7 zZ%jZFi@JR;>Mhi7S>V7wQ176|FdW2m?&`qa(ScO^CFPR80HucLHOTy%5s*HR0^8)i h0WYBP*#0Ks^FNSabJA*5${_#%002ovPDHLkV1oKhTl@e3 literal 0 HcmV?d00001 diff --git a/mih_ui/android/build/macos/SourcePackages/firebase_app_check-0.4.5/example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@3x.png b/mih_ui/android/build/macos/SourcePackages/firebase_app_check-0.4.5/example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@3x.png new file mode 100644 index 0000000000000000000000000000000000000000..a6d6b8609df07bf62e5100a53a01510388bd2b22 GIT binary patch literal 2665 zcmV-v3YPVWP)oFh3q0MFesq&64WThn3$;G69TfjsAv=f2G9}p zgSx99+!YV6qME!>9MD13x)k(+XE7W?_O4LoLb5ND8 zaV{9+P@>42xDfRiYBMSgD$0!vssptcb;&?u9u(LLBKmkZ>RMD=kvD3h`sk6!QYtBa ztlZI#nu$8lJ^q2Z79UTgZe>BU73(Aospiq+?SdMt8lDZ;*?@tyWVZVS_Q7S&*tJaiRlJ z+aSMOmbg3@h5}v;A*c8SbqM3icg-`Cnwl;7Ts%A1RkNIp+Txl-Ckkvg4oxrqGA5ewEgYqwtECD<_3Egu)xGllKt&J8g&+=ac@Jq4-?w6M3b*>w5 z69N3O%=I^6&UL5gZ!}trC7bUj*12xLdkNs~Bz4QdJJ*UDZox2UGR}SNg@lmOvhCc~ z*f_UeXv(=#I#*7>VZx2ObEN~UoGUTl=-@)E;YtCRZ>SVp$p9yG5hEFZ!`wI!spd)n zSk+vK0Vin7FL{7f&6OB%f;SH22dtbcF<|9fi2Fp%q4kxL!b1#l^)8dUwJ zwEf{(wJj@8iYDVnKB`eSU+;ml-t2`@%_)0jDM`+a46xhDbBj2+&Ih>1A>6aky#(-SYyE{R3f#y57wfLs z6w1p~$bp;6!9DX$M+J~S@D6vJAaElETnsX4h9a5tvPhC3L@qB~bOzkL@^z0k_hS{T4PF*TDrgdXp+dzsE? z>V|VR035Pl9n5&-RePFdS{7KAr2vPOqR9=M$vXA1Yy5>w;EsF`;OK{2pkn-kpp9Pw z)r;5JfJKKaT$4qCb{TaXHjb$QA{y0EYy*+b1XI;6Ah- zw13P)xT`>~eFoJC!>{2XL(a_#upp3gaR1#5+L(Jmzp4TBnx{~WHedpJ1ch8JFk~Sw z>F+gN+i+VD?gMXwcIhn8rz`>e>J^TI3E-MW>f}6R-pL}>WMOa0k#jN+`RyUVUC;#D zg|~oS^$6%wpF{^Qr+}X>0PKcr3Fc&>Z>uv@C);pwDs@2bZWhYP!rvGx?_|q{d`t<*XEb#=aOb=N+L@CVBGqImZf&+a zCQEa3$~@#kC);pasdG=f6tuIi0PO-y&tvX%>Mv=oY3U$nD zJ#gMegnQ46pq+3r=;zmgcG+zRc9D~c>z+jo9&D+`E6$LmyFqlmCYw;-Zooma{sR@~ z)_^|YL1&&@|GXo*pivH7k!msl+$Sew3%XJnxajt0K%3M6Bd&YFNy9}tWG^aovK2eX z1aL1%7;KRDrA@eG-Wr6w+;*H_VD~qLiVI`{_;>o)k`{8xa3EJT1O_>#iy_?va0eR? zDV=N%;Zjb%Z2s$@O>w@iqt!I}tLjGk!=p`D23I}N4Be@$(|iSA zf3Ih7b<{zqpDB4WF_5X1(peKe+rASze%u8eKLn#KKXt;UZ+Adf$_TO+vTqshLLJ5c z52HucO=lrNVae5XWOLm!V@n-ObU11!b+DN<$RuU+YsrBq*lYT;?AwJpmNKniF0Q1< zJCo>Q$=v$@&y=sj6{r!Y&y&`0$-I}S!H_~pI&2H8Z1C|BX4VgZ^-! zje3-;x0PBD!M`v*J_)rL^+$<1VJhH*2Fi~aA7s&@_rUHYJ9zD=M%4AFQ`}k8OC$9s XsPq=LnkwKG00000NkvXXu0mjfhAk5^ literal 0 HcmV?d00001 diff --git a/mih_ui/android/build/macos/SourcePackages/firebase_app_check-0.4.5/example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-60x60@2x.png b/mih_ui/android/build/macos/SourcePackages/firebase_app_check-0.4.5/example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-60x60@2x.png new file mode 100644 index 0000000000000000000000000000000000000000..a6d6b8609df07bf62e5100a53a01510388bd2b22 GIT binary patch literal 2665 zcmV-v3YPVWP)oFh3q0MFesq&64WThn3$;G69TfjsAv=f2G9}p zgSx99+!YV6qME!>9MD13x)k(+XE7W?_O4LoLb5ND8 zaV{9+P@>42xDfRiYBMSgD$0!vssptcb;&?u9u(LLBKmkZ>RMD=kvD3h`sk6!QYtBa ztlZI#nu$8lJ^q2Z79UTgZe>BU73(Aospiq+?SdMt8lDZ;*?@tyWVZVS_Q7S&*tJaiRlJ z+aSMOmbg3@h5}v;A*c8SbqM3icg-`Cnwl;7Ts%A1RkNIp+Txl-Ckkvg4oxrqGA5ewEgYqwtECD<_3Egu)xGllKt&J8g&+=ac@Jq4-?w6M3b*>w5 z69N3O%=I^6&UL5gZ!}trC7bUj*12xLdkNs~Bz4QdJJ*UDZox2UGR}SNg@lmOvhCc~ z*f_UeXv(=#I#*7>VZx2ObEN~UoGUTl=-@)E;YtCRZ>SVp$p9yG5hEFZ!`wI!spd)n zSk+vK0Vin7FL{7f&6OB%f;SH22dtbcF<|9fi2Fp%q4kxL!b1#l^)8dUwJ zwEf{(wJj@8iYDVnKB`eSU+;ml-t2`@%_)0jDM`+a46xhDbBj2+&Ih>1A>6aky#(-SYyE{R3f#y57wfLs z6w1p~$bp;6!9DX$M+J~S@D6vJAaElETnsX4h9a5tvPhC3L@qB~bOzkL@^z0k_hS{T4PF*TDrgdXp+dzsE? z>V|VR035Pl9n5&-RePFdS{7KAr2vPOqR9=M$vXA1Yy5>w;EsF`;OK{2pkn-kpp9Pw z)r;5JfJKKaT$4qCb{TaXHjb$QA{y0EYy*+b1XI;6Ah- zw13P)xT`>~eFoJC!>{2XL(a_#upp3gaR1#5+L(Jmzp4TBnx{~WHedpJ1ch8JFk~Sw z>F+gN+i+VD?gMXwcIhn8rz`>e>J^TI3E-MW>f}6R-pL}>WMOa0k#jN+`RyUVUC;#D zg|~oS^$6%wpF{^Qr+}X>0PKcr3Fc&>Z>uv@C);pwDs@2bZWhYP!rvGx?_|q{d`t<*XEb#=aOb=N+L@CVBGqImZf&+a zCQEa3$~@#kC);pasdG=f6tuIi0PO-y&tvX%>Mv=oY3U$nD zJ#gMegnQ46pq+3r=;zmgcG+zRc9D~c>z+jo9&D+`E6$LmyFqlmCYw;-Zooma{sR@~ z)_^|YL1&&@|GXo*pivH7k!msl+$Sew3%XJnxajt0K%3M6Bd&YFNy9}tWG^aovK2eX z1aL1%7;KRDrA@eG-Wr6w+;*H_VD~qLiVI`{_;>o)k`{8xa3EJT1O_>#iy_?va0eR? zDV=N%;Zjb%Z2s$@O>w@iqt!I}tLjGk!=p`D23I}N4Be@$(|iSA zf3Ih7b<{zqpDB4WF_5X1(peKe+rASze%u8eKLn#KKXt;UZ+Adf$_TO+vTqshLLJ5c z52HucO=lrNVae5XWOLm!V@n-ObU11!b+DN<$RuU+YsrBq*lYT;?AwJpmNKniF0Q1< zJCo>Q$=v$@&y=sj6{r!Y&y&`0$-I}S!H_~pI&2H8Z1C|BX4VgZ^-! zje3-;x0PBD!M`v*J_)rL^+$<1VJhH*2Fi~aA7s&@_rUHYJ9zD=M%4AFQ`}k8OC$9s XsPq=LnkwKG00000NkvXXu0mjfhAk5^ literal 0 HcmV?d00001 diff --git a/mih_ui/android/build/macos/SourcePackages/firebase_app_check-0.4.5/example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-60x60@3x.png b/mih_ui/android/build/macos/SourcePackages/firebase_app_check-0.4.5/example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-60x60@3x.png new file mode 100644 index 0000000000000000000000000000000000000000..75b2d164a5a98e212cca15ea7bf2ab5de5108680 GIT binary patch literal 3831 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 literal 0 HcmV?d00001 diff --git a/mih_ui/android/build/macos/SourcePackages/firebase_app_check-0.4.5/example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-76x76@1x.png b/mih_ui/android/build/macos/SourcePackages/firebase_app_check-0.4.5/example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-76x76@1x.png new file mode 100644 index 0000000000000000000000000000000000000000..c4df70d39da7941ef3f6dcb7f06a192d8dcb308d GIT binary patch literal 1888 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 iW8Zci7-kcv6Uzs@r-FtIZ-&5|)J Q1PU{Fy85}Sb4q9e0B4a5jsO4v literal 0 HcmV?d00001 diff --git a/mih_ui/android/build/macos/SourcePackages/firebase_app_check-0.4.5/example/ios/Runner/Assets.xcassets/LaunchImage.imageset/LaunchImage@2x.png b/mih_ui/android/build/macos/SourcePackages/firebase_app_check-0.4.5/example/ios/Runner/Assets.xcassets/LaunchImage.imageset/LaunchImage@2x.png new file mode 100644 index 0000000000000000000000000000000000000000..9da19eacad3b03bb08bbddbbf4ac48dd78b3d838 GIT binary patch literal 68 zcmeAS@N?(olHy`uVBq!ia0vp^j3CUx0wlM}@Gt=>Zci7-kcv6Uzs@r-FtIZ-&5|)J Q1PU{Fy85}Sb4q9e0B4a5jsO4v literal 0 HcmV?d00001 diff --git a/mih_ui/android/build/macos/SourcePackages/firebase_app_check-0.4.5/example/ios/Runner/Assets.xcassets/LaunchImage.imageset/LaunchImage@3x.png b/mih_ui/android/build/macos/SourcePackages/firebase_app_check-0.4.5/example/ios/Runner/Assets.xcassets/LaunchImage.imageset/LaunchImage@3x.png new file mode 100644 index 0000000000000000000000000000000000000000..9da19eacad3b03bb08bbddbbf4ac48dd78b3d838 GIT binary patch literal 68 zcmeAS@N?(olHy`uVBq!ia0vp^j3CUx0wlM}@Gt=>Zci7-kcv6Uzs@r-FtIZ-&5|)J Q1PU{Fy85}Sb4q9e0B4a5jsO4v literal 0 HcmV?d00001 diff --git a/mih_ui/android/build/macos/SourcePackages/firebase_app_check-0.4.5/example/ios/Runner/Assets.xcassets/LaunchImage.imageset/README.md b/mih_ui/android/build/macos/SourcePackages/firebase_app_check-0.4.5/example/ios/Runner/Assets.xcassets/LaunchImage.imageset/README.md new file mode 100644 index 00000000..89c2725b --- /dev/null +++ b/mih_ui/android/build/macos/SourcePackages/firebase_app_check-0.4.5/example/ios/Runner/Assets.xcassets/LaunchImage.imageset/README.md @@ -0,0 +1,5 @@ +# Launch Screen Assets + +You can customize the launch screen with your own desired assets by replacing the image files in this directory. + +You can also do it by opening your Flutter project's Xcode project with `open ios/Runner.xcworkspace`, selecting `Runner/Assets.xcassets` in the Project Navigator and dropping in the desired images. \ No newline at end of file diff --git a/mih_ui/android/build/macos/SourcePackages/firebase_app_check-0.4.5/example/ios/Runner/Base.lproj/LaunchScreen.storyboard b/mih_ui/android/build/macos/SourcePackages/firebase_app_check-0.4.5/example/ios/Runner/Base.lproj/LaunchScreen.storyboard new file mode 100644 index 00000000..f2e259c7 --- /dev/null +++ b/mih_ui/android/build/macos/SourcePackages/firebase_app_check-0.4.5/example/ios/Runner/Base.lproj/LaunchScreen.storyboard @@ -0,0 +1,37 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/mih_ui/android/build/macos/SourcePackages/firebase_app_check-0.4.5/example/ios/Runner/Base.lproj/Main.storyboard b/mih_ui/android/build/macos/SourcePackages/firebase_app_check-0.4.5/example/ios/Runner/Base.lproj/Main.storyboard new file mode 100644 index 00000000..f3c28516 --- /dev/null +++ b/mih_ui/android/build/macos/SourcePackages/firebase_app_check-0.4.5/example/ios/Runner/Base.lproj/Main.storyboard @@ -0,0 +1,26 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/mih_ui/android/build/macos/SourcePackages/firebase_app_check-0.4.5/example/ios/Runner/GoogleService-Info.plist b/mih_ui/android/build/macos/SourcePackages/firebase_app_check-0.4.5/example/ios/Runner/GoogleService-Info.plist new file mode 100644 index 00000000..7e2f0dcb --- /dev/null +++ b/mih_ui/android/build/macos/SourcePackages/firebase_app_check-0.4.5/example/ios/Runner/GoogleService-Info.plist @@ -0,0 +1,38 @@ + + + + + CLIENT_ID + 406099696497-17cfsesi620nhia0sck4map450gngkoh.apps.googleusercontent.com + REVERSED_CLIENT_ID + com.googleusercontent.apps.406099696497-17cfsesi620nhia0sck4map450gngkoh + ANDROID_CLIENT_ID + 406099696497-17qn06u8a0dc717u8ul7s49ampk13lul.apps.googleusercontent.com + API_KEY + AIzaSyDooSUGSf63Ghq02_iIhtnmwMDs4HlWS6c + GCM_SENDER_ID + 406099696497 + PLIST_VERSION + 1 + BUNDLE_ID + io.flutter.plugins.firebase.appcheck.example + PROJECT_ID + flutterfire-e2e-tests + STORAGE_BUCKET + flutterfire-e2e-tests.appspot.com + IS_ADS_ENABLED + + IS_ANALYTICS_ENABLED + + IS_APPINVITE_ENABLED + + IS_GCM_ENABLED + + IS_SIGNIN_ENABLED + + GOOGLE_APP_ID + 1:406099696497:ios:bd8702ba3865bb333574d0 + DATABASE_URL + https://flutterfire-e2e-tests-default-rtdb.europe-west1.firebasedatabase.app + + \ No newline at end of file diff --git a/mih_ui/android/build/macos/SourcePackages/firebase_app_check-0.4.5/example/ios/Runner/Info.plist b/mih_ui/android/build/macos/SourcePackages/firebase_app_check-0.4.5/example/ios/Runner/Info.plist new file mode 100644 index 00000000..3a8a7a2f --- /dev/null +++ b/mih_ui/android/build/macos/SourcePackages/firebase_app_check-0.4.5/example/ios/Runner/Info.plist @@ -0,0 +1,70 @@ + + + + + CADisableMinimumFrameDurationOnPhone + + CFBundleDevelopmentRegion + $(DEVELOPMENT_LANGUAGE) + CFBundleExecutable + $(EXECUTABLE_NAME) + CFBundleIdentifier + $(PRODUCT_BUNDLE_IDENTIFIER) + CFBundleInfoDictionaryVersion + 6.0 + CFBundleName + example + CFBundlePackageType + APPL + CFBundleShortVersionString + $(FLUTTER_BUILD_NAME) + CFBundleSignature + ???? + CFBundleVersion + $(FLUTTER_BUILD_NUMBER) + LSRequiresIPhoneOS + + UILaunchStoryboardName + LaunchScreen + UIMainStoryboardFile + Main + UISupportedInterfaceOrientations + + UIInterfaceOrientationPortrait + UIInterfaceOrientationLandscapeLeft + UIInterfaceOrientationLandscapeRight + + UISupportedInterfaceOrientations~ipad + + UIInterfaceOrientationPortrait + UIInterfaceOrientationPortraitUpsideDown + UIInterfaceOrientationLandscapeLeft + UIInterfaceOrientationLandscapeRight + + UIViewControllerBasedStatusBarAppearance + + UIApplicationSupportsIndirectInputEvents + + UIApplicationSceneManifest + + UIApplicationSupportsMultipleScenes + + UISceneConfigurations + + UIWindowSceneSessionRoleApplication + + + UISceneClassName + UIWindowScene + UISceneDelegateClassName + FlutterSceneDelegate + UISceneConfigurationName + flutter + UISceneStoryboardFile + Main + + + + + + diff --git a/mih_ui/android/build/macos/SourcePackages/firebase_app_check-0.4.5/example/ios/Runner/Runner.entitlements b/mih_ui/android/build/macos/SourcePackages/firebase_app_check-0.4.5/example/ios/Runner/Runner.entitlements new file mode 100644 index 00000000..70084b41 --- /dev/null +++ b/mih_ui/android/build/macos/SourcePackages/firebase_app_check-0.4.5/example/ios/Runner/Runner.entitlements @@ -0,0 +1,8 @@ + + + + + com.apple.developer.devicecheck.appattest-environment + development + + diff --git a/mih_ui/android/build/macos/SourcePackages/firebase_app_check-0.4.5/example/ios/Runner/RunnerRelease.entitlements b/mih_ui/android/build/macos/SourcePackages/firebase_app_check-0.4.5/example/ios/Runner/RunnerRelease.entitlements new file mode 100644 index 00000000..70084b41 --- /dev/null +++ b/mih_ui/android/build/macos/SourcePackages/firebase_app_check-0.4.5/example/ios/Runner/RunnerRelease.entitlements @@ -0,0 +1,8 @@ + + + + + com.apple.developer.devicecheck.appattest-environment + development + + diff --git a/mih_ui/android/build/macos/SourcePackages/firebase_app_check-0.4.5/example/ios/Runner/main.m b/mih_ui/android/build/macos/SourcePackages/firebase_app_check-0.4.5/example/ios/Runner/main.m new file mode 100644 index 00000000..dff6597e --- /dev/null +++ b/mih_ui/android/build/macos/SourcePackages/firebase_app_check-0.4.5/example/ios/Runner/main.m @@ -0,0 +1,9 @@ +#import +#import +#import "AppDelegate.h" + +int main(int argc, char* argv[]) { + @autoreleasepool { + return UIApplicationMain(argc, argv, nil, NSStringFromClass([AppDelegate class])); + } +} diff --git a/mih_ui/android/build/macos/SourcePackages/firebase_app_check-0.4.5/example/ios/firebase_app_id_file.json b/mih_ui/android/build/macos/SourcePackages/firebase_app_check-0.4.5/example/ios/firebase_app_id_file.json new file mode 100644 index 00000000..ab0e60a0 --- /dev/null +++ b/mih_ui/android/build/macos/SourcePackages/firebase_app_check-0.4.5/example/ios/firebase_app_id_file.json @@ -0,0 +1,7 @@ +{ + "file_generated_by": "FlutterFire CLI", + "purpose": "FirebaseAppID & ProjectID for this Firebase app in this directory", + "GOOGLE_APP_ID": "1:406099696497:ios:bd8702ba3865bb333574d0", + "FIREBASE_PROJECT_ID": "flutterfire-e2e-tests", + "GCM_SENDER_ID": "406099696497" +} \ No newline at end of file diff --git a/mih_ui/android/build/macos/SourcePackages/firebase_app_check-0.4.5/example/lib/firebase_options.dart b/mih_ui/android/build/macos/SourcePackages/firebase_app_check-0.4.5/example/lib/firebase_options.dart new file mode 100644 index 00000000..8bbd98af --- /dev/null +++ b/mih_ui/android/build/macos/SourcePackages/firebase_app_check-0.4.5/example/lib/firebase_options.dart @@ -0,0 +1,98 @@ +// Copyright 2022, the Chromium project authors. Please see the AUTHORS file +// for details. All rights reserved. Use of this source code is governed by a +// BSD-style license that can be found in the LICENSE file. + +// File generated by FlutterFire CLI. +// ignore_for_file: type=lint +import 'package:firebase_core/firebase_core.dart' show FirebaseOptions; +import 'package:flutter/foundation.dart' + show defaultTargetPlatform, kIsWeb, TargetPlatform; + +/// Default [FirebaseOptions] for use with your Firebase apps. +/// +/// Example: +/// ```dart +/// import 'firebase_options.dart'; +/// // ... +/// await Firebase.initializeApp( +/// options: DefaultFirebaseOptions.currentPlatform, +/// ); +/// ``` +class DefaultFirebaseOptions { + static FirebaseOptions get currentPlatform { + if (kIsWeb) { + return web; + } + switch (defaultTargetPlatform) { + case TargetPlatform.android: + return android; + case TargetPlatform.iOS: + return ios; + case TargetPlatform.macOS: + return macos; + case TargetPlatform.windows: + return web; + case TargetPlatform.linux: + throw UnsupportedError( + 'DefaultFirebaseOptions have not been configured for linux - ' + 'you can reconfigure this by running the FlutterFire CLI again.', + ); + default: + throw UnsupportedError( + 'DefaultFirebaseOptions are not supported for this platform.', + ); + } + } + + static const FirebaseOptions web = FirebaseOptions( + apiKey: 'AIzaSyB7wZb2tO1-Fs6GbDADUSTs2Qs3w08Hovw', + appId: '1:406099696497:web:87e25e51afe982cd3574d0', + messagingSenderId: '406099696497', + projectId: 'flutterfire-e2e-tests', + authDomain: 'flutterfire-e2e-tests.firebaseapp.com', + databaseURL: + 'https://flutterfire-e2e-tests-default-rtdb.europe-west1.firebasedatabase.app', + storageBucket: 'flutterfire-e2e-tests.appspot.com', + measurementId: 'G-JN95N1JV2E', + ); + + static const FirebaseOptions android = FirebaseOptions( + apiKey: 'AIzaSyCdRjCVZlhrq72RuEklEyyxYlBRCYhI2Sw', + appId: '1:406099696497:android:a241c4b471513a203574d0', + messagingSenderId: '406099696497', + projectId: 'flutterfire-e2e-tests', + databaseURL: + 'https://flutterfire-e2e-tests-default-rtdb.europe-west1.firebasedatabase.app', + storageBucket: 'flutterfire-e2e-tests.appspot.com', + ); + + static const FirebaseOptions ios = FirebaseOptions( + apiKey: 'AIzaSyDooSUGSf63Ghq02_iIhtnmwMDs4HlWS6c', + appId: '1:406099696497:ios:bd8702ba3865bb333574d0', + messagingSenderId: '406099696497', + projectId: 'flutterfire-e2e-tests', + databaseURL: + 'https://flutterfire-e2e-tests-default-rtdb.europe-west1.firebasedatabase.app', + storageBucket: 'flutterfire-e2e-tests.appspot.com', + androidClientId: + '406099696497-17qn06u8a0dc717u8ul7s49ampk13lul.apps.googleusercontent.com', + iosClientId: + '406099696497-17cfsesi620nhia0sck4map450gngkoh.apps.googleusercontent.com', + iosBundleId: 'io.flutter.plugins.firebase.appcheck.example', + ); + + static const FirebaseOptions macos = FirebaseOptions( + apiKey: 'AIzaSyDooSUGSf63Ghq02_iIhtnmwMDs4HlWS6c', + appId: '1:406099696497:ios:bd8702ba3865bb333574d0', + messagingSenderId: '406099696497', + projectId: 'flutterfire-e2e-tests', + databaseURL: + 'https://flutterfire-e2e-tests-default-rtdb.europe-west1.firebasedatabase.app', + storageBucket: 'flutterfire-e2e-tests.appspot.com', + androidClientId: + '406099696497-17qn06u8a0dc717u8ul7s49ampk13lul.apps.googleusercontent.com', + iosClientId: + '406099696497-17cfsesi620nhia0sck4map450gngkoh.apps.googleusercontent.com', + iosBundleId: 'io.flutter.plugins.firebase.appcheck.example', + ); +} diff --git a/mih_ui/android/build/macos/SourcePackages/firebase_app_check-0.4.5/example/lib/main.dart b/mih_ui/android/build/macos/SourcePackages/firebase_app_check-0.4.5/example/lib/main.dart new file mode 100644 index 00000000..8f26c643 --- /dev/null +++ b/mih_ui/android/build/macos/SourcePackages/firebase_app_check-0.4.5/example/lib/main.dart @@ -0,0 +1,249 @@ +// Copyright 2022, the Chromium project authors. Please see the AUTHORS file +// for details. All rights reserved. Use of this source code is governed by a +// BSD-style license that can be found in the LICENSE file. + +// ignore_for_file: do_not_use_environment + +import 'package:cloud_firestore/cloud_firestore.dart'; +import 'package:firebase_app_check/firebase_app_check.dart'; +import 'package:firebase_core/firebase_core.dart'; +import 'package:flutter/foundation.dart'; +import 'package:flutter/material.dart'; + +import 'firebase_options.dart'; + +const kWebRecaptchaSiteKey = '6Lemcn0dAAAAABLkf6aiiHvpGD6x-zF3nOSDU2M8'; + +// Windows: create a debug token in the Firebase Console +// (App Check > Apps > Manage debug tokens), then paste it here +// or set the APP_CHECK_DEBUG_TOKEN environment variable. +const kWindowsDebugToken = String.fromEnvironment( + 'APP_CHECK_DEBUG_TOKEN', + // ignore: avoid_redundant_argument_values + defaultValue: '', +); + +Future main() async { + WidgetsFlutterBinding.ensureInitialized(); + await Firebase.initializeApp( + options: DefaultFirebaseOptions.currentPlatform, + ); + + // Activate app check after initialization, but before + // usage of any Firebase services. + await FirebaseAppCheck.instance.activate( + providerWeb: kDebugMode + ? WebDebugProvider() + : ReCaptchaV3Provider(kWebRecaptchaSiteKey), + providerAndroid: const AndroidDebugProvider(), + providerApple: const AppleDebugProvider(), + // On Windows, only the debug provider is available. + // You must supply a debug token — the desktop C++ SDK does not + // auto-generate one. Create one in the Firebase Console under + // App Check > Apps > Manage debug tokens, then either: + // - pass it via --dart-define=APP_CHECK_DEBUG_TOKEN= + // - or set the APP_CHECK_DEBUG_TOKEN environment variable + providerWindows: WindowsDebugProvider( + debugToken: kWindowsDebugToken.isNotEmpty ? kWindowsDebugToken : null, + ), + ); + + runApp(MyApp()); +} + +class MyApp extends StatelessWidget { + final String title = 'Firebase App Check'; + + @override + Widget build(BuildContext context) { + return MaterialApp( + title: 'Firebase App Check', + home: FirebaseAppCheckExample(title: title), + ); + } +} + +class FirebaseAppCheckExample extends StatefulWidget { + FirebaseAppCheckExample({ + Key? key, + required this.title, + }) : super(key: key); + + final String title; + + @override + _FirebaseAppCheck createState() => _FirebaseAppCheck(); +} + +class _FirebaseAppCheck extends State { + final appCheck = FirebaseAppCheck.instance; + String _message = ''; + String _eventToken = 'not yet'; + + @override + void initState() { + appCheck.onTokenChange.listen(setEventToken); + super.initState(); + } + + void setMessage(String message) { + setState(() { + _message = message; + }); + } + + void setEventToken(String? token) { + setState(() { + _eventToken = token ?? 'not yet'; + }); + } + + Future _activate({ + AndroidAppCheckProvider? android, + AppleAppCheckProvider? apple, + WindowsAppCheckProvider? windows, + }) async { + try { + await appCheck.activate( + providerAndroid: android ?? const AndroidPlayIntegrityProvider(), + providerApple: apple ?? const AppleDeviceCheckProvider(), + providerWeb: ReCaptchaV3Provider(kWebRecaptchaSiteKey), + providerWindows: windows ?? const WindowsDebugProvider(), + ); + final providerName = windows?.runtimeType.toString() ?? + apple?.runtimeType.toString() ?? + android?.runtimeType.toString() ?? + 'default'; + setMessage('Activated with $providerName'); + } catch (e) { + setMessage('activate error: $e'); + } + } + + @override + Widget build(BuildContext context) { + return Scaffold( + appBar: AppBar( + title: Text(widget.title), + ), + body: SingleChildScrollView( + padding: const EdgeInsets.all(16), + child: Column( + crossAxisAlignment: CrossAxisAlignment.stretch, + children: [ + const Text( + 'Providers', + style: TextStyle(fontSize: 18, fontWeight: FontWeight.bold), + ), + const SizedBox(height: 8), + ElevatedButton( + onPressed: () => _activate( + android: const AndroidDebugProvider(), + apple: const AppleDebugProvider(), + windows: WindowsDebugProvider( + debugToken: + kWindowsDebugToken.isNotEmpty ? kWindowsDebugToken : null, + ), + ), + child: const Text('activate(Debug)'), + ), + ElevatedButton( + onPressed: () => _activate( + android: const AndroidPlayIntegrityProvider(), + apple: const AppleDeviceCheckProvider(), + ), + child: const Text('activate(PlayIntegrity / DeviceCheck)'), + ), + if (!kIsWeb) + ElevatedButton( + onPressed: () => _activate( + apple: const AppleAppAttestProvider(), + ), + child: const Text('activate(AppAttest)'), + ), + if (!kIsWeb) + ElevatedButton( + onPressed: () => _activate( + apple: const AppleAppAttestWithDeviceCheckFallbackProvider(), + ), + child: const Text( + 'activate(AppAttest + DeviceCheck fallback)', + ), + ), + const SizedBox(height: 16), + const Text( + 'Actions', + style: TextStyle(fontSize: 18, fontWeight: FontWeight.bold), + ), + const SizedBox(height: 8), + ElevatedButton( + onPressed: () async { + try { + final token = await appCheck.getToken(true); + setMessage('Token: ${token?.substring(0, 20)}...'); + } catch (e) { + setMessage('getToken error: $e'); + } + }, + child: const Text('getToken(forceRefresh: true)'), + ), + ElevatedButton( + onPressed: () async { + try { + final token = await appCheck.getLimitedUseToken(); + setMessage( + 'Limited use token: ${token.substring(0, 20)}...', + ); + } catch (e) { + setMessage('getLimitedUseToken error: $e'); + } + }, + child: const Text('getLimitedUseToken()'), + ), + ElevatedButton( + onPressed: () async { + await appCheck.setTokenAutoRefreshEnabled(true); + setMessage('Token auto-refresh enabled'); + }, + child: const Text('setTokenAutoRefreshEnabled(true)'), + ), + ElevatedButton( + onPressed: () async { + try { + final result = await FirebaseFirestore.instance + .collection('flutter-tests') + .limit(1) + .get(); + setMessage( + result.docs.isNotEmpty + ? 'Firestore: Document found' + : 'Firestore: No documents', + ); + } catch (e) { + setMessage('Firestore error: $e'); + } + }, + child: const Text('Test Firestore with App Check'), + ), + const SizedBox(height: 20), + Text( + _message, + style: const TextStyle( + color: Color.fromRGBO(47, 79, 79, 1), + fontSize: 16, + ), + ), + const SizedBox(height: 20), + Text( + 'Token from onTokenChange: $_eventToken', + style: const TextStyle( + color: Color.fromRGBO(128, 0, 128, 1), + fontSize: 14, + ), + ), + ], + ), + ), + ); + } +} diff --git a/mih_ui/android/build/macos/SourcePackages/firebase_app_check-0.4.5/example/macos/Flutter/Flutter-Debug.xcconfig b/mih_ui/android/build/macos/SourcePackages/firebase_app_check-0.4.5/example/macos/Flutter/Flutter-Debug.xcconfig new file mode 100644 index 00000000..4b81f9b2 --- /dev/null +++ b/mih_ui/android/build/macos/SourcePackages/firebase_app_check-0.4.5/example/macos/Flutter/Flutter-Debug.xcconfig @@ -0,0 +1,2 @@ +#include? "Pods/Target Support Files/Pods-Runner/Pods-Runner.debug.xcconfig" +#include "ephemeral/Flutter-Generated.xcconfig" diff --git a/mih_ui/android/build/macos/SourcePackages/firebase_app_check-0.4.5/example/macos/Flutter/Flutter-Release.xcconfig b/mih_ui/android/build/macos/SourcePackages/firebase_app_check-0.4.5/example/macos/Flutter/Flutter-Release.xcconfig new file mode 100644 index 00000000..5caa9d15 --- /dev/null +++ b/mih_ui/android/build/macos/SourcePackages/firebase_app_check-0.4.5/example/macos/Flutter/Flutter-Release.xcconfig @@ -0,0 +1,2 @@ +#include? "Pods/Target Support Files/Pods-Runner/Pods-Runner.release.xcconfig" +#include "ephemeral/Flutter-Generated.xcconfig" diff --git a/mih_ui/android/build/macos/SourcePackages/firebase_app_check-0.4.5/example/macos/Podfile b/mih_ui/android/build/macos/SourcePackages/firebase_app_check-0.4.5/example/macos/Podfile new file mode 100644 index 00000000..ff5ddb3b --- /dev/null +++ b/mih_ui/android/build/macos/SourcePackages/firebase_app_check-0.4.5/example/macos/Podfile @@ -0,0 +1,42 @@ +platform :osx, '10.15' + +# CocoaPods analytics sends network stats synchronously affecting flutter build latency. +ENV['COCOAPODS_DISABLE_STATS'] = 'true' + +project 'Runner', { + 'Debug' => :debug, + 'Profile' => :release, + 'Release' => :release, +} + +def flutter_root + generated_xcode_build_settings_path = File.expand_path(File.join('..', 'Flutter', 'ephemeral', 'Flutter-Generated.xcconfig'), __FILE__) + unless File.exist?(generated_xcode_build_settings_path) + raise "#{generated_xcode_build_settings_path} must exist. If you're running pod install manually, make sure \"flutter pub get\" is executed first" + end + + File.foreach(generated_xcode_build_settings_path) do |line| + matches = line.match(/FLUTTER_ROOT\=(.*)/) + return matches[1].strip if matches + end + raise "FLUTTER_ROOT not found in #{generated_xcode_build_settings_path}. Try deleting Flutter-Generated.xcconfig, then run \"flutter pub get\"" +end + +require File.expand_path(File.join('packages', 'flutter_tools', 'bin', 'podhelper'), flutter_root) + +flutter_macos_podfile_setup + +target 'Runner' do + use_frameworks! + + flutter_install_all_macos_pods File.dirname(File.realpath(__FILE__)) + target 'RunnerTests' do + inherit! :search_paths + end +end + +post_install do |installer| + installer.pods_project.targets.each do |target| + flutter_additional_macos_build_settings(target) + end +end diff --git a/mih_ui/android/build/macos/SourcePackages/firebase_app_check-0.4.5/example/macos/Runner.xcodeproj/project.pbxproj b/mih_ui/android/build/macos/SourcePackages/firebase_app_check-0.4.5/example/macos/Runner.xcodeproj/project.pbxproj new file mode 100644 index 00000000..c0dc3860 --- /dev/null +++ b/mih_ui/android/build/macos/SourcePackages/firebase_app_check-0.4.5/example/macos/Runner.xcodeproj/project.pbxproj @@ -0,0 +1,613 @@ +// !$*UTF8*$! +{ + archiveVersion = 1; + classes = { + }; + objectVersion = 54; + objects = { + +/* Begin PBXAggregateTarget section */ + 33CC111A2044C6BA0003C045 /* Flutter Assemble */ = { + isa = PBXAggregateTarget; + buildConfigurationList = 33CC111B2044C6BA0003C045 /* Build configuration list for PBXAggregateTarget "Flutter Assemble" */; + buildPhases = ( + 33CC111E2044C6BF0003C045 /* ShellScript */, + ); + dependencies = ( + ); + name = "Flutter Assemble"; + productName = FLX; + }; +/* End PBXAggregateTarget section */ + +/* Begin PBXBuildFile section */ + 25624AEC275E1E7900B1E491 /* GoogleService-Info.plist in Resources */ = {isa = PBXBuildFile; fileRef = 25624AEB275E1E7900B1E491 /* GoogleService-Info.plist */; }; + 335BBD1B22A9A15E00E9071D /* GeneratedPluginRegistrant.swift in Sources */ = {isa = PBXBuildFile; fileRef = 335BBD1A22A9A15E00E9071D /* GeneratedPluginRegistrant.swift */; }; + 33CC10F12044A3C60003C045 /* AppDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 33CC10F02044A3C60003C045 /* AppDelegate.swift */; }; + 33CC10F32044A3C60003C045 /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 33CC10F22044A3C60003C045 /* Assets.xcassets */; }; + 33CC10F62044A3C60003C045 /* MainMenu.xib in Resources */ = {isa = PBXBuildFile; fileRef = 33CC10F42044A3C60003C045 /* MainMenu.xib */; }; + 33CC11132044BFA00003C045 /* MainFlutterWindow.swift in Sources */ = {isa = PBXBuildFile; fileRef = 33CC11122044BFA00003C045 /* MainFlutterWindow.swift */; }; + 78A318202AECB46A00862997 /* FlutterGeneratedPluginSwiftPackage in Frameworks */ = {isa = PBXBuildFile; productRef = 78A3181F2AECB46A00862997 /* FlutterGeneratedPluginSwiftPackage */; }; +/* End PBXBuildFile section */ + +/* Begin PBXContainerItemProxy section */ + 33CC111F2044C79F0003C045 /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = 33CC10E52044A3C60003C045 /* Project object */; + proxyType = 1; + remoteGlobalIDString = 33CC111A2044C6BA0003C045; + remoteInfo = FLX; + }; +/* End PBXContainerItemProxy section */ + +/* Begin PBXCopyFilesBuildPhase section */ + 33CC110E2044A8840003C045 /* Bundle Framework */ = { + isa = PBXCopyFilesBuildPhase; + buildActionMask = 2147483647; + dstPath = ""; + dstSubfolderSpec = 10; + files = ( + ); + name = "Bundle Framework"; + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXCopyFilesBuildPhase section */ + +/* Begin PBXFileReference section */ + 0DC934EE60634F0D37DD0EC3 /* GoogleService-Info.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; name = "GoogleService-Info.plist"; path = "Runner/GoogleService-Info.plist"; sourceTree = ""; }; + 25624AEB275E1E7900B1E491 /* GoogleService-Info.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; path = "GoogleService-Info.plist"; sourceTree = ""; }; + 333000ED22D3DE5D00554162 /* Warnings.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = Warnings.xcconfig; sourceTree = ""; }; + 335BBD1A22A9A15E00E9071D /* GeneratedPluginRegistrant.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = GeneratedPluginRegistrant.swift; sourceTree = ""; }; + 33CC10ED2044A3C60003C045 /* firebase_app_check_example.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = firebase_app_check_example.app; sourceTree = BUILT_PRODUCTS_DIR; }; + 33CC10F02044A3C60003C045 /* AppDelegate.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AppDelegate.swift; sourceTree = ""; }; + 33CC10F22044A3C60003C045 /* Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; name = Assets.xcassets; path = Runner/Assets.xcassets; sourceTree = ""; }; + 33CC10F52044A3C60003C045 /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.xib; name = Base; path = Base.lproj/MainMenu.xib; sourceTree = ""; }; + 33CC10F72044A3C60003C045 /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; name = Info.plist; path = Runner/Info.plist; sourceTree = ""; }; + 33CC11122044BFA00003C045 /* MainFlutterWindow.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = MainFlutterWindow.swift; sourceTree = ""; }; + 33CEB47222A05771004F2AC0 /* Flutter-Debug.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = "Flutter-Debug.xcconfig"; sourceTree = ""; }; + 33CEB47422A05771004F2AC0 /* Flutter-Release.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = "Flutter-Release.xcconfig"; sourceTree = ""; }; + 33CEB47722A0578A004F2AC0 /* Flutter-Generated.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; name = "Flutter-Generated.xcconfig"; path = "ephemeral/Flutter-Generated.xcconfig"; sourceTree = ""; }; + 33E51913231747F40026EE4D /* DebugProfile.entitlements */ = {isa = PBXFileReference; lastKnownFileType = text.plist.entitlements; path = DebugProfile.entitlements; sourceTree = ""; }; + 33E51914231749380026EE4D /* Release.entitlements */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.entitlements; path = Release.entitlements; sourceTree = ""; }; + 33E5194F232828860026EE4D /* AppInfo.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = AppInfo.xcconfig; sourceTree = ""; }; + 7AFA3C8E1D35360C0083082E /* Release.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = Release.xcconfig; sourceTree = ""; }; + 9740EEB21CF90195004384FC /* Debug.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; path = Debug.xcconfig; sourceTree = ""; }; +/* End PBXFileReference section */ + +/* Begin PBXFrameworksBuildPhase section */ + 33CC10EA2044A3C60003C045 /* Frameworks */ = { + isa = PBXFrameworksBuildPhase; + buildActionMask = 2147483647; + files = ( + 78A318202AECB46A00862997 /* FlutterGeneratedPluginSwiftPackage in Frameworks */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXFrameworksBuildPhase section */ + +/* Begin PBXGroup section */ + 33BA886A226E78AF003329D5 /* Configs */ = { + isa = PBXGroup; + children = ( + 33E5194F232828860026EE4D /* AppInfo.xcconfig */, + 9740EEB21CF90195004384FC /* Debug.xcconfig */, + 7AFA3C8E1D35360C0083082E /* Release.xcconfig */, + 333000ED22D3DE5D00554162 /* Warnings.xcconfig */, + ); + path = Configs; + sourceTree = ""; + }; + 33CC10E42044A3C60003C045 = { + isa = PBXGroup; + children = ( + 33FAB671232836740065AC1E /* Runner */, + 33CEB47122A05771004F2AC0 /* Flutter */, + 33CC10EE2044A3C60003C045 /* Products */, + 74CB5F55BD11E25520F6FF45 /* Pods */, + 0DC934EE60634F0D37DD0EC3 /* GoogleService-Info.plist */, + ); + sourceTree = ""; + }; + 33CC10EE2044A3C60003C045 /* Products */ = { + isa = PBXGroup; + children = ( + 33CC10ED2044A3C60003C045 /* firebase_app_check_example.app */, + ); + name = Products; + sourceTree = ""; + }; + 33CC11242044D66E0003C045 /* Resources */ = { + isa = PBXGroup; + children = ( + 33CC10F22044A3C60003C045 /* Assets.xcassets */, + 33CC10F42044A3C60003C045 /* MainMenu.xib */, + 33CC10F72044A3C60003C045 /* Info.plist */, + ); + name = Resources; + path = ..; + sourceTree = ""; + }; + 33CEB47122A05771004F2AC0 /* Flutter */ = { + isa = PBXGroup; + children = ( + 335BBD1A22A9A15E00E9071D /* GeneratedPluginRegistrant.swift */, + 33CEB47222A05771004F2AC0 /* Flutter-Debug.xcconfig */, + 33CEB47422A05771004F2AC0 /* Flutter-Release.xcconfig */, + 33CEB47722A0578A004F2AC0 /* Flutter-Generated.xcconfig */, + ); + path = Flutter; + sourceTree = ""; + }; + 33FAB671232836740065AC1E /* Runner */ = { + isa = PBXGroup; + children = ( + 25624AEB275E1E7900B1E491 /* GoogleService-Info.plist */, + 33CC10F02044A3C60003C045 /* AppDelegate.swift */, + 33CC11122044BFA00003C045 /* MainFlutterWindow.swift */, + 33E51913231747F40026EE4D /* DebugProfile.entitlements */, + 33E51914231749380026EE4D /* Release.entitlements */, + 33CC11242044D66E0003C045 /* Resources */, + 33BA886A226E78AF003329D5 /* Configs */, + ); + path = Runner; + sourceTree = ""; + }; + 74CB5F55BD11E25520F6FF45 /* Pods */ = { + isa = PBXGroup; + children = ( + ); + path = Pods; + sourceTree = ""; + }; +/* End PBXGroup section */ + +/* Begin PBXNativeTarget section */ + 33CC10EC2044A3C60003C045 /* Runner */ = { + isa = PBXNativeTarget; + buildConfigurationList = 33CC10FB2044A3C60003C045 /* Build configuration list for PBXNativeTarget "Runner" */; + buildPhases = ( + 33CC10E92044A3C60003C045 /* Sources */, + 33CC10EA2044A3C60003C045 /* Frameworks */, + 33CC10EB2044A3C60003C045 /* Resources */, + 33CC110E2044A8840003C045 /* Bundle Framework */, + 3399D490228B24CF009A79C7 /* ShellScript */, + ); + buildRules = ( + ); + dependencies = ( + 33CC11202044C79F0003C045 /* PBXTargetDependency */, + ); + name = Runner; + packageProductDependencies = ( + 78A3181F2AECB46A00862997 /* FlutterGeneratedPluginSwiftPackage */, + ); + productName = Runner; + productReference = 33CC10ED2044A3C60003C045 /* firebase_app_check_example.app */; + productType = "com.apple.product-type.application"; + }; +/* End PBXNativeTarget section */ + +/* Begin PBXProject section */ + 33CC10E52044A3C60003C045 /* Project object */ = { + isa = PBXProject; + attributes = { + LastSwiftUpdateCheck = 0920; + LastUpgradeCheck = 1510; + ORGANIZATIONNAME = ""; + TargetAttributes = { + 33CC10EC2044A3C60003C045 = { + CreatedOnToolsVersion = 9.2; + LastSwiftMigration = 1100; + ProvisioningStyle = Automatic; + SystemCapabilities = { + com.apple.Sandbox = { + enabled = 1; + }; + }; + }; + 33CC111A2044C6BA0003C045 = { + CreatedOnToolsVersion = 9.2; + ProvisioningStyle = Manual; + }; + }; + }; + buildConfigurationList = 33CC10E82044A3C60003C045 /* Build configuration list for PBXProject "Runner" */; + compatibilityVersion = "Xcode 9.3"; + developmentRegion = en; + hasScannedForEncodings = 0; + knownRegions = ( + en, + Base, + ); + mainGroup = 33CC10E42044A3C60003C045; + packageReferences = ( + 781AD8BC2B33823900A9FFBB /* XCLocalSwiftPackageReference "FlutterGeneratedPluginSwiftPackage" */, + ); + productRefGroup = 33CC10EE2044A3C60003C045 /* Products */; + projectDirPath = ""; + projectRoot = ""; + targets = ( + 33CC10EC2044A3C60003C045 /* Runner */, + 33CC111A2044C6BA0003C045 /* Flutter Assemble */, + ); + }; +/* End PBXProject section */ + +/* Begin PBXResourcesBuildPhase section */ + 33CC10EB2044A3C60003C045 /* Resources */ = { + isa = PBXResourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + 33CC10F32044A3C60003C045 /* Assets.xcassets in Resources */, + 33CC10F62044A3C60003C045 /* MainMenu.xib in Resources */, + 25624AEC275E1E7900B1E491 /* GoogleService-Info.plist in Resources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXResourcesBuildPhase section */ + +/* Begin PBXShellScriptBuildPhase section */ + 3399D490228B24CF009A79C7 /* ShellScript */ = { + isa = PBXShellScriptBuildPhase; + alwaysOutOfDate = 1; + buildActionMask = 2147483647; + files = ( + ); + inputFileListPaths = ( + ); + inputPaths = ( + ); + outputFileListPaths = ( + ); + outputPaths = ( + ); + runOnlyForDeploymentPostprocessing = 0; + shellPath = /bin/sh; + shellScript = "echo \"$PRODUCT_NAME.app\" > \"$PROJECT_DIR\"/Flutter/ephemeral/.app_filename && \"$FLUTTER_ROOT\"/packages/flutter_tools/bin/macos_assemble.sh embed\n"; + }; + 33CC111E2044C6BF0003C045 /* ShellScript */ = { + isa = PBXShellScriptBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + inputFileListPaths = ( + Flutter/ephemeral/FlutterInputs.xcfilelist, + ); + inputPaths = ( + Flutter/ephemeral/tripwire, + ); + outputFileListPaths = ( + Flutter/ephemeral/FlutterOutputs.xcfilelist, + ); + outputPaths = ( + ); + runOnlyForDeploymentPostprocessing = 0; + shellPath = /bin/sh; + shellScript = "\"$FLUTTER_ROOT\"/packages/flutter_tools/bin/macos_assemble.sh && touch Flutter/ephemeral/tripwire"; + }; +/* End PBXShellScriptBuildPhase section */ + +/* Begin PBXSourcesBuildPhase section */ + 33CC10E92044A3C60003C045 /* Sources */ = { + isa = PBXSourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + 33CC11132044BFA00003C045 /* MainFlutterWindow.swift in Sources */, + 33CC10F12044A3C60003C045 /* AppDelegate.swift in Sources */, + 335BBD1B22A9A15E00E9071D /* GeneratedPluginRegistrant.swift in Sources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXSourcesBuildPhase section */ + +/* Begin PBXTargetDependency section */ + 33CC11202044C79F0003C045 /* PBXTargetDependency */ = { + isa = PBXTargetDependency; + target = 33CC111A2044C6BA0003C045 /* Flutter Assemble */; + targetProxy = 33CC111F2044C79F0003C045 /* PBXContainerItemProxy */; + }; +/* End PBXTargetDependency section */ + +/* Begin PBXVariantGroup section */ + 33CC10F42044A3C60003C045 /* MainMenu.xib */ = { + isa = PBXVariantGroup; + children = ( + 33CC10F52044A3C60003C045 /* Base */, + ); + name = MainMenu.xib; + path = Runner; + sourceTree = ""; + }; +/* End PBXVariantGroup section */ + +/* Begin XCBuildConfiguration section */ + 338D0CE9231458BD00FA5F75 /* Profile */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = 7AFA3C8E1D35360C0083082E /* Release.xcconfig */; + buildSettings = { + ALWAYS_SEARCH_USER_PATHS = NO; + CLANG_ANALYZER_NONNULL = YES; + CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE; + CLANG_CXX_LANGUAGE_STANDARD = "gnu++14"; + CLANG_CXX_LIBRARY = "libc++"; + CLANG_ENABLE_MODULES = YES; + CLANG_ENABLE_OBJC_ARC = YES; + CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES; + CLANG_WARN_BOOL_CONVERSION = YES; + CLANG_WARN_CONSTANT_CONVERSION = YES; + CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES; + CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; + CLANG_WARN_DOCUMENTATION_COMMENTS = YES; + CLANG_WARN_EMPTY_BODY = YES; + CLANG_WARN_ENUM_CONVERSION = YES; + CLANG_WARN_INFINITE_RECURSION = YES; + CLANG_WARN_INT_CONVERSION = YES; + CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES; + CLANG_WARN_OBJC_LITERAL_CONVERSION = YES; + CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; + CLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = YES; + CLANG_WARN_RANGE_LOOP_ANALYSIS = YES; + CLANG_WARN_SUSPICIOUS_MOVE = YES; + CODE_SIGN_IDENTITY = "-"; + COPY_PHASE_STRIP = NO; + DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; + ENABLE_NS_ASSERTIONS = NO; + ENABLE_STRICT_OBJC_MSGSEND = YES; + GCC_C_LANGUAGE_STANDARD = gnu11; + GCC_NO_COMMON_BLOCKS = YES; + GCC_WARN_64_TO_32_BIT_CONVERSION = YES; + GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; + GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; + GCC_WARN_UNUSED_FUNCTION = YES; + GCC_WARN_UNUSED_VARIABLE = YES; + MACOSX_DEPLOYMENT_TARGET = 10.15; + MTL_ENABLE_DEBUG_INFO = NO; + SDKROOT = macosx; + SWIFT_COMPILATION_MODE = wholemodule; + SWIFT_OPTIMIZATION_LEVEL = "-O"; + }; + name = Profile; + }; + 338D0CEA231458BD00FA5F75 /* Profile */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = 33E5194F232828860026EE4D /* AppInfo.xcconfig */; + buildSettings = { + ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; + CLANG_ENABLE_MODULES = YES; + CODE_SIGN_ENTITLEMENTS = Runner/DebugProfile.entitlements; + CODE_SIGN_IDENTITY = "-"; + CODE_SIGN_STYLE = Automatic; + COMBINE_HIDPI_IMAGES = YES; + INFOPLIST_FILE = Runner/Info.plist; + LD_RUNPATH_SEARCH_PATHS = ( + "$(inherited)", + "@executable_path/../Frameworks", + ); + MACOSX_DEPLOYMENT_TARGET = 10.15; + PRODUCT_BUNDLE_IDENTIFIER = io.flutter.plugins.firebase.appcheck.example; + PROVISIONING_PROFILE_SPECIFIER = ""; + SWIFT_VERSION = 5.0; + }; + name = Profile; + }; + 338D0CEB231458BD00FA5F75 /* Profile */ = { + isa = XCBuildConfiguration; + buildSettings = { + CODE_SIGN_STYLE = Manual; + PRODUCT_NAME = "$(TARGET_NAME)"; + }; + name = Profile; + }; + 33CC10F92044A3C60003C045 /* Debug */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = 9740EEB21CF90195004384FC /* Debug.xcconfig */; + buildSettings = { + ALWAYS_SEARCH_USER_PATHS = NO; + CLANG_ANALYZER_NONNULL = YES; + CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE; + CLANG_CXX_LANGUAGE_STANDARD = "gnu++14"; + CLANG_CXX_LIBRARY = "libc++"; + CLANG_ENABLE_MODULES = YES; + CLANG_ENABLE_OBJC_ARC = YES; + CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES; + CLANG_WARN_BOOL_CONVERSION = YES; + CLANG_WARN_CONSTANT_CONVERSION = YES; + CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES; + CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; + CLANG_WARN_DOCUMENTATION_COMMENTS = YES; + CLANG_WARN_EMPTY_BODY = YES; + CLANG_WARN_ENUM_CONVERSION = YES; + CLANG_WARN_INFINITE_RECURSION = YES; + CLANG_WARN_INT_CONVERSION = YES; + CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES; + CLANG_WARN_OBJC_LITERAL_CONVERSION = YES; + CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; + CLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = YES; + CLANG_WARN_RANGE_LOOP_ANALYSIS = YES; + CLANG_WARN_SUSPICIOUS_MOVE = YES; + CODE_SIGN_IDENTITY = "-"; + COPY_PHASE_STRIP = NO; + DEBUG_INFORMATION_FORMAT = dwarf; + ENABLE_STRICT_OBJC_MSGSEND = YES; + ENABLE_TESTABILITY = YES; + GCC_C_LANGUAGE_STANDARD = gnu11; + GCC_DYNAMIC_NO_PIC = NO; + GCC_NO_COMMON_BLOCKS = YES; + GCC_OPTIMIZATION_LEVEL = 0; + GCC_PREPROCESSOR_DEFINITIONS = ( + "DEBUG=1", + "$(inherited)", + ); + GCC_WARN_64_TO_32_BIT_CONVERSION = YES; + GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; + GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; + GCC_WARN_UNUSED_FUNCTION = YES; + GCC_WARN_UNUSED_VARIABLE = YES; + MACOSX_DEPLOYMENT_TARGET = 10.15; + MTL_ENABLE_DEBUG_INFO = YES; + ONLY_ACTIVE_ARCH = YES; + SDKROOT = macosx; + SWIFT_ACTIVE_COMPILATION_CONDITIONS = DEBUG; + SWIFT_OPTIMIZATION_LEVEL = "-Onone"; + }; + name = Debug; + }; + 33CC10FA2044A3C60003C045 /* Release */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = 7AFA3C8E1D35360C0083082E /* Release.xcconfig */; + buildSettings = { + ALWAYS_SEARCH_USER_PATHS = NO; + CLANG_ANALYZER_NONNULL = YES; + CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE; + CLANG_CXX_LANGUAGE_STANDARD = "gnu++14"; + CLANG_CXX_LIBRARY = "libc++"; + CLANG_ENABLE_MODULES = YES; + CLANG_ENABLE_OBJC_ARC = YES; + CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES; + CLANG_WARN_BOOL_CONVERSION = YES; + CLANG_WARN_CONSTANT_CONVERSION = YES; + CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES; + CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; + CLANG_WARN_DOCUMENTATION_COMMENTS = YES; + CLANG_WARN_EMPTY_BODY = YES; + CLANG_WARN_ENUM_CONVERSION = YES; + CLANG_WARN_INFINITE_RECURSION = YES; + CLANG_WARN_INT_CONVERSION = YES; + CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES; + CLANG_WARN_OBJC_LITERAL_CONVERSION = YES; + CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; + CLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = YES; + CLANG_WARN_RANGE_LOOP_ANALYSIS = YES; + CLANG_WARN_SUSPICIOUS_MOVE = YES; + CODE_SIGN_IDENTITY = "-"; + COPY_PHASE_STRIP = NO; + DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; + ENABLE_NS_ASSERTIONS = NO; + ENABLE_STRICT_OBJC_MSGSEND = YES; + GCC_C_LANGUAGE_STANDARD = gnu11; + GCC_NO_COMMON_BLOCKS = YES; + GCC_WARN_64_TO_32_BIT_CONVERSION = YES; + GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; + GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; + GCC_WARN_UNUSED_FUNCTION = YES; + GCC_WARN_UNUSED_VARIABLE = YES; + MACOSX_DEPLOYMENT_TARGET = 10.15; + MTL_ENABLE_DEBUG_INFO = NO; + SDKROOT = macosx; + SWIFT_COMPILATION_MODE = wholemodule; + SWIFT_OPTIMIZATION_LEVEL = "-O"; + }; + name = Release; + }; + 33CC10FC2044A3C60003C045 /* Debug */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = 33E5194F232828860026EE4D /* AppInfo.xcconfig */; + buildSettings = { + ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; + CLANG_ENABLE_MODULES = YES; + CODE_SIGN_ENTITLEMENTS = Runner/DebugProfile.entitlements; + CODE_SIGN_IDENTITY = "-"; + CODE_SIGN_STYLE = Automatic; + COMBINE_HIDPI_IMAGES = YES; + INFOPLIST_FILE = Runner/Info.plist; + LD_RUNPATH_SEARCH_PATHS = ( + "$(inherited)", + "@executable_path/../Frameworks", + ); + MACOSX_DEPLOYMENT_TARGET = 10.15; + PRODUCT_BUNDLE_IDENTIFIER = io.flutter.plugins.firebase.appcheck.example; + PROVISIONING_PROFILE_SPECIFIER = ""; + SWIFT_OPTIMIZATION_LEVEL = "-Onone"; + SWIFT_VERSION = 5.0; + }; + name = Debug; + }; + 33CC10FD2044A3C60003C045 /* Release */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = 33E5194F232828860026EE4D /* AppInfo.xcconfig */; + buildSettings = { + ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; + CLANG_ENABLE_MODULES = YES; + CODE_SIGN_ENTITLEMENTS = Runner/Release.entitlements; + CODE_SIGN_IDENTITY = "-"; + CODE_SIGN_STYLE = Automatic; + COMBINE_HIDPI_IMAGES = YES; + INFOPLIST_FILE = Runner/Info.plist; + LD_RUNPATH_SEARCH_PATHS = ( + "$(inherited)", + "@executable_path/../Frameworks", + ); + MACOSX_DEPLOYMENT_TARGET = 10.15; + PRODUCT_BUNDLE_IDENTIFIER = io.flutter.plugins.firebase.appcheck.example; + PROVISIONING_PROFILE_SPECIFIER = ""; + SWIFT_VERSION = 5.0; + }; + name = Release; + }; + 33CC111C2044C6BA0003C045 /* Debug */ = { + isa = XCBuildConfiguration; + buildSettings = { + CODE_SIGN_STYLE = Manual; + PRODUCT_NAME = "$(TARGET_NAME)"; + }; + name = Debug; + }; + 33CC111D2044C6BA0003C045 /* Release */ = { + isa = XCBuildConfiguration; + buildSettings = { + CODE_SIGN_STYLE = Automatic; + PRODUCT_NAME = "$(TARGET_NAME)"; + }; + name = Release; + }; +/* End XCBuildConfiguration section */ + +/* Begin XCConfigurationList section */ + 33CC10E82044A3C60003C045 /* Build configuration list for PBXProject "Runner" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + 33CC10F92044A3C60003C045 /* Debug */, + 33CC10FA2044A3C60003C045 /* Release */, + 338D0CE9231458BD00FA5F75 /* Profile */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; + 33CC10FB2044A3C60003C045 /* Build configuration list for PBXNativeTarget "Runner" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + 33CC10FC2044A3C60003C045 /* Debug */, + 33CC10FD2044A3C60003C045 /* Release */, + 338D0CEA231458BD00FA5F75 /* Profile */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; + 33CC111B2044C6BA0003C045 /* Build configuration list for PBXAggregateTarget "Flutter Assemble" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + 33CC111C2044C6BA0003C045 /* Debug */, + 33CC111D2044C6BA0003C045 /* Release */, + 338D0CEB231458BD00FA5F75 /* Profile */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; +/* End XCConfigurationList section */ + +/* Begin XCLocalSwiftPackageReference section */ + 781AD8BC2B33823900A9FFBB /* XCLocalSwiftPackageReference "FlutterGeneratedPluginSwiftPackage" */ = { + isa = XCLocalSwiftPackageReference; + relativePath = Flutter/ephemeral/Packages/FlutterGeneratedPluginSwiftPackage; + }; +/* End XCLocalSwiftPackageReference section */ + +/* Begin XCSwiftPackageProductDependency section */ + 78A3181F2AECB46A00862997 /* FlutterGeneratedPluginSwiftPackage */ = { + isa = XCSwiftPackageProductDependency; + productName = FlutterGeneratedPluginSwiftPackage; + }; +/* End XCSwiftPackageProductDependency section */ + }; + rootObject = 33CC10E52044A3C60003C045 /* Project object */; +} diff --git a/mih_ui/android/build/macos/SourcePackages/firebase_app_check-0.4.5/example/macos/Runner.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist b/mih_ui/android/build/macos/SourcePackages/firebase_app_check-0.4.5/example/macos/Runner.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist new file mode 100644 index 00000000..18d98100 --- /dev/null +++ b/mih_ui/android/build/macos/SourcePackages/firebase_app_check-0.4.5/example/macos/Runner.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist @@ -0,0 +1,8 @@ + + + + + IDEDidComputeMac32BitWarning + + + diff --git a/mih_ui/android/build/macos/SourcePackages/firebase_app_check-0.4.5/example/macos/Runner.xcodeproj/xcshareddata/xcschemes/Runner.xcscheme b/mih_ui/android/build/macos/SourcePackages/firebase_app_check-0.4.5/example/macos/Runner.xcodeproj/xcshareddata/xcschemes/Runner.xcscheme new file mode 100644 index 00000000..92a5c6f9 --- /dev/null +++ b/mih_ui/android/build/macos/SourcePackages/firebase_app_check-0.4.5/example/macos/Runner.xcodeproj/xcshareddata/xcschemes/Runner.xcscheme @@ -0,0 +1,105 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/mih_ui/android/build/macos/SourcePackages/firebase_app_check-0.4.5/example/macos/Runner.xcworkspace/contents.xcworkspacedata b/mih_ui/android/build/macos/SourcePackages/firebase_app_check-0.4.5/example/macos/Runner.xcworkspace/contents.xcworkspacedata new file mode 100644 index 00000000..21a3cc14 --- /dev/null +++ b/mih_ui/android/build/macos/SourcePackages/firebase_app_check-0.4.5/example/macos/Runner.xcworkspace/contents.xcworkspacedata @@ -0,0 +1,10 @@ + + + + + + + diff --git a/mih_ui/android/build/macos/SourcePackages/firebase_app_check-0.4.5/example/macos/Runner.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist b/mih_ui/android/build/macos/SourcePackages/firebase_app_check-0.4.5/example/macos/Runner.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist new file mode 100644 index 00000000..18d98100 --- /dev/null +++ b/mih_ui/android/build/macos/SourcePackages/firebase_app_check-0.4.5/example/macos/Runner.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist @@ -0,0 +1,8 @@ + + + + + IDEDidComputeMac32BitWarning + + + diff --git a/mih_ui/android/build/macos/SourcePackages/firebase_app_check-0.4.5/example/macos/Runner/AppDelegate.swift b/mih_ui/android/build/macos/SourcePackages/firebase_app_check-0.4.5/example/macos/Runner/AppDelegate.swift new file mode 100644 index 00000000..b3c17614 --- /dev/null +++ b/mih_ui/android/build/macos/SourcePackages/firebase_app_check-0.4.5/example/macos/Runner/AppDelegate.swift @@ -0,0 +1,13 @@ +import Cocoa +import FlutterMacOS + +@main +class AppDelegate: FlutterAppDelegate { + override func applicationShouldTerminateAfterLastWindowClosed(_ sender: NSApplication) -> Bool { + return true + } + + override func applicationSupportsSecureRestorableState(_ app: NSApplication) -> Bool { + return true + } +} diff --git a/mih_ui/android/build/macos/SourcePackages/firebase_app_check-0.4.5/example/macos/Runner/Assets.xcassets/AppIcon.appiconset/Contents.json b/mih_ui/android/build/macos/SourcePackages/firebase_app_check-0.4.5/example/macos/Runner/Assets.xcassets/AppIcon.appiconset/Contents.json new file mode 100644 index 00000000..a2ec33f1 --- /dev/null +++ b/mih_ui/android/build/macos/SourcePackages/firebase_app_check-0.4.5/example/macos/Runner/Assets.xcassets/AppIcon.appiconset/Contents.json @@ -0,0 +1,68 @@ +{ + "images" : [ + { + "size" : "16x16", + "idiom" : "mac", + "filename" : "app_icon_16.png", + "scale" : "1x" + }, + { + "size" : "16x16", + "idiom" : "mac", + "filename" : "app_icon_32.png", + "scale" : "2x" + }, + { + "size" : "32x32", + "idiom" : "mac", + "filename" : "app_icon_32.png", + "scale" : "1x" + }, + { + "size" : "32x32", + "idiom" : "mac", + "filename" : "app_icon_64.png", + "scale" : "2x" + }, + { + "size" : "128x128", + "idiom" : "mac", + "filename" : "app_icon_128.png", + "scale" : "1x" + }, + { + "size" : "128x128", + "idiom" : "mac", + "filename" : "app_icon_256.png", + "scale" : "2x" + }, + { + "size" : "256x256", + "idiom" : "mac", + "filename" : "app_icon_256.png", + "scale" : "1x" + }, + { + "size" : "256x256", + "idiom" : "mac", + "filename" : "app_icon_512.png", + "scale" : "2x" + }, + { + "size" : "512x512", + "idiom" : "mac", + "filename" : "app_icon_512.png", + "scale" : "1x" + }, + { + "size" : "512x512", + "idiom" : "mac", + "filename" : "app_icon_1024.png", + "scale" : "2x" + } + ], + "info" : { + "version" : 1, + "author" : "xcode" + } +} diff --git a/mih_ui/android/build/macos/SourcePackages/firebase_app_check-0.4.5/example/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_1024.png b/mih_ui/android/build/macos/SourcePackages/firebase_app_check-0.4.5/example/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_1024.png new file mode 100644 index 0000000000000000000000000000000000000000..3c4935a7ca84f0976aca34b7f2895d65fb94d1ea GIT binary patch literal 46993 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 literal 0 HcmV?d00001 diff --git a/mih_ui/android/build/macos/SourcePackages/firebase_app_check-0.4.5/example/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_128.png b/mih_ui/android/build/macos/SourcePackages/firebase_app_check-0.4.5/example/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_128.png new file mode 100644 index 0000000000000000000000000000000000000000..ed4cc16421680a50164ba74381b4b35ceaa0ccfc GIT binary patch literal 3276 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 N;OXk;vd$@?2>?>Ex^Vyi literal 0 HcmV?d00001 diff --git a/mih_ui/android/build/macos/SourcePackages/firebase_app_check-0.4.5/example/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_256.png b/mih_ui/android/build/macos/SourcePackages/firebase_app_check-0.4.5/example/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_256.png new file mode 100644 index 0000000000000000000000000000000000000000..bcbf36df2f2aaaa0a63c7dabc94e600184229d0d GIT binary patch literal 5933 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 f$KZHO*s&vt|9^w-6P?|#0pRK8NSwWJ?9znhg z3{`3j3=J&|48MRv4KElNN(~qoUL`OvSj}Ky5HFasE6@fg!ItFh?!xdN1Q+aGJ{c&& zS>O>_%)r1c48n{Iv*t(u1=&kHeO=ifbFy+6aSK)V_AxLppYn8Z42d|rc6w}vOsL55 z`t&mC&y2@JTEyg!eDiFX^k#CC!jq%>erB=yHqUP0XcDOTw6ko}L zX;EmMrq(fKk*eygEuA616;0)>@A{TK|55PV@70 z$OfzS*(VJxQev3J?yY?O=ul(v`fp}?u9z`JK3ugibK>)DyCwImZOF4d{xK%%Ks1*} zv$oa)9anR%lXIBUqYnhLmT>VOzHfNP?ZwJNZ!5$s9M08RynIvaXw>@G^T9@r9^KH1 zVy??F&uuk)bH9Y4pQY!hP58i_H6 znl-NcuCpLV6ZWU;4C zu@9exF&OZi`Bovq_m%T+WhU2kvkz@^_LpycBvqm3bMpLw8X-Or5sL>0AKE1$(k_L=_Zc=CUq#=x1-QZf)G7nHu@fmsQ1eN_N3+nTEz`4HI4Z6uVlE zJH+X&det8JU?tO?upcM4Z=cV!JV;yF>FfL5Q$M|W_2Z!P`S=}Wzp|_1^#d%e?_H`> zV@%vA$+bFVqhw9`U;TfP|5|PD{||OiYdor8P*i??|NJcb%kzT_73*7WE?Ua5hAnR2 z=7WE=PhTlJ#ZeRznjTUb;`E(wkMZrj4e|Hilz-mK>9cZHQY**5TUPw~u}k;u73KI}xAx!0m-)GVia|x^d3p~s_9gh83jA&Ra<8rM%`>U3x69t&NzbwWY}7Ar?)FK#IZ0z|d0H0EkRO w3{9;}4Xg|ebq&m|3=9_N6z8I7$jwj5OsmAL;bP(Gi$Dzwp00i_>zopr02+f8CIA2c literal 0 HcmV?d00001 diff --git a/mih_ui/android/build/macos/SourcePackages/firebase_app_check-0.4.5/example/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_512.png b/mih_ui/android/build/macos/SourcePackages/firebase_app_check-0.4.5/example/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_512.png new file mode 100644 index 0000000000000000000000000000000000000000..e71a726136a47ed24125c7efc79d68a4a01961b4 GIT binary patch literal 14800 zcmZ{Lc|26@`~R6Crm_qwyCLMMh!)vm)F@HWt|+6V6lE=CaHfcnn4;2x(VilEl9-V} zsce-cGK|WaF}4{T=lt&J`Fy_L-|vs#>v^7+XU=`!*L|PszSj43o%o$Dj`9mM7C;ar z@3hrnHw59q|KcHn4EQr~{_70*BYk4yj*SqM&s>NcnFoIBdT-sm1A@YrK@dF#f+SPu z{Sb8441xx|AjtYQ1gQq5z1g(^49Fba=I8)nl7BMGpQeB(^8>dY41u79Dw6+j(A_jO z@K83?X~$;S-ud$gYZfZg5|bdvlI`TMaqs!>e}3%9HXev<6;dZZT8Yx`&;pKnN*iCJ z&x_ycWo9{*O}Gc$JHU`%s*$C%@v73hd+Mf%%9ph_Y1juXamcTAHd9tkwoua7yBu?V zgROzw>LbxAw3^;bZU~ZGnnHW?=7r9ZAK#wxT;0O<*z~_>^uV+VCU9B@)|r z*z^v>$!oH7%WZYrwf)zjGU|(8I%9PoktcsH8`z^%$48u z(O_}1U25s@Q*9{-3O!+t?w*QHo;~P99;6-KTGO{Cb#ADDYWF!eATsx{xh-!YMBiuE z%bJc7j^^B$Sa|27XRxg(XTaxWoFI}VFfV>0py8mMM;b^vH}49j;kwCA+Lw=q8lptk z?Pe`{wHI39A&xYkltf5*y%;-DF>5v`-lm0vydYtmqo0sClh5ueHCLJ+6$0y67Z zO-_LCT|JXi3tN7fB-!0_Kn#I+=tyUj87uR5*0>|SZ zy3x2;aql87`{aPZ@UbBwY0;Z-a*lYL90YApOAMKur7YgOiqA~Cne6%b&{V-t>Am2c z{eyEuKl!GsA*jF2H_gvX?bP~v46%3ax$r~B$HnZQ;UiCmRl`ROK8v>;Zs~upH9}qu1ZA3kn-AY2k2@CaH=Qh7K6`nU z3ib(Bk%H*^_omL6N4_G5NpY20UXGi}a$!}#lf<&J4~nhRwRM5cCB3Zvv#6+N1$g@W zj9?qmQ`zz-G9HTpoNl~bCOaEQqlTVYi7G0WmB5E34;f{SGcLvFpOb`+Zm)C(wjqLA z2;+nmB6~QDXbxZGWKLt38I%X$Q!;h zup9S~byxKv=$x|^YEV;l0l67jH~E8BU45ft_7xomac-48oq4PZpSNJbw<7DTM4mmz z!$)z#04cy%b8w@cOvjmb36o;gwYIOLwy+{I#3dJj#W4QdOWwJQ2#20AL49`hSFUa7 zFNAN3OD==G3_kbr1d96>l`_cI`<=thKNh5>hgg7FV>5TfC6d#u)9BNXi@p1K*;2Is zz+x;l4GbSt#*%>1iq}jGIebXYJY5;PGG0y(^{>SSuZY89aL`sDghOM&&pyP6ABJ#w zYwK~4^1eUQD)4!GL>`zrWeHV z-W!6JZbW*Ngo;Edhp_cOysYr!uhKS}vIg_UC}x z=jXxQfV@4B3`5 z!u#byBVXV5GtrSx_8bnT@iKv=Uc6n)Zpa`<9N>+!J~Loxptl5$Z`!u<3a)-+P)say z#=jc7^mJzPMI2;yMhCmN7YN78E7-^S(t8E}FklC;z|4PL{bO|JieM#p1mBjwyZMEm zkX^A1RXPGeS2YqtPMX~~t^$~oeFfWAU#jVLi%Z@l2hle^3|e(q?(uS=BVauF?VF{j z(owKLJuze;_@5p1OtRyrT`EFXf)NfMYb-)E8RVVdr<@}M>4R&~P=;B`c1L%o|8YfB z-a(LB-i8jc5!&B5cowyI2~M^YID&@Xt(D9v{|DB z959W z*vEA77fh3*w*UJ`4Y(bxsoEy6hm7_Wc5gT0^cvso%Ow>9<&@9Q>mxb6-^pv)5yc>n zQ~^!qY(lPQ1EDGkr%_*y*D8T^YbCa52^MVqYpTLhgJ;N5PfCQ{SXk|plD#Sm+g4c- zFeL2Dih35W4{_qb75U`4Rb#S0FEo%F85dOhXSX0huPOxdAid{&p6P;+9}I)XU7^=3RZu9M(g0dLyz_7$8K{`AddBLOfU&B_QNHtmsnNXq`hy~% zvJ{vtz~Yt9X|o}5vXX)9ZCHaRq8iAb zUDj8%(MpzJN39LferYKvIc!)z^5T-eW@j3h9a6d%WZ!%@2^@4+6%Z9W1GHZbOj|sb z0cU$}*~G$fYvDC|XulSC_;m}?KC2jg5pxES$Bt!hA|@EX*2+O!UEb5sn_^d>z;>;r~ zmO3BivdXboPY*}amsO&`xk|e)S*u=`o67MC(1WTB;OwG+ua4UV7T5Wvy%?U{Pa5cO zMoLG>#@chO{Oc72XPyX8f3jC7P`$j4$)0wc(b50COaDP3_Cm}aPAglUa7kRXAqmo5 z0KDD7G>Gmnpons40WJNYn+pxko92GXy@PvSErKE-Ou3)3UiRr7!L4+0%+5}sD{bf)uj^ounQ-Yn2%%JoZ%FjUv%yjS?Ks4u_88Jh%tNliYW~817IV@fqd1T zi(?;Fv-s3rQEn=9G*E-QzSl%YS|^fe*yn}Aqh!&P<5%#oB?*{wZMa5$PYa*A{VA8! zbOfS1W!W}cTo%g~iP$>WhE_x7#O4?h$jq=>{M77>bTAK_ z6uU0tl6HARboGi}=4krr6WP`9`aAt&P5ON1v(+H{T?jZuJ}B{L-=z3VX)}mZwzrqH zpf?T!k&$?{&{0_p>b`kdJbSb(p~tFcuG4zh6}hfl@ues6CfJu<-P+!>FlYMlD_3!E z9$6VE==tlxNYe(s;@8@+4c4jQ$R2g8t0QwE>Et|)5)@kJj6^yaqFYY?0LEM2C!+7+ z+FN|UxR1GCy1KA`{T_%24U+Vserchr5h`;U7TZPr@43x#MMN{@vV?KSII}R@5k`7cVK}E;c)$f~_{ZLDOoL|-01p~oafxi4F zG$?Wha&a*rTnz-nTI-bAJ*SLb!5(L!#iRdvLEyo>7D_=H78-qZrm=6{hkUR{tR{H! z`ZTOV$Oi6^qX5=_{f}V9h}WJAO%h9)kEUF#*-JyYDbOGZ>Nfs%7L}4p zopIul&&Bbn!C9o83ypC6W4F$X=_|pex$V4!Whm#48Wfm3*oAW0Gc&#&b+oq<8>aZR z2BLpouQQwyf$aHpQUK3pMRj(mS^^t#s$IC3{j*m9&l7sQt@RU{o_}N-xI_lh`rND^ zX~-8$o(;p^wf3_5-WZ^qgW`e8T@37{`J)e2KJdSSCUpX6KZu0Ga&U*+u3*PDAs1uK zpl)40+fROA@Vo#vK?^@Pq%w8DO9HdfmH+~vNinZ$5GRz?sD|k246NepqZd`>81P^P z#x#3kUS-}x4k%&~iEUrsb&-X#_;;?y9oCP4crMkC`=q58#NxQ| z*NXNA;GR4X=GiGXwab5=&M3j04fQw%2UxM`S(aE)_PlgJttBX96$$lY@Q%0xV^IbcHqzw^Uk&E=vFB;EQ@kzVIeM8lDIW_Q_ zrfy)l6s2QBApF;J2xTD_@wuNMlwDfsdfMyzRq)<>qG{M)Yt}9F1{1HaI_X7=F=7>& zYB54VaKlxu0lIgS;Ac&25Aw(tcf@K~(cvPi8(OChzhlYp6}#<_MVhU95sD&)n0FtL zmxm4w$~s(S9jmHOgyovpG!x4uLfJsMsJn^QMraKAa1Ix?{zkV!a7{f%-!u2{NqZ&) zo+^XB`eFQ4 zk-(;_>T#pTKyvW${yL|XXbcv?CE2Tp<3(PjeXhu^Jrp6^Mj}lg_)jamK{g;C+q^Da ztb!gV!q5)B7G1%lVanA2b>Xs?%hzCgJ{Hc!ldr9dnz7k^xG#4pDpr|0ZmxxiUVl}j zbD_rg3yAFQ>nnc)0>71D==715jRj4XsRb2#_lJoSOwky&c4957V-|m)@>b^Nak1!8 z@DsIOS8>Oe^T>tgB)WX3Y^I^65Uae+2M;$RxX_C)Aoo0dltvoRRIVQkpnegWj;D#G z+TwFIRUN%bZW3(K{8yN8!(1i0O!X3YN?Zo08L5D~)_tWQA8&|CvuQb8Od?p_x=GMF z-B@v9iNLYS1lUsbb`!%f5+1ev8RFPk7xyx5*G;ybRw(PW*yEZ$unu2`wpH)7b@ZXEz4Jr{?KZKYl!+3^)Q z)~^g?KlPGtT!{yQU&(Z&^rVjPu>ueeZN86AnhRwc)m|;5NvM&W3xD%n`+Hjg5$e8M zKh1Ju82L~&^ z-IQ5bYhsjqJfr38iwi~8<{oeREh|3l)*Enj4&Q$+mM$15YqwXeufK9P^(O=pj=F-1 zD+&REgwY~!W#ZPccSEi(*jiKJ5)Q|zX;hP}S2T9j_);epH9JQs{n>RG}{Nak)vIbfa zFQm?H;D+tzrBN2)6{?Mo%fzN6;6d_h0Qyn61)+XT63=!T*WQyRUoB_x0_)Ir`$FtS zak07C(mOaWN5m%bk?F9X&@mEVKN%{R6obt(9qw&p>w&p;R*l2th9$D^*`pC}NmB+v z>bk;OJ(C8p$G;jNvRsBbt=a!!tKnjJ`9*yQFgjEN1HcC<&>u9aStT3>Oq=MOQV!#WOZ6{cv$YVmlJdovPRV}<=IZUPeBVh5DC z91-?kimq3JUr;UMQ@0?h52gupvG=~(5AVdP(2(%*sL8!#K1-L$9B7MrWGdt(h&whR@vz~0oEHF8u3U1Q zdGdaIytJj4x@eF*E+^zgi{nPCA8tkjN}UoR8WhDzM3-zLqx0z?2tTdDKyENM={fp8VC@3Dt`AiK$;K#H$K2{08mrHG%jgEOLX3MCsG>afZm_0mLPS4jmYUJp~Dm! z5AUe_vEaOAT3zWdwl#cLvqwd1^lwW?gt7(92wEsOE6c#<0}{szFV4(uO70?3>=((! zQr}1{J?Wx2ZmjxYL_8OB*m&mimfojzYn~PiJ2g8R&ZRx-i^yF#sdhEWXAUIZ@J?T$ zs3PgT2<&Ki>Bob_n(@S>kUIvE+nY~ti9~6j;O9VAG#{oZ!DZCW)}i6iA!Tgsyz+hC z1VVyvbQ_nwgdZSEP=U4d#U`2*`e~d4y8uM4Bcmm%!jidaee#4WqN!ZnlBmbYpuaO! z!rU3`Kl2 z0O7PD&fQ|_b)Ub!g9^s;C2e>1i*2&?1$6yEn?~Y zI)-WIN8N(5s9;grW+J@K@I%g#?G&hzmlgV=L}ZA{f>3YCMx^P{u@c5Z;U1qmdk#)L zvX6z1!sL>+@vxO8qVn#k3YxYi?8ggV){?Rn@j$+Fd4-QkuH1@)j#3-=f82GZ!nl~{ zzZ(?kO`ANttVeHSo%xmH!NmNZECh*{s!-8S>ALoe5xOPs>|P5BbUmP@rlV8`d(c=7 zypcpLaI*FM^;GM%@q`GAb8kO`$oE|R48yn)?p(c1t>5;Wwn5r6ck&uw4}TnT80jI`IS~J%q8CpaVgIze<8IykSpVBg8~E! zW_tGqB;GO47r_er05y+Kwrcn{VLxL*1;HMv@*sd}MB6DH4zaP~u4Y;>@Nw7?F8S?c zfVIY(^ntnGgWlD|idzGz$Y+Oh(Ra=&VIf4!K2W*a)(%5%78s}8qxOknAGtDAq+HMO zM+Nu;0OgQRn36 zA@~a8`uVQ~v9?d!BxnsVaB-z-djypO44BjQAmg7&eVoaew|~)wH$SgefJ2$7_RiY+ z_7ACGoFM6Lhvho+eUG@pU&0X(Uy(*j;9pr?ET?FHTXadlfXC|MReZoU5>AG`mTM<% zc~*I@E*u0|hwVTdFA~4^b2VT7_~}~tCueNY{de3og=ASFQ`)0dhC2~Ne<}}Rc?ptA zi}+bQE%N9o*hpSUMH)9xt%Zlz&^p&5=cW}{m#f85iVX64^{!(vhClT<I)+c)RuiyrZqIw4v`z%YK&;_Fh4_+0B?qAGxMfAM`LzG_bjD>ib4;KGT4_1I>sxvL&&qp40ajgQOqIE^9=Az4w#ymo)bW-Vg{T!n=l&|nR_ zw+wcH|FxUH63)~{M;goHepmD{Fe?W9sO|eJP9L$G<{e_7FxxuXQ+)(Z^@;X8I1=%k zTK$gbHA1^4W<`q~ubQ0M_C^CA5#Z&*nGc(T?4Y_2jLu&FJDQYpCSiRny->$+nC9Jl z?avTW`ZXYT51%SrEq!}dXNM&!pM6nmL^lce=%S7{_TS)ckN8;{p*LT~LMgmlE~dpL zEBQy-jDj%cSK6N3)|CCR0LQ$N6iDM~+-1Oz|LAdkip(VZcO`gqCuJ+(Mm{m6@P%_; zBtF|MMVMP;E`5NJ{&@4j^JE5j&}(Jq{lCGL(P^#uqvbD`2)FVyfNgy|pvT!XY;02Z zZWbgGsvi6#!*$Zxwd{Xk6_M{+^yV_K@%_SAW(x)Lg|*AuG-%g2#GQYk8F?W&8|2dU z;00ppzrQnnYXnT`(S%_qF2#QNz&@Y$zcq+O8p>Gto2&4z8(^#cY?DuQwBQP4Fe?qUK_-yh4xT{8O@gb`uh` z>Q%jrgPAnANn4_)->n;w{Mei#J)F+`12&+-MLKSRzF6bL3;4O~oy~v7 zL0K-=m?>>(^qDCgvFRLBI@`04EGdTxe5}xBg#7#Wb!aUED;?5BLDEvZ@tai4*Rh8& z4V)cOr}DJ0&(FjWH%50Y+&=WtB42^eEVsmaHG)Il#j265oK&Bot(+-IIn`6InmuE# z;)qXs+X{fSb8^rYb#46X5?KCzH9X0>ppBQi(aKS--;4yA%0N|D<#8RZlOS(8n26=u zv~y;KC>`ypW=aqj`&x9 z0Zm>NKp}hPJu1+QDo(_U(Gt0SZ`IJWnp%QK`pye>Bm!w{sG>;VU^2 z4lZhV1}tCE8(?zu#j99|l3-qRBcz3bG+DlyxPGB$^6B^ssc_qYQ6lG0q~EAI?1$?( zahfn%etVvuKwB7R=>JDQluP97nLDM6*5;b0Ox#b{4nIgZA*+?IvyDN{K9WGnlA=Ju z+)6hjr}{;GxQQIDr3*lf32lRp{nHP8uiz^Fa|K+dUc@wD4Kf5RPxVkUZFCdtZH{+=c$AC)G2T-Qn@BPbr zZigIhKhKrVYy`!Mlc#HVr=CURVrhUjExhI~gZ%a=WM9BwvnN?=z!_ZQ$(sP?X;2Jy zyI$}H^^SvH2tf6+Uk$pJww@ngzPp856-l9g6WtW+%Yf>N^A}->#1W2n=WJ%sZ0<){Z&#% z^Kzl$>Km)sIxKLFjtc;}bZeoaZSpL4>`jCmAeRM-NP9sQ&-mi@p0j7Iq>1n&z@8?M z%dM7K^SgE5z)@i5w#rLE4+8%|^J`a6wYr`3BlvdD>7xW?Dd>`0HC0o{w7r_ot~h*G z2gI7Y!AUZ6YN+z$=GNzns@Tu7BxgAb3MBha30-ZG7a%rckU5}y{df`lj@^+34kr5> z988PPbWYdHye~=?>uZ4N&MN@4RBLk_?9W*b$}jqt0j%>yO9QOV(*!#cX~=wRdVL&S zhPQ{${0CGU-rfdS&b@u|IK{hV2Z=(*B2d0?&jwWfT=?Gk`4T9TfMQ)CfNgpLQa#>Q z%6A$w#QNc&qOtrHAbqY>J782@!X{9Y@N(HMSr;PP^;0DlJNxfC`oMB%Ocg zC*hnEsF|p*=CVe^dT)>BTL0yff)uo!U<+_2o3p)CE8quU1JI(=6)9$KxVdJYD*S*~ zzNeSkzFIQyqK}578+qq6X8rrRdgX z4k&R=AGex~a)MoB0pK&|yA<(*J#P&tR?ImBVD)ZTA4VH5L5DxXe<-*s`Aox%H1{-^Qa`kG_DGXD%QX-;l1#&#IVQP6>kir ztO@~ZvJDPnTvKt>fc*(j$W^)JhWk{4kWwbpFIXzuPt2V%M4H19-i5Gn*6(D`4_c1+ zYoI1@yT^~9JF~t>2eVM6p=GP3b*;daJpQOhAMNO|LKnwE2B5n8y9mf;q=)-L_FfD0 z<}YIRBO{k)6AHAn8iG>pYT+3bJ7jvP9}LSMR1nZW$5HR%PD1rFz z{4XE^Vmi-QX#?|Farz=CYS_8!%$E#G%4j2+;Avz|9QBj|YIExYk?y-1(j}0h{$$MnC_*F0U2*ExSi1ZCb_S9aV zTgyGP0Cl=m`emxM4Qih1E{`J{4oJo8K}WnH`@js^pR7Z-vTBK5F5JIFCDN}7pU^_nV>NTz@2$|Kcc5o+L&^Db_AQ);F?)X5BF*QJRCdLI-a%gW z++DZM)x=6*fNrSaUA&hf&CUqC$F*y^CJC-MAm9gd*5#^mh;-dR1?a&<3-hp3@}XN! z&8dcwo6=MQua%0KFvYbi>O{j)RrbDQo3S*y!oEJ~2=}^-v%zn~@hnmKGOvX6JLr;>DNC3)={8OM9n5Zs*(DlS*|%JTniJX2Uav7sOFT0vdIiUOC5pEtY?EF)@Fh9pCfD%N zXskZ8b^ldI{HHj{-l?iWo@IW6Nr`hAS>f8S*8FGc*gmcK^f2JS+>I&r#Gcewy=-JM zv0*w<5qBa6UQB@`esOG*4*t@7c9AkrTpM`v=eY?cO#z17H9B%Xy4m!}LhW}*iZ27w1?HrevgB1SZ1q2X$mm@FK@Qt7o z!s~Lio^IRdwzyvQ80{5iYeTV@mAo=2o5>KepRH0d{*Szlg~n%w2)S5v2|K8}pj;c{ zoDRLvYJO1@?x-=mq+LVhD{l-1-Dw4`7M?3@+ z`fu7?1#9W++6Y46N=H0+bD|CJH~q*CdEBm8D##VS7`cXy4~+x=ZC17rJeBh zI~qW^&FU`+e!{AKO3(>z5Ghh14bUT$=4B>@DVm(cj* zSLA*j!?z!=SLuVvAPh_EFKx}JE8T8;Gx)LH^H136=#Jn3Bo*@?=S`5M{WJPY&~ODs z+^V57DhJ2kD^Z|&;H}eoN~sxS8~cN5u1eW{t&y{!ouH`%p4(yDZaqw$%dlm4A0f0| z8H}XZFDs?3QuqI^PEy}T;r!5+QpfKEt&V|D)Z*xoJ?XXZ+k!sU2X!rcTF4tg8vWPM zr-JE>iu9DZK`#R5gQO{nyGDALY!l@M&eZsc*j*H~l4lD)8S?R*nrdxn?ELUR4kxK? zH(t9IM~^mfPs9WxR>J{agadQg@N6%=tUQ8Bn++TC|Hbqn*q;WydeNIS@gt|3j!P`w zxCKoeKQ*WBlF%l4-apIhERKl(hXS1vVk$U?Wifi)&lL6vF@bmFXmQEe{=$iG)Zt*l z0df@_)B-P_^K2P7h=>OIQ6f0Q-E@|M?$Z5n^oN>2_sBCpN>q(LnqUoef{tm^5^L$# z{<SL zKmH78cHX`4cBKIY8u1x*lwrgP^fJ%E&&AmHrRY7^hH*=2OA9K?!+|~Aeia=nAA`5~ z#zI=h#I>@FXaGk(n)0uqelNY;A5I9obE~OjsuW!%^NxK*52CfBPWYuw--v<1v|B>h z8R=#$TS-Pt3?d@P+xqmYpL4oB8- z>w99}%xqy9W!A^ODfLq8iA@z}10u?o#nG#MXumSaybi(S{`wIM z&nE3n2gWWMu93EvtofWzvG2{v;$ysuw^8q?3n}y=pB1vUr5gi++PjiyBH3jzKBRny zSO~O++1ZLdy7v7VzS&$yY;^Z7*j_#BI`PK`dAzJa9G1{9ahPqPi1C}ti+L)WHii*= z+RZ^+at-tlatc4|akPa&9H;%gn9aS`X_kfb>n>#NTyUVM6m4NCIfLm(28>qaYv7}t zn`M;XcONtXoa3#u3{L-ytd_&g z2mO$8CnE?460w#eSm|smlnNwFHM;A&IxSKLzVkV7nNVqZ*A`)eI{Nbg6WxsarAFuc=FFf1z|%#eTvBgUhY}N zsCT>`_YO>14i^vFX0KXbARLItzT{TeD%N~=ovGtZ6j{>PxkuYlHNTe0!u>rgw#?td z{)n=QrGvgCDE6BUem$Rh(1y!$@(Bn!k3E0|>PQ(8O==zN`?yBhAqlWyq+c%+h?p^- zE&OtLind}^_=>pbhxOgOIC0q9{cLK6p6*eg_|S+p9$W~_u4wzx@N?$QmFg2S)m~^R znni$X{U*!lHgdS@fI;|Owl=9Gwi?dr0m#>yL<8<}bLW_Kpl| zSGesADX&n?qmHC`2GyIev^hi~ka}ISZ^Y4w-yUzyPxaJB0mm%ww^>if3<;P^U+L5=s+cifT-ct*;!dOOk#SOZNv@a^J|DrS3YtSn8EEAlabX1NV3RfHwZn_41Xa z4;$taa6JJR()-FQ<#0G~WlML<l5I+IPnqDpW(PP>hRcQ+S2zU?tbG^(y z1K_?1R){jF;OKGw0WYjnm>aPxnmr5?bP?^B-|Fv`TT4ecH3O`Z3`X_r;vgFn>t1tE zGE6W2PODPKUj+@a%3lB;lS?srE5lp(tZ;uvzrPb){f~n7v_^z! z=16!Vdm!Q0q#?jy0qY%#0d^J8D9o)A;Rj!~j%u>KPs-tB08{4s1ry9VS>gW~5o^L; z7vyjmfXDGRVFa@-mis2!a$GI@9kE*pe3y_C3-$iVGUTQzZE+%>vT0=r|2%xMDBC@>WlkGU4CjoWs@D(rZ zS1NB#e69fvI^O#5r$Hj;bhHPEE4)4q5*t5Gyjzyc{)o459VkEhJ$%hJUC&67k z7gdo`Q*Jm3R&?ueqBezPTa}OI9wqcc;FRTcfVXob^z|dNIB0hMkHV26$zA%YgR$sM zTKM61S}#wJ#u+0UDE3N+U*~Tz1nnV;W<8Akz&6M7-6mIF(Pq`wJ1A%loYL( zIS;&2((xbyL7zoyaY2Sa%BBYBxo6Aa*53`~e@|RA`MP+?iI4KZ+y4EU&I zS_|(#*&j2hxpELa3r0O7ok&5!ijRiRu9i-_3cdnydZU9Mp6Y);skv%!$~`i-J7e-g zj@EoHf+gtcrKf;tY5`4iLnWSHa)9brUM$XmEzG3T0BXTG_+0}p7uGLs^(uYh0j$;~ zT1&~S%_Y5VImvf1EkD7vP-@F%hRlBe{a@T!SW(4WEQd1!O47*Crf@u-TS==48iR5x z!*`Ul4AJI^vIVaN3u5UifXBX{fJ@z>4Q2#1?jpcdLocwymBgKrZ+^Cb@QuIxl58B* zD{t-W3;M;{MGHm_@&n(6A-AsD;JO#>J3o4ru{hy;k;8?=rkp0tadEEcHNECoTI(W31`El-CI0eWQ zWD4&2ehvACkLCjG`82T`L^cNNC4Oo2IH(T4e;C75IwkJ&`|ArqSKD}TX_-E*eeiU& ziUuAC)A?d>-;@9Jcmsdca>@q1`6vzo^3etEH%1Gco&gvC{;Y-qyJ$Re`#A!5Kd((5 z6sSiKnA20uPX0**Mu&6tNgTunUR1sodoNmDst1&wz8v7AG3=^huypTi`S7+GrO$D6 z)0Ja-y5r?QQ+&jVQBjitIZ`z2Ia}iXWf#=#>nU+ zL29$)Q>f#o<#4deo!Kuo@WX{G(`eLaf%(_Nc}E`q=BXHMS(Os{!g%(|&tTDIczE_# z5y%wjCp9S?&*8bS3imJi_9_COC)-_;6D9~8Om@?U2PGQpM^7LKG7Q~(AoSRgP#tZfVDF_zr;_U*!F9qsbVQ@un9O2>T4M5tr0B~~v_@a=w^8h510a#=L z;8+9zhV}57uajb+9DbZm1G`_NqOuKN`bQ2fw9A*v*Kdb_E-SA`?2 z)OFIY-%uD`JZUZg?D4lHtNegKgWr!1m%hOpu5`R+bZ2K#&)*R-7ElKYo0$0xYxIL8 zLg%u|4oZixz}ILB-@aS4=XOe)z!VL6@?dX{LW^YCPjKtyw44)xT=H;h(fmFr>R?p%r5*}W z7_bo0drVDRq9V9QL4_!dazughK6t}tVVvBq={T0+3(1zmb>f+|;{D%J?^xnZcqio5 z%H?@L+L-CIdO=x6QrALL9&PwvjrZi5NS)1e<*%V8ntw~S2PF}zH}B5f_DHyB=I3m@ z_;^TpN|sesCU}qxQ`~jIwF>#8wGvxg9kdMT$}us8BM&W>OzZ|ry2BB)+UY*_yH+&L zl_=Jy9BNzIZs}D~Yv_H%HPjVGNV=xT3xpIW!Np1F^G#9Y8X zl)c_V1(DhYu-v%H3-m&n%M_}}c{E5Wu+6*>R24gW_A7$(U=9D|H$r;;;@o zJ)c_CmVf9l*;4SyJ}E{+4)}^C>SIJ*_bul7OJ{v&0oO>jG(5xzYP0$I%*YH|Mwu#r zubNW5VZ9^X#Phw<;?=^G?Kg&C)^x1FVsKGZ*n+{C1znj~YHSP?6PS(k5e9qGvS4X* z=1kA_27(iV65a(i+Sicmd@Vzf^2@*Wed-`aYQ~em=-h%Pu`gHfz)&@$hpr<&mNO={ zl^kI0HP0wTbbh{d(>5a#;zT2_=ppef?;D4;2^}&kZjB^yl%LBJ;|> zkLc)JEg*5rpQ;_)w?PnKynWtv!@ z>}+am{@(g$KKM+e$ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/mih_ui/android/build/macos/SourcePackages/firebase_app_check-0.4.5/example/macos/Runner/Configs/AppInfo.xcconfig b/mih_ui/android/build/macos/SourcePackages/firebase_app_check-0.4.5/example/macos/Runner/Configs/AppInfo.xcconfig new file mode 100644 index 00000000..800dd3d2 --- /dev/null +++ b/mih_ui/android/build/macos/SourcePackages/firebase_app_check-0.4.5/example/macos/Runner/Configs/AppInfo.xcconfig @@ -0,0 +1,14 @@ +// Application-level settings for the Runner target. +// +// This may be replaced with something auto-generated from metadata (e.g., pubspec.yaml) in the +// future. If not, the values below would default to using the project name when this becomes a +// 'flutter create' template. + +// The application's name. By default this is also the title of the Flutter window. +PRODUCT_NAME = firebase_app_check_example + +// The application's bundle identifier +PRODUCT_BUNDLE_IDENTIFIER = io.flutter.plugins.firebase.appcheck.example + +// The copyright displayed in application information +PRODUCT_COPYRIGHT = Copyright © 2021 io.flutter.plugins.firebase.appcheck.example. All rights reserved. diff --git a/mih_ui/android/build/macos/SourcePackages/firebase_app_check-0.4.5/example/macos/Runner/Configs/Debug.xcconfig b/mih_ui/android/build/macos/SourcePackages/firebase_app_check-0.4.5/example/macos/Runner/Configs/Debug.xcconfig new file mode 100644 index 00000000..36b0fd94 --- /dev/null +++ b/mih_ui/android/build/macos/SourcePackages/firebase_app_check-0.4.5/example/macos/Runner/Configs/Debug.xcconfig @@ -0,0 +1,2 @@ +#include "../../Flutter/Flutter-Debug.xcconfig" +#include "Warnings.xcconfig" diff --git a/mih_ui/android/build/macos/SourcePackages/firebase_app_check-0.4.5/example/macos/Runner/Configs/Release.xcconfig b/mih_ui/android/build/macos/SourcePackages/firebase_app_check-0.4.5/example/macos/Runner/Configs/Release.xcconfig new file mode 100644 index 00000000..dff4f495 --- /dev/null +++ b/mih_ui/android/build/macos/SourcePackages/firebase_app_check-0.4.5/example/macos/Runner/Configs/Release.xcconfig @@ -0,0 +1,2 @@ +#include "../../Flutter/Flutter-Release.xcconfig" +#include "Warnings.xcconfig" diff --git a/mih_ui/android/build/macos/SourcePackages/firebase_app_check-0.4.5/example/macos/Runner/Configs/Warnings.xcconfig b/mih_ui/android/build/macos/SourcePackages/firebase_app_check-0.4.5/example/macos/Runner/Configs/Warnings.xcconfig new file mode 100644 index 00000000..42bcbf47 --- /dev/null +++ b/mih_ui/android/build/macos/SourcePackages/firebase_app_check-0.4.5/example/macos/Runner/Configs/Warnings.xcconfig @@ -0,0 +1,13 @@ +WARNING_CFLAGS = -Wall -Wconditional-uninitialized -Wnullable-to-nonnull-conversion -Wmissing-method-return-type -Woverlength-strings +GCC_WARN_UNDECLARED_SELECTOR = YES +CLANG_UNDEFINED_BEHAVIOR_SANITIZER_NULLABILITY = YES +CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE +CLANG_WARN__DUPLICATE_METHOD_MATCH = YES +CLANG_WARN_PRAGMA_PACK = YES +CLANG_WARN_STRICT_PROTOTYPES = YES +CLANG_WARN_COMMA = YES +GCC_WARN_STRICT_SELECTOR_MATCH = YES +CLANG_WARN_OBJC_REPEATED_USE_OF_WEAK = YES +CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES +GCC_WARN_SHADOW = YES +CLANG_WARN_UNREACHABLE_CODE = YES diff --git a/mih_ui/android/build/macos/SourcePackages/firebase_app_check-0.4.5/example/macos/Runner/DebugProfile.entitlements b/mih_ui/android/build/macos/SourcePackages/firebase_app_check-0.4.5/example/macos/Runner/DebugProfile.entitlements new file mode 100644 index 00000000..dddb8a30 --- /dev/null +++ b/mih_ui/android/build/macos/SourcePackages/firebase_app_check-0.4.5/example/macos/Runner/DebugProfile.entitlements @@ -0,0 +1,12 @@ + + + + + com.apple.security.app-sandbox + + com.apple.security.cs.allow-jit + + com.apple.security.network.server + + + diff --git a/mih_ui/android/build/macos/SourcePackages/firebase_app_check-0.4.5/example/macos/Runner/GoogleService-Info.plist b/mih_ui/android/build/macos/SourcePackages/firebase_app_check-0.4.5/example/macos/Runner/GoogleService-Info.plist new file mode 100644 index 00000000..7e2f0dcb --- /dev/null +++ b/mih_ui/android/build/macos/SourcePackages/firebase_app_check-0.4.5/example/macos/Runner/GoogleService-Info.plist @@ -0,0 +1,38 @@ + + + + + CLIENT_ID + 406099696497-17cfsesi620nhia0sck4map450gngkoh.apps.googleusercontent.com + REVERSED_CLIENT_ID + com.googleusercontent.apps.406099696497-17cfsesi620nhia0sck4map450gngkoh + ANDROID_CLIENT_ID + 406099696497-17qn06u8a0dc717u8ul7s49ampk13lul.apps.googleusercontent.com + API_KEY + AIzaSyDooSUGSf63Ghq02_iIhtnmwMDs4HlWS6c + GCM_SENDER_ID + 406099696497 + PLIST_VERSION + 1 + BUNDLE_ID + io.flutter.plugins.firebase.appcheck.example + PROJECT_ID + flutterfire-e2e-tests + STORAGE_BUCKET + flutterfire-e2e-tests.appspot.com + IS_ADS_ENABLED + + IS_ANALYTICS_ENABLED + + IS_APPINVITE_ENABLED + + IS_GCM_ENABLED + + IS_SIGNIN_ENABLED + + GOOGLE_APP_ID + 1:406099696497:ios:bd8702ba3865bb333574d0 + DATABASE_URL + https://flutterfire-e2e-tests-default-rtdb.europe-west1.firebasedatabase.app + + \ No newline at end of file diff --git a/mih_ui/android/build/macos/SourcePackages/firebase_app_check-0.4.5/example/macos/Runner/Info.plist b/mih_ui/android/build/macos/SourcePackages/firebase_app_check-0.4.5/example/macos/Runner/Info.plist new file mode 100644 index 00000000..4789daa6 --- /dev/null +++ b/mih_ui/android/build/macos/SourcePackages/firebase_app_check-0.4.5/example/macos/Runner/Info.plist @@ -0,0 +1,32 @@ + + + + + CFBundleDevelopmentRegion + $(DEVELOPMENT_LANGUAGE) + CFBundleExecutable + $(EXECUTABLE_NAME) + CFBundleIconFile + + CFBundleIdentifier + $(PRODUCT_BUNDLE_IDENTIFIER) + CFBundleInfoDictionaryVersion + 6.0 + CFBundleName + $(PRODUCT_NAME) + CFBundlePackageType + APPL + CFBundleShortVersionString + $(FLUTTER_BUILD_NAME) + CFBundleVersion + $(FLUTTER_BUILD_NUMBER) + LSMinimumSystemVersion + $(MACOSX_DEPLOYMENT_TARGET) + NSHumanReadableCopyright + $(PRODUCT_COPYRIGHT) + NSMainNibFile + MainMenu + NSPrincipalClass + NSApplication + + diff --git a/mih_ui/android/build/macos/SourcePackages/firebase_app_check-0.4.5/example/macos/Runner/MainFlutterWindow.swift b/mih_ui/android/build/macos/SourcePackages/firebase_app_check-0.4.5/example/macos/Runner/MainFlutterWindow.swift new file mode 100644 index 00000000..2722837e --- /dev/null +++ b/mih_ui/android/build/macos/SourcePackages/firebase_app_check-0.4.5/example/macos/Runner/MainFlutterWindow.swift @@ -0,0 +1,15 @@ +import Cocoa +import FlutterMacOS + +class MainFlutterWindow: NSWindow { + override func awakeFromNib() { + let flutterViewController = FlutterViewController.init() + let windowFrame = self.frame + self.contentViewController = flutterViewController + self.setFrame(windowFrame, display: true) + + RegisterGeneratedPlugins(registry: flutterViewController) + + super.awakeFromNib() + } +} diff --git a/mih_ui/android/build/macos/SourcePackages/firebase_app_check-0.4.5/example/macos/Runner/Release.entitlements b/mih_ui/android/build/macos/SourcePackages/firebase_app_check-0.4.5/example/macos/Runner/Release.entitlements new file mode 100644 index 00000000..0c67376e --- /dev/null +++ b/mih_ui/android/build/macos/SourcePackages/firebase_app_check-0.4.5/example/macos/Runner/Release.entitlements @@ -0,0 +1,5 @@ + + + + + diff --git a/mih_ui/android/build/macos/SourcePackages/firebase_app_check-0.4.5/example/macos/firebase_app_id_file.json b/mih_ui/android/build/macos/SourcePackages/firebase_app_check-0.4.5/example/macos/firebase_app_id_file.json new file mode 100644 index 00000000..ab0e60a0 --- /dev/null +++ b/mih_ui/android/build/macos/SourcePackages/firebase_app_check-0.4.5/example/macos/firebase_app_id_file.json @@ -0,0 +1,7 @@ +{ + "file_generated_by": "FlutterFire CLI", + "purpose": "FirebaseAppID & ProjectID for this Firebase app in this directory", + "GOOGLE_APP_ID": "1:406099696497:ios:bd8702ba3865bb333574d0", + "FIREBASE_PROJECT_ID": "flutterfire-e2e-tests", + "GCM_SENDER_ID": "406099696497" +} \ No newline at end of file diff --git a/mih_ui/android/build/macos/SourcePackages/firebase_app_check-0.4.5/example/pubspec.yaml b/mih_ui/android/build/macos/SourcePackages/firebase_app_check-0.4.5/example/pubspec.yaml new file mode 100644 index 00000000..c652ec30 --- /dev/null +++ b/mih_ui/android/build/macos/SourcePackages/firebase_app_check-0.4.5/example/pubspec.yaml @@ -0,0 +1,21 @@ +name: firebase_app_check_example +description: Firebase App Check example application. + +publish_to: 'none' + +version: 1.0.0+1 +resolution: workspace + +environment: + sdk: '^3.6.0' + flutter: '>=3.27.0' + +dependencies: + cloud_firestore: ^6.6.0 + firebase_app_check: ^0.4.5 + firebase_core: ^4.11.0 + flutter: + sdk: flutter + +flutter: + uses-material-design: true diff --git a/mih_ui/android/build/macos/SourcePackages/firebase_app_check-0.4.5/example/web/favicon.png b/mih_ui/android/build/macos/SourcePackages/firebase_app_check-0.4.5/example/web/favicon.png new file mode 100644 index 0000000000000000000000000000000000000000..8aaa46ac1ae21512746f852a42ba87e4165dfdd1 GIT binary patch literal 917 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`jKx9jP7LeL$-D$|I14-?iy0X7 zltGxWVyS%@P(fs7NJL45ua8x7ey(0(N`6wRUPW#JP&EUCO@$SZnVVXYs8ErclUHn2 zVXFjIVFhG^g!Ppaz)DK8ZIvQ?0~DO|i&7O#^-S~(l1AfjnEK zjFOT9D}DX)@^Za$W4-*MbbUihOG|wNBYh(yU7!lx;>x^|#0uTKVr7USFmqf|i<65o z3raHc^AtelCMM;Vme?vOfh>Xph&xL%(-1c06+^uR^q@XSM&D4+Kp$>4P^%3{)XKjo zGZknv$b36P8?Z_gF{nK@`XI}Z90TzwSQO}0J1!f2c(B=V`5aP@1P1a|PZ!4!3&Gl8 zTYqUsf!gYFyJnXpu0!n&N*SYAX-%d(5gVjrHJWqXQshj@!Zm{!01WsQrH~9=kTxW#6SvuapgMqt>$=j#%eyGrQzr zP{L-3gsMA^$I1&gsBAEL+vxi1*Igl=8#8`5?A-T5=z-sk46WA1IUT)AIZHx1rdUrf zVJrJn<74DDw`j)Ki#gt}mIT-Q`XRa2-jQXQoI%w`nb|XblvzK${ZzlV)m-XcwC(od z71_OEC5Bt9GEXosOXaPTYOia#R4ID2TiU~`zVMl08TV_C%DnU4^+HE>9(CE4D6?Fz oujB08i7adh9xk7*FX66dWH6F5TM;?E2b5PlUHx3vIVCg!0Dx9vYXATM literal 0 HcmV?d00001 diff --git a/mih_ui/android/build/macos/SourcePackages/firebase_app_check-0.4.5/example/web/icons/Icon-192.png b/mih_ui/android/build/macos/SourcePackages/firebase_app_check-0.4.5/example/web/icons/Icon-192.png new file mode 100644 index 0000000000000000000000000000000000000000..b749bfef07473333cf1dd31e9eed89862a5d52aa GIT binary patch literal 5292 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 literal 0 HcmV?d00001 diff --git a/mih_ui/android/build/macos/SourcePackages/firebase_app_check-0.4.5/example/web/icons/Icon-512.png b/mih_ui/android/build/macos/SourcePackages/firebase_app_check-0.4.5/example/web/icons/Icon-512.png new file mode 100644 index 0000000000000000000000000000000000000000..88cfd48dff1169879ba46840804b412fe02fefd6 GIT binary patch literal 8252 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 literal 0 HcmV?d00001 diff --git a/mih_ui/android/build/macos/SourcePackages/firebase_app_check-0.4.5/example/web/icons/Icon-maskable-192.png b/mih_ui/android/build/macos/SourcePackages/firebase_app_check-0.4.5/example/web/icons/Icon-maskable-192.png new file mode 100644 index 0000000000000000000000000000000000000000..eb9b4d76e525556d5d89141648c724331630325d GIT binary patch literal 5594 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 X>c!)3PgKfL&lX^$Z>Cpu&6)6jvi^Z! literal 0 HcmV?d00001 diff --git a/mih_ui/android/build/macos/SourcePackages/firebase_app_check-0.4.5/example/web/icons/Icon-maskable-512.png b/mih_ui/android/build/macos/SourcePackages/firebase_app_check-0.4.5/example/web/icons/Icon-maskable-512.png new file mode 100644 index 0000000000000000000000000000000000000000..d69c56691fbdb0b7efa65097c7cc1edac12a6d3e GIT binary patch literal 20998 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 MPgg&ebxsLQ025IeI{*Lx literal 0 HcmV?d00001 diff --git a/mih_ui/android/build/macos/SourcePackages/firebase_app_check-0.4.5/example/web/index.html b/mih_ui/android/build/macos/SourcePackages/firebase_app_check-0.4.5/example/web/index.html new file mode 100644 index 00000000..e619aadd --- /dev/null +++ b/mih_ui/android/build/macos/SourcePackages/firebase_app_check-0.4.5/example/web/index.html @@ -0,0 +1,41 @@ + + + + + + + + + + + + + + + + + + + + flutterfire_app_check + + + + + + + diff --git a/mih_ui/android/build/macos/SourcePackages/firebase_app_check-0.4.5/example/web/manifest.json b/mih_ui/android/build/macos/SourcePackages/firebase_app_check-0.4.5/example/web/manifest.json new file mode 100644 index 00000000..a5a5ebda --- /dev/null +++ b/mih_ui/android/build/macos/SourcePackages/firebase_app_check-0.4.5/example/web/manifest.json @@ -0,0 +1,35 @@ +{ + "name": "flutterfire_app_check", + "short_name": "flutterfire_app_check", + "start_url": ".", + "display": "standalone", + "background_color": "#0175C2", + "theme_color": "#0175C2", + "description": "A new Flutter project.", + "orientation": "portrait-primary", + "prefer_related_applications": false, + "icons": [ + { + "src": "icons/Icon-192.png", + "sizes": "192x192", + "type": "image/png" + }, + { + "src": "icons/Icon-512.png", + "sizes": "512x512", + "type": "image/png" + }, + { + "src": "icons/Icon-maskable-192.png", + "sizes": "192x192", + "type": "image/png", + "purpose": "maskable" + }, + { + "src": "icons/Icon-maskable-512.png", + "sizes": "512x512", + "type": "image/png", + "purpose": "maskable" + } + ] +} diff --git a/mih_ui/android/build/macos/SourcePackages/firebase_app_check-0.4.5/example/windows/CMakeLists.txt b/mih_ui/android/build/macos/SourcePackages/firebase_app_check-0.4.5/example/windows/CMakeLists.txt new file mode 100644 index 00000000..ffc5f0c5 --- /dev/null +++ b/mih_ui/android/build/macos/SourcePackages/firebase_app_check-0.4.5/example/windows/CMakeLists.txt @@ -0,0 +1,108 @@ +# Project-level configuration. +cmake_minimum_required(VERSION 3.14) +project(firebase_app_check_example LANGUAGES CXX) + +# The name of the executable created for the application. Change this to change +# the on-disk name of your application. +set(BINARY_NAME "firebase_app_check_example") + +# Explicitly opt in to modern CMake behaviors to avoid warnings with recent +# versions of CMake. +cmake_policy(VERSION 3.14...3.25) + +# Define build configuration option. +get_property(IS_MULTICONFIG GLOBAL PROPERTY GENERATOR_IS_MULTI_CONFIG) +if(IS_MULTICONFIG) + set(CMAKE_CONFIGURATION_TYPES "Debug;Profile;Release" + CACHE STRING "" FORCE) +else() + if(NOT CMAKE_BUILD_TYPE AND NOT CMAKE_CONFIGURATION_TYPES) + set(CMAKE_BUILD_TYPE "Debug" CACHE + STRING "Flutter build mode" FORCE) + set_property(CACHE CMAKE_BUILD_TYPE PROPERTY STRINGS + "Debug" "Profile" "Release") + endif() +endif() +# Define settings for the Profile build mode. +set(CMAKE_EXE_LINKER_FLAGS_PROFILE "${CMAKE_EXE_LINKER_FLAGS_RELEASE}") +set(CMAKE_SHARED_LINKER_FLAGS_PROFILE "${CMAKE_SHARED_LINKER_FLAGS_RELEASE}") +set(CMAKE_C_FLAGS_PROFILE "${CMAKE_C_FLAGS_RELEASE}") +set(CMAKE_CXX_FLAGS_PROFILE "${CMAKE_CXX_FLAGS_RELEASE}") + +# Use Unicode for all projects. +add_definitions(-DUNICODE -D_UNICODE) + +# Compilation settings that should be applied to most targets. +# +# Be cautious about adding new options here, as plugins use this function by +# default. In most cases, you should add new options to specific targets instead +# of modifying this function. +function(APPLY_STANDARD_SETTINGS TARGET) + target_compile_features(${TARGET} PUBLIC cxx_std_17) + target_compile_options(${TARGET} PRIVATE /W4 /WX /wd"4100") + target_compile_options(${TARGET} PRIVATE /EHsc) + target_compile_definitions(${TARGET} PRIVATE "_HAS_EXCEPTIONS=0") + target_compile_definitions(${TARGET} PRIVATE "$<$:_DEBUG>") +endfunction() + +# Flutter library and tool build rules. +set(FLUTTER_MANAGED_DIR "${CMAKE_CURRENT_SOURCE_DIR}/flutter") +add_subdirectory(${FLUTTER_MANAGED_DIR}) + +# Application build; see runner/CMakeLists.txt. +add_subdirectory("runner") + + +# Generated plugin build rules, which manage building the plugins and adding +# them to the application. +include(flutter/generated_plugins.cmake) + + +# === Installation === +# Support files are copied into place next to the executable, so that it can +# run in place. This is done instead of making a separate bundle (as on Linux) +# so that building and running from within Visual Studio will work. +set(BUILD_BUNDLE_DIR "$") +# Make the "install" step default, as it's required to run. +set(CMAKE_VS_INCLUDE_INSTALL_TO_DEFAULT_BUILD 1) +if(CMAKE_INSTALL_PREFIX_INITIALIZED_TO_DEFAULT) + set(CMAKE_INSTALL_PREFIX "${BUILD_BUNDLE_DIR}" CACHE PATH "..." FORCE) +endif() + +set(INSTALL_BUNDLE_DATA_DIR "${CMAKE_INSTALL_PREFIX}/data") +set(INSTALL_BUNDLE_LIB_DIR "${CMAKE_INSTALL_PREFIX}") + +install(TARGETS ${BINARY_NAME} RUNTIME DESTINATION "${CMAKE_INSTALL_PREFIX}" + COMPONENT Runtime) + +install(FILES "${FLUTTER_ICU_DATA_FILE}" DESTINATION "${INSTALL_BUNDLE_DATA_DIR}" + COMPONENT Runtime) + +install(FILES "${FLUTTER_LIBRARY}" DESTINATION "${INSTALL_BUNDLE_LIB_DIR}" + COMPONENT Runtime) + +if(PLUGIN_BUNDLED_LIBRARIES) + install(FILES "${PLUGIN_BUNDLED_LIBRARIES}" + DESTINATION "${INSTALL_BUNDLE_LIB_DIR}" + COMPONENT Runtime) +endif() + +# Copy the native assets provided by the build.dart from all packages. +set(NATIVE_ASSETS_DIR "${PROJECT_BUILD_DIR}native_assets/windows/") +install(DIRECTORY "${NATIVE_ASSETS_DIR}" + DESTINATION "${INSTALL_BUNDLE_LIB_DIR}" + COMPONENT Runtime) + +# Fully re-copy the assets directory on each build to avoid having stale files +# from a previous install. +set(FLUTTER_ASSET_DIR_NAME "flutter_assets") +install(CODE " + file(REMOVE_RECURSE \"${INSTALL_BUNDLE_DATA_DIR}/${FLUTTER_ASSET_DIR_NAME}\") + " COMPONENT Runtime) +install(DIRECTORY "${PROJECT_BUILD_DIR}/${FLUTTER_ASSET_DIR_NAME}" + DESTINATION "${INSTALL_BUNDLE_DATA_DIR}" COMPONENT Runtime) + +# Install the AOT library on non-Debug builds only. +install(FILES "${AOT_LIBRARY}" DESTINATION "${INSTALL_BUNDLE_DATA_DIR}" + CONFIGURATIONS Profile;Release + COMPONENT Runtime) diff --git a/mih_ui/android/build/macos/SourcePackages/firebase_app_check-0.4.5/example/windows/flutter/CMakeLists.txt b/mih_ui/android/build/macos/SourcePackages/firebase_app_check-0.4.5/example/windows/flutter/CMakeLists.txt new file mode 100644 index 00000000..903f4899 --- /dev/null +++ b/mih_ui/android/build/macos/SourcePackages/firebase_app_check-0.4.5/example/windows/flutter/CMakeLists.txt @@ -0,0 +1,109 @@ +# This file controls Flutter-level build steps. It should not be edited. +cmake_minimum_required(VERSION 3.14) + +set(EPHEMERAL_DIR "${CMAKE_CURRENT_SOURCE_DIR}/ephemeral") + +# Configuration provided via flutter tool. +include(${EPHEMERAL_DIR}/generated_config.cmake) + +# TODO: Move the rest of this into files in ephemeral. See +# https://github.com/flutter/flutter/issues/57146. +set(WRAPPER_ROOT "${EPHEMERAL_DIR}/cpp_client_wrapper") + +# Set fallback configurations for older versions of the flutter tool. +if (NOT DEFINED FLUTTER_TARGET_PLATFORM) + set(FLUTTER_TARGET_PLATFORM "windows-x64") +endif() + +# === Flutter Library === +set(FLUTTER_LIBRARY "${EPHEMERAL_DIR}/flutter_windows.dll") + +# Published to parent scope for install step. +set(FLUTTER_LIBRARY ${FLUTTER_LIBRARY} PARENT_SCOPE) +set(FLUTTER_ICU_DATA_FILE "${EPHEMERAL_DIR}/icudtl.dat" PARENT_SCOPE) +set(PROJECT_BUILD_DIR "${PROJECT_DIR}/build/" PARENT_SCOPE) +set(AOT_LIBRARY "${PROJECT_DIR}/build/windows/app.so" PARENT_SCOPE) + +list(APPEND FLUTTER_LIBRARY_HEADERS + "flutter_export.h" + "flutter_windows.h" + "flutter_messenger.h" + "flutter_plugin_registrar.h" + "flutter_texture_registrar.h" +) +list(TRANSFORM FLUTTER_LIBRARY_HEADERS PREPEND "${EPHEMERAL_DIR}/") +add_library(flutter INTERFACE) +target_include_directories(flutter INTERFACE + "${EPHEMERAL_DIR}" +) +target_link_libraries(flutter INTERFACE "${FLUTTER_LIBRARY}.lib") +add_dependencies(flutter flutter_assemble) + +# === Wrapper === +list(APPEND CPP_WRAPPER_SOURCES_CORE + "core_implementations.cc" + "standard_codec.cc" +) +list(TRANSFORM CPP_WRAPPER_SOURCES_CORE PREPEND "${WRAPPER_ROOT}/") +list(APPEND CPP_WRAPPER_SOURCES_PLUGIN + "plugin_registrar.cc" +) +list(TRANSFORM CPP_WRAPPER_SOURCES_PLUGIN PREPEND "${WRAPPER_ROOT}/") +list(APPEND CPP_WRAPPER_SOURCES_APP + "flutter_engine.cc" + "flutter_view_controller.cc" +) +list(TRANSFORM CPP_WRAPPER_SOURCES_APP PREPEND "${WRAPPER_ROOT}/") + +# Wrapper sources needed for a plugin. +add_library(flutter_wrapper_plugin STATIC + ${CPP_WRAPPER_SOURCES_CORE} + ${CPP_WRAPPER_SOURCES_PLUGIN} +) +apply_standard_settings(flutter_wrapper_plugin) +set_target_properties(flutter_wrapper_plugin PROPERTIES + POSITION_INDEPENDENT_CODE ON) +set_target_properties(flutter_wrapper_plugin PROPERTIES + CXX_VISIBILITY_PRESET hidden) +target_link_libraries(flutter_wrapper_plugin PUBLIC flutter) +target_include_directories(flutter_wrapper_plugin PUBLIC + "${WRAPPER_ROOT}/include" +) +add_dependencies(flutter_wrapper_plugin flutter_assemble) + +# Wrapper sources needed for the runner. +add_library(flutter_wrapper_app STATIC + ${CPP_WRAPPER_SOURCES_CORE} + ${CPP_WRAPPER_SOURCES_APP} +) +apply_standard_settings(flutter_wrapper_app) +target_link_libraries(flutter_wrapper_app PUBLIC flutter) +target_include_directories(flutter_wrapper_app PUBLIC + "${WRAPPER_ROOT}/include" +) +add_dependencies(flutter_wrapper_app flutter_assemble) + +# === Flutter tool backend === +# _phony_ is a non-existent file to force this command to run every time, +# since currently there's no way to get a full input/output list from the +# flutter tool. +set(PHONY_OUTPUT "${CMAKE_CURRENT_BINARY_DIR}/_phony_") +set_source_files_properties("${PHONY_OUTPUT}" PROPERTIES SYMBOLIC TRUE) +add_custom_command( + OUTPUT ${FLUTTER_LIBRARY} ${FLUTTER_LIBRARY_HEADERS} + ${CPP_WRAPPER_SOURCES_CORE} ${CPP_WRAPPER_SOURCES_PLUGIN} + ${CPP_WRAPPER_SOURCES_APP} + ${PHONY_OUTPUT} + COMMAND ${CMAKE_COMMAND} -E env + ${FLUTTER_TOOL_ENVIRONMENT} + "${FLUTTER_ROOT}/packages/flutter_tools/bin/tool_backend.bat" + ${FLUTTER_TARGET_PLATFORM} $ + VERBATIM +) +add_custom_target(flutter_assemble DEPENDS + "${FLUTTER_LIBRARY}" + ${FLUTTER_LIBRARY_HEADERS} + ${CPP_WRAPPER_SOURCES_CORE} + ${CPP_WRAPPER_SOURCES_PLUGIN} + ${CPP_WRAPPER_SOURCES_APP} +) diff --git a/mih_ui/android/build/macos/SourcePackages/firebase_app_check-0.4.5/example/windows/runner/CMakeLists.txt b/mih_ui/android/build/macos/SourcePackages/firebase_app_check-0.4.5/example/windows/runner/CMakeLists.txt new file mode 100644 index 00000000..394917c0 --- /dev/null +++ b/mih_ui/android/build/macos/SourcePackages/firebase_app_check-0.4.5/example/windows/runner/CMakeLists.txt @@ -0,0 +1,40 @@ +cmake_minimum_required(VERSION 3.14) +project(runner LANGUAGES CXX) + +# Define the application target. To change its name, change BINARY_NAME in the +# top-level CMakeLists.txt, not the value here, or `flutter run` will no longer +# work. +# +# Any new source files that you add to the application should be added here. +add_executable(${BINARY_NAME} WIN32 + "flutter_window.cpp" + "main.cpp" + "utils.cpp" + "win32_window.cpp" + "${FLUTTER_MANAGED_DIR}/generated_plugin_registrant.cc" + "Runner.rc" + "runner.exe.manifest" +) + +# Apply the standard set of build settings. This can be removed for applications +# that need different build settings. +apply_standard_settings(${BINARY_NAME}) + +# Add preprocessor definitions for the build version. +target_compile_definitions(${BINARY_NAME} PRIVATE "FLUTTER_VERSION=\"${FLUTTER_VERSION}\"") +target_compile_definitions(${BINARY_NAME} PRIVATE "FLUTTER_VERSION_MAJOR=${FLUTTER_VERSION_MAJOR}") +target_compile_definitions(${BINARY_NAME} PRIVATE "FLUTTER_VERSION_MINOR=${FLUTTER_VERSION_MINOR}") +target_compile_definitions(${BINARY_NAME} PRIVATE "FLUTTER_VERSION_PATCH=${FLUTTER_VERSION_PATCH}") +target_compile_definitions(${BINARY_NAME} PRIVATE "FLUTTER_VERSION_BUILD=${FLUTTER_VERSION_BUILD}") + +# Disable Windows macros that collide with C++ standard library functions. +target_compile_definitions(${BINARY_NAME} PRIVATE "NOMINMAX") + +# Add dependency libraries and include directories. Add any application-specific +# dependencies here. +target_link_libraries(${BINARY_NAME} PRIVATE flutter flutter_wrapper_app) +target_link_libraries(${BINARY_NAME} PRIVATE "dwmapi.lib") +target_include_directories(${BINARY_NAME} PRIVATE "${CMAKE_SOURCE_DIR}") + +# Run the Flutter tool portions of the build. This must not be removed. +add_dependencies(${BINARY_NAME} flutter_assemble) diff --git a/mih_ui/android/build/macos/SourcePackages/firebase_app_check-0.4.5/example/windows/runner/Runner.rc b/mih_ui/android/build/macos/SourcePackages/firebase_app_check-0.4.5/example/windows/runner/Runner.rc new file mode 100644 index 00000000..26d198ff --- /dev/null +++ b/mih_ui/android/build/macos/SourcePackages/firebase_app_check-0.4.5/example/windows/runner/Runner.rc @@ -0,0 +1,121 @@ +// Microsoft Visual C++ generated resource script. +// +#pragma code_page(65001) +#include "resource.h" + +#define APSTUDIO_READONLY_SYMBOLS +///////////////////////////////////////////////////////////////////////////// +// +// Generated from the TEXTINCLUDE 2 resource. +// +#include "winres.h" + +///////////////////////////////////////////////////////////////////////////// +#undef APSTUDIO_READONLY_SYMBOLS + +///////////////////////////////////////////////////////////////////////////// +// English (United States) resources + +#if !defined(AFX_RESOURCE_DLL) || defined(AFX_TARG_ENU) +LANGUAGE LANG_ENGLISH, SUBLANG_ENGLISH_US + +#ifdef APSTUDIO_INVOKED +///////////////////////////////////////////////////////////////////////////// +// +// TEXTINCLUDE +// + +1 TEXTINCLUDE +BEGIN + "resource.h\0" +END + +2 TEXTINCLUDE +BEGIN + "#include ""winres.h""\r\n" + "\0" +END + +3 TEXTINCLUDE +BEGIN + "\r\n" + "\0" +END + +#endif // APSTUDIO_INVOKED + + +///////////////////////////////////////////////////////////////////////////// +// +// Icon +// + +// Icon with lowest ID value placed first to ensure application icon +// remains consistent on all systems. +IDI_APP_ICON ICON "resources\\app_icon.ico" + + +///////////////////////////////////////////////////////////////////////////// +// +// Version +// + +#if defined(FLUTTER_VERSION_MAJOR) && defined(FLUTTER_VERSION_MINOR) && defined(FLUTTER_VERSION_PATCH) && defined(FLUTTER_VERSION_BUILD) +#define VERSION_AS_NUMBER FLUTTER_VERSION_MAJOR,FLUTTER_VERSION_MINOR,FLUTTER_VERSION_PATCH,FLUTTER_VERSION_BUILD +#else +#define VERSION_AS_NUMBER 1,0,0,0 +#endif + +#if defined(FLUTTER_VERSION) +#define VERSION_AS_STRING FLUTTER_VERSION +#else +#define VERSION_AS_STRING "1.0.0" +#endif + +VS_VERSION_INFO VERSIONINFO + FILEVERSION VERSION_AS_NUMBER + PRODUCTVERSION VERSION_AS_NUMBER + FILEFLAGSMASK VS_FFI_FILEFLAGSMASK +#ifdef _DEBUG + FILEFLAGS VS_FF_DEBUG +#else + FILEFLAGS 0x0L +#endif + FILEOS VOS__WINDOWS32 + FILETYPE VFT_APP + FILESUBTYPE 0x0L +BEGIN + BLOCK "StringFileInfo" + BEGIN + BLOCK "040904e4" + BEGIN + VALUE "CompanyName", "io.flutter.plugins.firebase.appcheck" "\0" + VALUE "FileDescription", "firebase_app_check_example" "\0" + VALUE "FileVersion", VERSION_AS_STRING "\0" + VALUE "InternalName", "firebase_app_check_example" "\0" + VALUE "LegalCopyright", "Copyright (C) 2026 io.flutter.plugins.firebase.appcheck. All rights reserved." "\0" + VALUE "OriginalFilename", "firebase_app_check_example.exe" "\0" + VALUE "ProductName", "firebase_app_check_example" "\0" + VALUE "ProductVersion", VERSION_AS_STRING "\0" + END + END + BLOCK "VarFileInfo" + BEGIN + VALUE "Translation", 0x409, 1252 + END +END + +#endif // English (United States) resources +///////////////////////////////////////////////////////////////////////////// + + + +#ifndef APSTUDIO_INVOKED +///////////////////////////////////////////////////////////////////////////// +// +// Generated from the TEXTINCLUDE 3 resource. +// + + +///////////////////////////////////////////////////////////////////////////// +#endif // not APSTUDIO_INVOKED diff --git a/mih_ui/android/build/macos/SourcePackages/firebase_app_check-0.4.5/example/windows/runner/flutter_window.cpp b/mih_ui/android/build/macos/SourcePackages/firebase_app_check-0.4.5/example/windows/runner/flutter_window.cpp new file mode 100644 index 00000000..d1bd86f4 --- /dev/null +++ b/mih_ui/android/build/macos/SourcePackages/firebase_app_check-0.4.5/example/windows/runner/flutter_window.cpp @@ -0,0 +1,73 @@ +// Copyright 2025, the Chromium project authors. Please see the AUTHORS file +// for details. All rights reserved. Use of this source code is governed by a +// BSD-style license that can be found in the LICENSE file. + +#include "flutter_window.h" + +#include + +#include "flutter/generated_plugin_registrant.h" + +FlutterWindow::FlutterWindow(const flutter::DartProject& project) + : project_(project) {} + +FlutterWindow::~FlutterWindow() {} + +bool FlutterWindow::OnCreate() { + if (!Win32Window::OnCreate()) { + return false; + } + + RECT frame = GetClientArea(); + + // The size here must match the window dimensions to avoid unnecessary surface + // creation / destruction in the startup path. + flutter_controller_ = std::make_unique( + frame.right - frame.left, frame.bottom - frame.top, project_); + // Ensure that basic setup of the controller was successful. + if (!flutter_controller_->engine() || !flutter_controller_->view()) { + return false; + } + RegisterPlugins(flutter_controller_->engine()); + SetChildContent(flutter_controller_->view()->GetNativeWindow()); + + flutter_controller_->engine()->SetNextFrameCallback([&]() { this->Show(); }); + + // Flutter can complete the first frame before the "show window" callback is + // registered. The following call ensures a frame is pending to ensure the + // window is shown. It is a no-op if the first frame hasn't completed yet. + flutter_controller_->ForceRedraw(); + + return true; +} + +void FlutterWindow::OnDestroy() { + if (flutter_controller_) { + flutter_controller_ = nullptr; + } + + Win32Window::OnDestroy(); +} + +LRESULT +FlutterWindow::MessageHandler(HWND hwnd, UINT const message, + WPARAM const wparam, + LPARAM const lparam) noexcept { + // Give Flutter, including plugins, an opportunity to handle window messages. + if (flutter_controller_) { + std::optional result = + flutter_controller_->HandleTopLevelWindowProc(hwnd, message, wparam, + lparam); + if (result) { + return *result; + } + } + + switch (message) { + case WM_FONTCHANGE: + flutter_controller_->engine()->ReloadSystemFonts(); + break; + } + + return Win32Window::MessageHandler(hwnd, message, wparam, lparam); +} diff --git a/mih_ui/android/build/macos/SourcePackages/firebase_app_check-0.4.5/example/windows/runner/flutter_window.h b/mih_ui/android/build/macos/SourcePackages/firebase_app_check-0.4.5/example/windows/runner/flutter_window.h new file mode 100644 index 00000000..243c8352 --- /dev/null +++ b/mih_ui/android/build/macos/SourcePackages/firebase_app_check-0.4.5/example/windows/runner/flutter_window.h @@ -0,0 +1,37 @@ +// Copyright 2025, the Chromium project authors. Please see the AUTHORS file +// for details. All rights reserved. Use of this source code is governed by a +// BSD-style license that can be found in the LICENSE file. + +#ifndef RUNNER_FLUTTER_WINDOW_H_ +#define RUNNER_FLUTTER_WINDOW_H_ + +#include +#include + +#include + +#include "win32_window.h" + +// A window that does nothing but host a Flutter view. +class FlutterWindow : public Win32Window { + public: + // Creates a new FlutterWindow hosting a Flutter view running |project|. + explicit FlutterWindow(const flutter::DartProject& project); + virtual ~FlutterWindow(); + + protected: + // Win32Window: + bool OnCreate() override; + void OnDestroy() override; + LRESULT MessageHandler(HWND window, UINT const message, WPARAM const wparam, + LPARAM const lparam) noexcept override; + + private: + // The project to run. + flutter::DartProject project_; + + // The Flutter instance hosted by this window. + std::unique_ptr flutter_controller_; +}; + +#endif // RUNNER_FLUTTER_WINDOW_H_ diff --git a/mih_ui/android/build/macos/SourcePackages/firebase_app_check-0.4.5/example/windows/runner/main.cpp b/mih_ui/android/build/macos/SourcePackages/firebase_app_check-0.4.5/example/windows/runner/main.cpp new file mode 100644 index 00000000..129ed2c3 --- /dev/null +++ b/mih_ui/android/build/macos/SourcePackages/firebase_app_check-0.4.5/example/windows/runner/main.cpp @@ -0,0 +1,46 @@ +// Copyright 2025, the Chromium project authors. Please see the AUTHORS file +// for details. All rights reserved. Use of this source code is governed by a +// BSD-style license that can be found in the LICENSE file. + +#include +#include +#include + +#include "flutter_window.h" +#include "utils.h" + +int APIENTRY wWinMain(_In_ HINSTANCE instance, _In_opt_ HINSTANCE prev, + _In_ wchar_t* command_line, _In_ int show_command) { + // Attach to console when present (e.g., 'flutter run') or create a + // new console when running with a debugger. + if (!::AttachConsole(ATTACH_PARENT_PROCESS) && ::IsDebuggerPresent()) { + CreateAndAttachConsole(); + } + + // Initialize COM, so that it is available for use in the library and/or + // plugins. + ::CoInitializeEx(nullptr, COINIT_APARTMENTTHREADED); + + flutter::DartProject project(L"data"); + + std::vector command_line_arguments = GetCommandLineArguments(); + + project.set_dart_entrypoint_arguments(std::move(command_line_arguments)); + + FlutterWindow window(project); + Win32Window::Point origin(10, 10); + Win32Window::Size size(1280, 720); + if (!window.Create(L"firebase_app_check_example", origin, size)) { + return EXIT_FAILURE; + } + window.SetQuitOnClose(true); + + ::MSG msg; + while (::GetMessage(&msg, nullptr, 0, 0)) { + ::TranslateMessage(&msg); + ::DispatchMessage(&msg); + } + + ::CoUninitialize(); + return EXIT_SUCCESS; +} diff --git a/mih_ui/android/build/macos/SourcePackages/firebase_app_check-0.4.5/example/windows/runner/resource.h b/mih_ui/android/build/macos/SourcePackages/firebase_app_check-0.4.5/example/windows/runner/resource.h new file mode 100644 index 00000000..91d70fa3 --- /dev/null +++ b/mih_ui/android/build/macos/SourcePackages/firebase_app_check-0.4.5/example/windows/runner/resource.h @@ -0,0 +1,20 @@ +// Copyright 2025, the Chromium project authors. Please see the AUTHORS file +// for details. All rights reserved. Use of this source code is governed by a +// BSD-style license that can be found in the LICENSE file. + +//{{NO_DEPENDENCIES}} +// Microsoft Visual C++ generated include file. +// Used by Runner.rc +// +#define IDI_APP_ICON 101 + +// Next default values for new objects +// +#ifdef APSTUDIO_INVOKED +#ifndef APSTUDIO_READONLY_SYMBOLS +#define _APS_NEXT_RESOURCE_VALUE 102 +#define _APS_NEXT_COMMAND_VALUE 40001 +#define _APS_NEXT_CONTROL_VALUE 1001 +#define _APS_NEXT_SYMED_VALUE 101 +#endif +#endif diff --git a/mih_ui/android/build/macos/SourcePackages/firebase_app_check-0.4.5/example/windows/runner/resources/app_icon.ico b/mih_ui/android/build/macos/SourcePackages/firebase_app_check-0.4.5/example/windows/runner/resources/app_icon.ico new file mode 100644 index 0000000000000000000000000000000000000000..c04e20caf6370ebb9253ad831cc31de4a9c965f6 GIT binary patch literal 33772 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 literal 0 HcmV?d00001 diff --git a/mih_ui/android/build/macos/SourcePackages/firebase_app_check-0.4.5/example/windows/runner/runner.exe.manifest b/mih_ui/android/build/macos/SourcePackages/firebase_app_check-0.4.5/example/windows/runner/runner.exe.manifest new file mode 100644 index 00000000..153653e8 --- /dev/null +++ b/mih_ui/android/build/macos/SourcePackages/firebase_app_check-0.4.5/example/windows/runner/runner.exe.manifest @@ -0,0 +1,14 @@ + + + + + PerMonitorV2 + + + + + + + + + diff --git a/mih_ui/android/build/macos/SourcePackages/firebase_app_check-0.4.5/example/windows/runner/utils.cpp b/mih_ui/android/build/macos/SourcePackages/firebase_app_check-0.4.5/example/windows/runner/utils.cpp new file mode 100644 index 00000000..3b134475 --- /dev/null +++ b/mih_ui/android/build/macos/SourcePackages/firebase_app_check-0.4.5/example/windows/runner/utils.cpp @@ -0,0 +1,69 @@ +// Copyright 2025, the Chromium project authors. Please see the AUTHORS file +// for details. All rights reserved. Use of this source code is governed by a +// BSD-style license that can be found in the LICENSE file. + +#include "utils.h" + +#include +#include +#include +#include + +#include + +void CreateAndAttachConsole() { + if (::AllocConsole()) { + FILE* unused; + if (freopen_s(&unused, "CONOUT$", "w", stdout)) { + _dup2(_fileno(stdout), 1); + } + if (freopen_s(&unused, "CONOUT$", "w", stderr)) { + _dup2(_fileno(stdout), 2); + } + std::ios::sync_with_stdio(); + FlutterDesktopResyncOutputStreams(); + } +} + +std::vector GetCommandLineArguments() { + // Convert the UTF-16 command line arguments to UTF-8 for the Engine to use. + int argc; + wchar_t** argv = ::CommandLineToArgvW(::GetCommandLineW(), &argc); + if (argv == nullptr) { + return std::vector(); + } + + std::vector command_line_arguments; + + // Skip the first argument as it's the binary name. + for (int i = 1; i < argc; i++) { + command_line_arguments.push_back(Utf8FromUtf16(argv[i])); + } + + ::LocalFree(argv); + + return command_line_arguments; +} + +std::string Utf8FromUtf16(const wchar_t* utf16_string) { + if (utf16_string == nullptr) { + return std::string(); + } + unsigned int target_length = + ::WideCharToMultiByte(CP_UTF8, WC_ERR_INVALID_CHARS, utf16_string, -1, + nullptr, 0, nullptr, nullptr) - + 1; // remove the trailing null character + int input_length = (int)wcslen(utf16_string); + std::string utf8_string; + if (target_length == 0 || target_length > utf8_string.max_size()) { + return utf8_string; + } + utf8_string.resize(target_length); + int converted_length = ::WideCharToMultiByte( + CP_UTF8, WC_ERR_INVALID_CHARS, utf16_string, input_length, + utf8_string.data(), target_length, nullptr, nullptr); + if (converted_length == 0) { + return std::string(); + } + return utf8_string; +} diff --git a/mih_ui/android/build/macos/SourcePackages/firebase_app_check-0.4.5/example/windows/runner/utils.h b/mih_ui/android/build/macos/SourcePackages/firebase_app_check-0.4.5/example/windows/runner/utils.h new file mode 100644 index 00000000..8ec0c44d --- /dev/null +++ b/mih_ui/android/build/macos/SourcePackages/firebase_app_check-0.4.5/example/windows/runner/utils.h @@ -0,0 +1,23 @@ +// Copyright 2025, the Chromium project authors. Please see the AUTHORS file +// for details. All rights reserved. Use of this source code is governed by a +// BSD-style license that can be found in the LICENSE file. + +#ifndef RUNNER_UTILS_H_ +#define RUNNER_UTILS_H_ + +#include +#include + +// Creates a console for the process, and redirects stdout and stderr to +// it for both the runner and the Flutter library. +void CreateAndAttachConsole(); + +// Takes a null-terminated wchar_t* encoded in UTF-16 and returns a std::string +// encoded in UTF-8. Returns an empty std::string on failure. +std::string Utf8FromUtf16(const wchar_t* utf16_string); + +// Gets the command line arguments passed in as a std::vector, +// encoded in UTF-8. Returns an empty std::vector on failure. +std::vector GetCommandLineArguments(); + +#endif // RUNNER_UTILS_H_ diff --git a/mih_ui/android/build/macos/SourcePackages/firebase_app_check-0.4.5/example/windows/runner/win32_window.cpp b/mih_ui/android/build/macos/SourcePackages/firebase_app_check-0.4.5/example/windows/runner/win32_window.cpp new file mode 100644 index 00000000..82754b04 --- /dev/null +++ b/mih_ui/android/build/macos/SourcePackages/firebase_app_check-0.4.5/example/windows/runner/win32_window.cpp @@ -0,0 +1,284 @@ +// Copyright 2025, the Chromium project authors. Please see the AUTHORS file +// for details. All rights reserved. Use of this source code is governed by a +// BSD-style license that can be found in the LICENSE file. + +#include "win32_window.h" + +#include +#include + +#include "resource.h" + +namespace { + +/// Window attribute that enables dark mode window decorations. +/// +/// Redefined in case the developer's machine has a Windows SDK older than +/// version 10.0.22000.0. +/// See: +/// https://docs.microsoft.com/windows/win32/api/dwmapi/ne-dwmapi-dwmwindowattribute +#ifndef DWMWA_USE_IMMERSIVE_DARK_MODE +#define DWMWA_USE_IMMERSIVE_DARK_MODE 20 +#endif + +constexpr const wchar_t kWindowClassName[] = L"FLUTTER_RUNNER_WIN32_WINDOW"; + +/// Registry key for app theme preference. +/// +/// A value of 0 indicates apps should use dark mode. A non-zero or missing +/// value indicates apps should use light mode. +constexpr const wchar_t kGetPreferredBrightnessRegKey[] = + L"Software\\Microsoft\\Windows\\CurrentVersion\\Themes\\Personalize"; +constexpr const wchar_t kGetPreferredBrightnessRegValue[] = + L"AppsUseLightTheme"; + +// The number of Win32Window objects that currently exist. +static int g_active_window_count = 0; + +using EnableNonClientDpiScaling = BOOL __stdcall(HWND hwnd); + +// Scale helper to convert logical scaler values to physical using passed in +// scale factor +int Scale(int source, double scale_factor) { + return static_cast(source * scale_factor); +} + +// Dynamically loads the |EnableNonClientDpiScaling| from the User32 module. +// This API is only needed for PerMonitor V1 awareness mode. +void EnableFullDpiSupportIfAvailable(HWND hwnd) { + HMODULE user32_module = LoadLibraryA("User32.dll"); + if (!user32_module) { + return; + } + auto enable_non_client_dpi_scaling = + reinterpret_cast( + GetProcAddress(user32_module, "EnableNonClientDpiScaling")); + if (enable_non_client_dpi_scaling != nullptr) { + enable_non_client_dpi_scaling(hwnd); + } + FreeLibrary(user32_module); +} + +} // namespace + +// Manages the Win32Window's window class registration. +class WindowClassRegistrar { + public: + ~WindowClassRegistrar() = default; + + // Returns the singleton registrar instance. + static WindowClassRegistrar* GetInstance() { + if (!instance_) { + instance_ = new WindowClassRegistrar(); + } + return instance_; + } + + // Returns the name of the window class, registering the class if it hasn't + // previously been registered. + const wchar_t* GetWindowClass(); + + // Unregisters the window class. Should only be called if there are no + // instances of the window. + void UnregisterWindowClass(); + + private: + WindowClassRegistrar() = default; + + static WindowClassRegistrar* instance_; + + bool class_registered_ = false; +}; + +WindowClassRegistrar* WindowClassRegistrar::instance_ = nullptr; + +const wchar_t* WindowClassRegistrar::GetWindowClass() { + if (!class_registered_) { + WNDCLASS window_class{}; + window_class.hCursor = LoadCursor(nullptr, IDC_ARROW); + window_class.lpszClassName = kWindowClassName; + window_class.style = CS_HREDRAW | CS_VREDRAW; + window_class.cbClsExtra = 0; + window_class.cbWndExtra = 0; + window_class.hInstance = GetModuleHandle(nullptr); + window_class.hIcon = + LoadIcon(window_class.hInstance, MAKEINTRESOURCE(IDI_APP_ICON)); + window_class.hbrBackground = 0; + window_class.lpszMenuName = nullptr; + window_class.lpfnWndProc = Win32Window::WndProc; + RegisterClass(&window_class); + class_registered_ = true; + } + return kWindowClassName; +} + +void WindowClassRegistrar::UnregisterWindowClass() { + UnregisterClass(kWindowClassName, nullptr); + class_registered_ = false; +} + +Win32Window::Win32Window() { ++g_active_window_count; } + +Win32Window::~Win32Window() { + --g_active_window_count; + Destroy(); +} + +bool Win32Window::Create(const std::wstring& title, const Point& origin, + const Size& size) { + Destroy(); + + const wchar_t* window_class = + WindowClassRegistrar::GetInstance()->GetWindowClass(); + + const POINT target_point = {static_cast(origin.x), + static_cast(origin.y)}; + HMONITOR monitor = MonitorFromPoint(target_point, MONITOR_DEFAULTTONEAREST); + UINT dpi = FlutterDesktopGetDpiForMonitor(monitor); + double scale_factor = dpi / 96.0; + + HWND window = CreateWindow( + window_class, title.c_str(), WS_OVERLAPPEDWINDOW, + Scale(origin.x, scale_factor), Scale(origin.y, scale_factor), + Scale(size.width, scale_factor), Scale(size.height, scale_factor), + nullptr, nullptr, GetModuleHandle(nullptr), this); + + if (!window) { + return false; + } + + UpdateTheme(window); + + return OnCreate(); +} + +bool Win32Window::Show() { return ShowWindow(window_handle_, SW_SHOWNORMAL); } + +// static +LRESULT CALLBACK Win32Window::WndProc(HWND const window, UINT const message, + WPARAM const wparam, + LPARAM const lparam) noexcept { + if (message == WM_NCCREATE) { + auto window_struct = reinterpret_cast(lparam); + SetWindowLongPtr(window, GWLP_USERDATA, + reinterpret_cast(window_struct->lpCreateParams)); + + auto that = static_cast(window_struct->lpCreateParams); + EnableFullDpiSupportIfAvailable(window); + that->window_handle_ = window; + } else if (Win32Window* that = GetThisFromHandle(window)) { + return that->MessageHandler(window, message, wparam, lparam); + } + + return DefWindowProc(window, message, wparam, lparam); +} + +LRESULT +Win32Window::MessageHandler(HWND hwnd, UINT const message, WPARAM const wparam, + LPARAM const lparam) noexcept { + switch (message) { + case WM_DESTROY: + window_handle_ = nullptr; + Destroy(); + if (quit_on_close_) { + PostQuitMessage(0); + } + return 0; + + case WM_DPICHANGED: { + auto newRectSize = reinterpret_cast(lparam); + LONG newWidth = newRectSize->right - newRectSize->left; + LONG newHeight = newRectSize->bottom - newRectSize->top; + + SetWindowPos(hwnd, nullptr, newRectSize->left, newRectSize->top, newWidth, + newHeight, SWP_NOZORDER | SWP_NOACTIVATE); + + return 0; + } + case WM_SIZE: { + RECT rect = GetClientArea(); + if (child_content_ != nullptr) { + // Size and position the child window. + MoveWindow(child_content_, rect.left, rect.top, rect.right - rect.left, + rect.bottom - rect.top, TRUE); + } + return 0; + } + + case WM_ACTIVATE: + if (child_content_ != nullptr) { + SetFocus(child_content_); + } + return 0; + + case WM_DWMCOLORIZATIONCOLORCHANGED: + UpdateTheme(hwnd); + return 0; + } + + return DefWindowProc(window_handle_, message, wparam, lparam); +} + +void Win32Window::Destroy() { + OnDestroy(); + + if (window_handle_) { + DestroyWindow(window_handle_); + window_handle_ = nullptr; + } + if (g_active_window_count == 0) { + WindowClassRegistrar::GetInstance()->UnregisterWindowClass(); + } +} + +Win32Window* Win32Window::GetThisFromHandle(HWND const window) noexcept { + return reinterpret_cast( + GetWindowLongPtr(window, GWLP_USERDATA)); +} + +void Win32Window::SetChildContent(HWND content) { + child_content_ = content; + SetParent(content, window_handle_); + RECT frame = GetClientArea(); + + MoveWindow(content, frame.left, frame.top, frame.right - frame.left, + frame.bottom - frame.top, true); + + SetFocus(child_content_); +} + +RECT Win32Window::GetClientArea() { + RECT frame; + GetClientRect(window_handle_, &frame); + return frame; +} + +HWND Win32Window::GetHandle() { return window_handle_; } + +void Win32Window::SetQuitOnClose(bool quit_on_close) { + quit_on_close_ = quit_on_close; +} + +bool Win32Window::OnCreate() { + // No-op; provided for subclasses. + return true; +} + +void Win32Window::OnDestroy() { + // No-op; provided for subclasses. +} + +void Win32Window::UpdateTheme(HWND const window) { + DWORD light_mode; + DWORD light_mode_size = sizeof(light_mode); + LSTATUS result = + RegGetValue(HKEY_CURRENT_USER, kGetPreferredBrightnessRegKey, + kGetPreferredBrightnessRegValue, RRF_RT_REG_DWORD, nullptr, + &light_mode, &light_mode_size); + + if (result == ERROR_SUCCESS) { + BOOL enable_dark_mode = light_mode == 0; + DwmSetWindowAttribute(window, DWMWA_USE_IMMERSIVE_DARK_MODE, + &enable_dark_mode, sizeof(enable_dark_mode)); + } +} diff --git a/mih_ui/android/build/macos/SourcePackages/firebase_app_check-0.4.5/example/windows/runner/win32_window.h b/mih_ui/android/build/macos/SourcePackages/firebase_app_check-0.4.5/example/windows/runner/win32_window.h new file mode 100644 index 00000000..dd242548 --- /dev/null +++ b/mih_ui/android/build/macos/SourcePackages/firebase_app_check-0.4.5/example/windows/runner/win32_window.h @@ -0,0 +1,104 @@ +// Copyright 2025, the Chromium project authors. Please see the AUTHORS file +// for details. All rights reserved. Use of this source code is governed by a +// BSD-style license that can be found in the LICENSE file. + +#ifndef RUNNER_WIN32_WINDOW_H_ +#define RUNNER_WIN32_WINDOW_H_ + +#include + +#include +#include +#include + +// A class abstraction for a high DPI-aware Win32 Window. Intended to be +// inherited from by classes that wish to specialize with custom +// rendering and input handling +class Win32Window { + public: + struct Point { + unsigned int x; + unsigned int y; + Point(unsigned int x, unsigned int y) : x(x), y(y) {} + }; + + struct Size { + unsigned int width; + unsigned int height; + Size(unsigned int width, unsigned int height) + : width(width), height(height) {} + }; + + Win32Window(); + virtual ~Win32Window(); + + // Creates a win32 window with |title| that is positioned and sized using + // |origin| and |size|. New windows are created on the default monitor. Window + // sizes are specified to the OS in physical pixels, hence to ensure a + // consistent size this function will scale the inputted width and height as + // as appropriate for the default monitor. The window is invisible until + // |Show| is called. Returns true if the window was created successfully. + bool Create(const std::wstring& title, const Point& origin, const Size& size); + + // Show the current window. Returns true if the window was successfully shown. + bool Show(); + + // Release OS resources associated with window. + void Destroy(); + + // Inserts |content| into the window tree. + void SetChildContent(HWND content); + + // Returns the backing Window handle to enable clients to set icon and other + // window properties. Returns nullptr if the window has been destroyed. + HWND GetHandle(); + + // If true, closing this window will quit the application. + void SetQuitOnClose(bool quit_on_close); + + // Return a RECT representing the bounds of the current client area. + RECT GetClientArea(); + + protected: + // Processes and route salient window messages for mouse handling, + // size change and DPI. Delegates handling of these to member overloads that + // inheriting classes can handle. + virtual LRESULT MessageHandler(HWND window, UINT const message, + WPARAM const wparam, + LPARAM const lparam) noexcept; + + // Called when CreateAndShow is called, allowing subclass window-related + // setup. Subclasses should return false if setup fails. + virtual bool OnCreate(); + + // Called when Destroy is called. + virtual void OnDestroy(); + + private: + friend class WindowClassRegistrar; + + // OS callback called by message pump. Handles the WM_NCCREATE message which + // is passed when the non-client area is being created and enables automatic + // non-client DPI scaling so that the non-client area automatically + // responds to changes in DPI. All other messages are handled by + // MessageHandler. + static LRESULT CALLBACK WndProc(HWND const window, UINT const message, + WPARAM const wparam, + LPARAM const lparam) noexcept; + + // Retrieves a class instance pointer for |window| + static Win32Window* GetThisFromHandle(HWND const window) noexcept; + + // Update the window frame's theme to match the system theme. + static void UpdateTheme(HWND const window); + + bool quit_on_close_ = false; + + // window handle for top level window. + HWND window_handle_ = nullptr; + + // window handle for hosted content. + HWND child_content_ = nullptr; +}; + +#endif // RUNNER_WIN32_WINDOW_H_ diff --git a/mih_ui/android/build/macos/SourcePackages/firebase_app_check-0.4.5/ios/firebase_app_check.podspec b/mih_ui/android/build/macos/SourcePackages/firebase_app_check-0.4.5/ios/firebase_app_check.podspec new file mode 100644 index 00000000..b4d81500 --- /dev/null +++ b/mih_ui/android/build/macos/SourcePackages/firebase_app_check-0.4.5/ios/firebase_app_check.podspec @@ -0,0 +1,46 @@ +require 'yaml' +pubspec = YAML.load_file(File.join('..', 'pubspec.yaml')) +library_version = pubspec['version'].gsub('+', '-') + +if defined?($FirebaseSDKVersion) + Pod::UI.puts "#{pubspec['name']}: Using user specified Firebase SDK version '#{$FirebaseSDKVersion}'" + firebase_sdk_version = $FirebaseSDKVersion +else + firebase_core_script = File.join(File.expand_path('..', File.expand_path('..', File.dirname(__FILE__))), 'firebase_core/ios/firebase_sdk_version.rb') + if File.exist?(firebase_core_script) + require firebase_core_script + firebase_sdk_version = firebase_sdk_version! + Pod::UI.puts "#{pubspec['name']}: Using Firebase SDK version '#{firebase_sdk_version}' defined in 'firebase_core'" + end +end + +Pod::Spec.new do |s| + s.name = pubspec['name'] + s.version = library_version + s.summary = pubspec['description'] + s.description = pubspec['description'] + s.homepage = pubspec['homepage'] + + s.license = { :file => '../LICENSE' } + s.authors = 'The Chromium Authors' + s.source = { :path => '.' } + s.source_files = 'firebase_app_check/Sources/firebase_app_check/**/*.swift' + s.ios.deployment_target = '15.0' + + # Flutter dependencies + s.dependency 'Flutter' + + # Firebase dependencies + s.dependency 'firebase_core' + s.dependency 'Firebase/CoreOnly', "~> #{firebase_sdk_version}" + s.dependency 'FirebaseAppCheck', "~> #{firebase_sdk_version}" + + s.static_framework = true + s.pod_target_xcconfig = { + 'GCC_PREPROCESSOR_DEFINITIONS' => "LIBRARY_VERSION=\\\"#{library_version}\\\" LIBRARY_NAME=\\\"flutter-fire-appcheck\\\"", + 'DEFINES_MODULE' => 'YES', + # Flutter.framework does not contain a i386 slice. + 'EXCLUDED_ARCHS[sdk=iphonesimulator*]' => 'i386' + } +end + diff --git a/mih_ui/android/build/macos/SourcePackages/firebase_app_check-0.4.5/ios/firebase_app_check/Package.swift b/mih_ui/android/build/macos/SourcePackages/firebase_app_check-0.4.5/ios/firebase_app_check/Package.swift new file mode 100644 index 00000000..14de1a76 --- /dev/null +++ b/mih_ui/android/build/macos/SourcePackages/firebase_app_check-0.4.5/ios/firebase_app_check/Package.swift @@ -0,0 +1,41 @@ +// swift-tools-version: 5.9 +// The swift-tools-version declares the minimum version of Swift required to build this package. + +// Copyright 2024, the Chromium project authors. Please see the AUTHORS file +// for details. All rights reserved. Use of this source code is governed by a +// BSD-style license that can be found in the LICENSE file. + +import PackageDescription + +let firebaseSdkVersion: Version = "12.15.0" + +let package = Package( + name: "firebase_app_check", + platforms: [ + .iOS("15.0") + ], + products: [ + .library(name: "firebase-app-check", targets: ["firebase_app_check"]) + ], + dependencies: [ + .package(url: "https://github.com/firebase/firebase-ios-sdk", exact: firebaseSdkVersion), + .package( + url: "https://github.com/GoogleCloudPlatform/recaptcha-enterprise-mobile-sdk.git", + from: "18.0.0" + ), + .package(name: "firebase_core", path: "../firebase_core"), + ], + targets: [ + .target( + name: "firebase_app_check", + dependencies: [ + .product(name: "FirebaseAppCheck", package: "firebase-ios-sdk"), + .product(name: "RecaptchaEnterprise", package: "recaptcha-enterprise-mobile-sdk"), + .product(name: "firebase-core", package: "firebase_core"), + ], + resources: [ + .process("Resources") + ] + ) + ] +) diff --git a/mih_ui/android/build/macos/SourcePackages/firebase_app_check-0.4.5/ios/firebase_app_check/Sources/firebase_app_check/Constants.swift b/mih_ui/android/build/macos/SourcePackages/firebase_app_check-0.4.5/ios/firebase_app_check/Sources/firebase_app_check/Constants.swift new file mode 100644 index 00000000..28a2ec57 --- /dev/null +++ b/mih_ui/android/build/macos/SourcePackages/firebase_app_check-0.4.5/ios/firebase_app_check/Sources/firebase_app_check/Constants.swift @@ -0,0 +1,6 @@ +// Copyright 2025 The Chromium Authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +/// Auto-generated file. Do not edit. +public let versionNumber = "0.4.5" diff --git a/mih_ui/android/build/macos/SourcePackages/firebase_app_check-0.4.5/ios/firebase_app_check/Sources/firebase_app_check/FirebaseAppCheckMessages.g.swift b/mih_ui/android/build/macos/SourcePackages/firebase_app_check-0.4.5/ios/firebase_app_check/Sources/firebase_app_check/FirebaseAppCheckMessages.g.swift new file mode 100644 index 00000000..d8f3a100 --- /dev/null +++ b/mih_ui/android/build/macos/SourcePackages/firebase_app_check-0.4.5/ios/firebase_app_check/Sources/firebase_app_check/FirebaseAppCheckMessages.g.swift @@ -0,0 +1,236 @@ +// Copyright 2025, the Chromium project authors. Please see the AUTHORS file +// for details. All rights reserved. Use of this source code is governed by a +// BSD-style license that can be found in the LICENSE file. +// Autogenerated from Pigeon (v26.3.4), do not edit directly. +// See also: https://pub.dev/packages/pigeon + +import Foundation + +#if os(iOS) + import Flutter +#elseif os(macOS) + import FlutterMacOS +#else + #error("Unsupported platform.") +#endif + +/// Error class for passing custom error details to Dart side. +final class PigeonError: Error { + let code: String + let message: String? + let details: Sendable? + + init(code: String, message: String?, details: Sendable?) { + self.code = code + self.message = message + self.details = details + } + + var localizedDescription: String { + "PigeonError(code: \(code), message: \(message ?? ""), details: \(details ?? "")" + } +} + +private func wrapResult(_ result: Any?) -> [Any?] { + [result] +} + +private func wrapError(_ error: Any) -> [Any?] { + if let pigeonError = error as? PigeonError { + return [ + pigeonError.code, + pigeonError.message, + pigeonError.details, + ] + } + if let flutterError = error as? FlutterError { + return [ + flutterError.code, + flutterError.message, + flutterError.details, + ] + } + return [ + "\(error)", + "\(Swift.type(of: error))", + "Stacktrace: \(Thread.callStackSymbols)", + ] +} + +private func isNullish(_ value: Any?) -> Bool { + value is NSNull || value == nil +} + +private func nilOrValue(_ value: Any?) -> T? { + if value is NSNull { return nil } + return value as! T? +} + +private class FirebaseAppCheckMessagesPigeonCodecReader: FlutterStandardReader {} + +private class FirebaseAppCheckMessagesPigeonCodecWriter: FlutterStandardWriter {} + +private class FirebaseAppCheckMessagesPigeonCodecReaderWriter: FlutterStandardReaderWriter { + override func reader(with data: Data) -> FlutterStandardReader { + FirebaseAppCheckMessagesPigeonCodecReader(data: data) + } + + override func writer(with data: NSMutableData) -> FlutterStandardWriter { + FirebaseAppCheckMessagesPigeonCodecWriter(data: data) + } +} + +class FirebaseAppCheckMessagesPigeonCodec: FlutterStandardMessageCodec, @unchecked Sendable { + static let shared = FirebaseAppCheckMessagesPigeonCodec( + readerWriter: FirebaseAppCheckMessagesPigeonCodecReaderWriter() + ) +} + +/// Generated protocol from Pigeon that represents a handler of messages from Flutter. +protocol FirebaseAppCheckHostApi { + func activate( + appName: String, androidProvider: String?, appleProvider: String?, + debugToken: String?, + completion: @escaping (Result) -> Void) + func getToken( + appName: String, forceRefresh: Bool, + completion: @escaping (Result) -> Void) + func setTokenAutoRefreshEnabled( + appName: String, isTokenAutoRefreshEnabled: Bool, + completion: @escaping (Result) -> Void) + func registerTokenListener(appName: String, completion: @escaping (Result) -> Void) + func getLimitedUseAppCheckToken( + appName: String, + completion: @escaping (Result) -> Void) +} + +/// Generated setup class from Pigeon to handle messages through the `binaryMessenger`. +class FirebaseAppCheckHostApiSetup { + static var codec: FlutterStandardMessageCodec { + FirebaseAppCheckMessagesPigeonCodec.shared + } + + /// Sets up an instance of `FirebaseAppCheckHostApi` to handle messages through the + /// `binaryMessenger`. + static func setUp( + binaryMessenger: FlutterBinaryMessenger, api: FirebaseAppCheckHostApi?, + messageChannelSuffix: String = "" + ) { + let channelSuffix = messageChannelSuffix.count > 0 ? ".\(messageChannelSuffix)" : "" + let activateChannel = FlutterBasicMessageChannel( + name: + "dev.flutter.pigeon.firebase_app_check_platform_interface.FirebaseAppCheckHostApi.activate\(channelSuffix)", + binaryMessenger: binaryMessenger, codec: codec + ) + if let api { + activateChannel.setMessageHandler { message, reply in + let args = message as! [Any?] + let appNameArg = args[0] as! String + let androidProviderArg: String? = nilOrValue(args[1]) + let appleProviderArg: String? = nilOrValue(args[2]) + let debugTokenArg: String? = nilOrValue(args[3]) + api.activate( + appName: appNameArg, androidProvider: androidProviderArg, appleProvider: appleProviderArg, + debugToken: debugTokenArg + ) { result in + switch result { + case .success: + reply(wrapResult(nil)) + case .failure(let error): + reply(wrapError(error)) + } + } + } + } else { + activateChannel.setMessageHandler(nil) + } + let getTokenChannel = FlutterBasicMessageChannel( + name: + "dev.flutter.pigeon.firebase_app_check_platform_interface.FirebaseAppCheckHostApi.getToken\(channelSuffix)", + binaryMessenger: binaryMessenger, codec: codec + ) + if let api { + getTokenChannel.setMessageHandler { message, reply in + let args = message as! [Any?] + let appNameArg = args[0] as! String + let forceRefreshArg = args[1] as! Bool + api.getToken(appName: appNameArg, forceRefresh: forceRefreshArg) { result in + switch result { + case .success(let res): + reply(wrapResult(res)) + case .failure(let error): + reply(wrapError(error)) + } + } + } + } else { + getTokenChannel.setMessageHandler(nil) + } + let setTokenAutoRefreshEnabledChannel = FlutterBasicMessageChannel( + name: + "dev.flutter.pigeon.firebase_app_check_platform_interface.FirebaseAppCheckHostApi.setTokenAutoRefreshEnabled\(channelSuffix)", + binaryMessenger: binaryMessenger, codec: codec + ) + if let api { + setTokenAutoRefreshEnabledChannel.setMessageHandler { message, reply in + let args = message as! [Any?] + let appNameArg = args[0] as! String + let isTokenAutoRefreshEnabledArg = args[1] as! Bool + api.setTokenAutoRefreshEnabled( + appName: appNameArg, isTokenAutoRefreshEnabled: isTokenAutoRefreshEnabledArg + ) { result in + switch result { + case .success: + reply(wrapResult(nil)) + case .failure(let error): + reply(wrapError(error)) + } + } + } + } else { + setTokenAutoRefreshEnabledChannel.setMessageHandler(nil) + } + let registerTokenListenerChannel = FlutterBasicMessageChannel( + name: + "dev.flutter.pigeon.firebase_app_check_platform_interface.FirebaseAppCheckHostApi.registerTokenListener\(channelSuffix)", + binaryMessenger: binaryMessenger, codec: codec + ) + if let api { + registerTokenListenerChannel.setMessageHandler { message, reply in + let args = message as! [Any?] + let appNameArg = args[0] as! String + api.registerTokenListener(appName: appNameArg) { result in + switch result { + case .success(let res): + reply(wrapResult(res)) + case .failure(let error): + reply(wrapError(error)) + } + } + } + } else { + registerTokenListenerChannel.setMessageHandler(nil) + } + let getLimitedUseAppCheckTokenChannel = FlutterBasicMessageChannel( + name: + "dev.flutter.pigeon.firebase_app_check_platform_interface.FirebaseAppCheckHostApi.getLimitedUseAppCheckToken\(channelSuffix)", + binaryMessenger: binaryMessenger, codec: codec + ) + if let api { + getLimitedUseAppCheckTokenChannel.setMessageHandler { message, reply in + let args = message as! [Any?] + let appNameArg = args[0] as! String + api.getLimitedUseAppCheckToken(appName: appNameArg) { result in + switch result { + case .success(let res): + reply(wrapResult(res)) + case .failure(let error): + reply(wrapError(error)) + } + } + } + } else { + getLimitedUseAppCheckTokenChannel.setMessageHandler(nil) + } + } +} diff --git a/mih_ui/android/build/macos/SourcePackages/firebase_app_check-0.4.5/ios/firebase_app_check/Sources/firebase_app_check/FirebaseAppCheckPlugin.swift b/mih_ui/android/build/macos/SourcePackages/firebase_app_check-0.4.5/ios/firebase_app_check/Sources/firebase_app_check/FirebaseAppCheckPlugin.swift new file mode 100644 index 00000000..2d63a765 --- /dev/null +++ b/mih_ui/android/build/macos/SourcePackages/firebase_app_check-0.4.5/ios/firebase_app_check/Sources/firebase_app_check/FirebaseAppCheckPlugin.swift @@ -0,0 +1,369 @@ +// Copyright 2025 The Chromium Authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +import FirebaseAppCheck +import FirebaseCore + +#if canImport(FlutterMacOS) + import FlutterMacOS +#else + import Flutter +#endif + +#if canImport(firebase_core) + import firebase_core +#else + import firebase_core_shared +#endif + +let kFirebaseAppCheckChannelName = "plugins.flutter.io/firebase_app_check" +let kFirebaseAppCheckTokenChannelPrefix = "plugins.flutter.io/firebase_app_check/token/" + +// swift-format-ignore: AvoidRetroactiveConformances +extension FlutterError: @retroactive Error {} + +public class FirebaseAppCheckPlugin: NSObject, FlutterPlugin, + FLTFirebasePluginProtocol, FirebaseAppCheckHostApi +{ + private var eventChannels: [String: FlutterEventChannel] = [:] + private var streamHandlers: [String: AppCheckTokenStreamHandler] = [:] + private var providerFactory: FlutterAppCheckProviderFactory? + + static let shared: FirebaseAppCheckPlugin = { + let instance = FirebaseAppCheckPlugin() + instance.providerFactory = FlutterAppCheckProviderFactory() + AppCheck.setAppCheckProviderFactory(instance.providerFactory) + FLTFirebasePluginRegistry.sharedInstance().register(instance) + return instance + }() + + public static func register(with registrar: FlutterPluginRegistrar) { + let binaryMessenger: FlutterBinaryMessenger + + #if os(macOS) + binaryMessenger = registrar.messenger + #elseif os(iOS) + binaryMessenger = registrar.messenger() + #endif + + let instance = shared + instance.binaryMessenger = binaryMessenger + FirebaseAppCheckHostApiSetup.setUp(binaryMessenger: binaryMessenger, api: instance) + + if FirebaseApp.responds(to: NSSelectorFromString("registerLibrary:withVersion:")) { + FirebaseApp.perform( + NSSelectorFromString("registerLibrary:withVersion:"), + with: instance.firebaseLibraryName(), + with: instance.firebaseLibraryVersion() + ) + } + } + + private var binaryMessenger: FlutterBinaryMessenger? + + func activate( + appName: String, androidProvider: String?, appleProvider: String?, + debugToken: String?, + completion: @escaping (Result) -> Void + ) { + guard let app = FLTFirebasePlugin.firebaseAppNamed(appName) else { + completion( + .failure( + FlutterError( + code: "unknown", message: "Firebase app not found: \(appName)", details: nil + ) + ) + ) + return + } + let provider = appleProvider ?? "deviceCheck" + + providerFactory?.configure( + app: app, + providerName: provider, + debugToken: debugToken + ) + + completion(.success(())) + } + + func getToken( + appName: String, forceRefresh: Bool, + completion: @escaping (Result) -> Void + ) { + guard let app = FLTFirebasePlugin.firebaseAppNamed(appName), + let appCheck = AppCheck.appCheck(app: app) + else { + completion( + .failure( + FlutterError( + code: "unknown", message: "App Check not available for app: \(appName)", details: nil + ) + ) + ) + return + } + + appCheck.token(forcingRefresh: forceRefresh) { token, error in + if let error { + completion(.failure(self.createFlutterError(error))) + } else { + completion(.success(token?.token)) + } + } + } + + func setTokenAutoRefreshEnabled( + appName: String, isTokenAutoRefreshEnabled: Bool, + completion: @escaping (Result) -> Void + ) { + guard let app = FLTFirebasePlugin.firebaseAppNamed(appName), + let appCheck = AppCheck.appCheck(app: app) + else { + completion( + .failure( + FlutterError( + code: "unknown", message: "App Check not available for app: \(appName)", details: nil + ) + ) + ) + return + } + appCheck.isTokenAutoRefreshEnabled = isTokenAutoRefreshEnabled + completion(.success(())) + } + + func registerTokenListener( + appName: String, + completion: @escaping (Result) -> Void + ) { + let name = kFirebaseAppCheckTokenChannelPrefix + appName + + guard let messenger = binaryMessenger else { + completion( + .failure( + FlutterError( + code: "no-messenger", + message: "Binary messenger not available", + details: nil + ) + ) + ) + return + } + + let channel = FlutterEventChannel(name: name, binaryMessenger: messenger) + let handler = AppCheckTokenStreamHandler() + channel.setStreamHandler(handler) + + eventChannels[name] = channel + streamHandlers[name] = handler + + completion(.success(name)) + } + + func getLimitedUseAppCheckToken( + appName: String, + completion: @escaping (Result) -> Void + ) { + guard let app = FLTFirebasePlugin.firebaseAppNamed(appName), + let appCheck = AppCheck.appCheck(app: app) + else { + completion( + .failure( + FlutterError( + code: "unknown", message: "App Check not available for app: \(appName)", details: nil + ) + ) + ) + return + } + + appCheck.limitedUseToken { token, error in + if let error { + completion(.failure(self.createFlutterError(error))) + } else { + completion(.success(token?.token ?? "")) + } + } + } + + // MARK: - FLTFirebasePluginProtocol + + public func didReinitializeFirebaseCore(_ completion: @escaping () -> Void) { + for (_, channel) in eventChannels { + channel.setStreamHandler(nil) + } + for (_, handler) in streamHandlers { + _ = handler.onCancel(withArguments: nil) + } + eventChannels.removeAll() + streamHandlers.removeAll() + completion() + } + + public func pluginConstants(for firebaseApp: FirebaseApp) -> [AnyHashable: Any] { + [:] + } + + public func firebaseLibraryName() -> String { + "flutter-fire-appcheck" + } + + public func firebaseLibraryVersion() -> String { + versionNumber + } + + public func flutterChannelName() -> String { + kFirebaseAppCheckChannelName + } + + private func createFlutterError(_ error: Error) -> FlutterError { + let nsError = error as NSError + var code = "unknown" + switch nsError.code { + case 0: // FIRAppCheckErrorCodeServerUnreachable + code = "server-unreachable" + case 1: // FIRAppCheckErrorCodeInvalidConfiguration + code = "invalid-configuration" + case 2: // FIRAppCheckErrorCodeKeychain + code = "code-keychain" + case 3: // FIRAppCheckErrorCodeUnsupported + code = "code-unsupported" + default: + code = "unknown" + } + return FlutterError( + code: code, + message: nsError.localizedDescription, + details: nil + ) + } +} + +// MARK: - Token Stream Handler + +class AppCheckTokenStreamHandler: NSObject, FlutterStreamHandler { + private var observer: NSObjectProtocol? + + func onListen( + withArguments arguments: Any?, + eventSink events: @escaping FlutterEventSink + ) -> FlutterError? { + observer = NotificationCenter.default.addObserver( + forName: NSNotification.Name("FIRAppCheckAppCheckTokenDidChangeNotification"), + object: nil, + queue: nil + ) { notification in + if let token = notification.userInfo?["FIRAppCheckTokenNotificationKey"] as? String { + events(["token": token]) + } + } + return nil + } + + func onCancel(withArguments arguments: Any?) -> FlutterError? { + if let observer { + NotificationCenter.default.removeObserver(observer) + self.observer = nil + } + return nil + } +} + +// MARK: - App Check Provider Factory + +class FlutterAppCheckProviderFactory: NSObject, AppCheckProviderFactory { + private var providers: [String: AppCheckProviderWrapper] = [:] + + func createProvider(with app: FirebaseApp) -> (any AppCheckProvider)? { + if providers[app.name] == nil { + let wrapper = AppCheckProviderWrapper() + // Default to deviceCheck. activate() will reconfigure with the correct provider. + wrapper.configure( + app: app, + providerName: "deviceCheck", + debugToken: nil + ) + providers[app.name] = wrapper + } + return providers[app.name] + } + + func configure( + app: FirebaseApp, + providerName: String, + debugToken: String? + ) { + if providers[app.name] == nil { + providers[app.name] = AppCheckProviderWrapper() + } + providers[app.name]?.configure( + app: app, + providerName: providerName, + debugToken: debugToken + ) + } +} + +class AppCheckProviderWrapper: NSObject, AppCheckProvider { + private var delegateProvider: (any AppCheckProvider)? + + func configure( + app: FirebaseApp, + providerName: String, + debugToken: String? + ) { + switch providerName { + case "debug": + if let debugToken { + setenv("FIRAAppCheckDebugToken", debugToken, 1) + } + delegateProvider = AppCheckDebugProvider(app: app) + if debugToken == nil, let debugProvider = delegateProvider as? AppCheckDebugProvider { + print("Firebase App Check Debug Token: \(debugProvider.localDebugToken())") + } + case "appAttest": + if #available(iOS 14.0, macOS 14.0, macCatalyst 14.0, tvOS 15.0, watchOS 9.0, *) { + delegateProvider = AppAttestProvider(app: app) + } else { + delegateProvider = AppCheckDebugProvider(app: app) + } + case "appAttestWithDeviceCheckFallback": + if #available(iOS 14.0, macOS 14.0, *) { + delegateProvider = AppAttestProvider(app: app) + } else { + delegateProvider = DeviceCheckProvider(app: app) + } + case "recaptcha": + #if os(iOS) + delegateProvider = RecaptchaProvider(app: app) + if delegateProvider == nil { + print( + "Firebase App Check: failed to initialize RecaptchaProvider. Ensure site key is in GoogleService-Info.plist." + ) + } + #else + print("Firebase App Check: reCAPTCHA is only supported on iOS.") + #endif + default: + // deviceCheck + delegateProvider = DeviceCheckProvider(app: app) + } + } + + func getToken(completion handler: @escaping (AppCheckToken?, Error?) -> Void) { + guard let delegateProvider else { + handler( + nil, + NSError( + domain: "firebase_app_check", code: -1, + userInfo: [NSLocalizedDescriptionKey: "Provider not configured"] + ) + ) + return + } + delegateProvider.getToken(completion: handler) + } +} diff --git a/mih_ui/android/build/macos/SourcePackages/firebase_app_check-0.4.5/lib/firebase_app_check.dart b/mih_ui/android/build/macos/SourcePackages/firebase_app_check-0.4.5/lib/firebase_app_check.dart new file mode 100644 index 00000000..5e6a8cc9 --- /dev/null +++ b/mih_ui/android/build/macos/SourcePackages/firebase_app_check-0.4.5/lib/firebase_app_check.dart @@ -0,0 +1,34 @@ +// ignore_for_file: require_trailing_commas +// Copyright 2019 The Chromium Authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +import 'package:firebase_app_check_platform_interface/firebase_app_check_platform_interface.dart'; +import 'package:firebase_core/firebase_core.dart'; +import 'package:firebase_core_platform_interface/firebase_core_platform_interface.dart'; + +export 'package:firebase_app_check_platform_interface/firebase_app_check_platform_interface.dart' + show + AndroidProvider, + AndroidAppCheckProvider, + AndroidDebugProvider, + AndroidPlayIntegrityProvider, + AndroidReCaptchaProvider, + AppleProvider, + AppleAppCheckProvider, + AppleDebugProvider, + AppleDeviceCheckProvider, + AppleAppAttestProvider, + AppleAppAttestWithDeviceCheckFallbackProvider, + AppleReCaptchaProvider, + ReCaptchaEnterpriseProvider, + ReCaptchaV3Provider, + WebDebugProvider, + WebProvider, + WebReCaptchaProvider, + WindowsAppCheckProvider, + WindowsDebugProvider; +export 'package:firebase_core_platform_interface/firebase_core_platform_interface.dart' + show FirebaseException; + +part 'src/firebase_app_check.dart'; diff --git a/mih_ui/android/build/macos/SourcePackages/firebase_app_check-0.4.5/lib/src/firebase_app_check.dart b/mih_ui/android/build/macos/SourcePackages/firebase_app_check-0.4.5/lib/src/firebase_app_check.dart new file mode 100644 index 00000000..8deabfc9 --- /dev/null +++ b/mih_ui/android/build/macos/SourcePackages/firebase_app_check-0.4.5/lib/src/firebase_app_check.dart @@ -0,0 +1,156 @@ +// ignore_for_file: require_trailing_commas +// Copyright 2021 The Chromium Authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +part of '../firebase_app_check.dart'; + +class FirebaseAppCheck extends FirebasePluginPlatform + implements FirebaseService { + static Map _firebaseAppCheckInstances = {}; + + FirebaseAppCheck._({required this.app}) + : super(app.name, 'plugins.flutter.io/firebase_app_check'); + + /// The [FirebaseApp] for this current [FirebaseAppCheck] instance. + FirebaseApp app; + + // Cached and lazily loaded instance of [FirebaseAppCheckPlatform] to avoid + // creating a [MethodChannelFirebaseAppCheck] when not needed or creating an + // instance with the default app before a user specifies an app. + FirebaseAppCheckPlatform? _delegatePackingProperty; + + /// Returns the underlying delegate implementation. + /// + /// If called and no [_delegatePackingProperty] exists, it will first be + /// created and assigned before returning the delegate. + FirebaseAppCheckPlatform get _delegate { + _delegatePackingProperty ??= FirebaseAppCheckPlatform.instanceFor( + app: app, + ); + + return _delegatePackingProperty!; + } + + /// Returns an instance using the default [FirebaseApp]. + static FirebaseAppCheck get instance { + FirebaseApp defaultAppInstance = Firebase.app(); + + return FirebaseAppCheck.instanceFor(app: defaultAppInstance); + } + + /// Returns an instance using a specified [FirebaseApp]. + static FirebaseAppCheck instanceFor({required FirebaseApp app}) { + return _firebaseAppCheckInstances.putIfAbsent(app.name, () { + final instance = FirebaseAppCheck._(app: app); + app.registerService( + instance, + dispose: (appCheck) => appCheck._dispose(), + ); + return instance; + }); + } + + Future _dispose() async { + _firebaseAppCheckInstances.remove(app.name); + final delegate = _delegatePackingProperty; + _delegatePackingProperty = null; + await delegate?.dispose(); + } + + /// Activates the Firebase App Check service. + /// + /// ## Platform Configuration + /// + /// **Web**: Provide the reCAPTCHA v3 Site Key using `webProvider`, which can be + /// found in the Firebase Console. + /// + /// **Android**: The default provider is "play integrity". Use `providerAndroid` + /// to configure alternative providers such as "safety net", debug providers, or + /// custom implementations via `AndroidAppCheckProvider`. + /// + /// **iOS/macOS**: The default provider is "device check". Use `providerApple` + /// to configure alternative providers such as "app attest", debug providers, or + /// "app attest with fallback to device check" via `AppleAppCheckProvider`. + /// Note: App Attest is only available on iOS 14.0+ and macOS 14.0+. + /// + /// **Windows**: Only the debug provider is supported. You **must** supply a + /// debug token — the desktop C++ SDK does not auto-generate one. Either pass + /// it via `providerWindows: WindowsDebugProvider(debugToken: 'your-token')` + /// or set the `APP_CHECK_DEBUG_TOKEN` environment variable. The token must + /// first be registered in the Firebase Console under + /// *App Check → Apps → Manage debug tokens*. + /// + /// ## Migration Notice + /// + /// The `androidProvider` and `appleProvider` parameters will be deprecated + /// in a future release. Use `providerAndroid` and `providerApple` instead, + /// which support the new provider classes including `AndroidDebugProvider` + /// and `AppleDebugProvider` for passing debug tokens directly. + /// + /// For more information, see [the Firebase Documentation](https://firebase.google.com/docs/app-check) + Future activate({ + @Deprecated( + 'Use providerWeb instead. ' + 'This parameter will be removed in a future major release.', + ) + WebProvider? webProvider, + WebProvider? providerWeb, + @Deprecated( + 'Use providerAndroid instead. ' + 'This parameter will be removed in a future major release.', + ) + AndroidProvider androidProvider = AndroidProvider.playIntegrity, + @Deprecated( + 'Use providerApple instead. ' + 'This parameter will be removed in a future major release.', + ) + AppleProvider appleProvider = AppleProvider.deviceCheck, + AndroidAppCheckProvider providerAndroid = + const AndroidPlayIntegrityProvider(), + AppleAppCheckProvider providerApple = const AppleDeviceCheckProvider(), + WindowsAppCheckProvider providerWindows = const WindowsDebugProvider(), + }) { + return _delegate.activate( + webProvider: providerWeb ?? webProvider, + // ignore: deprecated_member_use + androidProvider: androidProvider, + // ignore: deprecated_member_use + appleProvider: appleProvider, + providerAndroid: providerAndroid, + providerApple: providerApple, + providerWindows: providerWindows, + ); + } + + /// Get the current App Check token. + /// + /// Attaches to the most recent in-flight request if one is present. Returns + /// null if no token is present and no token requests are in-flight. + /// + /// If `forceRefresh` is true, will always try to fetch a fresh token. If + /// false, will use a cached token if found in storage. + Future getToken([bool? forceRefresh]) async { + return _delegate.getToken(forceRefresh ?? false); + } + + /// If true, the SDK automatically refreshes App Check tokens as needed. + Future setTokenAutoRefreshEnabled(bool isTokenAutoRefreshEnabled) { + return _delegate.setTokenAutoRefreshEnabled(isTokenAutoRefreshEnabled); + } + + /// Requests a limited-use Firebase App Check token. This method should be used only + /// if you need to authorize requests to a non-Firebase backend. + // + // Returns limited-use tokens that are intended for use with your non-Firebase backend + // endpoints that are protected with Replay Protection. This method does not affect + // the token generation behavior of the `getToken()` method. + Future getLimitedUseToken() { + return _delegate.getLimitedUseToken(); + } + + /// Registers a listener to changes in the token state. + Stream get onTokenChange { + return _delegate.onTokenChange; + } +} diff --git a/mih_ui/android/build/macos/SourcePackages/firebase_app_check-0.4.5/macos/firebase_app_check.podspec b/mih_ui/android/build/macos/SourcePackages/firebase_app_check-0.4.5/macos/firebase_app_check.podspec new file mode 100644 index 00000000..497fbc64 --- /dev/null +++ b/mih_ui/android/build/macos/SourcePackages/firebase_app_check-0.4.5/macos/firebase_app_check.podspec @@ -0,0 +1,63 @@ +require 'yaml' + +pubspec = YAML.load_file(File.join('..', 'pubspec.yaml')) +library_version = pubspec['version'].gsub('+', '-') + +if defined?($FirebaseSDKVersion) + Pod::UI.puts "#{pubspec['name']}: Using user specified Firebase SDK version '#{$FirebaseSDKVersion}'" + firebase_sdk_version = $FirebaseSDKVersion +else + firebase_core_script = File.join(File.expand_path('..', File.expand_path('..', File.dirname(__FILE__))), 'firebase_core/ios/firebase_sdk_version.rb') + if File.exist?(firebase_core_script) + require firebase_core_script + firebase_sdk_version = firebase_sdk_version! + Pod::UI.puts "#{pubspec['name']}: Using Firebase SDK version '#{firebase_sdk_version}' defined in 'firebase_core'" + end +end + +begin + required_macos_version = "10.15" + current_target_definition = Pod::Config.instance.podfile.send(:current_target_definition) + user_osx_target = current_target_definition.to_hash["platform"]["osx"] + if (Gem::Version.new(user_osx_target) < Gem::Version.new(required_macos_version)) + error_message = "The FlutterFire plugin #{pubspec['name']} for macOS requires a macOS deployment target of #{required_macos_version} or later." + Pod::UI.warn error_message, [ + "Update the `platform :osx, '#{user_osx_target}'` line in your macOS/Podfile to version `#{required_macos_version}` and ensure you commit this file.", + "Open your `macos/Runner.xcodeproj` Xcode project and under the 'Runner' target General tab set your Deployment Target to #{required_macos_version} or later." + ] + raise Pod::Informative, error_message + end +rescue Pod::Informative + raise +rescue + # Do nothing for all other errors and let `pod install` deal with any issues. +end + +Pod::Spec.new do |s| + s.name = pubspec['name'] + s.version = library_version + s.summary = pubspec['description'] + s.description = pubspec['description'] + s.homepage = pubspec['homepage'] + s.license = { :file => '../LICENSE' } + s.authors = 'The Chromium Authors' + s.source = { :path => '.' } + + s.source_files = 'firebase_app_check/Sources/firebase_app_check/**/*.swift' + + s.platform = :osx, '10.13' + + # Flutter dependencies + s.dependency 'FlutterMacOS' + + # Firebase dependencies + s.dependency 'firebase_core' + s.dependency 'Firebase/CoreOnly', "~> #{firebase_sdk_version}" + s.dependency 'Firebase/AppCheck', "~> #{firebase_sdk_version}" + + s.static_framework = true + s.pod_target_xcconfig = { + 'GCC_PREPROCESSOR_DEFINITIONS' => "LIBRARY_VERSION=\\\"#{library_version}\\\" LIBRARY_NAME=\\\"flutter-fire-appcheck\\\"", + 'DEFINES_MODULE' => 'YES' + } +end diff --git a/mih_ui/android/build/macos/SourcePackages/firebase_app_check-0.4.5/macos/firebase_app_check/Package.swift b/mih_ui/android/build/macos/SourcePackages/firebase_app_check-0.4.5/macos/firebase_app_check/Package.swift new file mode 100644 index 00000000..9078dffe --- /dev/null +++ b/mih_ui/android/build/macos/SourcePackages/firebase_app_check-0.4.5/macos/firebase_app_check/Package.swift @@ -0,0 +1,36 @@ +// swift-tools-version: 5.9 +// The swift-tools-version declares the minimum version of Swift required to build this package. + +// Copyright 2024, the Chromium project authors. Please see the AUTHORS file +// for details. All rights reserved. Use of this source code is governed by a +// BSD-style license that can be found in the LICENSE file. + +import PackageDescription + +let firebaseSdkVersion: Version = "12.15.0" + +let package = Package( + name: "firebase_app_check", + platforms: [ + .macOS("10.15") + ], + products: [ + .library(name: "firebase-app-check", targets: ["firebase_app_check"]) + ], + dependencies: [ + .package(url: "https://github.com/firebase/firebase-ios-sdk", exact: firebaseSdkVersion), + .package(name: "firebase_core", path: "../firebase_core-4.11.0"), + ], + targets: [ + .target( + name: "firebase_app_check", + dependencies: [ + .product(name: "FirebaseAppCheck", package: "firebase-ios-sdk"), + .product(name: "firebase-core", package: "firebase_core"), + ], + resources: [ + .process("Resources") + ] + ) + ] +) diff --git a/mih_ui/android/build/macos/SourcePackages/firebase_app_check-0.4.5/macos/firebase_app_check/Sources/firebase_app_check/Constants.swift b/mih_ui/android/build/macos/SourcePackages/firebase_app_check-0.4.5/macos/firebase_app_check/Sources/firebase_app_check/Constants.swift new file mode 100644 index 00000000..28a2ec57 --- /dev/null +++ b/mih_ui/android/build/macos/SourcePackages/firebase_app_check-0.4.5/macos/firebase_app_check/Sources/firebase_app_check/Constants.swift @@ -0,0 +1,6 @@ +// Copyright 2025 The Chromium Authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +/// Auto-generated file. Do not edit. +public let versionNumber = "0.4.5" diff --git a/mih_ui/android/build/macos/SourcePackages/firebase_app_check-0.4.5/macos/firebase_app_check/Sources/firebase_app_check/FirebaseAppCheckMessages.g.swift b/mih_ui/android/build/macos/SourcePackages/firebase_app_check-0.4.5/macos/firebase_app_check/Sources/firebase_app_check/FirebaseAppCheckMessages.g.swift new file mode 100644 index 00000000..d8f3a100 --- /dev/null +++ b/mih_ui/android/build/macos/SourcePackages/firebase_app_check-0.4.5/macos/firebase_app_check/Sources/firebase_app_check/FirebaseAppCheckMessages.g.swift @@ -0,0 +1,236 @@ +// Copyright 2025, the Chromium project authors. Please see the AUTHORS file +// for details. All rights reserved. Use of this source code is governed by a +// BSD-style license that can be found in the LICENSE file. +// Autogenerated from Pigeon (v26.3.4), do not edit directly. +// See also: https://pub.dev/packages/pigeon + +import Foundation + +#if os(iOS) + import Flutter +#elseif os(macOS) + import FlutterMacOS +#else + #error("Unsupported platform.") +#endif + +/// Error class for passing custom error details to Dart side. +final class PigeonError: Error { + let code: String + let message: String? + let details: Sendable? + + init(code: String, message: String?, details: Sendable?) { + self.code = code + self.message = message + self.details = details + } + + var localizedDescription: String { + "PigeonError(code: \(code), message: \(message ?? ""), details: \(details ?? "")" + } +} + +private func wrapResult(_ result: Any?) -> [Any?] { + [result] +} + +private func wrapError(_ error: Any) -> [Any?] { + if let pigeonError = error as? PigeonError { + return [ + pigeonError.code, + pigeonError.message, + pigeonError.details, + ] + } + if let flutterError = error as? FlutterError { + return [ + flutterError.code, + flutterError.message, + flutterError.details, + ] + } + return [ + "\(error)", + "\(Swift.type(of: error))", + "Stacktrace: \(Thread.callStackSymbols)", + ] +} + +private func isNullish(_ value: Any?) -> Bool { + value is NSNull || value == nil +} + +private func nilOrValue(_ value: Any?) -> T? { + if value is NSNull { return nil } + return value as! T? +} + +private class FirebaseAppCheckMessagesPigeonCodecReader: FlutterStandardReader {} + +private class FirebaseAppCheckMessagesPigeonCodecWriter: FlutterStandardWriter {} + +private class FirebaseAppCheckMessagesPigeonCodecReaderWriter: FlutterStandardReaderWriter { + override func reader(with data: Data) -> FlutterStandardReader { + FirebaseAppCheckMessagesPigeonCodecReader(data: data) + } + + override func writer(with data: NSMutableData) -> FlutterStandardWriter { + FirebaseAppCheckMessagesPigeonCodecWriter(data: data) + } +} + +class FirebaseAppCheckMessagesPigeonCodec: FlutterStandardMessageCodec, @unchecked Sendable { + static let shared = FirebaseAppCheckMessagesPigeonCodec( + readerWriter: FirebaseAppCheckMessagesPigeonCodecReaderWriter() + ) +} + +/// Generated protocol from Pigeon that represents a handler of messages from Flutter. +protocol FirebaseAppCheckHostApi { + func activate( + appName: String, androidProvider: String?, appleProvider: String?, + debugToken: String?, + completion: @escaping (Result) -> Void) + func getToken( + appName: String, forceRefresh: Bool, + completion: @escaping (Result) -> Void) + func setTokenAutoRefreshEnabled( + appName: String, isTokenAutoRefreshEnabled: Bool, + completion: @escaping (Result) -> Void) + func registerTokenListener(appName: String, completion: @escaping (Result) -> Void) + func getLimitedUseAppCheckToken( + appName: String, + completion: @escaping (Result) -> Void) +} + +/// Generated setup class from Pigeon to handle messages through the `binaryMessenger`. +class FirebaseAppCheckHostApiSetup { + static var codec: FlutterStandardMessageCodec { + FirebaseAppCheckMessagesPigeonCodec.shared + } + + /// Sets up an instance of `FirebaseAppCheckHostApi` to handle messages through the + /// `binaryMessenger`. + static func setUp( + binaryMessenger: FlutterBinaryMessenger, api: FirebaseAppCheckHostApi?, + messageChannelSuffix: String = "" + ) { + let channelSuffix = messageChannelSuffix.count > 0 ? ".\(messageChannelSuffix)" : "" + let activateChannel = FlutterBasicMessageChannel( + name: + "dev.flutter.pigeon.firebase_app_check_platform_interface.FirebaseAppCheckHostApi.activate\(channelSuffix)", + binaryMessenger: binaryMessenger, codec: codec + ) + if let api { + activateChannel.setMessageHandler { message, reply in + let args = message as! [Any?] + let appNameArg = args[0] as! String + let androidProviderArg: String? = nilOrValue(args[1]) + let appleProviderArg: String? = nilOrValue(args[2]) + let debugTokenArg: String? = nilOrValue(args[3]) + api.activate( + appName: appNameArg, androidProvider: androidProviderArg, appleProvider: appleProviderArg, + debugToken: debugTokenArg + ) { result in + switch result { + case .success: + reply(wrapResult(nil)) + case .failure(let error): + reply(wrapError(error)) + } + } + } + } else { + activateChannel.setMessageHandler(nil) + } + let getTokenChannel = FlutterBasicMessageChannel( + name: + "dev.flutter.pigeon.firebase_app_check_platform_interface.FirebaseAppCheckHostApi.getToken\(channelSuffix)", + binaryMessenger: binaryMessenger, codec: codec + ) + if let api { + getTokenChannel.setMessageHandler { message, reply in + let args = message as! [Any?] + let appNameArg = args[0] as! String + let forceRefreshArg = args[1] as! Bool + api.getToken(appName: appNameArg, forceRefresh: forceRefreshArg) { result in + switch result { + case .success(let res): + reply(wrapResult(res)) + case .failure(let error): + reply(wrapError(error)) + } + } + } + } else { + getTokenChannel.setMessageHandler(nil) + } + let setTokenAutoRefreshEnabledChannel = FlutterBasicMessageChannel( + name: + "dev.flutter.pigeon.firebase_app_check_platform_interface.FirebaseAppCheckHostApi.setTokenAutoRefreshEnabled\(channelSuffix)", + binaryMessenger: binaryMessenger, codec: codec + ) + if let api { + setTokenAutoRefreshEnabledChannel.setMessageHandler { message, reply in + let args = message as! [Any?] + let appNameArg = args[0] as! String + let isTokenAutoRefreshEnabledArg = args[1] as! Bool + api.setTokenAutoRefreshEnabled( + appName: appNameArg, isTokenAutoRefreshEnabled: isTokenAutoRefreshEnabledArg + ) { result in + switch result { + case .success: + reply(wrapResult(nil)) + case .failure(let error): + reply(wrapError(error)) + } + } + } + } else { + setTokenAutoRefreshEnabledChannel.setMessageHandler(nil) + } + let registerTokenListenerChannel = FlutterBasicMessageChannel( + name: + "dev.flutter.pigeon.firebase_app_check_platform_interface.FirebaseAppCheckHostApi.registerTokenListener\(channelSuffix)", + binaryMessenger: binaryMessenger, codec: codec + ) + if let api { + registerTokenListenerChannel.setMessageHandler { message, reply in + let args = message as! [Any?] + let appNameArg = args[0] as! String + api.registerTokenListener(appName: appNameArg) { result in + switch result { + case .success(let res): + reply(wrapResult(res)) + case .failure(let error): + reply(wrapError(error)) + } + } + } + } else { + registerTokenListenerChannel.setMessageHandler(nil) + } + let getLimitedUseAppCheckTokenChannel = FlutterBasicMessageChannel( + name: + "dev.flutter.pigeon.firebase_app_check_platform_interface.FirebaseAppCheckHostApi.getLimitedUseAppCheckToken\(channelSuffix)", + binaryMessenger: binaryMessenger, codec: codec + ) + if let api { + getLimitedUseAppCheckTokenChannel.setMessageHandler { message, reply in + let args = message as! [Any?] + let appNameArg = args[0] as! String + api.getLimitedUseAppCheckToken(appName: appNameArg) { result in + switch result { + case .success(let res): + reply(wrapResult(res)) + case .failure(let error): + reply(wrapError(error)) + } + } + } + } else { + getLimitedUseAppCheckTokenChannel.setMessageHandler(nil) + } + } +} diff --git a/mih_ui/android/build/macos/SourcePackages/firebase_app_check-0.4.5/macos/firebase_app_check/Sources/firebase_app_check/FirebaseAppCheckPlugin.swift b/mih_ui/android/build/macos/SourcePackages/firebase_app_check-0.4.5/macos/firebase_app_check/Sources/firebase_app_check/FirebaseAppCheckPlugin.swift new file mode 100644 index 00000000..2d63a765 --- /dev/null +++ b/mih_ui/android/build/macos/SourcePackages/firebase_app_check-0.4.5/macos/firebase_app_check/Sources/firebase_app_check/FirebaseAppCheckPlugin.swift @@ -0,0 +1,369 @@ +// Copyright 2025 The Chromium Authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +import FirebaseAppCheck +import FirebaseCore + +#if canImport(FlutterMacOS) + import FlutterMacOS +#else + import Flutter +#endif + +#if canImport(firebase_core) + import firebase_core +#else + import firebase_core_shared +#endif + +let kFirebaseAppCheckChannelName = "plugins.flutter.io/firebase_app_check" +let kFirebaseAppCheckTokenChannelPrefix = "plugins.flutter.io/firebase_app_check/token/" + +// swift-format-ignore: AvoidRetroactiveConformances +extension FlutterError: @retroactive Error {} + +public class FirebaseAppCheckPlugin: NSObject, FlutterPlugin, + FLTFirebasePluginProtocol, FirebaseAppCheckHostApi +{ + private var eventChannels: [String: FlutterEventChannel] = [:] + private var streamHandlers: [String: AppCheckTokenStreamHandler] = [:] + private var providerFactory: FlutterAppCheckProviderFactory? + + static let shared: FirebaseAppCheckPlugin = { + let instance = FirebaseAppCheckPlugin() + instance.providerFactory = FlutterAppCheckProviderFactory() + AppCheck.setAppCheckProviderFactory(instance.providerFactory) + FLTFirebasePluginRegistry.sharedInstance().register(instance) + return instance + }() + + public static func register(with registrar: FlutterPluginRegistrar) { + let binaryMessenger: FlutterBinaryMessenger + + #if os(macOS) + binaryMessenger = registrar.messenger + #elseif os(iOS) + binaryMessenger = registrar.messenger() + #endif + + let instance = shared + instance.binaryMessenger = binaryMessenger + FirebaseAppCheckHostApiSetup.setUp(binaryMessenger: binaryMessenger, api: instance) + + if FirebaseApp.responds(to: NSSelectorFromString("registerLibrary:withVersion:")) { + FirebaseApp.perform( + NSSelectorFromString("registerLibrary:withVersion:"), + with: instance.firebaseLibraryName(), + with: instance.firebaseLibraryVersion() + ) + } + } + + private var binaryMessenger: FlutterBinaryMessenger? + + func activate( + appName: String, androidProvider: String?, appleProvider: String?, + debugToken: String?, + completion: @escaping (Result) -> Void + ) { + guard let app = FLTFirebasePlugin.firebaseAppNamed(appName) else { + completion( + .failure( + FlutterError( + code: "unknown", message: "Firebase app not found: \(appName)", details: nil + ) + ) + ) + return + } + let provider = appleProvider ?? "deviceCheck" + + providerFactory?.configure( + app: app, + providerName: provider, + debugToken: debugToken + ) + + completion(.success(())) + } + + func getToken( + appName: String, forceRefresh: Bool, + completion: @escaping (Result) -> Void + ) { + guard let app = FLTFirebasePlugin.firebaseAppNamed(appName), + let appCheck = AppCheck.appCheck(app: app) + else { + completion( + .failure( + FlutterError( + code: "unknown", message: "App Check not available for app: \(appName)", details: nil + ) + ) + ) + return + } + + appCheck.token(forcingRefresh: forceRefresh) { token, error in + if let error { + completion(.failure(self.createFlutterError(error))) + } else { + completion(.success(token?.token)) + } + } + } + + func setTokenAutoRefreshEnabled( + appName: String, isTokenAutoRefreshEnabled: Bool, + completion: @escaping (Result) -> Void + ) { + guard let app = FLTFirebasePlugin.firebaseAppNamed(appName), + let appCheck = AppCheck.appCheck(app: app) + else { + completion( + .failure( + FlutterError( + code: "unknown", message: "App Check not available for app: \(appName)", details: nil + ) + ) + ) + return + } + appCheck.isTokenAutoRefreshEnabled = isTokenAutoRefreshEnabled + completion(.success(())) + } + + func registerTokenListener( + appName: String, + completion: @escaping (Result) -> Void + ) { + let name = kFirebaseAppCheckTokenChannelPrefix + appName + + guard let messenger = binaryMessenger else { + completion( + .failure( + FlutterError( + code: "no-messenger", + message: "Binary messenger not available", + details: nil + ) + ) + ) + return + } + + let channel = FlutterEventChannel(name: name, binaryMessenger: messenger) + let handler = AppCheckTokenStreamHandler() + channel.setStreamHandler(handler) + + eventChannels[name] = channel + streamHandlers[name] = handler + + completion(.success(name)) + } + + func getLimitedUseAppCheckToken( + appName: String, + completion: @escaping (Result) -> Void + ) { + guard let app = FLTFirebasePlugin.firebaseAppNamed(appName), + let appCheck = AppCheck.appCheck(app: app) + else { + completion( + .failure( + FlutterError( + code: "unknown", message: "App Check not available for app: \(appName)", details: nil + ) + ) + ) + return + } + + appCheck.limitedUseToken { token, error in + if let error { + completion(.failure(self.createFlutterError(error))) + } else { + completion(.success(token?.token ?? "")) + } + } + } + + // MARK: - FLTFirebasePluginProtocol + + public func didReinitializeFirebaseCore(_ completion: @escaping () -> Void) { + for (_, channel) in eventChannels { + channel.setStreamHandler(nil) + } + for (_, handler) in streamHandlers { + _ = handler.onCancel(withArguments: nil) + } + eventChannels.removeAll() + streamHandlers.removeAll() + completion() + } + + public func pluginConstants(for firebaseApp: FirebaseApp) -> [AnyHashable: Any] { + [:] + } + + public func firebaseLibraryName() -> String { + "flutter-fire-appcheck" + } + + public func firebaseLibraryVersion() -> String { + versionNumber + } + + public func flutterChannelName() -> String { + kFirebaseAppCheckChannelName + } + + private func createFlutterError(_ error: Error) -> FlutterError { + let nsError = error as NSError + var code = "unknown" + switch nsError.code { + case 0: // FIRAppCheckErrorCodeServerUnreachable + code = "server-unreachable" + case 1: // FIRAppCheckErrorCodeInvalidConfiguration + code = "invalid-configuration" + case 2: // FIRAppCheckErrorCodeKeychain + code = "code-keychain" + case 3: // FIRAppCheckErrorCodeUnsupported + code = "code-unsupported" + default: + code = "unknown" + } + return FlutterError( + code: code, + message: nsError.localizedDescription, + details: nil + ) + } +} + +// MARK: - Token Stream Handler + +class AppCheckTokenStreamHandler: NSObject, FlutterStreamHandler { + private var observer: NSObjectProtocol? + + func onListen( + withArguments arguments: Any?, + eventSink events: @escaping FlutterEventSink + ) -> FlutterError? { + observer = NotificationCenter.default.addObserver( + forName: NSNotification.Name("FIRAppCheckAppCheckTokenDidChangeNotification"), + object: nil, + queue: nil + ) { notification in + if let token = notification.userInfo?["FIRAppCheckTokenNotificationKey"] as? String { + events(["token": token]) + } + } + return nil + } + + func onCancel(withArguments arguments: Any?) -> FlutterError? { + if let observer { + NotificationCenter.default.removeObserver(observer) + self.observer = nil + } + return nil + } +} + +// MARK: - App Check Provider Factory + +class FlutterAppCheckProviderFactory: NSObject, AppCheckProviderFactory { + private var providers: [String: AppCheckProviderWrapper] = [:] + + func createProvider(with app: FirebaseApp) -> (any AppCheckProvider)? { + if providers[app.name] == nil { + let wrapper = AppCheckProviderWrapper() + // Default to deviceCheck. activate() will reconfigure with the correct provider. + wrapper.configure( + app: app, + providerName: "deviceCheck", + debugToken: nil + ) + providers[app.name] = wrapper + } + return providers[app.name] + } + + func configure( + app: FirebaseApp, + providerName: String, + debugToken: String? + ) { + if providers[app.name] == nil { + providers[app.name] = AppCheckProviderWrapper() + } + providers[app.name]?.configure( + app: app, + providerName: providerName, + debugToken: debugToken + ) + } +} + +class AppCheckProviderWrapper: NSObject, AppCheckProvider { + private var delegateProvider: (any AppCheckProvider)? + + func configure( + app: FirebaseApp, + providerName: String, + debugToken: String? + ) { + switch providerName { + case "debug": + if let debugToken { + setenv("FIRAAppCheckDebugToken", debugToken, 1) + } + delegateProvider = AppCheckDebugProvider(app: app) + if debugToken == nil, let debugProvider = delegateProvider as? AppCheckDebugProvider { + print("Firebase App Check Debug Token: \(debugProvider.localDebugToken())") + } + case "appAttest": + if #available(iOS 14.0, macOS 14.0, macCatalyst 14.0, tvOS 15.0, watchOS 9.0, *) { + delegateProvider = AppAttestProvider(app: app) + } else { + delegateProvider = AppCheckDebugProvider(app: app) + } + case "appAttestWithDeviceCheckFallback": + if #available(iOS 14.0, macOS 14.0, *) { + delegateProvider = AppAttestProvider(app: app) + } else { + delegateProvider = DeviceCheckProvider(app: app) + } + case "recaptcha": + #if os(iOS) + delegateProvider = RecaptchaProvider(app: app) + if delegateProvider == nil { + print( + "Firebase App Check: failed to initialize RecaptchaProvider. Ensure site key is in GoogleService-Info.plist." + ) + } + #else + print("Firebase App Check: reCAPTCHA is only supported on iOS.") + #endif + default: + // deviceCheck + delegateProvider = DeviceCheckProvider(app: app) + } + } + + func getToken(completion handler: @escaping (AppCheckToken?, Error?) -> Void) { + guard let delegateProvider else { + handler( + nil, + NSError( + domain: "firebase_app_check", code: -1, + userInfo: [NSLocalizedDescriptionKey: "Provider not configured"] + ) + ) + return + } + delegateProvider.getToken(completion: handler) + } +} diff --git a/mih_ui/android/build/macos/SourcePackages/firebase_app_check-0.4.5/pubspec.yaml b/mih_ui/android/build/macos/SourcePackages/firebase_app_check-0.4.5/pubspec.yaml new file mode 100644 index 00000000..605a2914 --- /dev/null +++ b/mih_ui/android/build/macos/SourcePackages/firebase_app_check-0.4.5/pubspec.yaml @@ -0,0 +1,48 @@ +name: firebase_app_check +description: App Check works alongside other Firebase services to help protect your backend resources from abuse, such as billing fraud or phishing. +homepage: https://firebase.google.com/docs/app-check +repository: https://github.com/firebase/flutterfire/tree/main/packages/firebase_app_check/firebase_app_check +version: 0.4.5 +resolution: workspace +topics: + - firebase + - app-check + - security + - protection + +false_secrets: + - example/** + +environment: + sdk: '^3.6.0' + flutter: '>=3.27.0' + +dependencies: + firebase_app_check_platform_interface: ^0.4.1 + firebase_app_check_web: ^0.2.5 + firebase_core: ^4.11.0 + firebase_core_platform_interface: ^7.1.0 + flutter: + sdk: flutter + +dev_dependencies: + async: ^2.5.0 + flutter_test: + sdk: flutter + mockito: ^5.0.0 + plugin_platform_interface: ^2.1.3 + +flutter: + plugin: + platforms: + android: + package: io.flutter.plugins.firebase.appcheck + pluginClass: FirebaseAppCheckPlugin + ios: + pluginClass: FirebaseAppCheckPlugin + macos: + pluginClass: FirebaseAppCheckPlugin + web: + default_package: firebase_app_check_web + windows: + pluginClass: FirebaseAppCheckPluginCApi diff --git a/mih_ui/android/build/macos/SourcePackages/firebase_app_check-0.4.5/test/firebase_app_check_test.dart b/mih_ui/android/build/macos/SourcePackages/firebase_app_check-0.4.5/test/firebase_app_check_test.dart new file mode 100755 index 00000000..f939040d --- /dev/null +++ b/mih_ui/android/build/macos/SourcePackages/firebase_app_check-0.4.5/test/firebase_app_check_test.dart @@ -0,0 +1,79 @@ +// Copyright 2021 The Chromium Authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +import 'package:firebase_app_check/firebase_app_check.dart'; +import 'package:firebase_core/firebase_core.dart'; +import 'package:flutter_test/flutter_test.dart'; + +import './mock.dart'; + +void main() { + setupFirebaseAppCheckMocks(); + late FirebaseApp secondaryApp; + + group('$FirebaseAppCheck', () { + setUpAll(() async { + await Firebase.initializeApp(); + secondaryApp = await Firebase.initializeApp( + name: 'secondaryApp', + options: const FirebaseOptions( + appId: '1:1234567890:ios:42424242424242', + apiKey: '123', + projectId: '123', + messagingSenderId: '1234567890', + ), + ); + }); + + group('instance', () { + test('successful call', () async { + final appCheck = FirebaseAppCheck.instance; + + expect(appCheck, isA()); + expect(appCheck.app.name, defaultFirebaseAppName); + }); + }); + + group('instanceFor', () { + test('successful call', () async { + final appCheck = FirebaseAppCheck.instanceFor(app: secondaryApp); + + expect(appCheck, isA()); + expect(appCheck.app.name, 'secondaryApp'); + }); + + test('creates a fresh instance after app delete and reinitialize', + () async { + const appName = 'delete-reinit-app-check'; + const options = FirebaseOptions( + appId: '1:1234567890:ios:42424242424242', + apiKey: '123', + projectId: '123', + messagingSenderId: '1234567890', + ); + final app = await Firebase.initializeApp( + name: appName, + options: options, + ); + final appCheck1 = FirebaseAppCheck.instanceFor(app: app); + + expect(app.getService(), same(appCheck1)); + + await app.delete(); + + final app2 = await Firebase.initializeApp( + name: appName, + options: options, + ); + addTearDown(app2.delete); + + final appCheck2 = FirebaseAppCheck.instanceFor(app: app2); + + expect(appCheck2, isNot(same(appCheck1))); + expect(appCheck2.app, app2); + expect(app2.getService(), same(appCheck2)); + }); + }); + }); +} diff --git a/mih_ui/android/build/macos/SourcePackages/firebase_app_check-0.4.5/test/mock.dart b/mih_ui/android/build/macos/SourcePackages/firebase_app_check-0.4.5/test/mock.dart new file mode 100644 index 00000000..0a6701d3 --- /dev/null +++ b/mih_ui/android/build/macos/SourcePackages/firebase_app_check-0.4.5/test/mock.dart @@ -0,0 +1,35 @@ +// Copyright 2021 The Chromium Authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +import 'package:firebase_core_platform_interface/test.dart'; +import 'package:flutter/services.dart'; +import 'package:flutter_test/flutter_test.dart'; + +typedef Callback = void Function(MethodCall call); + +final List methodCallLog = []; + +void setupFirebaseAppCheckMocks([Callback? customHandlers]) { + TestWidgetsFlutterBinding.ensureInitialized(); + + setupFirebaseCoreMocks(); + TestFirebaseAppHostApi.setUp(MockFirebaseAppHostApi()); +} + +class MockFirebaseAppHostApi implements TestFirebaseAppHostApi { + @override + Future delete(String appName) async {} + + @override + Future setAutomaticDataCollectionEnabled( + String appName, + bool enabled, + ) async {} + + @override + Future setAutomaticResourceManagementEnabled( + String appName, + bool enabled, + ) async {} +} diff --git a/mih_ui/android/build/macos/SourcePackages/firebase_app_check-0.4.5/windows/CMakeLists.txt b/mih_ui/android/build/macos/SourcePackages/firebase_app_check-0.4.5/windows/CMakeLists.txt new file mode 100644 index 00000000..7c40c200 --- /dev/null +++ b/mih_ui/android/build/macos/SourcePackages/firebase_app_check-0.4.5/windows/CMakeLists.txt @@ -0,0 +1,81 @@ +# The Flutter tooling requires that developers have a version of Visual Studio +# installed that includes CMake 3.14 or later. You should not increase this +# version, as doing so will cause the plugin to fail to compile for some +# customers of the plugin. +cmake_minimum_required(VERSION 3.14) + +# Project-level configuration. +set(PROJECT_NAME "firebase_app_check") +project(${PROJECT_NAME} LANGUAGES CXX) + +# This value is used when generating builds using this plugin, so it must +# not be changed +set(PLUGIN_NAME "firebase_app_check_plugin") + +# Any new source files that you add to the plugin should be added here. +list(APPEND PLUGIN_SOURCES + "firebase_app_check_plugin.cpp" + "firebase_app_check_plugin.h" + "messages.g.cpp" + "messages.g.h" +) + +# Read version from pubspec.yaml +file(STRINGS "../pubspec.yaml" pubspec_content) +foreach(line ${pubspec_content}) + string(FIND ${line} "version: " has_version) + + if("${has_version}" STREQUAL "0") + string(FIND ${line} ": " version_start_pos) + math(EXPR version_start_pos "${version_start_pos} + 2") + string(LENGTH ${line} version_end_pos) + math(EXPR len "${version_end_pos} - ${version_start_pos}") + string(SUBSTRING ${line} ${version_start_pos} ${len} PLUGIN_VERSION) + break() + endif() +endforeach(line) + +configure_file(plugin_version.h.in ${CMAKE_BINARY_DIR}/generated/firebase_app_check/plugin_version.h) +include_directories(${CMAKE_BINARY_DIR}/generated/) + +# Define the plugin library target. Its name must not be changed (see comment +# on PLUGIN_NAME above). +add_library(${PLUGIN_NAME} STATIC + "include/firebase_app_check/firebase_app_check_plugin_c_api.h" + "firebase_app_check_plugin_c_api.cpp" + ${PLUGIN_SOURCES} + ${CMAKE_BINARY_DIR}/generated/firebase_app_check/plugin_version.h +) + +# Apply a standard set of build settings that are configured in the +# application-level CMakeLists.txt. This can be removed for plugins that want +# full control over build settings. +apply_standard_settings(${PLUGIN_NAME}) + +# Symbols are hidden by default to reduce the chance of accidental conflicts +# between plugins. This should not be removed; any symbols that should be +# exported should be explicitly exported with the FLUTTER_PLUGIN_EXPORT macro. +set_target_properties(${PLUGIN_NAME} PROPERTIES + CXX_VISIBILITY_PRESET hidden) +target_compile_definitions(${PLUGIN_NAME} PUBLIC FLUTTER_PLUGIN_IMPL) + +# Enable firebase-cpp-sdk's platform logging api. +target_compile_definitions(${PLUGIN_NAME} PRIVATE -DINTERNAL_EXPERIMENTAL=1) + +# Source include directories and library dependencies. Add any plugin-specific +# dependencies here. +set(MSVC_RUNTIME_MODE MD) +set(firebase_libs firebase_core_plugin firebase_app_check) +target_link_libraries(${PLUGIN_NAME} PRIVATE "${firebase_libs}") + +target_include_directories(${PLUGIN_NAME} INTERFACE + "${CMAKE_CURRENT_SOURCE_DIR}/include") +target_link_libraries(${PLUGIN_NAME} PUBLIC flutter flutter_wrapper_plugin) + +# List of absolute paths to libraries that should be bundled with the plugin. +# This list could contain prebuilt libraries, or libraries created by an +# external build triggered from this build file. +set(firebase_app_check_bundled_libraries + "" + PARENT_SCOPE +) diff --git a/mih_ui/android/build/macos/SourcePackages/firebase_app_check-0.4.5/windows/firebase_app_check_plugin.cpp b/mih_ui/android/build/macos/SourcePackages/firebase_app_check-0.4.5/windows/firebase_app_check_plugin.cpp new file mode 100644 index 00000000..d9a0a72d --- /dev/null +++ b/mih_ui/android/build/macos/SourcePackages/firebase_app_check-0.4.5/windows/firebase_app_check_plugin.cpp @@ -0,0 +1,249 @@ +// Copyright 2025, the Chromium project authors. Please see the AUTHORS file +// for details. All rights reserved. Use of this source code is governed by a +// BSD-style license that can be found in the LICENSE file. + +#include "firebase_app_check_plugin.h" + +#include +#include +#include +#include +#include + +#include +#include +#include + +#include "firebase/app.h" +#include "firebase/app_check.h" +#include "firebase/app_check/debug_provider.h" +#include "firebase/future.h" +#include "firebase_app_check/plugin_version.h" +#include "firebase_core/firebase_core_plugin_c_api.h" +#include "messages.g.h" + +using ::firebase::App; +using ::firebase::Future; +using ::firebase::app_check::AppCheck; +using ::firebase::app_check::AppCheckListener; +using ::firebase::app_check::AppCheckToken; +using ::firebase::app_check::DebugAppCheckProviderFactory; + +namespace firebase_app_check_windows { + +static const std::string kLibraryName = "flutter-fire-app-check"; +static const std::string kEventChannelNamePrefix = + "plugins.flutter.io/firebase_app_check/token/"; + +flutter::BinaryMessenger* FirebaseAppCheckPlugin::binaryMessenger = nullptr; +std::map>> + FirebaseAppCheckPlugin::event_channels_; +std::map + FirebaseAppCheckPlugin::listeners_map_; + +// AppCheckListener implementation that forwards token changes to an EventSink. +class FlutterAppCheckListener : public AppCheckListener { + public: + void SetEventSink( + std::unique_ptr> event_sink) { + event_sink_ = std::move(event_sink); + } + + void OnAppCheckTokenChanged(const AppCheckToken& token) override { + if (event_sink_) { + flutter::EncodableMap event; + event[flutter::EncodableValue("token")] = + flutter::EncodableValue(token.token); + event_sink_->Success(flutter::EncodableValue(event)); + } + } + + private: + std::unique_ptr> event_sink_; +}; + +// StreamHandler for token change events. +class TokenStreamHandler + : public flutter::StreamHandler { + public: + TokenStreamHandler(AppCheck* app_check, const std::string& app_name) + : app_check_(app_check), app_name_(app_name) {} + + std::unique_ptr> + OnListenInternal( + const flutter::EncodableValue* arguments, + std::unique_ptr>&& events) + override { + listener_ = std::make_unique(); + listener_->SetEventSink(std::move(events)); + app_check_->AddAppCheckListener(listener_.get()); + FirebaseAppCheckPlugin::listeners_map_[app_name_] = listener_.get(); + return nullptr; + } + + std::unique_ptr> + OnCancelInternal(const flutter::EncodableValue* arguments) override { + if (listener_) { + app_check_->RemoveAppCheckListener(listener_.get()); + FirebaseAppCheckPlugin::listeners_map_.erase(app_name_); + listener_.reset(); + } + return nullptr; + } + + private: + AppCheck* app_check_; + std::string app_name_; + std::unique_ptr listener_; +}; + +static AppCheck* GetAppCheckFromPigeon(const std::string& app_name) { + App* app = App::GetInstance(app_name.c_str()); + return AppCheck::GetInstance(app); +} + +static FlutterError ParseError(const firebase::FutureBase& completed_future) { + std::string error_code = "unknown"; + int error = completed_future.error(); + switch (error) { + case firebase::app_check::kAppCheckErrorServerUnreachable: + error_code = "server-unreachable"; + break; + case firebase::app_check::kAppCheckErrorInvalidConfiguration: + error_code = "invalid-configuration"; + break; + case firebase::app_check::kAppCheckErrorSystemKeychain: + error_code = "system-keychain"; + break; + case firebase::app_check::kAppCheckErrorUnsupportedProvider: + error_code = "unsupported-provider"; + break; + default: + error_code = "unknown"; + break; + } + + std::string error_message = completed_future.error_message() + ? completed_future.error_message() + : "An unknown error occurred"; + + return FlutterError(error_code, error_message); +} + +// static +void FirebaseAppCheckPlugin::RegisterWithRegistrar( + flutter::PluginRegistrarWindows* registrar) { + auto plugin = std::make_unique(); + + FirebaseAppCheckHostApi::SetUp(registrar->messenger(), plugin.get()); + + registrar->AddPlugin(std::move(plugin)); + + binaryMessenger = registrar->messenger(); + + // Register for platform logging + App::RegisterLibrary(kLibraryName.c_str(), getPluginVersion().c_str(), + nullptr); +} + +FirebaseAppCheckPlugin::FirebaseAppCheckPlugin() {} + +FirebaseAppCheckPlugin::~FirebaseAppCheckPlugin() { + for (auto& [app_name, listener] : listeners_map_) { + App* app = App::GetInstance(app_name.c_str()); + if (app) { + AppCheck* app_check = AppCheck::GetInstance(app); + if (app_check) { + app_check->RemoveAppCheckListener(listener); + } + } + } + listeners_map_.clear(); + event_channels_.clear(); +} + +void FirebaseAppCheckPlugin::Activate( + const std::string& app_name, const std::string* android_provider, + const std::string* apple_provider, const std::string* debug_token, + std::function reply)> result) { + // On Windows/desktop, only the Debug provider is available. + DebugAppCheckProviderFactory* factory = + DebugAppCheckProviderFactory::GetInstance(); + + if (debug_token != nullptr && !debug_token->empty()) { + factory->SetDebugToken(*debug_token); + } + + AppCheck::SetAppCheckProviderFactory(factory); + + result(std::nullopt); +} + +void FirebaseAppCheckPlugin::GetToken( + const std::string& app_name, bool force_refresh, + std::function> reply)> result) { + AppCheck* app_check = GetAppCheckFromPigeon(app_name); + + Future future = app_check->GetAppCheckToken(force_refresh); + future.OnCompletion([result](const Future& completed_future) { + if (completed_future.error() != 0) { + result(ParseError(completed_future)); + } else { + const AppCheckToken* token = completed_future.result(); + if (token) { + result(std::optional(token->token)); + } else { + result(std::optional(std::nullopt)); + } + } + }); +} + +void FirebaseAppCheckPlugin::SetTokenAutoRefreshEnabled( + const std::string& app_name, bool is_token_auto_refresh_enabled, + std::function reply)> result) { + AppCheck* app_check = GetAppCheckFromPigeon(app_name); + app_check->SetTokenAutoRefreshEnabled(is_token_auto_refresh_enabled); + result(std::nullopt); +} + +void FirebaseAppCheckPlugin::RegisterTokenListener( + const std::string& app_name, + std::function reply)> result) { + AppCheck* app_check = GetAppCheckFromPigeon(app_name); + + const std::string name = kEventChannelNamePrefix + app_name; + + auto event_channel = + std::make_unique>( + binaryMessenger, name, &flutter::StandardMethodCodec::GetInstance()); + event_channel->SetStreamHandler( + std::make_unique(app_check, app_name)); + + event_channels_[app_name] = std::move(event_channel); + + result(name); +} + +void FirebaseAppCheckPlugin::GetLimitedUseAppCheckToken( + const std::string& app_name, + std::function reply)> result) { + AppCheck* app_check = GetAppCheckFromPigeon(app_name); + + Future future = app_check->GetLimitedUseAppCheckToken(); + future.OnCompletion([result](const Future& completed_future) { + if (completed_future.error() != 0) { + result(ParseError(completed_future)); + } else { + const AppCheckToken* token = completed_future.result(); + if (token) { + result(token->token); + } else { + result(FlutterError("unknown", "Failed to get limited use token")); + } + } + }); +} + +} // namespace firebase_app_check_windows diff --git a/mih_ui/android/build/macos/SourcePackages/firebase_app_check-0.4.5/windows/firebase_app_check_plugin.h b/mih_ui/android/build/macos/SourcePackages/firebase_app_check-0.4.5/windows/firebase_app_check_plugin.h new file mode 100644 index 00000000..baabf2bd --- /dev/null +++ b/mih_ui/android/build/macos/SourcePackages/firebase_app_check-0.4.5/windows/firebase_app_check_plugin.h @@ -0,0 +1,72 @@ +/* + * Copyright 2025, the Chromium project authors. Please see the AUTHORS file + * for details. All rights reserved. Use of this source code is governed by a + * BSD-style license that can be found in the LICENSE file. + */ + +#ifndef FLUTTER_PLUGIN_FIREBASE_APP_CHECK_PLUGIN_H_ +#define FLUTTER_PLUGIN_FIREBASE_APP_CHECK_PLUGIN_H_ + +#include +#include +#include + +#include +#include +#include + +#include "firebase/app.h" +#include "firebase/app_check.h" +#include "firebase/future.h" +#include "messages.g.h" + +namespace firebase_app_check_windows { + +class TokenStreamHandler; + +class FirebaseAppCheckPlugin : public flutter::Plugin, + public FirebaseAppCheckHostApi { + friend class TokenStreamHandler; + + public: + static void RegisterWithRegistrar(flutter::PluginRegistrarWindows* registrar); + + FirebaseAppCheckPlugin(); + + virtual ~FirebaseAppCheckPlugin(); + + // Disallow copy and assign. + FirebaseAppCheckPlugin(const FirebaseAppCheckPlugin&) = delete; + FirebaseAppCheckPlugin& operator=(const FirebaseAppCheckPlugin&) = delete; + + // FirebaseAppCheckHostApi methods. + void Activate( + const std::string& app_name, const std::string* android_provider, + const std::string* apple_provider, const std::string* debug_token, + std::function reply)> result) override; + void GetToken(const std::string& app_name, bool force_refresh, + std::function> reply)> + result) override; + void SetTokenAutoRefreshEnabled( + const std::string& app_name, bool is_token_auto_refresh_enabled, + std::function reply)> result) override; + void RegisterTokenListener( + const std::string& app_name, + std::function reply)> result) override; + void GetLimitedUseAppCheckToken( + const std::string& app_name, + std::function reply)> result) override; + + private: + static flutter::BinaryMessenger* binaryMessenger; + static std::map< + std::string, + std::unique_ptr>> + event_channels_; + static std::map + listeners_map_; +}; + +} // namespace firebase_app_check_windows + +#endif // FLUTTER_PLUGIN_FIREBASE_APP_CHECK_PLUGIN_H_ diff --git a/mih_ui/android/build/macos/SourcePackages/firebase_app_check-0.4.5/windows/firebase_app_check_plugin_c_api.cpp b/mih_ui/android/build/macos/SourcePackages/firebase_app_check-0.4.5/windows/firebase_app_check_plugin_c_api.cpp new file mode 100644 index 00000000..f0ace78f --- /dev/null +++ b/mih_ui/android/build/macos/SourcePackages/firebase_app_check-0.4.5/windows/firebase_app_check_plugin_c_api.cpp @@ -0,0 +1,16 @@ +// Copyright 2025, the Chromium project authors. Please see the AUTHORS file +// for details. All rights reserved. Use of this source code is governed by a +// BSD-style license that can be found in the LICENSE file. + +#include "include/firebase_app_check/firebase_app_check_plugin_c_api.h" + +#include + +#include "firebase_app_check_plugin.h" + +void FirebaseAppCheckPluginCApiRegisterWithRegistrar( + FlutterDesktopPluginRegistrarRef registrar) { + firebase_app_check_windows::FirebaseAppCheckPlugin::RegisterWithRegistrar( + flutter::PluginRegistrarManager::GetInstance() + ->GetRegistrar(registrar)); +} diff --git a/mih_ui/android/build/macos/SourcePackages/firebase_app_check-0.4.5/windows/include/firebase_app_check/firebase_app_check_plugin_c_api.h b/mih_ui/android/build/macos/SourcePackages/firebase_app_check-0.4.5/windows/include/firebase_app_check/firebase_app_check_plugin_c_api.h new file mode 100644 index 00000000..ab2d9e94 --- /dev/null +++ b/mih_ui/android/build/macos/SourcePackages/firebase_app_check-0.4.5/windows/include/firebase_app_check/firebase_app_check_plugin_c_api.h @@ -0,0 +1,29 @@ +/* + * Copyright 2025, the Chromium project authors. Please see the AUTHORS file + * for details. All rights reserved. Use of this source code is governed by a + * BSD-style license that can be found in the LICENSE file. + */ + +#ifndef FLUTTER_PLUGIN_FIREBASE_APP_CHECK_PLUGIN_C_API_H_ +#define FLUTTER_PLUGIN_FIREBASE_APP_CHECK_PLUGIN_C_API_H_ + +#include + +#ifdef FLUTTER_PLUGIN_IMPL +#define FLUTTER_PLUGIN_EXPORT __declspec(dllexport) +#else +#define FLUTTER_PLUGIN_EXPORT __declspec(dllimport) +#endif + +#if defined(__cplusplus) +extern "C" { +#endif + +FLUTTER_PLUGIN_EXPORT void FirebaseAppCheckPluginCApiRegisterWithRegistrar( + FlutterDesktopPluginRegistrarRef registrar); + +#if defined(__cplusplus) +} // extern "C" +#endif + +#endif // FLUTTER_PLUGIN_FIREBASE_APP_CHECK_PLUGIN_C_API_H_ diff --git a/mih_ui/android/build/macos/SourcePackages/firebase_app_check-0.4.5/windows/messages.g.cpp b/mih_ui/android/build/macos/SourcePackages/firebase_app_check-0.4.5/windows/messages.g.cpp new file mode 100644 index 00000000..0da3e3c1 --- /dev/null +++ b/mih_ui/android/build/macos/SourcePackages/firebase_app_check-0.4.5/windows/messages.g.cpp @@ -0,0 +1,517 @@ +// Copyright 2025, the Chromium project authors. Please see the AUTHORS file +// for details. All rights reserved. Use of this source code is governed by a +// BSD-style license that can be found in the LICENSE file. +// Autogenerated from Pigeon (v26.3.4), do not edit directly. +// See also: https://pub.dev/packages/pigeon + +#undef _HAS_EXCEPTIONS + +#include "messages.g.h" + +#include +#include +#include +#include + +#include +#include +#include +#include +#include + +namespace firebase_app_check_windows { +using ::flutter::BasicMessageChannel; +using ::flutter::CustomEncodableValue; +using ::flutter::EncodableList; +using ::flutter::EncodableMap; +using ::flutter::EncodableValue; + +FlutterError CreateConnectionError(const std::string channel_name) { + return FlutterError( + "channel-error", + "Unable to establish connection on channel: '" + channel_name + "'.", + EncodableValue("")); +} + +namespace { +template +bool PigeonInternalDeepEquals(const T& a, const T& b); + +bool PigeonInternalDeepEquals(const double& a, const double& b); + +template +bool PigeonInternalDeepEquals(const std::vector& a, const std::vector& b); + +template +bool PigeonInternalDeepEquals(const std::map& a, const std::map& b); + +template +bool PigeonInternalDeepEquals(const std::optional& a, + const std::optional& b); + +template +bool PigeonInternalDeepEquals(const std::unique_ptr& a, + const std::unique_ptr& b); + +bool PigeonInternalDeepEquals(const ::flutter::EncodableValue& a, + const ::flutter::EncodableValue& b); + +template +bool PigeonInternalDeepEquals(const T& a, const T& b) { + return a == b; +} + +template +bool PigeonInternalDeepEquals(const std::vector& a, + const std::vector& b) { + if (a.size() != b.size()) { + return false; + } + for (size_t i = 0; i < a.size(); ++i) { + if (!PigeonInternalDeepEquals(a[i], b[i])) { + return false; + } + } + return true; +} + +template +bool PigeonInternalDeepEquals(const std::map& a, + const std::map& b) { + if (a.size() != b.size()) { + return false; + } + for (const auto& kv : a) { + bool found = false; + for (const auto& b_kv : b) { + if (PigeonInternalDeepEquals(kv.first, b_kv.first)) { + if (PigeonInternalDeepEquals(kv.second, b_kv.second)) { + found = true; + break; + } else { + return false; + } + } + } + if (!found) { + return false; + } + } + return true; +} + +bool PigeonInternalDeepEquals(const double& a, const double& b) { + // Normalize -0.0 to 0.0 and handle NaN equality. + return (a == b) || (std::isnan(a) && std::isnan(b)); +} + +template +bool PigeonInternalDeepEquals(const std::optional& a, + const std::optional& b) { + if (!a && !b) { + return true; + } + if (!a || !b) { + return false; + } + return PigeonInternalDeepEquals(*a, *b); +} + +template +bool PigeonInternalDeepEquals(const std::unique_ptr& a, + const std::unique_ptr& b) { + if (a.get() == b.get()) { + return true; + } + if (!a || !b) { + return false; + } + return PigeonInternalDeepEquals(*a, *b); +} + +bool PigeonInternalDeepEquals(const ::flutter::EncodableValue& a, + const ::flutter::EncodableValue& b) { + if (a.index() != b.index()) { + return false; + } + if (const double* da = std::get_if(&a)) { + return PigeonInternalDeepEquals(*da, std::get(b)); + } else if (const ::flutter::EncodableList* la = + std::get_if<::flutter::EncodableList>(&a)) { + return PigeonInternalDeepEquals(*la, std::get<::flutter::EncodableList>(b)); + } else if (const ::flutter::EncodableMap* ma = + std::get_if<::flutter::EncodableMap>(&a)) { + return PigeonInternalDeepEquals(*ma, std::get<::flutter::EncodableMap>(b)); + } + return a == b; +} + +template +size_t PigeonInternalDeepHash(const T& v); + +size_t PigeonInternalDeepHash(const double& v); + +template +size_t PigeonInternalDeepHash(const std::vector& v); + +template +size_t PigeonInternalDeepHash(const std::map& v); + +template +size_t PigeonInternalDeepHash(const std::optional& v); + +template +size_t PigeonInternalDeepHash(const std::unique_ptr& v); + +size_t PigeonInternalDeepHash(const ::flutter::EncodableValue& v); + +template +size_t PigeonInternalDeepHash(const T& v) { + return std::hash()(v); +} + +template +size_t PigeonInternalDeepHash(const std::vector& v) { + size_t result = 1; + for (const auto& item : v) { + result = result * 31 + PigeonInternalDeepHash(item); + } + return result; +} + +template +size_t PigeonInternalDeepHash(const std::map& v) { + size_t result = 0; + for (const auto& kv : v) { + result += ((PigeonInternalDeepHash(kv.first) * 31) ^ + PigeonInternalDeepHash(kv.second)); + } + return result; +} + +size_t PigeonInternalDeepHash(const double& v) { + if (std::isnan(v)) { + // Normalize NaN to a consistent hash. + return std::hash()(std::numeric_limits::quiet_NaN()); + } + if (v == 0.0) { + // Normalize -0.0 to 0.0 so they have the same hash code. + return std::hash()(0.0); + } + return std::hash()(v); +} + +template +size_t PigeonInternalDeepHash(const std::optional& v) { + return v ? PigeonInternalDeepHash(*v) : 0; +} + +template +size_t PigeonInternalDeepHash(const std::unique_ptr& v) { + return v ? PigeonInternalDeepHash(*v) : 0; +} + +size_t PigeonInternalDeepHash(const ::flutter::EncodableValue& v) { + size_t result = v.index(); + if (const double* dv = std::get_if(&v)) { + result = result * 31 + PigeonInternalDeepHash(*dv); + } else if (const ::flutter::EncodableList* lv = + std::get_if<::flutter::EncodableList>(&v)) { + result = result * 31 + PigeonInternalDeepHash(*lv); + } else if (const ::flutter::EncodableMap* mv = + std::get_if<::flutter::EncodableMap>(&v)) { + result = result * 31 + PigeonInternalDeepHash(*mv); + } else { + std::visit( + [&result](const auto& val) { + using T = std::decay_t; + if constexpr (!std::is_same_v && + !std::is_same_v && + !std::is_same_v && + !std::is_same_v && + !std::is_same_v) { + result = result * 31 + PigeonInternalDeepHash(val); + } + }, + v); + } + return result; +} + +} // namespace + +PigeonInternalCodecSerializer::PigeonInternalCodecSerializer() {} + +EncodableValue PigeonInternalCodecSerializer::ReadValueOfType( + uint8_t type, ::flutter::ByteStreamReader* stream) const { + return ::flutter::StandardCodecSerializer::ReadValueOfType(type, stream); +} + +void PigeonInternalCodecSerializer::WriteValue( + const EncodableValue& value, ::flutter::ByteStreamWriter* stream) const { + ::flutter::StandardCodecSerializer::WriteValue(value, stream); +} + +/// The codec used by FirebaseAppCheckHostApi. +const ::flutter::StandardMessageCodec& FirebaseAppCheckHostApi::GetCodec() { + return ::flutter::StandardMessageCodec::GetInstance( + &PigeonInternalCodecSerializer::GetInstance()); +} + +// Sets up an instance of `FirebaseAppCheckHostApi` to handle messages through +// the `binary_messenger`. +void FirebaseAppCheckHostApi::SetUp( + ::flutter::BinaryMessenger* binary_messenger, + FirebaseAppCheckHostApi* api) { + FirebaseAppCheckHostApi::SetUp(binary_messenger, api, ""); +} + +void FirebaseAppCheckHostApi::SetUp( + ::flutter::BinaryMessenger* binary_messenger, FirebaseAppCheckHostApi* api, + const std::string& message_channel_suffix) { + const std::string prepended_suffix = + message_channel_suffix.length() > 0 + ? std::string(".") + message_channel_suffix + : ""; + { + BasicMessageChannel<> channel( + binary_messenger, + "dev.flutter.pigeon.firebase_app_check_platform_interface." + "FirebaseAppCheckHostApi.activate" + + prepended_suffix, + &GetCodec()); + if (api != nullptr) { + channel.SetMessageHandler( + [api](const EncodableValue& message, + const ::flutter::MessageReply& reply) { + try { + const auto& args = std::get(message); + const auto& encodable_app_name_arg = args.at(0); + if (encodable_app_name_arg.IsNull()) { + reply(WrapError("app_name_arg unexpectedly null.")); + return; + } + const auto& app_name_arg = + std::get(encodable_app_name_arg); + const auto& encodable_android_provider_arg = args.at(1); + const auto* android_provider_arg = + std::get_if(&encodable_android_provider_arg); + const auto& encodable_apple_provider_arg = args.at(2); + const auto* apple_provider_arg = + std::get_if(&encodable_apple_provider_arg); + const auto& encodable_debug_token_arg = args.at(3); + const auto* debug_token_arg = + std::get_if(&encodable_debug_token_arg); + api->Activate(app_name_arg, android_provider_arg, + apple_provider_arg, debug_token_arg, + [reply](std::optional&& output) { + if (output.has_value()) { + reply(WrapError(output.value())); + return; + } + EncodableList wrapped; + wrapped.push_back(EncodableValue()); + reply(EncodableValue(std::move(wrapped))); + }); + } catch (const std::exception& exception) { + reply(WrapError(exception.what())); + } + }); + } else { + channel.SetMessageHandler(nullptr); + } + } + { + BasicMessageChannel<> channel( + binary_messenger, + "dev.flutter.pigeon.firebase_app_check_platform_interface." + "FirebaseAppCheckHostApi.getToken" + + prepended_suffix, + &GetCodec()); + if (api != nullptr) { + channel.SetMessageHandler( + [api](const EncodableValue& message, + const ::flutter::MessageReply& reply) { + try { + const auto& args = std::get(message); + const auto& encodable_app_name_arg = args.at(0); + if (encodable_app_name_arg.IsNull()) { + reply(WrapError("app_name_arg unexpectedly null.")); + return; + } + const auto& app_name_arg = + std::get(encodable_app_name_arg); + const auto& encodable_force_refresh_arg = args.at(1); + if (encodable_force_refresh_arg.IsNull()) { + reply(WrapError("force_refresh_arg unexpectedly null.")); + return; + } + const auto& force_refresh_arg = + std::get(encodable_force_refresh_arg); + api->GetToken( + app_name_arg, force_refresh_arg, + [reply](ErrorOr>&& output) { + if (output.has_error()) { + reply(WrapError(output.error())); + return; + } + EncodableList wrapped; + auto output_optional = std::move(output).TakeValue(); + if (output_optional) { + wrapped.push_back( + EncodableValue(std::move(output_optional).value())); + } else { + wrapped.push_back(EncodableValue()); + } + reply(EncodableValue(std::move(wrapped))); + }); + } catch (const std::exception& exception) { + reply(WrapError(exception.what())); + } + }); + } else { + channel.SetMessageHandler(nullptr); + } + } + { + BasicMessageChannel<> channel( + binary_messenger, + "dev.flutter.pigeon.firebase_app_check_platform_interface." + "FirebaseAppCheckHostApi.setTokenAutoRefreshEnabled" + + prepended_suffix, + &GetCodec()); + if (api != nullptr) { + channel.SetMessageHandler( + [api](const EncodableValue& message, + const ::flutter::MessageReply& reply) { + try { + const auto& args = std::get(message); + const auto& encodable_app_name_arg = args.at(0); + if (encodable_app_name_arg.IsNull()) { + reply(WrapError("app_name_arg unexpectedly null.")); + return; + } + const auto& app_name_arg = + std::get(encodable_app_name_arg); + const auto& encodable_is_token_auto_refresh_enabled_arg = + args.at(1); + if (encodable_is_token_auto_refresh_enabled_arg.IsNull()) { + reply(WrapError( + "is_token_auto_refresh_enabled_arg unexpectedly null.")); + return; + } + const auto& is_token_auto_refresh_enabled_arg = + std::get(encodable_is_token_auto_refresh_enabled_arg); + api->SetTokenAutoRefreshEnabled( + app_name_arg, is_token_auto_refresh_enabled_arg, + [reply](std::optional&& output) { + if (output.has_value()) { + reply(WrapError(output.value())); + return; + } + EncodableList wrapped; + wrapped.push_back(EncodableValue()); + reply(EncodableValue(std::move(wrapped))); + }); + } catch (const std::exception& exception) { + reply(WrapError(exception.what())); + } + }); + } else { + channel.SetMessageHandler(nullptr); + } + } + { + BasicMessageChannel<> channel( + binary_messenger, + "dev.flutter.pigeon.firebase_app_check_platform_interface." + "FirebaseAppCheckHostApi.registerTokenListener" + + prepended_suffix, + &GetCodec()); + if (api != nullptr) { + channel.SetMessageHandler( + [api](const EncodableValue& message, + const ::flutter::MessageReply& reply) { + try { + const auto& args = std::get(message); + const auto& encodable_app_name_arg = args.at(0); + if (encodable_app_name_arg.IsNull()) { + reply(WrapError("app_name_arg unexpectedly null.")); + return; + } + const auto& app_name_arg = + std::get(encodable_app_name_arg); + api->RegisterTokenListener( + app_name_arg, [reply](ErrorOr&& output) { + if (output.has_error()) { + reply(WrapError(output.error())); + return; + } + EncodableList wrapped; + wrapped.push_back( + EncodableValue(std::move(output).TakeValue())); + reply(EncodableValue(std::move(wrapped))); + }); + } catch (const std::exception& exception) { + reply(WrapError(exception.what())); + } + }); + } else { + channel.SetMessageHandler(nullptr); + } + } + { + BasicMessageChannel<> channel( + binary_messenger, + "dev.flutter.pigeon.firebase_app_check_platform_interface." + "FirebaseAppCheckHostApi.getLimitedUseAppCheckToken" + + prepended_suffix, + &GetCodec()); + if (api != nullptr) { + channel.SetMessageHandler( + [api](const EncodableValue& message, + const ::flutter::MessageReply& reply) { + try { + const auto& args = std::get(message); + const auto& encodable_app_name_arg = args.at(0); + if (encodable_app_name_arg.IsNull()) { + reply(WrapError("app_name_arg unexpectedly null.")); + return; + } + const auto& app_name_arg = + std::get(encodable_app_name_arg); + api->GetLimitedUseAppCheckToken( + app_name_arg, [reply](ErrorOr&& output) { + if (output.has_error()) { + reply(WrapError(output.error())); + return; + } + EncodableList wrapped; + wrapped.push_back( + EncodableValue(std::move(output).TakeValue())); + reply(EncodableValue(std::move(wrapped))); + }); + } catch (const std::exception& exception) { + reply(WrapError(exception.what())); + } + }); + } else { + channel.SetMessageHandler(nullptr); + } + } +} + +EncodableValue FirebaseAppCheckHostApi::WrapError( + std::string_view error_message) { + return EncodableValue( + EncodableList{EncodableValue(std::string(error_message)), + EncodableValue("Error"), EncodableValue()}); +} + +EncodableValue FirebaseAppCheckHostApi::WrapError(const FlutterError& error) { + return EncodableValue(EncodableList{EncodableValue(error.code()), + EncodableValue(error.message()), + error.details()}); +} + +} // namespace firebase_app_check_windows diff --git a/mih_ui/android/build/macos/SourcePackages/firebase_app_check-0.4.5/windows/messages.g.h b/mih_ui/android/build/macos/SourcePackages/firebase_app_check-0.4.5/windows/messages.g.h new file mode 100644 index 00000000..50ae4829 --- /dev/null +++ b/mih_ui/android/build/macos/SourcePackages/firebase_app_check-0.4.5/windows/messages.g.h @@ -0,0 +1,119 @@ +// Copyright 2025, the Chromium project authors. Please see the AUTHORS file +// for details. All rights reserved. Use of this source code is governed by a +// BSD-style license that can be found in the LICENSE file. +// Autogenerated from Pigeon (v26.3.4), do not edit directly. +// See also: https://pub.dev/packages/pigeon + +#ifndef PIGEON_MESSAGES_G_H_ +#define PIGEON_MESSAGES_G_H_ +#include +#include +#include +#include + +#include +#include +#include + +namespace firebase_app_check_windows { + +// Generated class from Pigeon. + +class FlutterError { + public: + explicit FlutterError(const std::string& code) : code_(code) {} + explicit FlutterError(const std::string& code, const std::string& message) + : code_(code), message_(message) {} + explicit FlutterError(const std::string& code, const std::string& message, + const ::flutter::EncodableValue& details) + : code_(code), message_(message), details_(details) {} + + const std::string& code() const { return code_; } + const std::string& message() const { return message_; } + const ::flutter::EncodableValue& details() const { return details_; } + + private: + std::string code_; + std::string message_; + ::flutter::EncodableValue details_; +}; + +template +class ErrorOr { + public: + ErrorOr(const T& rhs) : v_(rhs) {} + ErrorOr(const T&& rhs) : v_(std::move(rhs)) {} + ErrorOr(const FlutterError& rhs) : v_(rhs) {} + ErrorOr(const FlutterError&& rhs) : v_(std::move(rhs)) {} + + bool has_error() const { return std::holds_alternative(v_); } + const T& value() const { return std::get(v_); }; + const FlutterError& error() const { return std::get(v_); }; + + private: + friend class FirebaseAppCheckHostApi; + ErrorOr() = default; + T TakeValue() && { return std::get(std::move(v_)); } + + std::variant v_; +}; + +class PigeonInternalCodecSerializer + : public ::flutter::StandardCodecSerializer { + public: + PigeonInternalCodecSerializer(); + inline static PigeonInternalCodecSerializer& GetInstance() { + static PigeonInternalCodecSerializer sInstance; + return sInstance; + } + + void WriteValue(const ::flutter::EncodableValue& value, + ::flutter::ByteStreamWriter* stream) const override; + + protected: + ::flutter::EncodableValue ReadValueOfType( + uint8_t type, ::flutter::ByteStreamReader* stream) const override; +}; + +// Generated interface from Pigeon that represents a handler of messages from +// Flutter. +class FirebaseAppCheckHostApi { + public: + FirebaseAppCheckHostApi(const FirebaseAppCheckHostApi&) = delete; + FirebaseAppCheckHostApi& operator=(const FirebaseAppCheckHostApi&) = delete; + virtual ~FirebaseAppCheckHostApi() {} + virtual void Activate( + const std::string& app_name, const std::string* android_provider, + const std::string* apple_provider, const std::string* debug_token, + std::function reply)> result) = 0; + virtual void GetToken( + const std::string& app_name, bool force_refresh, + std::function> reply)> + result) = 0; + virtual void SetTokenAutoRefreshEnabled( + const std::string& app_name, bool is_token_auto_refresh_enabled, + std::function reply)> result) = 0; + virtual void RegisterTokenListener( + const std::string& app_name, + std::function reply)> result) = 0; + virtual void GetLimitedUseAppCheckToken( + const std::string& app_name, + std::function reply)> result) = 0; + + // The codec used by FirebaseAppCheckHostApi. + static const ::flutter::StandardMessageCodec& GetCodec(); + // Sets up an instance of `FirebaseAppCheckHostApi` to handle messages through + // the `binary_messenger`. + static void SetUp(::flutter::BinaryMessenger* binary_messenger, + FirebaseAppCheckHostApi* api); + static void SetUp(::flutter::BinaryMessenger* binary_messenger, + FirebaseAppCheckHostApi* api, + const std::string& message_channel_suffix); + static ::flutter::EncodableValue WrapError(std::string_view error_message); + static ::flutter::EncodableValue WrapError(const FlutterError& error); + + protected: + FirebaseAppCheckHostApi() = default; +}; +} // namespace firebase_app_check_windows +#endif // PIGEON_MESSAGES_G_H_ diff --git a/mih_ui/android/build/macos/SourcePackages/firebase_app_check-0.4.5/windows/plugin_version.h.in b/mih_ui/android/build/macos/SourcePackages/firebase_app_check-0.4.5/windows/plugin_version.h.in new file mode 100644 index 00000000..0a52f845 --- /dev/null +++ b/mih_ui/android/build/macos/SourcePackages/firebase_app_check-0.4.5/windows/plugin_version.h.in @@ -0,0 +1,13 @@ +// Copyright 2025, the Chromium project authors. Please see the AUTHORS file +// for details. All rights reserved. Use of this source code is governed by a +// BSD-style license that can be found in the LICENSE file. + +#ifndef PLUGIN_VERSION_CONFIG_H +#define PLUGIN_VERSION_CONFIG_H + +namespace firebase_app_check_windows { + +std::string getPluginVersion() { return "@PLUGIN_VERSION@"; } +} // namespace firebase_app_check_windows + +#endif // PLUGIN_VERSION_CONFIG_H diff --git a/mih_ui/android/build/macos/SourcePackages/firebase_auth-6.5.4/CHANGELOG.md b/mih_ui/android/build/macos/SourcePackages/firebase_auth-6.5.4/CHANGELOG.md new file mode 100644 index 00000000..b712b5e1 --- /dev/null +++ b/mih_ui/android/build/macos/SourcePackages/firebase_auth-6.5.4/CHANGELOG.md @@ -0,0 +1,1613 @@ +## 6.5.4 + + - **FIX**: resolve FlutterSceneLifeCycleDelegate conformance guard ([#18385](https://github.com/firebase/flutterfire/issues/18385)). ([48d67196](https://github.com/firebase/flutterfire/commit/48d67196a10affe09724529df5f67cf40b62bccf)) + +## 6.5.3 + + - Update a dependency to the latest release. + +## 6.5.2 + + - **FIX**(auth,android): update token retrieval in PigeonParser to handle Number type correctly ([#18328](https://github.com/firebase/flutterfire/issues/18328)). ([3b77147b](https://github.com/firebase/flutterfire/commit/3b77147bc00bb19af5f4821436a1a4cdd8ff6791)) + - **DOCS**(auth): clarify behavior of password reset email with email enumeration protection enabled ([#18296](https://github.com/firebase/flutterfire/issues/18296)). ([0bcce87a](https://github.com/firebase/flutterfire/commit/0bcce87a17830797dae6ff3c1a8ba4ce210c2c0d)) + +## 6.5.1 + + - Update a dependency to the latest release. + +## 6.5.0 + + - **REFACTOR**: move all packages to workspace ([#18182](https://github.com/firebase/flutterfire/issues/18182)). ([6cdfcb10](https://github.com/firebase/flutterfire/commit/6cdfcb103da7be46ccb190d7e107d8c537aa1ff8)) + - **FIX**: update core, auth and app-check logic so internal resources on method channels are properly disposed ([#18268](https://github.com/firebase/flutterfire/issues/18268)). ([a0de4ed8](https://github.com/firebase/flutterfire/commit/a0de4ed86b0dff89bb9e557f2a54f38cd2546016)) + - **FIX**(auth,apple): remove incorrect paths in Package.swift files search paths ([#18239](https://github.com/firebase/flutterfire/issues/18239)). ([7c2fa5b8](https://github.com/firebase/flutterfire/commit/7c2fa5b83201f2f68e031476dc37ad41809215f2)) + - **FIX**(auth,iOS): update import path for autogenerated messages ([#18227](https://github.com/firebase/flutterfire/issues/18227)). ([4351179d](https://github.com/firebase/flutterfire/commit/4351179d357eeab6b23ec66f45d558c02d3fde69)) + - **FEAT**(core): Add Auth and AppCheck as App's registered service. ([#18237](https://github.com/firebase/flutterfire/issues/18237)). ([7ce191cb](https://github.com/firebase/flutterfire/commit/7ce191cbd598b299cd0ec64b45d1366914367a5d)) + - **FEAT**: upgrade pigeon to version 26.3.4 ([#18205](https://github.com/firebase/flutterfire/issues/18205)). ([cb6b4aef](https://github.com/firebase/flutterfire/commit/cb6b4aeffc568755ea3eebe32b998f00237bf5ad)) + - **FEAT**(auth,android): add revokeAccessToken support for Android ([#18206](https://github.com/firebase/flutterfire/issues/18206)) ([#18207](https://github.com/firebase/flutterfire/issues/18207)). ([7e0a2227](https://github.com/firebase/flutterfire/commit/7e0a222700178a57d064c27b4ef62cefdda1e253)) + +## 6.4.0 + + - **FIX**(auth,ios): serialize Sign in with Apple to prevent crash on overlapping requests ([#18172](https://github.com/firebase/flutterfire/issues/18172)). ([752cbcaa](https://github.com/firebase/flutterfire/commit/752cbcaa57f887a8fea3bda728bb8482290fa049)) + - **FEAT**: use local firebase_core instead of remote SPM dependency ([#18141](https://github.com/firebase/flutterfire/issues/18141)). ([995caf40](https://github.com/firebase/flutterfire/commit/995caf400df80c0fde7151c651ccc6c0f756e381)) + +## 6.3.0 + + - **FIX**(auth): fix inconsistence in casing in the native iOS SDK and Web SDK ([#18086](https://github.com/firebase/flutterfire/issues/18086)). ([60b5cd5c](https://github.com/firebase/flutterfire/commit/60b5cd5c7888fa932124958125e87bd39e1c323c)) + - **FIX**(auth,ios): fix crash that could happen when reloading currentUser informations ([#18065](https://github.com/firebase/flutterfire/issues/18065)). ([6e6f6546](https://github.com/firebase/flutterfire/commit/6e6f65468c07045e1c21b1d7970234b2dfc16b3d)) + - **FIX**(auth,windows): add pluginregistry to properly restore state on Windows ([#18049](https://github.com/firebase/flutterfire/issues/18049)). ([8d715a77](https://github.com/firebase/flutterfire/commit/8d715a777a4827bff59f820d9978007bd7568a7d)) + - **FEAT**(ios): migrate iOS to UIScene lifecycle ([#18054](https://github.com/firebase/flutterfire/issues/18054)). ([3ffa4110](https://github.com/firebase/flutterfire/commit/3ffa411098132fd5182a84be4e7a226106bc7451)) + - **DOCS**(auth): add documentation about errors code when Email Enumeration Protection is activated ([#18084](https://github.com/firebase/flutterfire/issues/18084)). ([476ba53f](https://github.com/firebase/flutterfire/commit/476ba53f016f20009fd571ad6ab359631f97094b)) + +## 6.2.0 + + - **FEAT**(remote-config,windows): add support for windows ([#18006](https://github.com/firebase/flutterfire/issues/18006)). ([a6ec167f](https://github.com/firebase/flutterfire/commit/a6ec167f4ece9c9b455a916366781f482cc380b3)) + +## 6.1.4 + + - Update a dependency to the latest release. + +## 6.1.3 + + - Update a dependency to the latest release. + +## 6.1.2 + + - Update a dependency to the latest release. + +## 6.1.1 + + - Update a dependency to the latest release. + +## 6.1.0 + + - **FEAT**(auth): TOTP macOS support ([#17513](https://github.com/firebase/flutterfire/issues/17513)). ([41890d62](https://github.com/firebase/flutterfire/commit/41890d62a49258df097c19fd3b90e0b5de181526)) + +## 6.0.2 + + - Update a dependency to the latest release. + +## 6.0.1 + + - **FIX**(auth,apple): Move FirebaseAuth imports to implementation files ([#17607](https://github.com/firebase/flutterfire/issues/17607)). ([0c3ccd37](https://github.com/firebase/flutterfire/commit/0c3ccd3722038a47e656b0a703a0395a78befc5b)) + +## 6.0.0 + +> Note: This release has breaking changes. + + - **FEAT**(auth): validatePassword method/PasswordPolicy Support ([#17439](https://github.com/firebase/flutterfire/issues/17439)). ([9a032b34](https://github.com/firebase/flutterfire/commit/9a032b344d6a22c1e3a181ae27e511939f2d8972)) + - **BREAKING** **FEAT**: bump iOS SDK to version 12.0.0 ([#17549](https://github.com/firebase/flutterfire/issues/17549)). ([b2619e68](https://github.com/firebase/flutterfire/commit/b2619e685fec897513483df1d7be347b64f95606)) + - **BREAKING** **FEAT**(auth): remove deprecated functions ([#17562](https://github.com/firebase/flutterfire/issues/17562)). ([d50aad95](https://github.com/firebase/flutterfire/commit/d50aad954443904d64d4ebd4442ebc63ed702986)) + - **BREAKING** **FEAT**: bump Android SDK to version 34.0.0 ([#17554](https://github.com/firebase/flutterfire/issues/17554)). ([a5bdc051](https://github.com/firebase/flutterfire/commit/a5bdc051d40ee44e39cf0b8d2a7801bc6f618b67)) + +## Removed Methods + +- `ActionCodeSettings.dynamicLinkDomain` - Firebase Dynamic Links is deprecated and will be shut down +- `MicrosoftAuthProvider.credential()` - Use `signInWithProvider(MicrosoftAuthProvider)` instead +- `FirebaseAuth.instanceFor()` persistence parameter - Use `setPersistence()` instead +- `FirebaseAuth.fetchSignInMethodsForEmail()` - Removed for security best practices +- `User.updateEmail()` - Use `verifyBeforeUpdateEmail()` instead + +## Migration Guide + +### ActionCodeSettings +```dart +// Before +ActionCodeSettings( + url: 'https://example.com', + dynamicLinkDomain: 'example.page.link', +) + +// After +ActionCodeSettings( + url: 'https://example.com', + linkDomain: 'your-custom-domain.com', // Use custom Firebase Hosting domain +) +``` + +### Microsoft Authentication +```dart +// Before +final credential = MicrosoftAuthProvider.credential(accessToken); +await FirebaseAuth.instance.signInWithCredential(credential); + +// After +final provider = MicrosoftAuthProvider(); +await FirebaseAuth.instance.signInWithProvider(provider); +``` + +### FirebaseAuth Instance +```dart +// Before +FirebaseAuth.instanceFor(app: app, persistence: Persistence.local); + +// After +final auth = FirebaseAuth.instanceFor(app: app); +auth.setPersistence(Persistence.local); +``` + +### Email Updates +```dart +// Before +await user.updateEmail('new@email.com'); + +// After +await user.verifyBeforeUpdateEmail('new@email.com'); +``` + +### Email Sign-in Methods +The `fetchSignInMethodsForEmail()` method has been removed for security reasons. Consider implementing alternative authentication flows that don't require email enumeration. + +## 5.7.0 + + - **FEAT**(auth,macos): add support for `publish` and `addApplicationDelegate` on macOS FlutterPluginRegistrar ([#17518](https://github.com/firebase/flutterfire/issues/17518)). ([376bb6ea](https://github.com/firebase/flutterfire/commit/376bb6ea8878df3f25cc1416fe26ace2203fd793)) + +## 5.6.2 + + - Update a dependency to the latest release. + +## 5.6.1 + + - Update a dependency to the latest release. + +## 5.6.0 + + - **FEAT**(auth): add support for initializeRecaptchaConfig ([#17365](https://github.com/firebase/flutterfire/issues/17365)). ([73f9028e](https://github.com/firebase/flutterfire/commit/73f9028e114874fddc8a4f76f22b247504a95a02)) + +## 5.5.4 + + - **FIX**(auth,apple): prevent EXC_BAD_ACCESS crash in Apple Sign-In completion handler ([#17273](https://github.com/firebase/flutterfire/issues/17273)). ([cc7d28ae](https://github.com/firebase/flutterfire/commit/cc7d28ae09036464f7ece6a2637bae6a3c7a292d)) + - **DOCS**(firebase_auth): Removed duplicates; fixed typos; removed "unnecessary use of a null check" ([#16815](https://github.com/firebase/flutterfire/issues/16815)). ([0eb17e13](https://github.com/firebase/flutterfire/commit/0eb17e13587ebfe5c8d64cbba9c0a2ccd0b7ce90)) + +## 5.5.3 + + - **FIX**(auth,iOS): include missing email and credential in account-exists-with-different-credential error ([#17180](https://github.com/firebase/flutterfire/issues/17180)). ([2a0bdc64](https://github.com/firebase/flutterfire/commit/2a0bdc64086e99f8a98bd18b472b36bcfe05a9a4)) + +## 5.5.2 + + - Update a dependency to the latest release. + +## 5.5.1 + + - Update a dependency to the latest release. + +## 5.5.0 + + - **FEAT**(auth): support for `linkDomain` in `ActionCodeSettings` ([#17099](https://github.com/firebase/flutterfire/issues/17099)). ([090cdb20](https://github.com/firebase/flutterfire/commit/090cdb2078dc66e58aa4b1a3ef9a48101467b6ac)) + +## 5.4.2 + + - Update a dependency to the latest release. + +## 5.4.1 + + - Update a dependency to the latest release. + +## 5.4.0 + + + - **FIX**: Remove dart:io imports for analytics, auth and app check ([#16827](https://github.com/firebase/flutterfire/issues/16827)). ([8c7f57c4](https://github.com/firebase/flutterfire/commit/8c7f57c4a181b8cae3b0d2ba564682ad7d68f484)) + - **FIX**(firebase_auth): Fix `std::variant` compiler errors with VS 2022 17.12 ([#16840](https://github.com/firebase/flutterfire/issues/16840)). ([b88b71f4](https://github.com/firebase/flutterfire/commit/b88b71f45c856eb0ff2d2caefb8b6aa367e91418)) + - **FEAT**(auth): Swift Package Manager support ([#16773](https://github.com/firebase/flutterfire/issues/16773)). ([69abbe19](https://github.com/firebase/flutterfire/commit/69abbe19bb37e6eb450b0b5123a74c2d68a761c7)) + +## 5.3.4 + + - **FIX**(auth,android): `signInWithProvider()` for non-default instances ([#13522](https://github.com/firebase/flutterfire/issues/13522)). ([fe016a44](https://github.com/firebase/flutterfire/commit/fe016a4487993c8aa444e15c9881fe355b5f6624)) + +## 5.3.3 + + - Update a dependency to the latest release. + +## 5.3.2 + + - **FIX**(auth,apple): set nullability on pigeon parser method ([#13571](https://github.com/firebase/flutterfire/issues/13571)). ([7e8a1b2e](https://github.com/firebase/flutterfire/commit/7e8a1b2e5be454b168d942056c4abb7f8e92a9a8)) + +## 5.3.1 + + - **FIX**(all,apple): use modular headers to import ([#13400](https://github.com/firebase/flutterfire/issues/13400)). ([d7d2d4b9](https://github.com/firebase/flutterfire/commit/d7d2d4b93e7c00226027fffde46699f3d5388a41)) + +## 5.3.0 + + - **FEAT**(fdc): Initial Release of Data Connect ([#13313](https://github.com/firebase/flutterfire/issues/13313)). ([603a6726](https://github.com/firebase/flutterfire/commit/603a67261a2f7cbdd6ef594bfaef480aeb820683)) + +## 5.2.1 + + - Update a dependency to the latest release. + +## 5.2.0 + + - **FEAT**: bump iOS SDK to version 11.0.0 ([#13158](https://github.com/firebase/flutterfire/issues/13158)). ([c0e0c997](https://github.com/firebase/flutterfire/commit/c0e0c99703ea394d1bb873ac225c5fe3539b002d)) + - **DOCS**: remove reference to flutter.io and firebase.flutter.dev ([#13152](https://github.com/firebase/flutterfire/issues/13152)). ([5f0874b9](https://github.com/firebase/flutterfire/commit/5f0874b91e28a203dd62d37d391e5760c91f5729)) + +## 5.1.4 + + - **FIX**(firebase_auth): added supporting rawNonce for OAuth credential on Windows platform ([#13086](https://github.com/firebase/flutterfire/issues/13086)). ([12e87de9](https://github.com/firebase/flutterfire/commit/12e87de93ddc39d41a6a634d7d03766b3e36996a)) + +## 5.1.3 + + - **DOCS**(auth): add information about error codes for email/password functions ([#13100](https://github.com/firebase/flutterfire/issues/13100)). ([aeafc356](https://github.com/firebase/flutterfire/commit/aeafc356953a0531003f765e766ffcff2387401d)) + +## 5.1.2 + + - **DOCS**(auth): add information about error codes for `verifyBeforeUpdateEmail` ([#13036](https://github.com/firebase/flutterfire/issues/13036)). ([8ef7421d](https://github.com/firebase/flutterfire/commit/8ef7421d6a524938087769537ac70ec249096ed4)) + +## 5.1.1 + + - **FIX**(auth,apple): bug with cached `AuthCredential`, hash key was producing different value ([#12957](https://github.com/firebase/flutterfire/issues/12957)). ([ef0077e3](https://github.com/firebase/flutterfire/commit/ef0077e37744360264eb60d6eea4359a5cc13227)) + - **FIX**(auth,windows): fix a crash that could happen when using `sendEmailVerification` or `sendPasswordResetEmail` ([#12946](https://github.com/firebase/flutterfire/issues/12946)). ([a1008290](https://github.com/firebase/flutterfire/commit/a100829087dbf83ea59e73c3811d87b67e2a4012)) + - **DOCS**: Update documentation for auth/user-not-found exception to reflect email enumeration protection ([#12964](https://github.com/firebase/flutterfire/issues/12964)). ([125f8209](https://github.com/firebase/flutterfire/commit/125f820971331ec75e7fe59cff3b296c42c7d8f3)) + +## 5.1.0 + + - **FIX**(auth,ios): fix the parsing of an error that could specifically happen when using MicrosoftProvider ([#12920](https://github.com/firebase/flutterfire/issues/12920)). ([3b415e64](https://github.com/firebase/flutterfire/commit/3b415e641e6107b131a170277bbc1fa0e2908e27)) + - **FEAT**(auth,apple): create a credential with `idToken`, `rawNonce` & `appleFullPersonName` ([#12356](https://github.com/firebase/flutterfire/issues/12356)). ([17793080](https://github.com/firebase/flutterfire/commit/177930802ca13a3af1610968e54b8ce79f0781ca)) + +## 5.0.0 + +> Note: This release has breaking changes. + + - **BREAKING** **REFACTOR**: android plugins require `minSdk 21`, auth requires `minSdk 23` ahead of android BOM `>=33.0.0` ([#12873](https://github.com/firebase/flutterfire/issues/12873)). ([52accfc6](https://github.com/firebase/flutterfire/commit/52accfc6c39d6360d9c0f36efe369ede990b7362)) + - **BREAKING** **REFACTOR**: bump all iOS deployment targets to iOS 13 ahead of Firebase iOS SDK `v11` breaking change ([#12872](https://github.com/firebase/flutterfire/issues/12872)). ([de0cea2c](https://github.com/firebase/flutterfire/commit/de0cea2c3c36694a76361be784255986fac84a43)) + - **BREAKING** **REFACTOR**(auth): remove deprecated API ahead of breaking change release ([#12859](https://github.com/firebase/flutterfire/issues/12859)). ([995fa7e1](https://github.com/firebase/flutterfire/commit/995fa7e19540fe52ba75a66865823c8ca86b6657)) + +## 4.20.0 + + - **FIX**(auth,android): remove unnecessary error type guarding ([#12816](https://github.com/firebase/flutterfire/issues/12816)). ([7d4c200a](https://github.com/firebase/flutterfire/commit/7d4c200ac6f06a50c2e7ee852aea2c9fa7bcb0ff)) + - **FEAT**(auth,windows): `verifyBeforeUpdateEmail()` API support ([#12825](https://github.com/firebase/flutterfire/issues/12825)). ([111b1ad9](https://github.com/firebase/flutterfire/commit/111b1ad91e985b0462532bc579e64342b7f46fe2)) + - **FEAT**(auth): update Pigeon version to 19 ([#12828](https://github.com/firebase/flutterfire/issues/12828)). ([5e76153f](https://github.com/firebase/flutterfire/commit/5e76153fbcd337a26e83abc2b43b651ab6c501bc)) + - **FEAT**: bump CPP SDK to version 11.10.0 ([#12749](https://github.com/firebase/flutterfire/issues/12749)). ([2e410a23](https://github.com/firebase/flutterfire/commit/2e410a232758292baa70f8e78464bd3c62ec0373)) + +## 4.19.6 + + - **FIX**(auth,android): allow nullable `accessToken` when creating `OAuthProvider` ([#12795](https://github.com/firebase/flutterfire/issues/12795)). ([490319d4](https://github.com/firebase/flutterfire/commit/490319d4c046917bdd227c19fd37185d63076b4a)) + +## 4.19.5 + + - **FIX**(auth,windows): allow `idToken` and `accessToken` to be nullable to stop windows crashing for `signInWithCredential()` ([#12688](https://github.com/firebase/flutterfire/issues/12688)). ([ca9f92d0](https://github.com/firebase/flutterfire/commit/ca9f92d05f717b46c80307987f560454b90a4d67)) + +## 4.19.4 + + - Update a dependency to the latest release. + +## 4.19.3 + + - **FIX**(auth,ios): Give more details on internal error when calling `sendSignInLinkToEmail`. ([#12671](https://github.com/firebase/flutterfire/issues/12671)). ([2b086029](https://github.com/firebase/flutterfire/commit/2b0860296bf577c99810643bb286b7219ee9291f)) + +## 4.19.2 + + - Update a dependency to the latest release. + +## 4.19.1 + + - Update a dependency to the latest release. + +## 4.19.0 + + - **FEAT**(android): Bump `compileSdk` version of Android plugins to latest stable (34) ([#12566](https://github.com/firebase/flutterfire/issues/12566)). ([e891fab2](https://github.com/firebase/flutterfire/commit/e891fab291e9beebc223000b133a6097e066a7fc)) + +## 4.18.0 + + - **FIX**(auth,android): fixing an issue that could cause `getEnrolledFactors` to return an empty list if signing out in the same app session ([#12488](https://github.com/firebase/flutterfire/issues/12488)). ([04280a31](https://github.com/firebase/flutterfire/commit/04280a31310dbbe51a8e619f031f5190d02e695d)) + - **FEAT**(firebase_auth): add custom auth domain setter to Firebase Auth ([#12218](https://github.com/firebase/flutterfire/issues/12218)). ([e1297800](https://github.com/firebase/flutterfire/commit/e12978009e0fd785f267db560972ab0bbe021fcb)) + - **FEAT**(auth,windows): add support for oAuth with credentials on Windows ([#12154](https://github.com/firebase/flutterfire/issues/12154)). ([cc708e6f](https://github.com/firebase/flutterfire/commit/cc708e6fdce6053772da0f08c9872e1dbe9899b1)) + +## 4.17.9 + + - Update a dependency to the latest release. + +## 4.17.8 + + - Update a dependency to the latest release. + +## 4.17.7 + + - Update a dependency to the latest release. + +## 4.17.6 + + - Update a dependency to the latest release. + +## 4.17.5 + + - Update a dependency to the latest release. + +## 4.17.4 + + - Update a dependency to the latest release. + +## 4.17.3 + + - Update a dependency to the latest release. + +## 4.17.2 + + - **FIX**(auth,web): fix null safety issue in typing JS Interop ([#12250](https://github.com/firebase/flutterfire/issues/12250)). ([d0d30405](https://github.com/firebase/flutterfire/commit/d0d30405a895ae221603ddd158b1cb1636312fb4)) + +## 4.17.1 + + - Update a dependency to the latest release. + +## 4.17.0 + + - **FIX**(auth): deprecate `updateEmail()` & `fetchSignInMethodsForEmail()` ([#12143](https://github.com/firebase/flutterfire/issues/12143)). ([dcfd9e80](https://github.com/firebase/flutterfire/commit/dcfd9e801c3231d17821355df5865b179cf0bf11)) + - **FEAT**(auth,apple): Game Center sign-in support ([#12228](https://github.com/firebase/flutterfire/issues/12228)). ([ac625ec7](https://github.com/firebase/flutterfire/commit/ac625ec7a2ceb8c7ef78180f3bcaa8294cf06a2e)) + - **FEAT**(auth,android): Play Games provider sign-in support ([#12201](https://github.com/firebase/flutterfire/issues/12201)). ([1fb9019d](https://github.com/firebase/flutterfire/commit/1fb9019de1fd832223aa56139d98c1194b2d5efa)) + - **FEAT**(auth,windows): add support for `creationTime` and `lastSignInTime` ([#12116](https://github.com/firebase/flutterfire/issues/12116)). ([387e9434](https://github.com/firebase/flutterfire/commit/387e94343a237d0976bdfa4f5c0e20c6922456fa)) + +## 4.16.0 + + - **FIX**(auth,windows): fix a parsing issue of the Pigeon message on Windows for sendPasswordResetEmail ([#12082](https://github.com/firebase/flutterfire/issues/12082)). ([17c4ab12](https://github.com/firebase/flutterfire/commit/17c4ab128650c8e7a4f7e3cea0c55d1fea0998fd)) + - **FEAT**: allow users to disable automatic host mapping ([#11962](https://github.com/firebase/flutterfire/issues/11962)). ([13c1ce33](https://github.com/firebase/flutterfire/commit/13c1ce333b8cd113241a1f7ac07181c1c76194bc)) + +## 4.15.3 + + - **FIX**(auth): return email address if one is returned by the auth exception ([#11978](https://github.com/firebase/flutterfire/issues/11978)). ([ceee304d](https://github.com/firebase/flutterfire/commit/ceee304dd87cd66e34a7f7fa67c9961b72c10e72)) + +## 4.15.2 + + - Update a dependency to the latest release. + +## 4.15.1 + + - Update a dependency to the latest release. + +## 4.15.0 + + - **FEAT**(auth): add support for custom domains on mobile ([#11925](https://github.com/firebase/flutterfire/issues/11925)). ([552119c7](https://github.com/firebase/flutterfire/commit/552119c78e2750a929c6226de22f9f6d8df948a4)) + +## 4.14.1 + + - **FIX**(auth,apple): need to cache `AuthCredential` on native in case Dart exception passes `AuthCredential` back to user for sign-in ([#11889](https://github.com/firebase/flutterfire/issues/11889)). ([9c09f224](https://github.com/firebase/flutterfire/commit/9c09f22416f549e3b80bc7e618b07c1c3c24ee31)) + - **FIX**(auth,web): use the device language when using `setLanguageCode` with null ([#11905](https://github.com/firebase/flutterfire/issues/11905)). ([f9322b6f](https://github.com/firebase/flutterfire/commit/f9322b6f25cd9520c5e033361e63a4db3f375a15)) + - **FIX**(auth): add proper error message when trying to access the multifactor object on an unsupported platform ([#11894](https://github.com/firebase/flutterfire/issues/11894)). ([27d1c47d](https://github.com/firebase/flutterfire/commit/27d1c47d1168198e9fa296fcff52feb1f0a345d2)) + +## 4.14.0 + + - **FEAT**(auth,windows): add Windows support for Google Sign In ([#11861](https://github.com/firebase/flutterfire/issues/11861)). ([cde57d05](https://github.com/firebase/flutterfire/commit/cde57d059e099913efc994db27141540a2a981d1)) + +## 4.13.0 + + - **FEAT**(firebase_auth): export `AuthProvider` from `firebase_auth_interface` ([#11470](https://github.com/firebase/flutterfire/issues/11470)). ([39881e7e](https://github.com/firebase/flutterfire/commit/39881e7e4671faa94b274d980aad81829e6e0bfc)) + - **FEAT**(windows): add platform logging for core, auth, firestore and storage ([#11790](https://github.com/firebase/flutterfire/issues/11790)). ([e7d428d1](https://github.com/firebase/flutterfire/commit/e7d428d14be1535a2d579d4b2d376fbb81f06742)) + +## 4.12.1 + + - Update a dependency to the latest release. + +## 4.12.0 + + - **FEAT**(storage,windows): Add windows support ([#11617](https://github.com/firebase/flutterfire/issues/11617)). ([87ea02c8](https://github.com/firebase/flutterfire/commit/87ea02c8ae03eb351636cf202961ad0df6caebd8)) + +## 4.11.1 + + - **FIX**(ios): fix clashing filenames between Auth and Firestore ([#11731](https://github.com/firebase/flutterfire/issues/11731)). ([8770cafc](https://github.com/firebase/flutterfire/commit/8770cafccccb11607b5530311e3150ac08cd172e)) + +## 4.11.0 + + - **FIX**(auth): ensure `PigeonAuthCredential` is passed back to Dart side within try/catch ([#11683](https://github.com/firebase/flutterfire/issues/11683)). ([d42c3396](https://github.com/firebase/flutterfire/commit/d42c33969b096a9825af21c624f8d93aebede8b2)) + - **FEAT**: Full support of AGP 8 ([#11699](https://github.com/firebase/flutterfire/issues/11699)). ([bdb5b270](https://github.com/firebase/flutterfire/commit/bdb5b27084d225809883bdaa6aa5954650551927)) + - **FEAT**(firestore,windows): add support to Windows ([#11516](https://github.com/firebase/flutterfire/issues/11516)). ([e51d2a2d](https://github.com/firebase/flutterfire/commit/e51d2a2d287f4162f5a67d8200f1bf57fc2afe14)) + +## 4.10.1 + + - Update a dependency to the latest release. + +## 4.10.0 + + - **FIX**(auth): deprecate `FirebaseAuth.instanceFor`'s `persistence` parameter ([#11259](https://github.com/firebase/flutterfire/issues/11259)). ([a1966e82](https://github.com/firebase/flutterfire/commit/a1966e82c15f13119cb28a262a57c67b4f2b8d3b)) + - **FIX**(auth,apple): `fetchSignInMethodsForEmail` if value is `nil`, pass empty array. ([#11596](https://github.com/firebase/flutterfire/issues/11596)). ([6d261cc9](https://github.com/firebase/flutterfire/commit/6d261cc9a147befbfd203004aff8565492567f58)) + - **FEAT**(core,windows): Change the windows plugin compiling way ([#11594](https://github.com/firebase/flutterfire/issues/11594)). ([3dab95e0](https://github.com/firebase/flutterfire/commit/3dab95e01f7f71680aff84db4e9dccfe1e77643b)) + - **FEAT**(auth,windows): add Windows support to auth plugin ([#11089](https://github.com/firebase/flutterfire/issues/11089)). ([0cedfc85](https://github.com/firebase/flutterfire/commit/0cedfc8580bedd9e21b262537e643dbace0d7114)) + - **DOCS**: firebase_auth description ([#11292](https://github.com/firebase/flutterfire/issues/11292)). ([d9e05713](https://github.com/firebase/flutterfire/commit/d9e057137dffca09ea293b5df7292d7b7b21ca99)) + - **DOCS**(auth): update the incorrect "getting started" link ([#11440](https://github.com/firebase/flutterfire/issues/11440)). ([5db956dc](https://github.com/firebase/flutterfire/commit/5db956dc935dfec5be28e0463f7e8499a20d5577)) + +## 4.9.0 + + - **FEAT**(auth): TOTP (time-based one-time password) support for multi-factor authentication ([#11420](https://github.com/firebase/flutterfire/issues/11420)). ([3cc1243c](https://github.com/firebase/flutterfire/commit/3cc1243c94368de44d3a5c4be96b905a0a37b963)) + +## 4.8.0 + + - **FEAT**(auth): `revokeTokenWithAuthorizationCode()` implementation for revoking Apple sign-in token ([#11454](https://github.com/firebase/flutterfire/issues/11454)). ([92de98c9](https://github.com/firebase/flutterfire/commit/92de98c9e62f2bf20712dbfed22dd39f6883eb58)) + +## 4.7.3 + + - **FIX**(auth): rename import header to "firebase_auth_messages.g.h". ([#11472](https://github.com/firebase/flutterfire/issues/11472)). ([693a6f3c](https://github.com/firebase/flutterfire/commit/693a6f3cba3620933b905a964126406ae6ae3374)) + - **FIX**(firebase_auth): Fix forceRefresh parameter conversion before calling native API ([#11464](https://github.com/firebase/flutterfire/issues/11464)). ([86639876](https://github.com/firebase/flutterfire/commit/86639876b8e9138af740a1c74c122fcdb5c4566d)) + - **FIX**(auth): set the tenant id on iOS `FIRAuth` instance ([#11427](https://github.com/firebase/flutterfire/issues/11427)). ([15f3cf5d](https://github.com/firebase/flutterfire/commit/15f3cf5d9b86f287fac22370ea09abf9e773ea60)) + - **FIX**(firebase_auth,android): Remove implicit default locale used in error message ([#11321](https://github.com/firebase/flutterfire/issues/11321)). ([3a20f41c](https://github.com/firebase/flutterfire/commit/3a20f41c0d8a4d61d789874d7bb16d6ef710c9d1)) + +## 4.7.2 + + - **FIX**(auth): fix MFA issue where the error wouldn't be properly caught ([#11370](https://github.com/firebase/flutterfire/issues/11370)). ([72fef03f](https://github.com/firebase/flutterfire/commit/72fef03f775702aaf9a2ce0c6b31aea2a3c200a9)) + - **FIX**(auth,android): `getIdToken()` `IllegalStateException` crash fix ([#11362](https://github.com/firebase/flutterfire/issues/11362)). ([e925b4c9](https://github.com/firebase/flutterfire/commit/e925b4c9a937d90de0bdfb59ffa005938b3862dd)) + - **FIX**(auth,apple): pass in Firebase auth instance for correct app when using Provider sign in ([#11284](https://github.com/firebase/flutterfire/issues/11284)). ([1cffae79](https://github.com/firebase/flutterfire/commit/1cffae79ded28808ba55f2f4c9c1b47817987999)) + +## 4.7.1 + + - **FIX**(auth,android): Fix crash on Android where detaching from engine ([#11296](https://github.com/firebase/flutterfire/issues/11296)). ([d0a37332](https://github.com/firebase/flutterfire/commit/d0a373323a818d5005a58e95042b7ea3652ead50)) + - **FIX**(auth,ios): fix scoping of import for message.g.h, could cause incompatibility with other packages ([#11300](https://github.com/firebase/flutterfire/issues/11300)). ([91ccc57d](https://github.com/firebase/flutterfire/commit/91ccc57d4b40b1b7a77dc0d871f9ff7d3f24ba13)) + +## 4.7.0 + + - **FEAT**(auth): move to Pigeon for Platform channels ([#10802](https://github.com/firebase/flutterfire/issues/10802)). ([43e5b20b](https://github.com/firebase/flutterfire/commit/43e5b20b14799102a6544a4763476eaba44b9cfb)) + +## 4.6.3 + + - Update a dependency to the latest release. + +## 4.6.2 + + - Update a dependency to the latest release. + +## 4.6.1 + + - Update a dependency to the latest release. + +## 4.6.0 + + - **FEAT**: update dependency constraints to `sdk: '>=2.18.0 <4.0.0'` `flutter: '>=3.3.0'` ([#10946](https://github.com/firebase/flutterfire/issues/10946)). ([2772d10f](https://github.com/firebase/flutterfire/commit/2772d10fe510dcc28ec2d37a26b266c935699fa6)) + - **FEAT**: update libraries to be compatible with Flutter 3.10.0 ([#10944](https://github.com/firebase/flutterfire/issues/10944)). ([e1f5a5ea](https://github.com/firebase/flutterfire/commit/e1f5a5ea798c54f19d1d2f7b8f2250f8819f44b7)) + +## 4.5.0 + + - **FIX**: add support for AGP 8.0 ([#10901](https://github.com/firebase/flutterfire/issues/10901)). ([a3b96735](https://github.com/firebase/flutterfire/commit/a3b967354294c295a9be8d699a6adb7f4b1dba7f)) + - **FEAT**: upgrade to dart 3 compatible dependencies ([#10890](https://github.com/firebase/flutterfire/issues/10890)). ([4bd7e59b](https://github.com/firebase/flutterfire/commit/4bd7e59b1f2b09a2230c49830159342dd4592041)) + +## 4.4.2 + + - Update a dependency to the latest release. + +## 4.4.1 + + - Update a dependency to the latest release. + +## 4.4.0 + + - **FEAT**(auth,ios): automatically save the Apple Sign In display name ([#10652](https://github.com/firebase/flutterfire/issues/10652)). ([257f1ffb](https://github.com/firebase/flutterfire/commit/257f1ffbce7abd458df91d8e4b6422d83b5b849f)) + - **FEAT**: bump dart sdk constraint to 2.18 ([#10618](https://github.com/firebase/flutterfire/issues/10618)). ([f80948a2](https://github.com/firebase/flutterfire/commit/f80948a28b62eead358bdb900d5a0dfb97cebb33)) + +## 4.3.0 + + - **FIX**(auth): fix an issue where unenroll would not throw a FirebaseException ([#10572](https://github.com/firebase/flutterfire/issues/10572)). ([8dba33e1](https://github.com/firebase/flutterfire/commit/8dba33e1a95f03d70d527885aa58ce23622e359f)) + - **FEAT**(auth): improve error handling when Email enumeration feature is on ([#10591](https://github.com/firebase/flutterfire/issues/10591)). ([ff083025](https://github.com/firebase/flutterfire/commit/ff083025b724d683cc3a9ed5f4a4987c43663589)) + +## 4.2.10 + + - **FIX**(auth,web): fix currentUser being null when using emulator or named instance ([#10565](https://github.com/firebase/flutterfire/issues/10565)). ([11e8644d](https://github.com/firebase/flutterfire/commit/11e8644df402a5abbb0d0c37714879272dec024c)) + +## 4.2.9 + + - Update a dependency to the latest release. + +## 4.2.8 + + - Update a dependency to the latest release. + +## 4.2.7 + + - Update a dependency to the latest release. + +## 4.2.6 + + - **REFACTOR**: upgrade project to remove warnings from Flutter 3.7 ([#10344](https://github.com/firebase/flutterfire/issues/10344)). ([e0087c84](https://github.com/firebase/flutterfire/commit/e0087c845c7526c11a4241a26d39d4673b0ad29d)) + +## 4.2.5 + + - **FIX**: fix a null pointer exception that could occur when removing an even listener ([#10210](https://github.com/firebase/flutterfire/issues/10210)). ([72d2e973](https://github.com/firebase/flutterfire/commit/72d2e97363d89d716963dd224a2b9578ba446624)) + +## 4.2.4 + + - Update a dependency to the latest release. + +## 4.2.3 + + - Update a dependency to the latest release. + +## 4.2.2 + + - Update a dependency to the latest release. + +## 4.2.1 + + - Update a dependency to the latest release. + +## 4.2.0 + + - **FEAT**: improve error message when user cancels a sign in with a provider ([#10060](https://github.com/firebase/flutterfire/issues/10060)). ([6631da6b](https://github.com/firebase/flutterfire/commit/6631da6b6b165a0c1e3260d744df1d60f3c7abe0)) + +## 4.1.5 + + - **FIX**: Apple Sign In on a secondary app doesnt sign in the correct Firebase Auth instance ([#10018](https://github.com/firebase/flutterfire/issues/10018)). ([f746d5da](https://github.com/firebase/flutterfire/commit/f746d5da0c784e28f08b9fcedfce18933a9e448e)) + +## 4.1.4 + + - **FIX**: tentative fix for null pointer exception in `parseUserInfoList` ([#9960](https://github.com/firebase/flutterfire/issues/9960)). ([dad17407](https://github.com/firebase/flutterfire/commit/dad1740792b893920867528039a9c54398ae7e3e)) + +## 4.1.3 + + - **FIX**: fix reauthenticateWithProvider on iOS with Sign In With Apple that would throw a linked exception ([#9919](https://github.com/firebase/flutterfire/issues/9919)). ([7318a8f3](https://github.com/firebase/flutterfire/commit/7318a8f32de07bd47026d3e07b80b4bab5df1e6a)) + +## 4.1.2 + + - Update a dependency to the latest release. + +## 4.1.1 + + - Update a dependency to the latest release. + +## 4.1.0 + + - **REFACTOR**: add `verify` to `QueryPlatform` and change internal `verifyToken` API to `verify` ([#9711](https://github.com/firebase/flutterfire/issues/9711)). ([c99a842f](https://github.com/firebase/flutterfire/commit/c99a842f3e3f5f10246e73f51530cc58c42b49a3)) + - **FIX**: properly propagate the `FirebaseAuthMultiFactorException` for all reauthenticate and link methods ([#9700](https://github.com/firebase/flutterfire/issues/9700)). ([9ad97c82](https://github.com/firebase/flutterfire/commit/9ad97c82ead0f5c6f1307625374c34e0dcde730b)) + - **FEAT**: expose reauthenticateWithRedirect and reauthenticateWithPopup ([#9696](https://github.com/firebase/flutterfire/issues/9696)). ([2a1f910f](https://github.com/firebase/flutterfire/commit/2a1f910ff6cab21a126c62fd4322a14ec263b629)) + +## 4.0.2 + + - Update a dependency to the latest release. + +## 4.0.1 + +- Update a dependency to the latest release. + +## 4.0.0 + +> Note: This release has breaking changes. + + - **BREAKING** **FEAT**: Firebase iOS SDK version: `10.0.0` ([#9708](https://github.com/firebase/flutterfire/issues/9708)). ([9627c56a](https://github.com/firebase/flutterfire/commit/9627c56a37d657d0250b6f6b87d0fec1c31d4ba3)) + +## 3.11.2 + + - **DOCS**: update `setSettings()` inline documentation ([#9655](https://github.com/firebase/flutterfire/issues/9655)). ([39ca0029](https://github.com/firebase/flutterfire/commit/39ca00299ec5c6e0f2dc9b0b5a8d71b8d59d51d4)) + +## 3.11.1 + + - **FIX**: fix an iOS crash when using Sign In With Apple due to invalid return of nil instead of NSNull ([#9644](https://github.com/firebase/flutterfire/issues/9644)). ([3f76b53f](https://github.com/firebase/flutterfire/commit/3f76b53f375f4398652abfa7c9236571ee0bd87f)) + +## 3.11.0 + + - **FEAT**: add OAuth Access Token support to sign in with providers ([#9593](https://github.com/firebase/flutterfire/issues/9593)). ([cb6661bb](https://github.com/firebase/flutterfire/commit/cb6661bbc701031d6f920ace3a6efc8e8d56aa4c)) + - **FEAT**: add `linkWithRedirect` to the web ([#9580](https://github.com/firebase/flutterfire/issues/9580)). ([d834b90f](https://github.com/firebase/flutterfire/commit/d834b90f29fc1929a195d7d546170e4ea03c6ab1)) + +## 3.10.0 + + - **FIX**: fix path of generated Pigeon files to prevent name collision ([#9569](https://github.com/firebase/flutterfire/issues/9569)). ([71bde27d](https://github.com/firebase/flutterfire/commit/71bde27d4e613096f121abb16d7ea8483c3fbcd8)) + - **FEAT**: add `reauthenticateWithProvider` ([#9570](https://github.com/firebase/flutterfire/issues/9570)). ([dad6b481](https://github.com/firebase/flutterfire/commit/dad6b4813c682e35315dda3965ea8aaf5ba030e8)) + +## 3.9.0 + + - **REFACTOR**: deprecate `signInWithAuthProvider` in favor of `signInWithProvider` ([#9542](https://github.com/firebase/flutterfire/issues/9542)). ([ca340ea1](https://github.com/firebase/flutterfire/commit/ca340ea19c8dbb340f083e48cf1b0de36f7d64c4)) + - **FEAT**: add `linkWithProvider` to support for linking auth providers ([#9535](https://github.com/firebase/flutterfire/issues/9535)). ([1ac14fb1](https://github.com/firebase/flutterfire/commit/1ac14fb147f83cf5c7874004a9dc61838dce8da8)) + +## 3.8.0 + + - **FIX**: remove default scopes on iOS for Sign in With Apple ([#9477](https://github.com/firebase/flutterfire/issues/9477)). ([3fe02b29](https://github.com/firebase/flutterfire/commit/3fe02b2937135ea6d576c7e445da5f4266ff0fdf)) + - **FEAT**: add Twitter login for Android, iOS and Web ([#9421](https://github.com/firebase/flutterfire/issues/9421)). ([0bc6e6d5](https://github.com/firebase/flutterfire/commit/0bc6e6d5333e6be0d5749a083206f3f5bb79a7ba)) + - **FEAT**: add Yahoo as provider for iOS, Android and Web ([#9443](https://github.com/firebase/flutterfire/issues/9443)). ([6c3108a7](https://github.com/firebase/flutterfire/commit/6c3108a767aca3b1a844b2b5da04b2da45bc9fbd)) + - **DOCS**: fix typo "appearance" in `platform_interface_firebase_auth.dart` ([#9472](https://github.com/firebase/flutterfire/issues/9472)). ([323b917b](https://github.com/firebase/flutterfire/commit/323b917b5eecf0e5161a61c66f6cabac5b23e1b8)) + +## 3.7.0 + + - **FEAT**: add Microsoft login for Android, iOS and Web ([#9415](https://github.com/firebase/flutterfire/issues/9415)). ([1610ce8a](https://github.com/firebase/flutterfire/commit/1610ce8ac96d6da202ef014e9a3dfeb4acfacec9)) + - **FEAT**: add Sign in with Apple directly in Firebase Auth for Android, iOS 13+ and Web ([#9408](https://github.com/firebase/flutterfire/issues/9408)). ([da36b986](https://github.com/firebase/flutterfire/commit/da36b9861b7d635382705b4893eed85fd672125c)) + +## 3.6.4 + + - **FIX**: fix an error where MultifactorInfo factorId could be null on iOS ([#9367](https://github.com/firebase/flutterfire/issues/9367)). ([88bded11](https://github.com/firebase/flutterfire/commit/88bded119607473c7546154ac8bdd149a2d3f21f)) + +## 3.6.3 + + - **FIX**: use correct UTC time from server for `currentUser?.metadata.creationTime` & `currentUser?.metadata.lastSignInTime` ([#9248](https://github.com/firebase/flutterfire/issues/9248)). ([a6204128](https://github.com/firebase/flutterfire/commit/a6204128edf1f54ac734385d0ed6214d50cebd1b)) + - **DOCS**: explicit mention that `refreshToken` is empty string on native platforms on the `User`instance ([#9183](https://github.com/firebase/flutterfire/issues/9183)). ([1aa1c163](https://github.com/firebase/flutterfire/commit/1aa1c1638edc632dedf8de0f02127e26b1a86e17)) + +## 3.6.2 + + - **DOCS**: update `getIdTokenResult` inline documentation ([#9150](https://github.com/firebase/flutterfire/issues/9150)). ([519518ce](https://github.com/firebase/flutterfire/commit/519518ce3ed36580e35713e791281b251018201c)) + +## 3.6.1 + + - Update a dependency to the latest release. + +## 3.6.0 + + - **FIX**: pass `Persistence` value to `FirebaseAuth.instanceFor(app: app, persistence: persistence)` for setting persistence on Web platform ([#9138](https://github.com/firebase/flutterfire/issues/9138)). ([ae7ebaf8](https://github.com/firebase/flutterfire/commit/ae7ebaf8e304a2676b2acfa68aadf0538468b4a0)) + - **FIX**: fix crash on Android where detaching from engine was not properly resetting the Pigeon handler ([#9218](https://github.com/firebase/flutterfire/issues/9218)). ([96d35df0](https://github.com/firebase/flutterfire/commit/96d35df09914fbe40515fdcd20b17a802f37270d)) + - **FEAT**: expose the missing MultiFactor classes through the universal package ([#9194](https://github.com/firebase/flutterfire/issues/9194)). ([d8bf8185](https://github.com/firebase/flutterfire/commit/d8bf818528c3705350cdb1b4675d600ba1d29d14)) + +## 3.5.1 + + - Update a dependency to the latest release. + +## 3.5.0 + + - **FEAT**: add all providers available to MFA ([#9159](https://github.com/firebase/flutterfire/issues/9159)). ([5a03a859](https://github.com/firebase/flutterfire/commit/5a03a859385f0b06ad9afe8e8c706c046976b8d8)) + - **FEAT**: add phone MFA ([#9044](https://github.com/firebase/flutterfire/issues/9044)). ([1b85c8b7](https://github.com/firebase/flutterfire/commit/1b85c8b7fbcc3f21767f23981cb35061772d483f)) + +## 3.4.2 + + - Update a dependency to the latest release. + +## 3.4.1 + + - **FIX**: bump `firebase_core_platform_interface` version to fix previous release. ([bea70ea5](https://github.com/firebase/flutterfire/commit/bea70ea5cbbb62cbfd2a7a74ae3a07cb12b3ee5a)) + +## 3.4.0 + + - **FIX**: Web recaptcha hover removed after use. (#8812). ([790e450e](https://github.com/firebase/flutterfire/commit/790e450e8d6acd2fc50e0232c77a152430c7b3ea)) + - **FIX**: java.util.ConcurrentModificationException (#8967). ([dc6c04ae](https://github.com/firebase/flutterfire/commit/dc6c04aeb4fc535a8ccadf9c11fb4d5dc413606d)) + - **FEAT**: update GitHub sign in implementation (#8976). ([ffd3b019](https://github.com/firebase/flutterfire/commit/ffd3b019c3158c66476671d9a9df245035cc2295)) + +## 3.3.20 + + - **REFACTOR**: use `firebase.google.com` link for `homepage` in `pubspec.yaml` (#8729). ([43df32d4](https://github.com/firebase/flutterfire/commit/43df32d457a28523f5956a2252dafd47856ac756)) + - **REFACTOR**: use "firebase" instead of "FirebaseExtended" as organisation in all links for this repository (#8791). ([d90b8357](https://github.com/firebase/flutterfire/commit/d90b8357db01d65e753021358668f0b129713e6b)) + - **FIX**: update firebase_auth example to not be dependent on an emulator (#8601). ([bdc9772e](https://github.com/firebase/flutterfire/commit/bdc9772ec8a3fb6609b66c42166d6d132ddb67d9)) + - **DOCS**: fix two typos. (#8876). ([7390d5c5](https://github.com/firebase/flutterfire/commit/7390d5c51e61aeb4d59c0d74093921fad3f35083)) + - **DOCS**: point to "firebase.google" domain for hyperlinks in the usage section of `README.md` files (#8814). ([78006e0d](https://github.com/firebase/flutterfire/commit/78006e0d5b9dce8038ce3606a43ddcbc8a4a71b9)) + +## 3.3.19 + + - **DOCS**: use camel case style for "FlutterFire" in `README.md` (#8748). ([c6ff0b21](https://github.com/firebase/flutterfire/commit/c6ff0b21352eb0f9a9a576ca7ef737d203292a58)) + +## 3.3.18 + + - Update a dependency to the latest release. + +## 3.3.17 + + - Update a dependency to the latest release. + +## 3.3.16 + + - **REFACTOR**: remove deprecated `Tasks.call()` API from Android. (#8452). ([3e92496b](https://github.com/firebase/flutterfire/commit/3e92496b2783ec149258c22d3167c5388dcb1c40)) + +## 3.3.15 + + - **FIX**: Use iterator instead of enhanced for loop on android. (#8498). ([027c75a6](https://github.com/firebase/flutterfire/commit/027c75a60b39a40e6a3edc12edc51487cc954503)) + +## 3.3.14 + + - Update a dependency to the latest release. + +## 3.3.13 + + - Update a dependency to the latest release. + +## 3.3.12 + + - Update a dependency to the latest release. + +## 3.3.11 + + - **FIX**: Update APN token once auth plugin has been initialized on `iOS`. (#8201). ([ab6239dd](https://github.com/firebase/flutterfire/commit/ab6239ddf5cb14211b76bced04ec52203919a57a)) + +## 3.3.10 + + - **FIX**: return correct error code for linkWithCredential `provider-already-linked` on Android (#8245). ([ae090719](https://github.com/firebase/flutterfire/commit/ae090719ebbb0873cf227f76004feeae9a7d0580)) + - **FIX**: Fixed bug that sets email to `nil` on `iOS` when the `User` has no provider. (#8209). ([fb646438](https://github.com/firebase/flutterfire/commit/fb646438f219b0f0f7c6a8c52e2b9daa4afc833e)) + +## 3.3.9 + + - **FIX**: update all Dart SDK version constraints to Dart >= 2.16.0 (#8184). ([df4a5bab](https://github.com/firebase/flutterfire/commit/df4a5bab3c029399b4f257a5dd658d302efe3908)) + +## 3.3.8 + + - Update a dependency to the latest release. + +## 3.3.7 + + - **DOCS**: Update documentation for `currentUser` property to make expectations clearer. (#7843). ([59bb47c2](https://github.com/firebase/flutterfire/commit/59bb47c2490fbd641a1fcc26f2f888e8f4f02671)) + +## 3.3.6 + + - Update a dependency to the latest release. + +## 3.3.5 + + - **FIX**: bump Android `compileSdkVersion` to 31 (#7726). ([a9562bac](https://github.com/firebase/flutterfire/commit/a9562bac60ba927fb3664a47a7f7eaceb277dca6)) + +## 3.3.4 + + - **REFACTOR**: fix all `unnecessary_import` analyzer issues introduced with Flutter 2.8. ([7f0e82c9](https://github.com/firebase/flutterfire/commit/7f0e82c978a3f5a707dd95c7e9136a3e106ff75e)) + +## 3.3.3 + + - Update a dependency to the latest release. + +## 3.3.2 + + - **DOCS**: Fix typos and remove unused imports (#7504). + +## 3.3.1 + + - Update a dependency to the latest release. + +## 3.3.0 + + - **REFACTOR**: migrate remaining examples & e2e tests to null-safety (#7393). + - **FEAT**: automatically inject Firebase JS SDKs (#7359). + +## 3.2.0 + + - **FEAT**: support initializing default `FirebaseApp` instances from Dart (#6549). + +## 3.1.5 + + - Update a dependency to the latest release. + +## 3.1.4 + + - **REFACTOR**: remove deprecated Flutter Android v1 Embedding usages, including in example app (#7158). + - **STYLE**: macOS & iOS; explicitly include header that defines `TARGET_OS_OSX` (#7116). + +## 3.1.3 + + - **REFACTOR**: migrate example app to null-safety (#7111). + +## 3.1.2 + + - **FIX**: allow setLanguage to accept null (#7050). + - **CHORE**: remove google-signin plugin temporarily to fix CI (#7047). + +## 3.1.1 + + - **FIX**: use Locale.ROOT while processing error code (#6946). + +## 3.1.0 + + - **FEAT**: expose linkWithPopup() & correctly parse credentials in exceptions (#6562). + +## 3.0.2 + + - **STYLE**: enable additional lint rules (#6832). + - **FIX**: precise error message is propagated (#6793). + - **FIX**: Use angle bracket import consistently when importing Firebase.h for iOS (#5891). + - **FIX**: stop idTokenChanges & userChanges firing twice on initial listen (#6560). + +## 3.0.1 + + - **FIX**: reinstate deprecated emulator apis (#6626). + +## 3.0.0 + +> Note: This release has breaking changes. + + - **FEAT**: setSettings now possible for android (#6367). + - **DOCS**: phone provider account linking update (#6465). + - **CHORE**: update v2 embedding support (#6506). + - **CHORE**: verifyPhoneNumber() example (#6476). + - **CHORE**: rm deprecated jcenter repository (#6431). + - **BREAKING** **FEAT**: useEmulator(host, port) API update (#6439). + +## 2.0.0 + +> Note: This release has breaking changes. + + - **FEAT**: setSettings now possible for android (#6367). + - **DOCS**: phone provider account linking update (#6465). + - **CHORE**: verifyPhoneNumber() example (#6476). + - **CHORE**: rm deprecated jcenter repository (#6431). + - **BREAKING** **FEAT**: useAuthEmulator(host, port) API update. + +## 1.4.1 + + - Update a dependency to the latest release. + +## 1.4.0 + + - **FEAT**: add tenantId support (#5736). + +## 1.3.0 + + - **FEAT**: add User.updateDisplayName and User.updatePhotoURL (#6213). + - **DOCS**: Add Flutter Favorite badge (#6190). + +## 1.2.0 + + - **FEAT**: upgrade Firebase JS SDK version to 8.6.1. + - **FIX**: podspec osx version checking script should use a version range instead of a single fixed version. + +## 1.1.4 + + - **FIX**: correctly cleanup Dictionary handlers (#6101). + - **DOCS**: Update the documentation of sendPasswordResetEmail (#6051). + - **CHORE**: publish packages (#6022). + - **CHORE**: publish packages. + +## 1.1.3 + + - **FIX**: Fix firebase_auth not being registered as a plugin (#5987). + - **CI**: refactor to use Firebase Auth emulator (#5939). + +## 1.1.2 + + - **FIX**: fixed an issue where Web could not connect to the Firebase Auth emulator (#5940). + - **FIX**: Import all necessary headers from the header file. (#5890). + - **FIX**: Move communication to EventChannels (#4643). + - **DOCS**: remove implicit-cast in the doc of AuthProviders (#5862). + +## 1.1.1 + + - **FIX**: ensure web is initialized before sending stream events (#5766). + - **DOCS**: Add UserInfoCard widget in auth example SignInPage (#4635). + - **CI**: fix analyzer issues in example. + - **CHORE**: update Web plugins to use Firebase JS SDK version 8.4.1 (#4464). + +## 1.1.0 + + - **FEAT**: PhoneAuthProvider.credential and PhoneAuthProvider.credentialFromToken now return a PhoneAuthCredential (#5675). + - **CHORE**: update drive dependency (#5740). + +## 1.0.3 + + - **DOCS**: userChanges clarification (#5698). + +## 1.0.2 + + - Update a dependency to the latest release. + +## 1.0.1 + + - **DOCS**: note that auth emulator is not supported for web (#5169). + +## 1.0.0 + + - Graduate package to a stable release. See pre-releases prior to this version for changelog entries. + +## 1.0.0-1.0.nullsafety.0 + + - Bump "firebase_auth" to `1.0.0-1.0.nullsafety.0`. + +## 0.21.0-1.1.nullsafety.3 + + - Update a dependency to the latest release. + +## 0.21.0-1.1.nullsafety.2 + + - **TESTS**: update mockito API usage in tests + +## 0.21.0-1.1.nullsafety.1 + + - **REFACTOR**: pubspec & dependency updates (#4932). + +## 0.21.0-1.1.nullsafety.0 + + - **FEAT**: implement support for `useEmulator` (#4263). + +## 0.21.0-1.0.nullsafety.0 + + - **FIX**: bump firebase_core_* package versions to updated NNBD versioning format (#4832). + +## 0.21.0-nullsafety.0 + + - **FEAT**: Migrated to null safety (#4633) + +## 0.20.0+1 + + - **FIX**: package compatibility. + +## 0.20.0 + +> Note: This release has breaking changes. + + - **FIX**: null pointer exception if user metadata null (#4622). + - **FEAT**: add check on podspec to assist upgrading users deployment target. + - **BUILD**: commit Podfiles with 10.12 deployment target. + - **BUILD**: remove default sdk version, version should always come from firebase_core, or be user defined. + - **BUILD**: set macOS deployment target to 10.12 (from 10.11). + - **BREAKING** **BUILD**: set osx min supported platform version to 10.12. + +## 0.19.0+1 + + - Update a dependency to the latest release. + +## 0.19.0 + +> Note: This release has breaking changes. + + - **CHORE**: harmonize dependencies and version handling. + - **BREAKING** **REFACTOR**: remove all currently deprecated APIs. + - **BREAKING** **FEAT**: forward port to firebase-ios-sdk v7.3.0. + - Due to this SDK upgrade, iOS 10 is now the minimum supported version by FlutterFire. Please update your build target version. + +## 0.18.4+1 + + - Update a dependency to the latest release. + +## 0.18.4 + + - **FEAT**: bump android `com.android.tools.build` & `'com.google.gms:google-services` versions (#4269). + - **DOCS**: Fixed two typos in method documentation (#4219). + +## 0.18.3+1 + + - **TEST**: Explicitly opt-out from null safety. + - **FIX**: stop authStateChange firing twice for initial event (#4099). + - **FIX**: updated email link signin to use latest format for ActionCodeSettings (#3425). + - **CHORE**: add missing dependency to example app. + - **CHORE**: bump gradle wrapper to 5.6.4 (#4158). + +## 0.18.3 + + - **FEAT**: migrate firebase interop files to local repository (#3973). + - **FEAT**: bump `compileSdkVersion` to 29 in preparation for upcoming Play Store requirement. + - **FEAT** [WEB] adds support for `EmailAuthProvider.credentialWithLink` + - **FEAT** [WEB] adds support for `FirebaseAuth.setSettings` + - **FEAT** [WEB] adds support for `User.tenantId` + - **FEAT** [WEB] `FirebaseAuthException` now supports `email` & `credential` properties + - **FEAT** [WEB] `ActionCodeInfo` now supports `previousEmail` field + +## 0.18.2 + + - **FEAT**: bump compileSdkVersion to 29 (#3975). + - **FEAT**: update Firebase iOS SDK version to 6.33.0 (from 6.26.0). + +## 0.18.1+2 + + - **FIX**: on iOS use sendEmailVerificationWithActionCodeSettings instead of sendEmailVerificationWithCompletion (#3686). + - **DOCS**: README updates (#3768). + +## 0.18.1+1 + + - **FIX**: Optional params for "signInWithCredential" method are converted to "nil" if "null" for iOS (#3731). + +## 0.18.1 + + - **FIX**: local dependencies in example apps (#3319). + - **FIX**: fix IdTokenResult timestamps (web, ios) (#3357). + - **FIX**: pub.dev score fixes (#3318). + - **FIX**: use unknown APNS token type (#3345). + - **FIX**: update FLTFirebaseAuthPlugin.m (#3360). + - **FIX**: use correct FIRAuth instance on listeners (#3316). + - **FEAT**: add support for linkWithPhoneNumber (#3436). + - **FEAT**: use named arguments for ActionCodeSettings (#3269). + - **FEAT**: implement signInWithPhoneNumber on web (#3205). + - **FEAT**: expose smsCode (android only) (#3308). + - **DOCS**: fixed signOut method documentation (#3342). + +## 0.18.0+1 + +* Fixed an Android issue where certain network related Firebase Auth error codes would come through as `unknown`. [(#3217)](https://github.com/firebase/flutterfire/pull/3217) +* Added missing deprecations: `FirebaseUser` class and `photoUrl` getter. +* Bump `firebase_auth_platform_interface` dependency to fix an assertion issue when creating Google sign-in credentials. +* Bump `firebase_auth_web` dependency to `^0.3.0+1`. + +## 0.18.0 + +Overall, Firebase Auth has been heavily reworked to bring it inline with the federated plugin setup along with adding new features, documentation and many more unit and end-to-end tests. The API has mainly been kept the same, however there are some breaking changes. + +### General + +- **BREAKING**: The `FirebaseUser` class has been renamed to `User`. +- **BREAKING**: The `AuthResult` class has been renamed to `UserCredential`. +- **NEW**: The `ActionCodeSettings` class is now consumable on all supporting methods. + - **NEW**: Added support for the `dynamicLinkDomain` property. +- **NEW**: Added a new `FirebaseAuthException` class (extends `FirebaseException`). + - All errors are now returned as a `FirebaseAuthException`, allowing you to access the code & message associated with the error. + - In addition, it is now possible to access the `email` and `credential` properties on exceptions if they exist. + +### `FirebaseAuth` + +- **BREAKING**: Accessing the current user via `currentUser()` is now synchronous via the `currentUser` getter. +- **BREAKING**: `isSignInWithEmailLink()` is now synchronous. +- **DEPRECATED**: `FirebaseAuth.fromApp()` is now deprecated in favor of `FirebaseAuth.instanceFor()`. +- **DEPRECATED**: `onAuthStateChanged` has been deprecated in favor of `authStateChanges()`. +- **NEW**: Added support for `idTokenChanges()` stream listener. +- **NEW**: Added support for `userChanges()` stream listener. + - The purpose of this API is to allow users to subscribe to all user events without having to manually hydrate app state in cases where a manual reload was required (e.g. `updateProfile()`). +- **NEW**: Added support for `applyActionCode()`. +- **NEW**: Added support for `checkActionCode()`. +- **NEW**: Added support for `verifyPasswordResetCode()`. +- **NEW**: Added support for accessing the current language code via the `languageCode` getter. +- **NEW**: `setLanguageCode()` now supports providing a `null` value. + - On web platforms, if `null` is provided the Firebase projects default language will be set. + - On native platforms, if `null` is provided the device language will be used. +- **NEW**: `verifyPhoneNumber()` exposes a `autoRetrievedSmsCodeForTesting` property. + - This allows developers to test automatic SMS code resolution on Android devices during development. +- **NEW** (iOS): `appVerificationDisabledForTesting` setting can now be set for iOS. + - This allows developers to skip ReCaptcha verification when testing phone authentication. +- **NEW** (iOS): `userAccessGroup` setting can now be set for iOS & MacOS. + - This allows developers to share authentication states across multiple apps or extensions on iOS & MacOS. For more information see the [Firebase iOS SDK documentation](https://firebase.google.com/docs/auth/ios/single-sign-on). + +### `User` + +- **BREAKING**: Removed the `UpdateUserInfo` class when using `updateProfile` in favor of named arguments. +- **NEW**: Added support for `getIdTokenResult()`. +- **NEW**: Added support for `verifyBeforeUpdateEmail()`. +- **FIX**: Fixed several iOS crashes when the Firebase SDK returned `nil` property values. +- **FIX**: Fixed an issue on Web & iOS where a users email address would still show after unlinking the email/password provider. + +### `UserCredential` + +- **NEW**: Added support for accessing the users `AuthCredential` via the `credential` property. + +### `AuthProvider` & `AuthCredential` + +- **DEPRECATED**: All sub-class (e.g. `GoogleAuthProvider`) `getCredential()` methods have been deprecated in favor of `credential()`. + - **DEPRECATED**: `EmailAuthProvider.getCredentialWithLink()` has been deprecated in favor of `EmailAuthProvider.credentialWithLink()`. +- **NEW**: Supporting providers can now assign scope and custom request parameters. + - The scope and parameters will be used on web platforms when triggering a redirect or popup via `signInWithPopup()` or `signInWithRedirect()`. + +## 0.17.0-dev.2 + +* Update plugin and example to use the same core. + +## 0.17.0-dev.1 + +* Depend on `firebase_core` pre-release versions. + +## 0.16.1+2 + +* Update README to make it clear which authentication options are possible. + +## 0.16.1+1 + +* Fix bug #2656 (verifyPhoneNumber always use the default FirebaseApp, not the configured one) + +## 0.16.1 + +* Update lower bound of dart dependency to 2.0.0. + +## 0.16.0 + +* Migrate to Android v2 embedding. + +## 0.15.5+3 + +* Fix for missing UserAgent.h compilation failures. + +## 0.15.5+2 + +* Update the platform interface dependency to 1.1.7 and update tests. + +## 0.15.5+1 + +* Make the pedantic dev_dependency explicit. + +## 0.15.5 + +* Add macOS support + +## 0.15.4+1 + +* Fix fallthrough bug in Android code. + +## 0.15.4 + +* Add support for `confirmPasswordReset` on Android and iOS. + +## 0.15.3+1 + +* Add integration instructions for the `web` platform. + +## 0.15.3 + +* Add support for OAuth Authentication for iOS and Android to solve generic providers authentication. + +## 0.15.2 + +* Add web support by default. +* Require Flutter SDK 1.12.13+hotfix.4 or later. + +## 0.15.1+1 + +* Remove the deprecated `author:` field from pubspec.yaml +* Migrate the plugin to the pubspec platforms manifest. +* Bump the minimum Flutter version to 1.10.0. + +## 0.15.1 + +* Migrate to use `firebase_auth_platform_interface`. + +## 0.15.0+2 + +* Update homepage since this package was moved. + +## 0.15.0+1 + +* Added missing ERROR_WRONG_PASSWORD Exception to the `reauthenticateWithCredential` docs. + +## 0.15.0 + +* Fixed `NoSuchMethodError` in `reauthenticateWithCredential`. +* Fixed `IdTokenResult` analyzer warnings. +* Reduced visibility of `IdTokenResult` constructor. + +## 0.14.0+10 + +* Formatted lists in member documentations for better readability. + +## 0.14.0+9 + +* Fix the behavior of `getIdToken` to use the `refresh` parameter instead of always refreshing. + +## 0.14.0+8 + +* Updated README instructions for contributing for consistency with other Flutterfire plugins. + +## 0.14.0+7 + +* Remove AndroidX warning. + +## 0.14.0+6 + +* Update example app with correct const constructors. + +## 0.14.0+5 + +* On iOS, `fetchSignInMethodsForEmail` now returns an empty list when the email + cannot be found, matching the Android behavior. + +## 0.14.0+4 + +* Fixed "Register a user" example code snippet in README.md. + +## 0.14.0+3 + +* Update documentation to reflect new repository location. +* Update unit tests to call `TestWidgetsFlutterBinding.ensureInitialized`. +* Remove executable bit on LICENSE file. + +## 0.14.0+2 + +* Reduce compiler warnings on iOS port by replacing `int` with `long` backing in returned timestamps. + +## 0.14.0+1 + +* Add dependency on `androidx.annotation:annotation:1.0.0`. + +## 0.14.0 + +* Added new `IdTokenResult` class. +* **Breaking Change**. `getIdToken()` method now returns `IdTokenResult` instead of a token `String`. + Use the `token` property of `IdTokenResult` to retrieve the token `String`. +* Added integration testing for `getIdToken()`. + +## 0.13.1+1 + +* Update authentication example in README. + +## 0.13.1 + +* Fixed a crash on iOS when sign-in fails. +* Additional integration testing. +* Updated documentation for `FirebaseUser.delete()` to include error codes. +* Updated Firebase project to match other Flutterfire apps. + +## 0.13.0 + +* **Breaking change**: Replace `FirebaseUserMetadata.creationTimestamp` and + `FirebaseUserMetadata.lastSignInTimestamp` with `creationTime` and `lastSignInTime`. + Previously on iOS `creationTimestamp` and `lastSignInTimestamp` returned in + seconds and on Android in milliseconds. Now, both platforms provide values as a + `DateTime`. + +## 0.12.0+1 + +* Fixes iOS sign-in exceptions when `additionalUserInfo` is `nil` or has `nil` fields. +* Additional integration testing. + +## 0.12.0 + +* Added new `AuthResult` and `AdditionalUserInfo` classes. +* **Breaking Change**. Sign-in methods now return `AuthResult` instead of `FirebaseUser`. + Retrieve the `FirebaseUser` using the `user` property of `AuthResult`. + +## 0.11.1+12 + +* Update google-services Android gradle plugin to 4.3.0 in documentation and examples. + +## 0.11.1+11 + +* On iOS, `getIdToken()` now uses the `refresh` parameter instead of always using `true`. + +## 0.11.1+10 + +* On Android, `providerData` now includes `UserInfo` for the phone authentication provider. + +## 0.11.1+9 + +* Update README to clarify importance of filling out all fields for OAuth consent screen. + +## 0.11.1+8 + +* Automatically register for iOS notifications, ensuring that phone authentication + will work even if Firebase method swizzling is disabled. + +## 0.11.1+7 + +* Automatically use version from pubspec.yaml when reporting usage to Firebase. + +## 0.11.1+6 + +* Add documentation of support email requirement to README. + +## 0.11.1+5 + +* Fix `updatePhoneNumberCredential` on Android. + +## 0.11.1+4 + +* Fix `updatePhoneNumberCredential` on iOS. + +## 0.11.1+3 + +* Add missing template type parameter to `invokeMethod` calls. +* Bump minimum Flutter version to 1.5.0. +* Replace invokeMethod with invokeMapMethod wherever necessary. +* FirebaseUser private constructor takes `Map` instead of `Map`. + +## 0.11.1+2 + +* Suppress deprecation warning for BinaryMessages. See: https://github.com/flutter/flutter/issues/33446 + +## 0.11.1+1 + +* Updated the error code documentation for `linkWithCredential`. + +## 0.11.1 + +* Support for `updatePhoneNumberCredential`. + +## 0.11.0 + +* **Breaking change**: `linkWithCredential` is now a function of `FirebaseUser`instead of + `FirebaseAuth`. +* Added test for newer `linkWithCredential` function. + +## 0.10.0+1 + +* Increase Firebase/Auth CocoaPod dependency to '~> 6.0'. + +## 0.10.0 + +* Update firebase_dynamic_links dependency. +* Update Android dependencies to latest. + +## 0.9.0 + +* **Breaking change**: `PhoneVerificationCompleted` now provides an `AuthCredential` that can + be used with `signInWithCredential` or `linkWithCredential` instead of signing in automatically. +* **Breaking change**: Remove internal counter `nextHandle` from public API. + +## 0.8.4+5 + +* Increase Firebase/Auth CocoaPod dependency to '~> 5.19'. + +## 0.8.4+4 + +* Update FirebaseAuth CocoaPod dependency to ensure availability of `FIRAuthErrorUserInfoNameKey`. + +## 0.8.4+3 + +* Updated deprecated API usage on iOS to use non-deprecated versions. +* Updated FirebaseAuth CocoaPod dependency to ensure a minimum version of 5.0. + +## 0.8.4+2 + +* Fixes an error in the documentation of createUserWithEmailAndPassword. + +## 0.8.4+1 + +* Adds credential for email authentication with link. + +## 0.8.4 + +* Adds support for email link authentication. + +## 0.8.3 + +* Make providerId 'const String' to use in 'case' statement. + +## 0.8.2+1 + +* Fixed bug where `PhoneCodeAutoRetrievalTimeout` callback was never called. + +## 0.8.2 + +* Fixed `linkWithCredential` on Android. + +## 0.8.1+5 + +* Added a driver test. + +## 0.8.1+4 + +* Update README. +* Update the example app with separate pages for registration and sign-in. + +## 0.8.1+3 + +* Reduce compiler warnings in Android plugin +* Raise errors early when accessing methods that require a Firebase User + +## 0.8.1+2 + +* Log messages about automatic configuration of the default app are now less confusing. + +## 0.8.1+1 + +* Remove categories. + +## 0.8.1 + +* Fixes Firebase auth phone sign-in for Android. + +## 0.8.0+3 + +* Log a more detailed warning at build time about the previous AndroidX + migration. + +## 0.8.0+2 + +* Update Google sign-in example in the README. + +## 0.8.0+1 + +* Update a broken dependency. + +## 0.8.0 + +* **Breaking change**. Migrate from the deprecated original Android Support + Library to AndroidX. This shouldn't result in any functional changes, but it + requires any Android apps using this plugin to [also + migrate](https://developer.android.com/jetpack/androidx/migrate) if they're + using the original support library. + +## 0.7.0 + +* Introduce third-party auth provider classes that generate `AuthCredential`s +* **Breaking Change** Signing in, linking, and reauthenticating now require an `AuthCredential` +* **Breaking Change** Unlinking now uses providerId +* **Breaking Change** Moved reauthentication to FirebaseUser + +## 0.6.7 + +* `FirebaseAuth` and `FirebaseUser` are now fully documented. +* `PlatformExceptions` now report error codes as stated in docs. +* Credentials can now be unlinked from Accounts with new methods on `FirebaseUser`. + +## 0.6.6 + +* Users can now reauthenticate in response to operations that require a recent sign-in. + +## 0.6.5 + +* Fixing async method `verifyPhoneNumber`, that would never return even in a successful call. + +## 0.6.4 + +* Added support for Github signin and linking Github accounts to existing users. + +## 0.6.3 + +* Add multi app support. + +## 0.6.2+1 + +* Bump Android dependencies to latest. + +## 0.6.2 + +* Add access to user metadata. + +## 0.6.1 + +* Adding support for linkWithTwitterCredential in FirebaseAuth. + +## 0.6.0 + +* Added support for `updatePassword` in `FirebaseUser`. +* **Breaking Change** Moved `updateEmail` and `updateProfile` to `FirebaseUser`. + This brings the `firebase_auth` package inline with other implementations and documentation. + +## 0.5.20 + +* Replaced usages of guava's: ImmutableList and ImmutableMap with platform +Collections.unmodifiableList() and Collections.unmodifiableMap(). + +## 0.5.19 + +* Update test package dependency to pick up Dart 2 support. +* Modified dependency on google_sign_in to point to a published + version instead of a relative path. + +## 0.5.18 + +* Adding support for updateEmail in FirebaseAuth. + +## 0.5.17 + +* Adding support for FirebaseUser.delete. + +## 0.5.16 + +* Adding support for setLanguageCode in FirebaseAuth. + +## 0.5.15 + +* Bump Android and Firebase dependency versions. + +## 0.5.14 + +* Fixed handling of auto phone number verification. + +## 0.5.13 + +* Add support for phone number authentication. + +## 0.5.12 + +* Fixed ArrayIndexOutOfBoundsException in handleStopListeningAuthState + +## 0.5.11 + +* Updated Gradle tooling to match Android Studio 3.1.2. + +## 0.5.10 + +* Updated iOS implementation to reflect Firebase API changes. + +## 0.5.9 + +* Added support for signing in with a Twitter account. + +## 0.5.8 + +* Added support to reload firebase user + +## 0.5.7 + +* Added support to sendEmailVerification + +## 0.5.6 + +* Added support for linkWithFacebookCredential + +## 0.5.5 + +* Updated Google Play Services dependencies to version 15.0.0. + +## 0.5.4 + +* Simplified podspec for Cocoapods 1.5.0, avoiding link issues in app archives. + +## 0.5.3 + +* Secure fetchProvidersForEmail (no providers) + +## 0.5.2 + +* Fixed Dart 2 type error in fetchProvidersForEmail. + +## 0.5.1 + +* Added support to fetchProvidersForEmail + +## 0.5.0 + +* **Breaking change**. Set SDK constraints to match the Flutter beta release. + +## 0.4.7 + +* Fixed Dart 2 type errors. + +## 0.4.6 + +* Fixed Dart 2 type errors. + +## 0.4.5 + +* Enabled use in Swift projects. + +## 0.4.4 + +* Added support for sendPasswordResetEmail + +## 0.4.3 + +* Moved to the io.flutter.plugins organization. + +## 0.4.2 + +* Added support for changing user data + +## 0.4.1 + +* Simplified and upgraded Android project template to Android SDK 27. +* Updated package description. + +## 0.4.0 + +* **Breaking change**. Upgraded to Gradle 4.1 and Android Studio Gradle plugin + 3.0.1. Older Flutter projects need to upgrade their Gradle setup as well in + order to use this version of the plugin. Instructions can be found + [here](https://github.com/flutter/flutter/wiki/Updating-Flutter-projects-to-Gradle-4.1-and-Android-Studio-Gradle-plugin-3.0.1). +* Relaxed GMS dependency to [11.4.0,12.0[ + +## 0.3.2 + +* Added FLT prefix to iOS types +* Change GMS dependency to 11.4.+ + +## 0.3.1 + +* Change GMS dependency to 11.+ + +## 0.3.0 + +* **Breaking Change**: Method FirebaseUser getToken was renamed to getIdToken. + +## 0.2.5 + +* Added support for linkWithCredential with Google credential + +## 0.2.4 + +* Added support for `signInWithCustomToken` +* Added `Stream onAuthStateChanged` event to listen when the user change + +## 0.2.3+1 + +* Aligned author name with rest of repo. + +## 0.2.3 + +* Remove dependency on Google/SignIn + +## 0.2.2 + +* Remove dependency on FirebaseUI + +## 0.2.1 + +* Added support for linkWithEmailAndPassword + +## 0.2.0 + +* **Breaking Change**: Method currentUser is async now. + +## 0.1.2 + +* Added support for signInWithFacebook + +## 0.1.1 + +* Updated to Firebase SDK to always use latest patch version for 11.0.x builds + +## 0.1.0 + +* Updated to Firebase SDK Version 11.0.1 +* **Breaking Change**: You need to add a maven section with the "https://maven.google.com" endpoint to the repository section of your `android/build.gradle`. For example: +```gradle +allprojects { + repositories { + jcenter() + maven { // NEW + url "https://maven.google.com" // NEW + } // NEW + } +} +``` + +## 0.0.4 + +* Add method getToken() to FirebaseUser + +## 0.0.3+1 + +* Updated README.md + +## 0.0.3 + +* Added support for createUserWithEmailAndPassword, signInWithEmailAndPassword, and signOut Firebase methods + +## 0.0.2+1 + +* Updated README.md + +## 0.0.2 + +* Bump buildToolsVersion to 25.0.3 + +## 0.0.1 + +* Initial Release diff --git a/mih_ui/android/build/macos/SourcePackages/firebase_auth-6.5.4/LICENSE b/mih_ui/android/build/macos/SourcePackages/firebase_auth-6.5.4/LICENSE new file mode 100644 index 00000000..000b4618 --- /dev/null +++ b/mih_ui/android/build/macos/SourcePackages/firebase_auth-6.5.4/LICENSE @@ -0,0 +1,27 @@ +// Copyright 2017 The Chromium Authors. All rights reserved. +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are +// met: +// +// * Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// * Redistributions in binary form must reproduce the above +// copyright notice, this list of conditions and the following disclaimer +// in the documentation and/or other materials provided with the +// distribution. +// * Neither the name of Google Inc. nor the names of its +// contributors may be used to endorse or promote products derived from +// this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. \ No newline at end of file diff --git a/mih_ui/android/build/macos/SourcePackages/firebase_auth-6.5.4/README.md b/mih_ui/android/build/macos/SourcePackages/firebase_auth-6.5.4/README.md new file mode 100755 index 00000000..230c522d --- /dev/null +++ b/mih_ui/android/build/macos/SourcePackages/firebase_auth-6.5.4/README.md @@ -0,0 +1,26 @@ +[](https://flutter.dev/docs/development/packages-and-plugins/favorites) + +# Firebase Auth for Flutter +[![pub package](https://img.shields.io/pub/v/firebase_auth.svg)](https://pub.dev/packages/firebase_auth) + +A Flutter plugin to use the [Firebase Authentication API](https://firebase.google.com/products/auth/). + +To learn more about Firebase Auth, please visit the [Firebase website](https://firebase.google.com/products/auth) + +## Getting Started + +To get started with Firebase Auth for Flutter, please [see the documentation](https://firebase.google.com/docs/auth/flutter/start). + +## Usage + +To use this plugin, please visit the [Authentication Usage documentation](https://firebase.google.com/docs/auth/flutter/manage-users) + +## Issues and feedback + +Please file FlutterFire specific issues, bugs, or feature requests in our [issue tracker](https://github.com/firebase/flutterfire/issues/new). + +Plugin issues that are not specific to FlutterFire can be filed in the [Flutter issue tracker](https://github.com/flutter/flutter/issues/new). + +To contribute a change to this plugin, +please review our [contribution guide](https://github.com/firebase/flutterfire/blob/main/CONTRIBUTING.md) +and open a [pull request](https://github.com/firebase/flutterfire/pulls). diff --git a/mih_ui/android/build/macos/SourcePackages/firebase_auth-6.5.4/android/build.gradle b/mih_ui/android/build/macos/SourcePackages/firebase_auth-6.5.4/android/build.gradle new file mode 100755 index 00000000..1004a0e7 --- /dev/null +++ b/mih_ui/android/build/macos/SourcePackages/firebase_auth-6.5.4/android/build.gradle @@ -0,0 +1,66 @@ +group 'io.flutter.plugins.firebase.auth' +version '1.0-SNAPSHOT' + +apply plugin: 'com.android.library' + +buildscript { + repositories { + google() + mavenCentral() + } +} + +allprojects { + repositories { + google() + mavenCentral() + } +} + +def firebaseCoreProject = findProject(':firebase_core') +if (firebaseCoreProject == null) { + throw new GradleException('Could not find the firebase_core FlutterFire plugin, have you added it as a dependency in your pubspec?') +} else if (!firebaseCoreProject.properties['FirebaseSDKVersion']) { + throw new GradleException('A newer version of the firebase_core FlutterFire plugin is required, please update your firebase_core pubspec dependency.') +} + +def getRootProjectExtOrCoreProperty(name, firebaseCoreProject) { + if (!rootProject.ext.has('FlutterFire')) return firebaseCoreProject.properties[name] + if (!rootProject.ext.get('FlutterFire')[name]) return firebaseCoreProject.properties[name] + return rootProject.ext.get('FlutterFire').get(name) +} + +android { + // Conditional for compatibility with AGP <4.2. + if (project.android.hasProperty("namespace")) { + namespace 'io.flutter.plugins.firebase.auth' + } + + compileSdkVersion 34 + + defaultConfig { + minSdkVersion 23 + testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner" + } + + compileOptions { + sourceCompatibility JavaVersion.toVersion(17) + targetCompatibility JavaVersion.toVersion(17) + } + + buildFeatures { + buildConfig true + } + + lintOptions { + disable 'InvalidPackage' + } + dependencies { + api firebaseCoreProject + implementation platform("com.google.firebase:firebase-bom:${getRootProjectExtOrCoreProperty("FirebaseSDKVersion", firebaseCoreProject)}") + implementation 'com.google.firebase:firebase-auth' + implementation 'androidx.annotation:annotation:1.7.0' + } +} + +apply from: file("./user-agent.gradle") diff --git a/mih_ui/android/build/macos/SourcePackages/firebase_auth-6.5.4/android/gradle.properties b/mih_ui/android/build/macos/SourcePackages/firebase_auth-6.5.4/android/gradle.properties new file mode 100755 index 00000000..8bd86f68 --- /dev/null +++ b/mih_ui/android/build/macos/SourcePackages/firebase_auth-6.5.4/android/gradle.properties @@ -0,0 +1 @@ +org.gradle.jvmargs=-Xmx1536M diff --git a/mih_ui/android/build/macos/SourcePackages/firebase_auth-6.5.4/android/gradle/wrapper/gradle-wrapper.properties b/mih_ui/android/build/macos/SourcePackages/firebase_auth-6.5.4/android/gradle/wrapper/gradle-wrapper.properties new file mode 100644 index 00000000..e411586a --- /dev/null +++ b/mih_ui/android/build/macos/SourcePackages/firebase_auth-6.5.4/android/gradle/wrapper/gradle-wrapper.properties @@ -0,0 +1,5 @@ +distributionBase=GRADLE_USER_HOME +distributionPath=wrapper/dists +distributionUrl=https\://services.gradle.org/distributions/gradle-8.4-bin.zip +zipStoreBase=GRADLE_USER_HOME +zipStorePath=wrapper/dists diff --git a/mih_ui/android/build/macos/SourcePackages/firebase_auth-6.5.4/android/settings.gradle b/mih_ui/android/build/macos/SourcePackages/firebase_auth-6.5.4/android/settings.gradle new file mode 100755 index 00000000..ec51773d --- /dev/null +++ b/mih_ui/android/build/macos/SourcePackages/firebase_auth-6.5.4/android/settings.gradle @@ -0,0 +1,8 @@ +rootProject.name = 'firebase_auth' + +pluginManagement { + plugins { + id "com.android.application" version "8.3.0" + id "com.android.library" version "8.3.0" + } +} diff --git a/mih_ui/android/build/macos/SourcePackages/firebase_auth-6.5.4/android/src/main/AndroidManifest.xml b/mih_ui/android/build/macos/SourcePackages/firebase_auth-6.5.4/android/src/main/AndroidManifest.xml new file mode 100755 index 00000000..087541c2 --- /dev/null +++ b/mih_ui/android/build/macos/SourcePackages/firebase_auth-6.5.4/android/src/main/AndroidManifest.xml @@ -0,0 +1,9 @@ + + + + + + + diff --git a/mih_ui/android/build/macos/SourcePackages/firebase_auth-6.5.4/android/src/main/java/io/flutter/plugins/firebase/auth/AuthStateChannelStreamHandler.java b/mih_ui/android/build/macos/SourcePackages/firebase_auth-6.5.4/android/src/main/java/io/flutter/plugins/firebase/auth/AuthStateChannelStreamHandler.java new file mode 100644 index 00000000..e4147bee --- /dev/null +++ b/mih_ui/android/build/macos/SourcePackages/firebase_auth-6.5.4/android/src/main/java/io/flutter/plugins/firebase/auth/AuthStateChannelStreamHandler.java @@ -0,0 +1,63 @@ +/* + * Copyright 2022, the Chromium project authors. Please see the AUTHORS file + * for details. All rights reserved. Use of this source code is governed by a + * BSD-style license that can be found in the LICENSE file. + */ + +package io.flutter.plugins.firebase.auth; + +import com.google.firebase.auth.FirebaseAuth; +import com.google.firebase.auth.FirebaseAuth.AuthStateListener; +import com.google.firebase.auth.FirebaseUser; +import io.flutter.plugin.common.EventChannel.EventSink; +import io.flutter.plugin.common.EventChannel.StreamHandler; +import java.util.HashMap; +import java.util.Map; +import java.util.concurrent.atomic.AtomicBoolean; + +public class AuthStateChannelStreamHandler implements StreamHandler { + + private final FirebaseAuth firebaseAuth; + private AuthStateListener authStateListener; + + public AuthStateChannelStreamHandler(FirebaseAuth firebaseAuth) { + this.firebaseAuth = firebaseAuth; + } + + @Override + public void onListen(Object arguments, EventSink events) { + Map event = new HashMap<>(); + event.put(Constants.APP_NAME, firebaseAuth.getApp().getName()); + + final AtomicBoolean initialAuthState = new AtomicBoolean(true); + + authStateListener = + auth -> { + if (initialAuthState.get()) { + initialAuthState.set(false); + return; + } + + FirebaseUser user = auth.getCurrentUser(); + + if (user == null) { + event.put(Constants.USER, null); + } else { + event.put( + Constants.USER, PigeonParser.manuallyToList(PigeonParser.parseFirebaseUser(user))); + } + + events.success(event); + }; + + firebaseAuth.addAuthStateListener(authStateListener); + } + + @Override + public void onCancel(Object arguments) { + if (authStateListener != null) { + firebaseAuth.removeAuthStateListener(authStateListener); + authStateListener = null; + } + } +} diff --git a/mih_ui/android/build/macos/SourcePackages/firebase_auth-6.5.4/android/src/main/java/io/flutter/plugins/firebase/auth/Constants.java b/mih_ui/android/build/macos/SourcePackages/firebase_auth-6.5.4/android/src/main/java/io/flutter/plugins/firebase/auth/Constants.java new file mode 100644 index 00000000..2dd8df20 --- /dev/null +++ b/mih_ui/android/build/macos/SourcePackages/firebase_auth-6.5.4/android/src/main/java/io/flutter/plugins/firebase/auth/Constants.java @@ -0,0 +1,46 @@ +/* + * Copyright 2022, the Chromium project authors. Please see the AUTHORS file + * for details. All rights reserved. Use of this source code is governed by a + * BSD-style license that can be found in the LICENSE file. + */ + +package io.flutter.plugins.firebase.auth; + +public class Constants { + + public static final String APP_NAME = "appName"; + + // Providers + public static final String SIGN_IN_METHOD_PASSWORD = "password"; + public static final String SIGN_IN_METHOD_EMAIL_LINK = "emailLink"; + public static final String SIGN_IN_METHOD_FACEBOOK = "facebook.com"; + public static final String SIGN_IN_METHOD_GOOGLE = "google.com"; + public static final String SIGN_IN_METHOD_TWITTER = "twitter.com"; + public static final String SIGN_IN_METHOD_GITHUB = "github.com"; + public static final String SIGN_IN_METHOD_PHONE = "phone"; + public static final String SIGN_IN_METHOD_OAUTH = "oauth"; + public static final String SIGN_IN_METHOD_PLAY_GAMES = "playgames.google.com"; + // User + public static final String USER = "user"; + public static final String EMAIL = "email"; + + public static final String PROVIDER_ID = "providerId"; + public static final String CREDENTIAL = "credential"; + public static final String SECRET = "secret"; + public static final String ID_TOKEN = "idToken"; + public static final String TOKEN = "token"; + public static final String ACCESS_TOKEN = "accessToken"; + public static final String RAW_NONCE = "rawNonce"; + public static final String EMAIL_LINK = "emailLink"; + public static final String VERIFICATION_ID = "verificationId"; + public static final String SMS_CODE = "smsCode"; + public static final String SIGN_IN_METHOD = "signInMethod"; + public static final String FORCE_RESENDING_TOKEN = "forceResendingToken"; + public static final String NAME = "name"; + public static final String SERVER_AUTH_CODE = "serverAuthCode"; + + // MultiFactor + public static final String MULTI_FACTOR_HINTS = "multiFactorHints"; + public static final String MULTI_FACTOR_SESSION_ID = "multiFactorSessionId"; + public static final String MULTI_FACTOR_RESOLVER_ID = "multiFactorResolverId"; +} diff --git a/mih_ui/android/build/macos/SourcePackages/firebase_auth-6.5.4/android/src/main/java/io/flutter/plugins/firebase/auth/FlutterFirebaseAuthPlugin.java b/mih_ui/android/build/macos/SourcePackages/firebase_auth-6.5.4/android/src/main/java/io/flutter/plugins/firebase/auth/FlutterFirebaseAuthPlugin.java new file mode 100755 index 00000000..a122221c --- /dev/null +++ b/mih_ui/android/build/macos/SourcePackages/firebase_auth-6.5.4/android/src/main/java/io/flutter/plugins/firebase/auth/FlutterFirebaseAuthPlugin.java @@ -0,0 +1,782 @@ +// Copyright 2017 The Chromium Authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +package io.flutter.plugins.firebase.auth; + +import static io.flutter.plugins.firebase.auth.FlutterFirebaseMultiFactor.multiFactorUserMap; +import static io.flutter.plugins.firebase.core.FlutterFirebasePluginRegistry.registerPlugin; + +import android.app.Activity; +import androidx.annotation.NonNull; +import androidx.annotation.Nullable; +import com.google.android.gms.tasks.Task; +import com.google.android.gms.tasks.TaskCompletionSource; +import com.google.firebase.FirebaseApp; +import com.google.firebase.auth.ActionCodeResult; +import com.google.firebase.auth.AuthCredential; +import com.google.firebase.auth.AuthResult; +import com.google.firebase.auth.FirebaseAuth; +import com.google.firebase.auth.FirebaseUser; +import com.google.firebase.auth.MultiFactor; +import com.google.firebase.auth.MultiFactorInfo; +import com.google.firebase.auth.MultiFactorSession; +import com.google.firebase.auth.OAuthProvider; +import com.google.firebase.auth.PhoneMultiFactorInfo; +import com.google.firebase.auth.SignInMethodQueryResult; +import io.flutter.embedding.engine.plugins.FlutterPlugin; +import io.flutter.embedding.engine.plugins.activity.ActivityAware; +import io.flutter.embedding.engine.plugins.activity.ActivityPluginBinding; +import io.flutter.plugin.common.BinaryMessenger; +import io.flutter.plugin.common.EventChannel; +import io.flutter.plugin.common.EventChannel.StreamHandler; +import io.flutter.plugin.common.MethodChannel; +import io.flutter.plugins.firebase.core.FlutterFirebaseCorePlugin; +import io.flutter.plugins.firebase.core.FlutterFirebasePlugin; +import java.util.HashMap; +import java.util.List; +import java.util.Map; +import java.util.UUID; + +/** Flutter plugin for Firebase Auth. */ +public class FlutterFirebaseAuthPlugin + implements FlutterFirebasePlugin, + FlutterPlugin, + ActivityAware, + GeneratedAndroidFirebaseAuth.FirebaseAuthHostApi { + + private static final String METHOD_CHANNEL_NAME = "plugins.flutter.io/firebase_auth"; + + // Stores the instances of native AuthCredentials by their hashCode + static final HashMap authCredentials = new HashMap<>(); + + @Nullable private BinaryMessenger messenger; + + private MethodChannel channel; + private Activity activity; + + private final Map streamHandlers = new HashMap<>(); + + private final FlutterFirebaseAuthUser firebaseAuthUser = new FlutterFirebaseAuthUser(); + private final FlutterFirebaseMultiFactor firebaseMultiFactor = new FlutterFirebaseMultiFactor(); + + private final FlutterFirebaseTotpMultiFactor firebaseTotpMultiFactor = + new FlutterFirebaseTotpMultiFactor(); + private final FlutterFirebaseTotpSecret firebaseTotpSecret = new FlutterFirebaseTotpSecret(); + + private void initInstance(BinaryMessenger messenger) { + registerPlugin(METHOD_CHANNEL_NAME, this); + channel = new MethodChannel(messenger, METHOD_CHANNEL_NAME); + GeneratedAndroidFirebaseAuth.FirebaseAuthHostApi.setUp(messenger, this); + GeneratedAndroidFirebaseAuth.FirebaseAuthUserHostApi.setUp(messenger, firebaseAuthUser); + GeneratedAndroidFirebaseAuth.MultiFactorUserHostApi.setUp(messenger, firebaseMultiFactor); + GeneratedAndroidFirebaseAuth.MultiFactoResolverHostApi.setUp(messenger, firebaseMultiFactor); + GeneratedAndroidFirebaseAuth.MultiFactorTotpHostApi.setUp(messenger, firebaseTotpMultiFactor); + GeneratedAndroidFirebaseAuth.MultiFactorTotpSecretHostApi.setUp(messenger, firebaseTotpSecret); + + this.messenger = messenger; + } + + @Override + public void onAttachedToEngine(@NonNull FlutterPluginBinding binding) { + initInstance(binding.getBinaryMessenger()); + } + + @Override + public void onDetachedFromEngine(@NonNull FlutterPluginBinding binding) { + channel.setMethodCallHandler(null); + + assert messenger != null; + GeneratedAndroidFirebaseAuth.FirebaseAuthHostApi.setUp(messenger, null); + GeneratedAndroidFirebaseAuth.FirebaseAuthUserHostApi.setUp(messenger, null); + GeneratedAndroidFirebaseAuth.MultiFactorUserHostApi.setUp(messenger, null); + GeneratedAndroidFirebaseAuth.MultiFactoResolverHostApi.setUp(messenger, null); + GeneratedAndroidFirebaseAuth.MultiFactorTotpHostApi.setUp(messenger, null); + GeneratedAndroidFirebaseAuth.MultiFactorTotpSecretHostApi.setUp(messenger, null); + + channel = null; + messenger = null; + + removeEventListeners(); + } + + @Override + public void onAttachedToActivity(ActivityPluginBinding activityPluginBinding) { + activity = activityPluginBinding.getActivity(); + firebaseAuthUser.setActivity(activity); + } + + @Override + public void onDetachedFromActivityForConfigChanges() { + activity = null; + firebaseAuthUser.setActivity(null); + } + + @Override + public void onReattachedToActivityForConfigChanges(ActivityPluginBinding activityPluginBinding) { + activity = activityPluginBinding.getActivity(); + firebaseAuthUser.setActivity(activity); + } + + @Override + public void onDetachedFromActivity() { + activity = null; + firebaseAuthUser.setActivity(null); + } + + // Only access activity with this method. + @Nullable + private Activity getActivity() { + return activity; + } + + static FirebaseAuth getAuthFromPigeon( + GeneratedAndroidFirebaseAuth.AuthPigeonFirebaseApp pigeonApp) { + FirebaseApp app = FirebaseApp.getInstance(pigeonApp.getAppName()); + FirebaseAuth auth = FirebaseAuth.getInstance(app); + if (pigeonApp.getTenantId() != null) { + auth.setTenantId(pigeonApp.getTenantId()); + } + String customDomain = FlutterFirebaseCorePlugin.customAuthDomain.get(pigeonApp.getAppName()); + if (customDomain != null) { + auth.setCustomAuthDomain(customDomain); + } + + // Auth's `getCustomAuthDomain` supersedes value from `customAuthDomain` map set by + // `initializeApp` + if (pigeonApp.getCustomAuthDomain() != null) { + auth.setCustomAuthDomain(pigeonApp.getCustomAuthDomain()); + } + + return auth; + } + + @Override + public void registerIdTokenListener( + @NonNull GeneratedAndroidFirebaseAuth.AuthPigeonFirebaseApp app, + @NonNull GeneratedAndroidFirebaseAuth.Result result) { + try { + final FirebaseAuth auth = getAuthFromPigeon(app); + final IdTokenChannelStreamHandler handler = new IdTokenChannelStreamHandler(auth); + final String name = METHOD_CHANNEL_NAME + "/id-token/" + auth.getApp().getName(); + final EventChannel channel = new EventChannel(messenger, name); + channel.setStreamHandler(handler); + streamHandlers.put(channel, handler); + result.success(name); + } catch (Exception e) { + result.error(e); + } + } + + @Override + public void registerAuthStateListener( + @NonNull GeneratedAndroidFirebaseAuth.AuthPigeonFirebaseApp app, + @NonNull GeneratedAndroidFirebaseAuth.Result result) { + try { + final FirebaseAuth auth = getAuthFromPigeon(app); + final AuthStateChannelStreamHandler handler = new AuthStateChannelStreamHandler(auth); + final String name = METHOD_CHANNEL_NAME + "/auth-state/" + auth.getApp().getName(); + final EventChannel channel = new EventChannel(messenger, name); + channel.setStreamHandler(handler); + streamHandlers.put(channel, handler); + result.success(name); + } catch (Exception e) { + result.error(e); + } + } + + @Override + public void useEmulator( + @NonNull GeneratedAndroidFirebaseAuth.AuthPigeonFirebaseApp app, + @NonNull String host, + @NonNull Long port, + @NonNull GeneratedAndroidFirebaseAuth.VoidResult result) { + try { + FirebaseAuth firebaseAuth = getAuthFromPigeon(app); + firebaseAuth.useEmulator(host, port.intValue()); + result.success(); + } catch (Exception e) { + result.error(e); + } + } + + @Override + public void applyActionCode( + @NonNull GeneratedAndroidFirebaseAuth.AuthPigeonFirebaseApp app, + @NonNull String code, + @NonNull GeneratedAndroidFirebaseAuth.VoidResult result) { + FirebaseAuth firebaseAuth = getAuthFromPigeon(app); + firebaseAuth + .applyActionCode(code) + .addOnCompleteListener( + task -> { + if (task.isSuccessful()) { + result.success(); + } else { + result.error( + FlutterFirebaseAuthPluginException.parserExceptionToFlutter( + task.getException())); + } + }); + } + + @Override + public void checkActionCode( + @NonNull GeneratedAndroidFirebaseAuth.AuthPigeonFirebaseApp app, + @NonNull String code, + @NonNull + GeneratedAndroidFirebaseAuth.Result + result) { + FirebaseAuth firebaseAuth = getAuthFromPigeon(app); + firebaseAuth + .checkActionCode(code) + .addOnCompleteListener( + task -> { + if (task.isSuccessful()) { + ActionCodeResult actionCodeInfo = task.getResult(); + result.success(PigeonParser.parseActionCodeResult(actionCodeInfo)); + } else { + result.error( + FlutterFirebaseAuthPluginException.parserExceptionToFlutter( + task.getException())); + } + }); + } + + @Override + public void confirmPasswordReset( + @NonNull GeneratedAndroidFirebaseAuth.AuthPigeonFirebaseApp app, + @NonNull String code, + @NonNull String newPassword, + @NonNull GeneratedAndroidFirebaseAuth.VoidResult result) { + FirebaseAuth firebaseAuth = getAuthFromPigeon(app); + + firebaseAuth + .confirmPasswordReset(code, newPassword) + .addOnCompleteListener( + task -> { + if (task.isSuccessful()) { + result.success(); + } else { + result.error( + FlutterFirebaseAuthPluginException.parserExceptionToFlutter( + task.getException())); + } + }); + } + + @Override + public void createUserWithEmailAndPassword( + @NonNull GeneratedAndroidFirebaseAuth.AuthPigeonFirebaseApp app, + @NonNull String email, + @NonNull String password, + @NonNull + GeneratedAndroidFirebaseAuth.Result + result) { + FirebaseAuth firebaseAuth = getAuthFromPigeon(app); + + firebaseAuth + .createUserWithEmailAndPassword(email, password) + .addOnCompleteListener( + task -> { + if (task.isSuccessful()) { + AuthResult authResult = task.getResult(); + result.success(PigeonParser.parseAuthResult(authResult)); + } else { + result.error( + FlutterFirebaseAuthPluginException.parserExceptionToFlutter( + task.getException())); + } + }); + } + + @Override + public void signInAnonymously( + @NonNull GeneratedAndroidFirebaseAuth.AuthPigeonFirebaseApp app, + @NonNull + GeneratedAndroidFirebaseAuth.Result + result) { + FirebaseAuth firebaseAuth = getAuthFromPigeon(app); + firebaseAuth + .signInAnonymously() + .addOnCompleteListener( + task -> { + if (task.isSuccessful()) { + AuthResult authResult = task.getResult(); + result.success(PigeonParser.parseAuthResult(authResult)); + } else { + result.error( + FlutterFirebaseAuthPluginException.parserExceptionToFlutter( + task.getException())); + } + }); + } + + @Override + public void signInWithCredential( + @NonNull GeneratedAndroidFirebaseAuth.AuthPigeonFirebaseApp app, + @NonNull Map input, + @NonNull + GeneratedAndroidFirebaseAuth.Result + result) { + FirebaseAuth firebaseAuth = getAuthFromPigeon(app); + AuthCredential credential = PigeonParser.getCredential(input); + + if (credential == null) { + throw FlutterFirebaseAuthPluginException.invalidCredential(); + } + firebaseAuth + .signInWithCredential(credential) + .addOnCompleteListener( + task -> { + if (task.isSuccessful()) { + AuthResult authResult = task.getResult(); + result.success(PigeonParser.parseAuthResult(authResult)); + } else { + result.error( + FlutterFirebaseAuthPluginException.parserExceptionToFlutter( + task.getException())); + } + }); + } + + @Override + public void signInWithCustomToken( + @NonNull GeneratedAndroidFirebaseAuth.AuthPigeonFirebaseApp app, + @NonNull String token, + @NonNull + GeneratedAndroidFirebaseAuth.Result + result) { + FirebaseAuth firebaseAuth = getAuthFromPigeon(app); + + firebaseAuth + .signInWithCustomToken(token) + .addOnCompleteListener( + task -> { + if (task.isSuccessful()) { + AuthResult authResult = task.getResult(); + result.success(PigeonParser.parseAuthResult(authResult)); + } else { + result.error( + FlutterFirebaseAuthPluginException.parserExceptionToFlutter( + task.getException())); + } + }); + } + + @Override + public void signInWithEmailAndPassword( + @NonNull GeneratedAndroidFirebaseAuth.AuthPigeonFirebaseApp app, + @NonNull String email, + @NonNull String password, + @NonNull + GeneratedAndroidFirebaseAuth.Result + result) { + FirebaseAuth firebaseAuth = getAuthFromPigeon(app); + firebaseAuth + .signInWithEmailAndPassword(email, password) + .addOnCompleteListener( + task -> { + if (task.isSuccessful()) { + result.success(PigeonParser.parseAuthResult(task.getResult())); + } else { + result.error( + FlutterFirebaseAuthPluginException.parserExceptionToFlutter( + task.getException())); + } + }); + } + + @Override + public void signInWithEmailLink( + @NonNull GeneratedAndroidFirebaseAuth.AuthPigeonFirebaseApp app, + @NonNull String email, + @NonNull String emailLink, + @NonNull + GeneratedAndroidFirebaseAuth.Result + result) { + FirebaseAuth firebaseAuth = getAuthFromPigeon(app); + firebaseAuth + .signInWithEmailLink(email, emailLink) + .addOnCompleteListener( + task -> { + if (task.isSuccessful()) { + AuthResult authResult = task.getResult(); + result.success(PigeonParser.parseAuthResult(authResult)); + } else { + result.error( + FlutterFirebaseAuthPluginException.parserExceptionToFlutter( + task.getException())); + } + }); + } + + @Override + public void signInWithProvider( + @NonNull GeneratedAndroidFirebaseAuth.AuthPigeonFirebaseApp app, + @NonNull GeneratedAndroidFirebaseAuth.InternalSignInProvider signInProvider, + @NonNull + GeneratedAndroidFirebaseAuth.Result + result) { + FirebaseAuth firebaseAuth = getAuthFromPigeon(app); + + OAuthProvider.Builder provider = + OAuthProvider.newBuilder(signInProvider.getProviderId(), firebaseAuth); + if (signInProvider.getScopes() != null) { + provider.setScopes(signInProvider.getScopes()); + } + if (signInProvider.getCustomParameters() != null) { + provider.addCustomParameters(signInProvider.getCustomParameters()); + } + + firebaseAuth + .startActivityForSignInWithProvider(getActivity(), provider.build()) + .addOnCompleteListener( + task -> { + if (task.isSuccessful()) { + AuthResult authResult = task.getResult(); + result.success(PigeonParser.parseAuthResult(authResult)); + } else { + result.error( + FlutterFirebaseAuthPluginException.parserExceptionToFlutter( + task.getException())); + } + }); + } + + @Override + public void signOut( + @NonNull GeneratedAndroidFirebaseAuth.AuthPigeonFirebaseApp app, + @NonNull GeneratedAndroidFirebaseAuth.VoidResult result) { + try { + FirebaseAuth firebaseAuth = getAuthFromPigeon(app); + if (firebaseAuth.getCurrentUser() != null) { + final Map appMultiFactorUser = + multiFactorUserMap.get(app.getAppName()); + if (appMultiFactorUser != null) { + appMultiFactorUser.remove(firebaseAuth.getCurrentUser().getUid()); + } + } + firebaseAuth.signOut(); + result.success(); + } catch (Exception e) { + result.error(e); + } + } + + @Override + public void fetchSignInMethodsForEmail( + @NonNull GeneratedAndroidFirebaseAuth.AuthPigeonFirebaseApp app, + @NonNull String email, + @NonNull GeneratedAndroidFirebaseAuth.Result> result) { + FirebaseAuth firebaseAuth = getAuthFromPigeon(app); + + firebaseAuth + .fetchSignInMethodsForEmail(email) + .addOnCompleteListener( + task -> { + if (task.isSuccessful()) { + SignInMethodQueryResult signInMethodQueryResult = task.getResult(); + result.success(signInMethodQueryResult.getSignInMethods()); + } else { + result.error( + FlutterFirebaseAuthPluginException.parserExceptionToFlutter( + task.getException())); + } + }); + } + + @Override + public void sendPasswordResetEmail( + @NonNull GeneratedAndroidFirebaseAuth.AuthPigeonFirebaseApp app, + @NonNull String email, + @Nullable GeneratedAndroidFirebaseAuth.InternalActionCodeSettings actionCodeSettings, + @NonNull GeneratedAndroidFirebaseAuth.VoidResult result) { + FirebaseAuth firebaseAuth = getAuthFromPigeon(app); + + if (actionCodeSettings == null) { + firebaseAuth + .sendPasswordResetEmail(email) + .addOnCompleteListener( + task -> { + if (task.isSuccessful()) { + result.success(); + } else { + result.error( + FlutterFirebaseAuthPluginException.parserExceptionToFlutter( + task.getException())); + } + }); + return; + } + + firebaseAuth + .sendPasswordResetEmail(email, PigeonParser.getActionCodeSettings(actionCodeSettings)) + .addOnCompleteListener( + task -> { + if (task.isSuccessful()) { + result.success(); + } else { + result.error( + FlutterFirebaseAuthPluginException.parserExceptionToFlutter( + task.getException())); + } + }); + } + + @Override + public void sendSignInLinkToEmail( + @NonNull GeneratedAndroidFirebaseAuth.AuthPigeonFirebaseApp app, + @NonNull String email, + @NonNull GeneratedAndroidFirebaseAuth.InternalActionCodeSettings actionCodeSettings, + @NonNull GeneratedAndroidFirebaseAuth.VoidResult result) { + FirebaseAuth firebaseAuth = getAuthFromPigeon(app); + + firebaseAuth + .sendSignInLinkToEmail(email, PigeonParser.getActionCodeSettings(actionCodeSettings)) + .addOnCompleteListener( + task -> { + if (task.isSuccessful()) { + result.success(); + } else { + result.error( + FlutterFirebaseAuthPluginException.parserExceptionToFlutter( + task.getException())); + } + }); + } + + @Override + public void setLanguageCode( + @NonNull GeneratedAndroidFirebaseAuth.AuthPigeonFirebaseApp app, + @Nullable String languageCode, + @NonNull GeneratedAndroidFirebaseAuth.Result result) { + try { + FirebaseAuth firebaseAuth = getAuthFromPigeon(app); + + if (languageCode == null) { + firebaseAuth.useAppLanguage(); + } else { + firebaseAuth.setLanguageCode(languageCode); + } + + result.success(firebaseAuth.getLanguageCode()); + } catch (Exception e) { + result.error(e); + } + } + + @Override + public void setSettings( + @NonNull GeneratedAndroidFirebaseAuth.AuthPigeonFirebaseApp app, + @NonNull GeneratedAndroidFirebaseAuth.InternalFirebaseAuthSettings settings, + @NonNull GeneratedAndroidFirebaseAuth.VoidResult result) { + try { + FirebaseAuth firebaseAuth = getAuthFromPigeon(app); + + firebaseAuth + .getFirebaseAuthSettings() + .setAppVerificationDisabledForTesting(settings.getAppVerificationDisabledForTesting()); + + if (settings.getForceRecaptchaFlow() != null) { + firebaseAuth + .getFirebaseAuthSettings() + .forceRecaptchaFlowForTesting(settings.getForceRecaptchaFlow()); + } + + if (settings.getPhoneNumber() != null && settings.getSmsCode() != null) { + firebaseAuth + .getFirebaseAuthSettings() + .setAutoRetrievedSmsCodeForPhoneNumber( + settings.getPhoneNumber(), settings.getSmsCode()); + } + + result.success(); + } catch (Exception e) { + result.error(e); + } + } + + @Override + public void verifyPasswordResetCode( + @NonNull GeneratedAndroidFirebaseAuth.AuthPigeonFirebaseApp app, + @NonNull String code, + @NonNull GeneratedAndroidFirebaseAuth.Result result) { + FirebaseAuth firebaseAuth = getAuthFromPigeon(app); + + firebaseAuth + .verifyPasswordResetCode(code) + .addOnCompleteListener( + task -> { + if (task.isSuccessful()) { + result.success(task.getResult()); + } else { + result.error( + FlutterFirebaseAuthPluginException.parserExceptionToFlutter( + task.getException())); + } + }); + } + + @Override + public void verifyPhoneNumber( + @NonNull GeneratedAndroidFirebaseAuth.AuthPigeonFirebaseApp app, + @NonNull GeneratedAndroidFirebaseAuth.InternalVerifyPhoneNumberRequest request, + @NonNull GeneratedAndroidFirebaseAuth.Result result) { + try { + String eventChannelName = METHOD_CHANNEL_NAME + "/phone/" + UUID.randomUUID().toString(); + EventChannel channel = new EventChannel(messenger, eventChannelName); + + MultiFactorSession multiFactorSession = null; + + if (request.getMultiFactorSessionId() != null) { + multiFactorSession = + FlutterFirebaseMultiFactor.multiFactorSessionMap.get(request.getMultiFactorSessionId()); + } + + final String multiFactorInfoId = request.getMultiFactorInfoId(); + PhoneMultiFactorInfo multiFactorInfo = null; + + if (multiFactorInfoId != null) { + for (String resolverId : FlutterFirebaseMultiFactor.multiFactorResolverMap.keySet()) { + for (MultiFactorInfo info : + FlutterFirebaseMultiFactor.multiFactorResolverMap.get(resolverId).getHints()) { + if (info.getUid().equals(multiFactorInfoId) && info instanceof PhoneMultiFactorInfo) { + multiFactorInfo = (PhoneMultiFactorInfo) info; + break; + } + } + } + } + + PhoneNumberVerificationStreamHandler handler = + new PhoneNumberVerificationStreamHandler( + getActivity(), + app, + request, + multiFactorSession, + multiFactorInfo, + credential -> { + int hashCode = credential.hashCode(); + authCredentials.put(hashCode, credential); + }); + + channel.setStreamHandler(handler); + streamHandlers.put(channel, handler); + + result.success(eventChannelName); + } catch (Exception e) { + result.error(e); + } + } + + @Override + public void revokeTokenWithAuthorizationCode( + @NonNull GeneratedAndroidFirebaseAuth.AuthPigeonFirebaseApp app, + @NonNull String authorizationCode, + @NonNull GeneratedAndroidFirebaseAuth.VoidResult result) { + // Should never get here as we throw Exception on Dart side. + result.success(); + } + + @Override + public void revokeAccessToken( + @NonNull GeneratedAndroidFirebaseAuth.AuthPigeonFirebaseApp app, + @NonNull String accessToken, + @NonNull GeneratedAndroidFirebaseAuth.VoidResult result) { + FirebaseAuth firebaseAuth = getAuthFromPigeon(app); + + firebaseAuth + .revokeAccessToken(accessToken) + .addOnCompleteListener( + task -> { + if (task.isSuccessful()) { + result.success(); + } else { + result.error( + FlutterFirebaseAuthPluginException.parserExceptionToFlutter( + task.getException())); + } + }); + } + + @Override + public void initializeRecaptchaConfig( + @NonNull GeneratedAndroidFirebaseAuth.AuthPigeonFirebaseApp app, + @NonNull GeneratedAndroidFirebaseAuth.VoidResult result) { + FirebaseAuth firebaseAuth = getAuthFromPigeon(app); + firebaseAuth + .initializeRecaptchaConfig() + .addOnCompleteListener( + task -> { + if (task.isSuccessful()) { + result.success(); + } else { + result.error( + FlutterFirebaseAuthPluginException.parserExceptionToFlutter( + task.getException())); + } + }); + } + + @Override + public Task> getPluginConstantsForFirebaseApp(FirebaseApp firebaseApp) { + TaskCompletionSource> taskCompletionSource = new TaskCompletionSource<>(); + + cachedThreadPool.execute( + () -> { + try { + Map constants = new HashMap<>(); + FirebaseAuth firebaseAuth = FirebaseAuth.getInstance(firebaseApp); + FirebaseUser firebaseUser = firebaseAuth.getCurrentUser(); + String languageCode = firebaseAuth.getLanguageCode(); + + GeneratedAndroidFirebaseAuth.InternalUserDetails user = + firebaseUser == null ? null : PigeonParser.parseFirebaseUser(firebaseUser); + + if (languageCode != null) { + constants.put("APP_LANGUAGE_CODE", languageCode); + } + + if (user != null) { + constants.put("APP_CURRENT_USER", PigeonParser.manuallyToList(user)); + } + + taskCompletionSource.setResult(constants); + } catch (Exception e) { + taskCompletionSource.setException(e); + } + }); + + return taskCompletionSource.getTask(); + } + + @Override + public Task didReinitializeFirebaseCore() { + TaskCompletionSource taskCompletionSource = new TaskCompletionSource<>(); + + cachedThreadPool.execute( + () -> { + try { + removeEventListeners(); + authCredentials.clear(); + taskCompletionSource.setResult(null); + } catch (Exception e) { + taskCompletionSource.setException(e); + } + }); + + return taskCompletionSource.getTask(); + } + + private void removeEventListeners() { + for (EventChannel eventChannel : streamHandlers.keySet()) { + StreamHandler streamHandler = streamHandlers.get(eventChannel); + if (streamHandler != null) { + streamHandler.onCancel(null); + } + eventChannel.setStreamHandler(null); + } + streamHandlers.clear(); + } +} diff --git a/mih_ui/android/build/macos/SourcePackages/firebase_auth-6.5.4/android/src/main/java/io/flutter/plugins/firebase/auth/FlutterFirebaseAuthPluginException.java b/mih_ui/android/build/macos/SourcePackages/firebase_auth-6.5.4/android/src/main/java/io/flutter/plugins/firebase/auth/FlutterFirebaseAuthPluginException.java new file mode 100644 index 00000000..a42bcb56 --- /dev/null +++ b/mih_ui/android/build/macos/SourcePackages/firebase_auth-6.5.4/android/src/main/java/io/flutter/plugins/firebase/auth/FlutterFirebaseAuthPluginException.java @@ -0,0 +1,157 @@ +/* + * Copyright 2022, the Chromium project authors. Please see the AUTHORS file + * for details. All rights reserved. Use of this source code is governed by a + * BSD-style license that can be found in the LICENSE file. + */ + +package io.flutter.plugins.firebase.auth; + +import androidx.annotation.Nullable; +import com.google.firebase.FirebaseApiNotAvailableException; +import com.google.firebase.FirebaseNetworkException; +import com.google.firebase.FirebaseTooManyRequestsException; +import com.google.firebase.auth.AuthCredential; +import com.google.firebase.auth.FirebaseAuthException; +import com.google.firebase.auth.FirebaseAuthMultiFactorException; +import com.google.firebase.auth.FirebaseAuthUserCollisionException; +import com.google.firebase.auth.FirebaseAuthWeakPasswordException; +import com.google.firebase.auth.MultiFactorInfo; +import com.google.firebase.auth.MultiFactorResolver; +import com.google.firebase.auth.MultiFactorSession; +import java.util.HashMap; +import java.util.List; +import java.util.Map; +import java.util.UUID; + +public class FlutterFirebaseAuthPluginException { + + static GeneratedAndroidFirebaseAuth.FlutterError parserExceptionToFlutter( + @Nullable Exception nativeException) { + if (nativeException == null) { + return new GeneratedAndroidFirebaseAuth.FlutterError("UNKNOWN", null, null); + } + String code = "UNKNOWN"; + + String message = nativeException.getMessage(); + Map additionalData = new HashMap<>(); + + if (nativeException instanceof FirebaseAuthMultiFactorException) { + final FirebaseAuthMultiFactorException multiFactorException = + (FirebaseAuthMultiFactorException) nativeException; + Map output = new HashMap<>(); + + MultiFactorResolver multiFactorResolver = multiFactorException.getResolver(); + final List hints = multiFactorResolver.getHints(); + + final MultiFactorSession session = multiFactorResolver.getSession(); + final String sessionId = UUID.randomUUID().toString(); + FlutterFirebaseMultiFactor.multiFactorSessionMap.put(sessionId, session); + + final String resolverId = UUID.randomUUID().toString(); + FlutterFirebaseMultiFactor.multiFactorResolverMap.put(resolverId, multiFactorResolver); + + final List> pigeonHints = PigeonParser.multiFactorInfoToMap(hints); + + output.put( + Constants.APP_NAME, + multiFactorException.getResolver().getFirebaseAuth().getApp().getName()); + + output.put(Constants.MULTI_FACTOR_HINTS, pigeonHints); + + output.put(Constants.MULTI_FACTOR_SESSION_ID, sessionId); + output.put(Constants.MULTI_FACTOR_RESOLVER_ID, resolverId); + + return new GeneratedAndroidFirebaseAuth.FlutterError( + multiFactorException.getErrorCode(), multiFactorException.getLocalizedMessage(), output); + } + + if (nativeException instanceof FirebaseNetworkException + || (nativeException.getCause() != null + && nativeException.getCause() instanceof FirebaseNetworkException)) { + return new GeneratedAndroidFirebaseAuth.FlutterError( + "network-request-failed", + "A network error (such as timeout, interrupted connection or unreachable host) has" + + " occurred.", + null); + } + + if (nativeException instanceof FirebaseApiNotAvailableException + || (nativeException.getCause() != null + && nativeException.getCause() instanceof FirebaseApiNotAvailableException)) { + return new GeneratedAndroidFirebaseAuth.FlutterError( + "api-not-available", "The requested API is not available.", null); + } + + if (nativeException instanceof FirebaseTooManyRequestsException + || (nativeException.getCause() != null + && nativeException.getCause() instanceof FirebaseTooManyRequestsException)) { + return new GeneratedAndroidFirebaseAuth.FlutterError( + "too-many-requests", + "We have blocked all requests from this device due to unusual activity. Try again later.", + null); + } + + // Manual message overrides to match other platforms. + if (nativeException.getMessage() != null + && nativeException + .getMessage() + .startsWith("Cannot create PhoneAuthCredential without either verificationProof")) { + return new GeneratedAndroidFirebaseAuth.FlutterError( + "invalid-verification-code", + "The verification ID used to create the phone auth credential is invalid.", + null); + } + + if (message != null + && message.contains("User has already been linked to the given provider.")) { + return FlutterFirebaseAuthPluginException.alreadyLinkedProvider(); + } + + if (nativeException instanceof FirebaseAuthException) { + code = ((FirebaseAuthException) nativeException).getErrorCode(); + } + + if (nativeException instanceof FirebaseAuthWeakPasswordException) { + message = ((FirebaseAuthWeakPasswordException) nativeException).getReason(); + } + + if (nativeException instanceof FirebaseAuthUserCollisionException) { + String email = ((FirebaseAuthUserCollisionException) nativeException).getEmail(); + + if (email != null) { + additionalData.put("email", email); + } + + AuthCredential authCredential = + ((FirebaseAuthUserCollisionException) nativeException).getUpdatedCredential(); + + if (authCredential != null) { + additionalData.put("authCredential", PigeonParser.parseAuthCredential(authCredential)); + } + } + + return new GeneratedAndroidFirebaseAuth.FlutterError(code, message, additionalData); + } + + static GeneratedAndroidFirebaseAuth.FlutterError noUser() { + return new GeneratedAndroidFirebaseAuth.FlutterError( + "NO_CURRENT_USER", "No user currently signed in.", null); + } + + static GeneratedAndroidFirebaseAuth.FlutterError invalidCredential() { + return new GeneratedAndroidFirebaseAuth.FlutterError( + "INVALID_CREDENTIAL", + "The supplied auth credential is malformed, has expired or is not currently supported.", + null); + } + + static GeneratedAndroidFirebaseAuth.FlutterError noSuchProvider() { + return new GeneratedAndroidFirebaseAuth.FlutterError( + "NO_SUCH_PROVIDER", "User was not linked to an account with the given provider.", null); + } + + static GeneratedAndroidFirebaseAuth.FlutterError alreadyLinkedProvider() { + return new GeneratedAndroidFirebaseAuth.FlutterError( + "PROVIDER_ALREADY_LINKED", "User has already been linked to the given provider.", null); + } +} diff --git a/mih_ui/android/build/macos/SourcePackages/firebase_auth-6.5.4/android/src/main/java/io/flutter/plugins/firebase/auth/FlutterFirebaseAuthRegistrar.java b/mih_ui/android/build/macos/SourcePackages/firebase_auth-6.5.4/android/src/main/java/io/flutter/plugins/firebase/auth/FlutterFirebaseAuthRegistrar.java new file mode 100644 index 00000000..1476a9bd --- /dev/null +++ b/mih_ui/android/build/macos/SourcePackages/firebase_auth-6.5.4/android/src/main/java/io/flutter/plugins/firebase/auth/FlutterFirebaseAuthRegistrar.java @@ -0,0 +1,21 @@ +// Copyright 2019 The Chromium Authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +package io.flutter.plugins.firebase.auth; + +import androidx.annotation.Keep; +import com.google.firebase.components.Component; +import com.google.firebase.components.ComponentRegistrar; +import com.google.firebase.platforminfo.LibraryVersionComponent; +import java.util.Collections; +import java.util.List; + +@Keep +public class FlutterFirebaseAuthRegistrar implements ComponentRegistrar { + @Override + public List> getComponents() { + return Collections.>singletonList( + LibraryVersionComponent.create(BuildConfig.LIBRARY_NAME, BuildConfig.LIBRARY_VERSION)); + } +} diff --git a/mih_ui/android/build/macos/SourcePackages/firebase_auth-6.5.4/android/src/main/java/io/flutter/plugins/firebase/auth/FlutterFirebaseAuthUser.java b/mih_ui/android/build/macos/SourcePackages/firebase_auth-6.5.4/android/src/main/java/io/flutter/plugins/firebase/auth/FlutterFirebaseAuthUser.java new file mode 100644 index 00000000..7039a38f --- /dev/null +++ b/mih_ui/android/build/macos/SourcePackages/firebase_auth-6.5.4/android/src/main/java/io/flutter/plugins/firebase/auth/FlutterFirebaseAuthUser.java @@ -0,0 +1,548 @@ +/* + * Copyright 2023, the Chromium project authors. Please see the AUTHORS file + * for details. All rights reserved. Use of this source code is governed by a + * BSD-style license that can be found in the LICENSE file. + */ + +package io.flutter.plugins.firebase.auth; + +import static io.flutter.plugins.firebase.core.FlutterFirebasePlugin.cachedThreadPool; + +import android.app.Activity; +import android.net.Uri; +import androidx.annotation.NonNull; +import androidx.annotation.Nullable; +import com.google.android.gms.tasks.Tasks; +import com.google.firebase.FirebaseApp; +import com.google.firebase.auth.AuthCredential; +import com.google.firebase.auth.FirebaseAuth; +import com.google.firebase.auth.FirebaseUser; +import com.google.firebase.auth.GetTokenResult; +import com.google.firebase.auth.OAuthProvider; +import com.google.firebase.auth.PhoneAuthCredential; +import com.google.firebase.auth.UserProfileChangeRequest; +import java.util.Map; + +public class FlutterFirebaseAuthUser + implements GeneratedAndroidFirebaseAuth.FirebaseAuthUserHostApi { + + private Activity activity; + + public void setActivity(Activity activity) { + this.activity = activity; + } + + public static FirebaseUser getCurrentUserFromPigeon( + @NonNull GeneratedAndroidFirebaseAuth.AuthPigeonFirebaseApp pigeonApp) { + FirebaseApp app = FirebaseApp.getInstance(pigeonApp.getAppName()); + FirebaseAuth auth = FirebaseAuth.getInstance(app); + if (pigeonApp.getTenantId() != null) { + auth.setTenantId(pigeonApp.getTenantId()); + } + + return auth.getCurrentUser(); + } + + @Override + public void delete( + @NonNull GeneratedAndroidFirebaseAuth.AuthPigeonFirebaseApp app, + @NonNull GeneratedAndroidFirebaseAuth.VoidResult result) { + FirebaseUser firebaseUser = getCurrentUserFromPigeon(app); + + if (firebaseUser == null) { + result.error(FlutterFirebaseAuthPluginException.noUser()); + return; + } + + firebaseUser + .delete() + .addOnCompleteListener( + task -> { + if (task.isSuccessful()) { + result.success(); + } else { + result.error( + FlutterFirebaseAuthPluginException.parserExceptionToFlutter( + task.getException())); + } + }); + } + + @Override + public void getIdToken( + @NonNull GeneratedAndroidFirebaseAuth.AuthPigeonFirebaseApp app, + @NonNull Boolean forceRefresh, + @NonNull + GeneratedAndroidFirebaseAuth.Result + result) { + cachedThreadPool.execute( + () -> { + FirebaseUser firebaseUser = getCurrentUserFromPigeon(app); + + if (firebaseUser == null) { + result.error(FlutterFirebaseAuthPluginException.noUser()); + return; + } + try { + GetTokenResult response = Tasks.await(firebaseUser.getIdToken(forceRefresh)); + result.success(PigeonParser.parseTokenResult(response)); + } catch (Exception exception) { + result.error(FlutterFirebaseAuthPluginException.parserExceptionToFlutter(exception)); + } + }); + } + + @Override + public void linkWithCredential( + @NonNull GeneratedAndroidFirebaseAuth.AuthPigeonFirebaseApp app, + @NonNull Map input, + @NonNull + GeneratedAndroidFirebaseAuth.Result + result) { + FirebaseUser firebaseUser = getCurrentUserFromPigeon(app); + AuthCredential credential = PigeonParser.getCredential(input); + + if (firebaseUser == null) { + result.error(FlutterFirebaseAuthPluginException.noUser()); + return; + } + + if (credential == null) { + result.error(FlutterFirebaseAuthPluginException.invalidCredential()); + return; + } + + firebaseUser + .linkWithCredential(credential) + .addOnCompleteListener( + task -> { + if (task.isSuccessful()) { + result.success(PigeonParser.parseAuthResult(task.getResult())); + } else { + result.error( + FlutterFirebaseAuthPluginException.parserExceptionToFlutter( + task.getException())); + } + }); + } + + @Override + public void linkWithProvider( + @NonNull GeneratedAndroidFirebaseAuth.AuthPigeonFirebaseApp app, + @NonNull GeneratedAndroidFirebaseAuth.InternalSignInProvider signInProvider, + @NonNull + GeneratedAndroidFirebaseAuth.Result + result) { + FirebaseUser firebaseUser = getCurrentUserFromPigeon(app); + + OAuthProvider.Builder provider = OAuthProvider.newBuilder(signInProvider.getProviderId()); + if (signInProvider.getScopes() != null) { + provider.setScopes(signInProvider.getScopes()); + } + if (signInProvider.getCustomParameters() != null) { + provider.addCustomParameters(signInProvider.getCustomParameters()); + } + + firebaseUser + .startActivityForLinkWithProvider(activity, provider.build()) + .addOnCompleteListener( + task -> { + if (task.isSuccessful()) { + result.success(PigeonParser.parseAuthResult(task.getResult())); + } else { + result.error( + FlutterFirebaseAuthPluginException.parserExceptionToFlutter( + task.getException())); + } + }); + } + + @Override + public void reauthenticateWithCredential( + @NonNull GeneratedAndroidFirebaseAuth.AuthPigeonFirebaseApp app, + @NonNull Map input, + @NonNull + GeneratedAndroidFirebaseAuth.Result + result) { + FirebaseUser firebaseUser = getCurrentUserFromPigeon(app); + AuthCredential credential = PigeonParser.getCredential(input); + + if (firebaseUser == null) { + result.error(FlutterFirebaseAuthPluginException.noUser()); + return; + } + + if (credential == null) { + result.error(FlutterFirebaseAuthPluginException.invalidCredential()); + return; + } + + firebaseUser + .reauthenticateAndRetrieveData(credential) + .addOnCompleteListener( + task -> { + if (task.isSuccessful()) { + result.success(PigeonParser.parseAuthResult(task.getResult())); + } else { + result.error( + FlutterFirebaseAuthPluginException.parserExceptionToFlutter( + task.getException())); + } + }); + } + + @Override + public void reauthenticateWithProvider( + @NonNull GeneratedAndroidFirebaseAuth.AuthPigeonFirebaseApp app, + @NonNull GeneratedAndroidFirebaseAuth.InternalSignInProvider signInProvider, + @NonNull + GeneratedAndroidFirebaseAuth.Result + result) { + FirebaseUser firebaseUser = getCurrentUserFromPigeon(app); + + OAuthProvider.Builder provider = OAuthProvider.newBuilder(signInProvider.getProviderId()); + if (signInProvider.getScopes() != null) { + provider.setScopes(signInProvider.getScopes()); + } + if (signInProvider.getCustomParameters() != null) { + provider.addCustomParameters(signInProvider.getCustomParameters()); + } + + firebaseUser + .startActivityForReauthenticateWithProvider(activity, provider.build()) + .addOnCompleteListener( + task -> { + if (task.isSuccessful()) { + result.success(PigeonParser.parseAuthResult(task.getResult())); + } else { + result.error( + FlutterFirebaseAuthPluginException.parserExceptionToFlutter( + task.getException())); + } + }); + } + + @Override + public void reload( + @NonNull GeneratedAndroidFirebaseAuth.AuthPigeonFirebaseApp app, + @NonNull + GeneratedAndroidFirebaseAuth.Result + result) { + FirebaseUser firebaseUser = getCurrentUserFromPigeon(app); + + if (firebaseUser == null) { + result.error(FlutterFirebaseAuthPluginException.noUser()); + return; + } + + firebaseUser + .reload() + .addOnCompleteListener( + task -> { + if (task.isSuccessful()) { + result.success(PigeonParser.parseFirebaseUser(firebaseUser)); + } else { + result.error( + FlutterFirebaseAuthPluginException.parserExceptionToFlutter( + task.getException())); + } + }); + } + + @Override + public void sendEmailVerification( + @NonNull GeneratedAndroidFirebaseAuth.AuthPigeonFirebaseApp app, + @Nullable GeneratedAndroidFirebaseAuth.InternalActionCodeSettings actionCodeSettings, + @NonNull GeneratedAndroidFirebaseAuth.VoidResult result) { + FirebaseUser firebaseUser = getCurrentUserFromPigeon(app); + + if (firebaseUser == null) { + result.error(FlutterFirebaseAuthPluginException.noUser()); + return; + } + + if (actionCodeSettings == null) { + firebaseUser + .sendEmailVerification() + .addOnCompleteListener( + task -> { + if (task.isSuccessful()) { + result.success(); + } else { + result.error( + FlutterFirebaseAuthPluginException.parserExceptionToFlutter( + task.getException())); + } + }); + return; + } + + firebaseUser + .sendEmailVerification(PigeonParser.getActionCodeSettings(actionCodeSettings)) + .addOnCompleteListener( + task -> { + if (task.isSuccessful()) { + result.success(); + } else { + result.error( + FlutterFirebaseAuthPluginException.parserExceptionToFlutter( + task.getException())); + } + }); + } + + @Override + public void unlink( + @NonNull GeneratedAndroidFirebaseAuth.AuthPigeonFirebaseApp app, + @NonNull String providerId, + @NonNull + GeneratedAndroidFirebaseAuth.Result + result) { + FirebaseUser firebaseUser = getCurrentUserFromPigeon(app); + + if (firebaseUser == null) { + result.error(FlutterFirebaseAuthPluginException.noUser()); + return; + } + + firebaseUser + .unlink(providerId) + .addOnCompleteListener( + task -> { + if (task.isSuccessful()) { + result.success(PigeonParser.parseAuthResult(task.getResult())); + } else { + Exception exception = task.getException(); + if (exception + .getMessage() + .contains("User was not linked to an account with the given provider.")) { + result.error(FlutterFirebaseAuthPluginException.noSuchProvider()); + } else { + result.error( + FlutterFirebaseAuthPluginException.parserExceptionToFlutter(exception)); + } + } + }); + } + + @Override + public void updateEmail( + @NonNull GeneratedAndroidFirebaseAuth.AuthPigeonFirebaseApp app, + @NonNull String newEmail, + @NonNull + GeneratedAndroidFirebaseAuth.Result + result) { + FirebaseUser firebaseUser = getCurrentUserFromPigeon(app); + + if (firebaseUser == null) { + result.error(FlutterFirebaseAuthPluginException.noUser()); + return; + } + + firebaseUser + .updateEmail(newEmail) + .addOnCompleteListener( + task -> { + if (task.isSuccessful()) { + firebaseUser + .reload() + .addOnCompleteListener( + reloadTask -> { + if (reloadTask.isSuccessful()) { + result.success(PigeonParser.parseFirebaseUser(firebaseUser)); + } else { + result.error( + FlutterFirebaseAuthPluginException.parserExceptionToFlutter( + reloadTask.getException())); + } + }); + } else { + result.error( + FlutterFirebaseAuthPluginException.parserExceptionToFlutter( + task.getException())); + } + }); + } + + @Override + public void updatePassword( + @NonNull GeneratedAndroidFirebaseAuth.AuthPigeonFirebaseApp app, + @NonNull String newPassword, + @NonNull + GeneratedAndroidFirebaseAuth.Result + result) { + FirebaseUser firebaseUser = getCurrentUserFromPigeon(app); + + if (firebaseUser == null) { + result.error(FlutterFirebaseAuthPluginException.noUser()); + return; + } + + firebaseUser + .updatePassword(newPassword) + .addOnCompleteListener( + task -> { + if (task.isSuccessful()) { + firebaseUser + .reload() + .addOnCompleteListener( + reloadTask -> { + if (reloadTask.isSuccessful()) { + result.success(PigeonParser.parseFirebaseUser(firebaseUser)); + } else { + result.error( + FlutterFirebaseAuthPluginException.parserExceptionToFlutter( + reloadTask.getException())); + } + }); + } else { + result.error( + FlutterFirebaseAuthPluginException.parserExceptionToFlutter( + task.getException())); + } + }); + } + + @Override + public void updatePhoneNumber( + @NonNull GeneratedAndroidFirebaseAuth.AuthPigeonFirebaseApp app, + @NonNull Map input, + @NonNull + GeneratedAndroidFirebaseAuth.Result + result) { + FirebaseUser firebaseUser = getCurrentUserFromPigeon(app); + + if (firebaseUser == null) { + result.error(FlutterFirebaseAuthPluginException.noUser()); + return; + } + + PhoneAuthCredential phoneAuthCredential = + (PhoneAuthCredential) PigeonParser.getCredential(input); + + if (phoneAuthCredential == null) { + result.error(FlutterFirebaseAuthPluginException.invalidCredential()); + return; + } + + firebaseUser + .updatePhoneNumber(phoneAuthCredential) + .addOnCompleteListener( + task -> { + if (task.isSuccessful()) { + firebaseUser + .reload() + .addOnCompleteListener( + reloadTask -> { + if (reloadTask.isSuccessful()) { + result.success(PigeonParser.parseFirebaseUser(firebaseUser)); + } else { + result.error( + FlutterFirebaseAuthPluginException.parserExceptionToFlutter( + reloadTask.getException())); + } + }); + } else { + result.error( + FlutterFirebaseAuthPluginException.parserExceptionToFlutter( + task.getException())); + } + }); + } + + @Override + public void updateProfile( + @NonNull GeneratedAndroidFirebaseAuth.AuthPigeonFirebaseApp app, + @NonNull GeneratedAndroidFirebaseAuth.InternalUserProfile profile, + @NonNull + GeneratedAndroidFirebaseAuth.Result + result) { + FirebaseUser firebaseUser = getCurrentUserFromPigeon(app); + + if (firebaseUser == null) { + result.error(FlutterFirebaseAuthPluginException.noUser()); + return; + } + + UserProfileChangeRequest.Builder builder = new UserProfileChangeRequest.Builder(); + + if (profile.getDisplayNameChanged()) { + builder.setDisplayName(profile.getDisplayName()); + } + + if (profile.getPhotoUrlChanged()) { + if (profile.getPhotoUrl() != null) { + builder.setPhotoUri(Uri.parse(profile.getPhotoUrl())); + } else { + builder.setPhotoUri(null); + } + } + + firebaseUser + .updateProfile(builder.build()) + .addOnCompleteListener( + task -> { + if (task.isSuccessful()) { + firebaseUser + .reload() + .addOnCompleteListener( + reloadTask -> { + if (reloadTask.isSuccessful()) { + result.success(PigeonParser.parseFirebaseUser(firebaseUser)); + } else { + result.error( + FlutterFirebaseAuthPluginException.parserExceptionToFlutter( + reloadTask.getException())); + } + }); + } else { + result.error( + FlutterFirebaseAuthPluginException.parserExceptionToFlutter( + task.getException())); + } + }); + } + + @Override + public void verifyBeforeUpdateEmail( + @NonNull GeneratedAndroidFirebaseAuth.AuthPigeonFirebaseApp app, + @NonNull String newEmail, + @Nullable GeneratedAndroidFirebaseAuth.InternalActionCodeSettings actionCodeSettings, + @NonNull GeneratedAndroidFirebaseAuth.VoidResult result) { + FirebaseUser firebaseUser = getCurrentUserFromPigeon(app); + + if (firebaseUser == null) { + result.error(FlutterFirebaseAuthPluginException.noUser()); + return; + } + + if (actionCodeSettings == null) { + firebaseUser + .verifyBeforeUpdateEmail(newEmail) + .addOnCompleteListener( + task -> { + if (task.isSuccessful()) { + result.success(); + } else { + result.error( + FlutterFirebaseAuthPluginException.parserExceptionToFlutter( + task.getException())); + } + }); + return; + } + + firebaseUser + .verifyBeforeUpdateEmail(newEmail, PigeonParser.getActionCodeSettings(actionCodeSettings)) + .addOnCompleteListener( + task -> { + if (task.isSuccessful()) { + result.success(); + } else { + result.error( + FlutterFirebaseAuthPluginException.parserExceptionToFlutter( + task.getException())); + } + }); + } +} diff --git a/mih_ui/android/build/macos/SourcePackages/firebase_auth-6.5.4/android/src/main/java/io/flutter/plugins/firebase/auth/FlutterFirebaseMultiFactor.java b/mih_ui/android/build/macos/SourcePackages/firebase_auth-6.5.4/android/src/main/java/io/flutter/plugins/firebase/auth/FlutterFirebaseMultiFactor.java new file mode 100644 index 00000000..1ba51914 --- /dev/null +++ b/mih_ui/android/build/macos/SourcePackages/firebase_auth-6.5.4/android/src/main/java/io/flutter/plugins/firebase/auth/FlutterFirebaseMultiFactor.java @@ -0,0 +1,252 @@ +/* + * Copyright 2023, the Chromium project authors. Please see the AUTHORS file + * for details. All rights reserved. Use of this source code is governed by a + * BSD-style license that can be found in the LICENSE file. + */ + +package io.flutter.plugins.firebase.auth; + +import androidx.annotation.NonNull; +import androidx.annotation.Nullable; +import com.google.firebase.auth.AuthResult; +import com.google.firebase.auth.FirebaseUser; +import com.google.firebase.auth.MultiFactor; +import com.google.firebase.auth.MultiFactorAssertion; +import com.google.firebase.auth.MultiFactorInfo; +import com.google.firebase.auth.MultiFactorResolver; +import com.google.firebase.auth.MultiFactorSession; +import com.google.firebase.auth.PhoneAuthCredential; +import com.google.firebase.auth.PhoneAuthProvider; +import com.google.firebase.auth.PhoneMultiFactorGenerator; +import com.google.firebase.internal.api.FirebaseNoSignedInUserException; +import java.util.HashMap; +import java.util.List; +import java.util.Map; +import java.util.UUID; + +public class FlutterFirebaseMultiFactor + implements GeneratedAndroidFirebaseAuth.MultiFactorUserHostApi, + GeneratedAndroidFirebaseAuth.MultiFactoResolverHostApi { + + // Map an app id to a map of user id to a MultiFactorUser object. + static final Map> multiFactorUserMap = new HashMap<>(); + + // Map an id to a MultiFactorSession object. + static final Map multiFactorSessionMap = new HashMap<>(); + + // Map an id to a MultiFactorResolver object. + static final Map multiFactorResolverMap = new HashMap<>(); + + static final Map multiFactorAssertionMap = new HashMap<>(); + + MultiFactor getAppMultiFactor(@NonNull GeneratedAndroidFirebaseAuth.AuthPigeonFirebaseApp app) + throws FirebaseNoSignedInUserException { + final FirebaseUser currentUser = FlutterFirebaseAuthUser.getCurrentUserFromPigeon(app); + if (currentUser == null) { + throw new FirebaseNoSignedInUserException("No user is signed in"); + } + if (multiFactorUserMap.get(app.getAppName()) == null) { + multiFactorUserMap.put(app.getAppName(), new HashMap<>()); + } + + final Map appMultiFactorUser = multiFactorUserMap.get(app.getAppName()); + if (appMultiFactorUser.get(currentUser.getUid()) == null) { + appMultiFactorUser.put(currentUser.getUid(), currentUser.getMultiFactor()); + } + + return appMultiFactorUser.get(currentUser.getUid()); + } + + @Override + public void enrollPhone( + @NonNull GeneratedAndroidFirebaseAuth.AuthPigeonFirebaseApp app, + @NonNull GeneratedAndroidFirebaseAuth.InternalPhoneMultiFactorAssertion assertion, + @Nullable String displayName, + @NonNull GeneratedAndroidFirebaseAuth.VoidResult result) { + final MultiFactor multiFactor; + try { + multiFactor = getAppMultiFactor(app); + } catch (FirebaseNoSignedInUserException e) { + result.error(e); + return; + } + + PhoneAuthCredential credential = + PhoneAuthProvider.getCredential( + assertion.getVerificationId(), assertion.getVerificationCode()); + + MultiFactorAssertion multiFactorAssertion = PhoneMultiFactorGenerator.getAssertion(credential); + + multiFactor + .enroll(multiFactorAssertion, displayName) + .addOnCompleteListener( + task -> { + if (task.isSuccessful()) { + result.success(); + } else { + result.error( + FlutterFirebaseAuthPluginException.parserExceptionToFlutter( + task.getException())); + } + }); + } + + @Override + public void enrollTotp( + @NonNull GeneratedAndroidFirebaseAuth.AuthPigeonFirebaseApp app, + @NonNull String assertionId, + @Nullable String displayName, + @NonNull GeneratedAndroidFirebaseAuth.VoidResult result) { + final MultiFactor multiFactor; + try { + multiFactor = getAppMultiFactor(app); + } catch (FirebaseNoSignedInUserException e) { + result.error(e); + return; + } + + final MultiFactorAssertion multiFactorAssertion = multiFactorAssertionMap.get(assertionId); + + assert multiFactorAssertion != null; + multiFactor + .enroll(multiFactorAssertion, displayName) + .addOnCompleteListener( + task -> { + if (task.isSuccessful()) { + result.success(); + } else { + result.error( + FlutterFirebaseAuthPluginException.parserExceptionToFlutter( + task.getException())); + } + }); + } + + @Override + public void getSession( + @NonNull GeneratedAndroidFirebaseAuth.AuthPigeonFirebaseApp app, + @NonNull + GeneratedAndroidFirebaseAuth.Result< + GeneratedAndroidFirebaseAuth.InternalMultiFactorSession> + result) { + final MultiFactor multiFactor; + try { + multiFactor = getAppMultiFactor(app); + } catch (FirebaseNoSignedInUserException e) { + result.error(e); + return; + } + + multiFactor + .getSession() + .addOnCompleteListener( + task -> { + if (task.isSuccessful()) { + final MultiFactorSession sessionResult = task.getResult(); + final String id = UUID.randomUUID().toString(); + multiFactorSessionMap.put(id, sessionResult); + result.success( + new GeneratedAndroidFirebaseAuth.InternalMultiFactorSession.Builder() + .setId(id) + .build()); + } else { + result.error( + FlutterFirebaseAuthPluginException.parserExceptionToFlutter( + task.getException())); + } + }); + } + + @Override + public void unenroll( + @NonNull GeneratedAndroidFirebaseAuth.AuthPigeonFirebaseApp app, + @NonNull String factorUid, + @NonNull GeneratedAndroidFirebaseAuth.VoidResult result) { + final MultiFactor multiFactor; + try { + multiFactor = getAppMultiFactor(app); + } catch (FirebaseNoSignedInUserException e) { + result.error(FlutterFirebaseAuthPluginException.parserExceptionToFlutter(e)); + return; + } + + multiFactor + .unenroll(factorUid) + .addOnCompleteListener( + task -> { + if (task.isSuccessful()) { + result.success(); + } else { + result.error( + FlutterFirebaseAuthPluginException.parserExceptionToFlutter( + task.getException())); + } + }); + } + + @Override + public void getEnrolledFactors( + @NonNull GeneratedAndroidFirebaseAuth.AuthPigeonFirebaseApp app, + @NonNull + GeneratedAndroidFirebaseAuth.Result< + List> + result) { + final MultiFactor multiFactor; + try { + multiFactor = getAppMultiFactor(app); + } catch (FirebaseNoSignedInUserException e) { + result.error(e); + return; + } + + final List factors = multiFactor.getEnrolledFactors(); + + final List resultFactors = + PigeonParser.multiFactorInfoToPigeon(factors); + + result.success(resultFactors); + } + + @Override + public void resolveSignIn( + @NonNull String resolverId, + @Nullable GeneratedAndroidFirebaseAuth.InternalPhoneMultiFactorAssertion assertion, + @Nullable String totpAssertionId, + @NonNull + GeneratedAndroidFirebaseAuth.Result + result) { + final MultiFactorResolver resolver = multiFactorResolverMap.get(resolverId); + + if (resolver == null) { + result.error( + FlutterFirebaseAuthPluginException.parserExceptionToFlutter( + new Exception("Resolver not found"))); + return; + } + + MultiFactorAssertion multiFactorAssertion; + + if (assertion != null) { + PhoneAuthCredential credential = + PhoneAuthProvider.getCredential( + assertion.getVerificationId(), assertion.getVerificationCode()); + multiFactorAssertion = PhoneMultiFactorGenerator.getAssertion(credential); + } else { + multiFactorAssertion = multiFactorAssertionMap.get(totpAssertionId); + } + + resolver + .resolveSignIn(multiFactorAssertion) + .addOnCompleteListener( + task -> { + if (task.isSuccessful()) { + final AuthResult authResult = task.getResult(); + result.success(PigeonParser.parseAuthResult(authResult)); + } else { + result.error( + FlutterFirebaseAuthPluginException.parserExceptionToFlutter( + task.getException())); + } + }); + } +} diff --git a/mih_ui/android/build/macos/SourcePackages/firebase_auth-6.5.4/android/src/main/java/io/flutter/plugins/firebase/auth/FlutterFirebaseTotpMultiFactor.java b/mih_ui/android/build/macos/SourcePackages/firebase_auth-6.5.4/android/src/main/java/io/flutter/plugins/firebase/auth/FlutterFirebaseTotpMultiFactor.java new file mode 100644 index 00000000..9761a5df --- /dev/null +++ b/mih_ui/android/build/macos/SourcePackages/firebase_auth-6.5.4/android/src/main/java/io/flutter/plugins/firebase/auth/FlutterFirebaseTotpMultiFactor.java @@ -0,0 +1,82 @@ +/* + * Copyright 2023, the Chromium project authors. Please see the AUTHORS file + * for details. All rights reserved. Use of this source code is governed by a + * BSD-style license that can be found in the LICENSE file. + */ + +package io.flutter.plugins.firebase.auth; + +import androidx.annotation.NonNull; +import com.google.firebase.auth.MultiFactorSession; +import com.google.firebase.auth.TotpMultiFactorAssertion; +import com.google.firebase.auth.TotpMultiFactorGenerator; +import com.google.firebase.auth.TotpSecret; +import java.util.HashMap; +import java.util.Map; +import java.util.UUID; + +public class FlutterFirebaseTotpMultiFactor + implements GeneratedAndroidFirebaseAuth.MultiFactorTotpHostApi { + + // Map an app id to a map of user id to a TotpSecret object. + static final Map multiFactorSecret = new HashMap<>(); + + @Override + public void generateSecret( + @NonNull String sessionId, + @NonNull + GeneratedAndroidFirebaseAuth.Result + result) { + MultiFactorSession multiFactorSession = + FlutterFirebaseMultiFactor.multiFactorSessionMap.get(sessionId); + + assert multiFactorSession != null; + TotpMultiFactorGenerator.generateSecret(multiFactorSession) + .addOnCompleteListener( + task -> { + if (task.isSuccessful()) { + TotpSecret secret = task.getResult(); + multiFactorSecret.put(secret.getSharedSecretKey(), secret); + result.success( + new GeneratedAndroidFirebaseAuth.InternalTotpSecret.Builder() + .setCodeIntervalSeconds((long) secret.getCodeIntervalSeconds()) + .setCodeLength((long) secret.getCodeLength()) + .setSecretKey(secret.getSharedSecretKey()) + .setHashingAlgorithm(secret.getHashAlgorithm()) + .setEnrollmentCompletionDeadline(secret.getEnrollmentCompletionDeadline()) + .build()); + } else { + result.error( + FlutterFirebaseAuthPluginException.parserExceptionToFlutter( + task.getException())); + } + }); + } + + @Override + public void getAssertionForEnrollment( + @NonNull String secretKey, + @NonNull String oneTimePassword, + @NonNull GeneratedAndroidFirebaseAuth.Result result) { + final TotpSecret secret = multiFactorSecret.get(secretKey); + + assert secret != null; + TotpMultiFactorAssertion assertion = + TotpMultiFactorGenerator.getAssertionForEnrollment(secret, oneTimePassword); + String assertionId = UUID.randomUUID().toString(); + FlutterFirebaseMultiFactor.multiFactorAssertionMap.put(assertionId, assertion); + result.success(assertionId); + } + + @Override + public void getAssertionForSignIn( + @NonNull String enrollmentId, + @NonNull String oneTimePassword, + @NonNull GeneratedAndroidFirebaseAuth.Result result) { + TotpMultiFactorAssertion assertion = + TotpMultiFactorGenerator.getAssertionForSignIn(enrollmentId, oneTimePassword); + String assertionId = UUID.randomUUID().toString(); + FlutterFirebaseMultiFactor.multiFactorAssertionMap.put(assertionId, assertion); + result.success(assertionId); + } +} diff --git a/mih_ui/android/build/macos/SourcePackages/firebase_auth-6.5.4/android/src/main/java/io/flutter/plugins/firebase/auth/FlutterFirebaseTotpSecret.java b/mih_ui/android/build/macos/SourcePackages/firebase_auth-6.5.4/android/src/main/java/io/flutter/plugins/firebase/auth/FlutterFirebaseTotpSecret.java new file mode 100644 index 00000000..5b32f828 --- /dev/null +++ b/mih_ui/android/build/macos/SourcePackages/firebase_auth-6.5.4/android/src/main/java/io/flutter/plugins/firebase/auth/FlutterFirebaseTotpSecret.java @@ -0,0 +1,42 @@ +/* + * Copyright 2023, the Chromium project authors. Please see the AUTHORS file + * for details. All rights reserved. Use of this source code is governed by a + * BSD-style license that can be found in the LICENSE file. + */ + +package io.flutter.plugins.firebase.auth; + +import androidx.annotation.NonNull; +import androidx.annotation.Nullable; +import com.google.firebase.auth.TotpSecret; + +public class FlutterFirebaseTotpSecret + implements GeneratedAndroidFirebaseAuth.MultiFactorTotpSecretHostApi { + + @Override + public void generateQrCodeUrl( + @NonNull String secretKey, + @Nullable String accountName, + @Nullable String issuer, + @NonNull GeneratedAndroidFirebaseAuth.Result result) { + final TotpSecret secret = FlutterFirebaseTotpMultiFactor.multiFactorSecret.get(secretKey); + + assert secret != null; + if (accountName == null || issuer == null) { + result.success(secret.generateQrCodeUrl()); + return; + } + result.success(secret.generateQrCodeUrl(accountName, issuer)); + } + + @Override + public void openInOtpApp( + @NonNull String secretKey, + @NonNull String qrCodeUrl, + @NonNull GeneratedAndroidFirebaseAuth.VoidResult result) { + final TotpSecret secret = FlutterFirebaseTotpMultiFactor.multiFactorSecret.get(secretKey); + assert secret != null; + secret.openInOtpApp(qrCodeUrl); + result.success(); + } +} diff --git a/mih_ui/android/build/macos/SourcePackages/firebase_auth-6.5.4/android/src/main/java/io/flutter/plugins/firebase/auth/GeneratedAndroidFirebaseAuth.java b/mih_ui/android/build/macos/SourcePackages/firebase_auth-6.5.4/android/src/main/java/io/flutter/plugins/firebase/auth/GeneratedAndroidFirebaseAuth.java new file mode 100644 index 00000000..5aaa168b --- /dev/null +++ b/mih_ui/android/build/macos/SourcePackages/firebase_auth-6.5.4/android/src/main/java/io/flutter/plugins/firebase/auth/GeneratedAndroidFirebaseAuth.java @@ -0,0 +1,5308 @@ +// Copyright 2023, the Chromium project authors. Please see the AUTHORS file +// for details. All rights reserved. Use of this source code is governed by a +// BSD-style license that can be found in the LICENSE file. +// Autogenerated from Pigeon (v26.3.4), do not edit directly. +// See also: https://pub.dev/packages/pigeon + +package io.flutter.plugins.firebase.auth; + +import static java.lang.annotation.ElementType.METHOD; +import static java.lang.annotation.RetentionPolicy.CLASS; + +import android.util.Log; +import androidx.annotation.NonNull; +import androidx.annotation.Nullable; +import io.flutter.plugin.common.BasicMessageChannel; +import io.flutter.plugin.common.BinaryMessenger; +import io.flutter.plugin.common.MessageCodec; +import io.flutter.plugin.common.StandardMessageCodec; +import java.io.ByteArrayOutputStream; +import java.lang.annotation.Retention; +import java.lang.annotation.Target; +import java.nio.ByteBuffer; +import java.util.ArrayList; +import java.util.Arrays; +import java.util.List; +import java.util.Map; + +/** Generated class from Pigeon. */ +@SuppressWarnings({"unused", "unchecked", "CodeBlock2Expr", "RedundantSuppression", "serial"}) +public class GeneratedAndroidFirebaseAuth { + static boolean pigeonDoubleEquals(double a, double b) { + // Normalize -0.0 to 0.0 and handle NaN equality. + return (a == 0.0 ? 0.0 : a) == (b == 0.0 ? 0.0 : b) || (Double.isNaN(a) && Double.isNaN(b)); + } + + static boolean pigeonFloatEquals(float a, float b) { + // Normalize -0.0 to 0.0 and handle NaN equality. + return (a == 0.0f ? 0.0f : a) == (b == 0.0f ? 0.0f : b) || (Float.isNaN(a) && Float.isNaN(b)); + } + + static int pigeonDoubleHashCode(double d) { + // Normalize -0.0 to 0.0 and handle NaN to ensure consistent hash codes. + if (d == 0.0) { + d = 0.0; + } + long bits = Double.doubleToLongBits(d); + return (int) (bits ^ (bits >>> 32)); + } + + static int pigeonFloatHashCode(float f) { + // Normalize -0.0 to 0.0 and handle NaN to ensure consistent hash codes. + if (f == 0.0f) { + f = 0.0f; + } + return Float.floatToIntBits(f); + } + + static boolean pigeonDeepEquals(Object a, Object b) { + if (a == b) { + return true; + } + if (a == null || b == null) { + return false; + } + if (a instanceof byte[] && b instanceof byte[]) { + return Arrays.equals((byte[]) a, (byte[]) b); + } + if (a instanceof int[] && b instanceof int[]) { + return Arrays.equals((int[]) a, (int[]) b); + } + if (a instanceof long[] && b instanceof long[]) { + return Arrays.equals((long[]) a, (long[]) b); + } + if (a instanceof double[] && b instanceof double[]) { + double[] da = (double[]) a; + double[] db = (double[]) b; + if (da.length != db.length) { + return false; + } + for (int i = 0; i < da.length; i++) { + if (!pigeonDoubleEquals(da[i], db[i])) { + return false; + } + } + return true; + } + if (a instanceof List && b instanceof List) { + List listA = (List) a; + List listB = (List) b; + if (listA.size() != listB.size()) { + return false; + } + for (int i = 0; i < listA.size(); i++) { + if (!pigeonDeepEquals(listA.get(i), listB.get(i))) { + return false; + } + } + return true; + } + if (a instanceof Map && b instanceof Map) { + Map mapA = (Map) a; + Map mapB = (Map) b; + if (mapA.size() != mapB.size()) { + return false; + } + for (Map.Entry entryA : mapA.entrySet()) { + Object keyA = entryA.getKey(); + Object valueA = entryA.getValue(); + boolean found = false; + for (Map.Entry entryB : mapB.entrySet()) { + Object keyB = entryB.getKey(); + if (pigeonDeepEquals(keyA, keyB)) { + Object valueB = entryB.getValue(); + if (pigeonDeepEquals(valueA, valueB)) { + found = true; + break; + } else { + return false; + } + } + } + if (!found) { + return false; + } + } + return true; + } + if (a instanceof Double && b instanceof Double) { + return pigeonDoubleEquals((double) a, (double) b); + } + if (a instanceof Float && b instanceof Float) { + return pigeonFloatEquals((float) a, (float) b); + } + return a.equals(b); + } + + static int pigeonDeepHashCode(Object value) { + if (value == null) { + return 0; + } + if (value instanceof byte[]) { + return Arrays.hashCode((byte[]) value); + } + if (value instanceof int[]) { + return Arrays.hashCode((int[]) value); + } + if (value instanceof long[]) { + return Arrays.hashCode((long[]) value); + } + if (value instanceof double[]) { + double[] da = (double[]) value; + int result = 1; + for (double d : da) { + result = 31 * result + pigeonDoubleHashCode(d); + } + return result; + } + if (value instanceof List) { + int result = 1; + for (Object item : (List) value) { + result = 31 * result + pigeonDeepHashCode(item); + } + return result; + } + if (value instanceof Map) { + int result = 0; + for (Map.Entry entry : ((Map) value).entrySet()) { + result += + ((pigeonDeepHashCode(entry.getKey()) * 31) ^ pigeonDeepHashCode(entry.getValue())); + } + return result; + } + if (value instanceof Object[]) { + int result = 1; + for (Object item : (Object[]) value) { + result = 31 * result + pigeonDeepHashCode(item); + } + return result; + } + if (value instanceof Double) { + return pigeonDoubleHashCode((double) value); + } + if (value instanceof Float) { + return pigeonFloatHashCode((float) value); + } + return value.hashCode(); + } + + /** Error class for passing custom error details to Flutter via a thrown PlatformException. */ + public static class FlutterError extends RuntimeException { + + /** The error code. */ + public final String code; + + /** The error details. Must be a datatype supported by the api codec. */ + public final Object details; + + public FlutterError(@NonNull String code, @Nullable String message, @Nullable Object details) { + super(message); + this.code = code; + this.details = details; + } + } + + @NonNull + protected static ArrayList wrapError(@NonNull Throwable exception) { + ArrayList errorList = new ArrayList<>(3); + if (exception instanceof FlutterError) { + FlutterError error = (FlutterError) exception; + errorList.add(error.code); + errorList.add(error.getMessage()); + errorList.add(error.details); + } else { + errorList.add(exception.toString()); + errorList.add(exception.getClass().getSimpleName()); + errorList.add( + "Cause: " + exception.getCause() + ", Stacktrace: " + Log.getStackTraceString(exception)); + } + return errorList; + } + + @Target(METHOD) + @Retention(CLASS) + @interface CanIgnoreReturnValue {} + + /** The type of operation that generated the action code from calling [checkActionCode]. */ + public enum ActionCodeInfoOperation { + /** Unknown operation. */ + UNKNOWN(0), + /** Password reset code generated via [sendPasswordResetEmail]. */ + PASSWORD_RESET(1), + /** Email verification code generated via [User.sendEmailVerification]. */ + VERIFY_EMAIL(2), + /** Email change revocation code generated via [User.updateEmail]. */ + RECOVER_EMAIL(3), + /** Email sign in code generated via [sendSignInLinkToEmail]. */ + EMAIL_SIGN_IN(4), + /** Verify and change email code generated via [User.verifyBeforeUpdateEmail]. */ + VERIFY_AND_CHANGE_EMAIL(5), + /** Action code for reverting second factor addition. */ + REVERT_SECOND_FACTOR_ADDITION(6); + + final int index; + + ActionCodeInfoOperation(final int index) { + this.index = index; + } + } + + /** Generated class from Pigeon that represents data sent in messages. */ + public static final class InternalMultiFactorSession { + private @NonNull String id; + + public @NonNull String getId() { + return id; + } + + public void setId(@NonNull String setterArg) { + if (setterArg == null) { + throw new IllegalStateException("Nonnull field \"id\" is null."); + } + this.id = setterArg; + } + + /** Constructor is non-public to enforce null safety; use Builder. */ + InternalMultiFactorSession() {} + + @Override + public boolean equals(Object o) { + if (this == o) { + return true; + } + if (o == null || getClass() != o.getClass()) { + return false; + } + InternalMultiFactorSession that = (InternalMultiFactorSession) o; + return pigeonDeepEquals(id, that.id); + } + + @Override + public int hashCode() { + Object[] fields = new Object[] {getClass(), id}; + return pigeonDeepHashCode(fields); + } + + public static final class Builder { + + private @Nullable String id; + + @CanIgnoreReturnValue + public @NonNull Builder setId(@NonNull String setterArg) { + this.id = setterArg; + return this; + } + + public @NonNull InternalMultiFactorSession build() { + InternalMultiFactorSession pigeonReturn = new InternalMultiFactorSession(); + pigeonReturn.setId(id); + return pigeonReturn; + } + } + + @NonNull + public ArrayList toList() { + ArrayList toListResult = new ArrayList<>(1); + toListResult.add(id); + return toListResult; + } + + static @NonNull InternalMultiFactorSession fromList(@NonNull ArrayList pigeonVar_list) { + InternalMultiFactorSession pigeonResult = new InternalMultiFactorSession(); + Object id = pigeonVar_list.get(0); + pigeonResult.setId((String) id); + return pigeonResult; + } + } + + /** Generated class from Pigeon that represents data sent in messages. */ + public static final class InternalPhoneMultiFactorAssertion { + private @NonNull String verificationId; + + public @NonNull String getVerificationId() { + return verificationId; + } + + public void setVerificationId(@NonNull String setterArg) { + if (setterArg == null) { + throw new IllegalStateException("Nonnull field \"verificationId\" is null."); + } + this.verificationId = setterArg; + } + + private @NonNull String verificationCode; + + public @NonNull String getVerificationCode() { + return verificationCode; + } + + public void setVerificationCode(@NonNull String setterArg) { + if (setterArg == null) { + throw new IllegalStateException("Nonnull field \"verificationCode\" is null."); + } + this.verificationCode = setterArg; + } + + /** Constructor is non-public to enforce null safety; use Builder. */ + InternalPhoneMultiFactorAssertion() {} + + @Override + public boolean equals(Object o) { + if (this == o) { + return true; + } + if (o == null || getClass() != o.getClass()) { + return false; + } + InternalPhoneMultiFactorAssertion that = (InternalPhoneMultiFactorAssertion) o; + return pigeonDeepEquals(verificationId, that.verificationId) + && pigeonDeepEquals(verificationCode, that.verificationCode); + } + + @Override + public int hashCode() { + Object[] fields = new Object[] {getClass(), verificationId, verificationCode}; + return pigeonDeepHashCode(fields); + } + + public static final class Builder { + + private @Nullable String verificationId; + + @CanIgnoreReturnValue + public @NonNull Builder setVerificationId(@NonNull String setterArg) { + this.verificationId = setterArg; + return this; + } + + private @Nullable String verificationCode; + + @CanIgnoreReturnValue + public @NonNull Builder setVerificationCode(@NonNull String setterArg) { + this.verificationCode = setterArg; + return this; + } + + public @NonNull InternalPhoneMultiFactorAssertion build() { + InternalPhoneMultiFactorAssertion pigeonReturn = new InternalPhoneMultiFactorAssertion(); + pigeonReturn.setVerificationId(verificationId); + pigeonReturn.setVerificationCode(verificationCode); + return pigeonReturn; + } + } + + @NonNull + public ArrayList toList() { + ArrayList toListResult = new ArrayList<>(2); + toListResult.add(verificationId); + toListResult.add(verificationCode); + return toListResult; + } + + static @NonNull InternalPhoneMultiFactorAssertion fromList( + @NonNull ArrayList pigeonVar_list) { + InternalPhoneMultiFactorAssertion pigeonResult = new InternalPhoneMultiFactorAssertion(); + Object verificationId = pigeonVar_list.get(0); + pigeonResult.setVerificationId((String) verificationId); + Object verificationCode = pigeonVar_list.get(1); + pigeonResult.setVerificationCode((String) verificationCode); + return pigeonResult; + } + } + + /** Generated class from Pigeon that represents data sent in messages. */ + public static final class InternalMultiFactorInfo { + private @Nullable String displayName; + + public @Nullable String getDisplayName() { + return displayName; + } + + public void setDisplayName(@Nullable String setterArg) { + this.displayName = setterArg; + } + + private @NonNull Double enrollmentTimestamp; + + public @NonNull Double getEnrollmentTimestamp() { + return enrollmentTimestamp; + } + + public void setEnrollmentTimestamp(@NonNull Double setterArg) { + if (setterArg == null) { + throw new IllegalStateException("Nonnull field \"enrollmentTimestamp\" is null."); + } + this.enrollmentTimestamp = setterArg; + } + + private @Nullable String factorId; + + public @Nullable String getFactorId() { + return factorId; + } + + public void setFactorId(@Nullable String setterArg) { + this.factorId = setterArg; + } + + private @NonNull String uid; + + public @NonNull String getUid() { + return uid; + } + + public void setUid(@NonNull String setterArg) { + if (setterArg == null) { + throw new IllegalStateException("Nonnull field \"uid\" is null."); + } + this.uid = setterArg; + } + + private @Nullable String phoneNumber; + + public @Nullable String getPhoneNumber() { + return phoneNumber; + } + + public void setPhoneNumber(@Nullable String setterArg) { + this.phoneNumber = setterArg; + } + + /** Constructor is non-public to enforce null safety; use Builder. */ + InternalMultiFactorInfo() {} + + @Override + public boolean equals(Object o) { + if (this == o) { + return true; + } + if (o == null || getClass() != o.getClass()) { + return false; + } + InternalMultiFactorInfo that = (InternalMultiFactorInfo) o; + return pigeonDeepEquals(displayName, that.displayName) + && pigeonDeepEquals(enrollmentTimestamp, that.enrollmentTimestamp) + && pigeonDeepEquals(factorId, that.factorId) + && pigeonDeepEquals(uid, that.uid) + && pigeonDeepEquals(phoneNumber, that.phoneNumber); + } + + @Override + public int hashCode() { + Object[] fields = + new Object[] {getClass(), displayName, enrollmentTimestamp, factorId, uid, phoneNumber}; + return pigeonDeepHashCode(fields); + } + + public static final class Builder { + + private @Nullable String displayName; + + @CanIgnoreReturnValue + public @NonNull Builder setDisplayName(@Nullable String setterArg) { + this.displayName = setterArg; + return this; + } + + private @Nullable Double enrollmentTimestamp; + + @CanIgnoreReturnValue + public @NonNull Builder setEnrollmentTimestamp(@NonNull Double setterArg) { + this.enrollmentTimestamp = setterArg; + return this; + } + + private @Nullable String factorId; + + @CanIgnoreReturnValue + public @NonNull Builder setFactorId(@Nullable String setterArg) { + this.factorId = setterArg; + return this; + } + + private @Nullable String uid; + + @CanIgnoreReturnValue + public @NonNull Builder setUid(@NonNull String setterArg) { + this.uid = setterArg; + return this; + } + + private @Nullable String phoneNumber; + + @CanIgnoreReturnValue + public @NonNull Builder setPhoneNumber(@Nullable String setterArg) { + this.phoneNumber = setterArg; + return this; + } + + public @NonNull InternalMultiFactorInfo build() { + InternalMultiFactorInfo pigeonReturn = new InternalMultiFactorInfo(); + pigeonReturn.setDisplayName(displayName); + pigeonReturn.setEnrollmentTimestamp(enrollmentTimestamp); + pigeonReturn.setFactorId(factorId); + pigeonReturn.setUid(uid); + pigeonReturn.setPhoneNumber(phoneNumber); + return pigeonReturn; + } + } + + @NonNull + public ArrayList toList() { + ArrayList toListResult = new ArrayList<>(5); + toListResult.add(displayName); + toListResult.add(enrollmentTimestamp); + toListResult.add(factorId); + toListResult.add(uid); + toListResult.add(phoneNumber); + return toListResult; + } + + static @NonNull InternalMultiFactorInfo fromList(@NonNull ArrayList pigeonVar_list) { + InternalMultiFactorInfo pigeonResult = new InternalMultiFactorInfo(); + Object displayName = pigeonVar_list.get(0); + pigeonResult.setDisplayName((String) displayName); + Object enrollmentTimestamp = pigeonVar_list.get(1); + pigeonResult.setEnrollmentTimestamp((Double) enrollmentTimestamp); + Object factorId = pigeonVar_list.get(2); + pigeonResult.setFactorId((String) factorId); + Object uid = pigeonVar_list.get(3); + pigeonResult.setUid((String) uid); + Object phoneNumber = pigeonVar_list.get(4); + pigeonResult.setPhoneNumber((String) phoneNumber); + return pigeonResult; + } + } + + /** Generated class from Pigeon that represents data sent in messages. */ + public static final class AuthPigeonFirebaseApp { + private @NonNull String appName; + + public @NonNull String getAppName() { + return appName; + } + + public void setAppName(@NonNull String setterArg) { + if (setterArg == null) { + throw new IllegalStateException("Nonnull field \"appName\" is null."); + } + this.appName = setterArg; + } + + private @Nullable String tenantId; + + public @Nullable String getTenantId() { + return tenantId; + } + + public void setTenantId(@Nullable String setterArg) { + this.tenantId = setterArg; + } + + private @Nullable String customAuthDomain; + + public @Nullable String getCustomAuthDomain() { + return customAuthDomain; + } + + public void setCustomAuthDomain(@Nullable String setterArg) { + this.customAuthDomain = setterArg; + } + + /** Constructor is non-public to enforce null safety; use Builder. */ + AuthPigeonFirebaseApp() {} + + @Override + public boolean equals(Object o) { + if (this == o) { + return true; + } + if (o == null || getClass() != o.getClass()) { + return false; + } + AuthPigeonFirebaseApp that = (AuthPigeonFirebaseApp) o; + return pigeonDeepEquals(appName, that.appName) + && pigeonDeepEquals(tenantId, that.tenantId) + && pigeonDeepEquals(customAuthDomain, that.customAuthDomain); + } + + @Override + public int hashCode() { + Object[] fields = new Object[] {getClass(), appName, tenantId, customAuthDomain}; + return pigeonDeepHashCode(fields); + } + + public static final class Builder { + + private @Nullable String appName; + + @CanIgnoreReturnValue + public @NonNull Builder setAppName(@NonNull String setterArg) { + this.appName = setterArg; + return this; + } + + private @Nullable String tenantId; + + @CanIgnoreReturnValue + public @NonNull Builder setTenantId(@Nullable String setterArg) { + this.tenantId = setterArg; + return this; + } + + private @Nullable String customAuthDomain; + + @CanIgnoreReturnValue + public @NonNull Builder setCustomAuthDomain(@Nullable String setterArg) { + this.customAuthDomain = setterArg; + return this; + } + + public @NonNull AuthPigeonFirebaseApp build() { + AuthPigeonFirebaseApp pigeonReturn = new AuthPigeonFirebaseApp(); + pigeonReturn.setAppName(appName); + pigeonReturn.setTenantId(tenantId); + pigeonReturn.setCustomAuthDomain(customAuthDomain); + return pigeonReturn; + } + } + + @NonNull + public ArrayList toList() { + ArrayList toListResult = new ArrayList<>(3); + toListResult.add(appName); + toListResult.add(tenantId); + toListResult.add(customAuthDomain); + return toListResult; + } + + static @NonNull AuthPigeonFirebaseApp fromList(@NonNull ArrayList pigeonVar_list) { + AuthPigeonFirebaseApp pigeonResult = new AuthPigeonFirebaseApp(); + Object appName = pigeonVar_list.get(0); + pigeonResult.setAppName((String) appName); + Object tenantId = pigeonVar_list.get(1); + pigeonResult.setTenantId((String) tenantId); + Object customAuthDomain = pigeonVar_list.get(2); + pigeonResult.setCustomAuthDomain((String) customAuthDomain); + return pigeonResult; + } + } + + /** Generated class from Pigeon that represents data sent in messages. */ + public static final class InternalActionCodeInfoData { + private @Nullable String email; + + public @Nullable String getEmail() { + return email; + } + + public void setEmail(@Nullable String setterArg) { + this.email = setterArg; + } + + private @Nullable String previousEmail; + + public @Nullable String getPreviousEmail() { + return previousEmail; + } + + public void setPreviousEmail(@Nullable String setterArg) { + this.previousEmail = setterArg; + } + + @Override + public boolean equals(Object o) { + if (this == o) { + return true; + } + if (o == null || getClass() != o.getClass()) { + return false; + } + InternalActionCodeInfoData that = (InternalActionCodeInfoData) o; + return pigeonDeepEquals(email, that.email) + && pigeonDeepEquals(previousEmail, that.previousEmail); + } + + @Override + public int hashCode() { + Object[] fields = new Object[] {getClass(), email, previousEmail}; + return pigeonDeepHashCode(fields); + } + + public static final class Builder { + + private @Nullable String email; + + @CanIgnoreReturnValue + public @NonNull Builder setEmail(@Nullable String setterArg) { + this.email = setterArg; + return this; + } + + private @Nullable String previousEmail; + + @CanIgnoreReturnValue + public @NonNull Builder setPreviousEmail(@Nullable String setterArg) { + this.previousEmail = setterArg; + return this; + } + + public @NonNull InternalActionCodeInfoData build() { + InternalActionCodeInfoData pigeonReturn = new InternalActionCodeInfoData(); + pigeonReturn.setEmail(email); + pigeonReturn.setPreviousEmail(previousEmail); + return pigeonReturn; + } + } + + @NonNull + public ArrayList toList() { + ArrayList toListResult = new ArrayList<>(2); + toListResult.add(email); + toListResult.add(previousEmail); + return toListResult; + } + + static @NonNull InternalActionCodeInfoData fromList(@NonNull ArrayList pigeonVar_list) { + InternalActionCodeInfoData pigeonResult = new InternalActionCodeInfoData(); + Object email = pigeonVar_list.get(0); + pigeonResult.setEmail((String) email); + Object previousEmail = pigeonVar_list.get(1); + pigeonResult.setPreviousEmail((String) previousEmail); + return pigeonResult; + } + } + + /** Generated class from Pigeon that represents data sent in messages. */ + public static final class InternalActionCodeInfo { + private @NonNull ActionCodeInfoOperation operation; + + public @NonNull ActionCodeInfoOperation getOperation() { + return operation; + } + + public void setOperation(@NonNull ActionCodeInfoOperation setterArg) { + if (setterArg == null) { + throw new IllegalStateException("Nonnull field \"operation\" is null."); + } + this.operation = setterArg; + } + + private @NonNull InternalActionCodeInfoData data; + + public @NonNull InternalActionCodeInfoData getData() { + return data; + } + + public void setData(@NonNull InternalActionCodeInfoData setterArg) { + if (setterArg == null) { + throw new IllegalStateException("Nonnull field \"data\" is null."); + } + this.data = setterArg; + } + + /** Constructor is non-public to enforce null safety; use Builder. */ + InternalActionCodeInfo() {} + + @Override + public boolean equals(Object o) { + if (this == o) { + return true; + } + if (o == null || getClass() != o.getClass()) { + return false; + } + InternalActionCodeInfo that = (InternalActionCodeInfo) o; + return pigeonDeepEquals(operation, that.operation) && pigeonDeepEquals(data, that.data); + } + + @Override + public int hashCode() { + Object[] fields = new Object[] {getClass(), operation, data}; + return pigeonDeepHashCode(fields); + } + + public static final class Builder { + + private @Nullable ActionCodeInfoOperation operation; + + @CanIgnoreReturnValue + public @NonNull Builder setOperation(@NonNull ActionCodeInfoOperation setterArg) { + this.operation = setterArg; + return this; + } + + private @Nullable InternalActionCodeInfoData data; + + @CanIgnoreReturnValue + public @NonNull Builder setData(@NonNull InternalActionCodeInfoData setterArg) { + this.data = setterArg; + return this; + } + + public @NonNull InternalActionCodeInfo build() { + InternalActionCodeInfo pigeonReturn = new InternalActionCodeInfo(); + pigeonReturn.setOperation(operation); + pigeonReturn.setData(data); + return pigeonReturn; + } + } + + @NonNull + public ArrayList toList() { + ArrayList toListResult = new ArrayList<>(2); + toListResult.add(operation); + toListResult.add(data); + return toListResult; + } + + static @NonNull InternalActionCodeInfo fromList(@NonNull ArrayList pigeonVar_list) { + InternalActionCodeInfo pigeonResult = new InternalActionCodeInfo(); + Object operation = pigeonVar_list.get(0); + pigeonResult.setOperation((ActionCodeInfoOperation) operation); + Object data = pigeonVar_list.get(1); + pigeonResult.setData((InternalActionCodeInfoData) data); + return pigeonResult; + } + } + + /** Generated class from Pigeon that represents data sent in messages. */ + public static final class InternalAdditionalUserInfo { + private @NonNull Boolean isNewUser; + + public @NonNull Boolean getIsNewUser() { + return isNewUser; + } + + public void setIsNewUser(@NonNull Boolean setterArg) { + if (setterArg == null) { + throw new IllegalStateException("Nonnull field \"isNewUser\" is null."); + } + this.isNewUser = setterArg; + } + + private @Nullable String providerId; + + public @Nullable String getProviderId() { + return providerId; + } + + public void setProviderId(@Nullable String setterArg) { + this.providerId = setterArg; + } + + private @Nullable String username; + + public @Nullable String getUsername() { + return username; + } + + public void setUsername(@Nullable String setterArg) { + this.username = setterArg; + } + + private @Nullable String authorizationCode; + + public @Nullable String getAuthorizationCode() { + return authorizationCode; + } + + public void setAuthorizationCode(@Nullable String setterArg) { + this.authorizationCode = setterArg; + } + + private @Nullable Map profile; + + public @Nullable Map getProfile() { + return profile; + } + + public void setProfile(@Nullable Map setterArg) { + this.profile = setterArg; + } + + /** Constructor is non-public to enforce null safety; use Builder. */ + InternalAdditionalUserInfo() {} + + @Override + public boolean equals(Object o) { + if (this == o) { + return true; + } + if (o == null || getClass() != o.getClass()) { + return false; + } + InternalAdditionalUserInfo that = (InternalAdditionalUserInfo) o; + return pigeonDeepEquals(isNewUser, that.isNewUser) + && pigeonDeepEquals(providerId, that.providerId) + && pigeonDeepEquals(username, that.username) + && pigeonDeepEquals(authorizationCode, that.authorizationCode) + && pigeonDeepEquals(profile, that.profile); + } + + @Override + public int hashCode() { + Object[] fields = + new Object[] {getClass(), isNewUser, providerId, username, authorizationCode, profile}; + return pigeonDeepHashCode(fields); + } + + public static final class Builder { + + private @Nullable Boolean isNewUser; + + @CanIgnoreReturnValue + public @NonNull Builder setIsNewUser(@NonNull Boolean setterArg) { + this.isNewUser = setterArg; + return this; + } + + private @Nullable String providerId; + + @CanIgnoreReturnValue + public @NonNull Builder setProviderId(@Nullable String setterArg) { + this.providerId = setterArg; + return this; + } + + private @Nullable String username; + + @CanIgnoreReturnValue + public @NonNull Builder setUsername(@Nullable String setterArg) { + this.username = setterArg; + return this; + } + + private @Nullable String authorizationCode; + + @CanIgnoreReturnValue + public @NonNull Builder setAuthorizationCode(@Nullable String setterArg) { + this.authorizationCode = setterArg; + return this; + } + + private @Nullable Map profile; + + @CanIgnoreReturnValue + public @NonNull Builder setProfile(@Nullable Map setterArg) { + this.profile = setterArg; + return this; + } + + public @NonNull InternalAdditionalUserInfo build() { + InternalAdditionalUserInfo pigeonReturn = new InternalAdditionalUserInfo(); + pigeonReturn.setIsNewUser(isNewUser); + pigeonReturn.setProviderId(providerId); + pigeonReturn.setUsername(username); + pigeonReturn.setAuthorizationCode(authorizationCode); + pigeonReturn.setProfile(profile); + return pigeonReturn; + } + } + + @NonNull + public ArrayList toList() { + ArrayList toListResult = new ArrayList<>(5); + toListResult.add(isNewUser); + toListResult.add(providerId); + toListResult.add(username); + toListResult.add(authorizationCode); + toListResult.add(profile); + return toListResult; + } + + static @NonNull InternalAdditionalUserInfo fromList(@NonNull ArrayList pigeonVar_list) { + InternalAdditionalUserInfo pigeonResult = new InternalAdditionalUserInfo(); + Object isNewUser = pigeonVar_list.get(0); + pigeonResult.setIsNewUser((Boolean) isNewUser); + Object providerId = pigeonVar_list.get(1); + pigeonResult.setProviderId((String) providerId); + Object username = pigeonVar_list.get(2); + pigeonResult.setUsername((String) username); + Object authorizationCode = pigeonVar_list.get(3); + pigeonResult.setAuthorizationCode((String) authorizationCode); + Object profile = pigeonVar_list.get(4); + pigeonResult.setProfile((Map) profile); + return pigeonResult; + } + } + + /** Generated class from Pigeon that represents data sent in messages. */ + public static final class InternalAuthCredential { + private @NonNull String providerId; + + public @NonNull String getProviderId() { + return providerId; + } + + public void setProviderId(@NonNull String setterArg) { + if (setterArg == null) { + throw new IllegalStateException("Nonnull field \"providerId\" is null."); + } + this.providerId = setterArg; + } + + private @NonNull String signInMethod; + + public @NonNull String getSignInMethod() { + return signInMethod; + } + + public void setSignInMethod(@NonNull String setterArg) { + if (setterArg == null) { + throw new IllegalStateException("Nonnull field \"signInMethod\" is null."); + } + this.signInMethod = setterArg; + } + + private @NonNull Long nativeId; + + public @NonNull Long getNativeId() { + return nativeId; + } + + public void setNativeId(@NonNull Long setterArg) { + if (setterArg == null) { + throw new IllegalStateException("Nonnull field \"nativeId\" is null."); + } + this.nativeId = setterArg; + } + + private @Nullable String accessToken; + + public @Nullable String getAccessToken() { + return accessToken; + } + + public void setAccessToken(@Nullable String setterArg) { + this.accessToken = setterArg; + } + + /** Constructor is non-public to enforce null safety; use Builder. */ + InternalAuthCredential() {} + + @Override + public boolean equals(Object o) { + if (this == o) { + return true; + } + if (o == null || getClass() != o.getClass()) { + return false; + } + InternalAuthCredential that = (InternalAuthCredential) o; + return pigeonDeepEquals(providerId, that.providerId) + && pigeonDeepEquals(signInMethod, that.signInMethod) + && pigeonDeepEquals(nativeId, that.nativeId) + && pigeonDeepEquals(accessToken, that.accessToken); + } + + @Override + public int hashCode() { + Object[] fields = new Object[] {getClass(), providerId, signInMethod, nativeId, accessToken}; + return pigeonDeepHashCode(fields); + } + + public static final class Builder { + + private @Nullable String providerId; + + @CanIgnoreReturnValue + public @NonNull Builder setProviderId(@NonNull String setterArg) { + this.providerId = setterArg; + return this; + } + + private @Nullable String signInMethod; + + @CanIgnoreReturnValue + public @NonNull Builder setSignInMethod(@NonNull String setterArg) { + this.signInMethod = setterArg; + return this; + } + + private @Nullable Long nativeId; + + @CanIgnoreReturnValue + public @NonNull Builder setNativeId(@NonNull Long setterArg) { + this.nativeId = setterArg; + return this; + } + + private @Nullable String accessToken; + + @CanIgnoreReturnValue + public @NonNull Builder setAccessToken(@Nullable String setterArg) { + this.accessToken = setterArg; + return this; + } + + public @NonNull InternalAuthCredential build() { + InternalAuthCredential pigeonReturn = new InternalAuthCredential(); + pigeonReturn.setProviderId(providerId); + pigeonReturn.setSignInMethod(signInMethod); + pigeonReturn.setNativeId(nativeId); + pigeonReturn.setAccessToken(accessToken); + return pigeonReturn; + } + } + + @NonNull + public ArrayList toList() { + ArrayList toListResult = new ArrayList<>(4); + toListResult.add(providerId); + toListResult.add(signInMethod); + toListResult.add(nativeId); + toListResult.add(accessToken); + return toListResult; + } + + static @NonNull InternalAuthCredential fromList(@NonNull ArrayList pigeonVar_list) { + InternalAuthCredential pigeonResult = new InternalAuthCredential(); + Object providerId = pigeonVar_list.get(0); + pigeonResult.setProviderId((String) providerId); + Object signInMethod = pigeonVar_list.get(1); + pigeonResult.setSignInMethod((String) signInMethod); + Object nativeId = pigeonVar_list.get(2); + pigeonResult.setNativeId((Long) nativeId); + Object accessToken = pigeonVar_list.get(3); + pigeonResult.setAccessToken((String) accessToken); + return pigeonResult; + } + } + + /** Generated class from Pigeon that represents data sent in messages. */ + public static final class InternalUserInfo { + private @NonNull String uid; + + public @NonNull String getUid() { + return uid; + } + + public void setUid(@NonNull String setterArg) { + if (setterArg == null) { + throw new IllegalStateException("Nonnull field \"uid\" is null."); + } + this.uid = setterArg; + } + + private @Nullable String email; + + public @Nullable String getEmail() { + return email; + } + + public void setEmail(@Nullable String setterArg) { + this.email = setterArg; + } + + private @Nullable String displayName; + + public @Nullable String getDisplayName() { + return displayName; + } + + public void setDisplayName(@Nullable String setterArg) { + this.displayName = setterArg; + } + + private @Nullable String photoUrl; + + public @Nullable String getPhotoUrl() { + return photoUrl; + } + + public void setPhotoUrl(@Nullable String setterArg) { + this.photoUrl = setterArg; + } + + private @Nullable String phoneNumber; + + public @Nullable String getPhoneNumber() { + return phoneNumber; + } + + public void setPhoneNumber(@Nullable String setterArg) { + this.phoneNumber = setterArg; + } + + private @NonNull Boolean isAnonymous; + + public @NonNull Boolean getIsAnonymous() { + return isAnonymous; + } + + public void setIsAnonymous(@NonNull Boolean setterArg) { + if (setterArg == null) { + throw new IllegalStateException("Nonnull field \"isAnonymous\" is null."); + } + this.isAnonymous = setterArg; + } + + private @NonNull Boolean isEmailVerified; + + public @NonNull Boolean getIsEmailVerified() { + return isEmailVerified; + } + + public void setIsEmailVerified(@NonNull Boolean setterArg) { + if (setterArg == null) { + throw new IllegalStateException("Nonnull field \"isEmailVerified\" is null."); + } + this.isEmailVerified = setterArg; + } + + private @Nullable String providerId; + + public @Nullable String getProviderId() { + return providerId; + } + + public void setProviderId(@Nullable String setterArg) { + this.providerId = setterArg; + } + + private @Nullable String tenantId; + + public @Nullable String getTenantId() { + return tenantId; + } + + public void setTenantId(@Nullable String setterArg) { + this.tenantId = setterArg; + } + + private @Nullable String refreshToken; + + public @Nullable String getRefreshToken() { + return refreshToken; + } + + public void setRefreshToken(@Nullable String setterArg) { + this.refreshToken = setterArg; + } + + private @Nullable Long creationTimestamp; + + public @Nullable Long getCreationTimestamp() { + return creationTimestamp; + } + + public void setCreationTimestamp(@Nullable Long setterArg) { + this.creationTimestamp = setterArg; + } + + private @Nullable Long lastSignInTimestamp; + + public @Nullable Long getLastSignInTimestamp() { + return lastSignInTimestamp; + } + + public void setLastSignInTimestamp(@Nullable Long setterArg) { + this.lastSignInTimestamp = setterArg; + } + + /** Constructor is non-public to enforce null safety; use Builder. */ + InternalUserInfo() {} + + @Override + public boolean equals(Object o) { + if (this == o) { + return true; + } + if (o == null || getClass() != o.getClass()) { + return false; + } + InternalUserInfo that = (InternalUserInfo) o; + return pigeonDeepEquals(uid, that.uid) + && pigeonDeepEquals(email, that.email) + && pigeonDeepEquals(displayName, that.displayName) + && pigeonDeepEquals(photoUrl, that.photoUrl) + && pigeonDeepEquals(phoneNumber, that.phoneNumber) + && pigeonDeepEquals(isAnonymous, that.isAnonymous) + && pigeonDeepEquals(isEmailVerified, that.isEmailVerified) + && pigeonDeepEquals(providerId, that.providerId) + && pigeonDeepEquals(tenantId, that.tenantId) + && pigeonDeepEquals(refreshToken, that.refreshToken) + && pigeonDeepEquals(creationTimestamp, that.creationTimestamp) + && pigeonDeepEquals(lastSignInTimestamp, that.lastSignInTimestamp); + } + + @Override + public int hashCode() { + Object[] fields = + new Object[] { + getClass(), + uid, + email, + displayName, + photoUrl, + phoneNumber, + isAnonymous, + isEmailVerified, + providerId, + tenantId, + refreshToken, + creationTimestamp, + lastSignInTimestamp + }; + return pigeonDeepHashCode(fields); + } + + public static final class Builder { + + private @Nullable String uid; + + @CanIgnoreReturnValue + public @NonNull Builder setUid(@NonNull String setterArg) { + this.uid = setterArg; + return this; + } + + private @Nullable String email; + + @CanIgnoreReturnValue + public @NonNull Builder setEmail(@Nullable String setterArg) { + this.email = setterArg; + return this; + } + + private @Nullable String displayName; + + @CanIgnoreReturnValue + public @NonNull Builder setDisplayName(@Nullable String setterArg) { + this.displayName = setterArg; + return this; + } + + private @Nullable String photoUrl; + + @CanIgnoreReturnValue + public @NonNull Builder setPhotoUrl(@Nullable String setterArg) { + this.photoUrl = setterArg; + return this; + } + + private @Nullable String phoneNumber; + + @CanIgnoreReturnValue + public @NonNull Builder setPhoneNumber(@Nullable String setterArg) { + this.phoneNumber = setterArg; + return this; + } + + private @Nullable Boolean isAnonymous; + + @CanIgnoreReturnValue + public @NonNull Builder setIsAnonymous(@NonNull Boolean setterArg) { + this.isAnonymous = setterArg; + return this; + } + + private @Nullable Boolean isEmailVerified; + + @CanIgnoreReturnValue + public @NonNull Builder setIsEmailVerified(@NonNull Boolean setterArg) { + this.isEmailVerified = setterArg; + return this; + } + + private @Nullable String providerId; + + @CanIgnoreReturnValue + public @NonNull Builder setProviderId(@Nullable String setterArg) { + this.providerId = setterArg; + return this; + } + + private @Nullable String tenantId; + + @CanIgnoreReturnValue + public @NonNull Builder setTenantId(@Nullable String setterArg) { + this.tenantId = setterArg; + return this; + } + + private @Nullable String refreshToken; + + @CanIgnoreReturnValue + public @NonNull Builder setRefreshToken(@Nullable String setterArg) { + this.refreshToken = setterArg; + return this; + } + + private @Nullable Long creationTimestamp; + + @CanIgnoreReturnValue + public @NonNull Builder setCreationTimestamp(@Nullable Long setterArg) { + this.creationTimestamp = setterArg; + return this; + } + + private @Nullable Long lastSignInTimestamp; + + @CanIgnoreReturnValue + public @NonNull Builder setLastSignInTimestamp(@Nullable Long setterArg) { + this.lastSignInTimestamp = setterArg; + return this; + } + + public @NonNull InternalUserInfo build() { + InternalUserInfo pigeonReturn = new InternalUserInfo(); + pigeonReturn.setUid(uid); + pigeonReturn.setEmail(email); + pigeonReturn.setDisplayName(displayName); + pigeonReturn.setPhotoUrl(photoUrl); + pigeonReturn.setPhoneNumber(phoneNumber); + pigeonReturn.setIsAnonymous(isAnonymous); + pigeonReturn.setIsEmailVerified(isEmailVerified); + pigeonReturn.setProviderId(providerId); + pigeonReturn.setTenantId(tenantId); + pigeonReturn.setRefreshToken(refreshToken); + pigeonReturn.setCreationTimestamp(creationTimestamp); + pigeonReturn.setLastSignInTimestamp(lastSignInTimestamp); + return pigeonReturn; + } + } + + @NonNull + public ArrayList toList() { + ArrayList toListResult = new ArrayList<>(12); + toListResult.add(uid); + toListResult.add(email); + toListResult.add(displayName); + toListResult.add(photoUrl); + toListResult.add(phoneNumber); + toListResult.add(isAnonymous); + toListResult.add(isEmailVerified); + toListResult.add(providerId); + toListResult.add(tenantId); + toListResult.add(refreshToken); + toListResult.add(creationTimestamp); + toListResult.add(lastSignInTimestamp); + return toListResult; + } + + static @NonNull InternalUserInfo fromList(@NonNull ArrayList pigeonVar_list) { + InternalUserInfo pigeonResult = new InternalUserInfo(); + Object uid = pigeonVar_list.get(0); + pigeonResult.setUid((String) uid); + Object email = pigeonVar_list.get(1); + pigeonResult.setEmail((String) email); + Object displayName = pigeonVar_list.get(2); + pigeonResult.setDisplayName((String) displayName); + Object photoUrl = pigeonVar_list.get(3); + pigeonResult.setPhotoUrl((String) photoUrl); + Object phoneNumber = pigeonVar_list.get(4); + pigeonResult.setPhoneNumber((String) phoneNumber); + Object isAnonymous = pigeonVar_list.get(5); + pigeonResult.setIsAnonymous((Boolean) isAnonymous); + Object isEmailVerified = pigeonVar_list.get(6); + pigeonResult.setIsEmailVerified((Boolean) isEmailVerified); + Object providerId = pigeonVar_list.get(7); + pigeonResult.setProviderId((String) providerId); + Object tenantId = pigeonVar_list.get(8); + pigeonResult.setTenantId((String) tenantId); + Object refreshToken = pigeonVar_list.get(9); + pigeonResult.setRefreshToken((String) refreshToken); + Object creationTimestamp = pigeonVar_list.get(10); + pigeonResult.setCreationTimestamp((Long) creationTimestamp); + Object lastSignInTimestamp = pigeonVar_list.get(11); + pigeonResult.setLastSignInTimestamp((Long) lastSignInTimestamp); + return pigeonResult; + } + } + + /** Generated class from Pigeon that represents data sent in messages. */ + public static final class InternalUserDetails { + private @NonNull InternalUserInfo userInfo; + + public @NonNull InternalUserInfo getUserInfo() { + return userInfo; + } + + public void setUserInfo(@NonNull InternalUserInfo setterArg) { + if (setterArg == null) { + throw new IllegalStateException("Nonnull field \"userInfo\" is null."); + } + this.userInfo = setterArg; + } + + private @NonNull List> providerData; + + public @NonNull List> getProviderData() { + return providerData; + } + + public void setProviderData(@NonNull List> setterArg) { + if (setterArg == null) { + throw new IllegalStateException("Nonnull field \"providerData\" is null."); + } + this.providerData = setterArg; + } + + /** Constructor is non-public to enforce null safety; use Builder. */ + InternalUserDetails() {} + + @Override + public boolean equals(Object o) { + if (this == o) { + return true; + } + if (o == null || getClass() != o.getClass()) { + return false; + } + InternalUserDetails that = (InternalUserDetails) o; + return pigeonDeepEquals(userInfo, that.userInfo) + && pigeonDeepEquals(providerData, that.providerData); + } + + @Override + public int hashCode() { + Object[] fields = new Object[] {getClass(), userInfo, providerData}; + return pigeonDeepHashCode(fields); + } + + public static final class Builder { + + private @Nullable InternalUserInfo userInfo; + + @CanIgnoreReturnValue + public @NonNull Builder setUserInfo(@NonNull InternalUserInfo setterArg) { + this.userInfo = setterArg; + return this; + } + + private @Nullable List> providerData; + + @CanIgnoreReturnValue + public @NonNull Builder setProviderData(@NonNull List> setterArg) { + this.providerData = setterArg; + return this; + } + + public @NonNull InternalUserDetails build() { + InternalUserDetails pigeonReturn = new InternalUserDetails(); + pigeonReturn.setUserInfo(userInfo); + pigeonReturn.setProviderData(providerData); + return pigeonReturn; + } + } + + @NonNull + public ArrayList toList() { + ArrayList toListResult = new ArrayList<>(2); + toListResult.add(userInfo); + toListResult.add(providerData); + return toListResult; + } + + static @NonNull InternalUserDetails fromList(@NonNull ArrayList pigeonVar_list) { + InternalUserDetails pigeonResult = new InternalUserDetails(); + Object userInfo = pigeonVar_list.get(0); + pigeonResult.setUserInfo((InternalUserInfo) userInfo); + Object providerData = pigeonVar_list.get(1); + pigeonResult.setProviderData((List>) providerData); + return pigeonResult; + } + } + + /** Generated class from Pigeon that represents data sent in messages. */ + public static final class InternalUserCredential { + private @Nullable InternalUserDetails user; + + public @Nullable InternalUserDetails getUser() { + return user; + } + + public void setUser(@Nullable InternalUserDetails setterArg) { + this.user = setterArg; + } + + private @Nullable InternalAdditionalUserInfo additionalUserInfo; + + public @Nullable InternalAdditionalUserInfo getAdditionalUserInfo() { + return additionalUserInfo; + } + + public void setAdditionalUserInfo(@Nullable InternalAdditionalUserInfo setterArg) { + this.additionalUserInfo = setterArg; + } + + private @Nullable InternalAuthCredential credential; + + public @Nullable InternalAuthCredential getCredential() { + return credential; + } + + public void setCredential(@Nullable InternalAuthCredential setterArg) { + this.credential = setterArg; + } + + @Override + public boolean equals(Object o) { + if (this == o) { + return true; + } + if (o == null || getClass() != o.getClass()) { + return false; + } + InternalUserCredential that = (InternalUserCredential) o; + return pigeonDeepEquals(user, that.user) + && pigeonDeepEquals(additionalUserInfo, that.additionalUserInfo) + && pigeonDeepEquals(credential, that.credential); + } + + @Override + public int hashCode() { + Object[] fields = new Object[] {getClass(), user, additionalUserInfo, credential}; + return pigeonDeepHashCode(fields); + } + + public static final class Builder { + + private @Nullable InternalUserDetails user; + + @CanIgnoreReturnValue + public @NonNull Builder setUser(@Nullable InternalUserDetails setterArg) { + this.user = setterArg; + return this; + } + + private @Nullable InternalAdditionalUserInfo additionalUserInfo; + + @CanIgnoreReturnValue + public @NonNull Builder setAdditionalUserInfo( + @Nullable InternalAdditionalUserInfo setterArg) { + this.additionalUserInfo = setterArg; + return this; + } + + private @Nullable InternalAuthCredential credential; + + @CanIgnoreReturnValue + public @NonNull Builder setCredential(@Nullable InternalAuthCredential setterArg) { + this.credential = setterArg; + return this; + } + + public @NonNull InternalUserCredential build() { + InternalUserCredential pigeonReturn = new InternalUserCredential(); + pigeonReturn.setUser(user); + pigeonReturn.setAdditionalUserInfo(additionalUserInfo); + pigeonReturn.setCredential(credential); + return pigeonReturn; + } + } + + @NonNull + public ArrayList toList() { + ArrayList toListResult = new ArrayList<>(3); + toListResult.add(user); + toListResult.add(additionalUserInfo); + toListResult.add(credential); + return toListResult; + } + + static @NonNull InternalUserCredential fromList(@NonNull ArrayList pigeonVar_list) { + InternalUserCredential pigeonResult = new InternalUserCredential(); + Object user = pigeonVar_list.get(0); + pigeonResult.setUser((InternalUserDetails) user); + Object additionalUserInfo = pigeonVar_list.get(1); + pigeonResult.setAdditionalUserInfo((InternalAdditionalUserInfo) additionalUserInfo); + Object credential = pigeonVar_list.get(2); + pigeonResult.setCredential((InternalAuthCredential) credential); + return pigeonResult; + } + } + + /** Generated class from Pigeon that represents data sent in messages. */ + public static final class InternalAuthCredentialInput { + private @NonNull String providerId; + + public @NonNull String getProviderId() { + return providerId; + } + + public void setProviderId(@NonNull String setterArg) { + if (setterArg == null) { + throw new IllegalStateException("Nonnull field \"providerId\" is null."); + } + this.providerId = setterArg; + } + + private @NonNull String signInMethod; + + public @NonNull String getSignInMethod() { + return signInMethod; + } + + public void setSignInMethod(@NonNull String setterArg) { + if (setterArg == null) { + throw new IllegalStateException("Nonnull field \"signInMethod\" is null."); + } + this.signInMethod = setterArg; + } + + private @Nullable String token; + + public @Nullable String getToken() { + return token; + } + + public void setToken(@Nullable String setterArg) { + this.token = setterArg; + } + + private @Nullable String accessToken; + + public @Nullable String getAccessToken() { + return accessToken; + } + + public void setAccessToken(@Nullable String setterArg) { + this.accessToken = setterArg; + } + + /** Constructor is non-public to enforce null safety; use Builder. */ + InternalAuthCredentialInput() {} + + @Override + public boolean equals(Object o) { + if (this == o) { + return true; + } + if (o == null || getClass() != o.getClass()) { + return false; + } + InternalAuthCredentialInput that = (InternalAuthCredentialInput) o; + return pigeonDeepEquals(providerId, that.providerId) + && pigeonDeepEquals(signInMethod, that.signInMethod) + && pigeonDeepEquals(token, that.token) + && pigeonDeepEquals(accessToken, that.accessToken); + } + + @Override + public int hashCode() { + Object[] fields = new Object[] {getClass(), providerId, signInMethod, token, accessToken}; + return pigeonDeepHashCode(fields); + } + + public static final class Builder { + + private @Nullable String providerId; + + @CanIgnoreReturnValue + public @NonNull Builder setProviderId(@NonNull String setterArg) { + this.providerId = setterArg; + return this; + } + + private @Nullable String signInMethod; + + @CanIgnoreReturnValue + public @NonNull Builder setSignInMethod(@NonNull String setterArg) { + this.signInMethod = setterArg; + return this; + } + + private @Nullable String token; + + @CanIgnoreReturnValue + public @NonNull Builder setToken(@Nullable String setterArg) { + this.token = setterArg; + return this; + } + + private @Nullable String accessToken; + + @CanIgnoreReturnValue + public @NonNull Builder setAccessToken(@Nullable String setterArg) { + this.accessToken = setterArg; + return this; + } + + public @NonNull InternalAuthCredentialInput build() { + InternalAuthCredentialInput pigeonReturn = new InternalAuthCredentialInput(); + pigeonReturn.setProviderId(providerId); + pigeonReturn.setSignInMethod(signInMethod); + pigeonReturn.setToken(token); + pigeonReturn.setAccessToken(accessToken); + return pigeonReturn; + } + } + + @NonNull + public ArrayList toList() { + ArrayList toListResult = new ArrayList<>(4); + toListResult.add(providerId); + toListResult.add(signInMethod); + toListResult.add(token); + toListResult.add(accessToken); + return toListResult; + } + + static @NonNull InternalAuthCredentialInput fromList( + @NonNull ArrayList pigeonVar_list) { + InternalAuthCredentialInput pigeonResult = new InternalAuthCredentialInput(); + Object providerId = pigeonVar_list.get(0); + pigeonResult.setProviderId((String) providerId); + Object signInMethod = pigeonVar_list.get(1); + pigeonResult.setSignInMethod((String) signInMethod); + Object token = pigeonVar_list.get(2); + pigeonResult.setToken((String) token); + Object accessToken = pigeonVar_list.get(3); + pigeonResult.setAccessToken((String) accessToken); + return pigeonResult; + } + } + + /** Generated class from Pigeon that represents data sent in messages. */ + public static final class InternalActionCodeSettings { + private @NonNull String url; + + public @NonNull String getUrl() { + return url; + } + + public void setUrl(@NonNull String setterArg) { + if (setterArg == null) { + throw new IllegalStateException("Nonnull field \"url\" is null."); + } + this.url = setterArg; + } + + private @Nullable String dynamicLinkDomain; + + public @Nullable String getDynamicLinkDomain() { + return dynamicLinkDomain; + } + + public void setDynamicLinkDomain(@Nullable String setterArg) { + this.dynamicLinkDomain = setterArg; + } + + private @NonNull Boolean handleCodeInApp; + + public @NonNull Boolean getHandleCodeInApp() { + return handleCodeInApp; + } + + public void setHandleCodeInApp(@NonNull Boolean setterArg) { + if (setterArg == null) { + throw new IllegalStateException("Nonnull field \"handleCodeInApp\" is null."); + } + this.handleCodeInApp = setterArg; + } + + private @Nullable String iOSBundleId; + + public @Nullable String getIOSBundleId() { + return iOSBundleId; + } + + public void setIOSBundleId(@Nullable String setterArg) { + this.iOSBundleId = setterArg; + } + + private @Nullable String androidPackageName; + + public @Nullable String getAndroidPackageName() { + return androidPackageName; + } + + public void setAndroidPackageName(@Nullable String setterArg) { + this.androidPackageName = setterArg; + } + + private @NonNull Boolean androidInstallApp; + + public @NonNull Boolean getAndroidInstallApp() { + return androidInstallApp; + } + + public void setAndroidInstallApp(@NonNull Boolean setterArg) { + if (setterArg == null) { + throw new IllegalStateException("Nonnull field \"androidInstallApp\" is null."); + } + this.androidInstallApp = setterArg; + } + + private @Nullable String androidMinimumVersion; + + public @Nullable String getAndroidMinimumVersion() { + return androidMinimumVersion; + } + + public void setAndroidMinimumVersion(@Nullable String setterArg) { + this.androidMinimumVersion = setterArg; + } + + private @Nullable String linkDomain; + + public @Nullable String getLinkDomain() { + return linkDomain; + } + + public void setLinkDomain(@Nullable String setterArg) { + this.linkDomain = setterArg; + } + + /** Constructor is non-public to enforce null safety; use Builder. */ + InternalActionCodeSettings() {} + + @Override + public boolean equals(Object o) { + if (this == o) { + return true; + } + if (o == null || getClass() != o.getClass()) { + return false; + } + InternalActionCodeSettings that = (InternalActionCodeSettings) o; + return pigeonDeepEquals(url, that.url) + && pigeonDeepEquals(dynamicLinkDomain, that.dynamicLinkDomain) + && pigeonDeepEquals(handleCodeInApp, that.handleCodeInApp) + && pigeonDeepEquals(iOSBundleId, that.iOSBundleId) + && pigeonDeepEquals(androidPackageName, that.androidPackageName) + && pigeonDeepEquals(androidInstallApp, that.androidInstallApp) + && pigeonDeepEquals(androidMinimumVersion, that.androidMinimumVersion) + && pigeonDeepEquals(linkDomain, that.linkDomain); + } + + @Override + public int hashCode() { + Object[] fields = + new Object[] { + getClass(), + url, + dynamicLinkDomain, + handleCodeInApp, + iOSBundleId, + androidPackageName, + androidInstallApp, + androidMinimumVersion, + linkDomain + }; + return pigeonDeepHashCode(fields); + } + + public static final class Builder { + + private @Nullable String url; + + @CanIgnoreReturnValue + public @NonNull Builder setUrl(@NonNull String setterArg) { + this.url = setterArg; + return this; + } + + private @Nullable String dynamicLinkDomain; + + @CanIgnoreReturnValue + public @NonNull Builder setDynamicLinkDomain(@Nullable String setterArg) { + this.dynamicLinkDomain = setterArg; + return this; + } + + private @Nullable Boolean handleCodeInApp; + + @CanIgnoreReturnValue + public @NonNull Builder setHandleCodeInApp(@NonNull Boolean setterArg) { + this.handleCodeInApp = setterArg; + return this; + } + + private @Nullable String iOSBundleId; + + @CanIgnoreReturnValue + public @NonNull Builder setIOSBundleId(@Nullable String setterArg) { + this.iOSBundleId = setterArg; + return this; + } + + private @Nullable String androidPackageName; + + @CanIgnoreReturnValue + public @NonNull Builder setAndroidPackageName(@Nullable String setterArg) { + this.androidPackageName = setterArg; + return this; + } + + private @Nullable Boolean androidInstallApp; + + @CanIgnoreReturnValue + public @NonNull Builder setAndroidInstallApp(@NonNull Boolean setterArg) { + this.androidInstallApp = setterArg; + return this; + } + + private @Nullable String androidMinimumVersion; + + @CanIgnoreReturnValue + public @NonNull Builder setAndroidMinimumVersion(@Nullable String setterArg) { + this.androidMinimumVersion = setterArg; + return this; + } + + private @Nullable String linkDomain; + + @CanIgnoreReturnValue + public @NonNull Builder setLinkDomain(@Nullable String setterArg) { + this.linkDomain = setterArg; + return this; + } + + public @NonNull InternalActionCodeSettings build() { + InternalActionCodeSettings pigeonReturn = new InternalActionCodeSettings(); + pigeonReturn.setUrl(url); + pigeonReturn.setDynamicLinkDomain(dynamicLinkDomain); + pigeonReturn.setHandleCodeInApp(handleCodeInApp); + pigeonReturn.setIOSBundleId(iOSBundleId); + pigeonReturn.setAndroidPackageName(androidPackageName); + pigeonReturn.setAndroidInstallApp(androidInstallApp); + pigeonReturn.setAndroidMinimumVersion(androidMinimumVersion); + pigeonReturn.setLinkDomain(linkDomain); + return pigeonReturn; + } + } + + @NonNull + public ArrayList toList() { + ArrayList toListResult = new ArrayList<>(8); + toListResult.add(url); + toListResult.add(dynamicLinkDomain); + toListResult.add(handleCodeInApp); + toListResult.add(iOSBundleId); + toListResult.add(androidPackageName); + toListResult.add(androidInstallApp); + toListResult.add(androidMinimumVersion); + toListResult.add(linkDomain); + return toListResult; + } + + static @NonNull InternalActionCodeSettings fromList(@NonNull ArrayList pigeonVar_list) { + InternalActionCodeSettings pigeonResult = new InternalActionCodeSettings(); + Object url = pigeonVar_list.get(0); + pigeonResult.setUrl((String) url); + Object dynamicLinkDomain = pigeonVar_list.get(1); + pigeonResult.setDynamicLinkDomain((String) dynamicLinkDomain); + Object handleCodeInApp = pigeonVar_list.get(2); + pigeonResult.setHandleCodeInApp((Boolean) handleCodeInApp); + Object iOSBundleId = pigeonVar_list.get(3); + pigeonResult.setIOSBundleId((String) iOSBundleId); + Object androidPackageName = pigeonVar_list.get(4); + pigeonResult.setAndroidPackageName((String) androidPackageName); + Object androidInstallApp = pigeonVar_list.get(5); + pigeonResult.setAndroidInstallApp((Boolean) androidInstallApp); + Object androidMinimumVersion = pigeonVar_list.get(6); + pigeonResult.setAndroidMinimumVersion((String) androidMinimumVersion); + Object linkDomain = pigeonVar_list.get(7); + pigeonResult.setLinkDomain((String) linkDomain); + return pigeonResult; + } + } + + /** Generated class from Pigeon that represents data sent in messages. */ + public static final class InternalFirebaseAuthSettings { + private @NonNull Boolean appVerificationDisabledForTesting; + + public @NonNull Boolean getAppVerificationDisabledForTesting() { + return appVerificationDisabledForTesting; + } + + public void setAppVerificationDisabledForTesting(@NonNull Boolean setterArg) { + if (setterArg == null) { + throw new IllegalStateException( + "Nonnull field \"appVerificationDisabledForTesting\" is null."); + } + this.appVerificationDisabledForTesting = setterArg; + } + + private @Nullable String userAccessGroup; + + public @Nullable String getUserAccessGroup() { + return userAccessGroup; + } + + public void setUserAccessGroup(@Nullable String setterArg) { + this.userAccessGroup = setterArg; + } + + private @Nullable String phoneNumber; + + public @Nullable String getPhoneNumber() { + return phoneNumber; + } + + public void setPhoneNumber(@Nullable String setterArg) { + this.phoneNumber = setterArg; + } + + private @Nullable String smsCode; + + public @Nullable String getSmsCode() { + return smsCode; + } + + public void setSmsCode(@Nullable String setterArg) { + this.smsCode = setterArg; + } + + private @Nullable Boolean forceRecaptchaFlow; + + public @Nullable Boolean getForceRecaptchaFlow() { + return forceRecaptchaFlow; + } + + public void setForceRecaptchaFlow(@Nullable Boolean setterArg) { + this.forceRecaptchaFlow = setterArg; + } + + /** Constructor is non-public to enforce null safety; use Builder. */ + InternalFirebaseAuthSettings() {} + + @Override + public boolean equals(Object o) { + if (this == o) { + return true; + } + if (o == null || getClass() != o.getClass()) { + return false; + } + InternalFirebaseAuthSettings that = (InternalFirebaseAuthSettings) o; + return pigeonDeepEquals( + appVerificationDisabledForTesting, that.appVerificationDisabledForTesting) + && pigeonDeepEquals(userAccessGroup, that.userAccessGroup) + && pigeonDeepEquals(phoneNumber, that.phoneNumber) + && pigeonDeepEquals(smsCode, that.smsCode) + && pigeonDeepEquals(forceRecaptchaFlow, that.forceRecaptchaFlow); + } + + @Override + public int hashCode() { + Object[] fields = + new Object[] { + getClass(), + appVerificationDisabledForTesting, + userAccessGroup, + phoneNumber, + smsCode, + forceRecaptchaFlow + }; + return pigeonDeepHashCode(fields); + } + + public static final class Builder { + + private @Nullable Boolean appVerificationDisabledForTesting; + + @CanIgnoreReturnValue + public @NonNull Builder setAppVerificationDisabledForTesting(@NonNull Boolean setterArg) { + this.appVerificationDisabledForTesting = setterArg; + return this; + } + + private @Nullable String userAccessGroup; + + @CanIgnoreReturnValue + public @NonNull Builder setUserAccessGroup(@Nullable String setterArg) { + this.userAccessGroup = setterArg; + return this; + } + + private @Nullable String phoneNumber; + + @CanIgnoreReturnValue + public @NonNull Builder setPhoneNumber(@Nullable String setterArg) { + this.phoneNumber = setterArg; + return this; + } + + private @Nullable String smsCode; + + @CanIgnoreReturnValue + public @NonNull Builder setSmsCode(@Nullable String setterArg) { + this.smsCode = setterArg; + return this; + } + + private @Nullable Boolean forceRecaptchaFlow; + + @CanIgnoreReturnValue + public @NonNull Builder setForceRecaptchaFlow(@Nullable Boolean setterArg) { + this.forceRecaptchaFlow = setterArg; + return this; + } + + public @NonNull InternalFirebaseAuthSettings build() { + InternalFirebaseAuthSettings pigeonReturn = new InternalFirebaseAuthSettings(); + pigeonReturn.setAppVerificationDisabledForTesting(appVerificationDisabledForTesting); + pigeonReturn.setUserAccessGroup(userAccessGroup); + pigeonReturn.setPhoneNumber(phoneNumber); + pigeonReturn.setSmsCode(smsCode); + pigeonReturn.setForceRecaptchaFlow(forceRecaptchaFlow); + return pigeonReturn; + } + } + + @NonNull + public ArrayList toList() { + ArrayList toListResult = new ArrayList<>(5); + toListResult.add(appVerificationDisabledForTesting); + toListResult.add(userAccessGroup); + toListResult.add(phoneNumber); + toListResult.add(smsCode); + toListResult.add(forceRecaptchaFlow); + return toListResult; + } + + static @NonNull InternalFirebaseAuthSettings fromList( + @NonNull ArrayList pigeonVar_list) { + InternalFirebaseAuthSettings pigeonResult = new InternalFirebaseAuthSettings(); + Object appVerificationDisabledForTesting = pigeonVar_list.get(0); + pigeonResult.setAppVerificationDisabledForTesting( + (Boolean) appVerificationDisabledForTesting); + Object userAccessGroup = pigeonVar_list.get(1); + pigeonResult.setUserAccessGroup((String) userAccessGroup); + Object phoneNumber = pigeonVar_list.get(2); + pigeonResult.setPhoneNumber((String) phoneNumber); + Object smsCode = pigeonVar_list.get(3); + pigeonResult.setSmsCode((String) smsCode); + Object forceRecaptchaFlow = pigeonVar_list.get(4); + pigeonResult.setForceRecaptchaFlow((Boolean) forceRecaptchaFlow); + return pigeonResult; + } + } + + /** Generated class from Pigeon that represents data sent in messages. */ + public static final class InternalSignInProvider { + private @NonNull String providerId; + + public @NonNull String getProviderId() { + return providerId; + } + + public void setProviderId(@NonNull String setterArg) { + if (setterArg == null) { + throw new IllegalStateException("Nonnull field \"providerId\" is null."); + } + this.providerId = setterArg; + } + + private @Nullable List scopes; + + public @Nullable List getScopes() { + return scopes; + } + + public void setScopes(@Nullable List setterArg) { + this.scopes = setterArg; + } + + private @Nullable Map customParameters; + + public @Nullable Map getCustomParameters() { + return customParameters; + } + + public void setCustomParameters(@Nullable Map setterArg) { + this.customParameters = setterArg; + } + + /** Constructor is non-public to enforce null safety; use Builder. */ + InternalSignInProvider() {} + + @Override + public boolean equals(Object o) { + if (this == o) { + return true; + } + if (o == null || getClass() != o.getClass()) { + return false; + } + InternalSignInProvider that = (InternalSignInProvider) o; + return pigeonDeepEquals(providerId, that.providerId) + && pigeonDeepEquals(scopes, that.scopes) + && pigeonDeepEquals(customParameters, that.customParameters); + } + + @Override + public int hashCode() { + Object[] fields = new Object[] {getClass(), providerId, scopes, customParameters}; + return pigeonDeepHashCode(fields); + } + + public static final class Builder { + + private @Nullable String providerId; + + @CanIgnoreReturnValue + public @NonNull Builder setProviderId(@NonNull String setterArg) { + this.providerId = setterArg; + return this; + } + + private @Nullable List scopes; + + @CanIgnoreReturnValue + public @NonNull Builder setScopes(@Nullable List setterArg) { + this.scopes = setterArg; + return this; + } + + private @Nullable Map customParameters; + + @CanIgnoreReturnValue + public @NonNull Builder setCustomParameters(@Nullable Map setterArg) { + this.customParameters = setterArg; + return this; + } + + public @NonNull InternalSignInProvider build() { + InternalSignInProvider pigeonReturn = new InternalSignInProvider(); + pigeonReturn.setProviderId(providerId); + pigeonReturn.setScopes(scopes); + pigeonReturn.setCustomParameters(customParameters); + return pigeonReturn; + } + } + + @NonNull + public ArrayList toList() { + ArrayList toListResult = new ArrayList<>(3); + toListResult.add(providerId); + toListResult.add(scopes); + toListResult.add(customParameters); + return toListResult; + } + + static @NonNull InternalSignInProvider fromList(@NonNull ArrayList pigeonVar_list) { + InternalSignInProvider pigeonResult = new InternalSignInProvider(); + Object providerId = pigeonVar_list.get(0); + pigeonResult.setProviderId((String) providerId); + Object scopes = pigeonVar_list.get(1); + pigeonResult.setScopes((List) scopes); + Object customParameters = pigeonVar_list.get(2); + pigeonResult.setCustomParameters((Map) customParameters); + return pigeonResult; + } + } + + /** Generated class from Pigeon that represents data sent in messages. */ + public static final class InternalVerifyPhoneNumberRequest { + private @Nullable String phoneNumber; + + public @Nullable String getPhoneNumber() { + return phoneNumber; + } + + public void setPhoneNumber(@Nullable String setterArg) { + this.phoneNumber = setterArg; + } + + private @NonNull Long timeout; + + public @NonNull Long getTimeout() { + return timeout; + } + + public void setTimeout(@NonNull Long setterArg) { + if (setterArg == null) { + throw new IllegalStateException("Nonnull field \"timeout\" is null."); + } + this.timeout = setterArg; + } + + private @Nullable Long forceResendingToken; + + public @Nullable Long getForceResendingToken() { + return forceResendingToken; + } + + public void setForceResendingToken(@Nullable Long setterArg) { + this.forceResendingToken = setterArg; + } + + private @Nullable String autoRetrievedSmsCodeForTesting; + + public @Nullable String getAutoRetrievedSmsCodeForTesting() { + return autoRetrievedSmsCodeForTesting; + } + + public void setAutoRetrievedSmsCodeForTesting(@Nullable String setterArg) { + this.autoRetrievedSmsCodeForTesting = setterArg; + } + + private @Nullable String multiFactorInfoId; + + public @Nullable String getMultiFactorInfoId() { + return multiFactorInfoId; + } + + public void setMultiFactorInfoId(@Nullable String setterArg) { + this.multiFactorInfoId = setterArg; + } + + private @Nullable String multiFactorSessionId; + + public @Nullable String getMultiFactorSessionId() { + return multiFactorSessionId; + } + + public void setMultiFactorSessionId(@Nullable String setterArg) { + this.multiFactorSessionId = setterArg; + } + + /** Constructor is non-public to enforce null safety; use Builder. */ + InternalVerifyPhoneNumberRequest() {} + + @Override + public boolean equals(Object o) { + if (this == o) { + return true; + } + if (o == null || getClass() != o.getClass()) { + return false; + } + InternalVerifyPhoneNumberRequest that = (InternalVerifyPhoneNumberRequest) o; + return pigeonDeepEquals(phoneNumber, that.phoneNumber) + && pigeonDeepEquals(timeout, that.timeout) + && pigeonDeepEquals(forceResendingToken, that.forceResendingToken) + && pigeonDeepEquals(autoRetrievedSmsCodeForTesting, that.autoRetrievedSmsCodeForTesting) + && pigeonDeepEquals(multiFactorInfoId, that.multiFactorInfoId) + && pigeonDeepEquals(multiFactorSessionId, that.multiFactorSessionId); + } + + @Override + public int hashCode() { + Object[] fields = + new Object[] { + getClass(), + phoneNumber, + timeout, + forceResendingToken, + autoRetrievedSmsCodeForTesting, + multiFactorInfoId, + multiFactorSessionId + }; + return pigeonDeepHashCode(fields); + } + + public static final class Builder { + + private @Nullable String phoneNumber; + + @CanIgnoreReturnValue + public @NonNull Builder setPhoneNumber(@Nullable String setterArg) { + this.phoneNumber = setterArg; + return this; + } + + private @Nullable Long timeout; + + @CanIgnoreReturnValue + public @NonNull Builder setTimeout(@NonNull Long setterArg) { + this.timeout = setterArg; + return this; + } + + private @Nullable Long forceResendingToken; + + @CanIgnoreReturnValue + public @NonNull Builder setForceResendingToken(@Nullable Long setterArg) { + this.forceResendingToken = setterArg; + return this; + } + + private @Nullable String autoRetrievedSmsCodeForTesting; + + @CanIgnoreReturnValue + public @NonNull Builder setAutoRetrievedSmsCodeForTesting(@Nullable String setterArg) { + this.autoRetrievedSmsCodeForTesting = setterArg; + return this; + } + + private @Nullable String multiFactorInfoId; + + @CanIgnoreReturnValue + public @NonNull Builder setMultiFactorInfoId(@Nullable String setterArg) { + this.multiFactorInfoId = setterArg; + return this; + } + + private @Nullable String multiFactorSessionId; + + @CanIgnoreReturnValue + public @NonNull Builder setMultiFactorSessionId(@Nullable String setterArg) { + this.multiFactorSessionId = setterArg; + return this; + } + + public @NonNull InternalVerifyPhoneNumberRequest build() { + InternalVerifyPhoneNumberRequest pigeonReturn = new InternalVerifyPhoneNumberRequest(); + pigeonReturn.setPhoneNumber(phoneNumber); + pigeonReturn.setTimeout(timeout); + pigeonReturn.setForceResendingToken(forceResendingToken); + pigeonReturn.setAutoRetrievedSmsCodeForTesting(autoRetrievedSmsCodeForTesting); + pigeonReturn.setMultiFactorInfoId(multiFactorInfoId); + pigeonReturn.setMultiFactorSessionId(multiFactorSessionId); + return pigeonReturn; + } + } + + @NonNull + public ArrayList toList() { + ArrayList toListResult = new ArrayList<>(6); + toListResult.add(phoneNumber); + toListResult.add(timeout); + toListResult.add(forceResendingToken); + toListResult.add(autoRetrievedSmsCodeForTesting); + toListResult.add(multiFactorInfoId); + toListResult.add(multiFactorSessionId); + return toListResult; + } + + static @NonNull InternalVerifyPhoneNumberRequest fromList( + @NonNull ArrayList pigeonVar_list) { + InternalVerifyPhoneNumberRequest pigeonResult = new InternalVerifyPhoneNumberRequest(); + Object phoneNumber = pigeonVar_list.get(0); + pigeonResult.setPhoneNumber((String) phoneNumber); + Object timeout = pigeonVar_list.get(1); + pigeonResult.setTimeout((Long) timeout); + Object forceResendingToken = pigeonVar_list.get(2); + pigeonResult.setForceResendingToken((Long) forceResendingToken); + Object autoRetrievedSmsCodeForTesting = pigeonVar_list.get(3); + pigeonResult.setAutoRetrievedSmsCodeForTesting((String) autoRetrievedSmsCodeForTesting); + Object multiFactorInfoId = pigeonVar_list.get(4); + pigeonResult.setMultiFactorInfoId((String) multiFactorInfoId); + Object multiFactorSessionId = pigeonVar_list.get(5); + pigeonResult.setMultiFactorSessionId((String) multiFactorSessionId); + return pigeonResult; + } + } + + /** Generated class from Pigeon that represents data sent in messages. */ + public static final class InternalIdTokenResult { + private @Nullable String token; + + public @Nullable String getToken() { + return token; + } + + public void setToken(@Nullable String setterArg) { + this.token = setterArg; + } + + private @Nullable Long expirationTimestamp; + + public @Nullable Long getExpirationTimestamp() { + return expirationTimestamp; + } + + public void setExpirationTimestamp(@Nullable Long setterArg) { + this.expirationTimestamp = setterArg; + } + + private @Nullable Long authTimestamp; + + public @Nullable Long getAuthTimestamp() { + return authTimestamp; + } + + public void setAuthTimestamp(@Nullable Long setterArg) { + this.authTimestamp = setterArg; + } + + private @Nullable Long issuedAtTimestamp; + + public @Nullable Long getIssuedAtTimestamp() { + return issuedAtTimestamp; + } + + public void setIssuedAtTimestamp(@Nullable Long setterArg) { + this.issuedAtTimestamp = setterArg; + } + + private @Nullable String signInProvider; + + public @Nullable String getSignInProvider() { + return signInProvider; + } + + public void setSignInProvider(@Nullable String setterArg) { + this.signInProvider = setterArg; + } + + private @Nullable Map claims; + + public @Nullable Map getClaims() { + return claims; + } + + public void setClaims(@Nullable Map setterArg) { + this.claims = setterArg; + } + + private @Nullable String signInSecondFactor; + + public @Nullable String getSignInSecondFactor() { + return signInSecondFactor; + } + + public void setSignInSecondFactor(@Nullable String setterArg) { + this.signInSecondFactor = setterArg; + } + + @Override + public boolean equals(Object o) { + if (this == o) { + return true; + } + if (o == null || getClass() != o.getClass()) { + return false; + } + InternalIdTokenResult that = (InternalIdTokenResult) o; + return pigeonDeepEquals(token, that.token) + && pigeonDeepEquals(expirationTimestamp, that.expirationTimestamp) + && pigeonDeepEquals(authTimestamp, that.authTimestamp) + && pigeonDeepEquals(issuedAtTimestamp, that.issuedAtTimestamp) + && pigeonDeepEquals(signInProvider, that.signInProvider) + && pigeonDeepEquals(claims, that.claims) + && pigeonDeepEquals(signInSecondFactor, that.signInSecondFactor); + } + + @Override + public int hashCode() { + Object[] fields = + new Object[] { + getClass(), + token, + expirationTimestamp, + authTimestamp, + issuedAtTimestamp, + signInProvider, + claims, + signInSecondFactor + }; + return pigeonDeepHashCode(fields); + } + + public static final class Builder { + + private @Nullable String token; + + @CanIgnoreReturnValue + public @NonNull Builder setToken(@Nullable String setterArg) { + this.token = setterArg; + return this; + } + + private @Nullable Long expirationTimestamp; + + @CanIgnoreReturnValue + public @NonNull Builder setExpirationTimestamp(@Nullable Long setterArg) { + this.expirationTimestamp = setterArg; + return this; + } + + private @Nullable Long authTimestamp; + + @CanIgnoreReturnValue + public @NonNull Builder setAuthTimestamp(@Nullable Long setterArg) { + this.authTimestamp = setterArg; + return this; + } + + private @Nullable Long issuedAtTimestamp; + + @CanIgnoreReturnValue + public @NonNull Builder setIssuedAtTimestamp(@Nullable Long setterArg) { + this.issuedAtTimestamp = setterArg; + return this; + } + + private @Nullable String signInProvider; + + @CanIgnoreReturnValue + public @NonNull Builder setSignInProvider(@Nullable String setterArg) { + this.signInProvider = setterArg; + return this; + } + + private @Nullable Map claims; + + @CanIgnoreReturnValue + public @NonNull Builder setClaims(@Nullable Map setterArg) { + this.claims = setterArg; + return this; + } + + private @Nullable String signInSecondFactor; + + @CanIgnoreReturnValue + public @NonNull Builder setSignInSecondFactor(@Nullable String setterArg) { + this.signInSecondFactor = setterArg; + return this; + } + + public @NonNull InternalIdTokenResult build() { + InternalIdTokenResult pigeonReturn = new InternalIdTokenResult(); + pigeonReturn.setToken(token); + pigeonReturn.setExpirationTimestamp(expirationTimestamp); + pigeonReturn.setAuthTimestamp(authTimestamp); + pigeonReturn.setIssuedAtTimestamp(issuedAtTimestamp); + pigeonReturn.setSignInProvider(signInProvider); + pigeonReturn.setClaims(claims); + pigeonReturn.setSignInSecondFactor(signInSecondFactor); + return pigeonReturn; + } + } + + @NonNull + public ArrayList toList() { + ArrayList toListResult = new ArrayList<>(7); + toListResult.add(token); + toListResult.add(expirationTimestamp); + toListResult.add(authTimestamp); + toListResult.add(issuedAtTimestamp); + toListResult.add(signInProvider); + toListResult.add(claims); + toListResult.add(signInSecondFactor); + return toListResult; + } + + static @NonNull InternalIdTokenResult fromList(@NonNull ArrayList pigeonVar_list) { + InternalIdTokenResult pigeonResult = new InternalIdTokenResult(); + Object token = pigeonVar_list.get(0); + pigeonResult.setToken((String) token); + Object expirationTimestamp = pigeonVar_list.get(1); + pigeonResult.setExpirationTimestamp((Long) expirationTimestamp); + Object authTimestamp = pigeonVar_list.get(2); + pigeonResult.setAuthTimestamp((Long) authTimestamp); + Object issuedAtTimestamp = pigeonVar_list.get(3); + pigeonResult.setIssuedAtTimestamp((Long) issuedAtTimestamp); + Object signInProvider = pigeonVar_list.get(4); + pigeonResult.setSignInProvider((String) signInProvider); + Object claims = pigeonVar_list.get(5); + pigeonResult.setClaims((Map) claims); + Object signInSecondFactor = pigeonVar_list.get(6); + pigeonResult.setSignInSecondFactor((String) signInSecondFactor); + return pigeonResult; + } + } + + /** Generated class from Pigeon that represents data sent in messages. */ + public static final class InternalUserProfile { + private @Nullable String displayName; + + public @Nullable String getDisplayName() { + return displayName; + } + + public void setDisplayName(@Nullable String setterArg) { + this.displayName = setterArg; + } + + private @Nullable String photoUrl; + + public @Nullable String getPhotoUrl() { + return photoUrl; + } + + public void setPhotoUrl(@Nullable String setterArg) { + this.photoUrl = setterArg; + } + + private @NonNull Boolean displayNameChanged; + + public @NonNull Boolean getDisplayNameChanged() { + return displayNameChanged; + } + + public void setDisplayNameChanged(@NonNull Boolean setterArg) { + if (setterArg == null) { + throw new IllegalStateException("Nonnull field \"displayNameChanged\" is null."); + } + this.displayNameChanged = setterArg; + } + + private @NonNull Boolean photoUrlChanged; + + public @NonNull Boolean getPhotoUrlChanged() { + return photoUrlChanged; + } + + public void setPhotoUrlChanged(@NonNull Boolean setterArg) { + if (setterArg == null) { + throw new IllegalStateException("Nonnull field \"photoUrlChanged\" is null."); + } + this.photoUrlChanged = setterArg; + } + + /** Constructor is non-public to enforce null safety; use Builder. */ + InternalUserProfile() {} + + @Override + public boolean equals(Object o) { + if (this == o) { + return true; + } + if (o == null || getClass() != o.getClass()) { + return false; + } + InternalUserProfile that = (InternalUserProfile) o; + return pigeonDeepEquals(displayName, that.displayName) + && pigeonDeepEquals(photoUrl, that.photoUrl) + && pigeonDeepEquals(displayNameChanged, that.displayNameChanged) + && pigeonDeepEquals(photoUrlChanged, that.photoUrlChanged); + } + + @Override + public int hashCode() { + Object[] fields = + new Object[] {getClass(), displayName, photoUrl, displayNameChanged, photoUrlChanged}; + return pigeonDeepHashCode(fields); + } + + public static final class Builder { + + private @Nullable String displayName; + + @CanIgnoreReturnValue + public @NonNull Builder setDisplayName(@Nullable String setterArg) { + this.displayName = setterArg; + return this; + } + + private @Nullable String photoUrl; + + @CanIgnoreReturnValue + public @NonNull Builder setPhotoUrl(@Nullable String setterArg) { + this.photoUrl = setterArg; + return this; + } + + private @Nullable Boolean displayNameChanged; + + @CanIgnoreReturnValue + public @NonNull Builder setDisplayNameChanged(@NonNull Boolean setterArg) { + this.displayNameChanged = setterArg; + return this; + } + + private @Nullable Boolean photoUrlChanged; + + @CanIgnoreReturnValue + public @NonNull Builder setPhotoUrlChanged(@NonNull Boolean setterArg) { + this.photoUrlChanged = setterArg; + return this; + } + + public @NonNull InternalUserProfile build() { + InternalUserProfile pigeonReturn = new InternalUserProfile(); + pigeonReturn.setDisplayName(displayName); + pigeonReturn.setPhotoUrl(photoUrl); + pigeonReturn.setDisplayNameChanged(displayNameChanged); + pigeonReturn.setPhotoUrlChanged(photoUrlChanged); + return pigeonReturn; + } + } + + @NonNull + public ArrayList toList() { + ArrayList toListResult = new ArrayList<>(4); + toListResult.add(displayName); + toListResult.add(photoUrl); + toListResult.add(displayNameChanged); + toListResult.add(photoUrlChanged); + return toListResult; + } + + static @NonNull InternalUserProfile fromList(@NonNull ArrayList pigeonVar_list) { + InternalUserProfile pigeonResult = new InternalUserProfile(); + Object displayName = pigeonVar_list.get(0); + pigeonResult.setDisplayName((String) displayName); + Object photoUrl = pigeonVar_list.get(1); + pigeonResult.setPhotoUrl((String) photoUrl); + Object displayNameChanged = pigeonVar_list.get(2); + pigeonResult.setDisplayNameChanged((Boolean) displayNameChanged); + Object photoUrlChanged = pigeonVar_list.get(3); + pigeonResult.setPhotoUrlChanged((Boolean) photoUrlChanged); + return pigeonResult; + } + } + + /** Generated class from Pigeon that represents data sent in messages. */ + public static final class InternalTotpSecret { + private @Nullable Long codeIntervalSeconds; + + public @Nullable Long getCodeIntervalSeconds() { + return codeIntervalSeconds; + } + + public void setCodeIntervalSeconds(@Nullable Long setterArg) { + this.codeIntervalSeconds = setterArg; + } + + private @Nullable Long codeLength; + + public @Nullable Long getCodeLength() { + return codeLength; + } + + public void setCodeLength(@Nullable Long setterArg) { + this.codeLength = setterArg; + } + + private @Nullable Long enrollmentCompletionDeadline; + + public @Nullable Long getEnrollmentCompletionDeadline() { + return enrollmentCompletionDeadline; + } + + public void setEnrollmentCompletionDeadline(@Nullable Long setterArg) { + this.enrollmentCompletionDeadline = setterArg; + } + + private @Nullable String hashingAlgorithm; + + public @Nullable String getHashingAlgorithm() { + return hashingAlgorithm; + } + + public void setHashingAlgorithm(@Nullable String setterArg) { + this.hashingAlgorithm = setterArg; + } + + private @NonNull String secretKey; + + public @NonNull String getSecretKey() { + return secretKey; + } + + public void setSecretKey(@NonNull String setterArg) { + if (setterArg == null) { + throw new IllegalStateException("Nonnull field \"secretKey\" is null."); + } + this.secretKey = setterArg; + } + + /** Constructor is non-public to enforce null safety; use Builder. */ + InternalTotpSecret() {} + + @Override + public boolean equals(Object o) { + if (this == o) { + return true; + } + if (o == null || getClass() != o.getClass()) { + return false; + } + InternalTotpSecret that = (InternalTotpSecret) o; + return pigeonDeepEquals(codeIntervalSeconds, that.codeIntervalSeconds) + && pigeonDeepEquals(codeLength, that.codeLength) + && pigeonDeepEquals(enrollmentCompletionDeadline, that.enrollmentCompletionDeadline) + && pigeonDeepEquals(hashingAlgorithm, that.hashingAlgorithm) + && pigeonDeepEquals(secretKey, that.secretKey); + } + + @Override + public int hashCode() { + Object[] fields = + new Object[] { + getClass(), + codeIntervalSeconds, + codeLength, + enrollmentCompletionDeadline, + hashingAlgorithm, + secretKey + }; + return pigeonDeepHashCode(fields); + } + + public static final class Builder { + + private @Nullable Long codeIntervalSeconds; + + @CanIgnoreReturnValue + public @NonNull Builder setCodeIntervalSeconds(@Nullable Long setterArg) { + this.codeIntervalSeconds = setterArg; + return this; + } + + private @Nullable Long codeLength; + + @CanIgnoreReturnValue + public @NonNull Builder setCodeLength(@Nullable Long setterArg) { + this.codeLength = setterArg; + return this; + } + + private @Nullable Long enrollmentCompletionDeadline; + + @CanIgnoreReturnValue + public @NonNull Builder setEnrollmentCompletionDeadline(@Nullable Long setterArg) { + this.enrollmentCompletionDeadline = setterArg; + return this; + } + + private @Nullable String hashingAlgorithm; + + @CanIgnoreReturnValue + public @NonNull Builder setHashingAlgorithm(@Nullable String setterArg) { + this.hashingAlgorithm = setterArg; + return this; + } + + private @Nullable String secretKey; + + @CanIgnoreReturnValue + public @NonNull Builder setSecretKey(@NonNull String setterArg) { + this.secretKey = setterArg; + return this; + } + + public @NonNull InternalTotpSecret build() { + InternalTotpSecret pigeonReturn = new InternalTotpSecret(); + pigeonReturn.setCodeIntervalSeconds(codeIntervalSeconds); + pigeonReturn.setCodeLength(codeLength); + pigeonReturn.setEnrollmentCompletionDeadline(enrollmentCompletionDeadline); + pigeonReturn.setHashingAlgorithm(hashingAlgorithm); + pigeonReturn.setSecretKey(secretKey); + return pigeonReturn; + } + } + + @NonNull + public ArrayList toList() { + ArrayList toListResult = new ArrayList<>(5); + toListResult.add(codeIntervalSeconds); + toListResult.add(codeLength); + toListResult.add(enrollmentCompletionDeadline); + toListResult.add(hashingAlgorithm); + toListResult.add(secretKey); + return toListResult; + } + + static @NonNull InternalTotpSecret fromList(@NonNull ArrayList pigeonVar_list) { + InternalTotpSecret pigeonResult = new InternalTotpSecret(); + Object codeIntervalSeconds = pigeonVar_list.get(0); + pigeonResult.setCodeIntervalSeconds((Long) codeIntervalSeconds); + Object codeLength = pigeonVar_list.get(1); + pigeonResult.setCodeLength((Long) codeLength); + Object enrollmentCompletionDeadline = pigeonVar_list.get(2); + pigeonResult.setEnrollmentCompletionDeadline((Long) enrollmentCompletionDeadline); + Object hashingAlgorithm = pigeonVar_list.get(3); + pigeonResult.setHashingAlgorithm((String) hashingAlgorithm); + Object secretKey = pigeonVar_list.get(4); + pigeonResult.setSecretKey((String) secretKey); + return pigeonResult; + } + } + + private static class PigeonCodec extends StandardMessageCodec { + public static final PigeonCodec INSTANCE = new PigeonCodec(); + + private PigeonCodec() {} + + @Override + protected Object readValueOfType(byte type, @NonNull ByteBuffer buffer) { + switch (type) { + case (byte) 129: + { + Object value = readValue(buffer); + return value == null + ? null + : ActionCodeInfoOperation.values()[((Long) value).intValue()]; + } + case (byte) 130: + return InternalMultiFactorSession.fromList((ArrayList) readValue(buffer)); + case (byte) 131: + return InternalPhoneMultiFactorAssertion.fromList((ArrayList) readValue(buffer)); + case (byte) 132: + return InternalMultiFactorInfo.fromList((ArrayList) readValue(buffer)); + case (byte) 133: + return AuthPigeonFirebaseApp.fromList((ArrayList) readValue(buffer)); + case (byte) 134: + return InternalActionCodeInfoData.fromList((ArrayList) readValue(buffer)); + case (byte) 135: + return InternalActionCodeInfo.fromList((ArrayList) readValue(buffer)); + case (byte) 136: + return InternalAdditionalUserInfo.fromList((ArrayList) readValue(buffer)); + case (byte) 137: + return InternalAuthCredential.fromList((ArrayList) readValue(buffer)); + case (byte) 138: + return InternalUserInfo.fromList((ArrayList) readValue(buffer)); + case (byte) 139: + return InternalUserDetails.fromList((ArrayList) readValue(buffer)); + case (byte) 140: + return InternalUserCredential.fromList((ArrayList) readValue(buffer)); + case (byte) 141: + return InternalAuthCredentialInput.fromList((ArrayList) readValue(buffer)); + case (byte) 142: + return InternalActionCodeSettings.fromList((ArrayList) readValue(buffer)); + case (byte) 143: + return InternalFirebaseAuthSettings.fromList((ArrayList) readValue(buffer)); + case (byte) 144: + return InternalSignInProvider.fromList((ArrayList) readValue(buffer)); + case (byte) 145: + return InternalVerifyPhoneNumberRequest.fromList((ArrayList) readValue(buffer)); + case (byte) 146: + return InternalIdTokenResult.fromList((ArrayList) readValue(buffer)); + case (byte) 147: + return InternalUserProfile.fromList((ArrayList) readValue(buffer)); + case (byte) 148: + return InternalTotpSecret.fromList((ArrayList) readValue(buffer)); + default: + return super.readValueOfType(type, buffer); + } + } + + @Override + protected void writeValue(@NonNull ByteArrayOutputStream stream, Object value) { + if (value instanceof ActionCodeInfoOperation) { + stream.write(129); + writeValue(stream, value == null ? null : ((ActionCodeInfoOperation) value).index); + } else if (value instanceof InternalMultiFactorSession) { + stream.write(130); + writeValue(stream, ((InternalMultiFactorSession) value).toList()); + } else if (value instanceof InternalPhoneMultiFactorAssertion) { + stream.write(131); + writeValue(stream, ((InternalPhoneMultiFactorAssertion) value).toList()); + } else if (value instanceof InternalMultiFactorInfo) { + stream.write(132); + writeValue(stream, ((InternalMultiFactorInfo) value).toList()); + } else if (value instanceof AuthPigeonFirebaseApp) { + stream.write(133); + writeValue(stream, ((AuthPigeonFirebaseApp) value).toList()); + } else if (value instanceof InternalActionCodeInfoData) { + stream.write(134); + writeValue(stream, ((InternalActionCodeInfoData) value).toList()); + } else if (value instanceof InternalActionCodeInfo) { + stream.write(135); + writeValue(stream, ((InternalActionCodeInfo) value).toList()); + } else if (value instanceof InternalAdditionalUserInfo) { + stream.write(136); + writeValue(stream, ((InternalAdditionalUserInfo) value).toList()); + } else if (value instanceof InternalAuthCredential) { + stream.write(137); + writeValue(stream, ((InternalAuthCredential) value).toList()); + } else if (value instanceof InternalUserInfo) { + stream.write(138); + writeValue(stream, ((InternalUserInfo) value).toList()); + } else if (value instanceof InternalUserDetails) { + stream.write(139); + writeValue(stream, ((InternalUserDetails) value).toList()); + } else if (value instanceof InternalUserCredential) { + stream.write(140); + writeValue(stream, ((InternalUserCredential) value).toList()); + } else if (value instanceof InternalAuthCredentialInput) { + stream.write(141); + writeValue(stream, ((InternalAuthCredentialInput) value).toList()); + } else if (value instanceof InternalActionCodeSettings) { + stream.write(142); + writeValue(stream, ((InternalActionCodeSettings) value).toList()); + } else if (value instanceof InternalFirebaseAuthSettings) { + stream.write(143); + writeValue(stream, ((InternalFirebaseAuthSettings) value).toList()); + } else if (value instanceof InternalSignInProvider) { + stream.write(144); + writeValue(stream, ((InternalSignInProvider) value).toList()); + } else if (value instanceof InternalVerifyPhoneNumberRequest) { + stream.write(145); + writeValue(stream, ((InternalVerifyPhoneNumberRequest) value).toList()); + } else if (value instanceof InternalIdTokenResult) { + stream.write(146); + writeValue(stream, ((InternalIdTokenResult) value).toList()); + } else if (value instanceof InternalUserProfile) { + stream.write(147); + writeValue(stream, ((InternalUserProfile) value).toList()); + } else if (value instanceof InternalTotpSecret) { + stream.write(148); + writeValue(stream, ((InternalTotpSecret) value).toList()); + } else { + super.writeValue(stream, value); + } + } + } + + /** Asynchronous error handling return type for non-nullable API method returns. */ + public interface Result { + /** Success case callback method for handling returns. */ + void success(@NonNull T result); + + /** Failure case callback method for handling errors. */ + void error(@NonNull Throwable error); + } + + /** Asynchronous error handling return type for nullable API method returns. */ + public interface NullableResult { + /** Success case callback method for handling returns. */ + void success(@Nullable T result); + + /** Failure case callback method for handling errors. */ + void error(@NonNull Throwable error); + } + + /** Asynchronous error handling return type for void API method returns. */ + public interface VoidResult { + /** Success case callback method for handling returns. */ + void success(); + + /** Failure case callback method for handling errors. */ + void error(@NonNull Throwable error); + } + + /** Generated interface from Pigeon that represents a handler of messages from Flutter. */ + public interface FirebaseAuthHostApi { + + void registerIdTokenListener( + @NonNull AuthPigeonFirebaseApp app, @NonNull Result result); + + void registerAuthStateListener( + @NonNull AuthPigeonFirebaseApp app, @NonNull Result result); + + void useEmulator( + @NonNull AuthPigeonFirebaseApp app, + @NonNull String host, + @NonNull Long port, + @NonNull VoidResult result); + + void applyActionCode( + @NonNull AuthPigeonFirebaseApp app, @NonNull String code, @NonNull VoidResult result); + + void checkActionCode( + @NonNull AuthPigeonFirebaseApp app, + @NonNull String code, + @NonNull Result result); + + void confirmPasswordReset( + @NonNull AuthPigeonFirebaseApp app, + @NonNull String code, + @NonNull String newPassword, + @NonNull VoidResult result); + + void createUserWithEmailAndPassword( + @NonNull AuthPigeonFirebaseApp app, + @NonNull String email, + @NonNull String password, + @NonNull Result result); + + void signInAnonymously( + @NonNull AuthPigeonFirebaseApp app, @NonNull Result result); + + void signInWithCredential( + @NonNull AuthPigeonFirebaseApp app, + @NonNull Map input, + @NonNull Result result); + + void signInWithCustomToken( + @NonNull AuthPigeonFirebaseApp app, + @NonNull String token, + @NonNull Result result); + + void signInWithEmailAndPassword( + @NonNull AuthPigeonFirebaseApp app, + @NonNull String email, + @NonNull String password, + @NonNull Result result); + + void signInWithEmailLink( + @NonNull AuthPigeonFirebaseApp app, + @NonNull String email, + @NonNull String emailLink, + @NonNull Result result); + + void signInWithProvider( + @NonNull AuthPigeonFirebaseApp app, + @NonNull InternalSignInProvider signInProvider, + @NonNull Result result); + + void signOut(@NonNull AuthPigeonFirebaseApp app, @NonNull VoidResult result); + + void fetchSignInMethodsForEmail( + @NonNull AuthPigeonFirebaseApp app, + @NonNull String email, + @NonNull Result> result); + + void sendPasswordResetEmail( + @NonNull AuthPigeonFirebaseApp app, + @NonNull String email, + @Nullable InternalActionCodeSettings actionCodeSettings, + @NonNull VoidResult result); + + void sendSignInLinkToEmail( + @NonNull AuthPigeonFirebaseApp app, + @NonNull String email, + @NonNull InternalActionCodeSettings actionCodeSettings, + @NonNull VoidResult result); + + void setLanguageCode( + @NonNull AuthPigeonFirebaseApp app, + @Nullable String languageCode, + @NonNull Result result); + + void setSettings( + @NonNull AuthPigeonFirebaseApp app, + @NonNull InternalFirebaseAuthSettings settings, + @NonNull VoidResult result); + + void verifyPasswordResetCode( + @NonNull AuthPigeonFirebaseApp app, @NonNull String code, @NonNull Result result); + + void verifyPhoneNumber( + @NonNull AuthPigeonFirebaseApp app, + @NonNull InternalVerifyPhoneNumberRequest request, + @NonNull Result result); + + void revokeTokenWithAuthorizationCode( + @NonNull AuthPigeonFirebaseApp app, + @NonNull String authorizationCode, + @NonNull VoidResult result); + + void revokeAccessToken( + @NonNull AuthPigeonFirebaseApp app, + @NonNull String accessToken, + @NonNull VoidResult result); + + void initializeRecaptchaConfig(@NonNull AuthPigeonFirebaseApp app, @NonNull VoidResult result); + + /** The codec used by FirebaseAuthHostApi. */ + static @NonNull MessageCodec getCodec() { + return PigeonCodec.INSTANCE; + } + + /** + * Sets up an instance of `FirebaseAuthHostApi` to handle messages through the + * `binaryMessenger`. + */ + static void setUp(@NonNull BinaryMessenger binaryMessenger, @Nullable FirebaseAuthHostApi api) { + setUp(binaryMessenger, "", api); + } + + static void setUp( + @NonNull BinaryMessenger binaryMessenger, + @NonNull String messageChannelSuffix, + @Nullable FirebaseAuthHostApi api) { + messageChannelSuffix = messageChannelSuffix.isEmpty() ? "" : "." + messageChannelSuffix; + { + BasicMessageChannel channel = + new BasicMessageChannel<>( + binaryMessenger, + "dev.flutter.pigeon.firebase_auth_platform_interface.FirebaseAuthHostApi.registerIdTokenListener" + + messageChannelSuffix, + getCodec()); + if (api != null) { + channel.setMessageHandler( + (message, reply) -> { + ArrayList wrapped = new ArrayList<>(); + ArrayList args = (ArrayList) message; + AuthPigeonFirebaseApp appArg = (AuthPigeonFirebaseApp) args.get(0); + Result resultCallback = + new Result() { + public void success(String result) { + wrapped.add(0, result); + reply.reply(wrapped); + } + + public void error(Throwable error) { + ArrayList wrappedError = wrapError(error); + reply.reply(wrappedError); + } + }; + + api.registerIdTokenListener(appArg, resultCallback); + }); + } else { + channel.setMessageHandler(null); + } + } + { + BasicMessageChannel channel = + new BasicMessageChannel<>( + binaryMessenger, + "dev.flutter.pigeon.firebase_auth_platform_interface.FirebaseAuthHostApi.registerAuthStateListener" + + messageChannelSuffix, + getCodec()); + if (api != null) { + channel.setMessageHandler( + (message, reply) -> { + ArrayList wrapped = new ArrayList<>(); + ArrayList args = (ArrayList) message; + AuthPigeonFirebaseApp appArg = (AuthPigeonFirebaseApp) args.get(0); + Result resultCallback = + new Result() { + public void success(String result) { + wrapped.add(0, result); + reply.reply(wrapped); + } + + public void error(Throwable error) { + ArrayList wrappedError = wrapError(error); + reply.reply(wrappedError); + } + }; + + api.registerAuthStateListener(appArg, resultCallback); + }); + } else { + channel.setMessageHandler(null); + } + } + { + BasicMessageChannel channel = + new BasicMessageChannel<>( + binaryMessenger, + "dev.flutter.pigeon.firebase_auth_platform_interface.FirebaseAuthHostApi.useEmulator" + + messageChannelSuffix, + getCodec()); + if (api != null) { + channel.setMessageHandler( + (message, reply) -> { + ArrayList wrapped = new ArrayList<>(); + ArrayList args = (ArrayList) message; + AuthPigeonFirebaseApp appArg = (AuthPigeonFirebaseApp) args.get(0); + String hostArg = (String) args.get(1); + Long portArg = (Long) args.get(2); + VoidResult resultCallback = + new VoidResult() { + public void success() { + wrapped.add(0, null); + reply.reply(wrapped); + } + + public void error(Throwable error) { + ArrayList wrappedError = wrapError(error); + reply.reply(wrappedError); + } + }; + + api.useEmulator(appArg, hostArg, portArg, resultCallback); + }); + } else { + channel.setMessageHandler(null); + } + } + { + BasicMessageChannel channel = + new BasicMessageChannel<>( + binaryMessenger, + "dev.flutter.pigeon.firebase_auth_platform_interface.FirebaseAuthHostApi.applyActionCode" + + messageChannelSuffix, + getCodec()); + if (api != null) { + channel.setMessageHandler( + (message, reply) -> { + ArrayList wrapped = new ArrayList<>(); + ArrayList args = (ArrayList) message; + AuthPigeonFirebaseApp appArg = (AuthPigeonFirebaseApp) args.get(0); + String codeArg = (String) args.get(1); + VoidResult resultCallback = + new VoidResult() { + public void success() { + wrapped.add(0, null); + reply.reply(wrapped); + } + + public void error(Throwable error) { + ArrayList wrappedError = wrapError(error); + reply.reply(wrappedError); + } + }; + + api.applyActionCode(appArg, codeArg, resultCallback); + }); + } else { + channel.setMessageHandler(null); + } + } + { + BasicMessageChannel channel = + new BasicMessageChannel<>( + binaryMessenger, + "dev.flutter.pigeon.firebase_auth_platform_interface.FirebaseAuthHostApi.checkActionCode" + + messageChannelSuffix, + getCodec()); + if (api != null) { + channel.setMessageHandler( + (message, reply) -> { + ArrayList wrapped = new ArrayList<>(); + ArrayList args = (ArrayList) message; + AuthPigeonFirebaseApp appArg = (AuthPigeonFirebaseApp) args.get(0); + String codeArg = (String) args.get(1); + Result resultCallback = + new Result() { + public void success(InternalActionCodeInfo result) { + wrapped.add(0, result); + reply.reply(wrapped); + } + + public void error(Throwable error) { + ArrayList wrappedError = wrapError(error); + reply.reply(wrappedError); + } + }; + + api.checkActionCode(appArg, codeArg, resultCallback); + }); + } else { + channel.setMessageHandler(null); + } + } + { + BasicMessageChannel channel = + new BasicMessageChannel<>( + binaryMessenger, + "dev.flutter.pigeon.firebase_auth_platform_interface.FirebaseAuthHostApi.confirmPasswordReset" + + messageChannelSuffix, + getCodec()); + if (api != null) { + channel.setMessageHandler( + (message, reply) -> { + ArrayList wrapped = new ArrayList<>(); + ArrayList args = (ArrayList) message; + AuthPigeonFirebaseApp appArg = (AuthPigeonFirebaseApp) args.get(0); + String codeArg = (String) args.get(1); + String newPasswordArg = (String) args.get(2); + VoidResult resultCallback = + new VoidResult() { + public void success() { + wrapped.add(0, null); + reply.reply(wrapped); + } + + public void error(Throwable error) { + ArrayList wrappedError = wrapError(error); + reply.reply(wrappedError); + } + }; + + api.confirmPasswordReset(appArg, codeArg, newPasswordArg, resultCallback); + }); + } else { + channel.setMessageHandler(null); + } + } + { + BasicMessageChannel channel = + new BasicMessageChannel<>( + binaryMessenger, + "dev.flutter.pigeon.firebase_auth_platform_interface.FirebaseAuthHostApi.createUserWithEmailAndPassword" + + messageChannelSuffix, + getCodec()); + if (api != null) { + channel.setMessageHandler( + (message, reply) -> { + ArrayList wrapped = new ArrayList<>(); + ArrayList args = (ArrayList) message; + AuthPigeonFirebaseApp appArg = (AuthPigeonFirebaseApp) args.get(0); + String emailArg = (String) args.get(1); + String passwordArg = (String) args.get(2); + Result resultCallback = + new Result() { + public void success(InternalUserCredential result) { + wrapped.add(0, result); + reply.reply(wrapped); + } + + public void error(Throwable error) { + ArrayList wrappedError = wrapError(error); + reply.reply(wrappedError); + } + }; + + api.createUserWithEmailAndPassword(appArg, emailArg, passwordArg, resultCallback); + }); + } else { + channel.setMessageHandler(null); + } + } + { + BasicMessageChannel channel = + new BasicMessageChannel<>( + binaryMessenger, + "dev.flutter.pigeon.firebase_auth_platform_interface.FirebaseAuthHostApi.signInAnonymously" + + messageChannelSuffix, + getCodec()); + if (api != null) { + channel.setMessageHandler( + (message, reply) -> { + ArrayList wrapped = new ArrayList<>(); + ArrayList args = (ArrayList) message; + AuthPigeonFirebaseApp appArg = (AuthPigeonFirebaseApp) args.get(0); + Result resultCallback = + new Result() { + public void success(InternalUserCredential result) { + wrapped.add(0, result); + reply.reply(wrapped); + } + + public void error(Throwable error) { + ArrayList wrappedError = wrapError(error); + reply.reply(wrappedError); + } + }; + + api.signInAnonymously(appArg, resultCallback); + }); + } else { + channel.setMessageHandler(null); + } + } + { + BasicMessageChannel channel = + new BasicMessageChannel<>( + binaryMessenger, + "dev.flutter.pigeon.firebase_auth_platform_interface.FirebaseAuthHostApi.signInWithCredential" + + messageChannelSuffix, + getCodec()); + if (api != null) { + channel.setMessageHandler( + (message, reply) -> { + ArrayList wrapped = new ArrayList<>(); + ArrayList args = (ArrayList) message; + AuthPigeonFirebaseApp appArg = (AuthPigeonFirebaseApp) args.get(0); + Map inputArg = (Map) args.get(1); + Result resultCallback = + new Result() { + public void success(InternalUserCredential result) { + wrapped.add(0, result); + reply.reply(wrapped); + } + + public void error(Throwable error) { + ArrayList wrappedError = wrapError(error); + reply.reply(wrappedError); + } + }; + + api.signInWithCredential(appArg, inputArg, resultCallback); + }); + } else { + channel.setMessageHandler(null); + } + } + { + BasicMessageChannel channel = + new BasicMessageChannel<>( + binaryMessenger, + "dev.flutter.pigeon.firebase_auth_platform_interface.FirebaseAuthHostApi.signInWithCustomToken" + + messageChannelSuffix, + getCodec()); + if (api != null) { + channel.setMessageHandler( + (message, reply) -> { + ArrayList wrapped = new ArrayList<>(); + ArrayList args = (ArrayList) message; + AuthPigeonFirebaseApp appArg = (AuthPigeonFirebaseApp) args.get(0); + String tokenArg = (String) args.get(1); + Result resultCallback = + new Result() { + public void success(InternalUserCredential result) { + wrapped.add(0, result); + reply.reply(wrapped); + } + + public void error(Throwable error) { + ArrayList wrappedError = wrapError(error); + reply.reply(wrappedError); + } + }; + + api.signInWithCustomToken(appArg, tokenArg, resultCallback); + }); + } else { + channel.setMessageHandler(null); + } + } + { + BasicMessageChannel channel = + new BasicMessageChannel<>( + binaryMessenger, + "dev.flutter.pigeon.firebase_auth_platform_interface.FirebaseAuthHostApi.signInWithEmailAndPassword" + + messageChannelSuffix, + getCodec()); + if (api != null) { + channel.setMessageHandler( + (message, reply) -> { + ArrayList wrapped = new ArrayList<>(); + ArrayList args = (ArrayList) message; + AuthPigeonFirebaseApp appArg = (AuthPigeonFirebaseApp) args.get(0); + String emailArg = (String) args.get(1); + String passwordArg = (String) args.get(2); + Result resultCallback = + new Result() { + public void success(InternalUserCredential result) { + wrapped.add(0, result); + reply.reply(wrapped); + } + + public void error(Throwable error) { + ArrayList wrappedError = wrapError(error); + reply.reply(wrappedError); + } + }; + + api.signInWithEmailAndPassword(appArg, emailArg, passwordArg, resultCallback); + }); + } else { + channel.setMessageHandler(null); + } + } + { + BasicMessageChannel channel = + new BasicMessageChannel<>( + binaryMessenger, + "dev.flutter.pigeon.firebase_auth_platform_interface.FirebaseAuthHostApi.signInWithEmailLink" + + messageChannelSuffix, + getCodec()); + if (api != null) { + channel.setMessageHandler( + (message, reply) -> { + ArrayList wrapped = new ArrayList<>(); + ArrayList args = (ArrayList) message; + AuthPigeonFirebaseApp appArg = (AuthPigeonFirebaseApp) args.get(0); + String emailArg = (String) args.get(1); + String emailLinkArg = (String) args.get(2); + Result resultCallback = + new Result() { + public void success(InternalUserCredential result) { + wrapped.add(0, result); + reply.reply(wrapped); + } + + public void error(Throwable error) { + ArrayList wrappedError = wrapError(error); + reply.reply(wrappedError); + } + }; + + api.signInWithEmailLink(appArg, emailArg, emailLinkArg, resultCallback); + }); + } else { + channel.setMessageHandler(null); + } + } + { + BasicMessageChannel channel = + new BasicMessageChannel<>( + binaryMessenger, + "dev.flutter.pigeon.firebase_auth_platform_interface.FirebaseAuthHostApi.signInWithProvider" + + messageChannelSuffix, + getCodec()); + if (api != null) { + channel.setMessageHandler( + (message, reply) -> { + ArrayList wrapped = new ArrayList<>(); + ArrayList args = (ArrayList) message; + AuthPigeonFirebaseApp appArg = (AuthPigeonFirebaseApp) args.get(0); + InternalSignInProvider signInProviderArg = (InternalSignInProvider) args.get(1); + Result resultCallback = + new Result() { + public void success(InternalUserCredential result) { + wrapped.add(0, result); + reply.reply(wrapped); + } + + public void error(Throwable error) { + ArrayList wrappedError = wrapError(error); + reply.reply(wrappedError); + } + }; + + api.signInWithProvider(appArg, signInProviderArg, resultCallback); + }); + } else { + channel.setMessageHandler(null); + } + } + { + BasicMessageChannel channel = + new BasicMessageChannel<>( + binaryMessenger, + "dev.flutter.pigeon.firebase_auth_platform_interface.FirebaseAuthHostApi.signOut" + + messageChannelSuffix, + getCodec()); + if (api != null) { + channel.setMessageHandler( + (message, reply) -> { + ArrayList wrapped = new ArrayList<>(); + ArrayList args = (ArrayList) message; + AuthPigeonFirebaseApp appArg = (AuthPigeonFirebaseApp) args.get(0); + VoidResult resultCallback = + new VoidResult() { + public void success() { + wrapped.add(0, null); + reply.reply(wrapped); + } + + public void error(Throwable error) { + ArrayList wrappedError = wrapError(error); + reply.reply(wrappedError); + } + }; + + api.signOut(appArg, resultCallback); + }); + } else { + channel.setMessageHandler(null); + } + } + { + BasicMessageChannel channel = + new BasicMessageChannel<>( + binaryMessenger, + "dev.flutter.pigeon.firebase_auth_platform_interface.FirebaseAuthHostApi.fetchSignInMethodsForEmail" + + messageChannelSuffix, + getCodec()); + if (api != null) { + channel.setMessageHandler( + (message, reply) -> { + ArrayList wrapped = new ArrayList<>(); + ArrayList args = (ArrayList) message; + AuthPigeonFirebaseApp appArg = (AuthPigeonFirebaseApp) args.get(0); + String emailArg = (String) args.get(1); + Result> resultCallback = + new Result>() { + public void success(List result) { + wrapped.add(0, result); + reply.reply(wrapped); + } + + public void error(Throwable error) { + ArrayList wrappedError = wrapError(error); + reply.reply(wrappedError); + } + }; + + api.fetchSignInMethodsForEmail(appArg, emailArg, resultCallback); + }); + } else { + channel.setMessageHandler(null); + } + } + { + BasicMessageChannel channel = + new BasicMessageChannel<>( + binaryMessenger, + "dev.flutter.pigeon.firebase_auth_platform_interface.FirebaseAuthHostApi.sendPasswordResetEmail" + + messageChannelSuffix, + getCodec()); + if (api != null) { + channel.setMessageHandler( + (message, reply) -> { + ArrayList wrapped = new ArrayList<>(); + ArrayList args = (ArrayList) message; + AuthPigeonFirebaseApp appArg = (AuthPigeonFirebaseApp) args.get(0); + String emailArg = (String) args.get(1); + InternalActionCodeSettings actionCodeSettingsArg = + (InternalActionCodeSettings) args.get(2); + VoidResult resultCallback = + new VoidResult() { + public void success() { + wrapped.add(0, null); + reply.reply(wrapped); + } + + public void error(Throwable error) { + ArrayList wrappedError = wrapError(error); + reply.reply(wrappedError); + } + }; + + api.sendPasswordResetEmail(appArg, emailArg, actionCodeSettingsArg, resultCallback); + }); + } else { + channel.setMessageHandler(null); + } + } + { + BasicMessageChannel channel = + new BasicMessageChannel<>( + binaryMessenger, + "dev.flutter.pigeon.firebase_auth_platform_interface.FirebaseAuthHostApi.sendSignInLinkToEmail" + + messageChannelSuffix, + getCodec()); + if (api != null) { + channel.setMessageHandler( + (message, reply) -> { + ArrayList wrapped = new ArrayList<>(); + ArrayList args = (ArrayList) message; + AuthPigeonFirebaseApp appArg = (AuthPigeonFirebaseApp) args.get(0); + String emailArg = (String) args.get(1); + InternalActionCodeSettings actionCodeSettingsArg = + (InternalActionCodeSettings) args.get(2); + VoidResult resultCallback = + new VoidResult() { + public void success() { + wrapped.add(0, null); + reply.reply(wrapped); + } + + public void error(Throwable error) { + ArrayList wrappedError = wrapError(error); + reply.reply(wrappedError); + } + }; + + api.sendSignInLinkToEmail(appArg, emailArg, actionCodeSettingsArg, resultCallback); + }); + } else { + channel.setMessageHandler(null); + } + } + { + BasicMessageChannel channel = + new BasicMessageChannel<>( + binaryMessenger, + "dev.flutter.pigeon.firebase_auth_platform_interface.FirebaseAuthHostApi.setLanguageCode" + + messageChannelSuffix, + getCodec()); + if (api != null) { + channel.setMessageHandler( + (message, reply) -> { + ArrayList wrapped = new ArrayList<>(); + ArrayList args = (ArrayList) message; + AuthPigeonFirebaseApp appArg = (AuthPigeonFirebaseApp) args.get(0); + String languageCodeArg = (String) args.get(1); + Result resultCallback = + new Result() { + public void success(String result) { + wrapped.add(0, result); + reply.reply(wrapped); + } + + public void error(Throwable error) { + ArrayList wrappedError = wrapError(error); + reply.reply(wrappedError); + } + }; + + api.setLanguageCode(appArg, languageCodeArg, resultCallback); + }); + } else { + channel.setMessageHandler(null); + } + } + { + BasicMessageChannel channel = + new BasicMessageChannel<>( + binaryMessenger, + "dev.flutter.pigeon.firebase_auth_platform_interface.FirebaseAuthHostApi.setSettings" + + messageChannelSuffix, + getCodec()); + if (api != null) { + channel.setMessageHandler( + (message, reply) -> { + ArrayList wrapped = new ArrayList<>(); + ArrayList args = (ArrayList) message; + AuthPigeonFirebaseApp appArg = (AuthPigeonFirebaseApp) args.get(0); + InternalFirebaseAuthSettings settingsArg = + (InternalFirebaseAuthSettings) args.get(1); + VoidResult resultCallback = + new VoidResult() { + public void success() { + wrapped.add(0, null); + reply.reply(wrapped); + } + + public void error(Throwable error) { + ArrayList wrappedError = wrapError(error); + reply.reply(wrappedError); + } + }; + + api.setSettings(appArg, settingsArg, resultCallback); + }); + } else { + channel.setMessageHandler(null); + } + } + { + BasicMessageChannel channel = + new BasicMessageChannel<>( + binaryMessenger, + "dev.flutter.pigeon.firebase_auth_platform_interface.FirebaseAuthHostApi.verifyPasswordResetCode" + + messageChannelSuffix, + getCodec()); + if (api != null) { + channel.setMessageHandler( + (message, reply) -> { + ArrayList wrapped = new ArrayList<>(); + ArrayList args = (ArrayList) message; + AuthPigeonFirebaseApp appArg = (AuthPigeonFirebaseApp) args.get(0); + String codeArg = (String) args.get(1); + Result resultCallback = + new Result() { + public void success(String result) { + wrapped.add(0, result); + reply.reply(wrapped); + } + + public void error(Throwable error) { + ArrayList wrappedError = wrapError(error); + reply.reply(wrappedError); + } + }; + + api.verifyPasswordResetCode(appArg, codeArg, resultCallback); + }); + } else { + channel.setMessageHandler(null); + } + } + { + BasicMessageChannel channel = + new BasicMessageChannel<>( + binaryMessenger, + "dev.flutter.pigeon.firebase_auth_platform_interface.FirebaseAuthHostApi.verifyPhoneNumber" + + messageChannelSuffix, + getCodec()); + if (api != null) { + channel.setMessageHandler( + (message, reply) -> { + ArrayList wrapped = new ArrayList<>(); + ArrayList args = (ArrayList) message; + AuthPigeonFirebaseApp appArg = (AuthPigeonFirebaseApp) args.get(0); + InternalVerifyPhoneNumberRequest requestArg = + (InternalVerifyPhoneNumberRequest) args.get(1); + Result resultCallback = + new Result() { + public void success(String result) { + wrapped.add(0, result); + reply.reply(wrapped); + } + + public void error(Throwable error) { + ArrayList wrappedError = wrapError(error); + reply.reply(wrappedError); + } + }; + + api.verifyPhoneNumber(appArg, requestArg, resultCallback); + }); + } else { + channel.setMessageHandler(null); + } + } + { + BasicMessageChannel channel = + new BasicMessageChannel<>( + binaryMessenger, + "dev.flutter.pigeon.firebase_auth_platform_interface.FirebaseAuthHostApi.revokeTokenWithAuthorizationCode" + + messageChannelSuffix, + getCodec()); + if (api != null) { + channel.setMessageHandler( + (message, reply) -> { + ArrayList wrapped = new ArrayList<>(); + ArrayList args = (ArrayList) message; + AuthPigeonFirebaseApp appArg = (AuthPigeonFirebaseApp) args.get(0); + String authorizationCodeArg = (String) args.get(1); + VoidResult resultCallback = + new VoidResult() { + public void success() { + wrapped.add(0, null); + reply.reply(wrapped); + } + + public void error(Throwable error) { + ArrayList wrappedError = wrapError(error); + reply.reply(wrappedError); + } + }; + + api.revokeTokenWithAuthorizationCode(appArg, authorizationCodeArg, resultCallback); + }); + } else { + channel.setMessageHandler(null); + } + } + { + BasicMessageChannel channel = + new BasicMessageChannel<>( + binaryMessenger, + "dev.flutter.pigeon.firebase_auth_platform_interface.FirebaseAuthHostApi.revokeAccessToken" + + messageChannelSuffix, + getCodec()); + if (api != null) { + channel.setMessageHandler( + (message, reply) -> { + ArrayList wrapped = new ArrayList<>(); + ArrayList args = (ArrayList) message; + AuthPigeonFirebaseApp appArg = (AuthPigeonFirebaseApp) args.get(0); + String accessTokenArg = (String) args.get(1); + VoidResult resultCallback = + new VoidResult() { + public void success() { + wrapped.add(0, null); + reply.reply(wrapped); + } + + public void error(Throwable error) { + ArrayList wrappedError = wrapError(error); + reply.reply(wrappedError); + } + }; + + api.revokeAccessToken(appArg, accessTokenArg, resultCallback); + }); + } else { + channel.setMessageHandler(null); + } + } + { + BasicMessageChannel channel = + new BasicMessageChannel<>( + binaryMessenger, + "dev.flutter.pigeon.firebase_auth_platform_interface.FirebaseAuthHostApi.initializeRecaptchaConfig" + + messageChannelSuffix, + getCodec()); + if (api != null) { + channel.setMessageHandler( + (message, reply) -> { + ArrayList wrapped = new ArrayList<>(); + ArrayList args = (ArrayList) message; + AuthPigeonFirebaseApp appArg = (AuthPigeonFirebaseApp) args.get(0); + VoidResult resultCallback = + new VoidResult() { + public void success() { + wrapped.add(0, null); + reply.reply(wrapped); + } + + public void error(Throwable error) { + ArrayList wrappedError = wrapError(error); + reply.reply(wrappedError); + } + }; + + api.initializeRecaptchaConfig(appArg, resultCallback); + }); + } else { + channel.setMessageHandler(null); + } + } + } + } + + /** Generated interface from Pigeon that represents a handler of messages from Flutter. */ + public interface FirebaseAuthUserHostApi { + + void delete(@NonNull AuthPigeonFirebaseApp app, @NonNull VoidResult result); + + void getIdToken( + @NonNull AuthPigeonFirebaseApp app, + @NonNull Boolean forceRefresh, + @NonNull Result result); + + void linkWithCredential( + @NonNull AuthPigeonFirebaseApp app, + @NonNull Map input, + @NonNull Result result); + + void linkWithProvider( + @NonNull AuthPigeonFirebaseApp app, + @NonNull InternalSignInProvider signInProvider, + @NonNull Result result); + + void reauthenticateWithCredential( + @NonNull AuthPigeonFirebaseApp app, + @NonNull Map input, + @NonNull Result result); + + void reauthenticateWithProvider( + @NonNull AuthPigeonFirebaseApp app, + @NonNull InternalSignInProvider signInProvider, + @NonNull Result result); + + void reload(@NonNull AuthPigeonFirebaseApp app, @NonNull Result result); + + void sendEmailVerification( + @NonNull AuthPigeonFirebaseApp app, + @Nullable InternalActionCodeSettings actionCodeSettings, + @NonNull VoidResult result); + + void unlink( + @NonNull AuthPigeonFirebaseApp app, + @NonNull String providerId, + @NonNull Result result); + + void updateEmail( + @NonNull AuthPigeonFirebaseApp app, + @NonNull String newEmail, + @NonNull Result result); + + void updatePassword( + @NonNull AuthPigeonFirebaseApp app, + @NonNull String newPassword, + @NonNull Result result); + + void updatePhoneNumber( + @NonNull AuthPigeonFirebaseApp app, + @NonNull Map input, + @NonNull Result result); + + void updateProfile( + @NonNull AuthPigeonFirebaseApp app, + @NonNull InternalUserProfile profile, + @NonNull Result result); + + void verifyBeforeUpdateEmail( + @NonNull AuthPigeonFirebaseApp app, + @NonNull String newEmail, + @Nullable InternalActionCodeSettings actionCodeSettings, + @NonNull VoidResult result); + + /** The codec used by FirebaseAuthUserHostApi. */ + static @NonNull MessageCodec getCodec() { + return PigeonCodec.INSTANCE; + } + + /** + * Sets up an instance of `FirebaseAuthUserHostApi` to handle messages through the + * `binaryMessenger`. + */ + static void setUp( + @NonNull BinaryMessenger binaryMessenger, @Nullable FirebaseAuthUserHostApi api) { + setUp(binaryMessenger, "", api); + } + + static void setUp( + @NonNull BinaryMessenger binaryMessenger, + @NonNull String messageChannelSuffix, + @Nullable FirebaseAuthUserHostApi api) { + messageChannelSuffix = messageChannelSuffix.isEmpty() ? "" : "." + messageChannelSuffix; + { + BasicMessageChannel channel = + new BasicMessageChannel<>( + binaryMessenger, + "dev.flutter.pigeon.firebase_auth_platform_interface.FirebaseAuthUserHostApi.delete" + + messageChannelSuffix, + getCodec()); + if (api != null) { + channel.setMessageHandler( + (message, reply) -> { + ArrayList wrapped = new ArrayList<>(); + ArrayList args = (ArrayList) message; + AuthPigeonFirebaseApp appArg = (AuthPigeonFirebaseApp) args.get(0); + VoidResult resultCallback = + new VoidResult() { + public void success() { + wrapped.add(0, null); + reply.reply(wrapped); + } + + public void error(Throwable error) { + ArrayList wrappedError = wrapError(error); + reply.reply(wrappedError); + } + }; + + api.delete(appArg, resultCallback); + }); + } else { + channel.setMessageHandler(null); + } + } + { + BasicMessageChannel channel = + new BasicMessageChannel<>( + binaryMessenger, + "dev.flutter.pigeon.firebase_auth_platform_interface.FirebaseAuthUserHostApi.getIdToken" + + messageChannelSuffix, + getCodec()); + if (api != null) { + channel.setMessageHandler( + (message, reply) -> { + ArrayList wrapped = new ArrayList<>(); + ArrayList args = (ArrayList) message; + AuthPigeonFirebaseApp appArg = (AuthPigeonFirebaseApp) args.get(0); + Boolean forceRefreshArg = (Boolean) args.get(1); + Result resultCallback = + new Result() { + public void success(InternalIdTokenResult result) { + wrapped.add(0, result); + reply.reply(wrapped); + } + + public void error(Throwable error) { + ArrayList wrappedError = wrapError(error); + reply.reply(wrappedError); + } + }; + + api.getIdToken(appArg, forceRefreshArg, resultCallback); + }); + } else { + channel.setMessageHandler(null); + } + } + { + BasicMessageChannel channel = + new BasicMessageChannel<>( + binaryMessenger, + "dev.flutter.pigeon.firebase_auth_platform_interface.FirebaseAuthUserHostApi.linkWithCredential" + + messageChannelSuffix, + getCodec()); + if (api != null) { + channel.setMessageHandler( + (message, reply) -> { + ArrayList wrapped = new ArrayList<>(); + ArrayList args = (ArrayList) message; + AuthPigeonFirebaseApp appArg = (AuthPigeonFirebaseApp) args.get(0); + Map inputArg = (Map) args.get(1); + Result resultCallback = + new Result() { + public void success(InternalUserCredential result) { + wrapped.add(0, result); + reply.reply(wrapped); + } + + public void error(Throwable error) { + ArrayList wrappedError = wrapError(error); + reply.reply(wrappedError); + } + }; + + api.linkWithCredential(appArg, inputArg, resultCallback); + }); + } else { + channel.setMessageHandler(null); + } + } + { + BasicMessageChannel channel = + new BasicMessageChannel<>( + binaryMessenger, + "dev.flutter.pigeon.firebase_auth_platform_interface.FirebaseAuthUserHostApi.linkWithProvider" + + messageChannelSuffix, + getCodec()); + if (api != null) { + channel.setMessageHandler( + (message, reply) -> { + ArrayList wrapped = new ArrayList<>(); + ArrayList args = (ArrayList) message; + AuthPigeonFirebaseApp appArg = (AuthPigeonFirebaseApp) args.get(0); + InternalSignInProvider signInProviderArg = (InternalSignInProvider) args.get(1); + Result resultCallback = + new Result() { + public void success(InternalUserCredential result) { + wrapped.add(0, result); + reply.reply(wrapped); + } + + public void error(Throwable error) { + ArrayList wrappedError = wrapError(error); + reply.reply(wrappedError); + } + }; + + api.linkWithProvider(appArg, signInProviderArg, resultCallback); + }); + } else { + channel.setMessageHandler(null); + } + } + { + BasicMessageChannel channel = + new BasicMessageChannel<>( + binaryMessenger, + "dev.flutter.pigeon.firebase_auth_platform_interface.FirebaseAuthUserHostApi.reauthenticateWithCredential" + + messageChannelSuffix, + getCodec()); + if (api != null) { + channel.setMessageHandler( + (message, reply) -> { + ArrayList wrapped = new ArrayList<>(); + ArrayList args = (ArrayList) message; + AuthPigeonFirebaseApp appArg = (AuthPigeonFirebaseApp) args.get(0); + Map inputArg = (Map) args.get(1); + Result resultCallback = + new Result() { + public void success(InternalUserCredential result) { + wrapped.add(0, result); + reply.reply(wrapped); + } + + public void error(Throwable error) { + ArrayList wrappedError = wrapError(error); + reply.reply(wrappedError); + } + }; + + api.reauthenticateWithCredential(appArg, inputArg, resultCallback); + }); + } else { + channel.setMessageHandler(null); + } + } + { + BasicMessageChannel channel = + new BasicMessageChannel<>( + binaryMessenger, + "dev.flutter.pigeon.firebase_auth_platform_interface.FirebaseAuthUserHostApi.reauthenticateWithProvider" + + messageChannelSuffix, + getCodec()); + if (api != null) { + channel.setMessageHandler( + (message, reply) -> { + ArrayList wrapped = new ArrayList<>(); + ArrayList args = (ArrayList) message; + AuthPigeonFirebaseApp appArg = (AuthPigeonFirebaseApp) args.get(0); + InternalSignInProvider signInProviderArg = (InternalSignInProvider) args.get(1); + Result resultCallback = + new Result() { + public void success(InternalUserCredential result) { + wrapped.add(0, result); + reply.reply(wrapped); + } + + public void error(Throwable error) { + ArrayList wrappedError = wrapError(error); + reply.reply(wrappedError); + } + }; + + api.reauthenticateWithProvider(appArg, signInProviderArg, resultCallback); + }); + } else { + channel.setMessageHandler(null); + } + } + { + BasicMessageChannel channel = + new BasicMessageChannel<>( + binaryMessenger, + "dev.flutter.pigeon.firebase_auth_platform_interface.FirebaseAuthUserHostApi.reload" + + messageChannelSuffix, + getCodec()); + if (api != null) { + channel.setMessageHandler( + (message, reply) -> { + ArrayList wrapped = new ArrayList<>(); + ArrayList args = (ArrayList) message; + AuthPigeonFirebaseApp appArg = (AuthPigeonFirebaseApp) args.get(0); + Result resultCallback = + new Result() { + public void success(InternalUserDetails result) { + wrapped.add(0, result); + reply.reply(wrapped); + } + + public void error(Throwable error) { + ArrayList wrappedError = wrapError(error); + reply.reply(wrappedError); + } + }; + + api.reload(appArg, resultCallback); + }); + } else { + channel.setMessageHandler(null); + } + } + { + BasicMessageChannel channel = + new BasicMessageChannel<>( + binaryMessenger, + "dev.flutter.pigeon.firebase_auth_platform_interface.FirebaseAuthUserHostApi.sendEmailVerification" + + messageChannelSuffix, + getCodec()); + if (api != null) { + channel.setMessageHandler( + (message, reply) -> { + ArrayList wrapped = new ArrayList<>(); + ArrayList args = (ArrayList) message; + AuthPigeonFirebaseApp appArg = (AuthPigeonFirebaseApp) args.get(0); + InternalActionCodeSettings actionCodeSettingsArg = + (InternalActionCodeSettings) args.get(1); + VoidResult resultCallback = + new VoidResult() { + public void success() { + wrapped.add(0, null); + reply.reply(wrapped); + } + + public void error(Throwable error) { + ArrayList wrappedError = wrapError(error); + reply.reply(wrappedError); + } + }; + + api.sendEmailVerification(appArg, actionCodeSettingsArg, resultCallback); + }); + } else { + channel.setMessageHandler(null); + } + } + { + BasicMessageChannel channel = + new BasicMessageChannel<>( + binaryMessenger, + "dev.flutter.pigeon.firebase_auth_platform_interface.FirebaseAuthUserHostApi.unlink" + + messageChannelSuffix, + getCodec()); + if (api != null) { + channel.setMessageHandler( + (message, reply) -> { + ArrayList wrapped = new ArrayList<>(); + ArrayList args = (ArrayList) message; + AuthPigeonFirebaseApp appArg = (AuthPigeonFirebaseApp) args.get(0); + String providerIdArg = (String) args.get(1); + Result resultCallback = + new Result() { + public void success(InternalUserCredential result) { + wrapped.add(0, result); + reply.reply(wrapped); + } + + public void error(Throwable error) { + ArrayList wrappedError = wrapError(error); + reply.reply(wrappedError); + } + }; + + api.unlink(appArg, providerIdArg, resultCallback); + }); + } else { + channel.setMessageHandler(null); + } + } + { + BasicMessageChannel channel = + new BasicMessageChannel<>( + binaryMessenger, + "dev.flutter.pigeon.firebase_auth_platform_interface.FirebaseAuthUserHostApi.updateEmail" + + messageChannelSuffix, + getCodec()); + if (api != null) { + channel.setMessageHandler( + (message, reply) -> { + ArrayList wrapped = new ArrayList<>(); + ArrayList args = (ArrayList) message; + AuthPigeonFirebaseApp appArg = (AuthPigeonFirebaseApp) args.get(0); + String newEmailArg = (String) args.get(1); + Result resultCallback = + new Result() { + public void success(InternalUserDetails result) { + wrapped.add(0, result); + reply.reply(wrapped); + } + + public void error(Throwable error) { + ArrayList wrappedError = wrapError(error); + reply.reply(wrappedError); + } + }; + + api.updateEmail(appArg, newEmailArg, resultCallback); + }); + } else { + channel.setMessageHandler(null); + } + } + { + BasicMessageChannel channel = + new BasicMessageChannel<>( + binaryMessenger, + "dev.flutter.pigeon.firebase_auth_platform_interface.FirebaseAuthUserHostApi.updatePassword" + + messageChannelSuffix, + getCodec()); + if (api != null) { + channel.setMessageHandler( + (message, reply) -> { + ArrayList wrapped = new ArrayList<>(); + ArrayList args = (ArrayList) message; + AuthPigeonFirebaseApp appArg = (AuthPigeonFirebaseApp) args.get(0); + String newPasswordArg = (String) args.get(1); + Result resultCallback = + new Result() { + public void success(InternalUserDetails result) { + wrapped.add(0, result); + reply.reply(wrapped); + } + + public void error(Throwable error) { + ArrayList wrappedError = wrapError(error); + reply.reply(wrappedError); + } + }; + + api.updatePassword(appArg, newPasswordArg, resultCallback); + }); + } else { + channel.setMessageHandler(null); + } + } + { + BasicMessageChannel channel = + new BasicMessageChannel<>( + binaryMessenger, + "dev.flutter.pigeon.firebase_auth_platform_interface.FirebaseAuthUserHostApi.updatePhoneNumber" + + messageChannelSuffix, + getCodec()); + if (api != null) { + channel.setMessageHandler( + (message, reply) -> { + ArrayList wrapped = new ArrayList<>(); + ArrayList args = (ArrayList) message; + AuthPigeonFirebaseApp appArg = (AuthPigeonFirebaseApp) args.get(0); + Map inputArg = (Map) args.get(1); + Result resultCallback = + new Result() { + public void success(InternalUserDetails result) { + wrapped.add(0, result); + reply.reply(wrapped); + } + + public void error(Throwable error) { + ArrayList wrappedError = wrapError(error); + reply.reply(wrappedError); + } + }; + + api.updatePhoneNumber(appArg, inputArg, resultCallback); + }); + } else { + channel.setMessageHandler(null); + } + } + { + BasicMessageChannel channel = + new BasicMessageChannel<>( + binaryMessenger, + "dev.flutter.pigeon.firebase_auth_platform_interface.FirebaseAuthUserHostApi.updateProfile" + + messageChannelSuffix, + getCodec()); + if (api != null) { + channel.setMessageHandler( + (message, reply) -> { + ArrayList wrapped = new ArrayList<>(); + ArrayList args = (ArrayList) message; + AuthPigeonFirebaseApp appArg = (AuthPigeonFirebaseApp) args.get(0); + InternalUserProfile profileArg = (InternalUserProfile) args.get(1); + Result resultCallback = + new Result() { + public void success(InternalUserDetails result) { + wrapped.add(0, result); + reply.reply(wrapped); + } + + public void error(Throwable error) { + ArrayList wrappedError = wrapError(error); + reply.reply(wrappedError); + } + }; + + api.updateProfile(appArg, profileArg, resultCallback); + }); + } else { + channel.setMessageHandler(null); + } + } + { + BasicMessageChannel channel = + new BasicMessageChannel<>( + binaryMessenger, + "dev.flutter.pigeon.firebase_auth_platform_interface.FirebaseAuthUserHostApi.verifyBeforeUpdateEmail" + + messageChannelSuffix, + getCodec()); + if (api != null) { + channel.setMessageHandler( + (message, reply) -> { + ArrayList wrapped = new ArrayList<>(); + ArrayList args = (ArrayList) message; + AuthPigeonFirebaseApp appArg = (AuthPigeonFirebaseApp) args.get(0); + String newEmailArg = (String) args.get(1); + InternalActionCodeSettings actionCodeSettingsArg = + (InternalActionCodeSettings) args.get(2); + VoidResult resultCallback = + new VoidResult() { + public void success() { + wrapped.add(0, null); + reply.reply(wrapped); + } + + public void error(Throwable error) { + ArrayList wrappedError = wrapError(error); + reply.reply(wrappedError); + } + }; + + api.verifyBeforeUpdateEmail( + appArg, newEmailArg, actionCodeSettingsArg, resultCallback); + }); + } else { + channel.setMessageHandler(null); + } + } + } + } + + /** Generated interface from Pigeon that represents a handler of messages from Flutter. */ + public interface MultiFactorUserHostApi { + + void enrollPhone( + @NonNull AuthPigeonFirebaseApp app, + @NonNull InternalPhoneMultiFactorAssertion assertion, + @Nullable String displayName, + @NonNull VoidResult result); + + void enrollTotp( + @NonNull AuthPigeonFirebaseApp app, + @NonNull String assertionId, + @Nullable String displayName, + @NonNull VoidResult result); + + void getSession( + @NonNull AuthPigeonFirebaseApp app, @NonNull Result result); + + void unenroll( + @NonNull AuthPigeonFirebaseApp app, @NonNull String factorUid, @NonNull VoidResult result); + + void getEnrolledFactors( + @NonNull AuthPigeonFirebaseApp app, @NonNull Result> result); + + /** The codec used by MultiFactorUserHostApi. */ + static @NonNull MessageCodec getCodec() { + return PigeonCodec.INSTANCE; + } + + /** + * Sets up an instance of `MultiFactorUserHostApi` to handle messages through the + * `binaryMessenger`. + */ + static void setUp( + @NonNull BinaryMessenger binaryMessenger, @Nullable MultiFactorUserHostApi api) { + setUp(binaryMessenger, "", api); + } + + static void setUp( + @NonNull BinaryMessenger binaryMessenger, + @NonNull String messageChannelSuffix, + @Nullable MultiFactorUserHostApi api) { + messageChannelSuffix = messageChannelSuffix.isEmpty() ? "" : "." + messageChannelSuffix; + { + BasicMessageChannel channel = + new BasicMessageChannel<>( + binaryMessenger, + "dev.flutter.pigeon.firebase_auth_platform_interface.MultiFactorUserHostApi.enrollPhone" + + messageChannelSuffix, + getCodec()); + if (api != null) { + channel.setMessageHandler( + (message, reply) -> { + ArrayList wrapped = new ArrayList<>(); + ArrayList args = (ArrayList) message; + AuthPigeonFirebaseApp appArg = (AuthPigeonFirebaseApp) args.get(0); + InternalPhoneMultiFactorAssertion assertionArg = + (InternalPhoneMultiFactorAssertion) args.get(1); + String displayNameArg = (String) args.get(2); + VoidResult resultCallback = + new VoidResult() { + public void success() { + wrapped.add(0, null); + reply.reply(wrapped); + } + + public void error(Throwable error) { + ArrayList wrappedError = wrapError(error); + reply.reply(wrappedError); + } + }; + + api.enrollPhone(appArg, assertionArg, displayNameArg, resultCallback); + }); + } else { + channel.setMessageHandler(null); + } + } + { + BasicMessageChannel channel = + new BasicMessageChannel<>( + binaryMessenger, + "dev.flutter.pigeon.firebase_auth_platform_interface.MultiFactorUserHostApi.enrollTotp" + + messageChannelSuffix, + getCodec()); + if (api != null) { + channel.setMessageHandler( + (message, reply) -> { + ArrayList wrapped = new ArrayList<>(); + ArrayList args = (ArrayList) message; + AuthPigeonFirebaseApp appArg = (AuthPigeonFirebaseApp) args.get(0); + String assertionIdArg = (String) args.get(1); + String displayNameArg = (String) args.get(2); + VoidResult resultCallback = + new VoidResult() { + public void success() { + wrapped.add(0, null); + reply.reply(wrapped); + } + + public void error(Throwable error) { + ArrayList wrappedError = wrapError(error); + reply.reply(wrappedError); + } + }; + + api.enrollTotp(appArg, assertionIdArg, displayNameArg, resultCallback); + }); + } else { + channel.setMessageHandler(null); + } + } + { + BasicMessageChannel channel = + new BasicMessageChannel<>( + binaryMessenger, + "dev.flutter.pigeon.firebase_auth_platform_interface.MultiFactorUserHostApi.getSession" + + messageChannelSuffix, + getCodec()); + if (api != null) { + channel.setMessageHandler( + (message, reply) -> { + ArrayList wrapped = new ArrayList<>(); + ArrayList args = (ArrayList) message; + AuthPigeonFirebaseApp appArg = (AuthPigeonFirebaseApp) args.get(0); + Result resultCallback = + new Result() { + public void success(InternalMultiFactorSession result) { + wrapped.add(0, result); + reply.reply(wrapped); + } + + public void error(Throwable error) { + ArrayList wrappedError = wrapError(error); + reply.reply(wrappedError); + } + }; + + api.getSession(appArg, resultCallback); + }); + } else { + channel.setMessageHandler(null); + } + } + { + BasicMessageChannel channel = + new BasicMessageChannel<>( + binaryMessenger, + "dev.flutter.pigeon.firebase_auth_platform_interface.MultiFactorUserHostApi.unenroll" + + messageChannelSuffix, + getCodec()); + if (api != null) { + channel.setMessageHandler( + (message, reply) -> { + ArrayList wrapped = new ArrayList<>(); + ArrayList args = (ArrayList) message; + AuthPigeonFirebaseApp appArg = (AuthPigeonFirebaseApp) args.get(0); + String factorUidArg = (String) args.get(1); + VoidResult resultCallback = + new VoidResult() { + public void success() { + wrapped.add(0, null); + reply.reply(wrapped); + } + + public void error(Throwable error) { + ArrayList wrappedError = wrapError(error); + reply.reply(wrappedError); + } + }; + + api.unenroll(appArg, factorUidArg, resultCallback); + }); + } else { + channel.setMessageHandler(null); + } + } + { + BasicMessageChannel channel = + new BasicMessageChannel<>( + binaryMessenger, + "dev.flutter.pigeon.firebase_auth_platform_interface.MultiFactorUserHostApi.getEnrolledFactors" + + messageChannelSuffix, + getCodec()); + if (api != null) { + channel.setMessageHandler( + (message, reply) -> { + ArrayList wrapped = new ArrayList<>(); + ArrayList args = (ArrayList) message; + AuthPigeonFirebaseApp appArg = (AuthPigeonFirebaseApp) args.get(0); + Result> resultCallback = + new Result>() { + public void success(List result) { + wrapped.add(0, result); + reply.reply(wrapped); + } + + public void error(Throwable error) { + ArrayList wrappedError = wrapError(error); + reply.reply(wrappedError); + } + }; + + api.getEnrolledFactors(appArg, resultCallback); + }); + } else { + channel.setMessageHandler(null); + } + } + } + } + + /** Generated interface from Pigeon that represents a handler of messages from Flutter. */ + public interface MultiFactoResolverHostApi { + + void resolveSignIn( + @NonNull String resolverId, + @Nullable InternalPhoneMultiFactorAssertion assertion, + @Nullable String totpAssertionId, + @NonNull Result result); + + /** The codec used by MultiFactoResolverHostApi. */ + static @NonNull MessageCodec getCodec() { + return PigeonCodec.INSTANCE; + } + + /** + * Sets up an instance of `MultiFactoResolverHostApi` to handle messages through the + * `binaryMessenger`. + */ + static void setUp( + @NonNull BinaryMessenger binaryMessenger, @Nullable MultiFactoResolverHostApi api) { + setUp(binaryMessenger, "", api); + } + + static void setUp( + @NonNull BinaryMessenger binaryMessenger, + @NonNull String messageChannelSuffix, + @Nullable MultiFactoResolverHostApi api) { + messageChannelSuffix = messageChannelSuffix.isEmpty() ? "" : "." + messageChannelSuffix; + { + BasicMessageChannel channel = + new BasicMessageChannel<>( + binaryMessenger, + "dev.flutter.pigeon.firebase_auth_platform_interface.MultiFactoResolverHostApi.resolveSignIn" + + messageChannelSuffix, + getCodec()); + if (api != null) { + channel.setMessageHandler( + (message, reply) -> { + ArrayList wrapped = new ArrayList<>(); + ArrayList args = (ArrayList) message; + String resolverIdArg = (String) args.get(0); + InternalPhoneMultiFactorAssertion assertionArg = + (InternalPhoneMultiFactorAssertion) args.get(1); + String totpAssertionIdArg = (String) args.get(2); + Result resultCallback = + new Result() { + public void success(InternalUserCredential result) { + wrapped.add(0, result); + reply.reply(wrapped); + } + + public void error(Throwable error) { + ArrayList wrappedError = wrapError(error); + reply.reply(wrappedError); + } + }; + + api.resolveSignIn(resolverIdArg, assertionArg, totpAssertionIdArg, resultCallback); + }); + } else { + channel.setMessageHandler(null); + } + } + } + } + + /** Generated interface from Pigeon that represents a handler of messages from Flutter. */ + public interface MultiFactorTotpHostApi { + + void generateSecret(@NonNull String sessionId, @NonNull Result result); + + void getAssertionForEnrollment( + @NonNull String secretKey, @NonNull String oneTimePassword, @NonNull Result result); + + void getAssertionForSignIn( + @NonNull String enrollmentId, + @NonNull String oneTimePassword, + @NonNull Result result); + + /** The codec used by MultiFactorTotpHostApi. */ + static @NonNull MessageCodec getCodec() { + return PigeonCodec.INSTANCE; + } + + /** + * Sets up an instance of `MultiFactorTotpHostApi` to handle messages through the + * `binaryMessenger`. + */ + static void setUp( + @NonNull BinaryMessenger binaryMessenger, @Nullable MultiFactorTotpHostApi api) { + setUp(binaryMessenger, "", api); + } + + static void setUp( + @NonNull BinaryMessenger binaryMessenger, + @NonNull String messageChannelSuffix, + @Nullable MultiFactorTotpHostApi api) { + messageChannelSuffix = messageChannelSuffix.isEmpty() ? "" : "." + messageChannelSuffix; + { + BasicMessageChannel channel = + new BasicMessageChannel<>( + binaryMessenger, + "dev.flutter.pigeon.firebase_auth_platform_interface.MultiFactorTotpHostApi.generateSecret" + + messageChannelSuffix, + getCodec()); + if (api != null) { + channel.setMessageHandler( + (message, reply) -> { + ArrayList wrapped = new ArrayList<>(); + ArrayList args = (ArrayList) message; + String sessionIdArg = (String) args.get(0); + Result resultCallback = + new Result() { + public void success(InternalTotpSecret result) { + wrapped.add(0, result); + reply.reply(wrapped); + } + + public void error(Throwable error) { + ArrayList wrappedError = wrapError(error); + reply.reply(wrappedError); + } + }; + + api.generateSecret(sessionIdArg, resultCallback); + }); + } else { + channel.setMessageHandler(null); + } + } + { + BasicMessageChannel channel = + new BasicMessageChannel<>( + binaryMessenger, + "dev.flutter.pigeon.firebase_auth_platform_interface.MultiFactorTotpHostApi.getAssertionForEnrollment" + + messageChannelSuffix, + getCodec()); + if (api != null) { + channel.setMessageHandler( + (message, reply) -> { + ArrayList wrapped = new ArrayList<>(); + ArrayList args = (ArrayList) message; + String secretKeyArg = (String) args.get(0); + String oneTimePasswordArg = (String) args.get(1); + Result resultCallback = + new Result() { + public void success(String result) { + wrapped.add(0, result); + reply.reply(wrapped); + } + + public void error(Throwable error) { + ArrayList wrappedError = wrapError(error); + reply.reply(wrappedError); + } + }; + + api.getAssertionForEnrollment(secretKeyArg, oneTimePasswordArg, resultCallback); + }); + } else { + channel.setMessageHandler(null); + } + } + { + BasicMessageChannel channel = + new BasicMessageChannel<>( + binaryMessenger, + "dev.flutter.pigeon.firebase_auth_platform_interface.MultiFactorTotpHostApi.getAssertionForSignIn" + + messageChannelSuffix, + getCodec()); + if (api != null) { + channel.setMessageHandler( + (message, reply) -> { + ArrayList wrapped = new ArrayList<>(); + ArrayList args = (ArrayList) message; + String enrollmentIdArg = (String) args.get(0); + String oneTimePasswordArg = (String) args.get(1); + Result resultCallback = + new Result() { + public void success(String result) { + wrapped.add(0, result); + reply.reply(wrapped); + } + + public void error(Throwable error) { + ArrayList wrappedError = wrapError(error); + reply.reply(wrappedError); + } + }; + + api.getAssertionForSignIn(enrollmentIdArg, oneTimePasswordArg, resultCallback); + }); + } else { + channel.setMessageHandler(null); + } + } + } + } + + /** Generated interface from Pigeon that represents a handler of messages from Flutter. */ + public interface MultiFactorTotpSecretHostApi { + + void generateQrCodeUrl( + @NonNull String secretKey, + @Nullable String accountName, + @Nullable String issuer, + @NonNull Result result); + + void openInOtpApp( + @NonNull String secretKey, @NonNull String qrCodeUrl, @NonNull VoidResult result); + + /** The codec used by MultiFactorTotpSecretHostApi. */ + static @NonNull MessageCodec getCodec() { + return PigeonCodec.INSTANCE; + } + + /** + * Sets up an instance of `MultiFactorTotpSecretHostApi` to handle messages through the + * `binaryMessenger`. + */ + static void setUp( + @NonNull BinaryMessenger binaryMessenger, @Nullable MultiFactorTotpSecretHostApi api) { + setUp(binaryMessenger, "", api); + } + + static void setUp( + @NonNull BinaryMessenger binaryMessenger, + @NonNull String messageChannelSuffix, + @Nullable MultiFactorTotpSecretHostApi api) { + messageChannelSuffix = messageChannelSuffix.isEmpty() ? "" : "." + messageChannelSuffix; + { + BasicMessageChannel channel = + new BasicMessageChannel<>( + binaryMessenger, + "dev.flutter.pigeon.firebase_auth_platform_interface.MultiFactorTotpSecretHostApi.generateQrCodeUrl" + + messageChannelSuffix, + getCodec()); + if (api != null) { + channel.setMessageHandler( + (message, reply) -> { + ArrayList wrapped = new ArrayList<>(); + ArrayList args = (ArrayList) message; + String secretKeyArg = (String) args.get(0); + String accountNameArg = (String) args.get(1); + String issuerArg = (String) args.get(2); + Result resultCallback = + new Result() { + public void success(String result) { + wrapped.add(0, result); + reply.reply(wrapped); + } + + public void error(Throwable error) { + ArrayList wrappedError = wrapError(error); + reply.reply(wrappedError); + } + }; + + api.generateQrCodeUrl(secretKeyArg, accountNameArg, issuerArg, resultCallback); + }); + } else { + channel.setMessageHandler(null); + } + } + { + BasicMessageChannel channel = + new BasicMessageChannel<>( + binaryMessenger, + "dev.flutter.pigeon.firebase_auth_platform_interface.MultiFactorTotpSecretHostApi.openInOtpApp" + + messageChannelSuffix, + getCodec()); + if (api != null) { + channel.setMessageHandler( + (message, reply) -> { + ArrayList wrapped = new ArrayList<>(); + ArrayList args = (ArrayList) message; + String secretKeyArg = (String) args.get(0); + String qrCodeUrlArg = (String) args.get(1); + VoidResult resultCallback = + new VoidResult() { + public void success() { + wrapped.add(0, null); + reply.reply(wrapped); + } + + public void error(Throwable error) { + ArrayList wrappedError = wrapError(error); + reply.reply(wrappedError); + } + }; + + api.openInOtpApp(secretKeyArg, qrCodeUrlArg, resultCallback); + }); + } else { + channel.setMessageHandler(null); + } + } + } + } + + /** + * Only used to generate the object interface that are use outside of the Pigeon interface + * + *

Generated interface from Pigeon that represents a handler of messages from Flutter. + */ + public interface GenerateInterfaces { + + void pigeonInterface(@NonNull InternalMultiFactorInfo info); + + /** The codec used by GenerateInterfaces. */ + static @NonNull MessageCodec getCodec() { + return PigeonCodec.INSTANCE; + } + + /** + * Sets up an instance of `GenerateInterfaces` to handle messages through the `binaryMessenger`. + */ + static void setUp(@NonNull BinaryMessenger binaryMessenger, @Nullable GenerateInterfaces api) { + setUp(binaryMessenger, "", api); + } + + static void setUp( + @NonNull BinaryMessenger binaryMessenger, + @NonNull String messageChannelSuffix, + @Nullable GenerateInterfaces api) { + messageChannelSuffix = messageChannelSuffix.isEmpty() ? "" : "." + messageChannelSuffix; + { + BasicMessageChannel channel = + new BasicMessageChannel<>( + binaryMessenger, + "dev.flutter.pigeon.firebase_auth_platform_interface.GenerateInterfaces.pigeonInterface" + + messageChannelSuffix, + getCodec()); + if (api != null) { + channel.setMessageHandler( + (message, reply) -> { + ArrayList wrapped = new ArrayList<>(); + ArrayList args = (ArrayList) message; + InternalMultiFactorInfo infoArg = (InternalMultiFactorInfo) args.get(0); + try { + api.pigeonInterface(infoArg); + wrapped.add(0, null); + } catch (Throwable exception) { + wrapped = wrapError(exception); + } + reply.reply(wrapped); + }); + } else { + channel.setMessageHandler(null); + } + } + } + } +} diff --git a/mih_ui/android/build/macos/SourcePackages/firebase_auth-6.5.4/android/src/main/java/io/flutter/plugins/firebase/auth/IdTokenChannelStreamHandler.java b/mih_ui/android/build/macos/SourcePackages/firebase_auth-6.5.4/android/src/main/java/io/flutter/plugins/firebase/auth/IdTokenChannelStreamHandler.java new file mode 100644 index 00000000..ae413a40 --- /dev/null +++ b/mih_ui/android/build/macos/SourcePackages/firebase_auth-6.5.4/android/src/main/java/io/flutter/plugins/firebase/auth/IdTokenChannelStreamHandler.java @@ -0,0 +1,63 @@ +/* + * Copyright 2022, the Chromium project authors. Please see the AUTHORS file + * for details. All rights reserved. Use of this source code is governed by a + * BSD-style license that can be found in the LICENSE file. + */ + +package io.flutter.plugins.firebase.auth; + +import com.google.firebase.auth.FirebaseAuth; +import com.google.firebase.auth.FirebaseAuth.IdTokenListener; +import com.google.firebase.auth.FirebaseUser; +import io.flutter.plugin.common.EventChannel.EventSink; +import io.flutter.plugin.common.EventChannel.StreamHandler; +import java.util.HashMap; +import java.util.Map; +import java.util.concurrent.atomic.AtomicBoolean; + +public class IdTokenChannelStreamHandler implements StreamHandler { + + private final FirebaseAuth firebaseAuth; + private IdTokenListener idTokenListener; + + public IdTokenChannelStreamHandler(FirebaseAuth firebaseAuth) { + this.firebaseAuth = firebaseAuth; + } + + @Override + public void onListen(Object arguments, EventSink events) { + Map event = new HashMap<>(); + event.put(Constants.APP_NAME, firebaseAuth.getApp().getName()); + + final AtomicBoolean initialAuthState = new AtomicBoolean(true); + + idTokenListener = + auth -> { + if (initialAuthState.get()) { + initialAuthState.set(false); + return; + } + + FirebaseUser user = auth.getCurrentUser(); + + if (user == null) { + event.put(Constants.USER, null); + } else { + event.put( + Constants.USER, PigeonParser.manuallyToList(PigeonParser.parseFirebaseUser(user))); + } + + events.success(event); + }; + + firebaseAuth.addIdTokenListener(idTokenListener); + } + + @Override + public void onCancel(Object arguments) { + if (idTokenListener != null) { + firebaseAuth.removeIdTokenListener(idTokenListener); + idTokenListener = null; + } + } +} diff --git a/mih_ui/android/build/macos/SourcePackages/firebase_auth-6.5.4/android/src/main/java/io/flutter/plugins/firebase/auth/PhoneNumberVerificationStreamHandler.java b/mih_ui/android/build/macos/SourcePackages/firebase_auth-6.5.4/android/src/main/java/io/flutter/plugins/firebase/auth/PhoneNumberVerificationStreamHandler.java new file mode 100644 index 00000000..a227be99 --- /dev/null +++ b/mih_ui/android/build/macos/SourcePackages/firebase_auth-6.5.4/android/src/main/java/io/flutter/plugins/firebase/auth/PhoneNumberVerificationStreamHandler.java @@ -0,0 +1,197 @@ +/* + * Copyright 2022, the Chromium project authors. Please see the AUTHORS file + * for details. All rights reserved. Use of this source code is governed by a + * BSD-style license that can be found in the LICENSE file. + */ + +package io.flutter.plugins.firebase.auth; + +import android.app.Activity; +import androidx.annotation.NonNull; +import androidx.annotation.Nullable; +import com.google.firebase.FirebaseException; +import com.google.firebase.auth.FirebaseAuth; +import com.google.firebase.auth.MultiFactorSession; +import com.google.firebase.auth.PhoneAuthCredential; +import com.google.firebase.auth.PhoneAuthOptions; +import com.google.firebase.auth.PhoneAuthProvider; +import com.google.firebase.auth.PhoneAuthProvider.ForceResendingToken; +import com.google.firebase.auth.PhoneMultiFactorInfo; +import io.flutter.plugin.common.EventChannel.EventSink; +import io.flutter.plugin.common.EventChannel.StreamHandler; +import java.util.HashMap; +import java.util.Locale; +import java.util.Map; +import java.util.concurrent.TimeUnit; +import java.util.concurrent.atomic.AtomicReference; + +public class PhoneNumberVerificationStreamHandler implements StreamHandler { + + interface OnCredentialsListener { + void onCredentialsReceived(PhoneAuthCredential credential); + } + + final AtomicReference activityRef = new AtomicReference<>(null); + final FirebaseAuth firebaseAuth; + final String phoneNumber; + final PhoneMultiFactorInfo multiFactorInfo; + final int timeout; + final OnCredentialsListener onCredentialsListener; + + final MultiFactorSession multiFactorSession; + + String autoRetrievedSmsCodeForTesting; + Integer forceResendingToken; + + private static final HashMap forceResendingTokens = new HashMap<>(); + + @Nullable private EventSink eventSink; + + public PhoneNumberVerificationStreamHandler( + Activity activity, + @NonNull GeneratedAndroidFirebaseAuth.AuthPigeonFirebaseApp app, + @NonNull GeneratedAndroidFirebaseAuth.InternalVerifyPhoneNumberRequest request, + @Nullable MultiFactorSession multiFactorSession, + @Nullable PhoneMultiFactorInfo multiFactorInfo, + OnCredentialsListener onCredentialsListener) { + this.activityRef.set(activity); + + this.multiFactorSession = multiFactorSession; + this.multiFactorInfo = multiFactorInfo; + firebaseAuth = FlutterFirebaseAuthPlugin.getAuthFromPigeon(app); + phoneNumber = request.getPhoneNumber(); + timeout = Math.toIntExact(request.getTimeout()); + + if (request.getAutoRetrievedSmsCodeForTesting() != null) { + autoRetrievedSmsCodeForTesting = request.getAutoRetrievedSmsCodeForTesting(); + } + + if (request.getForceResendingToken() != null) { + forceResendingToken = Math.toIntExact(request.getForceResendingToken()); + } + + this.onCredentialsListener = onCredentialsListener; + } + + @Override + public void onListen(Object arguments, EventSink events) { + eventSink = events; + + PhoneAuthProvider.OnVerificationStateChangedCallbacks callbacks = + new PhoneAuthProvider.OnVerificationStateChangedCallbacks() { + @Override + public void onVerificationCompleted(@NonNull PhoneAuthCredential phoneAuthCredential) { + int phoneAuthCredentialHashCode = phoneAuthCredential.hashCode(); + onCredentialsListener.onCredentialsReceived(phoneAuthCredential); + + Map event = new HashMap<>(); + event.put(Constants.TOKEN, phoneAuthCredentialHashCode); + + if (phoneAuthCredential.getSmsCode() != null) { + event.put(Constants.SMS_CODE, phoneAuthCredential.getSmsCode()); + } + + event.put(Constants.NAME, "Auth#phoneVerificationCompleted"); + + if (eventSink != null) { + eventSink.success(event); + } + } + + @Override + public void onVerificationFailed(@NonNull FirebaseException e) { + Map event = new HashMap<>(); + Map error = new HashMap<>(); + GeneratedAndroidFirebaseAuth.FlutterError flutterError = + FlutterFirebaseAuthPluginException.parserExceptionToFlutter(e); + error.put( + "code", + flutterError + .code + .replaceAll("ERROR_", "") + .toLowerCase(Locale.ROOT) + .replaceAll("_", "-")); + error.put("message", flutterError.getMessage()); + error.put("details", flutterError.details); + event.put("error", error); + + event.put(Constants.NAME, "Auth#phoneVerificationFailed"); + + if (eventSink != null) { + eventSink.success(event); + } + } + + @Override + public void onCodeSent( + @NonNull String verificationId, + @NonNull PhoneAuthProvider.ForceResendingToken token) { + int forceResendingTokenHashCode = token.hashCode(); + forceResendingTokens.put(forceResendingTokenHashCode, token); + + Map event = new HashMap<>(); + event.put(Constants.VERIFICATION_ID, verificationId); + event.put(Constants.FORCE_RESENDING_TOKEN, forceResendingTokenHashCode); + + event.put(Constants.NAME, "Auth#phoneCodeSent"); + + if (eventSink != null) { + eventSink.success(event); + } + } + + @Override + public void onCodeAutoRetrievalTimeOut(@NonNull String verificationId) { + Map event = new HashMap<>(); + event.put(Constants.VERIFICATION_ID, verificationId); + + event.put(Constants.NAME, "Auth#phoneCodeAutoRetrievalTimeout"); + + if (eventSink != null) { + eventSink.success(event); + } + } + }; + + // Allows the auto-retrieval flow to be tested. + // See https://firebase.google.com/docs/auth/android/phone-auth#integration-testing + if (autoRetrievedSmsCodeForTesting != null) { + firebaseAuth + .getFirebaseAuthSettings() + .setAutoRetrievedSmsCodeForPhoneNumber(phoneNumber, autoRetrievedSmsCodeForTesting); + } + + PhoneAuthOptions.Builder phoneAuthOptionsBuilder = new PhoneAuthOptions.Builder(firebaseAuth); + phoneAuthOptionsBuilder.setActivity(activityRef.get()); + phoneAuthOptionsBuilder.setCallbacks(callbacks); + + if (phoneNumber != null) { + phoneAuthOptionsBuilder.setPhoneNumber(phoneNumber); + } + if (multiFactorSession != null) { + phoneAuthOptionsBuilder.setMultiFactorSession(multiFactorSession); + } + if (multiFactorInfo != null) { + phoneAuthOptionsBuilder.setMultiFactorHint(multiFactorInfo); + } + phoneAuthOptionsBuilder.setTimeout((long) timeout, TimeUnit.MILLISECONDS); + + if (forceResendingToken != null) { + PhoneAuthProvider.ForceResendingToken forceResendingToken = + forceResendingTokens.get(this.forceResendingToken); + + if (forceResendingToken != null) { + phoneAuthOptionsBuilder.setForceResendingToken(forceResendingToken); + } + } + + PhoneAuthProvider.verifyPhoneNumber(phoneAuthOptionsBuilder.build()); + } + + @Override + public void onCancel(Object arguments) { + eventSink = null; + + activityRef.set(null); + } +} diff --git a/mih_ui/android/build/macos/SourcePackages/firebase_auth-6.5.4/android/src/main/java/io/flutter/plugins/firebase/auth/PigeonParser.java b/mih_ui/android/build/macos/SourcePackages/firebase_auth-6.5.4/android/src/main/java/io/flutter/plugins/firebase/auth/PigeonParser.java new file mode 100644 index 00000000..4c9e102a --- /dev/null +++ b/mih_ui/android/build/macos/SourcePackages/firebase_auth-6.5.4/android/src/main/java/io/flutter/plugins/firebase/auth/PigeonParser.java @@ -0,0 +1,382 @@ +/* + * Copyright 2023, the Chromium project authors. Please see the AUTHORS file + * for details. All rights reserved. Use of this source code is governed by a + * BSD-style license that can be found in the LICENSE file. + */ + +package io.flutter.plugins.firebase.auth; + +import android.net.Uri; +import androidx.annotation.NonNull; +import com.google.firebase.auth.ActionCodeEmailInfo; +import com.google.firebase.auth.ActionCodeInfo; +import com.google.firebase.auth.ActionCodeResult; +import com.google.firebase.auth.ActionCodeSettings; +import com.google.firebase.auth.AdditionalUserInfo; +import com.google.firebase.auth.AuthCredential; +import com.google.firebase.auth.AuthResult; +import com.google.firebase.auth.EmailAuthProvider; +import com.google.firebase.auth.FacebookAuthProvider; +import com.google.firebase.auth.FirebaseAuthProvider; +import com.google.firebase.auth.FirebaseUser; +import com.google.firebase.auth.FirebaseUserMetadata; +import com.google.firebase.auth.GetTokenResult; +import com.google.firebase.auth.GithubAuthProvider; +import com.google.firebase.auth.GoogleAuthProvider; +import com.google.firebase.auth.MultiFactorInfo; +import com.google.firebase.auth.OAuthCredential; +import com.google.firebase.auth.OAuthProvider; +import com.google.firebase.auth.PhoneAuthProvider; +import com.google.firebase.auth.PhoneMultiFactorInfo; +import com.google.firebase.auth.PlayGamesAuthProvider; +import com.google.firebase.auth.TwitterAuthProvider; +import com.google.firebase.auth.UserInfo; +import java.util.ArrayList; +import java.util.HashMap; +import java.util.List; +import java.util.Map; +import java.util.Objects; + +public class PigeonParser { + static List manuallyToList( + GeneratedAndroidFirebaseAuth.InternalUserDetails pigeonUserDetails) { + List output = new ArrayList<>(); + output.add(pigeonUserDetails.getUserInfo().toList()); + output.add(pigeonUserDetails.getProviderData()); + return output; + } + + static GeneratedAndroidFirebaseAuth.InternalUserCredential parseAuthResult( + @NonNull AuthResult authResult) { + GeneratedAndroidFirebaseAuth.InternalUserCredential.Builder builder = + new GeneratedAndroidFirebaseAuth.InternalUserCredential.Builder(); + + builder.setAdditionalUserInfo(parseAdditionalUserInfo(authResult.getAdditionalUserInfo())); + builder.setCredential(parseAuthCredential(authResult.getCredential())); + builder.setUser(parseFirebaseUser(authResult.getUser())); + + return builder.build(); + } + + private static GeneratedAndroidFirebaseAuth.InternalAdditionalUserInfo parseAdditionalUserInfo( + AdditionalUserInfo additionalUserInfo) { + if (additionalUserInfo == null) { + return null; + } + + GeneratedAndroidFirebaseAuth.InternalAdditionalUserInfo.Builder builder = + new GeneratedAndroidFirebaseAuth.InternalAdditionalUserInfo.Builder(); + + builder.setIsNewUser(additionalUserInfo.isNewUser()); + builder.setProfile(additionalUserInfo.getProfile()); + builder.setProviderId(additionalUserInfo.getProviderId()); + builder.setUsername(additionalUserInfo.getUsername()); + + return builder.build(); + } + + static GeneratedAndroidFirebaseAuth.InternalAuthCredential parseAuthCredential( + AuthCredential authCredential) { + if (authCredential == null) { + return null; + } + + int authCredentialHashCode = authCredential.hashCode(); + FlutterFirebaseAuthPlugin.authCredentials.put(authCredentialHashCode, authCredential); + + GeneratedAndroidFirebaseAuth.InternalAuthCredential.Builder builder = + new GeneratedAndroidFirebaseAuth.InternalAuthCredential.Builder(); + + builder.setProviderId(authCredential.getProvider()); + builder.setSignInMethod(authCredential.getSignInMethod()); + builder.setNativeId((long) authCredentialHashCode); + if (authCredential instanceof OAuthCredential) { + builder.setAccessToken(((OAuthCredential) authCredential).getAccessToken()); + } + + return builder.build(); + } + + static GeneratedAndroidFirebaseAuth.InternalUserDetails parseFirebaseUser( + FirebaseUser firebaseUser) { + if (firebaseUser == null) { + return null; + } + + GeneratedAndroidFirebaseAuth.InternalUserDetails.Builder builder = + new GeneratedAndroidFirebaseAuth.InternalUserDetails.Builder(); + + GeneratedAndroidFirebaseAuth.InternalUserInfo.Builder builderInfo = + new GeneratedAndroidFirebaseAuth.InternalUserInfo.Builder(); + + builderInfo.setDisplayName(firebaseUser.getDisplayName()); + builderInfo.setEmail(firebaseUser.getEmail()); + builderInfo.setIsEmailVerified(firebaseUser.isEmailVerified()); + builderInfo.setIsAnonymous(firebaseUser.isAnonymous()); + + final FirebaseUserMetadata userMetadata = firebaseUser.getMetadata(); + if (userMetadata != null) { + builderInfo.setCreationTimestamp(firebaseUser.getMetadata().getCreationTimestamp()); + builderInfo.setLastSignInTimestamp(firebaseUser.getMetadata().getLastSignInTimestamp()); + } + builderInfo.setPhoneNumber(firebaseUser.getPhoneNumber()); + builderInfo.setPhotoUrl(parsePhotoUrl(firebaseUser.getPhotoUrl())); + builderInfo.setUid(firebaseUser.getUid()); + builderInfo.setTenantId(firebaseUser.getTenantId()); + + builder.setUserInfo(builderInfo.build()); + builder.setProviderData(parseUserInfoList(firebaseUser.getProviderData())); + + return builder.build(); + } + + private static List> parseUserInfoList( + List userInfoList) { + List> output = new ArrayList<>(); + + if (userInfoList == null) { + return null; + } + + for (UserInfo userInfo : new ArrayList(userInfoList)) { + if (userInfo == null) { + continue; + } + if (!FirebaseAuthProvider.PROVIDER_ID.equals(userInfo.getProviderId())) { + output.add(parseUserInfoToMap(userInfo)); + } + } + + return output; + } + + private static Map parseUserInfoToMap(UserInfo userInfo) { + Map output = new HashMap<>(); + output.put("displayName", userInfo.getDisplayName()); + output.put("email", userInfo.getEmail()); + output.put("isEmailVerified", userInfo.isEmailVerified()); + output.put("phoneNumber", userInfo.getPhoneNumber()); + output.put("photoUrl", parsePhotoUrl(userInfo.getPhotoUrl())); + // Can be null on Emulator + output.put("uid", userInfo.getUid() == null ? "" : userInfo.getUid()); + output.put("providerId", userInfo.getProviderId()); + output.put("isAnonymous", false); + return output; + } + + private static String parsePhotoUrl(Uri photoUri) { + if (photoUri == null) { + return null; + } + + String photoUrl = photoUri.toString(); + + // Return null if the URL is an empty string + return "".equals(photoUrl) ? null : photoUrl; + } + + @SuppressWarnings("ConstantConditions") + static AuthCredential getCredential(Map credentialMap) { + // If the credential map contains a token, it means a native one has been stored + if (credentialMap.get(Constants.TOKEN) != null) { + int token = ((Number) credentialMap.get(Constants.TOKEN)).intValue(); + AuthCredential credential = FlutterFirebaseAuthPlugin.authCredentials.get(token); + + if (credential == null) { + throw FlutterFirebaseAuthPluginException.invalidCredential(); + } + + return credential; + } + + String signInMethod = + (String) Objects.requireNonNull(credentialMap.get(Constants.SIGN_IN_METHOD)); + String secret = (String) credentialMap.get(Constants.SECRET); + String idToken = (String) credentialMap.get(Constants.ID_TOKEN); + String accessToken = (String) credentialMap.get(Constants.ACCESS_TOKEN); + String rawNonce = (String) credentialMap.get(Constants.RAW_NONCE); + + switch (signInMethod) { + case Constants.SIGN_IN_METHOD_PASSWORD: + return EmailAuthProvider.getCredential( + (String) Objects.requireNonNull(credentialMap.get(Constants.EMAIL)), + Objects.requireNonNull(secret)); + case Constants.SIGN_IN_METHOD_EMAIL_LINK: + return EmailAuthProvider.getCredentialWithLink( + (String) Objects.requireNonNull(credentialMap.get(Constants.EMAIL)), + (String) Objects.requireNonNull(credentialMap.get(Constants.EMAIL_LINK))); + case Constants.SIGN_IN_METHOD_FACEBOOK: + return FacebookAuthProvider.getCredential(Objects.requireNonNull(accessToken)); + case Constants.SIGN_IN_METHOD_GOOGLE: + return GoogleAuthProvider.getCredential(idToken, accessToken); + case Constants.SIGN_IN_METHOD_TWITTER: + return TwitterAuthProvider.getCredential( + Objects.requireNonNull(accessToken), Objects.requireNonNull(secret)); + case Constants.SIGN_IN_METHOD_GITHUB: + return GithubAuthProvider.getCredential(Objects.requireNonNull(accessToken)); + case Constants.SIGN_IN_METHOD_PHONE: + { + String verificationId = + (String) Objects.requireNonNull(credentialMap.get(Constants.VERIFICATION_ID)); + String smsCode = (String) Objects.requireNonNull(credentialMap.get(Constants.SMS_CODE)); + return PhoneAuthProvider.getCredential(verificationId, smsCode); + } + case Constants.SIGN_IN_METHOD_OAUTH: + { + String providerId = + (String) Objects.requireNonNull(credentialMap.get(Constants.PROVIDER_ID)); + OAuthProvider.CredentialBuilder builder = OAuthProvider.newCredentialBuilder(providerId); + if (accessToken != null) { + builder.setAccessToken(accessToken); + } + if (rawNonce == null) { + builder.setIdToken(Objects.requireNonNull(idToken)); + } else { + builder.setIdTokenWithRawNonce(Objects.requireNonNull(idToken), rawNonce); + } + + return builder.build(); + } + case Constants.SIGN_IN_METHOD_PLAY_GAMES: + { + String serverAuthCode = + (String) Objects.requireNonNull(credentialMap.get(Constants.SERVER_AUTH_CODE)); + return PlayGamesAuthProvider.getCredential(serverAuthCode); + } + default: + return null; + } + } + + static ActionCodeSettings getActionCodeSettings( + @NonNull GeneratedAndroidFirebaseAuth.InternalActionCodeSettings pigeonActionCodeSettings) { + ActionCodeSettings.Builder builder = ActionCodeSettings.newBuilder(); + + builder.setUrl(pigeonActionCodeSettings.getUrl()); + + if (pigeonActionCodeSettings.getDynamicLinkDomain() != null) { + builder.setDynamicLinkDomain(pigeonActionCodeSettings.getDynamicLinkDomain()); + } + + if (pigeonActionCodeSettings.getLinkDomain() != null) { + builder.setLinkDomain(pigeonActionCodeSettings.getLinkDomain()); + } + + builder.setHandleCodeInApp(pigeonActionCodeSettings.getHandleCodeInApp()); + + if (pigeonActionCodeSettings.getAndroidPackageName() != null) { + builder.setAndroidPackageName( + pigeonActionCodeSettings.getAndroidPackageName(), + pigeonActionCodeSettings.getAndroidInstallApp(), + pigeonActionCodeSettings.getAndroidMinimumVersion()); + } + + if (pigeonActionCodeSettings.getIOSBundleId() != null) { + builder.setIOSBundleId(pigeonActionCodeSettings.getIOSBundleId()); + } + + return builder.build(); + } + + static List multiFactorInfoToPigeon( + List hints) { + List pigeonHints = new ArrayList<>(); + for (MultiFactorInfo info : hints) { + if (info instanceof PhoneMultiFactorInfo) { + pigeonHints.add( + new GeneratedAndroidFirebaseAuth.InternalMultiFactorInfo.Builder() + .setPhoneNumber(((PhoneMultiFactorInfo) info).getPhoneNumber()) + .setDisplayName(info.getDisplayName()) + .setEnrollmentTimestamp((double) info.getEnrollmentTimestamp()) + .setUid(info.getUid()) + .setFactorId(info.getFactorId()) + .build()); + + } else { + pigeonHints.add( + new GeneratedAndroidFirebaseAuth.InternalMultiFactorInfo.Builder() + .setDisplayName(info.getDisplayName()) + .setEnrollmentTimestamp((double) info.getEnrollmentTimestamp()) + .setUid(info.getUid()) + .setFactorId(info.getFactorId()) + .build()); + } + } + return pigeonHints; + } + + static List> multiFactorInfoToMap(List hints) { + List> pigeonHints = new ArrayList<>(); + for (GeneratedAndroidFirebaseAuth.InternalMultiFactorInfo info : + multiFactorInfoToPigeon(hints)) { + pigeonHints.add(info.toList()); + } + return pigeonHints; + } + + static GeneratedAndroidFirebaseAuth.InternalActionCodeInfo parseActionCodeResult( + @NonNull ActionCodeResult actionCodeResult) { + GeneratedAndroidFirebaseAuth.InternalActionCodeInfo.Builder builder = + new GeneratedAndroidFirebaseAuth.InternalActionCodeInfo.Builder(); + GeneratedAndroidFirebaseAuth.InternalActionCodeInfoData.Builder builderData = + new GeneratedAndroidFirebaseAuth.InternalActionCodeInfoData.Builder(); + + int operation = actionCodeResult.getOperation(); + + switch (operation) { + case ActionCodeResult.PASSWORD_RESET: + builder.setOperation(GeneratedAndroidFirebaseAuth.ActionCodeInfoOperation.PASSWORD_RESET); + break; + case ActionCodeResult.VERIFY_EMAIL: + builder.setOperation(GeneratedAndroidFirebaseAuth.ActionCodeInfoOperation.VERIFY_EMAIL); + break; + case ActionCodeResult.RECOVER_EMAIL: + builder.setOperation(GeneratedAndroidFirebaseAuth.ActionCodeInfoOperation.RECOVER_EMAIL); + break; + case ActionCodeResult.SIGN_IN_WITH_EMAIL_LINK: + builder.setOperation(GeneratedAndroidFirebaseAuth.ActionCodeInfoOperation.EMAIL_SIGN_IN); + break; + case ActionCodeResult.VERIFY_BEFORE_CHANGE_EMAIL: + builder.setOperation( + GeneratedAndroidFirebaseAuth.ActionCodeInfoOperation.VERIFY_AND_CHANGE_EMAIL); + break; + case ActionCodeResult.REVERT_SECOND_FACTOR_ADDITION: + builder.setOperation( + GeneratedAndroidFirebaseAuth.ActionCodeInfoOperation.REVERT_SECOND_FACTOR_ADDITION); + break; + } + + ActionCodeInfo actionCodeInfo = actionCodeResult.getInfo(); + + if (actionCodeInfo != null && operation == ActionCodeResult.VERIFY_EMAIL + || operation == ActionCodeResult.PASSWORD_RESET) { + builderData.setEmail(actionCodeInfo.getEmail()); + } else if (operation == ActionCodeResult.RECOVER_EMAIL + || operation == ActionCodeResult.VERIFY_BEFORE_CHANGE_EMAIL) { + ActionCodeEmailInfo actionCodeEmailInfo = + (ActionCodeEmailInfo) Objects.requireNonNull(actionCodeInfo); + builderData.setEmail(actionCodeEmailInfo.getEmail()); + builderData.setPreviousEmail(actionCodeEmailInfo.getPreviousEmail()); + } + + builder.setData(builderData.build()); + + return builder.build(); + } + + static GeneratedAndroidFirebaseAuth.InternalIdTokenResult parseTokenResult( + @NonNull GetTokenResult tokenResult) { + final GeneratedAndroidFirebaseAuth.InternalIdTokenResult.Builder builder = + new GeneratedAndroidFirebaseAuth.InternalIdTokenResult.Builder(); + + builder.setToken(tokenResult.getToken()); + builder.setSignInProvider(tokenResult.getSignInProvider()); + builder.setAuthTimestamp(tokenResult.getAuthTimestamp() * 1000); + builder.setExpirationTimestamp(tokenResult.getExpirationTimestamp() * 1000); + builder.setIssuedAtTimestamp(tokenResult.getIssuedAtTimestamp() * 1000); + builder.setClaims(tokenResult.getClaims()); + builder.setSignInSecondFactor(tokenResult.getSignInSecondFactor()); + + return builder.build(); + } +} diff --git a/mih_ui/android/build/macos/SourcePackages/firebase_auth-6.5.4/android/user-agent.gradle b/mih_ui/android/build/macos/SourcePackages/firebase_auth-6.5.4/android/user-agent.gradle new file mode 100644 index 00000000..38e5e646 --- /dev/null +++ b/mih_ui/android/build/macos/SourcePackages/firebase_auth-6.5.4/android/user-agent.gradle @@ -0,0 +1,22 @@ +import java.util.regex.Matcher +import java.util.regex.Pattern + +String libraryVersionName = "UNKNOWN" +String libraryName = "flutter-fire-auth" +File pubspec = new File(project.projectDir.parentFile, 'pubspec.yaml') + +if (pubspec.exists()) { + String yaml = pubspec.text + // Using \s*['|"]?([^\n|'|"]*)['|"]? to extract version number. + Matcher versionMatcher = Pattern.compile("^version:\\s*['|\"]?([^\\n|'|\"]*)['|\"]?\$", Pattern.MULTILINE).matcher(yaml) + if (versionMatcher.find()) libraryVersionName = versionMatcher.group(1).replaceAll("\\+", "-") +} + +android { + defaultConfig { + // BuildConfig.VERSION_NAME + buildConfigField 'String', 'LIBRARY_VERSION', "\"${libraryVersionName}\"" + // BuildConfig.LIBRARY_NAME + buildConfigField 'String', 'LIBRARY_NAME', "\"${libraryName}\"" + } +} diff --git a/mih_ui/android/build/macos/SourcePackages/firebase_auth-6.5.4/example/README.md b/mih_ui/android/build/macos/SourcePackages/firebase_auth-6.5.4/example/README.md new file mode 100644 index 00000000..8a9c4d3b --- /dev/null +++ b/mih_ui/android/build/macos/SourcePackages/firebase_auth-6.5.4/example/README.md @@ -0,0 +1,58 @@ +# Firebase Auth Example + +[![pub package](https://img.shields.io/pub/v/firebase_auth.svg)](https://pub.dev/packages/firebase_auth) + +Demonstrates how to use the `firebase_auth` plugin and enable multiple auth providers. + +## Phone Auth + +1. Enable phone authentication in the [Firebase console]((https://console.firebase.google.com/u/0/project/_/authentication/providers)). +2. Add test phone number and verification code to the Firebase console. + - For this sample the number `+1 408-555-6969` and verification code `888888` are used. +3. For iOS set the `URL Schemes` to the `REVERSE_CLIENT_ID` from the `GoogleServices-Info.plist` file. +4. Enter the phone number `+1 408-555-6969` and press the `Verify phone number` button. +5. Once the phone number is verified the app displays the test + verification code. +6. Enter the verficication code `888888` and press "Sign in with phone number" +7. Signed in user ID is now displayed in the UI. + +## Google Sign-In + +1. Enable Google authentication in the [Firebase console](https://console.firebase.google.com/u/0/project/_/authentication/providers). +2. For Android, add your app's package name and SHA-1 fingerprint to the [Settings page](https://console.firebase.google.com/project/_/settings/general) of the Firebase console. Refer to [Authenticating Your Client]('https://developers.google.com/android/guides/client-auth') for details on how to get your app's SHA-1 fingerprint. +3. For iOS set the `URL Schemes` to the `REVERSE_CLIENT_ID` from the `GoogleServices-Info.plist` file (same step for `Phone Auth` above). +4. Select `Google` under `Social Authentication` and click the `Sign In With Google` button. +5. Signed in user's details are displayed in the UI. + +### Running on Web + +Make sure you run the example app on port 5000, since `localhost:5000` is +whitelisted for Google authentication. To do so, run: + +``` +flutter run -d web-server --web-port 5000 +``` + +## GitHub Sign-In +To get your `clientId` and `clientSecret`: +1. Visit https://github.com/settings/developers. +2. Create a new OAuth application. +3. Set **Home Page URL** to `https://react-native-firebase-testing.firebaseapp.com`. +4. Set **Authorization callback URL** to `https://react-native-firebase-testing.firebaseapp.com/__/auth/handler`. +5. After you register your app, add the `clientId` and `clientSecret` to the example app config in [`lib/config.dart`](./lib/config.dart). + +## Twitter Sign-In +Twitter sign in requires you to add keys from Twitter Developer API to Firebase Console, which means you cannot use the provided configurations with the example app, instead, **please create a new Firebase project**, then enable Twitter as an Auth provider (*optionally you can enable the rest of providers supported in this example*). + +To get your `apiKey` and `apiSecretKey` for Twitter: +1. Sign up for a developer account on [Twitter Developer](https://developer.twitter.com). +2. Create a new app and copy your keys. +3. From the dashboard, go to your app settings, then go to OAuth settings and turn on OAuth 1.0a, then add 2 callback URLs: + 1. `flutterfireauth://` + 2. `https://react-native-firebase-testing.firebaseapp.com/__/auth/handler` +4. Add your keys to the example app config in [`lib/config.dart`](./lib/config.dart). + +## Getting Started + +For help getting started with Flutter, view the online +[documentation](https://flutter.dev/). diff --git a/mih_ui/android/build/macos/SourcePackages/firebase_auth-6.5.4/example/analysis_options.yaml b/mih_ui/android/build/macos/SourcePackages/firebase_auth-6.5.4/example/analysis_options.yaml new file mode 100644 index 00000000..201a5ca4 --- /dev/null +++ b/mih_ui/android/build/macos/SourcePackages/firebase_auth-6.5.4/example/analysis_options.yaml @@ -0,0 +1,7 @@ +include: ../../../../analysis_options.yaml + +linter: + rules: + avoid_print: false + depend_on_referenced_packages: false + library_private_types_in_public_api: false diff --git a/mih_ui/android/build/macos/SourcePackages/firebase_auth-6.5.4/example/android/app/build.gradle b/mih_ui/android/build/macos/SourcePackages/firebase_auth-6.5.4/example/android/app/build.gradle new file mode 100644 index 00000000..db427be9 --- /dev/null +++ b/mih_ui/android/build/macos/SourcePackages/firebase_auth-6.5.4/example/android/app/build.gradle @@ -0,0 +1,62 @@ +plugins { + id "com.android.application" + // START: FlutterFire Configuration + id 'com.google.gms.google-services' + // END: FlutterFire Configuration + id "kotlin-android" + // The Flutter Gradle Plugin must be applied after the Android and Kotlin Gradle plugins. + id "dev.flutter.flutter-gradle-plugin" +} + +def localProperties = new Properties() +def localPropertiesFile = rootProject.file("local.properties") +if (localPropertiesFile.exists()) { + localPropertiesFile.withReader("UTF-8") { reader -> + localProperties.load(reader) + } +} + +def flutterVersionCode = localProperties.getProperty("flutter.versionCode") +if (flutterVersionCode == null) { + flutterVersionCode = "1" +} + +def flutterVersionName = localProperties.getProperty("flutter.versionName") +if (flutterVersionName == null) { + flutterVersionName = "1.0" +} + +android { + namespace = "io.flutter.plugins.firebase.auth.example" + compileSdk = flutter.compileSdkVersion + ndkVersion = flutter.ndkVersion + compileOptions { + sourceCompatibility = JavaVersion.VERSION_17 + targetCompatibility = JavaVersion.VERSION_17 + } + kotlinOptions { + jvmTarget = JavaVersion.VERSION_17 + } + + defaultConfig { + applicationId = "io.flutter.plugins.firebase.auth.example" + // You can update the following values to match your application needs. + // For more information, see: https://docs.flutter.dev/deployment/android#reviewing-the-gradle-build-configuration. + minSdkVersion = flutter.minSdkVersion + targetSdk = flutter.targetSdkVersion + versionCode = flutterVersionCode.toInteger() + versionName = flutterVersionName + } + + buildTypes { + release { + // TODO: Add your own signing config for the release build. + // Signing with the debug keys for now, so `flutter run --release` works. + signingConfig = signingConfigs.debug + } + } +} + +flutter { + source = "../.." +} diff --git a/mih_ui/android/build/macos/SourcePackages/firebase_auth-6.5.4/example/android/app/google-services.json b/mih_ui/android/build/macos/SourcePackages/firebase_auth-6.5.4/example/android/app/google-services.json new file mode 100644 index 00000000..348716f0 --- /dev/null +++ b/mih_ui/android/build/macos/SourcePackages/firebase_auth-6.5.4/example/android/app/google-services.json @@ -0,0 +1,615 @@ +{ + "project_info": { + "project_number": "406099696497", + "firebase_url": "https://flutterfire-e2e-tests-default-rtdb.europe-west1.firebasedatabase.app", + "project_id": "flutterfire-e2e-tests", + "storage_bucket": "flutterfire-e2e-tests.appspot.com" + }, + "client": [ + { + "client_info": { + "mobilesdk_app_id": "1:406099696497:android:d86a91cc7b338b233574d0", + "android_client_info": { + "package_name": "io.flutter.plugins.firebase.analytics.example" + } + }, + "oauth_client": [ + { + "client_id": "406099696497-a12gakvts4epfk5pkio7dphc1anjiggc.apps.googleusercontent.com", + "client_type": 3 + } + ], + "api_key": [ + { + "current_key": "AIzaSyCdRjCVZlhrq72RuEklEyyxYlBRCYhI2Sw" + } + ], + "services": { + "appinvite_service": { + "other_platform_oauth_client": [ + { + "client_id": "406099696497-a12gakvts4epfk5pkio7dphc1anjiggc.apps.googleusercontent.com", + "client_type": 3 + }, + { + "client_id": "406099696497-0mofiof3ofcgmpmirb6q0fllvb372sme.apps.googleusercontent.com", + "client_type": 2, + "ios_info": { + "bundle_id": "io.flutter.plugins.firebase.example" + } + } + ] + } + } + }, + { + "client_info": { + "mobilesdk_app_id": "1:406099696497:android:a241c4b471513a203574d0", + "android_client_info": { + "package_name": "io.flutter.plugins.firebase.appcheck.example" + } + }, + "oauth_client": [ + { + "client_id": "406099696497-7bvmqp0fffe24vm2arng0dtdeh2tvkgl.apps.googleusercontent.com", + "client_type": 1, + "android_info": { + "package_name": "io.flutter.plugins.firebase.appcheck.example", + "certificate_hash": "909ca1482ef022bbae45a2db6b6d05d807a4c4aa" + } + }, + { + "client_id": "406099696497-a12gakvts4epfk5pkio7dphc1anjiggc.apps.googleusercontent.com", + "client_type": 3 + } + ], + "api_key": [ + { + "current_key": "AIzaSyCdRjCVZlhrq72RuEklEyyxYlBRCYhI2Sw" + } + ], + "services": { + "appinvite_service": { + "other_platform_oauth_client": [ + { + "client_id": "406099696497-a12gakvts4epfk5pkio7dphc1anjiggc.apps.googleusercontent.com", + "client_type": 3 + }, + { + "client_id": "406099696497-0mofiof3ofcgmpmirb6q0fllvb372sme.apps.googleusercontent.com", + "client_type": 2, + "ios_info": { + "bundle_id": "io.flutter.plugins.firebase.example" + } + } + ] + } + } + }, + { + "client_info": { + "mobilesdk_app_id": "1:406099696497:android:21d5142deea38dda3574d0", + "android_client_info": { + "package_name": "io.flutter.plugins.firebase.auth.example" + } + }, + "oauth_client": [ + { + "client_id": "406099696497-emmujnd7g2ammh5uu9ni6v04p4ateqac.apps.googleusercontent.com", + "client_type": 1, + "android_info": { + "package_name": "io.flutter.plugins.firebase.auth.example", + "certificate_hash": "5ad0d6d5cbe577ca185b8df246656bebc3957128" + } + }, + { + "client_id": "406099696497-in8bfp0nali85oul1o98huoar6eo1vv1.apps.googleusercontent.com", + "client_type": 1, + "android_info": { + "package_name": "io.flutter.plugins.firebase.auth.example", + "certificate_hash": "909ca1482ef022bbae45a2db6b6d05d807a4c4aa" + } + }, + { + "client_id": "406099696497-a12gakvts4epfk5pkio7dphc1anjiggc.apps.googleusercontent.com", + "client_type": 3 + } + ], + "api_key": [ + { + "current_key": "AIzaSyCdRjCVZlhrq72RuEklEyyxYlBRCYhI2Sw" + } + ], + "services": { + "appinvite_service": { + "other_platform_oauth_client": [ + { + "client_id": "406099696497-a12gakvts4epfk5pkio7dphc1anjiggc.apps.googleusercontent.com", + "client_type": 3 + }, + { + "client_id": "406099696497-0mofiof3ofcgmpmirb6q0fllvb372sme.apps.googleusercontent.com", + "client_type": 2, + "ios_info": { + "bundle_id": "io.flutter.plugins.firebase.example" + } + } + ] + } + } + }, + { + "client_info": { + "mobilesdk_app_id": "1:406099696497:android:3ef965ff044efc0b3574d0", + "android_client_info": { + "package_name": "io.flutter.plugins.firebase.dataconnect.example" + } + }, + "oauth_client": [ + { + "client_id": "406099696497-a12gakvts4epfk5pkio7dphc1anjiggc.apps.googleusercontent.com", + "client_type": 3 + } + ], + "api_key": [ + { + "current_key": "AIzaSyCdRjCVZlhrq72RuEklEyyxYlBRCYhI2Sw" + } + ], + "services": { + "appinvite_service": { + "other_platform_oauth_client": [ + { + "client_id": "406099696497-a12gakvts4epfk5pkio7dphc1anjiggc.apps.googleusercontent.com", + "client_type": 3 + }, + { + "client_id": "406099696497-0mofiof3ofcgmpmirb6q0fllvb372sme.apps.googleusercontent.com", + "client_type": 2, + "ios_info": { + "bundle_id": "io.flutter.plugins.firebase.example" + } + } + ] + } + } + }, + { + "client_info": { + "mobilesdk_app_id": "1:406099696497:android:40da41183cb3d3ff3574d0", + "android_client_info": { + "package_name": "io.flutter.plugins.firebase.dynamiclinksexample" + } + }, + "oauth_client": [ + { + "client_id": "406099696497-a12gakvts4epfk5pkio7dphc1anjiggc.apps.googleusercontent.com", + "client_type": 3 + } + ], + "api_key": [ + { + "current_key": "AIzaSyCdRjCVZlhrq72RuEklEyyxYlBRCYhI2Sw" + } + ], + "services": { + "appinvite_service": { + "other_platform_oauth_client": [ + { + "client_id": "406099696497-a12gakvts4epfk5pkio7dphc1anjiggc.apps.googleusercontent.com", + "client_type": 3 + }, + { + "client_id": "406099696497-0mofiof3ofcgmpmirb6q0fllvb372sme.apps.googleusercontent.com", + "client_type": 2, + "ios_info": { + "bundle_id": "io.flutter.plugins.firebase.example" + } + } + ] + } + } + }, + { + "client_info": { + "mobilesdk_app_id": "1:406099696497:android:175ea7a64b2faf5e3574d0", + "android_client_info": { + "package_name": "io.flutter.plugins.firebase.firestore.example" + } + }, + "oauth_client": [ + { + "client_id": "406099696497-a12gakvts4epfk5pkio7dphc1anjiggc.apps.googleusercontent.com", + "client_type": 3 + } + ], + "api_key": [ + { + "current_key": "AIzaSyCdRjCVZlhrq72RuEklEyyxYlBRCYhI2Sw" + } + ], + "services": { + "appinvite_service": { + "other_platform_oauth_client": [ + { + "client_id": "406099696497-a12gakvts4epfk5pkio7dphc1anjiggc.apps.googleusercontent.com", + "client_type": 3 + }, + { + "client_id": "406099696497-0mofiof3ofcgmpmirb6q0fllvb372sme.apps.googleusercontent.com", + "client_type": 2, + "ios_info": { + "bundle_id": "io.flutter.plugins.firebase.example" + } + } + ] + } + } + }, + { + "client_info": { + "mobilesdk_app_id": "1:406099696497:android:7ca3394493cc601a3574d0", + "android_client_info": { + "package_name": "io.flutter.plugins.firebase.functions.example" + } + }, + "oauth_client": [ + { + "client_id": "406099696497-17qn06u8a0dc717u8ul7s49ampk13lul.apps.googleusercontent.com", + "client_type": 1, + "android_info": { + "package_name": "io.flutter.plugins.firebase.functions.example", + "certificate_hash": "a4256c0612686b336af6d138a5479b7dc1ee1af6" + } + }, + { + "client_id": "406099696497-tvtvuiqogct1gs1s6lh114jeps7hpjm5.apps.googleusercontent.com", + "client_type": 1, + "android_info": { + "package_name": "io.flutter.plugins.firebase.functions.example", + "certificate_hash": "909ca1482ef022bbae45a2db6b6d05d807a4c4aa" + } + }, + { + "client_id": "406099696497-a12gakvts4epfk5pkio7dphc1anjiggc.apps.googleusercontent.com", + "client_type": 3 + } + ], + "api_key": [ + { + "current_key": "AIzaSyCdRjCVZlhrq72RuEklEyyxYlBRCYhI2Sw" + } + ], + "services": { + "appinvite_service": { + "other_platform_oauth_client": [ + { + "client_id": "406099696497-a12gakvts4epfk5pkio7dphc1anjiggc.apps.googleusercontent.com", + "client_type": 3 + }, + { + "client_id": "406099696497-0mofiof3ofcgmpmirb6q0fllvb372sme.apps.googleusercontent.com", + "client_type": 2, + "ios_info": { + "bundle_id": "io.flutter.plugins.firebase.example" + } + } + ] + } + } + }, + { + "client_info": { + "mobilesdk_app_id": "1:406099696497:android:6d1c1fbf4688f39c3574d0", + "android_client_info": { + "package_name": "io.flutter.plugins.firebase.installations.example" + } + }, + "oauth_client": [ + { + "client_id": "406099696497-a12gakvts4epfk5pkio7dphc1anjiggc.apps.googleusercontent.com", + "client_type": 3 + } + ], + "api_key": [ + { + "current_key": "AIzaSyCdRjCVZlhrq72RuEklEyyxYlBRCYhI2Sw" + } + ], + "services": { + "appinvite_service": { + "other_platform_oauth_client": [ + { + "client_id": "406099696497-a12gakvts4epfk5pkio7dphc1anjiggc.apps.googleusercontent.com", + "client_type": 3 + }, + { + "client_id": "406099696497-0mofiof3ofcgmpmirb6q0fllvb372sme.apps.googleusercontent.com", + "client_type": 2, + "ios_info": { + "bundle_id": "io.flutter.plugins.firebase.example" + } + } + ] + } + } + }, + { + "client_info": { + "mobilesdk_app_id": "1:406099696497:android:74ebb073d7727cd43574d0", + "android_client_info": { + "package_name": "io.flutter.plugins.firebase.messaging.example" + } + }, + "oauth_client": [ + { + "client_id": "406099696497-a12gakvts4epfk5pkio7dphc1anjiggc.apps.googleusercontent.com", + "client_type": 3 + } + ], + "api_key": [ + { + "current_key": "AIzaSyCdRjCVZlhrq72RuEklEyyxYlBRCYhI2Sw" + } + ], + "services": { + "appinvite_service": { + "other_platform_oauth_client": [ + { + "client_id": "406099696497-a12gakvts4epfk5pkio7dphc1anjiggc.apps.googleusercontent.com", + "client_type": 3 + }, + { + "client_id": "406099696497-0mofiof3ofcgmpmirb6q0fllvb372sme.apps.googleusercontent.com", + "client_type": 2, + "ios_info": { + "bundle_id": "io.flutter.plugins.firebase.example" + } + } + ] + } + } + }, + { + "client_info": { + "mobilesdk_app_id": "1:406099696497:android:f54b85cfa36a39f73574d0", + "android_client_info": { + "package_name": "io.flutter.plugins.firebase.remoteconfig.example" + } + }, + "oauth_client": [ + { + "client_id": "406099696497-a12gakvts4epfk5pkio7dphc1anjiggc.apps.googleusercontent.com", + "client_type": 3 + } + ], + "api_key": [ + { + "current_key": "AIzaSyCdRjCVZlhrq72RuEklEyyxYlBRCYhI2Sw" + } + ], + "services": { + "appinvite_service": { + "other_platform_oauth_client": [ + { + "client_id": "406099696497-a12gakvts4epfk5pkio7dphc1anjiggc.apps.googleusercontent.com", + "client_type": 3 + }, + { + "client_id": "406099696497-0mofiof3ofcgmpmirb6q0fllvb372sme.apps.googleusercontent.com", + "client_type": 2, + "ios_info": { + "bundle_id": "io.flutter.plugins.firebase.example" + } + } + ] + } + } + }, + { + "client_info": { + "mobilesdk_app_id": "1:406099696497:android:0d4ed619c031c0ac3574d0", + "android_client_info": { + "package_name": "io.flutter.plugins.firebase.tests" + } + }, + "oauth_client": [ + { + "client_id": "406099696497-ib9hj9281l3343cm3nfvvdotaojrthdc.apps.googleusercontent.com", + "client_type": 1, + "android_info": { + "package_name": "io.flutter.plugins.firebase.tests", + "certificate_hash": "5ad0d6d5cbe577ca185b8df246656bebc3957128" + } + }, + { + "client_id": "406099696497-lc54d5l8sp90k39r0bb39ovsgo1s9bek.apps.googleusercontent.com", + "client_type": 1, + "android_info": { + "package_name": "io.flutter.plugins.firebase.tests", + "certificate_hash": "909ca1482ef022bbae45a2db6b6d05d807a4c4aa" + } + }, + { + "client_id": "406099696497-a12gakvts4epfk5pkio7dphc1anjiggc.apps.googleusercontent.com", + "client_type": 3 + } + ], + "api_key": [ + { + "current_key": "AIzaSyCdRjCVZlhrq72RuEklEyyxYlBRCYhI2Sw" + } + ], + "services": { + "appinvite_service": { + "other_platform_oauth_client": [ + { + "client_id": "406099696497-a12gakvts4epfk5pkio7dphc1anjiggc.apps.googleusercontent.com", + "client_type": 3 + }, + { + "client_id": "406099696497-0mofiof3ofcgmpmirb6q0fllvb372sme.apps.googleusercontent.com", + "client_type": 2, + "ios_info": { + "bundle_id": "io.flutter.plugins.firebase.example" + } + } + ] + } + } + }, + { + "client_info": { + "mobilesdk_app_id": "1:406099696497:android:899c6485cfce26c13574d0", + "android_client_info": { + "package_name": "io.flutter.plugins.firebase_ui_example" + } + }, + "oauth_client": [ + { + "client_id": "406099696497-ltgvphphcckosvqhituel5km2k3aecg8.apps.googleusercontent.com", + "client_type": 1, + "android_info": { + "package_name": "io.flutter.plugins.firebase_ui_example", + "certificate_hash": "a4256c0612686b336af6d138a5479b7dc1ee1af6" + } + }, + { + "client_id": "406099696497-a12gakvts4epfk5pkio7dphc1anjiggc.apps.googleusercontent.com", + "client_type": 3 + } + ], + "api_key": [ + { + "current_key": "AIzaSyCdRjCVZlhrq72RuEklEyyxYlBRCYhI2Sw" + } + ], + "services": { + "appinvite_service": { + "other_platform_oauth_client": [ + { + "client_id": "406099696497-a12gakvts4epfk5pkio7dphc1anjiggc.apps.googleusercontent.com", + "client_type": 3 + }, + { + "client_id": "406099696497-0mofiof3ofcgmpmirb6q0fllvb372sme.apps.googleusercontent.com", + "client_type": 2, + "ios_info": { + "bundle_id": "io.flutter.plugins.firebase.example" + } + } + ] + } + } + }, + { + "client_info": { + "mobilesdk_app_id": "1:406099696497:android:bc0b12b0605df8633574d0", + "android_client_info": { + "package_name": "io.flutter.plugins.firebasecoreexample" + } + }, + "oauth_client": [ + { + "client_id": "406099696497-a12gakvts4epfk5pkio7dphc1anjiggc.apps.googleusercontent.com", + "client_type": 3 + } + ], + "api_key": [ + { + "current_key": "AIzaSyCdRjCVZlhrq72RuEklEyyxYlBRCYhI2Sw" + } + ], + "services": { + "appinvite_service": { + "other_platform_oauth_client": [ + { + "client_id": "406099696497-a12gakvts4epfk5pkio7dphc1anjiggc.apps.googleusercontent.com", + "client_type": 3 + }, + { + "client_id": "406099696497-0mofiof3ofcgmpmirb6q0fllvb372sme.apps.googleusercontent.com", + "client_type": 2, + "ios_info": { + "bundle_id": "io.flutter.plugins.firebase.example" + } + } + ] + } + } + }, + { + "client_info": { + "mobilesdk_app_id": "1:406099696497:android:0f3f7bfe78b8b7103574d0", + "android_client_info": { + "package_name": "io.flutter.plugins.firebasecrashlyticsexample" + } + }, + "oauth_client": [ + { + "client_id": "406099696497-a12gakvts4epfk5pkio7dphc1anjiggc.apps.googleusercontent.com", + "client_type": 3 + } + ], + "api_key": [ + { + "current_key": "AIzaSyCdRjCVZlhrq72RuEklEyyxYlBRCYhI2Sw" + } + ], + "services": { + "appinvite_service": { + "other_platform_oauth_client": [ + { + "client_id": "406099696497-a12gakvts4epfk5pkio7dphc1anjiggc.apps.googleusercontent.com", + "client_type": 3 + }, + { + "client_id": "406099696497-0mofiof3ofcgmpmirb6q0fllvb372sme.apps.googleusercontent.com", + "client_type": 2, + "ios_info": { + "bundle_id": "io.flutter.plugins.firebase.example" + } + } + ] + } + } + }, + { + "client_info": { + "mobilesdk_app_id": "1:406099696497:android:2751af6868a69f073574d0", + "android_client_info": { + "package_name": "io.flutter.plugins.firebasestorageexample" + } + }, + "oauth_client": [ + { + "client_id": "406099696497-a12gakvts4epfk5pkio7dphc1anjiggc.apps.googleusercontent.com", + "client_type": 3 + } + ], + "api_key": [ + { + "current_key": "AIzaSyCdRjCVZlhrq72RuEklEyyxYlBRCYhI2Sw" + } + ], + "services": { + "appinvite_service": { + "other_platform_oauth_client": [ + { + "client_id": "406099696497-a12gakvts4epfk5pkio7dphc1anjiggc.apps.googleusercontent.com", + "client_type": 3 + }, + { + "client_id": "406099696497-0mofiof3ofcgmpmirb6q0fllvb372sme.apps.googleusercontent.com", + "client_type": 2, + "ios_info": { + "bundle_id": "io.flutter.plugins.firebase.example" + } + } + ] + } + } + } + ], + "configuration_version": "1" +} \ No newline at end of file diff --git a/mih_ui/android/build/macos/SourcePackages/firebase_auth-6.5.4/example/android/app/src/debug/AndroidManifest.xml b/mih_ui/android/build/macos/SourcePackages/firebase_auth-6.5.4/example/android/app/src/debug/AndroidManifest.xml new file mode 100644 index 00000000..399f6981 --- /dev/null +++ b/mih_ui/android/build/macos/SourcePackages/firebase_auth-6.5.4/example/android/app/src/debug/AndroidManifest.xml @@ -0,0 +1,7 @@ + + + + diff --git a/mih_ui/android/build/macos/SourcePackages/firebase_auth-6.5.4/example/android/app/src/main/AndroidManifest.xml b/mih_ui/android/build/macos/SourcePackages/firebase_auth-6.5.4/example/android/app/src/main/AndroidManifest.xml new file mode 100644 index 00000000..74a78b93 --- /dev/null +++ b/mih_ui/android/build/macos/SourcePackages/firebase_auth-6.5.4/example/android/app/src/main/AndroidManifest.xml @@ -0,0 +1,45 @@ + + + + + + + + + + + + + + + + + + + + + diff --git a/mih_ui/android/build/macos/SourcePackages/firebase_auth-6.5.4/example/android/app/src/main/kotlin/io/flutter/plugins/firebase/auth/example/MainActivity.kt b/mih_ui/android/build/macos/SourcePackages/firebase_auth-6.5.4/example/android/app/src/main/kotlin/io/flutter/plugins/firebase/auth/example/MainActivity.kt new file mode 100644 index 00000000..2b88c507 --- /dev/null +++ b/mih_ui/android/build/macos/SourcePackages/firebase_auth-6.5.4/example/android/app/src/main/kotlin/io/flutter/plugins/firebase/auth/example/MainActivity.kt @@ -0,0 +1,5 @@ +package io.flutter.plugins.firebase.auth.example + +import io.flutter.embedding.android.FlutterActivity + +class MainActivity : FlutterActivity() diff --git a/mih_ui/android/build/macos/SourcePackages/firebase_auth-6.5.4/example/android/app/src/main/res/drawable-v21/launch_background.xml b/mih_ui/android/build/macos/SourcePackages/firebase_auth-6.5.4/example/android/app/src/main/res/drawable-v21/launch_background.xml new file mode 100644 index 00000000..f74085f3 --- /dev/null +++ b/mih_ui/android/build/macos/SourcePackages/firebase_auth-6.5.4/example/android/app/src/main/res/drawable-v21/launch_background.xml @@ -0,0 +1,12 @@ + + + + + + + + diff --git a/mih_ui/android/build/macos/SourcePackages/firebase_auth-6.5.4/example/android/app/src/main/res/drawable/launch_background.xml b/mih_ui/android/build/macos/SourcePackages/firebase_auth-6.5.4/example/android/app/src/main/res/drawable/launch_background.xml new file mode 100644 index 00000000..304732f8 --- /dev/null +++ b/mih_ui/android/build/macos/SourcePackages/firebase_auth-6.5.4/example/android/app/src/main/res/drawable/launch_background.xml @@ -0,0 +1,12 @@ + + + + + + + + diff --git a/mih_ui/android/build/macos/SourcePackages/firebase_auth-6.5.4/example/android/app/src/main/res/mipmap-hdpi/ic_launcher.png b/mih_ui/android/build/macos/SourcePackages/firebase_auth-6.5.4/example/android/app/src/main/res/mipmap-hdpi/ic_launcher.png new file mode 100644 index 0000000000000000000000000000000000000000..db77bb4b7b0906d62b1847e87f15cdcacf6a4f29 GIT binary patch literal 544 zcmeAS@N?(olHy`uVBq!ia0vp^9w5xY3?!3`olAj~WQl7;NpOBzNqJ&XDuZK6ep0G} zXKrG8YEWuoN@d~6R2!h8bpbvhu0Wd6uZuB!w&u2PAxD2eNXD>P5D~Wn-+_Wa#27Xc zC?Zj|6r#X(-D3u$NCt}(Ms06KgJ4FxJVv{GM)!I~&n8Bnc94O7-Hd)cjDZswgC;Qs zO=b+9!WcT8F?0rF7!Uys2bs@gozCP?z~o%U|N3vA*22NaGQG zlg@K`O_XuxvZ&Ks^m&R!`&1=spLvfx7oGDKDwpwW`#iqdw@AL`7MR}m`rwr|mZgU`8P7SBkL78fFf!WnuYWm$5Z0 zNXhDbCv&49sM544K|?c)WrFfiZvCi9h0O)B3Pgg&ebxsLQ05GG~ AQ2+n{ literal 0 HcmV?d00001 diff --git a/mih_ui/android/build/macos/SourcePackages/firebase_auth-6.5.4/example/android/app/src/main/res/mipmap-mdpi/ic_launcher.png b/mih_ui/android/build/macos/SourcePackages/firebase_auth-6.5.4/example/android/app/src/main/res/mipmap-mdpi/ic_launcher.png new file mode 100644 index 0000000000000000000000000000000000000000..17987b79bb8a35cc66c3c1fd44f5a5526c1b78be GIT binary patch literal 442 zcmeAS@N?(olHy`uVBq!ia0vp^1|ZDA3?vioaBc-sk|nMYCBgY=CFO}lsSJ)O`AMk? zp1FzXsX?iUDV2pMQ*D5Xx&nMcT!A!W`0S9QKQy;}1Cl^CgaH=;G9cpY;r$Q>i*pfB zP2drbID<_#qf;rPZx^FqH)F_D#*k@@q03KywUtLX8Ua?`H+NMzkczFPK3lFz@i_kW%1NOn0|D2I9n9wzH8m|-tHjsw|9>@K=iMBhxvkv6m8Y-l zytQ?X=U+MF$@3 zt`~i=@j|6y)RWMK--}M|=T`o&^Ni>IoWKHEbBXz7?A@mgWoL>!*SXo`SZH-*HSdS+ yn*9;$7;m`l>wYBC5bq;=U}IMqLzqbYCidGC!)_gkIk_C@Uy!y&wkt5C($~2D>~)O*cj@FGjOCM)M>_ixfudOh)?xMu#Fs z#}Y=@YDTwOM)x{K_j*Q;dPdJ?Mz0n|pLRx{4n|)f>SXlmV)XB04CrSJn#dS5nK2lM zrZ9#~WelCp7&e13Y$jvaEXHskn$2V!!DN-nWS__6T*l;H&Fopn?A6HZ-6WRLFP=R` zqG+CE#d4|IbyAI+rJJ`&x9*T`+a=p|0O(+s{UBcyZdkhj=yS1>AirP+0R;mf2uMgM zC}@~JfByORAh4SyRgi&!(cja>F(l*O+nd+@4m$|6K6KDn_&uvCpV23&>G9HJp{xgg zoq1^2_p9@|WEo z*X_Uko@K)qYYv~>43eQGMdbiGbo>E~Q& zrYBH{QP^@Sti!`2)uG{irBBq@y*$B zi#&(U-*=fp74j)RyIw49+0MRPMRU)+a2r*PJ$L5roHt2$UjExCTZSbq%V!HeS7J$N zdG@vOZB4v_lF7Plrx+hxo7(fCV&}fHq)$ literal 0 HcmV?d00001 diff --git a/mih_ui/android/build/macos/SourcePackages/firebase_auth-6.5.4/example/android/app/src/main/res/mipmap-xxhdpi/ic_launcher.png b/mih_ui/android/build/macos/SourcePackages/firebase_auth-6.5.4/example/android/app/src/main/res/mipmap-xxhdpi/ic_launcher.png new file mode 100644 index 0000000000000000000000000000000000000000..d5f1c8d34e7a88e3f88bea192c3a370d44689c3c GIT binary patch literal 1031 zcmeAS@N?(olHy`uVBq!ia0vp^6F``Q8Ax83A=Cw=BuiW)N`mv#O3D+9QW+dm@{>{( zJaZG%Q-e|yQz{EjrrIztFa`(sgt!6~Yi|1%a`XoT0ojZ}lNrNjb9xjc(B0U1_% zz5^97Xt*%oq$rQy4?0GKNfJ44uvxI)gC`h-NZ|&0-7(qS@?b!5r36oQ}zyZrNO3 zMO=Or+<~>+A&uN&E!^Sl+>xE!QC-|oJv`ApDhqC^EWD|@=#J`=d#Xzxs4ah}w&Jnc z$|q_opQ^2TrnVZ0o~wh<3t%W&flvYGe#$xqda2bR_R zvPYgMcHgjZ5nSA^lJr%;<&0do;O^tDDh~=pIxA#coaCY>&N%M2^tq^U%3DB@ynvKo}b?yu-bFc-u0JHzced$sg7S3zqI(2 z#Km{dPr7I=pQ5>FuK#)QwK?Y`E`B?nP+}U)I#c1+FM*1kNvWG|a(TpksZQ3B@sD~b zpQ2)*V*TdwjFOtHvV|;OsiDqHi=6%)o4b!)x$)%9pGTsE z-JL={-Ffv+T87W(Xpooq<`r*VzWQcgBN$$`u}f>-ZQI1BB8ykN*=e4rIsJx9>z}*o zo~|9I;xof literal 0 HcmV?d00001 diff --git a/mih_ui/android/build/macos/SourcePackages/firebase_auth-6.5.4/example/android/app/src/main/res/mipmap-xxxhdpi/ic_launcher.png b/mih_ui/android/build/macos/SourcePackages/firebase_auth-6.5.4/example/android/app/src/main/res/mipmap-xxxhdpi/ic_launcher.png new file mode 100644 index 0000000000000000000000000000000000000000..4d6372eebdb28e45604e46eeda8dd24651419bc0 GIT binary patch literal 1443 zcmb`G{WsKk6vsdJTdFg%tJav9_E4vzrOaqkWF|A724Nly!y+?N9`YV6wZ}5(X(D_N(?!*n3`|_r0Hc?=PQw&*vnU?QTFY zB_MsH|!j$PP;I}?dppoE_gA(4uc!jV&0!l7_;&p2^pxNo>PEcNJv za5_RT$o2Mf!<+r?&EbHH6nMoTsDOa;mN(wv8RNsHpG)`^ymG-S5By8=l9iVXzN_eG%Xg2@Xeq76tTZ*dGh~Lo9vl;Zfs+W#BydUw zCkZ$o1LqWQO$FC9aKlLl*7x9^0q%0}$OMlp@Kk_jHXOjofdePND+j!A{q!8~Jn+s3 z?~~w@4?egS02}8NuulUA=L~QQfm;MzCGd)XhiftT;+zFO&JVyp2mBww?;QByS_1w! zrQlx%{^cMj0|Bo1FjwY@Q8?Hx0cIPF*@-ZRFpPc#bBw{5@tD(5%sClzIfl8WU~V#u zm5Q;_F!wa$BSpqhN>W@2De?TKWR*!ujY;Yylk_X5#~V!L*Gw~;$%4Q8~Mad z@`-kG?yb$a9cHIApZDVZ^U6Xkp<*4rU82O7%}0jjHlK{id@?-wpN*fCHXyXh(bLt* zPc}H-x0e4E&nQ>y%B-(EL=9}RyC%MyX=upHuFhAk&MLbsF0LP-q`XnH78@fT+pKPW zu72MW`|?8ht^tz$iC}ZwLp4tB;Q49K!QCF3@!iB1qOI=?w z7In!}F~ij(18UYUjnbmC!qKhPo%24?8U1x{7o(+?^Zu0Hx81|FuS?bJ0jgBhEMzf< zCgUq7r2OCB(`XkKcN-TL>u5y#dD6D!)5W?`O5)V^>jb)P)GBdy%t$uUMpf$SNV31$ zb||OojAbvMP?T@$h_ZiFLFVHDmbyMhJF|-_)HX3%m=CDI+ID$0^C>kzxprBW)hw(v zr!Gmda);ICoQyhV_oP5+C%?jcG8v+D@9f?Dk*!BxY}dazmrT@64UrP3hlslANK)bq z$67n83eh}OeW&SV@HG95P|bjfqJ7gw$e+`Hxo!4cx`jdK1bJ>YDSpGKLPZ^1cv$ek zIB?0S<#tX?SJCLWdMd{-ME?$hc7A$zBOdIJ)4!KcAwb=VMov)nK;9z>x~rfT1>dS+ zZ6#`2v@`jgbqq)P22H)Tx2CpmM^o1$B+xT6`(v%5xJ(?j#>Q$+rx_R|7TzDZe{J6q zG1*EcU%tE?!kO%^M;3aM6JN*LAKUVb^xz8-Pxo#jR5(-KBeLJvA@-gxNHx0M-ZJLl z;#JwQoh~9V?`UVo#}{6ka@II>++D@%KqGpMdlQ}?9E*wFcf5(#XQnP$Dk5~%iX^>f z%$y;?M0BLp{O3a(-4A?ewryHrrD%cx#Q^%KY1H zNre$ve+vceSLZcNY4U(RBX&)oZn*Py()h)XkE?PL$!bNb{N5FVI2Y%LKEm%yvpyTP z(1P?z~7YxD~Rf<(a@_y` literal 0 HcmV?d00001 diff --git a/mih_ui/android/build/macos/SourcePackages/firebase_auth-6.5.4/example/android/app/src/main/res/values-night/styles.xml b/mih_ui/android/build/macos/SourcePackages/firebase_auth-6.5.4/example/android/app/src/main/res/values-night/styles.xml new file mode 100644 index 00000000..06952be7 --- /dev/null +++ b/mih_ui/android/build/macos/SourcePackages/firebase_auth-6.5.4/example/android/app/src/main/res/values-night/styles.xml @@ -0,0 +1,18 @@ + + + + + + + diff --git a/mih_ui/android/build/macos/SourcePackages/firebase_auth-6.5.4/example/android/app/src/main/res/values/styles.xml b/mih_ui/android/build/macos/SourcePackages/firebase_auth-6.5.4/example/android/app/src/main/res/values/styles.xml new file mode 100644 index 00000000..cb1ef880 --- /dev/null +++ b/mih_ui/android/build/macos/SourcePackages/firebase_auth-6.5.4/example/android/app/src/main/res/values/styles.xml @@ -0,0 +1,18 @@ + + + + + + + diff --git a/mih_ui/android/build/macos/SourcePackages/firebase_auth-6.5.4/example/android/app/src/profile/AndroidManifest.xml b/mih_ui/android/build/macos/SourcePackages/firebase_auth-6.5.4/example/android/app/src/profile/AndroidManifest.xml new file mode 100644 index 00000000..399f6981 --- /dev/null +++ b/mih_ui/android/build/macos/SourcePackages/firebase_auth-6.5.4/example/android/app/src/profile/AndroidManifest.xml @@ -0,0 +1,7 @@ + + + + diff --git a/mih_ui/android/build/macos/SourcePackages/firebase_auth-6.5.4/example/android/build.gradle b/mih_ui/android/build/macos/SourcePackages/firebase_auth-6.5.4/example/android/build.gradle new file mode 100644 index 00000000..d2ffbffa --- /dev/null +++ b/mih_ui/android/build/macos/SourcePackages/firebase_auth-6.5.4/example/android/build.gradle @@ -0,0 +1,18 @@ +allprojects { + repositories { + google() + mavenCentral() + } +} + +rootProject.buildDir = "../build" +subprojects { + project.buildDir = "${rootProject.buildDir}/${project.name}" +} +subprojects { + project.evaluationDependsOn(":app") +} + +tasks.register("clean", Delete) { + delete rootProject.buildDir +} diff --git a/mih_ui/android/build/macos/SourcePackages/firebase_auth-6.5.4/example/android/gradle.properties b/mih_ui/android/build/macos/SourcePackages/firebase_auth-6.5.4/example/android/gradle.properties new file mode 100644 index 00000000..3b5b324f --- /dev/null +++ b/mih_ui/android/build/macos/SourcePackages/firebase_auth-6.5.4/example/android/gradle.properties @@ -0,0 +1,3 @@ +org.gradle.jvmargs=-Xmx4G -XX:+HeapDumpOnOutOfMemoryError +android.useAndroidX=true +android.enableJetifier=true diff --git a/mih_ui/android/build/macos/SourcePackages/firebase_auth-6.5.4/example/android/gradle/wrapper/gradle-wrapper.properties b/mih_ui/android/build/macos/SourcePackages/firebase_auth-6.5.4/example/android/gradle/wrapper/gradle-wrapper.properties new file mode 100644 index 00000000..e411586a --- /dev/null +++ b/mih_ui/android/build/macos/SourcePackages/firebase_auth-6.5.4/example/android/gradle/wrapper/gradle-wrapper.properties @@ -0,0 +1,5 @@ +distributionBase=GRADLE_USER_HOME +distributionPath=wrapper/dists +distributionUrl=https\://services.gradle.org/distributions/gradle-8.4-bin.zip +zipStoreBase=GRADLE_USER_HOME +zipStorePath=wrapper/dists diff --git a/mih_ui/android/build/macos/SourcePackages/firebase_auth-6.5.4/example/android/settings.gradle b/mih_ui/android/build/macos/SourcePackages/firebase_auth-6.5.4/example/android/settings.gradle new file mode 100644 index 00000000..a4d924db --- /dev/null +++ b/mih_ui/android/build/macos/SourcePackages/firebase_auth-6.5.4/example/android/settings.gradle @@ -0,0 +1,28 @@ +pluginManagement { + def flutterSdkPath = { + def properties = new Properties() + file("local.properties").withInputStream { properties.load(it) } + def flutterSdkPath = properties.getProperty("flutter.sdk") + assert flutterSdkPath != null, "flutter.sdk not set in local.properties" + return flutterSdkPath + }() + + includeBuild("$flutterSdkPath/packages/flutter_tools/gradle") + + repositories { + google() + mavenCentral() + gradlePluginPortal() + } +} + +plugins { + id "dev.flutter.flutter-plugin-loader" version "1.0.0" + id "com.android.application" version "8.3.0" apply false + // START: FlutterFire Configuration + id "com.google.gms.google-services" version "4.3.15" apply false + // END: FlutterFire Configuration + id "org.jetbrains.kotlin.android" version "1.9.22" apply false +} + +include ":app" diff --git a/mih_ui/android/build/macos/SourcePackages/firebase_auth-6.5.4/example/ios/Flutter/AppFrameworkInfo.plist b/mih_ui/android/build/macos/SourcePackages/firebase_auth-6.5.4/example/ios/Flutter/AppFrameworkInfo.plist new file mode 100644 index 00000000..b3c50a89 --- /dev/null +++ b/mih_ui/android/build/macos/SourcePackages/firebase_auth-6.5.4/example/ios/Flutter/AppFrameworkInfo.plist @@ -0,0 +1,30 @@ + + + + + CFBundleDevelopmentRegion + $(DEVELOPMENT_LANGUAGE) + CFBundleExecutable + App + CFBundleIdentifier + io.flutter.flutter.app + CFBundleInfoDictionaryVersion + 6.0 + CFBundleName + App + CFBundlePackageType + FMWK + CFBundleShortVersionString + 1.0 + CFBundleSignature + ???? + CFBundleVersion + 1.0 + UIRequiredDeviceCapabilities + + arm64 + + MinimumOSVersion + 12.0 + + diff --git a/mih_ui/android/build/macos/SourcePackages/firebase_auth-6.5.4/example/ios/Flutter/Debug.xcconfig b/mih_ui/android/build/macos/SourcePackages/firebase_auth-6.5.4/example/ios/Flutter/Debug.xcconfig new file mode 100644 index 00000000..ec97fc6f --- /dev/null +++ b/mih_ui/android/build/macos/SourcePackages/firebase_auth-6.5.4/example/ios/Flutter/Debug.xcconfig @@ -0,0 +1,2 @@ +#include? "Pods/Target Support Files/Pods-Runner/Pods-Runner.debug.xcconfig" +#include "Generated.xcconfig" diff --git a/mih_ui/android/build/macos/SourcePackages/firebase_auth-6.5.4/example/ios/Flutter/Release.xcconfig b/mih_ui/android/build/macos/SourcePackages/firebase_auth-6.5.4/example/ios/Flutter/Release.xcconfig new file mode 100644 index 00000000..88c29144 --- /dev/null +++ b/mih_ui/android/build/macos/SourcePackages/firebase_auth-6.5.4/example/ios/Flutter/Release.xcconfig @@ -0,0 +1,3 @@ +#include? "Pods/Target Support Files/Pods-Runner/Pods-Runner.release.xcconfig" +#include "Pods/Target Support Files/Pods-Runner/Pods-Runner.release.xcconfig" +#include "Generated.xcconfig" diff --git a/mih_ui/android/build/macos/SourcePackages/firebase_auth-6.5.4/example/ios/Podfile b/mih_ui/android/build/macos/SourcePackages/firebase_auth-6.5.4/example/ios/Podfile new file mode 100644 index 00000000..3026bae9 --- /dev/null +++ b/mih_ui/android/build/macos/SourcePackages/firebase_auth-6.5.4/example/ios/Podfile @@ -0,0 +1,48 @@ +# Uncomment this line to define a global platform for your project +platform :ios, '15.0' + +# CocoaPods analytics sends network stats synchronously affecting flutter build latency. +ENV['COCOAPODS_DISABLE_STATS'] = 'true' + +project 'Runner', { + 'Debug' => :debug, + 'Profile' => :release, + 'Release' => :release, +} + +def flutter_root + generated_xcode_build_settings_path = File.expand_path(File.join('..', 'Flutter', 'Generated.xcconfig'), __FILE__) + unless File.exist?(generated_xcode_build_settings_path) + raise "#{generated_xcode_build_settings_path} must exist. If you're running pod install manually, make sure flutter pub get is executed first" + end + + File.foreach(generated_xcode_build_settings_path) do |line| + matches = line.match(/FLUTTER_ROOT\=(.*)/) + return matches[1].strip if matches + end + raise "FLUTTER_ROOT not found in #{generated_xcode_build_settings_path}. Try deleting Generated.xcconfig, then run flutter pub get" +end + +require File.expand_path(File.join('packages', 'flutter_tools', 'bin', 'podhelper'), flutter_root) + +flutter_ios_podfile_setup + +target 'Runner' do + use_frameworks! + use_modular_headers! + flutter_install_all_ios_pods File.dirname(File.realpath(__FILE__)) +end + +post_install do |installer| + installer.pods_project.targets.each do |target| + flutter_additional_ios_build_settings(target) + end + + installer.generated_projects.each do |project| + project.targets.each do |target| + target.build_configurations.each do |config| + config.build_settings['IPHONEOS_DEPLOYMENT_TARGET'] = '11.0' + end + end + end +end diff --git a/mih_ui/android/build/macos/SourcePackages/firebase_auth-6.5.4/example/ios/Runner.xcodeproj/project.pbxproj b/mih_ui/android/build/macos/SourcePackages/firebase_auth-6.5.4/example/ios/Runner.xcodeproj/project.pbxproj new file mode 100644 index 00000000..9da003ec --- /dev/null +++ b/mih_ui/android/build/macos/SourcePackages/firebase_auth-6.5.4/example/ios/Runner.xcodeproj/project.pbxproj @@ -0,0 +1,700 @@ +// !$*UTF8*$! +{ + archiveVersion = 1; + classes = { + }; + objectVersion = 54; + objects = { + +/* Begin PBXBuildFile section */ + 081BFEF7D2871CF6AC71DD05 /* GoogleService-Info.plist in Resources */ = {isa = PBXBuildFile; fileRef = 7B49E087B951778510D20936 /* GoogleService-Info.plist */; }; + 1498D2341E8E89220040F4C2 /* GeneratedPluginRegistrant.m in Sources */ = {isa = PBXBuildFile; fileRef = 1498D2331E8E89220040F4C2 /* GeneratedPluginRegistrant.m */; }; + 25A01FAE278D905100D1E790 /* GoogleService-Info.plist in Resources */ = {isa = PBXBuildFile; fileRef = 25A01FAD278D905100D1E790 /* GoogleService-Info.plist */; }; + 3B3967161E833CAA004F5970 /* AppFrameworkInfo.plist in Resources */ = {isa = PBXBuildFile; fileRef = 3B3967151E833CAA004F5970 /* AppFrameworkInfo.plist */; }; + 3DBDE9876E1D48FC8ED096A3 /* Pods_Runner.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = E010D242A20C21968D02B7C9 /* Pods_Runner.framework */; }; + 78A318202AECB46A00862997 /* FlutterGeneratedPluginSwiftPackage in Frameworks */ = {isa = PBXBuildFile; productRef = 78A3181F2AECB46A00862997 /* FlutterGeneratedPluginSwiftPackage */; }; + 978B8F6F1D3862AE00F588F7 /* AppDelegate.m in Sources */ = {isa = PBXBuildFile; fileRef = 7AFFD8EE1D35381100E5BB4D /* AppDelegate.m */; }; + 97C146F31CF9000F007C117D /* main.m in Sources */ = {isa = PBXBuildFile; fileRef = 97C146F21CF9000F007C117D /* main.m */; }; + 97C146FC1CF9000F007C117D /* Main.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 97C146FA1CF9000F007C117D /* Main.storyboard */; }; + 97C146FE1CF9000F007C117D /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 97C146FD1CF9000F007C117D /* Assets.xcassets */; }; + 97C147011CF9000F007C117D /* LaunchScreen.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 97C146FF1CF9000F007C117D /* LaunchScreen.storyboard */; }; +/* End PBXBuildFile section */ + +/* Begin PBXCopyFilesBuildPhase section */ + 9705A1C41CF9048500538489 /* Embed Frameworks */ = { + isa = PBXCopyFilesBuildPhase; + buildActionMask = 2147483647; + dstPath = ""; + dstSubfolderSpec = 10; + files = ( + ); + name = "Embed Frameworks"; + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXCopyFilesBuildPhase section */ + +/* Begin PBXFileReference section */ + 1498D2321E8E86230040F4C2 /* GeneratedPluginRegistrant.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = GeneratedPluginRegistrant.h; sourceTree = ""; }; + 1498D2331E8E89220040F4C2 /* GeneratedPluginRegistrant.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = GeneratedPluginRegistrant.m; sourceTree = ""; }; + 253804AE278DB662003BA2E2 /* Runner.entitlements */ = {isa = PBXFileReference; lastKnownFileType = text.plist.entitlements; path = Runner.entitlements; sourceTree = ""; }; + 25A01FAD278D905100D1E790 /* GoogleService-Info.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; path = "GoogleService-Info.plist"; sourceTree = ""; }; + 2FB2202774601424C6393E3D /* Pods-Runner.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.debug.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.debug.xcconfig"; sourceTree = ""; }; + 3B3967151E833CAA004F5970 /* AppFrameworkInfo.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; name = AppFrameworkInfo.plist; path = Flutter/AppFrameworkInfo.plist; sourceTree = ""; }; + 7AFA3C8E1D35360C0083082E /* Release.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; name = Release.xcconfig; path = Flutter/Release.xcconfig; sourceTree = ""; }; + 7AFFD8ED1D35381100E5BB4D /* AppDelegate.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = AppDelegate.h; sourceTree = ""; }; + 7AFFD8EE1D35381100E5BB4D /* AppDelegate.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = AppDelegate.m; sourceTree = ""; }; + 7B49E087B951778510D20936 /* GoogleService-Info.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; name = "GoogleService-Info.plist"; path = "Runner/GoogleService-Info.plist"; sourceTree = ""; }; + 9740EEB21CF90195004384FC /* Debug.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; name = Debug.xcconfig; path = Flutter/Debug.xcconfig; sourceTree = ""; }; + 9740EEB31CF90195004384FC /* Generated.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; name = Generated.xcconfig; path = Flutter/Generated.xcconfig; sourceTree = ""; }; + 97C146EE1CF9000F007C117D /* Runner.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = Runner.app; sourceTree = BUILT_PRODUCTS_DIR; }; + 97C146F21CF9000F007C117D /* main.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = main.m; sourceTree = ""; }; + 97C146FB1CF9000F007C117D /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/Main.storyboard; sourceTree = ""; }; + 97C146FD1CF9000F007C117D /* Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Assets.xcassets; sourceTree = ""; }; + 97C147001CF9000F007C117D /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/LaunchScreen.storyboard; sourceTree = ""; }; + 97C147021CF9000F007C117D /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; + E010D242A20C21968D02B7C9 /* Pods_Runner.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_Runner.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + ED172FD60C3CC14CD005C328 /* Pods-Runner.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.release.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.release.xcconfig"; sourceTree = ""; }; + FD585EE39F3F8D58CFCE5419 /* Pods-Runner.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.profile.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.profile.xcconfig"; sourceTree = ""; }; +/* End PBXFileReference section */ + +/* Begin PBXFrameworksBuildPhase section */ + 97C146EB1CF9000F007C117D /* Frameworks */ = { + isa = PBXFrameworksBuildPhase; + buildActionMask = 2147483647; + files = ( + 78A318202AECB46A00862997 /* FlutterGeneratedPluginSwiftPackage in Frameworks */, + 3DBDE9876E1D48FC8ED096A3 /* Pods_Runner.framework in Frameworks */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXFrameworksBuildPhase section */ + +/* Begin PBXGroup section */ + 9740EEB11CF90186004384FC /* Flutter */ = { + isa = PBXGroup; + children = ( + 3B3967151E833CAA004F5970 /* AppFrameworkInfo.plist */, + 9740EEB21CF90195004384FC /* Debug.xcconfig */, + 7AFA3C8E1D35360C0083082E /* Release.xcconfig */, + 9740EEB31CF90195004384FC /* Generated.xcconfig */, + ); + name = Flutter; + sourceTree = ""; + }; + 97C146E51CF9000F007C117D = { + isa = PBXGroup; + children = ( + 9740EEB11CF90186004384FC /* Flutter */, + 97C146F01CF9000F007C117D /* Runner */, + 97C146EF1CF9000F007C117D /* Products */, + 9C7F99B73919EAB4FA657D9E /* Pods */, + 7B49E087B951778510D20936 /* GoogleService-Info.plist */, + DE500BC6E74EB524103D00CE /* Frameworks */, + ); + sourceTree = ""; + }; + 97C146EF1CF9000F007C117D /* Products */ = { + isa = PBXGroup; + children = ( + 97C146EE1CF9000F007C117D /* Runner.app */, + ); + name = Products; + sourceTree = ""; + }; + 97C146F01CF9000F007C117D /* Runner */ = { + isa = PBXGroup; + children = ( + 253804AE278DB662003BA2E2 /* Runner.entitlements */, + 7AFFD8ED1D35381100E5BB4D /* AppDelegate.h */, + 7AFFD8EE1D35381100E5BB4D /* AppDelegate.m */, + 97C146FA1CF9000F007C117D /* Main.storyboard */, + 97C146FD1CF9000F007C117D /* Assets.xcassets */, + 97C146FF1CF9000F007C117D /* LaunchScreen.storyboard */, + 25A01FAD278D905100D1E790 /* GoogleService-Info.plist */, + 97C147021CF9000F007C117D /* Info.plist */, + 97C146F11CF9000F007C117D /* Supporting Files */, + 1498D2321E8E86230040F4C2 /* GeneratedPluginRegistrant.h */, + 1498D2331E8E89220040F4C2 /* GeneratedPluginRegistrant.m */, + ); + path = Runner; + sourceTree = ""; + }; + 97C146F11CF9000F007C117D /* Supporting Files */ = { + isa = PBXGroup; + children = ( + 97C146F21CF9000F007C117D /* main.m */, + ); + name = "Supporting Files"; + sourceTree = ""; + }; + 9C7F99B73919EAB4FA657D9E /* Pods */ = { + isa = PBXGroup; + children = ( + 2FB2202774601424C6393E3D /* Pods-Runner.debug.xcconfig */, + ED172FD60C3CC14CD005C328 /* Pods-Runner.release.xcconfig */, + FD585EE39F3F8D58CFCE5419 /* Pods-Runner.profile.xcconfig */, + ); + path = Pods; + sourceTree = ""; + }; + DE500BC6E74EB524103D00CE /* Frameworks */ = { + isa = PBXGroup; + children = ( + E010D242A20C21968D02B7C9 /* Pods_Runner.framework */, + ); + name = Frameworks; + sourceTree = ""; + }; +/* End PBXGroup section */ + +/* Begin PBXNativeTarget section */ + 97C146ED1CF9000F007C117D /* Runner */ = { + isa = PBXNativeTarget; + buildConfigurationList = 97C147051CF9000F007C117D /* Build configuration list for PBXNativeTarget "Runner" */; + buildPhases = ( + AC2BD8C60F3AA720CEA78FA3 /* [CP] Check Pods Manifest.lock */, + 9740EEB61CF901F6004384FC /* Run Script */, + 97C146EA1CF9000F007C117D /* Sources */, + 97C146EB1CF9000F007C117D /* Frameworks */, + 97C146EC1CF9000F007C117D /* Resources */, + 9705A1C41CF9048500538489 /* Embed Frameworks */, + 3B06AD1E1E4923F5004D2608 /* Thin Binary */, + 3E42446041C78F434168F902 /* [CP] Embed Pods Frameworks */, + 7A855ADEADAAB6F658B535DB /* [CP] Copy Pods Resources */, + ); + buildRules = ( + ); + dependencies = ( + ); + name = Runner; + packageProductDependencies = ( + 78A3181F2AECB46A00862997 /* FlutterGeneratedPluginSwiftPackage */, + ); + productName = Runner; + productReference = 97C146EE1CF9000F007C117D /* Runner.app */; + productType = "com.apple.product-type.application"; + }; +/* End PBXNativeTarget section */ + +/* Begin PBXProject section */ + 97C146E61CF9000F007C117D /* Project object */ = { + isa = PBXProject; + attributes = { + LastUpgradeCheck = 1510; + ORGANIZATIONNAME = "The Chromium Authors"; + TargetAttributes = { + 97C146ED1CF9000F007C117D = { + CreatedOnToolsVersion = 7.3.1; + ProvisioningStyle = Automatic; + }; + }; + }; + buildConfigurationList = 97C146E91CF9000F007C117D /* Build configuration list for PBXProject "Runner" */; + compatibilityVersion = "Xcode 3.2"; + developmentRegion = en; + hasScannedForEncodings = 0; + knownRegions = ( + en, + Base, + ); + mainGroup = 97C146E51CF9000F007C117D; + packageReferences = ( + 781AD8BC2B33823900A9FFBB /* XCLocalSwiftPackageReference "Flutter/ephemeral/Packages/FlutterGeneratedPluginSwiftPackage" */, + ); + productRefGroup = 97C146EF1CF9000F007C117D /* Products */; + projectDirPath = ""; + projectRoot = ""; + targets = ( + 97C146ED1CF9000F007C117D /* Runner */, + ); + }; +/* End PBXProject section */ + +/* Begin PBXResourcesBuildPhase section */ + 97C146EC1CF9000F007C117D /* Resources */ = { + isa = PBXResourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + 97C147011CF9000F007C117D /* LaunchScreen.storyboard in Resources */, + 3B3967161E833CAA004F5970 /* AppFrameworkInfo.plist in Resources */, + 25A01FAE278D905100D1E790 /* GoogleService-Info.plist in Resources */, + 97C146FE1CF9000F007C117D /* Assets.xcassets in Resources */, + 97C146FC1CF9000F007C117D /* Main.storyboard in Resources */, + 081BFEF7D2871CF6AC71DD05 /* GoogleService-Info.plist in Resources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXResourcesBuildPhase section */ + +/* Begin PBXShellScriptBuildPhase section */ + 3B06AD1E1E4923F5004D2608 /* Thin Binary */ = { + isa = PBXShellScriptBuildPhase; + alwaysOutOfDate = 1; + buildActionMask = 2147483647; + files = ( + ); + inputPaths = ( + "${TARGET_BUILD_DIR}/${INFOPLIST_PATH}", + ); + name = "Thin Binary"; + outputPaths = ( + ); + runOnlyForDeploymentPostprocessing = 0; + shellPath = /bin/sh; + shellScript = "/bin/sh \"$FLUTTER_ROOT/packages/flutter_tools/bin/xcode_backend.sh\" embed_and_thin"; + }; + 3E42446041C78F434168F902 /* [CP] Embed Pods Frameworks */ = { + isa = PBXShellScriptBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + inputPaths = ( + "${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks.sh", + "${BUILT_PRODUCTS_DIR}/AppAuth/AppAuth.framework", + "${BUILT_PRODUCTS_DIR}/FirebaseAppCheckInterop/FirebaseAppCheckInterop.framework", + "${BUILT_PRODUCTS_DIR}/FirebaseAuth/FirebaseAuth.framework", + "${BUILT_PRODUCTS_DIR}/FirebaseAuthInterop/FirebaseAuthInterop.framework", + "${BUILT_PRODUCTS_DIR}/FirebaseCore/FirebaseCore.framework", + "${BUILT_PRODUCTS_DIR}/FirebaseCoreExtension/FirebaseCoreExtension.framework", + "${BUILT_PRODUCTS_DIR}/FirebaseCoreInternal/FirebaseCoreInternal.framework", + "${BUILT_PRODUCTS_DIR}/FirebaseInstallations/FirebaseInstallations.framework", + "${BUILT_PRODUCTS_DIR}/FirebaseMessaging/FirebaseMessaging.framework", + "${BUILT_PRODUCTS_DIR}/GTMAppAuth/GTMAppAuth.framework", + "${BUILT_PRODUCTS_DIR}/GTMSessionFetcher/GTMSessionFetcher.framework", + "${BUILT_PRODUCTS_DIR}/GoogleDataTransport/GoogleDataTransport.framework", + "${BUILT_PRODUCTS_DIR}/GoogleSignIn/GoogleSignIn.framework", + "${BUILT_PRODUCTS_DIR}/GoogleUtilities/GoogleUtilities.framework", + "${BUILT_PRODUCTS_DIR}/PromisesObjC/FBLPromises.framework", + "${BUILT_PRODUCTS_DIR}/RecaptchaInterop/RecaptchaInterop.framework", + "${BUILT_PRODUCTS_DIR}/flutter_facebook_auth/flutter_facebook_auth.framework", + "${BUILT_PRODUCTS_DIR}/flutter_secure_storage/flutter_secure_storage.framework", + "${BUILT_PRODUCTS_DIR}/nanopb/nanopb.framework", + "${BUILT_PRODUCTS_DIR}/path_provider_foundation/path_provider_foundation.framework", + "${BUILT_PRODUCTS_DIR}/shared_preferences_foundation/shared_preferences_foundation.framework", + "${BUILT_PRODUCTS_DIR}/url_launcher_ios/url_launcher_ios.framework", + "${PODS_XCFRAMEWORKS_BUILD_DIR}/FBAEMKit/FBAEMKit.framework/FBAEMKit", + "${PODS_XCFRAMEWORKS_BUILD_DIR}/FBSDKCoreKit/FBSDKCoreKit.framework/FBSDKCoreKit", + "${PODS_XCFRAMEWORKS_BUILD_DIR}/FBSDKCoreKit_Basics/FBSDKCoreKit_Basics.framework/FBSDKCoreKit_Basics", + "${PODS_XCFRAMEWORKS_BUILD_DIR}/FBSDKLoginKit/FBSDKLoginKit.framework/FBSDKLoginKit", + ); + name = "[CP] Embed Pods Frameworks"; + outputPaths = ( + "${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/AppAuth.framework", + "${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/FirebaseAppCheckInterop.framework", + "${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/FirebaseAuth.framework", + "${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/FirebaseAuthInterop.framework", + "${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/FirebaseCore.framework", + "${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/FirebaseCoreExtension.framework", + "${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/FirebaseCoreInternal.framework", + "${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/FirebaseInstallations.framework", + "${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/FirebaseMessaging.framework", + "${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/GTMAppAuth.framework", + "${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/GTMSessionFetcher.framework", + "${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/GoogleDataTransport.framework", + "${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/GoogleSignIn.framework", + "${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/GoogleUtilities.framework", + "${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/FBLPromises.framework", + "${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/RecaptchaInterop.framework", + "${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/flutter_facebook_auth.framework", + "${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/flutter_secure_storage.framework", + "${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/nanopb.framework", + "${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/path_provider_foundation.framework", + "${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/shared_preferences_foundation.framework", + "${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/url_launcher_ios.framework", + "${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/FBAEMKit.framework", + "${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/FBSDKCoreKit.framework", + "${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/FBSDKCoreKit_Basics.framework", + "${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/FBSDKLoginKit.framework", + ); + runOnlyForDeploymentPostprocessing = 0; + shellPath = /bin/sh; + shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks.sh\"\n"; + showEnvVarsInLog = 0; + }; + 7A855ADEADAAB6F658B535DB /* [CP] Copy Pods Resources */ = { + isa = PBXShellScriptBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + inputPaths = ( + "${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-resources.sh", + "${PODS_CONFIGURATION_BUILD_DIR}/firebase_messaging/firebase_messaging_Privacy.bundle", + "${PODS_CONFIGURATION_BUILD_DIR}/google_sign_in_ios/google_sign_in_ios_privacy.bundle", + ); + name = "[CP] Copy Pods Resources"; + outputPaths = ( + "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/firebase_messaging_Privacy.bundle", + "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/google_sign_in_ios_privacy.bundle", + ); + runOnlyForDeploymentPostprocessing = 0; + shellPath = /bin/sh; + shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-resources.sh\"\n"; + showEnvVarsInLog = 0; + }; + 9740EEB61CF901F6004384FC /* Run Script */ = { + isa = PBXShellScriptBuildPhase; + alwaysOutOfDate = 1; + buildActionMask = 2147483647; + files = ( + ); + inputPaths = ( + ); + name = "Run Script"; + outputPaths = ( + ); + runOnlyForDeploymentPostprocessing = 0; + shellPath = /bin/sh; + shellScript = "/bin/sh \"$FLUTTER_ROOT/packages/flutter_tools/bin/xcode_backend.sh\" build"; + }; + AC2BD8C60F3AA720CEA78FA3 /* [CP] Check Pods Manifest.lock */ = { + isa = PBXShellScriptBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + inputFileListPaths = ( + ); + inputPaths = ( + "${PODS_PODFILE_DIR_PATH}/Podfile.lock", + "${PODS_ROOT}/Manifest.lock", + ); + name = "[CP] Check Pods Manifest.lock"; + outputFileListPaths = ( + ); + outputPaths = ( + "$(DERIVED_FILE_DIR)/Pods-Runner-checkManifestLockResult.txt", + ); + runOnlyForDeploymentPostprocessing = 0; + shellPath = /bin/sh; + shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; + showEnvVarsInLog = 0; + }; +/* End PBXShellScriptBuildPhase section */ + +/* Begin PBXSourcesBuildPhase section */ + 97C146EA1CF9000F007C117D /* Sources */ = { + isa = PBXSourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + 978B8F6F1D3862AE00F588F7 /* AppDelegate.m in Sources */, + 97C146F31CF9000F007C117D /* main.m in Sources */, + 1498D2341E8E89220040F4C2 /* GeneratedPluginRegistrant.m in Sources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXSourcesBuildPhase section */ + +/* Begin PBXVariantGroup section */ + 97C146FA1CF9000F007C117D /* Main.storyboard */ = { + isa = PBXVariantGroup; + children = ( + 97C146FB1CF9000F007C117D /* Base */, + ); + name = Main.storyboard; + sourceTree = ""; + }; + 97C146FF1CF9000F007C117D /* LaunchScreen.storyboard */ = { + isa = PBXVariantGroup; + children = ( + 97C147001CF9000F007C117D /* Base */, + ); + name = LaunchScreen.storyboard; + sourceTree = ""; + }; +/* End PBXVariantGroup section */ + +/* Begin XCBuildConfiguration section */ + 249021D3217E4FDB00AE95B9 /* Profile */ = { + isa = XCBuildConfiguration; + buildSettings = { + ALWAYS_SEARCH_USER_PATHS = NO; + CLANG_ANALYZER_NONNULL = YES; + CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x"; + CLANG_CXX_LIBRARY = "libc++"; + CLANG_ENABLE_MODULES = YES; + CLANG_ENABLE_OBJC_ARC = YES; + CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES; + CLANG_WARN_BOOL_CONVERSION = YES; + CLANG_WARN_COMMA = YES; + CLANG_WARN_CONSTANT_CONVERSION = YES; + CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES; + CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; + CLANG_WARN_EMPTY_BODY = YES; + CLANG_WARN_ENUM_CONVERSION = YES; + CLANG_WARN_INFINITE_RECURSION = YES; + CLANG_WARN_INT_CONVERSION = YES; + CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES; + CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES; + CLANG_WARN_OBJC_LITERAL_CONVERSION = YES; + CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; + CLANG_WARN_RANGE_LOOP_ANALYSIS = YES; + CLANG_WARN_STRICT_PROTOTYPES = YES; + CLANG_WARN_SUSPICIOUS_MOVE = YES; + CLANG_WARN_UNREACHABLE_CODE = YES; + CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; + "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer"; + COPY_PHASE_STRIP = NO; + DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; + ENABLE_NS_ASSERTIONS = NO; + ENABLE_STRICT_OBJC_MSGSEND = YES; + GCC_C_LANGUAGE_STANDARD = gnu99; + GCC_NO_COMMON_BLOCKS = YES; + GCC_WARN_64_TO_32_BIT_CONVERSION = YES; + GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; + GCC_WARN_UNDECLARED_SELECTOR = YES; + GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; + GCC_WARN_UNUSED_FUNCTION = YES; + GCC_WARN_UNUSED_VARIABLE = YES; + HEADER_SEARCH_PATHS = "\\\"${PODS_ROOT}/Headers\\\""; + IPHONEOS_DEPLOYMENT_TARGET = 15.0; + MTL_ENABLE_DEBUG_INFO = NO; + SDKROOT = iphoneos; + SUPPORTED_PLATFORMS = iphoneos; + TARGETED_DEVICE_FAMILY = "1,2"; + VALIDATE_PRODUCT = YES; + }; + name = Profile; + }; + 249021D4217E4FDB00AE95B9 /* Profile */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = 7AFA3C8E1D35360C0083082E /* Release.xcconfig */; + buildSettings = { + ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; + CODE_SIGN_ENTITLEMENTS = Runner/Runner.entitlements; + CODE_SIGN_IDENTITY = "Apple Development"; + CODE_SIGN_STYLE = Automatic; + CURRENT_PROJECT_VERSION = "$(FLUTTER_BUILD_NUMBER)"; + DEVELOPMENT_TEAM = YYX2P3XVJ7; + ENABLE_BITCODE = NO; + FRAMEWORK_SEARCH_PATHS = ( + "$(inherited)", + "$(PROJECT_DIR)/Flutter", + ); + INFOPLIST_FILE = Runner/Info.plist; + IPHONEOS_DEPLOYMENT_TARGET = 15.0; + LD_RUNPATH_SEARCH_PATHS = ( + "$(inherited)", + "@executable_path/Frameworks", + ); + LIBRARY_SEARCH_PATHS = ( + "$(inherited)", + "$(PROJECT_DIR)/Flutter", + ); + PRODUCT_BUNDLE_IDENTIFIER = io.flutter.plugins.firebase.auth.example; + PRODUCT_NAME = "$(TARGET_NAME)"; + PROVISIONING_PROFILE_SPECIFIER = ""; + VERSIONING_SYSTEM = "apple-generic"; + }; + name = Profile; + }; + 97C147031CF9000F007C117D /* Debug */ = { + isa = XCBuildConfiguration; + buildSettings = { + ALWAYS_SEARCH_USER_PATHS = NO; + CLANG_ANALYZER_NONNULL = YES; + CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x"; + CLANG_CXX_LIBRARY = "libc++"; + CLANG_ENABLE_MODULES = YES; + CLANG_ENABLE_OBJC_ARC = YES; + CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES; + CLANG_WARN_BOOL_CONVERSION = YES; + CLANG_WARN_COMMA = YES; + CLANG_WARN_CONSTANT_CONVERSION = YES; + CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES; + CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; + CLANG_WARN_EMPTY_BODY = YES; + CLANG_WARN_ENUM_CONVERSION = YES; + CLANG_WARN_INFINITE_RECURSION = YES; + CLANG_WARN_INT_CONVERSION = YES; + CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES; + CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES; + CLANG_WARN_OBJC_LITERAL_CONVERSION = YES; + CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; + CLANG_WARN_RANGE_LOOP_ANALYSIS = YES; + CLANG_WARN_STRICT_PROTOTYPES = YES; + CLANG_WARN_SUSPICIOUS_MOVE = YES; + CLANG_WARN_UNREACHABLE_CODE = YES; + CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; + "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer"; + COPY_PHASE_STRIP = NO; + DEBUG_INFORMATION_FORMAT = dwarf; + ENABLE_STRICT_OBJC_MSGSEND = YES; + ENABLE_TESTABILITY = YES; + GCC_C_LANGUAGE_STANDARD = gnu99; + GCC_DYNAMIC_NO_PIC = NO; + GCC_NO_COMMON_BLOCKS = YES; + GCC_OPTIMIZATION_LEVEL = 0; + GCC_PREPROCESSOR_DEFINITIONS = ( + "DEBUG=1", + "$(inherited)", + ); + GCC_WARN_64_TO_32_BIT_CONVERSION = YES; + GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; + GCC_WARN_UNDECLARED_SELECTOR = YES; + GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; + GCC_WARN_UNUSED_FUNCTION = YES; + GCC_WARN_UNUSED_VARIABLE = YES; + HEADER_SEARCH_PATHS = "\\\"${PODS_ROOT}/Headers\\\""; + IPHONEOS_DEPLOYMENT_TARGET = 15.0; + MTL_ENABLE_DEBUG_INFO = YES; + ONLY_ACTIVE_ARCH = YES; + SDKROOT = iphoneos; + TARGETED_DEVICE_FAMILY = "1,2"; + }; + name = Debug; + }; + 97C147041CF9000F007C117D /* Release */ = { + isa = XCBuildConfiguration; + buildSettings = { + ALWAYS_SEARCH_USER_PATHS = NO; + CLANG_ANALYZER_NONNULL = YES; + CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x"; + CLANG_CXX_LIBRARY = "libc++"; + CLANG_ENABLE_MODULES = YES; + CLANG_ENABLE_OBJC_ARC = YES; + CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES; + CLANG_WARN_BOOL_CONVERSION = YES; + CLANG_WARN_COMMA = YES; + CLANG_WARN_CONSTANT_CONVERSION = YES; + CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES; + CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; + CLANG_WARN_EMPTY_BODY = YES; + CLANG_WARN_ENUM_CONVERSION = YES; + CLANG_WARN_INFINITE_RECURSION = YES; + CLANG_WARN_INT_CONVERSION = YES; + CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES; + CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES; + CLANG_WARN_OBJC_LITERAL_CONVERSION = YES; + CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; + CLANG_WARN_RANGE_LOOP_ANALYSIS = YES; + CLANG_WARN_STRICT_PROTOTYPES = YES; + CLANG_WARN_SUSPICIOUS_MOVE = YES; + CLANG_WARN_UNREACHABLE_CODE = YES; + CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; + "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer"; + COPY_PHASE_STRIP = NO; + DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; + ENABLE_NS_ASSERTIONS = NO; + ENABLE_STRICT_OBJC_MSGSEND = YES; + GCC_C_LANGUAGE_STANDARD = gnu99; + GCC_NO_COMMON_BLOCKS = YES; + GCC_WARN_64_TO_32_BIT_CONVERSION = YES; + GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; + GCC_WARN_UNDECLARED_SELECTOR = YES; + GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; + GCC_WARN_UNUSED_FUNCTION = YES; + GCC_WARN_UNUSED_VARIABLE = YES; + HEADER_SEARCH_PATHS = "\\\"${PODS_ROOT}/Headers\\\""; + IPHONEOS_DEPLOYMENT_TARGET = 15.0; + MTL_ENABLE_DEBUG_INFO = NO; + SDKROOT = iphoneos; + SUPPORTED_PLATFORMS = iphoneos; + TARGETED_DEVICE_FAMILY = "1,2"; + VALIDATE_PRODUCT = YES; + }; + name = Release; + }; + 97C147061CF9000F007C117D /* Debug */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = 9740EEB21CF90195004384FC /* Debug.xcconfig */; + buildSettings = { + ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; + CODE_SIGN_ENTITLEMENTS = Runner/Runner.entitlements; + CODE_SIGN_IDENTITY = "Apple Development"; + CODE_SIGN_STYLE = Automatic; + CURRENT_PROJECT_VERSION = "$(FLUTTER_BUILD_NUMBER)"; + DEVELOPMENT_TEAM = YYX2P3XVJ7; + ENABLE_BITCODE = NO; + FRAMEWORK_SEARCH_PATHS = ( + "$(inherited)", + "$(PROJECT_DIR)/Flutter", + ); + INFOPLIST_FILE = Runner/Info.plist; + IPHONEOS_DEPLOYMENT_TARGET = 15.0; + LD_RUNPATH_SEARCH_PATHS = ( + "$(inherited)", + "@executable_path/Frameworks", + ); + LIBRARY_SEARCH_PATHS = ( + "$(inherited)", + "$(PROJECT_DIR)/Flutter", + ); + PRODUCT_BUNDLE_IDENTIFIER = io.flutter.plugins.firebase.auth.example; + PRODUCT_NAME = "$(TARGET_NAME)"; + PROVISIONING_PROFILE_SPECIFIER = ""; + VERSIONING_SYSTEM = "apple-generic"; + }; + name = Debug; + }; + 97C147071CF9000F007C117D /* Release */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = 7AFA3C8E1D35360C0083082E /* Release.xcconfig */; + buildSettings = { + ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; + CODE_SIGN_ENTITLEMENTS = Runner/Runner.entitlements; + CODE_SIGN_IDENTITY = "Apple Development"; + CODE_SIGN_STYLE = Automatic; + CURRENT_PROJECT_VERSION = "$(FLUTTER_BUILD_NUMBER)"; + DEVELOPMENT_TEAM = YYX2P3XVJ7; + ENABLE_BITCODE = NO; + FRAMEWORK_SEARCH_PATHS = ( + "$(inherited)", + "$(PROJECT_DIR)/Flutter", + ); + INFOPLIST_FILE = Runner/Info.plist; + IPHONEOS_DEPLOYMENT_TARGET = 15.0; + LD_RUNPATH_SEARCH_PATHS = ( + "$(inherited)", + "@executable_path/Frameworks", + ); + LIBRARY_SEARCH_PATHS = ( + "$(inherited)", + "$(PROJECT_DIR)/Flutter", + ); + PRODUCT_BUNDLE_IDENTIFIER = io.flutter.plugins.firebase.auth.example; + PRODUCT_NAME = "$(TARGET_NAME)"; + PROVISIONING_PROFILE_SPECIFIER = ""; + VERSIONING_SYSTEM = "apple-generic"; + }; + name = Release; + }; +/* End XCBuildConfiguration section */ + +/* Begin XCConfigurationList section */ + 97C146E91CF9000F007C117D /* Build configuration list for PBXProject "Runner" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + 97C147031CF9000F007C117D /* Debug */, + 97C147041CF9000F007C117D /* Release */, + 249021D3217E4FDB00AE95B9 /* Profile */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; + 97C147051CF9000F007C117D /* Build configuration list for PBXNativeTarget "Runner" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + 97C147061CF9000F007C117D /* Debug */, + 97C147071CF9000F007C117D /* Release */, + 249021D4217E4FDB00AE95B9 /* Profile */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; +/* End XCConfigurationList section */ + +/* Begin XCLocalSwiftPackageReference section */ + 781AD8BC2B33823900A9FFBB /* XCLocalSwiftPackageReference "Flutter/ephemeral/Packages/FlutterGeneratedPluginSwiftPackage" */ = { + isa = XCLocalSwiftPackageReference; + relativePath = Flutter/ephemeral/Packages/FlutterGeneratedPluginSwiftPackage; + }; +/* End XCLocalSwiftPackageReference section */ + +/* Begin XCSwiftPackageProductDependency section */ + 78A3181F2AECB46A00862997 /* FlutterGeneratedPluginSwiftPackage */ = { + isa = XCSwiftPackageProductDependency; + productName = FlutterGeneratedPluginSwiftPackage; + }; +/* End XCSwiftPackageProductDependency section */ + }; + rootObject = 97C146E61CF9000F007C117D /* Project object */; +} diff --git a/mih_ui/android/build/macos/SourcePackages/firebase_auth-6.5.4/example/ios/Runner.xcodeproj/project.xcworkspace/contents.xcworkspacedata b/mih_ui/android/build/macos/SourcePackages/firebase_auth-6.5.4/example/ios/Runner.xcodeproj/project.xcworkspace/contents.xcworkspacedata new file mode 100644 index 00000000..919434a6 --- /dev/null +++ b/mih_ui/android/build/macos/SourcePackages/firebase_auth-6.5.4/example/ios/Runner.xcodeproj/project.xcworkspace/contents.xcworkspacedata @@ -0,0 +1,7 @@ + + + + + diff --git a/mih_ui/android/build/macos/SourcePackages/firebase_auth-6.5.4/example/ios/Runner.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist b/mih_ui/android/build/macos/SourcePackages/firebase_auth-6.5.4/example/ios/Runner.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist new file mode 100644 index 00000000..18d98100 --- /dev/null +++ b/mih_ui/android/build/macos/SourcePackages/firebase_auth-6.5.4/example/ios/Runner.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist @@ -0,0 +1,8 @@ + + + + + IDEDidComputeMac32BitWarning + + + diff --git a/mih_ui/android/build/macos/SourcePackages/firebase_auth-6.5.4/example/ios/Runner.xcodeproj/project.xcworkspace/xcshareddata/WorkspaceSettings.xcsettings b/mih_ui/android/build/macos/SourcePackages/firebase_auth-6.5.4/example/ios/Runner.xcodeproj/project.xcworkspace/xcshareddata/WorkspaceSettings.xcsettings new file mode 100644 index 00000000..f9b0d7c5 --- /dev/null +++ b/mih_ui/android/build/macos/SourcePackages/firebase_auth-6.5.4/example/ios/Runner.xcodeproj/project.xcworkspace/xcshareddata/WorkspaceSettings.xcsettings @@ -0,0 +1,8 @@ + + + + + PreviewsEnabled + + + diff --git a/mih_ui/android/build/macos/SourcePackages/firebase_auth-6.5.4/example/ios/Runner.xcodeproj/xcshareddata/xcschemes/Runner.xcscheme b/mih_ui/android/build/macos/SourcePackages/firebase_auth-6.5.4/example/ios/Runner.xcodeproj/xcshareddata/xcschemes/Runner.xcscheme new file mode 100644 index 00000000..fc5ae031 --- /dev/null +++ b/mih_ui/android/build/macos/SourcePackages/firebase_auth-6.5.4/example/ios/Runner.xcodeproj/xcshareddata/xcschemes/Runner.xcscheme @@ -0,0 +1,94 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/mih_ui/android/build/macos/SourcePackages/firebase_auth-6.5.4/example/ios/Runner.xcworkspace/contents.xcworkspacedata b/mih_ui/android/build/macos/SourcePackages/firebase_auth-6.5.4/example/ios/Runner.xcworkspace/contents.xcworkspacedata new file mode 100644 index 00000000..21a3cc14 --- /dev/null +++ b/mih_ui/android/build/macos/SourcePackages/firebase_auth-6.5.4/example/ios/Runner.xcworkspace/contents.xcworkspacedata @@ -0,0 +1,10 @@ + + + + + + + diff --git a/mih_ui/android/build/macos/SourcePackages/firebase_auth-6.5.4/example/ios/Runner.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist b/mih_ui/android/build/macos/SourcePackages/firebase_auth-6.5.4/example/ios/Runner.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist new file mode 100644 index 00000000..18d98100 --- /dev/null +++ b/mih_ui/android/build/macos/SourcePackages/firebase_auth-6.5.4/example/ios/Runner.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist @@ -0,0 +1,8 @@ + + + + + IDEDidComputeMac32BitWarning + + + diff --git a/mih_ui/android/build/macos/SourcePackages/firebase_auth-6.5.4/example/ios/Runner.xcworkspace/xcshareddata/WorkspaceSettings.xcsettings b/mih_ui/android/build/macos/SourcePackages/firebase_auth-6.5.4/example/ios/Runner.xcworkspace/xcshareddata/WorkspaceSettings.xcsettings new file mode 100644 index 00000000..f9b0d7c5 --- /dev/null +++ b/mih_ui/android/build/macos/SourcePackages/firebase_auth-6.5.4/example/ios/Runner.xcworkspace/xcshareddata/WorkspaceSettings.xcsettings @@ -0,0 +1,8 @@ + + + + + PreviewsEnabled + + + diff --git a/mih_ui/android/build/macos/SourcePackages/firebase_auth-6.5.4/example/ios/Runner/AppDelegate.h b/mih_ui/android/build/macos/SourcePackages/firebase_auth-6.5.4/example/ios/Runner/AppDelegate.h new file mode 100644 index 00000000..36e21bbf --- /dev/null +++ b/mih_ui/android/build/macos/SourcePackages/firebase_auth-6.5.4/example/ios/Runner/AppDelegate.h @@ -0,0 +1,6 @@ +#import +#import + +@interface AppDelegate : FlutterAppDelegate + +@end diff --git a/mih_ui/android/build/macos/SourcePackages/firebase_auth-6.5.4/example/ios/Runner/AppDelegate.m b/mih_ui/android/build/macos/SourcePackages/firebase_auth-6.5.4/example/ios/Runner/AppDelegate.m new file mode 100644 index 00000000..70e83933 --- /dev/null +++ b/mih_ui/android/build/macos/SourcePackages/firebase_auth-6.5.4/example/ios/Runner/AppDelegate.m @@ -0,0 +1,13 @@ +#import "AppDelegate.h" +#import "GeneratedPluginRegistrant.h" + +@implementation AppDelegate + +- (BOOL)application:(UIApplication *)application + didFinishLaunchingWithOptions:(NSDictionary *)launchOptions { + [GeneratedPluginRegistrant registerWithRegistry:self]; + // Override point for customization after application launch. + return [super application:application didFinishLaunchingWithOptions:launchOptions]; +} + +@end diff --git a/mih_ui/android/build/macos/SourcePackages/firebase_auth-6.5.4/example/ios/Runner/AppDelegate.swift b/mih_ui/android/build/macos/SourcePackages/firebase_auth-6.5.4/example/ios/Runner/AppDelegate.swift new file mode 100644 index 00000000..62666446 --- /dev/null +++ b/mih_ui/android/build/macos/SourcePackages/firebase_auth-6.5.4/example/ios/Runner/AppDelegate.swift @@ -0,0 +1,13 @@ +import Flutter +import UIKit + +@main +@objc class AppDelegate: FlutterAppDelegate { + override func application( + _ application: UIApplication, + didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]? + ) -> Bool { + GeneratedPluginRegistrant.register(with: self) + return super.application(application, didFinishLaunchingWithOptions: launchOptions) + } +} diff --git a/mih_ui/android/build/macos/SourcePackages/firebase_auth-6.5.4/example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Contents.json b/mih_ui/android/build/macos/SourcePackages/firebase_auth-6.5.4/example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Contents.json new file mode 100644 index 00000000..d36b1fab --- /dev/null +++ b/mih_ui/android/build/macos/SourcePackages/firebase_auth-6.5.4/example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Contents.json @@ -0,0 +1,122 @@ +{ + "images" : [ + { + "size" : "20x20", + "idiom" : "iphone", + "filename" : "Icon-App-20x20@2x.png", + "scale" : "2x" + }, + { + "size" : "20x20", + "idiom" : "iphone", + "filename" : "Icon-App-20x20@3x.png", + "scale" : "3x" + }, + { + "size" : "29x29", + "idiom" : "iphone", + "filename" : "Icon-App-29x29@1x.png", + "scale" : "1x" + }, + { + "size" : "29x29", + "idiom" : "iphone", + "filename" : "Icon-App-29x29@2x.png", + "scale" : "2x" + }, + { + "size" : "29x29", + "idiom" : "iphone", + "filename" : "Icon-App-29x29@3x.png", + "scale" : "3x" + }, + { + "size" : "40x40", + "idiom" : "iphone", + "filename" : "Icon-App-40x40@2x.png", + "scale" : "2x" + }, + { + "size" : "40x40", + "idiom" : "iphone", + "filename" : "Icon-App-40x40@3x.png", + "scale" : "3x" + }, + { + "size" : "60x60", + "idiom" : "iphone", + "filename" : "Icon-App-60x60@2x.png", + "scale" : "2x" + }, + { + "size" : "60x60", + "idiom" : "iphone", + "filename" : "Icon-App-60x60@3x.png", + "scale" : "3x" + }, + { + "size" : "20x20", + "idiom" : "ipad", + "filename" : "Icon-App-20x20@1x.png", + "scale" : "1x" + }, + { + "size" : "20x20", + "idiom" : "ipad", + "filename" : "Icon-App-20x20@2x.png", + "scale" : "2x" + }, + { + "size" : "29x29", + "idiom" : "ipad", + "filename" : "Icon-App-29x29@1x.png", + "scale" : "1x" + }, + { + "size" : "29x29", + "idiom" : "ipad", + "filename" : "Icon-App-29x29@2x.png", + "scale" : "2x" + }, + { + "size" : "40x40", + "idiom" : "ipad", + "filename" : "Icon-App-40x40@1x.png", + "scale" : "1x" + }, + { + "size" : "40x40", + "idiom" : "ipad", + "filename" : "Icon-App-40x40@2x.png", + "scale" : "2x" + }, + { + "size" : "76x76", + "idiom" : "ipad", + "filename" : "Icon-App-76x76@1x.png", + "scale" : "1x" + }, + { + "size" : "76x76", + "idiom" : "ipad", + "filename" : "Icon-App-76x76@2x.png", + "scale" : "2x" + }, + { + "size" : "83.5x83.5", + "idiom" : "ipad", + "filename" : "Icon-App-83.5x83.5@2x.png", + "scale" : "2x" + }, + { + "size" : "1024x1024", + "idiom" : "ios-marketing", + "filename" : "Icon-App-1024x1024@1x.png", + "scale" : "1x" + } + ], + "info" : { + "version" : 1, + "author" : "xcode" + } +} diff --git a/mih_ui/android/build/macos/SourcePackages/firebase_auth-6.5.4/example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-1024x1024@1x.png b/mih_ui/android/build/macos/SourcePackages/firebase_auth-6.5.4/example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-1024x1024@1x.png new file mode 100644 index 0000000000000000000000000000000000000000..dc9ada4725e9b0ddb1deab583e5b5102493aa332 GIT binary patch literal 10932 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 literal 0 HcmV?d00001 diff --git a/mih_ui/android/build/macos/SourcePackages/firebase_auth-6.5.4/example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@3x.png b/mih_ui/android/build/macos/SourcePackages/firebase_auth-6.5.4/example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@3x.png new file mode 100644 index 0000000000000000000000000000000000000000..f091b6b0bca859a3f474b03065bef75ba58a9e4c GIT binary patch literal 1588 zcmV-42Fv-0P)C1SqPt}wig>|5Crh^=oyX$BK<}M8eLU3e2hGT;=G|!_SP)7zNI6fqUMB=)y zRAZ>eDe#*r`yDAVgB_R*LB*MAc)8(b{g{9McCXW!lq7r(btRoB9!8B-#AI6JMb~YFBEvdsV)`mEQO^&#eRKx@b&x- z5lZm*!WfD8oCLzfHGz#u7sT0^VLMI1MqGxF^v+`4YYnVYgk*=kU?HsSz{v({E3lb9 z>+xILjBN)t6`=g~IBOelGQ(O990@BfXf(DRI5I$qN$0Gkz-FSc$3a+2fX$AedL4u{ z4V+5Ong(9LiGcIKW?_352sR;LtDPmPJXI{YtT=O8=76o9;*n%_m|xo!i>7$IrZ-{l z-x3`7M}qzHsPV@$v#>H-TpjDh2UE$9g6sysUREDy_R(a)>=eHw-WAyfIN z*qb!_hW>G)Tu8nSw9yn#3wFMiLcfc4pY0ek1}8(NqkBR@t4{~oC>ryc-h_ByH(Cg5 z>ao-}771+xE3um9lWAY1FeQFxowa1(!J(;Jg*wrg!=6FdRX+t_<%z&d&?|Bn){>zm zZQj(aA_HeBY&OC^jj*)N`8fa^ePOU72VpInJoI1?`ty#lvlNzs(&MZX+R%2xS~5Kh zX*|AU4QE#~SgPzOXe9>tRj>hjU@c1k5Y_mW*Jp3fI;)1&g3j|zDgC+}2Q_v%YfDax z!?umcN^n}KYQ|a$Lr+51Nf9dkkYFSjZZjkma$0KOj+;aQ&721~t7QUKx61J3(P4P1 zstI~7-wOACnWP4=8oGOwz%vNDqD8w&Q`qcNGGrbbf&0s9L0De{4{mRS?o0MU+nR_! zrvshUau0G^DeMhM_v{5BuLjb#Hh@r23lDAk8oF(C+P0rsBpv85EP>4CVMx#04MOfG z;P%vktHcXwTj~+IE(~px)3*MY77e}p#|c>TD?sMatC0Tu4iKKJ0(X8jxQY*gYtxsC z(zYC$g|@+I+kY;dg_dE>scBf&bP1Nc@Hz<3R)V`=AGkc;8CXqdi=B4l2k|g;2%#m& z*jfX^%b!A8#bI!j9-0Fi0bOXl(-c^AB9|nQaE`*)Hw+o&jS9@7&Gov#HbD~#d{twV zXd^Tr^mWLfFh$@Dr$e;PBEz4(-2q1FF0}c;~B5sA}+Q>TOoP+t>wf)V9Iy=5ruQa;z)y zI9C9*oUga6=hxw6QasLPnee@3^Rr*M{CdaL5=R41nLs(AHk_=Y+A9$2&H(B7!_pURs&8aNw7?`&Z&xY_Ye z)~D5Bog^td-^QbUtkTirdyK^mTHAOuptDflut!#^lnKqU md>ggs(5nOWAqO?umG&QVYK#ibz}*4>0000U6E9hRK9^#O7(mu>ETqrXGsduA8$)?`v2seloOCza43C{NQ$$gAOH**MCn0Q?+L7dl7qnbRdqZ8LSVp1ItDxhxD?t@5_yHg6A8yI zC*%Wgg22K|8E#!~cTNYR~@Y9KepMPrrB8cABapAFa=`H+UGhkXUZV1GnwR1*lPyZ;*K(i~2gp|@bzp8}og7e*#% zEnr|^CWdVV!-4*Y_7rFvlww2Ze+>j*!Z!pQ?2l->4q#nqRu9`ELo6RMS5=br47g_X zRw}P9a7RRYQ%2Vsd0Me{_(EggTnuN6j=-?uFS6j^u69elMypu?t>op*wBx<=Wx8?( ztpe^(fwM6jJX7M-l*k3kEpWOl_Vk3@(_w4oc}4YF4|Rt=2V^XU?#Yz`8(e?aZ@#li0n*=g^qOcVpd-Wbok=@b#Yw zqn8u9a)z>l(1kEaPYZ6hwubN6i<8QHgsu0oE) ziJ(p;Wxm>sf!K+cw>R-(^Y2_bahB+&KI9y^);#0qt}t-$C|Bo71lHi{_+lg#f%RFy z0um=e3$K3i6K{U_4K!EX?F&rExl^W|G8Z8;`5z-k}OGNZ0#WVb$WCpQu-_YsiqKP?BB# vzVHS-CTUF4Ozn5G+mq_~Qqto~ahA+K`|lyv3(-e}00000NkvXXu0mjfd`9t{ literal 0 HcmV?d00001 diff --git a/mih_ui/android/build/macos/SourcePackages/firebase_auth-6.5.4/example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@2x.png b/mih_ui/android/build/macos/SourcePackages/firebase_auth-6.5.4/example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@2x.png new file mode 100644 index 0000000000000000000000000000000000000000..d0ef06e7edb86cdfe0d15b4b0d98334a86163658 GIT binary patch literal 1716 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 literal 0 HcmV?d00001 diff --git a/mih_ui/android/build/macos/SourcePackages/firebase_auth-6.5.4/example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@2x.png b/mih_ui/android/build/macos/SourcePackages/firebase_auth-6.5.4/example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@2x.png new file mode 100644 index 0000000000000000000000000000000000000000..c8f9ed8f5cee1c98386d13b17e89f719e83555b2 GIT binary patch literal 1895 zcmV-t2blPYP)FQtfgmafE#=YDCq`qUBt#QpG%*H6QHY765~R=q zZ6iudfM}q!Pz#~9JgOi8QJ|DSu?1-*(kSi1K4#~5?#|rh?sS)(-JQqX*}ciXJ56_H zdw=^s_srbAdqxlvGyrgGet#6T7_|j;95sL%MtM;q86vOxKM$f#puR)Bjv9Zvz9-di zXOTSsZkM83)E9PYBXC<$6(|>lNLVBb&&6y{NByFCp%6+^ALR@NCTse_wqvNmSWI-m z!$%KlHFH2omF!>#%1l3LTZg(s7eof$7*xB)ZQ0h?ejh?Ta9fDv59+u#MokW+1t8Zb zgHv%K(u9G^Lv`lh#f3<6!JVTL3(dCpxHbnbA;kKqQyd1~^Xe0VIaYBSWm6nsr;dFj z4;G-RyL?cYgsN1{L4ZFFNa;8)Rv0fM0C(~Tkit94 zz#~A)59?QjD&pAPSEQ)p8gP|DS{ng)j=2ux)_EzzJ773GmQ_Cic%3JJhC0t2cx>|v zJcVusIB!%F90{+}8hG3QU4KNeKmK%T>mN57NnCZ^56=0?&3@!j>a>B43pi{!u z7JyDj7`6d)qVp^R=%j>UIY6f+3`+qzIc!Y_=+uN^3BYV|o+$vGo-j-Wm<10%A=(Yk^beI{t%ld@yhKjq0iNjqN4XMGgQtbKubPM$JWBz}YA65k%dm*awtC^+f;a-x4+ddbH^7iDWGg&N0n#MW{kA|=8iMUiFYvMoDY@sPC#t$55gn6ykUTPAr`a@!(;np824>2xJthS z*ZdmT`g5-`BuJs`0LVhz+D9NNa3<=6m;cQLaF?tCv8)zcRSh66*Z|vXhG@$I%U~2l z?`Q zykI#*+rQ=z6Jm=Bui-SfpDYLA=|vzGE(dYm=OC8XM&MDo7ux4UF1~0J1+i%aCUpRe zt3L_uNyQ*cE(38Uy03H%I*)*Bh=Lb^Xj3?I^Hnbeq72(EOK^Y93CNp*uAA{5Lc=ky zx=~RKa4{iTm{_>_vSCm?$Ej=i6@=m%@VvAITnigVg{&@!7CDgs908761meDK5azA} z4?=NOH|PdvabgJ&fW2{Mo$Q0CcD8Qc84%{JPYt5EiG{MdLIAeX%T=D7NIP4%Hw}p9 zg)==!2Lbp#j{u_}hMiao9=!VSyx0gHbeCS`;q&vzeq|fs`y&^X-lso(Ls@-706qmA z7u*T5PMo_w3{se1t2`zWeO^hOvTsohG_;>J0wVqVe+n)AbQCx)yh9;w+J6?NF5Lmo zecS@ieAKL8%bVd@+-KT{yI|S}O>pYckUFs;ry9Ow$CD@ztz5K-*D$^{i(_1llhSh^ zEkL$}tsQt5>QA^;QgjgIfBDmcOgi5YDyu?t6vSnbp=1+@6D& z5MJ}B8q;bRlVoxasyhcUF1+)o`&3r0colr}QJ3hcSdLu;9;td>kf@Tcn<@9sIx&=m z;AD;SCh95=&p;$r{Xz3iWCO^MX83AGJ(yH&eTXgv|0=34#-&WAmw{)U7OU9!Wz^!7 zZ%jZFi@JR;>Mhi7S>V7wQ176|FdW2m?&`qa(ScO^CFPR80HucLHOTy%5s*HR0^8)i h0WYBP*#0Ks^FNSabJA*5${_#%002ovPDHLkV1oKhTl@e3 literal 0 HcmV?d00001 diff --git a/mih_ui/android/build/macos/SourcePackages/firebase_auth-6.5.4/example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@3x.png b/mih_ui/android/build/macos/SourcePackages/firebase_auth-6.5.4/example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@3x.png new file mode 100644 index 0000000000000000000000000000000000000000..a6d6b8609df07bf62e5100a53a01510388bd2b22 GIT binary patch literal 2665 zcmV-v3YPVWP)oFh3q0MFesq&64WThn3$;G69TfjsAv=f2G9}p zgSx99+!YV6qME!>9MD13x)k(+XE7W?_O4LoLb5ND8 zaV{9+P@>42xDfRiYBMSgD$0!vssptcb;&?u9u(LLBKmkZ>RMD=kvD3h`sk6!QYtBa ztlZI#nu$8lJ^q2Z79UTgZe>BU73(Aospiq+?SdMt8lDZ;*?@tyWVZVS_Q7S&*tJaiRlJ z+aSMOmbg3@h5}v;A*c8SbqM3icg-`Cnwl;7Ts%A1RkNIp+Txl-Ckkvg4oxrqGA5ewEgYqwtECD<_3Egu)xGllKt&J8g&+=ac@Jq4-?w6M3b*>w5 z69N3O%=I^6&UL5gZ!}trC7bUj*12xLdkNs~Bz4QdJJ*UDZox2UGR}SNg@lmOvhCc~ z*f_UeXv(=#I#*7>VZx2ObEN~UoGUTl=-@)E;YtCRZ>SVp$p9yG5hEFZ!`wI!spd)n zSk+vK0Vin7FL{7f&6OB%f;SH22dtbcF<|9fi2Fp%q4kxL!b1#l^)8dUwJ zwEf{(wJj@8iYDVnKB`eSU+;ml-t2`@%_)0jDM`+a46xhDbBj2+&Ih>1A>6aky#(-SYyE{R3f#y57wfLs z6w1p~$bp;6!9DX$M+J~S@D6vJAaElETnsX4h9a5tvPhC3L@qB~bOzkL@^z0k_hS{T4PF*TDrgdXp+dzsE? z>V|VR035Pl9n5&-RePFdS{7KAr2vPOqR9=M$vXA1Yy5>w;EsF`;OK{2pkn-kpp9Pw z)r;5JfJKKaT$4qCb{TaXHjb$QA{y0EYy*+b1XI;6Ah- zw13P)xT`>~eFoJC!>{2XL(a_#upp3gaR1#5+L(Jmzp4TBnx{~WHedpJ1ch8JFk~Sw z>F+gN+i+VD?gMXwcIhn8rz`>e>J^TI3E-MW>f}6R-pL}>WMOa0k#jN+`RyUVUC;#D zg|~oS^$6%wpF{^Qr+}X>0PKcr3Fc&>Z>uv@C);pwDs@2bZWhYP!rvGx?_|q{d`t<*XEb#=aOb=N+L@CVBGqImZf&+a zCQEa3$~@#kC);pasdG=f6tuIi0PO-y&tvX%>Mv=oY3U$nD zJ#gMegnQ46pq+3r=;zmgcG+zRc9D~c>z+jo9&D+`E6$LmyFqlmCYw;-Zooma{sR@~ z)_^|YL1&&@|GXo*pivH7k!msl+$Sew3%XJnxajt0K%3M6Bd&YFNy9}tWG^aovK2eX z1aL1%7;KRDrA@eG-Wr6w+;*H_VD~qLiVI`{_;>o)k`{8xa3EJT1O_>#iy_?va0eR? zDV=N%;Zjb%Z2s$@O>w@iqt!I}tLjGk!=p`D23I}N4Be@$(|iSA zf3Ih7b<{zqpDB4WF_5X1(peKe+rASze%u8eKLn#KKXt;UZ+Adf$_TO+vTqshLLJ5c z52HucO=lrNVae5XWOLm!V@n-ObU11!b+DN<$RuU+YsrBq*lYT;?AwJpmNKniF0Q1< zJCo>Q$=v$@&y=sj6{r!Y&y&`0$-I}S!H_~pI&2H8Z1C|BX4VgZ^-! zje3-;x0PBD!M`v*J_)rL^+$<1VJhH*2Fi~aA7s&@_rUHYJ9zD=M%4AFQ`}k8OC$9s XsPq=LnkwKG00000NkvXXu0mjfhAk5^ literal 0 HcmV?d00001 diff --git a/mih_ui/android/build/macos/SourcePackages/firebase_auth-6.5.4/example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-60x60@2x.png b/mih_ui/android/build/macos/SourcePackages/firebase_auth-6.5.4/example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-60x60@2x.png new file mode 100644 index 0000000000000000000000000000000000000000..a6d6b8609df07bf62e5100a53a01510388bd2b22 GIT binary patch literal 2665 zcmV-v3YPVWP)oFh3q0MFesq&64WThn3$;G69TfjsAv=f2G9}p zgSx99+!YV6qME!>9MD13x)k(+XE7W?_O4LoLb5ND8 zaV{9+P@>42xDfRiYBMSgD$0!vssptcb;&?u9u(LLBKmkZ>RMD=kvD3h`sk6!QYtBa ztlZI#nu$8lJ^q2Z79UTgZe>BU73(Aospiq+?SdMt8lDZ;*?@tyWVZVS_Q7S&*tJaiRlJ z+aSMOmbg3@h5}v;A*c8SbqM3icg-`Cnwl;7Ts%A1RkNIp+Txl-Ckkvg4oxrqGA5ewEgYqwtECD<_3Egu)xGllKt&J8g&+=ac@Jq4-?w6M3b*>w5 z69N3O%=I^6&UL5gZ!}trC7bUj*12xLdkNs~Bz4QdJJ*UDZox2UGR}SNg@lmOvhCc~ z*f_UeXv(=#I#*7>VZx2ObEN~UoGUTl=-@)E;YtCRZ>SVp$p9yG5hEFZ!`wI!spd)n zSk+vK0Vin7FL{7f&6OB%f;SH22dtbcF<|9fi2Fp%q4kxL!b1#l^)8dUwJ zwEf{(wJj@8iYDVnKB`eSU+;ml-t2`@%_)0jDM`+a46xhDbBj2+&Ih>1A>6aky#(-SYyE{R3f#y57wfLs z6w1p~$bp;6!9DX$M+J~S@D6vJAaElETnsX4h9a5tvPhC3L@qB~bOzkL@^z0k_hS{T4PF*TDrgdXp+dzsE? z>V|VR035Pl9n5&-RePFdS{7KAr2vPOqR9=M$vXA1Yy5>w;EsF`;OK{2pkn-kpp9Pw z)r;5JfJKKaT$4qCb{TaXHjb$QA{y0EYy*+b1XI;6Ah- zw13P)xT`>~eFoJC!>{2XL(a_#upp3gaR1#5+L(Jmzp4TBnx{~WHedpJ1ch8JFk~Sw z>F+gN+i+VD?gMXwcIhn8rz`>e>J^TI3E-MW>f}6R-pL}>WMOa0k#jN+`RyUVUC;#D zg|~oS^$6%wpF{^Qr+}X>0PKcr3Fc&>Z>uv@C);pwDs@2bZWhYP!rvGx?_|q{d`t<*XEb#=aOb=N+L@CVBGqImZf&+a zCQEa3$~@#kC);pasdG=f6tuIi0PO-y&tvX%>Mv=oY3U$nD zJ#gMegnQ46pq+3r=;zmgcG+zRc9D~c>z+jo9&D+`E6$LmyFqlmCYw;-Zooma{sR@~ z)_^|YL1&&@|GXo*pivH7k!msl+$Sew3%XJnxajt0K%3M6Bd&YFNy9}tWG^aovK2eX z1aL1%7;KRDrA@eG-Wr6w+;*H_VD~qLiVI`{_;>o)k`{8xa3EJT1O_>#iy_?va0eR? zDV=N%;Zjb%Z2s$@O>w@iqt!I}tLjGk!=p`D23I}N4Be@$(|iSA zf3Ih7b<{zqpDB4WF_5X1(peKe+rASze%u8eKLn#KKXt;UZ+Adf$_TO+vTqshLLJ5c z52HucO=lrNVae5XWOLm!V@n-ObU11!b+DN<$RuU+YsrBq*lYT;?AwJpmNKniF0Q1< zJCo>Q$=v$@&y=sj6{r!Y&y&`0$-I}S!H_~pI&2H8Z1C|BX4VgZ^-! zje3-;x0PBD!M`v*J_)rL^+$<1VJhH*2Fi~aA7s&@_rUHYJ9zD=M%4AFQ`}k8OC$9s XsPq=LnkwKG00000NkvXXu0mjfhAk5^ literal 0 HcmV?d00001 diff --git a/mih_ui/android/build/macos/SourcePackages/firebase_auth-6.5.4/example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-60x60@3x.png b/mih_ui/android/build/macos/SourcePackages/firebase_auth-6.5.4/example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-60x60@3x.png new file mode 100644 index 0000000000000000000000000000000000000000..75b2d164a5a98e212cca15ea7bf2ab5de5108680 GIT binary patch literal 3831 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 literal 0 HcmV?d00001 diff --git a/mih_ui/android/build/macos/SourcePackages/firebase_auth-6.5.4/example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-76x76@1x.png b/mih_ui/android/build/macos/SourcePackages/firebase_auth-6.5.4/example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-76x76@1x.png new file mode 100644 index 0000000000000000000000000000000000000000..c4df70d39da7941ef3f6dcb7f06a192d8dcb308d GIT binary patch literal 1888 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 iW8Zci7-kcv6Uzs@r-FtIZ-&5|)J Q1PU{Fy85}Sb4q9e0B4a5jsO4v literal 0 HcmV?d00001 diff --git a/mih_ui/android/build/macos/SourcePackages/firebase_auth-6.5.4/example/ios/Runner/Assets.xcassets/LaunchImage.imageset/LaunchImage@2x.png b/mih_ui/android/build/macos/SourcePackages/firebase_auth-6.5.4/example/ios/Runner/Assets.xcassets/LaunchImage.imageset/LaunchImage@2x.png new file mode 100644 index 0000000000000000000000000000000000000000..9da19eacad3b03bb08bbddbbf4ac48dd78b3d838 GIT binary patch literal 68 zcmeAS@N?(olHy`uVBq!ia0vp^j3CUx0wlM}@Gt=>Zci7-kcv6Uzs@r-FtIZ-&5|)J Q1PU{Fy85}Sb4q9e0B4a5jsO4v literal 0 HcmV?d00001 diff --git a/mih_ui/android/build/macos/SourcePackages/firebase_auth-6.5.4/example/ios/Runner/Assets.xcassets/LaunchImage.imageset/LaunchImage@3x.png b/mih_ui/android/build/macos/SourcePackages/firebase_auth-6.5.4/example/ios/Runner/Assets.xcassets/LaunchImage.imageset/LaunchImage@3x.png new file mode 100644 index 0000000000000000000000000000000000000000..9da19eacad3b03bb08bbddbbf4ac48dd78b3d838 GIT binary patch literal 68 zcmeAS@N?(olHy`uVBq!ia0vp^j3CUx0wlM}@Gt=>Zci7-kcv6Uzs@r-FtIZ-&5|)J Q1PU{Fy85}Sb4q9e0B4a5jsO4v literal 0 HcmV?d00001 diff --git a/mih_ui/android/build/macos/SourcePackages/firebase_auth-6.5.4/example/ios/Runner/Assets.xcassets/LaunchImage.imageset/README.md b/mih_ui/android/build/macos/SourcePackages/firebase_auth-6.5.4/example/ios/Runner/Assets.xcassets/LaunchImage.imageset/README.md new file mode 100644 index 00000000..89c2725b --- /dev/null +++ b/mih_ui/android/build/macos/SourcePackages/firebase_auth-6.5.4/example/ios/Runner/Assets.xcassets/LaunchImage.imageset/README.md @@ -0,0 +1,5 @@ +# Launch Screen Assets + +You can customize the launch screen with your own desired assets by replacing the image files in this directory. + +You can also do it by opening your Flutter project's Xcode project with `open ios/Runner.xcworkspace`, selecting `Runner/Assets.xcassets` in the Project Navigator and dropping in the desired images. \ No newline at end of file diff --git a/mih_ui/android/build/macos/SourcePackages/firebase_auth-6.5.4/example/ios/Runner/Base.lproj/LaunchScreen.storyboard b/mih_ui/android/build/macos/SourcePackages/firebase_auth-6.5.4/example/ios/Runner/Base.lproj/LaunchScreen.storyboard new file mode 100644 index 00000000..f2e259c7 --- /dev/null +++ b/mih_ui/android/build/macos/SourcePackages/firebase_auth-6.5.4/example/ios/Runner/Base.lproj/LaunchScreen.storyboard @@ -0,0 +1,37 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/mih_ui/android/build/macos/SourcePackages/firebase_auth-6.5.4/example/ios/Runner/Base.lproj/Main.storyboard b/mih_ui/android/build/macos/SourcePackages/firebase_auth-6.5.4/example/ios/Runner/Base.lproj/Main.storyboard new file mode 100644 index 00000000..f3c28516 --- /dev/null +++ b/mih_ui/android/build/macos/SourcePackages/firebase_auth-6.5.4/example/ios/Runner/Base.lproj/Main.storyboard @@ -0,0 +1,26 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/mih_ui/android/build/macos/SourcePackages/firebase_auth-6.5.4/example/ios/Runner/GoogleService-Info.plist b/mih_ui/android/build/macos/SourcePackages/firebase_auth-6.5.4/example/ios/Runner/GoogleService-Info.plist new file mode 100644 index 00000000..f325ead9 --- /dev/null +++ b/mih_ui/android/build/macos/SourcePackages/firebase_auth-6.5.4/example/ios/Runner/GoogleService-Info.plist @@ -0,0 +1,38 @@ + + + + + CLIENT_ID + 406099696497-134k3722m01rtrsklhf3b7k8sqa5r7in.apps.googleusercontent.com + REVERSED_CLIENT_ID + com.googleusercontent.apps.406099696497-134k3722m01rtrsklhf3b7k8sqa5r7in + ANDROID_CLIENT_ID + 406099696497-17qn06u8a0dc717u8ul7s49ampk13lul.apps.googleusercontent.com + API_KEY + AIzaSyDooSUGSf63Ghq02_iIhtnmwMDs4HlWS6c + GCM_SENDER_ID + 406099696497 + PLIST_VERSION + 1 + BUNDLE_ID + io.flutter.plugins.firebase.auth.example + PROJECT_ID + flutterfire-e2e-tests + STORAGE_BUCKET + flutterfire-e2e-tests.appspot.com + IS_ADS_ENABLED + + IS_ANALYTICS_ENABLED + + IS_APPINVITE_ENABLED + + IS_GCM_ENABLED + + IS_SIGNIN_ENABLED + + GOOGLE_APP_ID + 1:406099696497:ios:58cbc26aca8e5cf83574d0 + DATABASE_URL + https://flutterfire-e2e-tests-default-rtdb.europe-west1.firebasedatabase.app + + \ No newline at end of file diff --git a/mih_ui/android/build/macos/SourcePackages/firebase_auth-6.5.4/example/ios/Runner/Info.plist b/mih_ui/android/build/macos/SourcePackages/firebase_auth-6.5.4/example/ios/Runner/Info.plist new file mode 100644 index 00000000..e1ffa4fe --- /dev/null +++ b/mih_ui/android/build/macos/SourcePackages/firebase_auth-6.5.4/example/ios/Runner/Info.plist @@ -0,0 +1,98 @@ + + + + + CADisableMinimumFrameDurationOnPhone + + CFBundleDevelopmentRegion + $(DEVELOPMENT_LANGUAGE) + CFBundleDisplayName + Firebase Auth Example + CFBundleExecutable + $(EXECUTABLE_NAME) + CFBundleIdentifier + $(PRODUCT_BUNDLE_IDENTIFIER) + CFBundleInfoDictionaryVersion + 6.0 + CFBundleName + firebase_auth_example + CFBundlePackageType + APPL + CFBundleShortVersionString + $(FLUTTER_BUILD_NAME) + CFBundleSignature + ???? + FacebookAppID + 128693022464535 + + FacebookClientToken + 16dbbdf0cfb309034a6ad98ac2a21688 + CFBundleURLTypes + + + CFBundleTypeRole + Editor + CFBundleURLSchemes + + com.googleusercontent.apps.406099696497-134k3722m01rtrsklhf3b7k8sqa5r7in + fb128693022464535 + + + + CFBundleVersion + $(FLUTTER_BUILD_NUMBER) + LSRequiresIPhoneOS + + NSAppTransportSecurity + + NSAllowsArbitraryLoads + + + UILaunchStoryboardName + LaunchScreen + UIMainStoryboardFile + Main + UIRequiredDeviceCapabilities + + arm64 + + UISupportedInterfaceOrientations + + UIInterfaceOrientationPortrait + UIInterfaceOrientationLandscapeLeft + UIInterfaceOrientationLandscapeRight + + UISupportedInterfaceOrientations~ipad + + UIInterfaceOrientationPortrait + UIInterfaceOrientationPortraitUpsideDown + UIInterfaceOrientationLandscapeLeft + UIInterfaceOrientationLandscapeRight + + UIViewControllerBasedStatusBarAppearance + + UIApplicationSupportsIndirectInputEvents + + UIApplicationSceneManifest + + UIApplicationSupportsMultipleScenes + + UISceneConfigurations + + UIWindowSceneSessionRoleApplication + + + UISceneClassName + UIWindowScene + UISceneDelegateClassName + FlutterSceneDelegate + UISceneConfigurationName + flutter + UISceneStoryboardFile + Main + + + + + + diff --git a/mih_ui/android/build/macos/SourcePackages/firebase_auth-6.5.4/example/ios/Runner/Runner-Bridging-Header.h b/mih_ui/android/build/macos/SourcePackages/firebase_auth-6.5.4/example/ios/Runner/Runner-Bridging-Header.h new file mode 100644 index 00000000..308a2a56 --- /dev/null +++ b/mih_ui/android/build/macos/SourcePackages/firebase_auth-6.5.4/example/ios/Runner/Runner-Bridging-Header.h @@ -0,0 +1 @@ +#import "GeneratedPluginRegistrant.h" diff --git a/mih_ui/android/build/macos/SourcePackages/firebase_auth-6.5.4/example/ios/Runner/Runner.entitlements b/mih_ui/android/build/macos/SourcePackages/firebase_auth-6.5.4/example/ios/Runner/Runner.entitlements new file mode 100644 index 00000000..16c5d9e0 --- /dev/null +++ b/mih_ui/android/build/macos/SourcePackages/firebase_auth-6.5.4/example/ios/Runner/Runner.entitlements @@ -0,0 +1,14 @@ + + + + + aps-environment + development + com.apple.developer.applesignin + + Default + + com.apple.developer.game-center + + + diff --git a/mih_ui/android/build/macos/SourcePackages/firebase_auth-6.5.4/example/ios/Runner/main.m b/mih_ui/android/build/macos/SourcePackages/firebase_auth-6.5.4/example/ios/Runner/main.m new file mode 100644 index 00000000..dff6597e --- /dev/null +++ b/mih_ui/android/build/macos/SourcePackages/firebase_auth-6.5.4/example/ios/Runner/main.m @@ -0,0 +1,9 @@ +#import +#import +#import "AppDelegate.h" + +int main(int argc, char* argv[]) { + @autoreleasepool { + return UIApplicationMain(argc, argv, nil, NSStringFromClass([AppDelegate class])); + } +} diff --git a/mih_ui/android/build/macos/SourcePackages/firebase_auth-6.5.4/example/ios/firebase_app_id_file.json b/mih_ui/android/build/macos/SourcePackages/firebase_auth-6.5.4/example/ios/firebase_app_id_file.json new file mode 100644 index 00000000..eaca8edd --- /dev/null +++ b/mih_ui/android/build/macos/SourcePackages/firebase_auth-6.5.4/example/ios/firebase_app_id_file.json @@ -0,0 +1,7 @@ +{ + "file_generated_by": "FlutterFire CLI", + "purpose": "FirebaseAppID & ProjectID for this Firebase app in this directory", + "GOOGLE_APP_ID": "1:406099696497:ios:58cbc26aca8e5cf83574d0", + "FIREBASE_PROJECT_ID": "flutterfire-e2e-tests", + "GCM_SENDER_ID": "406099696497" +} \ No newline at end of file diff --git a/mih_ui/android/build/macos/SourcePackages/firebase_auth-6.5.4/example/lib/auth.dart b/mih_ui/android/build/macos/SourcePackages/firebase_auth-6.5.4/example/lib/auth.dart new file mode 100644 index 00000000..b78c948e --- /dev/null +++ b/mih_ui/android/build/macos/SourcePackages/firebase_auth-6.5.4/example/lib/auth.dart @@ -0,0 +1,748 @@ +// Copyright 2022, the Chromium project authors. Please see the AUTHORS file +// for details. All rights reserved. Use of this source code is governed by a +// BSD-style license that can be found in the LICENSE file. + +import 'dart:io'; + +import 'package:barcode_widget/barcode_widget.dart'; +import 'package:collection/collection.dart'; +import 'package:firebase_auth/firebase_auth.dart'; +import 'package:firebase_auth_example/main.dart'; +import 'package:firebase_messaging/firebase_messaging.dart'; +import 'package:flutter/foundation.dart'; +import 'package:flutter/gestures.dart'; +import 'package:flutter/material.dart'; +import 'package:flutter_facebook_auth/flutter_facebook_auth.dart'; +import 'package:flutter_signin_button/flutter_signin_button.dart'; +import 'package:google_sign_in/google_sign_in.dart'; + +typedef OAuthSignIn = void Function(); + +// If set to true, the app will request notification permissions to use +// silent verification for SMS MFA instead of Recaptcha. +const withSilentVerificationSMSMFA = true; + +/// Helper class to show a snackbar using the passed context. +class ScaffoldSnackbar { + // ignore: public_member_api_docs + ScaffoldSnackbar(this._context); + + /// The scaffold of current context. + factory ScaffoldSnackbar.of(BuildContext context) { + return ScaffoldSnackbar(context); + } + + final BuildContext _context; + + /// Helper method to show a SnackBar. + void show(String message) { + ScaffoldMessenger.of(_context) + ..hideCurrentSnackBar() + ..showSnackBar( + SnackBar( + content: Text(message), + behavior: SnackBarBehavior.floating, + ), + ); + } +} + +/// The mode of the current auth session, either [AuthMode.login] or [AuthMode.register]. +// ignore: public_member_api_docs +enum AuthMode { login, register, phone } + +extension on AuthMode { + String get label => this == AuthMode.login + ? 'Sign in' + : this == AuthMode.phone + ? 'Sign in' + : 'Register'; +} + +/// Entrypoint example for various sign-in flows with Firebase. +class AuthGate extends StatefulWidget { + // ignore: public_member_api_docs + const AuthGate({Key? key}) : super(key: key); + static String? appleAuthorizationCode; + @override + State createState() => _AuthGateState(); +} + +class _AuthGateState extends State { + TextEditingController emailController = TextEditingController(); + TextEditingController passwordController = TextEditingController(); + TextEditingController phoneController = TextEditingController(); + + GlobalKey formKey = GlobalKey(); + String error = ''; + String verificationId = ''; + + AuthMode mode = AuthMode.login; + + bool isLoading = false; + + void setIsLoading() { + setState(() { + isLoading = !isLoading; + }); + } + + late Map authButtons; + + @override + void initState() { + super.initState(); + + if (withSilentVerificationSMSMFA && !kIsWeb) { + FirebaseMessaging messaging = FirebaseMessaging.instance; + messaging.requestPermission(); + } + + if (!kIsWeb && Platform.isMacOS) { + authButtons = { + Buttons.Apple: () => _handleMultiFactorException( + _signInWithApple, + ), + }; + } else { + authButtons = { + Buttons.Apple: () => _handleMultiFactorException( + _signInWithApple, + ), + Buttons.Google: () => _handleMultiFactorException( + _signInWithGoogle, + ), + Buttons.GitHub: () => _handleMultiFactorException( + _signInWithGitHub, + ), + Buttons.Microsoft: () => _handleMultiFactorException( + _signInWithMicrosoft, + ), + Buttons.Twitter: () => _handleMultiFactorException( + _signInWithTwitter, + ), + Buttons.Yahoo: () => _handleMultiFactorException( + _signInWithYahoo, + ), + Buttons.Facebook: () => _handleMultiFactorException( + _signInWithFacebook, + ), + }; + } + } + + @override + Widget build(BuildContext context) { + return GestureDetector( + onTap: FocusScope.of(context).unfocus, + child: Scaffold( + body: Center( + child: SingleChildScrollView( + child: Center( + child: Padding( + padding: const EdgeInsets.symmetric(horizontal: 20), + child: SafeArea( + child: Form( + key: formKey, + autovalidateMode: AutovalidateMode.onUserInteraction, + child: ConstrainedBox( + constraints: const BoxConstraints(maxWidth: 400), + child: Column( + mainAxisAlignment: MainAxisAlignment.center, + children: [ + Visibility( + visible: error.isNotEmpty, + child: MaterialBanner( + backgroundColor: + Theme.of(context).colorScheme.error, + content: SelectableText(error), + actions: [ + TextButton( + onPressed: () { + setState(() { + error = ''; + }); + }, + child: const Text( + 'dismiss', + style: TextStyle(color: Colors.white), + ), + ), + ], + contentTextStyle: + const TextStyle(color: Colors.white), + padding: const EdgeInsets.all(10), + ), + ), + const SizedBox(height: 20), + if (mode != AuthMode.phone) + Column( + children: [ + TextFormField( + controller: emailController, + decoration: const InputDecoration( + hintText: 'Email', + border: OutlineInputBorder(), + ), + keyboardType: TextInputType.emailAddress, + autofillHints: const [AutofillHints.email], + validator: (value) => + value != null && value.isNotEmpty + ? null + : 'Required', + ), + const SizedBox(height: 20), + TextFormField( + controller: passwordController, + obscureText: true, + decoration: const InputDecoration( + hintText: 'Password', + border: OutlineInputBorder(), + ), + validator: (value) => + value != null && value.isNotEmpty + ? null + : 'Required', + ), + ], + ), + if (mode == AuthMode.phone) + TextFormField( + controller: phoneController, + decoration: const InputDecoration( + hintText: '+12345678910', + labelText: 'Phone number', + border: OutlineInputBorder(), + ), + validator: (value) => + value != null && value.isNotEmpty + ? null + : 'Required', + ), + const SizedBox(height: 20), + SizedBox( + width: double.infinity, + height: 50, + child: ElevatedButton( + onPressed: isLoading + ? null + : () => _handleMultiFactorException( + _emailAndPassword, + ), + child: isLoading + ? const CircularProgressIndicator.adaptive() + : Text(mode.label), + ), + ), + TextButton( + onPressed: _resetPassword, + child: const Text('Forgot password?'), + ), + ...authButtons.keys + .map( + (button) => Padding( + padding: + const EdgeInsets.symmetric(vertical: 5), + child: AnimatedSwitcher( + duration: const Duration(milliseconds: 200), + child: isLoading + ? Container( + color: Colors.grey[200], + height: 50, + width: double.infinity, + ) + : SizedBox( + width: double.infinity, + height: 50, + child: SignInButton( + button, + onPressed: authButtons[button], + ), + ), + ), + ), + ) + .toList(), + SizedBox( + width: double.infinity, + height: 50, + child: OutlinedButton( + onPressed: isLoading + ? null + : () { + if (mode != AuthMode.phone) { + setState(() { + mode = AuthMode.phone; + }); + } else { + setState(() { + mode = AuthMode.login; + }); + } + }, + child: isLoading + ? const CircularProgressIndicator.adaptive() + : Text( + mode != AuthMode.phone + ? 'Sign in with Phone Number' + : 'Sign in with Email and Password', + ), + ), + ), + const SizedBox(height: 20), + if (mode != AuthMode.phone) + RichText( + text: TextSpan( + style: Theme.of(context).textTheme.bodyLarge, + children: [ + TextSpan( + text: mode == AuthMode.login + ? "Don't have an account? " + : 'You have an account? ', + ), + TextSpan( + text: mode == AuthMode.login + ? 'Register now' + : 'Click to login', + style: const TextStyle(color: Colors.blue), + recognizer: TapGestureRecognizer() + ..onTap = () { + setState(() { + mode = mode == AuthMode.login + ? AuthMode.register + : AuthMode.login; + }); + }, + ), + ], + ), + ), + const SizedBox(height: 10), + RichText( + text: TextSpan( + style: Theme.of(context).textTheme.bodyLarge, + children: [ + const TextSpan(text: 'Or '), + TextSpan( + text: 'continue as guest', + style: const TextStyle(color: Colors.blue), + recognizer: TapGestureRecognizer() + ..onTap = _anonymousAuth, + ), + ], + ), + ), + ], + ), + ), + ), + ), + ), + ), + ), + ), + ), + ); + } + + Future _resetPassword() async { + String? email; + await showDialog( + context: context, + builder: (context) { + return AlertDialog( + actions: [ + TextButton( + onPressed: () { + Navigator.of(context).pop(); + }, + child: const Text('Send'), + ), + ], + content: Column( + crossAxisAlignment: CrossAxisAlignment.start, + mainAxisSize: MainAxisSize.min, + children: [ + const Text('Enter your email'), + const SizedBox(height: 20), + TextFormField( + onChanged: (value) { + email = value; + }, + ), + ], + ), + ); + }, + ); + + if (email != null) { + try { + await auth.sendPasswordResetEmail(email: email!); + ScaffoldSnackbar.of(context).show('Password reset email is sent'); + } catch (e) { + ScaffoldSnackbar.of(context).show('Error resetting'); + } + } + } + + Future _anonymousAuth() async { + setIsLoading(); + + try { + await auth.signInAnonymously(); + } on FirebaseAuthException catch (e) { + setState(() { + error = '${e.message}'; + }); + } catch (e) { + setState(() { + error = '$e'; + }); + } finally { + setIsLoading(); + } + } + + Future _handleMultiFactorException( + Future Function() authFunction, + ) async { + setIsLoading(); + try { + await authFunction(); + } on FirebaseAuthMultiFactorException catch (e) { + setState(() { + error = '${e.message}'; + }); + final firstTotpHint = e.resolver.hints + .firstWhereOrNull((element) => element is TotpMultiFactorInfo); + if (firstTotpHint != null) { + final code = await getSmsCodeFromUser(context); + final assertion = await TotpMultiFactorGenerator.getAssertionForSignIn( + firstTotpHint.uid, + code!, + ); + await e.resolver.resolveSignIn(assertion); + return; + } + + final firstPhoneHint = e.resolver.hints + .firstWhereOrNull((element) => element is PhoneMultiFactorInfo); + + if (firstPhoneHint is! PhoneMultiFactorInfo) { + return; + } + await auth.verifyPhoneNumber( + multiFactorSession: e.resolver.session, + multiFactorInfo: firstPhoneHint, + verificationCompleted: (_) {}, + verificationFailed: print, + codeSent: (String verificationId, int? resendToken) async { + final smsCode = await getSmsCodeFromUser(context); + + if (smsCode != null) { + // Create a PhoneAuthCredential with the code + final credential = PhoneAuthProvider.credential( + verificationId: verificationId, + smsCode: smsCode, + ); + + try { + await e.resolver.resolveSignIn( + PhoneMultiFactorGenerator.getAssertion( + credential, + ), + ); + } on FirebaseAuthException catch (e) { + print(e.message); + } + } + }, + codeAutoRetrievalTimeout: print, + ); + } on FirebaseAuthException catch (e) { + setState(() { + error = '${e.message}'; + }); + } catch (e) { + setState(() { + error = '$e'; + }); + } + setIsLoading(); + } + + Future _emailAndPassword() async { + if (formKey.currentState?.validate() ?? false) { + if (mode == AuthMode.login) { + await auth.signInWithEmailAndPassword( + email: emailController.text, + password: passwordController.text, + ); + } else if (mode == AuthMode.register) { + await auth.createUserWithEmailAndPassword( + email: emailController.text, + password: passwordController.text, + ); + } else { + await _phoneAuth(); + } + } + } + + Future _phoneAuth() async { + if (mode != AuthMode.phone) { + setState(() { + mode = AuthMode.phone; + }); + } else { + if (kIsWeb) { + final confirmationResult = + await auth.signInWithPhoneNumber(phoneController.text); + final smsCode = await getSmsCodeFromUser(context); + + if (smsCode != null) { + await confirmationResult.confirm(smsCode); + } + } else { + await auth.verifyPhoneNumber( + phoneNumber: phoneController.text, + verificationCompleted: (_) {}, + verificationFailed: (e) { + setState(() { + error = '${e.message}'; + }); + }, + codeSent: (String verificationId, int? resendToken) async { + final smsCode = await getSmsCodeFromUser(context); + + if (smsCode != null) { + // Create a PhoneAuthCredential with the code + final credential = PhoneAuthProvider.credential( + verificationId: verificationId, + smsCode: smsCode, + ); + + try { + // Sign the user in (or link) with the credential + await auth.signInWithCredential(credential); + } on FirebaseAuthException catch (e) { + setState(() { + error = e.message ?? ''; + }); + } + } + }, + codeAutoRetrievalTimeout: (e) { + setState(() { + error = e; + }); + }, + ); + } + } + } + + Future _signInWithGoogle() async { + // Trigger the authentication flow + final googleUser = await GoogleSignIn().signIn(); + + // Obtain the auth details from the request + final googleAuth = await googleUser?.authentication; + + if (googleAuth != null) { + // Create a new credential + final credential = GoogleAuthProvider.credential( + accessToken: googleAuth.accessToken, + idToken: googleAuth.idToken, + ); + + // Once signed in, return the UserCredential + await auth.signInWithCredential(credential); + } + } + + Future _signInWithFacebook() async { + // Trigger the authentication flow + // by default we request the email and the public profile + final LoginResult result = await FacebookAuth.instance.login(); + + if (result.status == LoginStatus.success) { + // Get access token + final AccessToken accessToken = result.accessToken!; + + // Login with token + await auth.signInWithCredential( + FacebookAuthProvider.credential(accessToken.tokenString), + ); + } else { + print('Facebook login did not succeed'); + print(result.status); + print(result.message); + } + } +} + +Future _signInWithTwitter() async { + TwitterAuthProvider twitterProvider = TwitterAuthProvider(); + + if (kIsWeb) { + await auth.signInWithPopup(twitterProvider); + } else { + await auth.signInWithProvider(twitterProvider); + } +} + +Future _signInWithApple() async { + final appleProvider = AppleAuthProvider(); + appleProvider.addScope('email'); + + if (kIsWeb) { + // Once signed in, return the UserCredential + await auth.signInWithPopup(appleProvider); + } else { + final userCred = await auth.signInWithProvider(appleProvider); + AuthGate.appleAuthorizationCode = + userCred.additionalUserInfo?.authorizationCode; + } +} + +Future _signInWithYahoo() async { + final yahooProvider = YahooAuthProvider(); + + if (kIsWeb) { + // Once signed in, return the UserCredential + await auth.signInWithPopup(yahooProvider); + } else { + await auth.signInWithProvider(yahooProvider); + } +} + +Future _signInWithGitHub() async { + final githubProvider = GithubAuthProvider(); + + if (kIsWeb) { + await auth.signInWithPopup(githubProvider); + } else { + await auth.signInWithProvider(githubProvider); + } +} + +Future _signInWithMicrosoft() async { + final microsoftProvider = MicrosoftAuthProvider(); + + if (kIsWeb) { + await auth.signInWithPopup(microsoftProvider); + } else { + await auth.signInWithProvider(microsoftProvider); + } +} + +Future getSmsCodeFromUser(BuildContext context) async { + String? smsCode; + + // Update the UI - wait for the user to enter the SMS code + await showDialog( + context: context, + barrierDismissible: false, + builder: (context) { + return AlertDialog( + title: const Text('SMS code:'), + actions: [ + ElevatedButton( + onPressed: () { + Navigator.of(context).pop(); + }, + child: const Text('Sign in'), + ), + OutlinedButton( + onPressed: () { + smsCode = null; + Navigator.of(context).pop(); + }, + child: const Text('Cancel'), + ), + ], + content: Container( + padding: const EdgeInsets.all(20), + child: TextField( + onChanged: (value) { + smsCode = value; + }, + textAlign: TextAlign.center, + autofocus: true, + ), + ), + ); + }, + ); + + return smsCode; +} + +Future getTotpFromUser( + BuildContext context, + TotpSecret totpSecret, +) async { + String? smsCode; + + final qrCodeUrl = await totpSecret.generateQrCodeUrl( + accountName: FirebaseAuth.instance.currentUser!.email, + issuer: 'Firebase', + ); + + // Update the UI - wait for the user to enter the SMS code + await showDialog( + context: context, + barrierDismissible: false, + builder: (context) { + return AlertDialog( + title: const Text('TOTP code:'), + content: Container( + padding: const EdgeInsets.all(20), + child: Column( + mainAxisSize: MainAxisSize.min, + children: [ + BarcodeWidget( + barcode: Barcode.qrCode(), + data: qrCodeUrl, + width: 150, + height: 150, + ), + TextField( + onChanged: (value) { + smsCode = value; + }, + textAlign: TextAlign.center, + autofocus: true, + ), + ElevatedButton( + onPressed: () { + totpSecret.openInOtpApp(qrCodeUrl); + }, + child: const Text('Open in OTP App'), + ), + ], + ), + ), + actions: [ + ElevatedButton( + onPressed: () { + Navigator.of(context).pop(); + }, + child: const Text('Sign in'), + ), + OutlinedButton( + onPressed: () { + smsCode = null; + Navigator.of(context).pop(); + }, + child: const Text('Cancel'), + ), + ], + ); + }, + ); + + return smsCode; +} diff --git a/mih_ui/android/build/macos/SourcePackages/firebase_auth-6.5.4/example/lib/firebase_options.dart b/mih_ui/android/build/macos/SourcePackages/firebase_auth-6.5.4/example/lib/firebase_options.dart new file mode 100644 index 00000000..ba1a88dc --- /dev/null +++ b/mih_ui/android/build/macos/SourcePackages/firebase_auth-6.5.4/example/lib/firebase_options.dart @@ -0,0 +1,98 @@ +// Copyright 2022, the Chromium project authors. Please see the AUTHORS file +// for details. All rights reserved. Use of this source code is governed by a +// BSD-style license that can be found in the LICENSE file. + +// File generated by FlutterFire CLI. +// ignore_for_file: lines_longer_than_80_chars, avoid_classes_with_only_static_members +import 'package:firebase_core/firebase_core.dart' show FirebaseOptions; +import 'package:flutter/foundation.dart' + show defaultTargetPlatform, kIsWeb, TargetPlatform; + +/// Default [FirebaseOptions] for use with your Firebase apps. +/// +/// Example: +/// ```dart +/// import 'firebase_options.dart'; +/// // ... +/// await Firebase.initializeApp( +/// options: DefaultFirebaseOptions.currentPlatform, +/// ); +/// ``` +class DefaultFirebaseOptions { + static FirebaseOptions get currentPlatform { + if (kIsWeb) { + return web; + } + switch (defaultTargetPlatform) { + case TargetPlatform.android: + return android; + case TargetPlatform.iOS: + return ios; + case TargetPlatform.macOS: + return macos; + case TargetPlatform.windows: + return macos; + case TargetPlatform.linux: + throw UnsupportedError( + 'DefaultFirebaseOptions have not been configured for linux - ' + 'you can reconfigure this by running the FlutterFire CLI again.', + ); + default: + throw UnsupportedError( + 'DefaultFirebaseOptions are not supported for this platform.', + ); + } + } + + static const FirebaseOptions web = FirebaseOptions( + apiKey: 'AIzaSyB7wZb2tO1-Fs6GbDADUSTs2Qs3w08Hovw', + appId: '1:406099696497:web:87e25e51afe982cd3574d0', + messagingSenderId: '406099696497', + projectId: 'flutterfire-e2e-tests', + authDomain: 'flutterfire-e2e-tests.firebaseapp.com', + databaseURL: + 'https://flutterfire-e2e-tests-default-rtdb.europe-west1.firebasedatabase.app', + storageBucket: 'flutterfire-e2e-tests.appspot.com', + measurementId: 'G-JN95N1JV2E', + ); + + static const FirebaseOptions android = FirebaseOptions( + apiKey: 'AIzaSyCdRjCVZlhrq72RuEklEyyxYlBRCYhI2Sw', + appId: '1:406099696497:android:21d5142deea38dda3574d0', + messagingSenderId: '406099696497', + projectId: 'flutterfire-e2e-tests', + databaseURL: + 'https://flutterfire-e2e-tests-default-rtdb.europe-west1.firebasedatabase.app', + storageBucket: 'flutterfire-e2e-tests.appspot.com', + ); + + static const FirebaseOptions ios = FirebaseOptions( + apiKey: 'AIzaSyDooSUGSf63Ghq02_iIhtnmwMDs4HlWS6c', + appId: '1:406099696497:ios:58cbc26aca8e5cf83574d0', + messagingSenderId: '406099696497', + projectId: 'flutterfire-e2e-tests', + databaseURL: + 'https://flutterfire-e2e-tests-default-rtdb.europe-west1.firebasedatabase.app', + storageBucket: 'flutterfire-e2e-tests.appspot.com', + androidClientId: + '406099696497-17qn06u8a0dc717u8ul7s49ampk13lul.apps.googleusercontent.com', + iosClientId: + '406099696497-134k3722m01rtrsklhf3b7k8sqa5r7in.apps.googleusercontent.com', + iosBundleId: 'io.flutter.plugins.firebase.auth.example', + ); + + static const FirebaseOptions macos = FirebaseOptions( + apiKey: 'AIzaSyDooSUGSf63Ghq02_iIhtnmwMDs4HlWS6c', + appId: '1:406099696497:ios:58cbc26aca8e5cf83574d0', + messagingSenderId: '406099696497', + projectId: 'flutterfire-e2e-tests', + databaseURL: + 'https://flutterfire-e2e-tests-default-rtdb.europe-west1.firebasedatabase.app', + storageBucket: 'flutterfire-e2e-tests.appspot.com', + androidClientId: + '406099696497-17qn06u8a0dc717u8ul7s49ampk13lul.apps.googleusercontent.com', + iosClientId: + '406099696497-134k3722m01rtrsklhf3b7k8sqa5r7in.apps.googleusercontent.com', + iosBundleId: 'io.flutter.plugins.firebase.auth.example', + ); +} diff --git a/mih_ui/android/build/macos/SourcePackages/firebase_auth-6.5.4/example/lib/main.dart b/mih_ui/android/build/macos/SourcePackages/firebase_auth-6.5.4/example/lib/main.dart new file mode 100755 index 00000000..630c282d --- /dev/null +++ b/mih_ui/android/build/macos/SourcePackages/firebase_auth-6.5.4/example/lib/main.dart @@ -0,0 +1,108 @@ +// Copyright 2022, the Chromium project authors. Please see the AUTHORS file +// for details. All rights reserved. Use of this source code is governed by a +// BSD-style license that can be found in the LICENSE file. + +import 'dart:io'; + +import 'package:firebase_auth/firebase_auth.dart'; +import 'package:firebase_core/firebase_core.dart'; +import 'package:flutter/foundation.dart'; +import 'package:flutter/material.dart'; +import 'package:google_sign_in_dartio/google_sign_in_dartio.dart'; + +import 'auth.dart'; +import 'firebase_options.dart'; +import 'profile.dart'; + +/// Requires that a Firebase local emulator is running locally. +/// See https://firebase.google.com/docs/auth/flutter/start#optional_prototype_and_test_with_firebase_local_emulator_suite +bool shouldUseFirebaseEmulator = false; + +late final FirebaseApp app; +late final FirebaseAuth auth; + +// Requires that the Firebase Auth emulator is running locally +// e.g via `melos run firebase:emulator`. +Future main() async { + WidgetsFlutterBinding.ensureInitialized(); + // We're using the manual installation on non-web platforms since Google sign in plugin doesn't yet support Dart initialization. + // See related issue: https://github.com/flutter/flutter/issues/96391 + + // We store the app and auth to make testing with a named instance easier. + app = await Firebase.initializeApp( + options: DefaultFirebaseOptions.currentPlatform, + ); + auth = FirebaseAuth.instanceFor(app: app); + + if (shouldUseFirebaseEmulator) { + await auth.useAuthEmulator('localhost', 9099); + } + + if (!kIsWeb && Platform.isWindows) { + await GoogleSignInDart.register( + clientId: + '406099696497-g5o9l0blii9970bgmfcfv14pioj90djd.apps.googleusercontent.com', + ); + } + + runApp(const AuthExampleApp()); +} + +/// The entry point of the application. +/// +/// Returns a [MaterialApp]. +class AuthExampleApp extends StatelessWidget { + const AuthExampleApp({Key? key}) : super(key: key); + + @override + Widget build(BuildContext context) { + return MaterialApp( + title: 'Firebase Example App', + theme: ThemeData(primarySwatch: Colors.amber), + home: Scaffold( + body: LayoutBuilder( + builder: (context, constraints) { + return Row( + children: [ + Visibility( + visible: constraints.maxWidth >= 1200, + child: Expanded( + child: Container( + height: double.infinity, + color: Theme.of(context).colorScheme.primary, + child: Center( + child: Column( + mainAxisAlignment: MainAxisAlignment.center, + children: [ + Text( + 'Firebase Auth Desktop', + style: Theme.of(context).textTheme.headlineMedium, + ), + ], + ), + ), + ), + ), + ), + SizedBox( + width: constraints.maxWidth >= 1200 + ? constraints.maxWidth / 2 + : constraints.maxWidth, + child: StreamBuilder( + stream: auth.authStateChanges(), + builder: (context, snapshot) { + if (snapshot.hasData) { + return const ProfilePage(); + } + return const AuthGate(); + }, + ), + ), + ], + ); + }, + ), + ), + ); + } +} diff --git a/mih_ui/android/build/macos/SourcePackages/firebase_auth-6.5.4/example/lib/profile.dart b/mih_ui/android/build/macos/SourcePackages/firebase_auth-6.5.4/example/lib/profile.dart new file mode 100644 index 00000000..3ccbf5db --- /dev/null +++ b/mih_ui/android/build/macos/SourcePackages/firebase_auth-6.5.4/example/lib/profile.dart @@ -0,0 +1,391 @@ +// Copyright 2022, the Chromium project authors. Please see the AUTHORS file +// for details. All rights reserved. Use of this source code is governed by a +// BSD-style license that can be found in the LICENSE file. + +import 'dart:developer'; + +import 'package:collection/collection.dart'; +import 'package:firebase_auth/firebase_auth.dart'; +import 'package:firebase_auth_example/main.dart'; +import 'package:flutter/material.dart'; +import 'package:google_sign_in/google_sign_in.dart'; + +import 'auth.dart'; + +/// Displayed as a profile image if the user doesn't have one. +const placeholderImage = + 'https://upload.wikimedia.org/wikipedia/commons/c/cd/Portrait_Placeholder_Square.png'; + +/// Profile page shows after sign in or registration. +class ProfilePage extends StatefulWidget { + // ignore: public_member_api_docs + const ProfilePage({Key? key}) : super(key: key); + + @override + // ignore: library_private_types_in_public_api + _ProfilePageState createState() => _ProfilePageState(); +} + +class _ProfilePageState extends State { + late User user; + late TextEditingController controller; + final phoneController = TextEditingController(); + + String? photoURL; + + bool showSaveButton = false; + bool isLoading = false; + + @override + void initState() { + user = auth.currentUser!; + controller = TextEditingController(text: user.displayName); + + controller.addListener(_onNameChanged); + + auth.userChanges().listen((event) { + if (event != null && mounted) { + setState(() { + user = event; + }); + } + }); + + log(user.toString()); + + super.initState(); + } + + @override + void dispose() { + controller.removeListener(_onNameChanged); + + super.dispose(); + } + + void setIsLoading() { + setState(() { + isLoading = !isLoading; + }); + } + + void _onNameChanged() { + setState(() { + if (controller.text == user.displayName || controller.text.isEmpty) { + showSaveButton = false; + } else { + showSaveButton = true; + } + }); + } + + /// Map User provider data into a list of Provider Ids. + List get userProviders => user.providerData.map((e) => e.providerId).toList(); + + Future updateDisplayName() async { + await user.updateDisplayName(controller.text); + + setState(() { + showSaveButton = false; + }); + + // ignore: use_build_context_synchronously + ScaffoldSnackbar.of(context).show('Name updated'); + } + + @override + Widget build(BuildContext context) { + return GestureDetector( + onTap: FocusScope.of(context).unfocus, + child: Scaffold( + body: Stack( + children: [ + Center( + child: SizedBox( + width: 400, + child: SingleChildScrollView( + child: Column( + mainAxisAlignment: MainAxisAlignment.center, + children: [ + Stack( + children: [ + CircleAvatar( + maxRadius: 60, + backgroundImage: NetworkImage( + user.photoURL ?? placeholderImage, + ), + ), + Positioned.directional( + textDirection: Directionality.of(context), + end: 0, + bottom: 0, + child: Material( + clipBehavior: Clip.antiAlias, + color: Theme.of(context).colorScheme.secondary, + borderRadius: BorderRadius.circular(40), + child: InkWell( + onTap: () async { + final photoURL = await getPhotoURLFromUser(); + + if (photoURL != null) { + await user.updatePhotoURL(photoURL); + } + }, + radius: 50, + child: const SizedBox( + width: 35, + height: 35, + child: Icon(Icons.edit), + ), + ), + ), + ), + ], + ), + const SizedBox(height: 10), + TextField( + textAlign: TextAlign.center, + controller: controller, + decoration: const InputDecoration( + border: InputBorder.none, + floatingLabelBehavior: FloatingLabelBehavior.never, + alignLabelWithHint: true, + label: Center( + child: Text( + 'Click to add a display name', + ), + ), + ), + ), + Text(user.email ?? user.phoneNumber ?? 'User'), + const SizedBox(height: 10), + Row( + mainAxisAlignment: MainAxisAlignment.center, + children: [ + if (userProviders.contains('phone')) + const Icon(Icons.phone), + if (userProviders.contains('password')) + const Icon(Icons.mail), + if (userProviders.contains('google.com')) + SizedBox( + width: 24, + child: Image.network( + 'https://upload.wikimedia.org/wikipedia/commons/0/09/IOS_Google_icon.png', + ), + ), + ], + ), + const SizedBox(height: 20), + TextButton( + onPressed: () { + user.sendEmailVerification(); + }, + child: const Text('Verify Email'), + ), + TextButton( + onPressed: () async { + final a = await user.multiFactor.getEnrolledFactors(); + print(a); + }, + child: const Text('Get enrolled factors'), + ), + TextButton( + onPressed: () async { + if (AuthGate.appleAuthorizationCode != null) { + // The `authorizationCode` is on the user credential. + // e.g. final authorizationCode = userCredential.additionalUserInfo?.authorizationCode; + await FirebaseAuth.instance + .revokeTokenWithAuthorizationCode( + AuthGate.appleAuthorizationCode!, + ); + // You may wish to delete the user at this point + AuthGate.appleAuthorizationCode = null; + } else { + print( + 'Apple `authorizationCode` is null, cannot revoke token.', + ); + } + }, + child: const Text('Revoke Apple auth token'), + ), + TextFormField( + controller: phoneController, + decoration: const InputDecoration( + icon: Icon(Icons.phone), + hintText: '+33612345678', + labelText: 'Phone number', + ), + ), + const SizedBox(height: 20), + TextButton( + onPressed: () async { + final session = await user.multiFactor.getSession(); + await auth.verifyPhoneNumber( + multiFactorSession: session, + phoneNumber: phoneController.text, + verificationCompleted: (_) {}, + verificationFailed: print, + codeSent: ( + String verificationId, + int? resendToken, + ) async { + final smsCode = await getSmsCodeFromUser(context); + + if (smsCode != null) { + // Create a PhoneAuthCredential with the code + final credential = PhoneAuthProvider.credential( + verificationId: verificationId, + smsCode: smsCode, + ); + + try { + await user.multiFactor.enroll( + PhoneMultiFactorGenerator.getAssertion( + credential, + ), + ); + } on FirebaseAuthException catch (e) { + print(e.message); + } + } + }, + codeAutoRetrievalTimeout: print, + ); + }, + child: const Text('Verify Number For MFA'), + ), + TextButton( + onPressed: () async { + final totp = + (await user.multiFactor.getEnrolledFactors()) + .firstWhereOrNull( + (element) => element.factorId == 'totp', + ); + if (totp != null) { + await user.multiFactor.unenroll( + factorUid: + (await user.multiFactor.getEnrolledFactors()) + .firstWhere( + (element) => element.factorId == 'totp', + ) + .uid, + ); + } + final session = await user.multiFactor.getSession(); + final totpSecret = + await TotpMultiFactorGenerator.generateSecret( + session, + ); + print(totpSecret); + final code = + await getTotpFromUser(context, totpSecret); + print('code: $code'); + if (code == null) { + return; + } + await user.multiFactor.enroll( + await TotpMultiFactorGenerator + .getAssertionForEnrollment( + totpSecret, + code, + ), + displayName: 'TOTP', + ); + }, + child: const Text('Enroll TOTP'), + ), + TextButton( + onPressed: () async { + try { + final enrolledFactors = + await user.multiFactor.getEnrolledFactors(); + + await user.multiFactor.unenroll( + factorUid: enrolledFactors.first.uid, + ); + // Show snackbar + ScaffoldSnackbar.of(context).show('MFA unenrolled'); + } catch (e) { + print(e); + } + }, + child: const Text('Unenroll MFA'), + ), + const Divider(), + TextButton( + onPressed: _signOut, + child: const Text('Sign out'), + ), + ], + ), + ), + ), + ), + Positioned.directional( + textDirection: Directionality.of(context), + end: 40, + top: 40, + child: AnimatedSwitcher( + duration: const Duration(milliseconds: 200), + child: !showSaveButton + ? SizedBox(key: UniqueKey()) + : TextButton( + onPressed: isLoading ? null : updateDisplayName, + child: const Text('Save changes'), + ), + ), + ), + ], + ), + ), + ); + } + + Future getPhotoURLFromUser() async { + String? photoURL; + + // Update the UI - wait for the user to enter the SMS code + await showDialog( + context: context, + barrierDismissible: false, + builder: (context) { + return AlertDialog( + title: const Text('New image Url:'), + actions: [ + ElevatedButton( + onPressed: () { + Navigator.of(context).pop(); + }, + child: const Text('Update'), + ), + OutlinedButton( + onPressed: () { + photoURL = null; + Navigator.of(context).pop(); + }, + child: const Text('Cancel'), + ), + ], + content: Container( + padding: const EdgeInsets.all(20), + child: TextField( + onChanged: (value) { + photoURL = value; + }, + textAlign: TextAlign.center, + autofocus: true, + ), + ), + ); + }, + ); + + return photoURL; + } + + /// Example code for sign out. + Future _signOut() async { + await auth.signOut(); + await GoogleSignIn().signOut(); + } +} diff --git a/mih_ui/android/build/macos/SourcePackages/firebase_auth-6.5.4/example/macos/Flutter/Flutter-Debug.xcconfig b/mih_ui/android/build/macos/SourcePackages/firebase_auth-6.5.4/example/macos/Flutter/Flutter-Debug.xcconfig new file mode 100644 index 00000000..785633d3 --- /dev/null +++ b/mih_ui/android/build/macos/SourcePackages/firebase_auth-6.5.4/example/macos/Flutter/Flutter-Debug.xcconfig @@ -0,0 +1,2 @@ +#include "Pods/Target Support Files/Pods-Runner/Pods-Runner.debug.xcconfig" +#include "ephemeral/Flutter-Generated.xcconfig" diff --git a/mih_ui/android/build/macos/SourcePackages/firebase_auth-6.5.4/example/macos/Flutter/Flutter-Release.xcconfig b/mih_ui/android/build/macos/SourcePackages/firebase_auth-6.5.4/example/macos/Flutter/Flutter-Release.xcconfig new file mode 100644 index 00000000..5fba960c --- /dev/null +++ b/mih_ui/android/build/macos/SourcePackages/firebase_auth-6.5.4/example/macos/Flutter/Flutter-Release.xcconfig @@ -0,0 +1,2 @@ +#include "Pods/Target Support Files/Pods-Runner/Pods-Runner.release.xcconfig" +#include "ephemeral/Flutter-Generated.xcconfig" diff --git a/mih_ui/android/build/macos/SourcePackages/firebase_auth-6.5.4/example/macos/Podfile b/mih_ui/android/build/macos/SourcePackages/firebase_auth-6.5.4/example/macos/Podfile new file mode 100644 index 00000000..9ec46f8c --- /dev/null +++ b/mih_ui/android/build/macos/SourcePackages/firebase_auth-6.5.4/example/macos/Podfile @@ -0,0 +1,40 @@ +platform :osx, '10.15' + +# CocoaPods analytics sends network stats synchronously affecting flutter build latency. +ENV['COCOAPODS_DISABLE_STATS'] = 'true' + +project 'Runner', { + 'Debug' => :debug, + 'Profile' => :release, + 'Release' => :release, +} + +def flutter_root + generated_xcode_build_settings_path = File.expand_path(File.join('..', 'Flutter', 'ephemeral', 'Flutter-Generated.xcconfig'), __FILE__) + unless File.exist?(generated_xcode_build_settings_path) + raise "#{generated_xcode_build_settings_path} must exist. If you're running pod install manually, make sure \"flutter pub get\" is executed first" + end + + File.foreach(generated_xcode_build_settings_path) do |line| + matches = line.match(/FLUTTER_ROOT\=(.*)/) + return matches[1].strip if matches + end + raise "FLUTTER_ROOT not found in #{generated_xcode_build_settings_path}. Try deleting Flutter-Generated.xcconfig, then run \"flutter pub get\"" +end + +require File.expand_path(File.join('packages', 'flutter_tools', 'bin', 'podhelper'), flutter_root) + +flutter_macos_podfile_setup + +target 'Runner' do + use_frameworks! + use_modular_headers! + + flutter_install_all_macos_pods File.dirname(File.realpath(__FILE__)) +end + +post_install do |installer| + installer.pods_project.targets.each do |target| + flutter_additional_macos_build_settings(target) + end +end diff --git a/mih_ui/android/build/macos/SourcePackages/firebase_auth-6.5.4/example/macos/Runner.xcodeproj/project.pbxproj b/mih_ui/android/build/macos/SourcePackages/firebase_auth-6.5.4/example/macos/Runner.xcodeproj/project.pbxproj new file mode 100644 index 00000000..4848b09b --- /dev/null +++ b/mih_ui/android/build/macos/SourcePackages/firebase_auth-6.5.4/example/macos/Runner.xcodeproj/project.pbxproj @@ -0,0 +1,718 @@ +// !$*UTF8*$! +{ + archiveVersion = 1; + classes = { + }; + objectVersion = 54; + objects = { + +/* Begin PBXAggregateTarget section */ + 33CC111A2044C6BA0003C045 /* Flutter Assemble */ = { + isa = PBXAggregateTarget; + buildConfigurationList = 33CC111B2044C6BA0003C045 /* Build configuration list for PBXAggregateTarget "Flutter Assemble" */; + buildPhases = ( + 33CC111E2044C6BF0003C045 /* ShellScript */, + ); + dependencies = ( + ); + name = "Flutter Assemble"; + productName = FLX; + }; +/* End PBXAggregateTarget section */ + +/* Begin PBXBuildFile section */ + 25A01FB0278D938300D1E790 /* GoogleService-Info.plist in Resources */ = {isa = PBXBuildFile; fileRef = 25A01FAF278D938300D1E790 /* GoogleService-Info.plist */; }; + 335BBD1B22A9A15E00E9071D /* GeneratedPluginRegistrant.swift in Sources */ = {isa = PBXBuildFile; fileRef = 335BBD1A22A9A15E00E9071D /* GeneratedPluginRegistrant.swift */; }; + 33CC10F12044A3C60003C045 /* AppDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 33CC10F02044A3C60003C045 /* AppDelegate.swift */; }; + 33CC10F32044A3C60003C045 /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 33CC10F22044A3C60003C045 /* Assets.xcassets */; }; + 33CC10F62044A3C60003C045 /* MainMenu.xib in Resources */ = {isa = PBXBuildFile; fileRef = 33CC10F42044A3C60003C045 /* MainMenu.xib */; }; + 33CC11132044BFA00003C045 /* MainFlutterWindow.swift in Sources */ = {isa = PBXBuildFile; fileRef = 33CC11122044BFA00003C045 /* MainFlutterWindow.swift */; }; + 78A318202AECB46A00862997 /* FlutterGeneratedPluginSwiftPackage in Frameworks */ = {isa = PBXBuildFile; productRef = 78A3181F2AECB46A00862997 /* FlutterGeneratedPluginSwiftPackage */; }; + B6036D992F5B77F0D48D7883 /* Pods_Runner.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 1026236A547BC5196614E954 /* Pods_Runner.framework */; }; + C0151CEAF69E3751D6A8FA78 /* GoogleService-Info.plist in Resources */ = {isa = PBXBuildFile; fileRef = 2F30ED8EF0A1349EA81AEE1A /* GoogleService-Info.plist */; }; +/* End PBXBuildFile section */ + +/* Begin PBXContainerItemProxy section */ + 33CC111F2044C79F0003C045 /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = 33CC10E52044A3C60003C045 /* Project object */; + proxyType = 1; + remoteGlobalIDString = 33CC111A2044C6BA0003C045; + remoteInfo = FLX; + }; +/* End PBXContainerItemProxy section */ + +/* Begin PBXCopyFilesBuildPhase section */ + 33CC110E2044A8840003C045 /* Bundle Framework */ = { + isa = PBXCopyFilesBuildPhase; + buildActionMask = 2147483647; + dstPath = ""; + dstSubfolderSpec = 10; + files = ( + ); + name = "Bundle Framework"; + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXCopyFilesBuildPhase section */ + +/* Begin PBXFileReference section */ + 0B4CF9B1CA3F6E07FE2F953C /* Pods-Runner.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.profile.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.profile.xcconfig"; sourceTree = ""; }; + 1026236A547BC5196614E954 /* Pods_Runner.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_Runner.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + 1E5E064344044E24673A33BD /* Pods-Runner.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.release.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.release.xcconfig"; sourceTree = ""; }; + 25A01FAF278D938300D1E790 /* GoogleService-Info.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; path = "GoogleService-Info.plist"; sourceTree = ""; }; + 2F30ED8EF0A1349EA81AEE1A /* GoogleService-Info.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; name = "GoogleService-Info.plist"; path = "Runner/GoogleService-Info.plist"; sourceTree = ""; }; + 333000ED22D3DE5D00554162 /* Warnings.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = Warnings.xcconfig; sourceTree = ""; }; + 335BBD1A22A9A15E00E9071D /* GeneratedPluginRegistrant.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = GeneratedPluginRegistrant.swift; sourceTree = ""; }; + 33CC10ED2044A3C60003C045 /* example.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = example.app; sourceTree = BUILT_PRODUCTS_DIR; }; + 33CC10F02044A3C60003C045 /* AppDelegate.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AppDelegate.swift; sourceTree = ""; }; + 33CC10F22044A3C60003C045 /* Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; name = Assets.xcassets; path = Runner/Assets.xcassets; sourceTree = ""; }; + 33CC10F52044A3C60003C045 /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.xib; name = Base; path = Base.lproj/MainMenu.xib; sourceTree = ""; }; + 33CC10F72044A3C60003C045 /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; name = Info.plist; path = Runner/Info.plist; sourceTree = ""; }; + 33CC11122044BFA00003C045 /* MainFlutterWindow.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = MainFlutterWindow.swift; sourceTree = ""; }; + 33CEB47222A05771004F2AC0 /* Flutter-Debug.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = "Flutter-Debug.xcconfig"; sourceTree = ""; }; + 33CEB47422A05771004F2AC0 /* Flutter-Release.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = "Flutter-Release.xcconfig"; sourceTree = ""; }; + 33CEB47722A0578A004F2AC0 /* Flutter-Generated.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; name = "Flutter-Generated.xcconfig"; path = "ephemeral/Flutter-Generated.xcconfig"; sourceTree = ""; }; + 33E51913231747F40026EE4D /* DebugProfile.entitlements */ = {isa = PBXFileReference; lastKnownFileType = text.plist.entitlements; path = DebugProfile.entitlements; sourceTree = ""; }; + 33E51914231749380026EE4D /* Release.entitlements */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.entitlements; path = Release.entitlements; sourceTree = ""; }; + 33E5194F232828860026EE4D /* AppInfo.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = AppInfo.xcconfig; sourceTree = ""; }; + 3D7BD4B06D0869EA1407E048 /* Pods-Runner.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.debug.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.debug.xcconfig"; sourceTree = ""; }; + 78E0A7A72DC9AD7400C4905E /* FlutterGeneratedPluginSwiftPackage */ = {isa = PBXFileReference; lastKnownFileType = wrapper; name = FlutterGeneratedPluginSwiftPackage; path = ephemeral/Packages/FlutterGeneratedPluginSwiftPackage; sourceTree = ""; }; + 7AFA3C8E1D35360C0083082E /* Release.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = Release.xcconfig; sourceTree = ""; }; + 9740EEB21CF90195004384FC /* Debug.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; path = Debug.xcconfig; sourceTree = ""; }; +/* End PBXFileReference section */ + +/* Begin PBXFrameworksBuildPhase section */ + 33CC10EA2044A3C60003C045 /* Frameworks */ = { + isa = PBXFrameworksBuildPhase; + buildActionMask = 2147483647; + files = ( + 78A318202AECB46A00862997 /* FlutterGeneratedPluginSwiftPackage in Frameworks */, + B6036D992F5B77F0D48D7883 /* Pods_Runner.framework in Frameworks */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXFrameworksBuildPhase section */ + +/* Begin PBXGroup section */ + 286E7513A68DD39907D77423 /* Pods */ = { + isa = PBXGroup; + children = ( + 3D7BD4B06D0869EA1407E048 /* Pods-Runner.debug.xcconfig */, + 1E5E064344044E24673A33BD /* Pods-Runner.release.xcconfig */, + 0B4CF9B1CA3F6E07FE2F953C /* Pods-Runner.profile.xcconfig */, + ); + path = Pods; + sourceTree = ""; + }; + 33BA886A226E78AF003329D5 /* Configs */ = { + isa = PBXGroup; + children = ( + 33E5194F232828860026EE4D /* AppInfo.xcconfig */, + 9740EEB21CF90195004384FC /* Debug.xcconfig */, + 7AFA3C8E1D35360C0083082E /* Release.xcconfig */, + 333000ED22D3DE5D00554162 /* Warnings.xcconfig */, + ); + path = Configs; + sourceTree = ""; + }; + 33CC10E42044A3C60003C045 = { + isa = PBXGroup; + children = ( + 33FAB671232836740065AC1E /* Runner */, + 33CEB47122A05771004F2AC0 /* Flutter */, + 33CC10EE2044A3C60003C045 /* Products */, + D73912EC22F37F3D000D13A0 /* Frameworks */, + 286E7513A68DD39907D77423 /* Pods */, + 2F30ED8EF0A1349EA81AEE1A /* GoogleService-Info.plist */, + ); + sourceTree = ""; + }; + 33CC10EE2044A3C60003C045 /* Products */ = { + isa = PBXGroup; + children = ( + 33CC10ED2044A3C60003C045 /* example.app */, + ); + name = Products; + sourceTree = ""; + }; + 33CC11242044D66E0003C045 /* Resources */ = { + isa = PBXGroup; + children = ( + 33CC10F22044A3C60003C045 /* Assets.xcassets */, + 33CC10F42044A3C60003C045 /* MainMenu.xib */, + 33CC10F72044A3C60003C045 /* Info.plist */, + ); + name = Resources; + path = ..; + sourceTree = ""; + }; + 33CEB47122A05771004F2AC0 /* Flutter */ = { + isa = PBXGroup; + children = ( + 78E0A7A72DC9AD7400C4905E /* FlutterGeneratedPluginSwiftPackage */, + 335BBD1A22A9A15E00E9071D /* GeneratedPluginRegistrant.swift */, + 33CEB47222A05771004F2AC0 /* Flutter-Debug.xcconfig */, + 33CEB47422A05771004F2AC0 /* Flutter-Release.xcconfig */, + 33CEB47722A0578A004F2AC0 /* Flutter-Generated.xcconfig */, + ); + path = Flutter; + sourceTree = ""; + }; + 33FAB671232836740065AC1E /* Runner */ = { + isa = PBXGroup; + children = ( + 25A01FAF278D938300D1E790 /* GoogleService-Info.plist */, + 33CC10F02044A3C60003C045 /* AppDelegate.swift */, + 33CC11122044BFA00003C045 /* MainFlutterWindow.swift */, + 33E51913231747F40026EE4D /* DebugProfile.entitlements */, + 33E51914231749380026EE4D /* Release.entitlements */, + 33CC11242044D66E0003C045 /* Resources */, + 33BA886A226E78AF003329D5 /* Configs */, + ); + path = Runner; + sourceTree = ""; + }; + D73912EC22F37F3D000D13A0 /* Frameworks */ = { + isa = PBXGroup; + children = ( + 1026236A547BC5196614E954 /* Pods_Runner.framework */, + ); + name = Frameworks; + sourceTree = ""; + }; +/* End PBXGroup section */ + +/* Begin PBXNativeTarget section */ + 33CC10EC2044A3C60003C045 /* Runner */ = { + isa = PBXNativeTarget; + buildConfigurationList = 33CC10FB2044A3C60003C045 /* Build configuration list for PBXNativeTarget "Runner" */; + buildPhases = ( + 9C4FABD4FD7B8936CFFEAF31 /* [CP] Check Pods Manifest.lock */, + 33CC10E92044A3C60003C045 /* Sources */, + 33CC10EA2044A3C60003C045 /* Frameworks */, + 33CC10EB2044A3C60003C045 /* Resources */, + 33CC110E2044A8840003C045 /* Bundle Framework */, + 3399D490228B24CF009A79C7 /* ShellScript */, + E033F9E34514FF7F419D8FF5 /* [CP] Embed Pods Frameworks */, + 91D69FDB92A2BAB6493D7E50 /* [CP] Copy Pods Resources */, + ); + buildRules = ( + ); + dependencies = ( + 33CC11202044C79F0003C045 /* PBXTargetDependency */, + ); + name = Runner; + packageProductDependencies = ( + 78A3181F2AECB46A00862997 /* FlutterGeneratedPluginSwiftPackage */, + ); + productName = Runner; + productReference = 33CC10ED2044A3C60003C045 /* example.app */; + productType = "com.apple.product-type.application"; + }; +/* End PBXNativeTarget section */ + +/* Begin PBXProject section */ + 33CC10E52044A3C60003C045 /* Project object */ = { + isa = PBXProject; + attributes = { + LastSwiftUpdateCheck = 0920; + LastUpgradeCheck = 1510; + ORGANIZATIONNAME = "The Flutter Authors"; + TargetAttributes = { + 33CC10EC2044A3C60003C045 = { + CreatedOnToolsVersion = 9.2; + LastSwiftMigration = 1100; + ProvisioningStyle = Automatic; + SystemCapabilities = { + com.apple.Sandbox = { + enabled = 1; + }; + }; + }; + 33CC111A2044C6BA0003C045 = { + CreatedOnToolsVersion = 9.2; + ProvisioningStyle = Manual; + }; + }; + }; + buildConfigurationList = 33CC10E82044A3C60003C045 /* Build configuration list for PBXProject "Runner" */; + compatibilityVersion = "Xcode 8.0"; + developmentRegion = en; + hasScannedForEncodings = 0; + knownRegions = ( + en, + Base, + ); + mainGroup = 33CC10E42044A3C60003C045; + packageReferences = ( + 781AD8BC2B33823900A9FFBB /* XCLocalSwiftPackageReference "FlutterGeneratedPluginSwiftPackage" */, + ); + productRefGroup = 33CC10EE2044A3C60003C045 /* Products */; + projectDirPath = ""; + projectRoot = ""; + targets = ( + 33CC10EC2044A3C60003C045 /* Runner */, + 33CC111A2044C6BA0003C045 /* Flutter Assemble */, + ); + }; +/* End PBXProject section */ + +/* Begin PBXResourcesBuildPhase section */ + 33CC10EB2044A3C60003C045 /* Resources */ = { + isa = PBXResourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + 33CC10F32044A3C60003C045 /* Assets.xcassets in Resources */, + 33CC10F62044A3C60003C045 /* MainMenu.xib in Resources */, + 25A01FB0278D938300D1E790 /* GoogleService-Info.plist in Resources */, + C0151CEAF69E3751D6A8FA78 /* GoogleService-Info.plist in Resources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXResourcesBuildPhase section */ + +/* Begin PBXShellScriptBuildPhase section */ + 3399D490228B24CF009A79C7 /* ShellScript */ = { + isa = PBXShellScriptBuildPhase; + alwaysOutOfDate = 1; + buildActionMask = 2147483647; + files = ( + ); + inputFileListPaths = ( + ); + inputPaths = ( + ); + outputFileListPaths = ( + ); + outputPaths = ( + ); + runOnlyForDeploymentPostprocessing = 0; + shellPath = /bin/sh; + shellScript = "echo \"$PRODUCT_NAME.app\" > \"$PROJECT_DIR\"/Flutter/ephemeral/.app_filename && \"$FLUTTER_ROOT\"/packages/flutter_tools/bin/macos_assemble.sh embed\n"; + }; + 33CC111E2044C6BF0003C045 /* ShellScript */ = { + isa = PBXShellScriptBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + inputFileListPaths = ( + Flutter/ephemeral/FlutterInputs.xcfilelist, + ); + inputPaths = ( + Flutter/ephemeral/tripwire, + ); + outputFileListPaths = ( + Flutter/ephemeral/FlutterOutputs.xcfilelist, + ); + outputPaths = ( + ); + runOnlyForDeploymentPostprocessing = 0; + shellPath = /bin/sh; + shellScript = "\"$FLUTTER_ROOT\"/packages/flutter_tools/bin/macos_assemble.sh\ntouch Flutter/ephemeral/tripwire\n"; + }; + 91D69FDB92A2BAB6493D7E50 /* [CP] Copy Pods Resources */ = { + isa = PBXShellScriptBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + inputPaths = ( + "${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-resources.sh", + "${PODS_CONFIGURATION_BUILD_DIR}/google_sign_in_ios/google_sign_in_ios_privacy.bundle", + ); + name = "[CP] Copy Pods Resources"; + outputPaths = ( + "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/google_sign_in_ios_privacy.bundle", + ); + runOnlyForDeploymentPostprocessing = 0; + shellPath = /bin/sh; + shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-resources.sh\"\n"; + showEnvVarsInLog = 0; + }; + 9C4FABD4FD7B8936CFFEAF31 /* [CP] Check Pods Manifest.lock */ = { + isa = PBXShellScriptBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + inputFileListPaths = ( + ); + inputPaths = ( + "${PODS_PODFILE_DIR_PATH}/Podfile.lock", + "${PODS_ROOT}/Manifest.lock", + ); + name = "[CP] Check Pods Manifest.lock"; + outputFileListPaths = ( + ); + outputPaths = ( + "$(DERIVED_FILE_DIR)/Pods-Runner-checkManifestLockResult.txt", + ); + runOnlyForDeploymentPostprocessing = 0; + shellPath = /bin/sh; + shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; + showEnvVarsInLog = 0; + }; + E033F9E34514FF7F419D8FF5 /* [CP] Embed Pods Frameworks */ = { + isa = PBXShellScriptBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + inputPaths = ( + "${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks.sh", + "${BUILT_PRODUCTS_DIR}/AppAuth/AppAuth.framework", + "${BUILT_PRODUCTS_DIR}/GTMAppAuth/GTMAppAuth.framework", + "${BUILT_PRODUCTS_DIR}/GTMSessionFetcher/GTMSessionFetcher.framework", + "${BUILT_PRODUCTS_DIR}/GoogleSignIn/GoogleSignIn.framework", + "${BUILT_PRODUCTS_DIR}/facebook_auth_desktop/facebook_auth_desktop.framework", + "${BUILT_PRODUCTS_DIR}/flutter_secure_storage_macos/flutter_secure_storage_macos.framework", + ); + name = "[CP] Embed Pods Frameworks"; + outputPaths = ( + "${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/AppAuth.framework", + "${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/GTMAppAuth.framework", + "${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/GTMSessionFetcher.framework", + "${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/GoogleSignIn.framework", + "${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/facebook_auth_desktop.framework", + "${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/flutter_secure_storage_macos.framework", + ); + runOnlyForDeploymentPostprocessing = 0; + shellPath = /bin/sh; + shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks.sh\"\n"; + showEnvVarsInLog = 0; + }; +/* End PBXShellScriptBuildPhase section */ + +/* Begin PBXSourcesBuildPhase section */ + 33CC10E92044A3C60003C045 /* Sources */ = { + isa = PBXSourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + 33CC11132044BFA00003C045 /* MainFlutterWindow.swift in Sources */, + 33CC10F12044A3C60003C045 /* AppDelegate.swift in Sources */, + 335BBD1B22A9A15E00E9071D /* GeneratedPluginRegistrant.swift in Sources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXSourcesBuildPhase section */ + +/* Begin PBXTargetDependency section */ + 33CC11202044C79F0003C045 /* PBXTargetDependency */ = { + isa = PBXTargetDependency; + target = 33CC111A2044C6BA0003C045 /* Flutter Assemble */; + targetProxy = 33CC111F2044C79F0003C045 /* PBXContainerItemProxy */; + }; +/* End PBXTargetDependency section */ + +/* Begin PBXVariantGroup section */ + 33CC10F42044A3C60003C045 /* MainMenu.xib */ = { + isa = PBXVariantGroup; + children = ( + 33CC10F52044A3C60003C045 /* Base */, + ); + name = MainMenu.xib; + path = Runner; + sourceTree = ""; + }; +/* End PBXVariantGroup section */ + +/* Begin XCBuildConfiguration section */ + 338D0CE9231458BD00FA5F75 /* Profile */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = 7AFA3C8E1D35360C0083082E /* Release.xcconfig */; + buildSettings = { + ALWAYS_SEARCH_USER_PATHS = NO; + CLANG_ANALYZER_NONNULL = YES; + CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE; + CLANG_CXX_LANGUAGE_STANDARD = "gnu++14"; + CLANG_CXX_LIBRARY = "libc++"; + CLANG_ENABLE_MODULES = YES; + CLANG_ENABLE_OBJC_ARC = YES; + CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES; + CLANG_WARN_BOOL_CONVERSION = YES; + CLANG_WARN_CONSTANT_CONVERSION = YES; + CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES; + CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; + CLANG_WARN_DOCUMENTATION_COMMENTS = YES; + CLANG_WARN_EMPTY_BODY = YES; + CLANG_WARN_ENUM_CONVERSION = YES; + CLANG_WARN_INFINITE_RECURSION = YES; + CLANG_WARN_INT_CONVERSION = YES; + CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES; + CLANG_WARN_OBJC_LITERAL_CONVERSION = YES; + CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; + CLANG_WARN_RANGE_LOOP_ANALYSIS = YES; + CLANG_WARN_SUSPICIOUS_MOVE = YES; + CODE_SIGN_IDENTITY = "-"; + COPY_PHASE_STRIP = NO; + DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; + ENABLE_NS_ASSERTIONS = NO; + ENABLE_STRICT_OBJC_MSGSEND = YES; + GCC_C_LANGUAGE_STANDARD = gnu11; + GCC_NO_COMMON_BLOCKS = YES; + GCC_WARN_64_TO_32_BIT_CONVERSION = YES; + GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; + GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; + GCC_WARN_UNUSED_FUNCTION = YES; + GCC_WARN_UNUSED_VARIABLE = YES; + MACOSX_DEPLOYMENT_TARGET = 10.15; + MTL_ENABLE_DEBUG_INFO = NO; + SDKROOT = macosx; + SWIFT_COMPILATION_MODE = wholemodule; + SWIFT_OPTIMIZATION_LEVEL = "-O"; + }; + name = Profile; + }; + 338D0CEA231458BD00FA5F75 /* Profile */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = 33E5194F232828860026EE4D /* AppInfo.xcconfig */; + buildSettings = { + ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; + CLANG_ENABLE_MODULES = YES; + CODE_SIGN_ENTITLEMENTS = Runner/DebugProfile.entitlements; + CODE_SIGN_IDENTITY = "Apple Development"; + CODE_SIGN_STYLE = Automatic; + COMBINE_HIDPI_IMAGES = YES; + DEVELOPMENT_TEAM = YYX2P3XVJ7; + FRAMEWORK_SEARCH_PATHS = ( + "$(inherited)", + "$(PROJECT_DIR)/Flutter/ephemeral", + ); + INFOPLIST_FILE = Runner/Info.plist; + LD_RUNPATH_SEARCH_PATHS = ( + "$(inherited)", + "@executable_path/../Frameworks", + ); + MACOSX_DEPLOYMENT_TARGET = 10.15; + PRODUCT_BUNDLE_IDENTIFIER = io.flutter.plugins.firebase.auth.example; + PROVISIONING_PROFILE_SPECIFIER = ""; + SWIFT_VERSION = 5.0; + }; + name = Profile; + }; + 338D0CEB231458BD00FA5F75 /* Profile */ = { + isa = XCBuildConfiguration; + buildSettings = { + CODE_SIGN_STYLE = Manual; + PRODUCT_NAME = "$(TARGET_NAME)"; + }; + name = Profile; + }; + 33CC10F92044A3C60003C045 /* Debug */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = 9740EEB21CF90195004384FC /* Debug.xcconfig */; + buildSettings = { + ALWAYS_SEARCH_USER_PATHS = NO; + CLANG_ANALYZER_NONNULL = YES; + CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE; + CLANG_CXX_LANGUAGE_STANDARD = "gnu++14"; + CLANG_CXX_LIBRARY = "libc++"; + CLANG_ENABLE_MODULES = YES; + CLANG_ENABLE_OBJC_ARC = YES; + CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES; + CLANG_WARN_BOOL_CONVERSION = YES; + CLANG_WARN_CONSTANT_CONVERSION = YES; + CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES; + CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; + CLANG_WARN_DOCUMENTATION_COMMENTS = YES; + CLANG_WARN_EMPTY_BODY = YES; + CLANG_WARN_ENUM_CONVERSION = YES; + CLANG_WARN_INFINITE_RECURSION = YES; + CLANG_WARN_INT_CONVERSION = YES; + CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES; + CLANG_WARN_OBJC_LITERAL_CONVERSION = YES; + CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; + CLANG_WARN_RANGE_LOOP_ANALYSIS = YES; + CLANG_WARN_SUSPICIOUS_MOVE = YES; + CODE_SIGN_IDENTITY = "-"; + COPY_PHASE_STRIP = NO; + DEBUG_INFORMATION_FORMAT = dwarf; + ENABLE_STRICT_OBJC_MSGSEND = YES; + ENABLE_TESTABILITY = YES; + GCC_C_LANGUAGE_STANDARD = gnu11; + GCC_DYNAMIC_NO_PIC = NO; + GCC_NO_COMMON_BLOCKS = YES; + GCC_OPTIMIZATION_LEVEL = 0; + GCC_PREPROCESSOR_DEFINITIONS = ( + "DEBUG=1", + "$(inherited)", + ); + GCC_WARN_64_TO_32_BIT_CONVERSION = YES; + GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; + GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; + GCC_WARN_UNUSED_FUNCTION = YES; + GCC_WARN_UNUSED_VARIABLE = YES; + MACOSX_DEPLOYMENT_TARGET = 10.15; + MTL_ENABLE_DEBUG_INFO = YES; + ONLY_ACTIVE_ARCH = YES; + SDKROOT = macosx; + SWIFT_ACTIVE_COMPILATION_CONDITIONS = DEBUG; + SWIFT_OPTIMIZATION_LEVEL = "-Onone"; + }; + name = Debug; + }; + 33CC10FA2044A3C60003C045 /* Release */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = 7AFA3C8E1D35360C0083082E /* Release.xcconfig */; + buildSettings = { + ALWAYS_SEARCH_USER_PATHS = NO; + CLANG_ANALYZER_NONNULL = YES; + CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE; + CLANG_CXX_LANGUAGE_STANDARD = "gnu++14"; + CLANG_CXX_LIBRARY = "libc++"; + CLANG_ENABLE_MODULES = YES; + CLANG_ENABLE_OBJC_ARC = YES; + CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES; + CLANG_WARN_BOOL_CONVERSION = YES; + CLANG_WARN_CONSTANT_CONVERSION = YES; + CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES; + CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; + CLANG_WARN_DOCUMENTATION_COMMENTS = YES; + CLANG_WARN_EMPTY_BODY = YES; + CLANG_WARN_ENUM_CONVERSION = YES; + CLANG_WARN_INFINITE_RECURSION = YES; + CLANG_WARN_INT_CONVERSION = YES; + CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES; + CLANG_WARN_OBJC_LITERAL_CONVERSION = YES; + CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; + CLANG_WARN_RANGE_LOOP_ANALYSIS = YES; + CLANG_WARN_SUSPICIOUS_MOVE = YES; + CODE_SIGN_IDENTITY = "-"; + COPY_PHASE_STRIP = NO; + DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; + ENABLE_NS_ASSERTIONS = NO; + ENABLE_STRICT_OBJC_MSGSEND = YES; + GCC_C_LANGUAGE_STANDARD = gnu11; + GCC_NO_COMMON_BLOCKS = YES; + GCC_WARN_64_TO_32_BIT_CONVERSION = YES; + GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; + GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; + GCC_WARN_UNUSED_FUNCTION = YES; + GCC_WARN_UNUSED_VARIABLE = YES; + MACOSX_DEPLOYMENT_TARGET = 10.15; + MTL_ENABLE_DEBUG_INFO = NO; + SDKROOT = macosx; + SWIFT_COMPILATION_MODE = wholemodule; + SWIFT_OPTIMIZATION_LEVEL = "-O"; + }; + name = Release; + }; + 33CC10FC2044A3C60003C045 /* Debug */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = 33E5194F232828860026EE4D /* AppInfo.xcconfig */; + buildSettings = { + ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; + CLANG_ENABLE_MODULES = YES; + CODE_SIGN_ENTITLEMENTS = Runner/DebugProfile.entitlements; + CODE_SIGN_IDENTITY = "Apple Development"; + CODE_SIGN_STYLE = Automatic; + COMBINE_HIDPI_IMAGES = YES; + DEVELOPMENT_TEAM = YYX2P3XVJ7; + FRAMEWORK_SEARCH_PATHS = ( + "$(inherited)", + "$(PROJECT_DIR)/Flutter/ephemeral", + ); + INFOPLIST_FILE = Runner/Info.plist; + LD_RUNPATH_SEARCH_PATHS = ( + "$(inherited)", + "@executable_path/../Frameworks", + ); + MACOSX_DEPLOYMENT_TARGET = 10.15; + PRODUCT_BUNDLE_IDENTIFIER = io.flutter.plugins.firebase.auth.example; + PROVISIONING_PROFILE_SPECIFIER = ""; + SWIFT_OPTIMIZATION_LEVEL = "-Onone"; + SWIFT_VERSION = 5.0; + }; + name = Debug; + }; + 33CC10FD2044A3C60003C045 /* Release */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = 33E5194F232828860026EE4D /* AppInfo.xcconfig */; + buildSettings = { + ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; + CLANG_ENABLE_MODULES = YES; + CODE_SIGN_ENTITLEMENTS = Runner/Release.entitlements; + CODE_SIGN_IDENTITY = "Apple Development"; + CODE_SIGN_STYLE = Automatic; + COMBINE_HIDPI_IMAGES = YES; + DEVELOPMENT_TEAM = YYX2P3XVJ7; + FRAMEWORK_SEARCH_PATHS = ( + "$(inherited)", + "$(PROJECT_DIR)/Flutter/ephemeral", + ); + INFOPLIST_FILE = Runner/Info.plist; + LD_RUNPATH_SEARCH_PATHS = ( + "$(inherited)", + "@executable_path/../Frameworks", + ); + MACOSX_DEPLOYMENT_TARGET = 10.15; + PRODUCT_BUNDLE_IDENTIFIER = io.flutter.plugins.firebase.auth.example; + PROVISIONING_PROFILE_SPECIFIER = ""; + SWIFT_VERSION = 5.0; + }; + name = Release; + }; + 33CC111C2044C6BA0003C045 /* Debug */ = { + isa = XCBuildConfiguration; + buildSettings = { + CODE_SIGN_STYLE = Manual; + PRODUCT_NAME = "$(TARGET_NAME)"; + }; + name = Debug; + }; + 33CC111D2044C6BA0003C045 /* Release */ = { + isa = XCBuildConfiguration; + buildSettings = { + CODE_SIGN_STYLE = Automatic; + PRODUCT_NAME = "$(TARGET_NAME)"; + }; + name = Release; + }; +/* End XCBuildConfiguration section */ + +/* Begin XCConfigurationList section */ + 33CC10E82044A3C60003C045 /* Build configuration list for PBXProject "Runner" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + 33CC10F92044A3C60003C045 /* Debug */, + 33CC10FA2044A3C60003C045 /* Release */, + 338D0CE9231458BD00FA5F75 /* Profile */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; + 33CC10FB2044A3C60003C045 /* Build configuration list for PBXNativeTarget "Runner" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + 33CC10FC2044A3C60003C045 /* Debug */, + 33CC10FD2044A3C60003C045 /* Release */, + 338D0CEA231458BD00FA5F75 /* Profile */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; + 33CC111B2044C6BA0003C045 /* Build configuration list for PBXAggregateTarget "Flutter Assemble" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + 33CC111C2044C6BA0003C045 /* Debug */, + 33CC111D2044C6BA0003C045 /* Release */, + 338D0CEB231458BD00FA5F75 /* Profile */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; +/* End XCConfigurationList section */ + +/* Begin XCLocalSwiftPackageReference section */ + 781AD8BC2B33823900A9FFBB /* XCLocalSwiftPackageReference "FlutterGeneratedPluginSwiftPackage" */ = { + isa = XCLocalSwiftPackageReference; + relativePath = Flutter/ephemeral/Packages/FlutterGeneratedPluginSwiftPackage; + }; +/* End XCLocalSwiftPackageReference section */ + +/* Begin XCSwiftPackageProductDependency section */ + 78A3181F2AECB46A00862997 /* FlutterGeneratedPluginSwiftPackage */ = { + isa = XCSwiftPackageProductDependency; + productName = FlutterGeneratedPluginSwiftPackage; + }; +/* End XCSwiftPackageProductDependency section */ + }; + rootObject = 33CC10E52044A3C60003C045 /* Project object */; +} diff --git a/mih_ui/android/build/macos/SourcePackages/firebase_auth-6.5.4/example/macos/Runner.xcodeproj/project.xcworkspace/contents.xcworkspacedata b/mih_ui/android/build/macos/SourcePackages/firebase_auth-6.5.4/example/macos/Runner.xcodeproj/project.xcworkspace/contents.xcworkspacedata new file mode 100644 index 00000000..764c74b8 --- /dev/null +++ b/mih_ui/android/build/macos/SourcePackages/firebase_auth-6.5.4/example/macos/Runner.xcodeproj/project.xcworkspace/contents.xcworkspacedata @@ -0,0 +1,7 @@ + + + + + diff --git a/mih_ui/android/build/macos/SourcePackages/firebase_auth-6.5.4/example/macos/Runner.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist b/mih_ui/android/build/macos/SourcePackages/firebase_auth-6.5.4/example/macos/Runner.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist new file mode 100644 index 00000000..18d98100 --- /dev/null +++ b/mih_ui/android/build/macos/SourcePackages/firebase_auth-6.5.4/example/macos/Runner.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist @@ -0,0 +1,8 @@ + + + + + IDEDidComputeMac32BitWarning + + + diff --git a/mih_ui/android/build/macos/SourcePackages/firebase_auth-6.5.4/example/macos/Runner.xcodeproj/xcshareddata/xcschemes/Runner.xcscheme b/mih_ui/android/build/macos/SourcePackages/firebase_auth-6.5.4/example/macos/Runner.xcodeproj/xcshareddata/xcschemes/Runner.xcscheme new file mode 100644 index 00000000..126b4eb8 --- /dev/null +++ b/mih_ui/android/build/macos/SourcePackages/firebase_auth-6.5.4/example/macos/Runner.xcodeproj/xcshareddata/xcschemes/Runner.xcscheme @@ -0,0 +1,120 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/mih_ui/android/build/macos/SourcePackages/firebase_auth-6.5.4/example/macos/Runner.xcworkspace/contents.xcworkspacedata b/mih_ui/android/build/macos/SourcePackages/firebase_auth-6.5.4/example/macos/Runner.xcworkspace/contents.xcworkspacedata new file mode 100644 index 00000000..21a3cc14 --- /dev/null +++ b/mih_ui/android/build/macos/SourcePackages/firebase_auth-6.5.4/example/macos/Runner.xcworkspace/contents.xcworkspacedata @@ -0,0 +1,10 @@ + + + + + + + diff --git a/mih_ui/android/build/macos/SourcePackages/firebase_auth-6.5.4/example/macos/Runner.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist b/mih_ui/android/build/macos/SourcePackages/firebase_auth-6.5.4/example/macos/Runner.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist new file mode 100644 index 00000000..18d98100 --- /dev/null +++ b/mih_ui/android/build/macos/SourcePackages/firebase_auth-6.5.4/example/macos/Runner.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist @@ -0,0 +1,8 @@ + + + + + IDEDidComputeMac32BitWarning + + + diff --git a/mih_ui/android/build/macos/SourcePackages/firebase_auth-6.5.4/example/macos/Runner.xcworkspace/xcshareddata/WorkspaceSettings.xcsettings b/mih_ui/android/build/macos/SourcePackages/firebase_auth-6.5.4/example/macos/Runner.xcworkspace/xcshareddata/WorkspaceSettings.xcsettings new file mode 100644 index 00000000..f9b0d7c5 --- /dev/null +++ b/mih_ui/android/build/macos/SourcePackages/firebase_auth-6.5.4/example/macos/Runner.xcworkspace/xcshareddata/WorkspaceSettings.xcsettings @@ -0,0 +1,8 @@ + + + + + PreviewsEnabled + + + diff --git a/mih_ui/android/build/macos/SourcePackages/firebase_auth-6.5.4/example/macos/Runner/AppDelegate.swift b/mih_ui/android/build/macos/SourcePackages/firebase_auth-6.5.4/example/macos/Runner/AppDelegate.swift new file mode 100644 index 00000000..b3c17614 --- /dev/null +++ b/mih_ui/android/build/macos/SourcePackages/firebase_auth-6.5.4/example/macos/Runner/AppDelegate.swift @@ -0,0 +1,13 @@ +import Cocoa +import FlutterMacOS + +@main +class AppDelegate: FlutterAppDelegate { + override func applicationShouldTerminateAfterLastWindowClosed(_ sender: NSApplication) -> Bool { + return true + } + + override func applicationSupportsSecureRestorableState(_ app: NSApplication) -> Bool { + return true + } +} diff --git a/mih_ui/android/build/macos/SourcePackages/firebase_auth-6.5.4/example/macos/Runner/Assets.xcassets/AppIcon.appiconset/Contents.json b/mih_ui/android/build/macos/SourcePackages/firebase_auth-6.5.4/example/macos/Runner/Assets.xcassets/AppIcon.appiconset/Contents.json new file mode 100644 index 00000000..a2ec33f1 --- /dev/null +++ b/mih_ui/android/build/macos/SourcePackages/firebase_auth-6.5.4/example/macos/Runner/Assets.xcassets/AppIcon.appiconset/Contents.json @@ -0,0 +1,68 @@ +{ + "images" : [ + { + "size" : "16x16", + "idiom" : "mac", + "filename" : "app_icon_16.png", + "scale" : "1x" + }, + { + "size" : "16x16", + "idiom" : "mac", + "filename" : "app_icon_32.png", + "scale" : "2x" + }, + { + "size" : "32x32", + "idiom" : "mac", + "filename" : "app_icon_32.png", + "scale" : "1x" + }, + { + "size" : "32x32", + "idiom" : "mac", + "filename" : "app_icon_64.png", + "scale" : "2x" + }, + { + "size" : "128x128", + "idiom" : "mac", + "filename" : "app_icon_128.png", + "scale" : "1x" + }, + { + "size" : "128x128", + "idiom" : "mac", + "filename" : "app_icon_256.png", + "scale" : "2x" + }, + { + "size" : "256x256", + "idiom" : "mac", + "filename" : "app_icon_256.png", + "scale" : "1x" + }, + { + "size" : "256x256", + "idiom" : "mac", + "filename" : "app_icon_512.png", + "scale" : "2x" + }, + { + "size" : "512x512", + "idiom" : "mac", + "filename" : "app_icon_512.png", + "scale" : "1x" + }, + { + "size" : "512x512", + "idiom" : "mac", + "filename" : "app_icon_1024.png", + "scale" : "2x" + } + ], + "info" : { + "version" : 1, + "author" : "xcode" + } +} diff --git a/mih_ui/android/build/macos/SourcePackages/firebase_auth-6.5.4/example/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_1024.png b/mih_ui/android/build/macos/SourcePackages/firebase_auth-6.5.4/example/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_1024.png new file mode 100644 index 0000000000000000000000000000000000000000..3c4935a7ca84f0976aca34b7f2895d65fb94d1ea GIT binary patch literal 46993 zcmZ5|3p`X?`~OCwR3s6~xD(})N~M}fiXn6%NvKp3QYhuNN0*apqmfHdR7#ShNQ99j zQi+P9nwlXbmnktZ_WnO>bl&&<{m*;O=RK!cd#$zCdM@AR`#jH%+2~+BeX7b-48x|= zZLBt9*d+MZNtpCx_&asa{+CselLUV<<&ceQ5QfRjLjQDSL-t4eq}5znmIXDtfA|D+VRV$*2jxU)JopC)!37FtD<6L^&{ia zgVf1p(e;c3|HY;%uD5<-oSFkC2JRh- z&2RTL)HBG`)j5di8ys|$z_9LSm^22*uH-%MmUJs|nHKLHxy4xTmG+)JoA`BN7#6IN zK-ylvs+~KN#4NWaH~o5Wuwd@W?H@diExdcTl0!JJq9ZOA24b|-TkkeG=Q(pJw7O;i z`@q+n|@eeW7@ z&*NP+)wOyu^5oNJ=yi4~s_+N)#M|@8nfw=2#^BpML$~dJ6yu}2JNuq!)!;Uwxic(z zM@Wa-v|U{v|GX4;P+s#=_1PD7h<%8ey$kxVsS1xt&%8M}eOF98&Rx7W<)gY(fCdmo{y*FPC{My!t`i=PS1cdV7DD=3S1J?b2<5BevW7!rWJ%6Q?D9UljULd*7SxX05PP^5AklWu^y` z-m9&Oq-XNSRjd|)hZ44DK?3>G%kFHSJ8|ZXbAcRb`gH~jk}Iwkl$@lqg!vu)ihSl= zjhBh%%Hq|`Vm>T7+SYyf4bI-MgiBq4mZlZmsKv+S>p$uAOoNxPT)R6owU%t*#aV}B z5@)X8nhtaBhH=={w;Du=-S*xvcPz26EI!gt{(hf;TllHrvku`^8wMj7-9=By>n{b= zHzQ?Wn|y=;)XM#St@o%#8idxfc`!oVz@Lv_=y(t-kUC`W)c0H2TX}Lop4121;RHE(PPHKfe_e_@DoHiPbVP%JzNudGc$|EnIv`qww1F5HwF#@l(=V zyM!JQO>Rt_PTRF1hI|u^2Uo#w*rdF*LXJky0?|fhl4-M%zN_2RP#HFhSATE3&{sos zIE_?MdIn!sUH*vjs(teJ$7^7#|M_7m`T>r>qHw>TQh?yhhc8=TJk2B;KNXw3HhnQs za(Uaz2VwP;82rTy(T3FJNKA86Y7;L(K=~BW_Q=jjRh=-k_=wh-$`nY+#au+v^C4VV z)U?X(v-_#i=3bAylP1S*pM_y*DB z2fR!imng6Dk$>dl*K@AIj<~zw_f$T!-xLO8r{OkE(l?W#W<={460Y02*K#)O4xp?W zAN+isO}!*|mN7B#jUt&!KNyFOpUxv&ybM>jmkfn8z^llBslztv!!`TBEPwu;#eR3d z@_VDa)|ByvXx1V=^Up4{;M8ji3FC7gm(C7Ty-#1gs+U<{Ouc(iV67{< zam#KwvR&s=k4W<13`}DxzJ9{TUa97N-cgWkCDc+C339)EEnC@^HQK6OvKDSCvNz(S zOFAF_6omgG!+zaPC8fBO3kH8YVBx9_AoM?->pv~@$saf(Myo|e@onD`a=;kO*Utem ze=eUH&;JB2I4}?Pm@=VnE+yb$PD~sA5+)|iH3bi|s?ExIePeoAMd(Z4Z%$mCu{t;B9(sgdG~Q}0ShAwe!l8nw0tJn zJ+m?ogrgty$3=T&6+JJa!1oS3AtQQ1gJ z3gR1<=hXU>{SB-zq!okl4c+V9N;vo4{fyGeqtgBIt%TPC1P&k!pR-GZ7O8b}9=%>3 zQrV%FQdB+CcCRKK)0}v>U25rbQk(1^9Ax|WcAo5?L(H&H@%zAoT2RH$iN6boyXpsYqME}WJZI6T%OMlkWXK>R`^7AHG&31 z&MIU}igQ7$;)7AEm#dXA+!I&6ymb7n6D;F7c$tO3Ql(`ht z1sFrzIk_q5#=!#D(e~#SdWz5K;tPF*R883Yu>*@jTeOGUjQekw zM+7HlfP{y8p}jA9bLfyKC_Ti8k#;AVp@RML^9MQp-E+Ns-Y zKA!aAZV-sfm<23fy#@TZZlQVQxH%R7rD}00LxHPUF!Yg3%OX ziDe4m<4fp{7ivBS?*AlJz$~vw5m)Ei8`|+~xOSqJ$waA0+Yys$z$9iN9TIXu8 zaYacjd09uRAsU|)g|03w`F|b1Xg#K~*Mp2X^K^)r3P^juoc}-me&YhkW3#G|H<~jK zoKD?lE@jOw7>4cpKkh!8qU!bF(i~Oa8a!EGy-j46eZYbKUvF=^^nq`EtWFK}gwrsB zeu<6~?mk+;+$whP)8ud8vjqh+NofU+Nu`~|pb&CN1y_idxxf6cGbT=fBZR_hl&G)GgnW$*oDrN-zz;cKs18n+dAn95w z)Y>l6!5eYpebJGw7it~Q5m}8$7@%p&KS=VtydFj4HPJ{xqUVS_Ih}c(^4nUdwG|0% zw8Fnm{IT`8MqoL(1BNtu_#7alS@3WSUUOFT@U*`V!zrPIeCbbO=pE%|g92$EU|lw; z^;^AqMVWVf-R5^OI79TzIyYf}HX%0Y)=aYH;EKo}?=R~ZM&s&F;W>u%hFUfNafb;- z8OkmkK3k||J#3`xdLuMJAhj9oPI?Cjt}cDN7hw26n7irWS0hsy`fs&Y?Y&(QF*Nu! z!p`NggHXaBU6$P42LkqnKsPG@363DHYGXg{!|z6VMAQt??>FK1B4x4{j;iY8A+7o% z*!0qt&w+w#Ob@pQp;q)u0;v^9FlY=AK>2!qku)!%TO<^lNBr!6R8X)iXgXi^1p`T8 z6sU@Y_Fsp6E89E1*jz~Tm2kF=mjYz_q99r^v0h-l7SP6azzL%woM6!7>IFWyizrNwAqoia3nN0q343q zFztMPh0)?ugQg5Izbk{5$EGcMzt*|=S8ZFK%O&^YV@V;ZRL>f!iG?s5z{(*Xq20c^ z(hkk~PljBo%U`$q>mz!ir7chKlE-oHA2&0i@hn4O5scsI&nIWsM>sYg;Ph5IO~VpT z%c-3_{^N>4kECzk?2~Z@V|jWio&a&no;boiNxqXOpS;ph)gEDFJ6E=zPJ$>y5w`U0 z;h9_6ncIEY?#j1+IDUuixRg&(hw+QSSEmFi%_$ua$^K%(*jUynGU@FlvsyThxqMRw z7_ALpqTj~jOSu2_(@wc_Z?>X&(5jezB6w-@0X_34f&cZ=cA-t%#}>L7Q3QRx1$qyh zG>NF=Ts>)wA)fZIlk-kz%Xa;)SE(PLu(oEC8>9GUBgd$(^_(G6Y((Hi{fsV; zt*!IBWx_$5D4D&ezICAdtEU!WS3`YmC_?+o&1RDSfTbuOx<*v`G<2SP;5Q4TqFV&q zJL=90Lcm^TL7a9xck}XPMRnQ`l0%w-fi@bRI&c*VDj!W4nj=qaQd$2U?^9RTT{*qS_)Q9OL>s}2P3&da^Pf(*?> z#&2bt;Q7N2`P{{KH@>)Tf5&za?crRmQ%8xZi<9f=EV3={K zwMet=oA0-@`8F;u`8j-!8G~0TiH5yKemY+HU@Zw3``1nT>D ziK465-m?Nm^~@G@RW2xH&*C#PrvCWU)#M4jQ`I*>_^BZB_c!z5Wn9W&eCBE(oc1pw zmMr)iu74Xl5>pf&D7Ml>%uhpFGJGyj6Mx=t#`}Mt3tDZQDn~K`gp0d)P>>4{FGiP$sPK*ExVs!1)aGgAX z6eA;-9@@Muti3xYv$8U{?*NxlHxs?)(6%!Iw&&l79K86h+Z8;)m9+(zzX?cS zH*~)yk)X^H1?AfL!xctY-8T0G0Vh~kcP=8%Wg*zZxm*;eb)TEh&lGuNkqJib_}i;l z*35qQ@}I#v;EwCGM2phE1{=^T4gT63m`;UEf5x2Get-WSWmt6%T6NJM`|tk-~4<#HHwCXuduB4+vW!BywlH8murH@|32CNxx7} zAoF?Gu02vpSl|q1IFO0tNEvKwyH5V^3ZtEO(su1sIYOr{t@Tr-Ot@&N*enq;Je38} zOY+C1bZ?P~1=Qb%oStI-HcO#|WHrpgIDR0GY|t)QhhTg*pMA|%C~>;R4t_~H1J3!i zyvQeDi&|930wZlA$`Wa9)m(cB!lPKD>+Ag$5v-}9%87`|7mxoNbq7r^U!%%ctxiNS zM6pV6?m~jCQEKtF3vLnpag``|bx+eJ8h=(8b;R+8rzueQvXgFhAW*9y$!DgSJgJj% zWIm~}9(R6LdlXEg{Y3g_i7dP^98=-3qa z$*j&xC_$5btF!80{D&2*mp(`rNLAM$JhkB@3al3s=1k^Ud6HHontlcZw&y?`uPT#a za8$RD%e8!ph8Ow7kqI@_vd7lgRhkMvpzp@4XJ`9dA@+Xk1wYf`0Dk!hIrBxhnRR(_ z%jd(~x^oqA>r>`~!TEyhSyrwNA(i}={W+feUD^8XtX^7^Z#c7att{ot#q6B;;t~oq zct7WAa?UK0rj0yhRuY$7RPVoO29JV$o1Z|sJzG5<%;7pCu%L-deUon-X_wAtzY@_d z6S}&5xXBtsf8TZ13chR&vOMYs0F1?SJcvPn>SFe#+P3r=6=VIqcCU7<6-vxR*BZUm zO^DkE{(r8!e56)2U;+8jH4tuD2c(ptk0R{@wWK?%Wz?fJckr9vpIU27^UN*Q$}VyHWx)reWgmEls}t+2#Zm z_I5?+htcQl)}OTqF<`wht89>W*2f6e)-ewk^XU5!sW2A2VtaI=lggR&I z;Rw{xd)WMqw`VUPbhrx!!1Eg_*O0Si6t@ny)~X^Gu8wZZDockr)5)6tm+<=z+rYu? zCof+;!nq6r9MAfh zp4|^2w^-3vFK~{JFX|F5BIWecBJkkEuE%iP8AZ z^&e|C+VEH&i(4Y|oWPCa#C3T$129o5xaJa=y8f(!k&q+x=M|rq{?Zw_n?1X-bt&bP zD{*>Io`F4(i+5eE2oEo6iF}jNAZ52VN&Cp>LD{MyB=mCeiwP+v#gRvr%W)}?JBTMY z_hc2r8*SksC%(pp$KGmWSa|fx;r^9c;~Q(Jqw1%;$#azZf}#Fca9NZOh{*YxV9(1ivVA^2Wz>!A&Xvmm-~{y8n!^Jdl8c>`J#=2~!P{ zC1g_5Ye3={{fB`R%Q|%9<1p1;XmPo5lH5PHvX$bCIYzQhGqj7hZ?@P4M0^mkejD|H zVzARm7LRy|8`jSG^GpxRIs=aD>Y{Cb>^IwGEKCMd5LAoI;b{Q<-G}x*e>86R8dNAV z<@jb1q%@QQanW1S72kOQ$9_E#O?o}l{mHd=%Dl{WQcPio$baXZN!j{2m)TH1hfAp{ zM`EQ=4J`fMj4c&T+xKT!I0CfT^UpcgJK22vC962ulgV7FrUrII5!rx1;{@FMg(dIf zAC}stNqooiVol%%TegMuWnOkWKKA}hg6c)ssp~EnTUVUI98;a}_8UeTgT|<%G3J=n zKL;GzAhIQ_@$rDqqc1PljwpfUwiB)w!#cLAkgR_af;>}(BhnC9N zqL|q8-?jsO&Srv54TxVuJ=rfcX=C7{JNV zSmW@s0;$(#!hNuU0|YyXLs{9$_y2^fRmM&g#toh}!K8P}tlJvYyrs6yjTtHU>TB0} zNy9~t5F47ocE_+%V1(D!mKNBQc{bnrAbfPC2KO?qdnCv8DJzEBeDbW}gd!g2pyRyK`H6TVU^~K# z488@^*&{foHKthLu?AF6l-wEE&g1CTKV|hN7nP+KJnkd0sagHm&k{^SE-woW9^fYD z7y?g*jh+ELt;$OgP>Se3o#~w9qS}!%#vBvB?|I-;GM63oYrJ}HFRW6D+{54v@PN8K z2kG8`!VVc+DHl^8y#cevo4VCnTaPTzCB%*)sr&+=p{Hh#(MwaJbeuvvd!5fd67J_W za`oKxTR=mtM7P}i2qHG8=A(39l)_rHHKduDVA@^_Ueb7bq1A5#zHAi**|^H@fD`_W z#URdSG86hhQ#&S-Vf_8b`TIAmM55XhaHX7}Ci-^(ZDs*yb-WrWV&(oAQu3vMv%u$5 zc;!ADkeNBN_@47r!;%G3iFzo;?k)xTS-;1D-YeS5QXN7`p2PzGK~e6ib;8COBa5)p zfMn}dA--&A12~zr&GVk?qnBGfIEo`5yir;-Q;ZLn{Fimdrk;e!)q`sAkYh^~^>4Q@ zN5RT>s38+`V{|6@k&vZW!W0*BEqV&~34d+Ev8h)ObYL7Bd_hgbUzjdJaXP=S@Dp6X z)i013q3K4Gr5d%2YIp>218pYK!xwH;k)j?uUrT-yVKLg*L3y~=a+qd!RWGTL`z>29 z-Zb4Y{%pT%`R-iA#?T58c-i@?jf-Ckol9O>HAZPUxN%Z=<4ad9BL7n`_kH0i#E(m& zaNb039+z~ONUCLsf_a|x*&ptU?`=R*n}rm-tOdCDrS!@>>xBg)B3Sy8?x^e=U=i8< zy7H-^BPfM}$hf*d_`Qhk_V$dRYZw<)_mbC~gPPxf0$EeXhl-!(ZH3rkDnf`Nrf4$+ zh?jsRS+?Zc9Cx7Vzg?q53ffpp43po22^8i1Obih&$oBufMR;cT2bHlSZ#fDMZZr~u zXIfM5SRjBj4N1}#0Ez|lHjSPQoL&QiT4mZn=SxHJg~R`ZjP!+hJ?&~tf$N!spvKPi zfY;x~laI9X`&#i#Z}RJ`0+MO_j^3#3TQJu2r;A-maLD8xfI+2Y*iDf4LsQ$9xiu?~ z?^wHEf^qlgtjdj(u_(W5sbGx1;maVPDHvI-76u2uUywf;>()=e>0le;bO0LIvs)iy z*lJTO+7gyf^)2uS-PhS_O-+RToQmc6VT>ej^y^stNkwIxUg?E|YMAAwQ}U!dC&cXL ziXKU?zT~xbh6C};rICGbdX~;8Z%L~Jdg|`senVEJo-CiDsX47Kc`;EiXWO<9o)(`4 zGj(9@c+Me=F~y(HUehcAy!tkoM&e1y#(qqCkE(0lik_U>wg8vOhGR(=gBGFSbR`mh zn-%j3VTD4 zwA1Kqw!OSgi_v0;6?=Bk4Z{l-7Fl4`ZT535OC{73{rBwpNHMPH>((4G`sh zZhr!v{zM@4Q$5?8)Jm;v$A2v$Yp9qFG7y`9j7O-zhzC+7wr3Cb8sS$O{yOFOODdL) zV2pU{=nHne51{?^kh%a$WEro~o(rKQmM!p?#>5Pt`;!{0$2jkmVzsl|Nr^UF^IHxG z8?HmZEVMY~ec%Ow6hjfg6!9hCC4xY?V;5Ipo-myV=3TmfT^@XkKME`+=_inm4h7ki z->K~a+20?)zic^zc&7h=0)T{Aa24FU_}(O|9DMW3Bf>MW=O%~8{unFxp4}B+>>_KN zU%rKs3Va&&27&OX4-o&y2ie|sN2p-=S^V<2wa2NUQ4)?0e|hgna*1R7(#R_ys3xmG zE#(ry+q=O~&t|RX@ZMD`-)0QmE*x%SBc(Yvq60JtCQ4RL(gdA(@=}0rYo5yKz36bW zkvLOosP6I?7qH!rce(}q@cH-{oM2ThKV2RZe+{{25hkc?T>=Tky12xHr0jmfH@SZi zLHPJ@^Oo^Zo%`gZk_hrbCzS+t|=O!Bt zWi|>M8mz~sD|Z>C1ZPf_Cs&R!S5E2qK+@j*UpP>;5_|+h+y{gb=zub7#QKSUabet# zFH2H0ul;zO+uc+V=W_W@_Ig-791T7J9&=5)wrBE?JEHS_A6P~VQ)u6s1)Pu|VxP(aYJV*(e<)(42R zm3AK>dr1QLbC1RMoQ|M5k+TWBjY9q+_vY=K-tUte35m4RWl51A<4O0ptqV3)KzL7U z0gpp-I1)|zvtA8V7-e-o9H)lB_Rx6;Bu7A2yE)6)SuDqWDs}~Ojfk?DFwI% z3E1(>LbbB7I(&E@B7nlulhvY=Wa1mGXD@ijD7WF^y@L1e55h)-hzoq}eWe!fh9m3V{)x^6F8?ed1z>+4;qW6A4hYYj zZCYP=c#I8+$pAIVyiY*#%!j3ySAnH`tp|=^lh{)#JimWaP_rXK40A0WcsEUj`G1}O zG?XQ~qK4F!lqauv6-BL_Up3+-l1=kVfD;D*C)yr>o9>W=%mIyATtn_OBLK+h@p)j5jRAb;m&Ok?TZH-5Q)~#UwdYFp~rEE{judWa9E)z zE>135C-xMdHYY&AZGR)tb`K}s0CK9 z1!))p^ZaUC*e50t`sL+)@`)#kJ}?C_cCMH@k{f4wh~0`OFnGQ2nzUuuu;=r4BYRcI z){G#a6Y$S(mIc6B#YS;jFcU{0`c)Raa$nG+hV(K|2|^ZWOI566zlF0N;t~$jD<_AX zjnD?HN-G>xRmHwtL3BcJX7)Q^YGfc?cS4Nj=yYl5MB(uBD?r@VTB|mIYs=au$e)e{ zLHWd!+EN*v2*(=y%G1JzyQdY&%|?~R5NPb)`S2dw1AJW8O;L=p?yVxJs=X?U#-l1O zk6xh8yyY;OTR7aF{P=kQ>y`*EFivnw%rQioA-I67WS+~hVamG4_sI)(Jo4vHS|@F@ zqrBHbxHd_Y8+?8Gfq=Z1O^Fs5moGayCHVUHY^8)^j)Aj*RB!S2-FA?4#-`puwBW`` zJ_6OQj(FGo8DotHYRKq;;$4xDn9=4rgw}5xvxhi)?n?W5{*%4%h9Tg)zlQl&fN~Z1)gL(Dn7X!P428I zwA+U-x5!cQ57g1N=2bLqAWF z!&cbvsD)dvYoqP5vaQz%rL@kv*J>0AMzWAKn~Mxi5g2GlI7qvVZo)Z5oj=#O!M&*O z`3O3)uvrjNTeremC}nW@(m%#E-sITB>j-!yBM#(=FN`~c#@XjL3e)SjR9&%QO%tUg zzGv=SLH()`ZIt?Ayym;9VG1Muq+a+7Zo+59?SuRu_`k>@S4!yS3roMnq+SDO?`C7V#2 z8vHf4&0k;{kLT)fa==7EILSu3e|ZnxtFO;1 zGqP-;Xo(>_QKcYUhsi-X72BqH#7Zb-TsiNIF>G9xOHT3XoA*qX^10+#XCU0)UO4_%A_s_vO=uDd3_Q%D{OsvLMW9wGvuuRnF52{2vH06D~7N672!bIMt@it_D}& zwjZ7gV!RzZ86*wbEB5cnMJRbEqMM{G!K)bfJjyPH^9nGnrOI9S{~!dm4~P#&b*~)h zCMwM8mR+y5i~E5*JAopwZ>F`=ORfA&IF%O8(aS<}^H6wcY1g^=lYLPtFpyvW9F z3;FCS-TGFYPr#Y$ue>}?rTYrmWr^VbUu>!eL$cEdh1e>5_UDnZ@Mu$l*KVo_NDEu^ zBn*!qVnzYv>t|<(>nt8%CoNPhN!qGP|sANRN^#+2YSSYHa>R1mss->c0f=#g@U58@? zA4sUbrA7)&KrTddS0M6pTSRaz)wqUgsT3&8-0eG|d;ULOUztdaiD3~>!10H`rRHWY z1iNu6=UaA8LUBoaH9G*;m`Mzm6d1d+A#I8sdkl*zfvbmV0}+u` zDMv=HJJm?IOwbP;f~yn|AI_J7`~+5&bPq6Iv?ILo2kk$%vIlGsI0%nf1z9Mth8cy! zWumMn=RL1O9^~bVEFJ}QVvss?tHIwci#ldC`~&KFS~DU5K5zzneq_Q91T~%-SVU4S zJ6nVI5jeqfh~*2{AY#b(R*Ny95RQBGIp^fxDK{I9nG0uHCqc-Ib;pUUh$t0-4wX*< z=RzW~;iR3xfRnW<>5Jr5O1MP)brA3+ei@H8Hjkt7yuYIpd7c-4j%U=8vn8HD#TPJo zSe+7~Db}4U3Y^4dl1)4XuKZ67f(ZP;?TYg9te>hbAr4R_0K$oq3y5m-gb?fR$UtF9 zS~S^=aDyFSE}9W2;Okj%uoG-Um^&Qo^bB#!W?|%=6+P>``bumeA2E7ti7Aj%Fr~qm z2gbOY{WTyX$!s5_0jPGPQQ0#&zQ0Zj0=_74X8|(#FMzl`&9G_zX*j$NMf?i3M;FCU z6EUr4vnUOnZd`*)Uw#6yI!hSIXr%OF5H z5QlF8$-|yjc^Y89Qfl!Er_H$@khM6&N*VKjIZ15?&DB?);muI`r;7r0{mI03v9#31 z#4O*vNqb=1b}TjLY`&ww@u^SE{4ZiO=jOP3!|6cKUV2*@kI9Aw0ASwn-OAV~0843$1_FGl7}eF6C57dJb3grW)*jtoUd zpqXvfJSCIv4G*_@XZE?> z4Lt=jTSc*hG3`qVq!PVMR2~G-1P{%amYoIg!8Odf4~nv6wnEVrBt-R5Au=g~4=X|n zHRJGVd|$>4@y#w;g!wz>+z%x?XM^xY%iw%QoqY@`vSqg0c>n_}g^lrV))+9n$zGOP zs%d&JWT2Jjxaz`_V%XtANP$#kLLlW=OG2?!Q%#ThY#Sj}*XzMsYis2HiU2OlfeC>d z8n8j-{Npr1ri$Jv2E_QqKsbc$6vedBiugD~S`_0QjTTtX(mS}j6)6e;xdh*sp5U0aMpuN}qTP=^_Qn zh~0padPWs&aXmf6b~}{7Raglc)$~p?G89N4)&a}`izf|bA)IUmFLQ8UM$T!6siQxr z=%)pPsWYXWCNdGMS3fK6cxVuhp7>mug|>DVtxGd~O8v@NFz<+l`8^#e^KS3})bovWb^ zILp4a_9#%Y*b6m$VH8#)2NL@6a9|q!@#XOXyU-oAe)RR$Auj6?p2LEp*lD!KP{%(- z@5}`S$R)Kxf@m68b}Tr7eUTO=dh2wBjlx;PuO~gbbS2~9KK1szxbz$R|Frl8NqGn= z2RDp@$u5Obk&sxp!<;h=C=ZKPZB+jk zBxrCc_gxabNnh6Gl;RR6>Yt8c$vkv>_o@KDMFW1bM-3krWm|>RG>U`VedjCz2lAB1 zg(qb_C@Z~^cR=_BmGB@f;-Is3Z=*>wR2?r({x}qymVe?YnczkKG%k?McZ2v3OVpT* z(O$vnv}*Tle9WVK_@X@%tR^Z!3?FT_3s@jb3KBVf#)4!p~AFGgmn%1fBbZe3T53$_+UX_A!@Kz63qSLeH@8(augJDJ;RA>6rNxQYkd6t(sqK=*zv4j;O#N(%*2cdD z3FjN6`owjbF%UFbCO=haP<;Y1KozVgUy(nnnoV7{_l5OYK>DKEgy%~)Rjb0meL49X z7Fg;d!~;Wh63AcY--x{1XWn^J%DQMg*;dLKxs$;db`_0so$qO!>~yPDNd-CrdN!ea zMgHt24mD%(w>*7*z-@bNFaTJlz;N0SU4@J(zDH*@!0V00y{QfFTt>Vx7y5o2Mv9*( z1J#J27gHPEI3{!^cbKr^;T8 z{knt%bS@nrExJq1{mz2x~tc$Dm+yw=~vZD|A3q>d534za^{X9e7qF29H5yu};J)vlJkKq}< zXObu*@ioXGp!F=WVG3eUtfIA$GGgv0N?d&3C47`Zo)ms*qO}A9BAEke!nh#AfQ0d_ z&_N)E>5BsoR0rPqZb)YN}b~6Ppjyev;MMis-HkWF!az%G? z#&it84hv!%_Q>bnwch!nZKxB05M=jgiFaB^M=e-sj1xR?dPYUzZ#jua`ggyCAcWY> z-L$r#a{=;JP5X}9(ZPC&PdG~h5>_8SueX($_)Qu(;()N3*ZQH(VGnkWq^C}0r)~G3_?a10y*LsFz zokU5AKsW9DUr-ylK61shLS#4@vPcteK-Ga9xvRnPq=xSD_zC=Q_%6IuM?GpL(9aDx z|8d_;^6_D4{IQ1ndMAcFz5ZaT+Ww0wWN`xP(U#^=POs(BpKm;(H(lmYp+XCb7Kaw0 z;LT945Ev3IkhP6$lQBiMgr+vAL}{8xO&IObqJBEP4Y^x&V?iGC=1lVIbH^Z!eXxr@ zz)D7Fon`z~N|Pq>Bsue&_T9d;G+d8#@k^cq~F^I8ETsZ*cGOf*gZ4ghlAzW|aZ;WA13^B!Tlr0sWA zosgXD-%zvO-*GLU@hVV(bbQ`s@f~Ux=4}(@7O)%o5EH((gYflccBC@jbLF3IgPozv zglX2IL}kL1rtn4mu~`J(MMY83Rz6gc1}cX4RB+tZO2~;3FI# z@dU(xa5J_KvL0)oSkvwz9|!QcEA$jKR@a-4^SU3O449TrO+x$1fkBU<<=E_IHnF6> zPmZ7I2E+9A_>j6og$>Nih~b2F_^@6ef|Hm-K2(>`6ag{Vpd`g35n`yW|Jme78-cSy z2Jz7V#5=~u#0eLSh3U4uM3Smk31>xEh^-Os%&5tK6hSAX83jJi%5l!MmL4E?=FerNG#3lj^;-F1VISY!4E)__J~gY zP{o~Xo!8DW{5lsBFKL~OJiQoH>yBZ+b^};UL&UUs!Hbu7Gsf<9sLAsOPD4?-3CP{Q zIDu8jLk6(U3VQPyTP{Esf)1-trW5Mi#zfpgoc-!H>F$J#8uDRwDwOaohB(_I%SuHg zGP)11((V9rRAG>80NrW}d`=G(Kh>nzPa1M?sP;UNfGQaOMG1@_D0EMIWhIn#$u2_$ zlG-ED(PU+v<1Dd?q-O#bsA)LwrwL>q#_&75H)_X4sJK{n%SGvVsWH7@1QZqq|LM`l zDhX8m%Pe5`p1qR{^wuQ&>A+{{KWhXs<4RD< z=qU6)+btESL>kZWH8w}Q%=>NJTj=b%SKV3q%jSW>r*Qv1j$bX>}sQ%KO7Il zm?7>4%Q6Nk!2^z})Kchu%6lv-7i=rS26q7)-02q?2$yNt7Y={z<^<+wy6ja-_X6P4 zoqZ1PW#`qSqD4qH&UR57+z0-hm1lRO2-*(xN-42|%wl2i^h8I{d8lS+b=v9_>2C2> zz(-(%#s*fpe18pFi+EIHHeQvxJT*^HFj2QyP0cHJw?Kg+hC?21K&4>=jmwcu-dOqEs{%c+yaQ z2z6rB>nPdwuUR*j{BvM-)_XMd^S1U|6kOQ$rR`lHO3z~*QZ71(y(42g`csRZ1M@K7 zGeZ27hWA%v`&zQExDnc@cm9?ZO?$?0mWaO7E(Js|3_MAlXFB$^4#Zpo;x~xOEbay( zq=N;ZD9RVV7`dZNzz+p@YqH@dW*ij8g053Cbd=Mo!Ad8*L<5m1c4Kk ziuca5CyQ05z7gOMecqu!vU=y93p+$+;m=;s-(45taf_P(2%vER<8q3}actBuhfk)( zf7nccmO{8zL?N5oynmJM4T?8E))e;;+HfHZHr` zdK}~!JG}R#5Bk%M5FlTSPv}Eb9qs1r0ZH{tSk@I{KB|$|16@&`0h3m7S+)$k*3QbQ zasW2`9>hwc)dVNgx46{Io zZ}aJHHNf1?!K|P;>g7(>TefcLJk%!vM`gH8V3!b= z>YS+)1nw9U(G&;7;PV4eIl{=6DT^Vw<2Elnox;u@xF5ad*9Fo|yKgq<>*?C$jaG2j z|29>K)fI^U!v?55+kQ*d2#3}*libC4>Dl4 zIo3Jvsk?)edMnpH<|*l<*0Pf{2#KedIt>~-QiB{4+KEpSjUAYOhGDpn3H_N9$lxaP ztZwagSRY~x@81bqe^3fb;|_A7{FmMBvwHN*Xu006qKo{1i!RbN__2q!Q*A;U*g-Mz zg)-3FZ`VJdognZ~WrWW^2J$ArQAr1&jl~kWhn+osG5wAlE5W&V%GI{8iMQ!5lmV~# zeb3SKZ@?7p;?7{uviY6`Oz16t0=B70`im=`D@xJa16j2eHoCtElU*~7={YUzN41sE z#Th>DvJq-#UwEpJGKx;;wfDhShgO0cM|e!Ej){RX#~>a?)c2|7Hjhh2d=)VUVJL<^Aq|>_df4DX>b9W2$_DM zTjF#j(9?Co`yor?pK<16@{h#F&F8~1PG|qQNZPX^b!L*L&?PH#W8za0c~v6I2W($Jderl%4gufl z#s;C*7APQJP46xHqw;mUyKp3}W^hjJ-Dj>h%`^XS7WAab^C^aRu1?*vh-k2df&y9E z=0p*sn0<83UL4w30FqnZ0EvXCBIMVSY9Zf?H1%IrwQybOvn~4*NKYubcyVkBZ4F$z zkqcP*S>k6!_MiTKIdGlG+pfw>o{ni`;Z7pup#g z4tDx3Kl$)-msHd1r(YpVz7`VW=fx9{ zP}U8rJ-IP)m}~5t&0Y$~Quyjflm!-eXC?_LMGCkZtNDZf0?w<{f^zp&@U@sQxcPOZ zBbfQTFDWL_>HytC*QQG_=K7ZRbL!`q{m8IjE0cz(t`V0Ee}v!C74^!Fy~-~?@}rdn zABORRmgOLz8{r!anhFgghZc>0l7EpqWKU|tG$`VM=141@!EQ$=@Zmjc zTs`)!A&yNGY6WfKa?)h>zHn!)=Jd73@T^(m_j|Z;f?avJ{EOr~O~Q2gox6dkyY@%M zBU+#=T?P8tvGG|D5JTR}XXwjgbH(uwnW%W?9<-OQU9|6H{09v#+jmnxwaQ-V;q{v% zA8srmJX7Fn@7mr*ZQ@)haPjWVN@e3K z_`+@X$k*ocx*uF^_mTqJpwpuhBX~CSu=zPE(Sy%fYz&lzZmz3xo4~-xBBvU0Ao?;I-81*Z%8Do+*}pqg>bt^{w-`V6Sj>{Znj+ z70GS2evXinf|S#9=NNoXoS;$BTW*G0!xuTSZUY45yPE+~*&a-XC+3_YPqhd*&aQ>f z$oMUq^jjA;x#?iJKrpAqa<2<21h*_lx9a}VMib;a6c$~=PJOj6XJXJ|+rc7O7PEN5uE7!4n9nllo@BI4$VW2Nf_jqnkz%cvU4O4umV z#n6oXGWOt3tuIjmX*b!!$t~94@a@QgybLpQo3icAyU`iNbY~XNAArFAn$nFJ()d-U zFaO#nxxVF-%J{UB**uRo0*+?S>=^il)1m7v-u`PDy*ln%|3E-{3U~R=QcE&zhiG_c zDnGMgf1}3h1gWz8IV0Oc7FmEt>6W?Eva;J`(!;IIny}PvD?vztz`F6su_tUO`M%K5 z%C#=nXbX})#uE!zcq2mB;hPUVU1!`9^2K303XfOIVS{mlnMqJyt}FV=$&fgoquO+N zU6!gWoL%3N1kyrhd^3!u>?l6|cIl*t4$Z$=ihyzD7FFY~U~{RaZmfyO4+$kC7+m zo+-*f-VwpUjTi_Idyl~efx)!$GpE!h+in4G1WQkoUr<#2BtxLNn*2A>a-2BL#z%QO@w0v^{s=`*I6=ew2nUj1=mvi%^U@2#Wf& zs1@q6l8WqrqGm!)Yr|*``||#A+4#du6`mR^_#?CymIr}O!8Zm?(XY$u-RGH;?HFMGIEYVuA1& z`3RlG_y0%Mo5w@-_W$E&#>g6j5|y1)2$hg(6k<{&NsACgQQ0c8&8Tdth-{@srKE*I zAW64%AvJJ+Z-|I~8`+eWv&+k8vhdJk5%jolc%e`^%_vul0~U8t)>=bU&^ z6qXW&GDP%~1{L1-nKK>IsFgDJrh>!wr3?Vu-cmi#wn`;F`$GNc_>D|>RSuC8Vh21N z|G;J1%1YxwLZDD400Ggw+FirsoXVWYtOwg-srm}6woBb!8@OIc`P$!?kH>E55zbMB z8rdpODYfVmf>cF`1;>9N>Fl(Rov!pm=okW>I(GNJoNZ6jfIunKna-h6zXZPoZ9E2PythpyYk3HRN%xhq2c?gT$?4}Ybl42kip$QiA+ab zf-!EqBXkT1OLW>C4;|irG4sMfh;hYVSD_t6!MISn-IW)w#8kgY0cI>A`yl?j@x)hc z=wMU^=%71lcELG|Q-og8R{RC9cZ%6f7a#815zaPmyWPN*LS3co#vcvJ%G+>a3sYE`9Xc&ucfU0bB}c_3*W#V7btcG|iC>LctSZUfMOK zlIUt>NBmx6Ed}w_WQARG+9fLiRjS1;g49srN1Xi&DRd|r+zz*OPLWOu>M?V>@!i49 zPLZ3Q(99%(t|l%5=+9=t$slX0Pq(K@S`^n|MKTZL_Sj+DUZY?GU8sG=*6xu)k5V3v zd-flrufs*;j-rU9;qM zyJMlz(uBh0IkV<(HkUxJ747~|gDR6xFu?QvXn`Kr|IWY-Y!UsDCEqsE#Jp*RQpnc# z8y3RX%c2lY9D*aL!VS`xgQ^u0rvl#61yjg03CBER7-#t7Z++5h_4pw{ZZ~j0n_S_g zR=eVrlZDiH4y2}EZMq2(0#uU|XHnU!+}(H*l~J&)BUDN~&$ju@&a=s$tH5L`_wLeB z944k;)JIH^T9GEFlXiNJ6JRymqtLGZc?#Mqk2XIWMuGIt#z#*kJtnk+uS;Gp}zp$(O%LOC|U4ibw%ce-6>id$j5^y?wv zp1At~Sp7Fp_z24oIbOREU!Mji-M;a|15$#ZnBpa^h+HS&4TCU-ul0{^n1aPzkSi1i zuGcMSC@(3Ac6tdQ&TkMI|5n7(6P4(qUTCr)vt5F&iIj9_%tlb|fQ{DyVu!X(gn<3c zCN6?RwFjgCJ2EfV&6mjcfgKQ^rpUedLTsEu8z7=q;WsYb>)E}8qeLhxjhj9K**-Ti z9Z2A=gg+}6%r9HXF!Z~du|jPz&{zgWHpcE+j@p0WhyHpkA6`@q{wXl6g6rL5Z|j~G zbBS~X7QXr3Pq0$@mUH1Snk^1WJ0Fx2nTyCGkWKok$bJZV0*W?kjT|mkUpK<)_!_K^OoTjMc+CWc^~{ZP8vgm`f&=ppzKtw}cxwV^gppu}^df1|va7Q?@=(076-( z4KJVmu?l(aQwmQ*y_mke>YLW^^Rsj@diLY$uUBHL3yGMwNwb7OR3VD%%4tDW(nC984jBWCd90yY(GEdE8s(j>(uPfknLwh!i6*LX}@vvrRCG`c?EdB8uYU zqgsI4=akCeC+&iMNpVu56Fj2xZQHs6SdWssIF#Q@u@f9kab0&y*PlG+PynjHy`}GT zg%aTjRs2+7CknhTQKI%YZhFq1quSM{u24Oy2As@4g(bpbi%y1i0^TwI)%1Whpa~qE zX4MD(PgFEK@jZBPXkFd437aL6#COs$WrNT#U=er-X1FX{{v9!0AS$HR{!_u;zldwY zKko!`w2u@($c&k_3uLFE0Z*2vms?uw1A{AqZw^jwg$|D7jAY20j`s*l##=4Ne_K5) zOtu6_kziEF@vPsS7+@UwqOW6>OUwF$j{r4=nOSf-{UC(rEKidie7IUn>5`UoNJ9k) zxJXXEBQifng+Pte3mPQ76pVlZ<`jnI##F1*YFA*)ZCEncvgF-%)0dUXV*pXTT^L`n zL=?A5Vty#{R9W4K)m$`me~*_(&a88M?Eon$P-YdVG}#Gq4=hh#w=`>8f`9}}zhv;~ za?I=Gb3v$Ln?-SDTBow0J5Tt&xPlw|%`*VTyVee1Oh<-&;mA|;$ zoPl;^f7Q~}km#_#HT2|!;LEqORn%~KJaM)r#x_{PstSGOiZ!zX2c}^!ea3+HSWrwE z=6SJ!7sNDPdbVr#vnUf}hr&g@7_Yj&=sY=q(v^BwLKQm|oSB}172GpPlj?a3GqX#B zJko4zRRttIY>Fv#2b#A<_DLx=T@eUj+f}!u?p)hmN)u4(Jp(`9j58ze{&~rV?WVbP z%A=|J96mQjtD037%>=yk3lkF5EOIYwcE;uQ5J6wRfI^P3{9U$(b>BlcJF$2O;>-{+a1l4;FSlb z_LRpoy$L%S<&ATf#SE z;L?-lQlUDX_s&jz;Q1Lr@5>p_RPPReGnBNxgpD!5R#3)#thAI3ufgc^L)u%Rr+Hlb zT(pLDt%wP7<%z(utq=l%1M78jveI@T$dF#su(&>JkE(#=f4;D54l*%(-^(nfbCUQe)FV9non9F%K+KZ(4_`uOciy82CO)OolxisUd0m^cqueIRnY< z;BgA4S1&XC3uUP?U$}4o&r|0VCC7fkuMZBa|2n4asR>*5`zBaOJPWT$bNn(W_CK%L$c2AsfSlwq?A8Q6 zhK&USSV=^-4vZ^5<}pnAOb&IKseHNxv_!|B{g@d^&w%{?x;i3iSo)+vt^VnMmS!v) zM)W)05vXqzH5^hOWWw~$#&7HoIw}}DD3bCQgc=I8Rv|G5fM8O^58?--_-*>%Nwk)j zIfvfok0n05!w%tZ=-dpffezI7(+}yX5XhwYk#0@KW%PkR;%#t|P6Ze_K*N6ns%jOt zNeW(bRsv0BK7ah~9U~UBAVA_L34F+;14x6-;I|o=%>?sS3@dpRv|GKxilsa#7N#@! z!RX~>&JX&r{A^^>S~n_hPKkPR_(~~g>SuPj5Kx6VI%8BOa(Iit&xSMU8B#EY-Wr?9 zOaRPw0PEbVSW@Wk{8kkVn34;D1pV2mUXnXWp{V-M9+d}|qfb6F`!a9JQO_-wlH?zf z4Sn0F4-q-tzkaJ?1fV0+cJBF$f0g6*DL6U3y`Tr`1wzCiwY#muw7Q-Ki)uN}{MoCWP%tQ@~J4}tyr1^_bV9PScNKQHK=BZFV!`0gRe?mVxhcA4hW5?p0B<5oK+?vG^NM%B%NDOvu0FMq#)u&zt_-g&2 z7?z%~p&32OAUSQV{<=pc_j2^<;)`8$zxCEomh=rvMiliShS?ahdYI1grE-M&+qkK_ zD=5Hexi<&8qb4hgtgj81OD(tfX3EJSqy9KFcxpeBerG`apI4!#93xpEFT??vLt>kf zac28;86CpMu=BWIe$NOT~+Es!y#+$ zvm2s*c`J9Gy*ERvLSI<9<=j*O=0xUG>7rYh^R4bGsvz;j-SBO|P^OQ1>G9_akF}D; zlRmB@k3c5!s|Vz3OMZ8M*n0AMTiSt5ZpRy+R1|ckna&w`UQjklt9f&0Z~=->XImVA zLXizO2h=<|wM~w>%}3q1!E{oSq7LBPwQ~93p-peDq-W?wCm8NOKgTSz-P)|cm}S5&HBsx#C@Ba5;hzi#Yw@y-kC~)@u4}Rf?KV0$lPjv}} zcFpNy=YJfsS||9&!-JFjw=@NU96ESzU^gme0_oNy?})II`>Sy>bUCHs_(m&)vn^&isCl+`F~qu8elAO z)-ZP7`gYE2H(1)5tKalz&NJbcutAU&&JFV~$Jrai31^j>vZ|HV1f}#C1<5>F8 zS1RWIzM%b{@2dAF^$+i4p>TC8-weiLAPN+Aa#(bxXo9%Vz2NEkgF&s#_>V?YPye^_ z`` z-h3Cv^m6K%28I$e2i=cFdhZN?JTWhqJC{Q9mg0Vg|FiPEWDl&K)_;Bz_K`jH7W7QX^d$WQF*iF@#4_P*D36w9&iJr2E{w?LRFapwZIIVHGH ziTp*5>T{=;(E}z{1VL4;_H`BAXA~&zpeWX!gN9m|AfcJ{`!XVz48O^&+0Gd|w;udP zzU|DbGTS|7qZoEoDZEH9Kb0%DZvCaWDzuJ=8jZz}pqPn+I!c_+*~>m>BQqN2560*< z$6sx_y8WRqj$SugYGip+et$;iJ!SQAx=HgVSh_3e)MOFHuXD@sg>Yi_p8Sh`{lP=5 zo?AFv1h;KqR`Yj!8Pjji3lr+qae2|a1GmlxE*su%_V)K0Xu0(#2LcO!*k11w*V12$ z;f~i{kI#9PzvFLZ3pz@d558HeK2BTvk*JvS^J8L^_?q4q z);;4Z!DsV!P*M>F>FiF*{|p_nUgy;pDh?J8vwO;emgOAAcxrgDXiSDS5ag?0l*jj< z(khZ3-)>eiwPwpb6T9meeL)!2C-K@z9fF`0j|t@;^f5+dx86R3ZM{bnx9Hm1O$s)N zk$OvZR0u2`Z^QP8V%{8sEhW~_xbZMad2jtz&0+ekxmp;9`ae;_f%-ltk5E%)VT*a6 zRbMnpCLPnalu+1TafJ4M0xNV8g}U4Mjk{le6MA|0y0rk)is}M%Z9tUU22SvIAh7`w zTysd{Pztfkk=jD^*!lA+rBcqb)Fx`A5iaU2tl&XdL1D)U@pLEXdu%#YB*ol1N?4ti zHBQcU#_%UqiQ1)J^u-ovU@-7l?`YzYFvA2#tM0mEh3?CpyEh_NUuVajD16t zyg$C*5du9R=K~6mCJ`W+dFI$9WZZauO)p2H)*SKpHVsIu2CxfJvi2>; zcit#57RP7DpSwMF-VBm|4V5d=tRgX7RM9%KQ0JRo6d<)RmiIPWe2zh6tmswP`fs^) zwy};#jk|NXMqCSfwIR3QZ#W2`(%sJ>qvk=53CYoLmQt9q|2Gm$sB;rEuBqGJA1OUM zoyl4Wy-HYn0J6L=cad8o)R!Ea^;`rSMg9hYo3?Fw6B9dUq75a-MSb56n8~AAsS(JP zZ!1khPu}!GRpsj+jvl`N1tDD8m1myJCI3c-c<9U-1Vg`xJO~}5_wvPXYh^=Boo^|V z3Tp}|lH!9m4Ipa_$p;b8fjUd=zc4iO7vr)M&Xs0_m$fgY@+hB9%K~4*9$p0d)m2bO ze5JH`W0fnIKdcW!oO#^g1YceSQ4u->{>u@>tLi!fky)o&$h(=he?Fe_6?}O~iSf(F zV&(P~*5h>BW{3e1H%8*7#_%L1#>W97b0@jHtliES^w6w5oldI7QL+?I(Pl$DaN>~d5nXx z;CO1E+S?3E2PLq~)-?ygkHAO1m&hOYmj7?;2XM!$D^f0l9K4P{n}mgb{CoYH6RJ8o ztydc6dNqA)`CG?=Gd~EIbi`UM)eyzGF^+i?&TOdyW~mFH_^Gye(D}clDVFQ@V2Tvy z7rQIaq8Xx`kC;AO-_{k%VI2e6X@bIy^mupEX%{u0=KDUGu~r6lS*7GOeppy{&I&Ly zjOTz=9~jC|qWXznRbrfjg!1`cE!Hzyjzw6l{%>X)TK(UEGi9Uy3f9D6bbn0gT-s`< z8%$Msh!^8WidX7S;)n2jh_n1-QCtSyOAKcPQc(Xlf0*Q|5CSBjo(I-u!R0GJgzTkL z|6QdQRrUMbUO|q0dQ%+d^4)*Mjbm$R}RUcz(7|E0Bq-bAYY@)OsM<+2>}CV zzPBgeD~kBHE(Y+@l2orJrdtV7XXq_V8IETas%7OCYo`oi)+h&v#YN!Qpp7drXFS>6 z?r-q7px+(rIy+bo1uU#I2A5s@ASe01FgGMbouFkhbkm-9yZ8Q2@Q1vuhDQ3D3L+zA z(uz8^rc24VmE5r0Gbd;yOrXnQKAEBfa3@T7fcF$#QYv^00)VZPYehpSc@?^8we}o{ zlX0~o_I<`xSfI8xF(WXO-DX1>wJ`XN?4rw@}_RLD*${$}UaXL=oM(=SDMIxZj1Ji#jAcrH7nYG`r z#ewodj>F5Bf9j(j`a;>)=*2j_ZN}vf!~Hq`2Eyt;9UH1_(yjq1OUO(1M0lI3FZ2j-fU9)L59v&OiQ>5$;d!jg?Fo{Svf5t5FCZbb?)* zJN=Q!?2BztV$7)CWtG0MO~Lr4E5>aoHD5N4(+@~gQEbZTc4s3HrIl_G23PCng4Y3f zbLZK1A-x9x!)WwuI=UBkQ5QyE^&Nrw?@fsRKK41G9-xq=#VyO%CEo`{_eioDj%M!3x=>I zfOPFiFX{1t-|+3E@?UuK=0miGN04hW0=JnJrEyWw{Bg-jMvAA}cg<5LN1c5BQdrIZ z#+bxj9Jbu`11@IUjU|RKfL(UzRlVB4XT ze|(WaxL$KiRqkgCr3^Al(19!_Y7b=E(4Xm7LCO$y5+k;Fu6B#=OSzW`-7p{zRv-_) zPr!|km?8aF}+3hm)QG92YaI+jctX&5IrvTUGf{Y$)TK6)s9v!SMhU=HIpEC~2 z4>o14mG$El2sTA(Ct?xS!l*x7^)oo}|3+BF8QNe;bBHcqdHVmb?#cbS*NqZ%mYS~z z`KLoq7B#KULt%9a#DE%VTEo4TV03T2nr`FK5jUTA$FP0JH6F9oD*|0z1Yf2b5?H0_ zD|K|_5Zk`uu?ZN0U! z_mL>>F;mnHU=@to!Vv*s4;TQr9y)L@1BXXz^a85NSifPTL4h6I>+m_S3~FkXB{N?E zS<3ue_(wqaIS5;4e9{HB`Okl9Y}iFiju+oTqb)BY)QT?~3Oag7nGu-NB5VCOFsiRs zs@m%Ruwl^FuJ1b}g^=*_R?=SYJQ@7o>c9j>)1HgB zyN9LI9ifwu{Shlb6QO2#MWhxq~IG!U^I!6%5}(sbi>=bq8!8@s;4Iaun#kvh7NPwX34Rjbp2f!D)cF&sNIO%9~;C`cs&ZY2=d@c3PpN$YZjUT}X7rY`dlWX$yc znw(7=fzWapI=KzQnJ(6!o0K_aDk!^dZ#)pSTif+jQtQXga$bPApM z=);jZ5c*?*GoeGMnV0=RrZucRRYBjx>tx`A3OuY)#tp2w7mh}&kj)SKoAvbbf;uO! z?+RItUow0xc*6StuO4D--+qY!o}Isy}s;ts5aM5X~eJUZoLOq@dGv=a4hHJD<* z5q{dZSN{bv_(Vj#pFm7Q<$C;MwL|Qizm~QCFx~xQyJoCOZ$`sYD}}q>PwRZjb<=E< zAeMP?qVfM>xu2}Il2xT6={KBdDIstxY-`5IWXN zUiWV&Oiy5R_=2X9Y$ug9Ee=ZSCaza!>dWBMYWrq7uqp>25`btLn^@ydwz?+v?-?2V z?yVwD=rAO!JEABUU1hQ|cY+_OZ14Hb-Ef`qemxp+ZSK?Z;r!gDkJ}&ayJBx+7>#~^ zTm<>LzxR^t-P;1x3$h;-xzQgveY$^C28?jNM6@8$uJiY81sCwNi~+F=78qJZ@bIsz1CO! zgtPM~p6kaCR~-M>zpRCpQI}kUfaiZS`ez6%P6%*!$YCfF=sn}dg!593GFRw>OV2nQ ztTF6uB&}1J`r>gJuBP(z%KW{I^Uz%(^r5#$SK~%w1agl)Gg9Zy9fSK0kyLE24Z(34 zYtihZMQO^*=eY=<5R6LztHaB1AcuIrXoFuQ=7&C}L{c?Z$rto$%n=!whqoqG>#vvC z2%J5LVkU%Ta8hoM($p1WqN}wurA!d@#mQGU5Nb>~#XC84EYH)Zf&DZR!uY+-;VqS< z@q?$ggdX#auS#%%%oS^EN)?JhSR4JYpSgGRQZD<9!YvvF+zp0>C#$!x*x}l8U|Bb& zv?v*im5Bq_(5Wi40b1^nKun$XTST(a8yOAcqQZmKTgGLo)Ig6JuEh5J9NnqJXin@Gxzz-k6xXWYJ&@=JZw=$+ zFPGde%HsR`gI+y`rtiPaMYwbtyp!sVb!pX~;c3zLoPO0eaZSV+O_z z%9H@UhqNowzBTPcMfL6kC>LRaFF6KVaSv1R@%4}rtleX!EMnL`rethYrhTLj1x$tj z;)H!fKo08&T(;i|FT&rPgZ*D0d=B2dXuO_(Uaoi9+vEhs4%{AD{Fl@4^|`X=PvH(s zI7$6bWJiWndP$;&!kSCIR1l57F2?yzmZm~lA5%JKVb;1rQwj*O=^WW~`+n*+fQkK0 zydInOU1Be2`jhA!rnk1iRWR=1SOZpzFoU5{OPpc&A#j6Oc?D&>fAw=>x@H7?SN;d^ z-o&}WR;E|OR`QKItu(y4mT)%Pgqju-3uyH?Y@5>oSLO2Y(0(P!?_xOL=@5+R7rWw# z3J8%Hb@%Pzf^`=J6fEJ_aG6+e7>OUnhaO1(R1<6>f}L z?d@Wnqw9?^;2?q(b@?Wd=T6r_8a@Z4)*_@Q7A`+ zW3w?j!HW0KbhxF%D`9d2HpvIrBxM!36W3Yh5=8_0qYfnHm*yiLB?Ay|V10N%F9XYq zanaDtDk$rS+|_H_r|a${C}C7b{E)Ii20-a?Grff$E?&|gWF<#Ern2GqhCiS0~Y%knIi8zY^lE4qLaR-3M;_Rkz(s;wu z9207W1PXIe#4h4Zw}dvdV&FYcnUlD5_C4hzJ@bPSBVBLpl$&52mi+wwH;svyVIzAB zoA+NQ;Hpqh?A}^Et~xhl>YQNQwh20!muW{ zq}|Pg3jHZWnDBN?r1KhiVG$%Sm-4+=Q2MZzlNr3{#Abqb9j}KK%sHZj{Vr2y4~GIQ zA3Mz1DjQ3q(CC~OyCaZn0M2!){)S!!L~t>-wA&%01?-*H5?nzW?LJB`{r&)vLB4!K zrSm({8SeZ0w(bL9%ZZAZ*^jf=8mAjK^ZR0q9004|3%73z#`-Npqx*X^Ozbja!C1MW z-M~84#=rU1r>p{+h9JU<#K_x$eWqJ+aP%e?7KTSK&1>dlxwhQmkr69uG~0iD@y|L- zlY0vSR2|IhZoS6PpfUai_AhKo2HfdD&mhv#k51CX;T z*sU)XbDyfKjxYC$*_^(U)2-c0>GJ(zVm$CihHKlFSw&1A$mq$vsRt-!$jJe3GTaZ6 z3GcVvmwZ0D>`U+f3i*pQ>${p1UeyF~G9g~g-n{ThVOuC#9=ok`Zgz@qKCSN!1&P`N z=pdlGNwal%9;)ujwWH*#K6CQG*fJDAQiKlO2vKJHeA1lj&WQC+VU^@ea8$#~UOX$*Q!V^8L- zL0$W5(Y3=??%&j_WUq6*x>=?BfmI*d8fmDF*-!XVvxL8p7$r+}Igd_(&`|D*;Z#GE zqm{tHx&aHBpXw&~l6>7-FlyiSPJtTJblAjLU5Ho$FeN0mDguFAq?r+6^~o6|b+rfE zGVcZ&O-X~tE3liGcdI~hHSCT+&F&uH8rr&f{6pr^1y5061`fu~=^_|Idrgti5+*U7 zQOb9G?Rz$j-G0Y}x+i{HB0!4ZmKzykB<0;Rbmo2)T4|VdcwujI_otLG@@8OOKg3kw zP|0ST0D4@zT?O=(0Pikp)Rpwxw_VsmW4!^j^sFd6r5l zw}SG_HQPs>ae%Bq{sye_SaBX%|F-}&^)Wz@Xi<)YNbO?lPs7z@3c;$b^Aw@>E%mOj zW^c%IdtC(Kk@s*}9NbKxEf8SZtP+32ZTxjnrNWS7;W&D~ft{QY?oqOmxlV7JP!kW!Yj`Ur{QbbM1h=0KMaIAmWiISb7TKd4=gMeo+Tcz2>e#NihnOV%iNdx` zeiuoOK^{}D+M+p(Y7EC=&-`$B0F< zQ=zHaM;&QQR4jM$sG=N&sqOvD_Bx*drQ6c@u0()g05cwl`Xm{!S_Nuaa2KlL*rmmk z51yPE)q?Bl$sNM474Y!=zZ zc{EVGpdJ!Su{Qq%llR5O6#zK8l(ld*UVl87@|iaH@C3+*;XBxjEg&fsQrzpMo3EEG zv*Tpms7a;7!|iz8WY7={0a$0ItO-(ajXl;wX_$$yzEF5k9nc>L3wv!p{8h2)G0W?h z{v6vH=7+>$Ho^+)9hDtCd+S_yh8pzS9$)hYev-=eDu?lGIR;-fgz+dr+wcmM-^dZp z9}`&kAf$~z1ovF)>Hgxc!Xe3cju-jQRluCm;c_1=PYQygb?Oxe z!QG0L3sT_k=WpfOPL#|EPlD^t;ENCC39O?tHd<(kfx7SOcxl+E#;ff19_+{vbkZSvbS$I{#>31KZj^$n%ayX0jj}EvsgnHg16P z_A6Y)pdp>kLW<;PtR*Vs#mVb%)ao7AXw{O&hBDmD;?mc3iMH;Ac@rZZ_BQa8CQ~|0 z&d1L{in-z--lBO|pxqc%bqy^~LAGv=E*eaVU~OeuVV{d`Vv#-_W7EYdTDzVraG9H+LC_dWcgZMn~KcP)XvKWbcr5&d+=a>{*(Ha6Y1$==bR z{O-?$7H;`2dt0B%Vm?6`_?ZOjJkyu9ZJsh^WH*+es&^@KDcR%Zej%3PJ*XovgyhTbaH(!H1H_OF~=*f55Jr8A%uW zz5IoAB~1e2-tDGp9}`MnavAMy?jgPM5F%y`%$}dFLrz_* zIrO=afT8+AkK5B1s3{ZDVP$g6y$-*U*=?-fh!cNyn3q6YhNhfRxW&GLIJ2#>9bYMD7-F%{|Iw%@a=DoAAU;3k9p$`V zImKm{5HU~wq|nQFwab)_7lNckW#1z2$|oW5x7vDbBURVjw8674P?L1ogMKpHoV>;# zO%*1OwI|($UOr#hL(*M~qsn3PF%_|15uc%Hy9@D>_~N|?<%lig6yKX0a#1s$o(^Laj8bF#5fGPOFMGmMiUaxSwE}Qf#SG_f79d2Iv=TFBXzTpr$^avJ?=|arh2<+ce}&248Kw0} zhlva`wD6X~s7|37la4FnFOgIHhBiFo`lw~?lSbk{>)P(3jyVhM4O)a=GX3(sW1vIC zz0mJ>;J{!eN5#nf2>$u=3Kq>`7u9QnChi8>CjONBN-b+W_UQIuN#{N$Q<$}IOvpQP zB&5ZrY{V&D=4)voh;6<1U`PFA>V%XUW73S9D^J>cQYfzIyIV5i35WNb5K9c^|M}=* zN_C3rnjCZP1^v{;EaGK7Tp5z~B#?f5NZaAsFUOLK)mI~bJTaL8DF_eRikE{%^J?y9-n_U32EKHPCkB^ZN2*zk{bC=GM%_I z61}nkr+Plg6S0V=mY>H_KQU&)P~=y3$#$*U8FunXkb_e1O-7t@m$5re%u!_G%^?_| zRIJzg+lX$}+ba|qx)Ec6c^ip;`_QfQrD~SPa4MoyRUOtX&~^XWcO^a}KBkXK9J{ZFOA~rovYa0!7btTC*=xNQrwJ)$Eu`TT$;%V&2@y@$ISdNn ztbM7|nO+U9r;ae{{;QiNEYpe4nrFq_x3 z4Tvf^b(I@_3odwhVe!aC0X&~inrYFu# zh)+eF__8ly&nLr4KlLWl%B_ZMo=zCH2QfO^$lJ zBvU*LQ#M(5HQ}2Z9_^y~i@C#h)1C*?N3v68pY+7DD09nxowdG#_AAM5z&*|-9NcB{ z_xKUY>Ya7>TO#Bat}yM}o(~8Ck^!QHnIj8N9}c*uyIs}IEqGn`xP;q3vhW6gsqUe>`m1 z)~ad@y1=?H`1SNl?ANCs5ZD`8tG&Hi=j|R%pP(%gB8pd)Q--E?hWU@)e?>SLV4s(- z!_I^oVC0x97@I(;cnEm$ttKBnI3gXE>>`K?vAq~SK?0YSBsx{@s1ZdiKfFb|zf}ju z7@rJb3mC{U`$R`YS(Z#KyxQx_*nU`kf;}QL%bw17%5~6!mMao^-{FFmX}|ItFuR~F zAAvTF%f4XKYo>2-PJ~ro@Ly#t@Sf69CrA+rmMRpihqH7V&SXX+$Sw`HZF`I*_3Vjz z%kPMyN0J3sl>X{-h12)j&XRhAAI;Aou%%z}gI>G+32z*qpZg{m`CezFrzg#&yc<1` z%j~}PN!F5Ddq(>R{+t0v{j6v^0XwWGu@5+`-$m`_>pCzM`r}wz*8Qv=$|P0R$%tJp z>D+N4GZ|Tg>XL<6XP9_wQRGDs^1icY*5GP4>*7mGMr;V zI%kT_^_SQml6$#uRE4Ps>}?ES)_XI8m-%GN{o^itb^S7e_bM$-wo_Ws)W? zx4_6#*X;T$n2N==N0#xzb~BQU#%^NF6|~898JGDbQxjK(ex;Q}_Qn@?Y>!kkUYUeY z&VclG1#eDPU78K@^p3tAUvZi1(nFfk6AAVHWt)Wbi7dPbjA4isOY~?*1&asp!wg#Q zSpSI6*!TGn3|-%vuJE<9V_1EKkz_0%z}Mb7;E!uz)+0^k;@x+<5tzj5 z!InbRtc`YwNCbCac{plY&Y}hWp#PC{o@5UsBj#tv3f^ns^`;$MVN?>q!pW+MYeC7= zkWr1kAX(0xVQ<{qny&CO*|g1{Mk_yE>1t}_YT<5#p8P7QXf;o|s>XQ#SoA&!ddE+8 zOM&VsxsRGS(Spli?P$^pK7Ty{v86RP_6h|MU^J z`J>vn0|BG3Vf!uR0zM|GwtiTPZNb;a@@1+V5+$P4GI_&$%6m!YRGL=lz5kh?z#5f55 z76COi1`R(5p69;ThuQnJ$R3w?I?jigai2arApagd=^tT~oMUWp^u|H_@zXBjpI)Dv zEFc^_`mVu5U*;ClT?x-t9{#fto_+92GF^dotz0sFWTDwZ`s40AY@mv+Qh5c-Ts8Zp z!(v7!zPvFhUZ-xkR!IvaW`{PqN|k)L4*anbtmK+UU&K*awl?DhxRalbtmDw`$#VzK zYFaG}?$F)1j`Qx7wbn|XzMJ&g@3Ai#u5M?%CLPghk;lD^)-|21{Sr+M(suBU4}6CMTMxc_tD;X;z<1-{FeHte=kh1B9O6Hl z!v2i$d1VFC&z&58zU0`G#7^K3Cs@9LYN16O%Vz)?-iQL!G6&sg6aaX>DBZmm@lFrRJpcL{K3(;+`$9GDFDw62Mud@LZjabzVC=w$dx>TQa}U z-{dhKYTYx*C=Fio`ez@wrzx+p%Fk3i&v?6ENXMb3p^?;_&huLLueDwr zpRqHbU%i;9TmexFxCS8F1rPo-ea3!}!ew7{(($76Rdnfa`~$9{8H@f7U&0&HjZ3TZ zuBc||%FljS_e&wNZ$1ezT$*})XAfm??$_cY_?13vM^tT0EKY2ptb+v5P10}a%aTk_ zh8@_T{ns2@jTFhv`)-Vxh}u(0DiL0MUi(We_eic$;gCoqj(T_S{jDo^PahnKJUp3@ zMOk+%weP*c%K6VFXR2icY`J~-&fVMYUg6fsFI->jlA|9`+07y~$Fsz}^;w;mNk$ms zu?y)VA@QH__tvYDudhEWuDD20H&uvrf_boY{($?5{s-SDjyRxSC%%2Xs5d2dpjdk$ zU*NURD#ovwIfd^H{fXR@UuaooJtQr7$d0+(K+1UEwtG9_T?sb$ExV$e-bpf}a@YUe zuzInI59w!x;<)>Be;a7ukLW>V=8~J6nKU<0@H+SQ!Be;1Za_pw#hiuW_PMPBo8W2G z*WDtiIAN<>HQOmh)DMi{s-0H^GmV3QMf4Zu(zXT!-c;2)uv4gUwt(-}-N*|KUOo$h z+Ak^R)h8yB5UD8 zsSjHgY}KguNi?xV=tdCWqJR!~dDpFQoRJOwxrWH^vfRq4%)v;sDfIjsLXF^)uy>!i z*S8Njd7yfa`+7(|8H9j73Rh|TwFpF(8H-p;RLLIU>k<*qI%A*SL{u$%<=X@Jm1QFe zVkQ(X8P4Tohl?_tSO__^aqaI?k$CC8uNLv2mp_zD@4oDaZfEN5;3#XY!L{8B!;Dtt zb~Zge@JF|#Gsk^5$-|(OPI73po|WZh<`UxaH#Y2!&p05Ph?H)d3Bc3J4sDi$f(6K`?&D&~eHVuE@_Prkt>_&8&aq=OzoN!ANkvho;qIX(g|d#EKQbJ@;-%_iARmgSF1fEK z@B4W@5mDME7AzfL**c&2#B7xO9>rA4x$rM{N=%0=goumK1kL{TF@CSk0yvqR2oo&m z)?nyiL$9~Jt(qnEuWt9Hc_duim%|zJQYiaF*~orVNDvJB;`%ZW_2x%Uu01LeX-JP& zD&fas6d3=igAgcfeki79{5!XPHHYR#nfLYRKv^wkv~cnEbLHMwQ8%yCZI^rK!D2qT zk40Vg;e!_!3d56&umIuidN?6MTZFzHot}AdqKzDh#w0s`)cV!2A74RSH1@lDXtC38 z+UhO4A9?oZEOV{bIgGd1{2qMR&xT+}q!=I8m)W23v!W2WPC?Tf!F!e%_(m^lQZtq* zYwi}gY(KZ*Y^OWRNj$Ph#uEEBM+wtN8QFQ@^`GDOln^ioNrmtvzNNi*qS5lPHxI96#sMil*teLVaa%$msF>@5p#SjT%q8|<4ZOUB#!-kG+|eFSED z!|3c8fXaym9qH`L;pmqTWcG}WE$(h1sZ3seM>)E3ptoP<;~h~qe6XA)lGVanf&->P zjZwi;_;Dt+bYdAeD_XSQ-DgXRXqLv`3Wcgl}myA-JlzBBIh zWq4Q*9#(zjAk_H8VS_AJ`?OS*^gB-rp|~qt;v(C5ef=SErv;~zL64hW`#g!UZQcvZ zF6Ra@S@YhVSkSWVAY=Z1w)w-hfJDRwKTUH0o-OG5TlW0HDH36hIjnP=?A+8u1)Qyy5U8Gi$! zt^!vy|f=YHfQ`ZRK?D zXXn*kItRg50vr2+_hV5kjOleg#s~z(J2p#`=1Tq4#JS`MC^e4p&s7Ir=3m(K$LW#` z=ULCoWtna!so+QQ*JHb~6Ps9_&Ag>9qsUskp0pKbi`n?(u3&@QT!?}N}rXn z>1eHi6(@LicU*AR1obe+nbzTCD#VTJ`PFLRT(nc$NWrhsgRwFni*D(#?W^x=J6?|b zENSc^D}s>Y55)PzFs2d_2;yh89E0ZIgs&>6JV=pL6k9g_(`$04EoY+Zjn}}8e#n83 zJ=zB>BU<253Erdo$wE4^+@QQJFZyAj#(InFlN;!UGg96R@{Y&%OlGG;dM)^X8=Ddw@&2Vx?zui$tO z-{zgaU7&F!xs=e`Mn}r+xrdIAmkraRN_7P1?qu1|TZ%1QR(Mn?k+pq`Xys2v9Gs=a z?r@g&;UKcM#?36r9k*eVD(}9qe8?irotsn0+eHH8*4 zPX@Lusr)$J%8jarx5ssEJ?twFyu4kAbrf`96_z{6at^&UkyDzFa69RXP>PeK+dAWqE5<5P+aHa zs<<*+OO_2ObTXau%y)Nn{(p5`XIPWlvi|asjYcui;E@)Ig{YKBXi}spqC!-P5owwL z3L*+9;0C0G!xoN;4KNfDaElv>1#DMDglI&MAVoK2+c2Pr8&sl*1dYj=^>NRS`{O&%YV25@5*eoOvpD_(xdKsnqb^`T}bm;n0BN9ben1Ynyi*OOf;qLpf^ z!T{}GzkXSszN_Xqzp>}S*Im)_Y8~2|B*ybw(U=Q)5_NcMkT;)1&52YQJB)Tn%kPK! z@3;^AI){B(&UOv<{v9KKJrInkdcXV0%O1%1=7vYV*j?v(Kp~arZio$#(A@$kYB3aM zRdm4!^Je15%66($EkCIWGhi@=kNAyLJ3ydlJnCpPuxH0+OA}J)+t8d7nT->##Nz4w-L=S7ExQt=Rx}S*mpT91(>t~qe7tM%e|O)TIO^dP zfo61GNS=cJbLutqUh84?7X#bq)bv57s&D_zm{+xNv7vHjb=_}j-Lrj-Ss*pcD@ts$ z)5Dol8Z_&*1@JdAQE7SL$*!TXI|YE7q=YGkIiUeLvT0)14Q-ivs|+cqeT6DTi9eQ)h?Pu9pqmH51B* zFMd|;l2@D4*56|EhMFlDxl2i<8qq=c+AhMYS3(A28#3DZ;_Ln>RA3q#IAdJq7M#N> zTZ8t=_>lq0=W&w|bdQ^sy&m^@KR)mNi3|1<6|OL(0KLtP#I6ix$2b{-Y9GP5I7 z8AJUSCnlia5vWawX%ZLWTC2UV$cn^sfv68W!6)QO;ZjnX=7#`$ZPRG~irfl)ZUJ^D z{lUk?(*SU7XIiS^H{Lpxn%542#PgxdeG)Ociej#(uvX)z;Z3)<16Yhd z-sv?qQ5D4a)ZYoYPRep2Zvom@U)HKq*54ZEwdaEq^FZG#(CyG!=Vw(0j8CCmP~`_z z=OR^i&WkDCf2cLvWm@d?)mEgme{hA(o#xAL023LZ3(82SGRg6jJF7$kZ4! z6*FTm4y6v~CP!3$+fxg{QeFo24<3iucgI!oyjV|9Dsx}r~4X@lt^VaH$u zD?87}1Jh=?G8OYg*ts2k;X9{f*Za?yu8IUUfyuQ**wbcWT+KncjD^qQ3h&w2+S(Mj zZM~?Ot%ggTIHwkBkL-4&jI5R=B+MCOR42bKzC2M>l?1%x2Iv7amIfQ1B#wwfD`z|m z+E?G+o(tde*Ws?;Wo4p#Yy>Nnf|*b<nj@-s(rZ)-U@ z(Xe(qZ1(_dH|J3yWu|bAPINK}DwF(kZ>FKx(?ZmU^KFC6*bh$;FKGh~pH1 zozA+kgcIk9@2aAwEJ=VYizT!sxDXX$N?XDiGKaaT-OU@Ib=~4DmgEk&{2D@IvyjF* zuF@sDcuuqx_FAgx;B@@8gqjMh!kQeEKA*y4+q+^4&uc0|>M;$Xb+ z@X%eUx1m%$WSP}Qchx68NQ?dO!h`6;Quq+A1(RORsQ-;6bZ90vj#^0(7>cLR+-_;9 zCd@b~B5V>$tpjkQU#BD%9^zu7-l>U8nzt+XuX5cYDCHYaX5t~~3?lpa;)Mr>q;5XW zu(Th;fr}-GkP`K)u97(#UB|L3f;H7Cd#Pox+auV`=m?a=mSv1v)(V!E=$%gkIJZ;` zZj{Lb@bhs%bRa znZw9cD$cDFVHPtpXwY1K)wys@LS~;!qdqkR>@&RtP>?M^>xe{4N#EtZy4zZ5Ar$ZF zV=X=(!xin-58MC<+b~;jk8Q|3B3THGIA$cM8Bg)Yd6ygP#i?4VrX3OvP_k5i{Cppw z-{$XwrJ-+X$ccJ(Q{|?T@U9=-?qlsfA43%8t247KZn?`+C4e`b-e^(df*iW66=Oc2 z3w9UhohfdY@pH1MZ}vc<1osV(2CGG)Ree$E-T;8>$zw*>x-505b&4(shMGIjbAfLS zEZ3ys(`SmCWc(75)^=aKer}>67qj^nGKtCK{35I|tA}wQa!uM!suX%Gb~ylORGGc( ze^|m|N!}G0#Ph|;wSXz`SByQM>lPM#8>mdSQs`7RxkXaSAADYA24u6xWqkIXY?o%z z%TEFL+wNW^&nrvaA1_#P%&Hbzrjl!*hIft>F0@g0IVydUU4MJgS3_3Js8{*>|G2jC z4%n#cOy9b2Xf&Pw=14;0Dtf00C^Z$I-v05OqtvN9>sAC&oV1Tk;;ku7VR`sQK4oFq zQ8)yoZNuTwV$t13|GCUIC{ID_r7M5&R*zhsxbrkg;EgMtL|9ne=^}BM!dxV!KDeXkWA^MfQTkQEt8~t>JznNh%ULvn@dbQ2cyf} z|C%ns#NJU}SHU(7Pg$<&8uDK>d5GZJ&`;CcfGP(~b-#UusXevc^q!km1X6_wVMqGk z^m&ZS6#42?p4c_t1TA$_+}h1L2c<<=$k%;v+D!<@j5hs|{>d18>~~v#oq4yGyS@QP zgTX2oJbEy@eJbo-f{ZQ>-nmB-#AqWcHbMQXFi*T)0n!(HIexz=pp<(O*DMh7CMupX z)ei1ZYuIW~E={-ND*nD;okiZdm!?^|LjLZhs*FHZvWld5TDj zcvWB)`-1Me9bu`*4M=CO6ye=pMgxlgYvsh2rV#5Z$hFKw0GX30%oufb=hJ0BFIJH` z+Fii4gQ+7!)8K^yc*PVEW^#f!|BW0Q5*`IewQ5YDFh?{x1L7tlaUAX@3Y+D>6FPVf zJzOGex~H34`8eq+TL$FsHm+27RS>3$CG;>0Jj4*1ukX$za})*b^S5p}I2jbFCHLsA zzYwAyftMz`uo2c8ieQcy-p&9iP3fMk(uRw+OlBPm`KCLei6g!|Vnk*-kjs>A25MTE z5GLDMV$70AC0j-tx*0sCruvKh{fSM)3X}13U>m|KeaOb`9^}v^44!$`06-JHf@L4EKyxV)M!8cL zi5p9kF97RiAT92!e?%9CP=qX3wyv^A8q!w%07d(9f-U))uDgsr4FDVL;|%r)fw}-@ zlB$F79X^EKYF%8J7mU?3VzJoYQ0<;NczW1jH4=4kEh_)q|^9wj zIsn-SsmRx0_EJ7(6WypwptIwZ)-T<__UgUu?BXt zoIf|a!5`?&JEb$w2PZSqhA>J;GIA^rJ-Cpz8MKX~bcqZNOUzPtu|NMvEP>+cO;V*W zNQ8YPENkr!)lN+tlxB79RUD20$)+_P6Jc`+4q@%Kno{F+#1qR*zrj%T>nTSceO?a5 zyqGDa59#G6k*RXu6+#=e=e!~i1Y&15!cHmE6sLh_K%Ppv$tFE-Le3RQs-nx5LB>gy z5A))kwkxWSy73{@I{%{DY8X+2o{CLJb~R$3r=oT^P~Xo$2lKz8?Z!3QLn$5l#L2k2 zb1=?UT&c<8!&9gW1M&jI!5%dhJbD3nQXpaeNJ>=zR+EL!4iY(nMBQI+|2J+Hw-WMr z08Mt9h8(PGbY?zKtk=cqw(yW}1A#htn* z8&}5Y>$uc>Lv!bSuWQ5UB&ct7*jiZAFpxz|%xO&5kg zzlf?6xy7H3G^*wvP5scW*Wf(<&eP!YIUf%&HT?K)RWmKg$G^=mSoi~;&9dU%{o}WV z#BX;9+q)fpVU`>Vdo~AtYK)`7z*H;dc-e|q6Qt;3J0APUL!~g&Q literal 0 HcmV?d00001 diff --git a/mih_ui/android/build/macos/SourcePackages/firebase_auth-6.5.4/example/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_128.png b/mih_ui/android/build/macos/SourcePackages/firebase_auth-6.5.4/example/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_128.png new file mode 100644 index 0000000000000000000000000000000000000000..ed4cc16421680a50164ba74381b4b35ceaa0ccfc GIT binary patch literal 3276 zcmZ`*X*|?x8~)E?#xi3t91%vcMKbnsIy2_j%QE2ziLq8HEtbf{7%?Q-9a%z_Y^9`> zEHh*&vUG%uWkg7pKTS-`$veH@-Vg8ZdG7oAJ@<88AMX3Z{d}TU-4*=KI1-hF6u>DKF2moPt09c{` zfN3rO$X+gJI&oA$AbgKoTL8PiPI1eFOhHBDvW+$&oPl1s$+O5y3$30Jx9nC_?fg%8Om)@;^P;Ee~8ibejUNlSR{FL7-+ zCzU}3UT98m{kYI^@`mgCOJ))+D#erb#$UWt&((j-5*t1id2Zak{`aS^W*K5^gM02# zUAhZn-JAUK>i+SNuFbWWd*7n1^!}>7qZ1CqCl*T+WoAy&z9pm~0AUt1cCV24f z3M@&G~UKrjVHa zjcE@a`2;M>eV&ocly&W3h{`Kt`1Fpp?_h~9!Uj5>0eXw@$opV(@!pixIux}s5pvEqF5$OEMG0;c zAfMxC(-;nx_`}8!F?OqK19MeaswOomKeifCG-!9PiHSU$yamJhcjXiq)-}9`M<&Au|H!nKY(0`^x16f205i2i;E%(4!?0lLq0sH_%)Wzij)B{HZxYWRl3DLaN5`)L zx=x=|^RA?d*TRCwF%`zN6wn_1C4n;lZG(9kT;2Uhl&2jQYtC1TbwQlP^BZHY!MoHm zjQ9)uu_K)ObgvvPb}!SIXFCtN!-%sBQe{6NU=&AtZJS%}eE$i}FIll!r>~b$6gt)V z7x>OFE}YetHPc-tWeu!P@qIWb@Z$bd!*!*udxwO6&gJ)q24$RSU^2Mb%-_`dR2`nW z)}7_4=iR`Tp$TPfd+uieo)8B}Q9#?Szmy!`gcROB@NIehK|?!3`r^1>av?}e<$Qo` zo{Qn#X4ktRy<-+f#c@vILAm;*sfS}r(3rl+{op?Hx|~DU#qsDcQDTvP*!c>h*nXU6 zR=Un;i9D!LcnC(AQ$lTUv^pgv4Z`T@vRP3{&xb^drmjvOruIBJ%3rQAFLl7d9_S64 zN-Uv?R`EzkbYIo)af7_M=X$2p`!u?nr?XqQ_*F-@@(V zFbNeVEzbr;i2fefJ@Gir3-s`syC93he_krL1eb;r(}0yUkuEK34aYvC@(yGi`*oq? zw5g_abg=`5Fdh1Z+clSv*N*Jifmh&3Ghm0A=^s4be*z5N!i^FzLiShgkrkwsHfMjf z*7&-G@W>p6En#dk<^s@G?$7gi_l)y7k`ZY=?ThvvVKL~kM{ehG7-q6=#%Q8F&VsB* zeW^I zUq+tV(~D&Ii_=gn-2QbF3;Fx#%ajjgO05lfF8#kIllzHc=P}a3$S_XsuZI0?0__%O zjiL!@(C0$Nr+r$>bHk(_oc!BUz;)>Xm!s*C!32m1W<*z$^&xRwa+AaAG= z9t4X~7UJht1-z88yEKjJ68HSze5|nKKF9(Chw`{OoG{eG0mo`^93gaJmAP_i_jF8a z({|&fX70PXVE(#wb11j&g4f{_n>)wUYIY#vo>Rit(J=`A-NYYowTnl(N6&9XKIV(G z1aD!>hY!RCd^Sy#GL^0IgYF~)b-lczn+X}+eaa)%FFw41P#f8n2fm9=-4j7}ULi@Z zm=H8~9;)ShkOUAitb!1fvv%;2Q+o)<;_YA1O=??ie>JmIiTy6g+1B-1#A(NAr$JNL znVhfBc8=aoz&yqgrN|{VlpAniZVM?>0%bwB6>}S1n_OURps$}g1t%)YmCA6+5)W#B z=G^KX>C7x|X|$~;K;cc2x8RGO2{{zmjPFrfkr6AVEeW2$J9*~H-4~G&}~b+Pb}JJdODU|$n1<7GPa_>l>;{NmA^y_eXTiv z)T61teOA9Q$_5GEA_ox`1gjz>3lT2b?YY_0UJayin z64qq|Nb7^UhikaEz3M8BKhNDhLIf};)NMeS8(8?3U$ThSMIh0HG;;CW$lAp0db@s0 zu&jbmCCLGE*NktXVfP3NB;MQ>p?;*$-|htv>R`#4>OG<$_n)YvUN7bwzbWEsxAGF~ zn0Vfs?Dn4}Vd|Cf5T-#a52Knf0f*#2D4Lq>-Su4g`$q={+5L$Ta|N8yfZ}rgQm;&b z0A4?$Hg5UkzI)29=>XSzdH4wH8B@_KE{mSc>e3{yGbeiBY_+?^t_a#2^*x_AmN&J$ zf9@<5N15~ty+uwrz0g5k$sL9*mKQazK2h19UW~#H_X83ap-GAGf#8Q5b8n@B8N2HvTiZu&Mg+xhthyG3#0uIny33r?t&kzBuyI$igd`%RIcO8{s$$R3+Z zt{ENUO)pqm_&<(vPf*$q1FvC}W&G)HQOJd%x4PbxogX2a4eW-%KqA5+x#x`g)fN&@ zLjG8|!rCj3y0%N)NkbJVJgDu5tOdMWS|y|Tsb)Z04-oAVZ%Mb311P}}SG#!q_ffMV z@*L#25zW6Ho?-x~8pKw4u9X)qFI7TRC)LlEL6oQ9#!*0k{=p?Vf_^?4YR(M z`uD+8&I-M*`sz5af#gd$8rr|oRMVgeI~soPKB{Q{FwV-FW)>BlS?inI8girWs=mo5b18{#~CJz!miCgQYU>KtCPt()StN;x)c2P3bMVB$o(QUh z$cRQlo_?#k`7A{Tw z!~_YKSd(%1dBM+KE!5I2)ZZsGz|`+*fB*n}yxtKVyx14Ba#1H&(%P{RubhEf9thF1v;3|2E37{m+a>GbI`Jdw*pGcA%L+*Q#&*YQOJ$_%U#(BDn``;rKxi&&)LfRxIZ*98z8UWRslDo@Xu)QVh}rB>bKwe@Bjzwg%m$hd zG)gFMgHZlPxGcm3paLLb44yHI|Ag0wdp!_yD5R<|B29Ui~27`?vfy#ktk_KyHWMDA42{J=Uq-o}i z*%kZ@45mQ-Rw?0?K+z{&5KFc}xc5Q%1PFAbL_xCmpj?JNAm>L6SjrCMpiK}5LG0ZE zO>_%)r1c48n{Iv*t(u1=&kH zeO=ifbFy+6aSK)V_5t;NKhE#$Iz=+Oii|KDJ}W>g}0%`Svgra*tnS6TRU4iTH*e=dj~I` zym|EM*}I1?pT2#3`oZ(|3I-Y$DkeHMN=8~%YSR?;>=X?(Emci*ZIz9+t<|S1>hE8$ zVa1LmTh{DZv}x6@Wz!a}+qZDz%AHHMuHCzM^XlEpr!QPzf9QzkS_0!&1MPx*ICxe}RFdTH+c}l9E`G zYL#4+3Zxi}3=A!G4S>ir#L(2r)WFKnP}jiR%D`ZOPH`@ZhTQy=%(P0}8ZH)|z6jL7 N;OXk;vd$@?2>?>Ex^Vyi literal 0 HcmV?d00001 diff --git a/mih_ui/android/build/macos/SourcePackages/firebase_auth-6.5.4/example/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_256.png b/mih_ui/android/build/macos/SourcePackages/firebase_auth-6.5.4/example/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_256.png new file mode 100644 index 0000000000000000000000000000000000000000..bcbf36df2f2aaaa0a63c7dabc94e600184229d0d GIT binary patch literal 5933 zcmZ{Idpwix|Np(&m_yAF>K&UIn{t*2ZOdsShYs(MibU!|=pZCJq~7E>B$QJr)hC5| zmk?V?ES039lQ~RC!kjkl-TU4?|NZ{>J$CPLUH9vHy`Hbhhnc~SD_vpzBp6Xw4`$%jfmPw(;etLCccvfU-s)1A zLl8-RiSx!#?Kwzd0E&>h;Fc z^;S84cUH7gMe#2}MHYcDXgbkI+Qh^X4BV~6y<@s`gMSNX!4@g8?ojjj5hZj5X4g9D zavr_NoeZ=4vim%!Y`GnF-?2_Gb)g$xAo>#zCOLB-jPww8a%c|r&DC=eVdE;y+HwH@ zy`JK(oq+Yw^-hLvWO4B8orWwLiKT!hX!?xw`kz%INd5f)>k1PZ`ZfM&&Ngw)HiXA| ze=+%KkiLe1hd>h!ZO2O$45alH0O|E+>G2oCiJ|3y2c$;XedBozx93BprOr$#d{W5sb*hQQ~M@+v_m!8s?9+{Q0adM?ip3qQ*P5$R~dFvP+5KOH_^A+l-qu5flE*KLJp!rtjqTVqJsmpc1 zo>T>*ja-V&ma7)K?CE9RTsKQKk7lhx$L`9d6-Gq`_zKDa6*>csToQ{&0rWf$mD7x~S3{oA z1wUZl&^{qbX>y*T71~3NWd1Wfgjg)<~BnK96Ro#om&~8mU{}D!Fu# zTrKKSM8gY^*47b2Vr|ZZe&m9Y`n+Y8lHvtlBbIjNl3pGxU{!#Crl5RPIO~!L5Y({ym~8%Ox-9g>IW8 zSz2G6D#F|L^lcotrZx4cFdfw6f){tqITj6>HSW&ijlgTJTGbc7Q#=)*Be0-s0$fCk z^YaG;7Q1dfJq#p|EJ~YYmqjs`M0jPl=E`Id{+h%Lo*|8xp6K7yfgjqiH7{61$4x~A zNnH+65?QCtL;_w(|mDNJXybin=rOy-i7A@lXEu z&jY(5jhjlP{TsjMe$*b^2kp8LeAXu~*q&5;|3v|4w4Ij_4c{4GG8={;=K#lh{#C8v z&t9d7bf{@9aUaE94V~4wtQ|LMT*Ruuu0Ndjj*vh2pWW@|KeeXi(vt!YXi~I6?r5PG z$_{M*wrccE6x42nPaJUO#tBu$l#MInrZhej_Tqki{;BT0VZeb$Ba%;>L!##cvieb2 zwn(_+o!zhMk@l~$$}hivyebloEnNQmOy6biopy`GL?=hN&2)hsA0@fj=A^uEv~TFE z<|ZJIWplBEmufYI)<>IXMv(c+I^y6qBthESbAnk?0N(PI>4{ASayV1ErZ&dsM4Z@E-)F&V0>tIF+Oubl zin^4Qx@`Un4kRiPq+LX5{4*+twI#F~PE7g{FpJ`{)K()FH+VG^>)C-VgK>S=PH!m^ zE$+Cfz!Ja`s^Vo(fd&+U{W|K$e(|{YG;^9{D|UdadmUW;j;&V!rU)W_@kqQj*Frp~ z7=kRxk)d1$$38B03-E_|v=<*~p3>)2w*eXo(vk%HCXeT5lf_Z+D}(Uju=(WdZ4xa( zg>98lC^Z_`s-=ra9ZC^lAF?rIvQZpAMz8-#EgX;`lc6*53ckpxG}(pJp~0XBd9?RP zq!J-f`h0dC*nWxKUh~8YqN{SjiJ6vLBkMRo?;|eA(I!akhGm^}JXoL_sHYkGEQWWf zTR_u*Ga~Y!hUuqb`h|`DS-T)yCiF#s<KR}hC~F%m)?xjzj6w#Za%~XsXFS@P0E3t*qs)tR43%!OUxs(|FTR4Sjz(N zppN>{Ip2l3esk9rtB#+To92s~*WGK`G+ECt6D>Bvm|0`>Img`jUr$r@##&!1Ud{r| zgC@cPkNL_na`74%fIk)NaP-0UGq`|9gB}oHRoRU7U>Uqe!U61fY7*Nj(JiFa-B7Av z;VNDv7Xx&CTwh(C2ZT{ot`!E~1i1kK;VtIh?;a1iLWifv8121n6X!{C%kw|h-Z8_U z9Y8M38M2QG^=h+dW*$CJFmuVcrvD*0hbFOD=~wU?C5VqNiIgAs#4axofE*WFYd|K;Et18?xaI|v-0hN#D#7j z5I{XH)+v0)ZYF=-qloGQ>!)q_2S(Lg3<=UsLn%O)V-mhI-nc_cJZu(QWRY)*1il%n zOR5Kdi)zL-5w~lOixilSSF9YQ29*H+Br2*T2lJ?aSLKBwv7}*ZfICEb$t>z&A+O3C z^@_rpf0S7MO<3?73G5{LWrDWfhy-c7%M}E>0!Q(Iu71MYB(|gk$2`jH?!>ND0?xZu z1V|&*VsEG9U zm)!4#oTcgOO6Hqt3^vcHx>n}%pyf|NSNyTZX*f+TODT`F%IyvCpY?BGELP#s<|D{U z9lUTj%P6>^0Y$fvIdSj5*=&VVMy&nms=!=2y<5DP8x;Z13#YXf7}G)sc$_TQQ=4BD zQ1Le^y+BwHl7T6)`Q&9H&A2fJ@IPa;On5n!VNqWUiA*XXOnvoSjEIKW<$V~1?#zts>enlSTQaG2A|Ck4WkZWQoeOu(te znV;souKbA2W=)YWldqW@fV^$6EuB`lFmXYm%WqI}X?I1I7(mQ8U-pm+Ya* z|7o6wac&1>GuQfIvzU7YHIz_|V;J*CMLJolXMx^9CI;I+{Nph?sf2pX@%OKT;N@Uz9Y zzuNq11Ccdwtr(TDLx}N!>?weLLkv~i!xfI0HGWff*!12E*?7QzzZT%TX{5b7{8^*A z3ut^C4uxSDf=~t4wZ%L%gO_WS7SR4Ok7hJ;tvZ9QBfVE%2)6hE>xu9y*2%X5y%g$8 z*8&(XxwN?dO?2b4VSa@On~5A?zZZ{^s3rXm54Cfi-%4hBFSk|zY9u(3d1ButJuZ1@ zfOHtpSt)uJnL`zg9bBvUkjbPO0xNr{^{h0~$I$XQzel_OIEkgT5L!dW1uSnKsEMVp z9t^dfkxq=BneR9`%b#nWSdj)u1G=Ehv0$L@xe_eG$Ac%f7 zy`*X(p0r3FdCTa1AX^BtmPJNR4%S1nyu-AM-8)~t-KII9GEJU)W^ng7C@3%&3lj$2 z4niLa8)fJ2g>%`;;!re+Vh{3V^}9osx@pH8>b0#d8p`Dgm{I?y@dUJ4QcSB<+FAuT)O9gMlwrERIy z6)DFLaEhJkQ7S4^Qr!JA6*SYni$THFtE)0@%!vAw%X7y~!#k0?-|&6VIpFY9>5GhK zr;nM-Z`Omh>1>7;&?VC5JQoKi<`!BU_&GLzR%92V$kMohNpMDB=&NzMB&w-^SF~_# zNsTca>J{Y555+z|IT75yW;wi5A1Z zyzv|4l|xZ-Oy8r8_c8X)h%|a8#(oWcgS5P6gtuCA_vA!t=)IFTL{nnh8iW!B$i=Kd zj1ILrL;ht_4aRKF(l1%^dUyVxgK!2QsL)-{x$`q5wWjjN6B!Cj)jB=bii;9&Ee-;< zJfVk(8EOrbM&5mUciP49{Z43|TLoE#j(nQN_MaKt16dp#T6jF7z?^5*KwoT-Y`rs$ z?}8)#5Dg-Rx!PTa2R5; zx0zhW{BOpx_wKPlTu;4ev-0dUwp;g3qqIi|UMC@A?zEb3RXY`z_}gbwju zzlNht0WR%g@R5CVvg#+fb)o!I*Zpe?{_+oGq*wOmCWQ=(Ra-Q9mx#6SsqWAp*-Jzb zKvuPthpH(Fn_k>2XPu!=+C{vZsF8<9p!T}U+ICbNtO}IAqxa57*L&T>M6I0ogt&l> z^3k#b#S1--$byAaU&sZL$6(6mrf)OqZXpUPbVW%T|4T}20q9SQ&;3?oRz6rSDP4`b z(}J^?+mzbp>MQDD{ziSS0K(2^V4_anz9JV|Y_5{kF3spgW%EO6JpJ(rnnIN%;xkKf zn~;I&OGHKII3ZQ&?sHlEy)jqCyfeusjPMo7sLVr~??NAknqCbuDmo+7tp8vrKykMb z(y`R)pVp}ZgTErmi+z`UyQU*G5stQRsx*J^XW}LHi_af?(bJ8DPho0b)^PT|(`_A$ zFCYCCF={BknK&KYTAVaHE{lqJs4g6B@O&^5oTPLkmqAB#T#m!l9?wz!C}#a6w)Z~Z z6jx{dsXhI(|D)x%Yu49%ioD-~4}+hCA8Q;w_A$79%n+X84jbf?Nh?kRNRzyAi{_oV zU)LqH-yRdPxp;>vBAWqH4E z(WL)}-rb<_R^B~fI%ddj?Qxhp^5_~)6-aB`D~Nd$S`LY_O&&Fme>Id)+iI>%9V-68 z3crl=15^%0qA~}ksw@^dpZ`p;m=ury;-OV63*;zQyRs4?1?8lbUL!bR+C~2Zz1O+E@6ZQW!wvv z|NLqSP0^*J2Twq@yws%~V0^h05B8BMNHv_ZZT+=d%T#i{faiqN+ut5Bc`uQPM zgO+b1uj;)i!N94RJ>5RjTNXN{gAZel|L8S4r!NT{7)_=|`}D~ElU#2er}8~UE$Q>g zZryBhOd|J-U72{1q;Lb!^3mf+H$x6(hJHn$ZJRqCp^In_PD+>6KWnCnCXA35(}g!X z;3YI1luR&*1IvESL~*aF8(?4deU`9!cxB{8IO?PpZ{O5&uY<0DIERh2wEoAP@bayv z#$WTjR*$bN8^~AGZu+85uHo&AulFjmh*pupai?o?+>rZ7@@Xk4muI}ZqH`n&<@_Vn zvT!GF-_Ngd$B7kLge~&3qC;TE=tEid(nQB*qzXI0m46ma*2d(Sd*M%@Zc{kCFcs;1 zky%U)Pyg3wm_g12J`lS4n+Sg=L)-Y`bU705E5wk&zVEZw`eM#~AHHW96@D>bz#7?- zV`xlac^e`Zh_O+B5-kO=$04{<cKUG?R&#bnF}-?4(Jq+?Ph!9g zx@s~F)Uwub>Ratv&v85!6}3{n$bYb+p!w(l8Na6cSyEx#{r7>^YvIj8L?c*{mcB^x zqnv*lu-B1ORFtrmhfe}$I8~h*3!Ys%FNQv!P2tA^wjbH f$KZHO*s&vt|9^w-6P?|#0pRK8NSwWJ?9znhg z3{`3j3=J&|48MRv4KElNN(~qoUL`OvSj}Ky5HFasE6@fg!ItFh?!xdN1Q+aGJ{c&& zS>O>_%)r1c48n{Iv*t(u1=&kHeO=ifbFy+6aSK)V_AxLppYn8Z42d|rc6w}vOsL55 z`t&mC&y2@JTEyg!eDiFX^k#CC!jq%>erB=yHqUP0XcDOTw6ko}L zX;EmMrq(fKk*eygEuA616;0)>@A{TK|55PV@70 z$OfzS*(VJxQev3J?yY?O=ul(v`fp}?u9z`JK3ugibK>)DyCwImZOF4d{xK%%Ks1*} zv$oa)9anR%lXIBUqYnhLmT>VOzHfNP?ZwJNZ!5$s9M08RynIvaXw>@G^T9@r9^KH1 zVy??F&uuk)bH9Y4pQY!hP58i_H6 znl-NcuCpLV6ZWU;4C zu@9exF&OZi`Bovq_m%T+WhU2kvkz@^_LpycBvqm3bMpLw8X-Or5sL>0AKE1$(k_L=_Zc=CUq#=x1-QZf)G7nHu@fmsQ1eN_N3+nTEz`4HI4Z6uVlE zJH+X&det8JU?tO?upcM4Z=cV!JV;yF>FfL5Q$M|W_2Z!P`S=}Wzp|_1^#d%e?_H`> zV@%vA$+bFVqhw9`U;TfP|5|PD{||OiYdor8P*i??|NJcb%kzT_73*7WE?Ua5hAnR2 z=7WE=PhTlJ#ZeRznjTUb;`E(wkMZrj4e|Hilz-mK>9cZHQY**5TUPw~u}k;u73KI}xAx!0m-)GVia|x^d3p~s_9gh83jA&Ra<8rM%`>U3x69t&NzbwWY}7Ar?)FK#IZ0z|d0H0EkRO w3{9;}4Xg|ebq&m|3=9_N6z8I7$jwj5OsmAL;bP(Gi$Dzwp00i_>zopr02+f8CIA2c literal 0 HcmV?d00001 diff --git a/mih_ui/android/build/macos/SourcePackages/firebase_auth-6.5.4/example/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_512.png b/mih_ui/android/build/macos/SourcePackages/firebase_auth-6.5.4/example/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_512.png new file mode 100644 index 0000000000000000000000000000000000000000..e71a726136a47ed24125c7efc79d68a4a01961b4 GIT binary patch literal 14800 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 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/mih_ui/android/build/macos/SourcePackages/firebase_auth-6.5.4/example/macos/Runner/Configs/AppInfo.xcconfig b/mih_ui/android/build/macos/SourcePackages/firebase_auth-6.5.4/example/macos/Runner/Configs/AppInfo.xcconfig new file mode 100644 index 00000000..f653d202 --- /dev/null +++ b/mih_ui/android/build/macos/SourcePackages/firebase_auth-6.5.4/example/macos/Runner/Configs/AppInfo.xcconfig @@ -0,0 +1,14 @@ +// Application-level settings for the Runner target. +// +// This may be replaced with something auto-generated from metadata (e.g., pubspec.yaml) in the +// future. If not, the values below would default to using the project name when this becomes a +// 'flutter create' template. + +// The application's name. By default this is also the title of the Flutter window. +PRODUCT_NAME = example + +// The application's bundle identifier +PRODUCT_BUNDLE_IDENTIFIER = io.flutter.plugins.example + +// The copyright displayed in application information +PRODUCT_COPYRIGHT = Copyright © 2020 io.flutter.plugins. All rights reserved. diff --git a/mih_ui/android/build/macos/SourcePackages/firebase_auth-6.5.4/example/macos/Runner/Configs/Debug.xcconfig b/mih_ui/android/build/macos/SourcePackages/firebase_auth-6.5.4/example/macos/Runner/Configs/Debug.xcconfig new file mode 100644 index 00000000..36b0fd94 --- /dev/null +++ b/mih_ui/android/build/macos/SourcePackages/firebase_auth-6.5.4/example/macos/Runner/Configs/Debug.xcconfig @@ -0,0 +1,2 @@ +#include "../../Flutter/Flutter-Debug.xcconfig" +#include "Warnings.xcconfig" diff --git a/mih_ui/android/build/macos/SourcePackages/firebase_auth-6.5.4/example/macos/Runner/Configs/Release.xcconfig b/mih_ui/android/build/macos/SourcePackages/firebase_auth-6.5.4/example/macos/Runner/Configs/Release.xcconfig new file mode 100644 index 00000000..dff4f495 --- /dev/null +++ b/mih_ui/android/build/macos/SourcePackages/firebase_auth-6.5.4/example/macos/Runner/Configs/Release.xcconfig @@ -0,0 +1,2 @@ +#include "../../Flutter/Flutter-Release.xcconfig" +#include "Warnings.xcconfig" diff --git a/mih_ui/android/build/macos/SourcePackages/firebase_auth-6.5.4/example/macos/Runner/Configs/Warnings.xcconfig b/mih_ui/android/build/macos/SourcePackages/firebase_auth-6.5.4/example/macos/Runner/Configs/Warnings.xcconfig new file mode 100644 index 00000000..42bcbf47 --- /dev/null +++ b/mih_ui/android/build/macos/SourcePackages/firebase_auth-6.5.4/example/macos/Runner/Configs/Warnings.xcconfig @@ -0,0 +1,13 @@ +WARNING_CFLAGS = -Wall -Wconditional-uninitialized -Wnullable-to-nonnull-conversion -Wmissing-method-return-type -Woverlength-strings +GCC_WARN_UNDECLARED_SELECTOR = YES +CLANG_UNDEFINED_BEHAVIOR_SANITIZER_NULLABILITY = YES +CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE +CLANG_WARN__DUPLICATE_METHOD_MATCH = YES +CLANG_WARN_PRAGMA_PACK = YES +CLANG_WARN_STRICT_PROTOTYPES = YES +CLANG_WARN_COMMA = YES +GCC_WARN_STRICT_SELECTOR_MATCH = YES +CLANG_WARN_OBJC_REPEATED_USE_OF_WEAK = YES +CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES +GCC_WARN_SHADOW = YES +CLANG_WARN_UNREACHABLE_CODE = YES diff --git a/mih_ui/android/build/macos/SourcePackages/firebase_auth-6.5.4/example/macos/Runner/DebugProfile.entitlements b/mih_ui/android/build/macos/SourcePackages/firebase_auth-6.5.4/example/macos/Runner/DebugProfile.entitlements new file mode 100644 index 00000000..c34fc0a4 --- /dev/null +++ b/mih_ui/android/build/macos/SourcePackages/firebase_auth-6.5.4/example/macos/Runner/DebugProfile.entitlements @@ -0,0 +1,18 @@ + + + + + com.apple.developer.applesignin + + Default + + com.apple.security.app-sandbox + + com.apple.security.cs.allow-jit + + com.apple.security.network.client + + com.apple.security.network.server + + + diff --git a/mih_ui/android/build/macos/SourcePackages/firebase_auth-6.5.4/example/macos/Runner/GoogleService-Info.plist b/mih_ui/android/build/macos/SourcePackages/firebase_auth-6.5.4/example/macos/Runner/GoogleService-Info.plist new file mode 100644 index 00000000..f325ead9 --- /dev/null +++ b/mih_ui/android/build/macos/SourcePackages/firebase_auth-6.5.4/example/macos/Runner/GoogleService-Info.plist @@ -0,0 +1,38 @@ + + + + + CLIENT_ID + 406099696497-134k3722m01rtrsklhf3b7k8sqa5r7in.apps.googleusercontent.com + REVERSED_CLIENT_ID + com.googleusercontent.apps.406099696497-134k3722m01rtrsklhf3b7k8sqa5r7in + ANDROID_CLIENT_ID + 406099696497-17qn06u8a0dc717u8ul7s49ampk13lul.apps.googleusercontent.com + API_KEY + AIzaSyDooSUGSf63Ghq02_iIhtnmwMDs4HlWS6c + GCM_SENDER_ID + 406099696497 + PLIST_VERSION + 1 + BUNDLE_ID + io.flutter.plugins.firebase.auth.example + PROJECT_ID + flutterfire-e2e-tests + STORAGE_BUCKET + flutterfire-e2e-tests.appspot.com + IS_ADS_ENABLED + + IS_ANALYTICS_ENABLED + + IS_APPINVITE_ENABLED + + IS_GCM_ENABLED + + IS_SIGNIN_ENABLED + + GOOGLE_APP_ID + 1:406099696497:ios:58cbc26aca8e5cf83574d0 + DATABASE_URL + https://flutterfire-e2e-tests-default-rtdb.europe-west1.firebasedatabase.app + + \ No newline at end of file diff --git a/mih_ui/android/build/macos/SourcePackages/firebase_auth-6.5.4/example/macos/Runner/Info.plist b/mih_ui/android/build/macos/SourcePackages/firebase_auth-6.5.4/example/macos/Runner/Info.plist new file mode 100644 index 00000000..de633ff2 --- /dev/null +++ b/mih_ui/android/build/macos/SourcePackages/firebase_auth-6.5.4/example/macos/Runner/Info.plist @@ -0,0 +1,48 @@ + + + + + CFBundleDevelopmentRegion + $(DEVELOPMENT_LANGUAGE) + CFBundleExecutable + $(EXECUTABLE_NAME) + CFBundleIconFile + + CFBundleIdentifier + $(PRODUCT_BUNDLE_IDENTIFIER) + CFBundleInfoDictionaryVersion + 6.0 + CFBundleName + $(PRODUCT_NAME) + CFBundlePackageType + APPL + CFBundleShortVersionString + $(FLUTTER_BUILD_NAME) + CFBundleURLTypes + + + CFBundleTypeRole + Editor + CFBundleURLSchemes + + com.googleusercontent.apps.448618578101-ja1be10uicsa2dvss16gh4hkqks0vq61 + + + + CFBundleVersion + $(FLUTTER_BUILD_NUMBER) + LSMinimumSystemVersion + $(MACOSX_DEPLOYMENT_TARGET) + NSAppTransportSecurity + + NSAllowsArbitraryLoads + + + NSHumanReadableCopyright + $(PRODUCT_COPYRIGHT) + NSMainNibFile + MainMenu + NSPrincipalClass + NSApplication + + diff --git a/mih_ui/android/build/macos/SourcePackages/firebase_auth-6.5.4/example/macos/Runner/MainFlutterWindow.swift b/mih_ui/android/build/macos/SourcePackages/firebase_auth-6.5.4/example/macos/Runner/MainFlutterWindow.swift new file mode 100644 index 00000000..2722837e --- /dev/null +++ b/mih_ui/android/build/macos/SourcePackages/firebase_auth-6.5.4/example/macos/Runner/MainFlutterWindow.swift @@ -0,0 +1,15 @@ +import Cocoa +import FlutterMacOS + +class MainFlutterWindow: NSWindow { + override func awakeFromNib() { + let flutterViewController = FlutterViewController.init() + let windowFrame = self.frame + self.contentViewController = flutterViewController + self.setFrame(windowFrame, display: true) + + RegisterGeneratedPlugins(registry: flutterViewController) + + super.awakeFromNib() + } +} diff --git a/mih_ui/android/build/macos/SourcePackages/firebase_auth-6.5.4/example/macos/Runner/Release.entitlements b/mih_ui/android/build/macos/SourcePackages/firebase_auth-6.5.4/example/macos/Runner/Release.entitlements new file mode 100644 index 00000000..cd2171f4 --- /dev/null +++ b/mih_ui/android/build/macos/SourcePackages/firebase_auth-6.5.4/example/macos/Runner/Release.entitlements @@ -0,0 +1,14 @@ + + + + + com.apple.developer.applesignin + + Default + + com.apple.security.app-sandbox + + com.apple.security.network.client + + + diff --git a/mih_ui/android/build/macos/SourcePackages/firebase_auth-6.5.4/example/macos/firebase_app_id_file.json b/mih_ui/android/build/macos/SourcePackages/firebase_auth-6.5.4/example/macos/firebase_app_id_file.json new file mode 100644 index 00000000..eaca8edd --- /dev/null +++ b/mih_ui/android/build/macos/SourcePackages/firebase_auth-6.5.4/example/macos/firebase_app_id_file.json @@ -0,0 +1,7 @@ +{ + "file_generated_by": "FlutterFire CLI", + "purpose": "FirebaseAppID & ProjectID for this Firebase app in this directory", + "GOOGLE_APP_ID": "1:406099696497:ios:58cbc26aca8e5cf83574d0", + "FIREBASE_PROJECT_ID": "flutterfire-e2e-tests", + "GCM_SENDER_ID": "406099696497" +} \ No newline at end of file diff --git a/mih_ui/android/build/macos/SourcePackages/firebase_auth-6.5.4/example/pubspec.yaml b/mih_ui/android/build/macos/SourcePackages/firebase_auth-6.5.4/example/pubspec.yaml new file mode 100644 index 00000000..5068e961 --- /dev/null +++ b/mih_ui/android/build/macos/SourcePackages/firebase_auth-6.5.4/example/pubspec.yaml @@ -0,0 +1,26 @@ +name: firebase_auth_example +description: Demonstrates how to use the firebase_auth plugin. +resolution: workspace + +environment: + sdk: '^3.6.0' + flutter: '>=3.27.0' + +dependencies: + barcode_widget: ^2.0.4 + firebase_auth: ^6.5.4 + firebase_core: ^4.11.0 + firebase_messaging: ^16.4.1 + flutter: + sdk: flutter + flutter_facebook_auth: ^7.1.5 + flutter_signin_button: ^2.0.0 + font_awesome_flutter: ^10.8.0 + google_sign_in: ^6.1.0 + google_sign_in_dartio: ^0.3.0 + +dev_dependencies: + http: ^1.0.0 + +flutter: + uses-material-design: true diff --git a/mih_ui/android/build/macos/SourcePackages/firebase_auth-6.5.4/example/web/favicon.png b/mih_ui/android/build/macos/SourcePackages/firebase_auth-6.5.4/example/web/favicon.png new file mode 100644 index 0000000000000000000000000000000000000000..8aaa46ac1ae21512746f852a42ba87e4165dfdd1 GIT binary patch literal 917 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`jKx9jP7LeL$-D$|I14-?iy0X7 zltGxWVyS%@P(fs7NJL45ua8x7ey(0(N`6wRUPW#JP&EUCO@$SZnVVXYs8ErclUHn2 zVXFjIVFhG^g!Ppaz)DK8ZIvQ?0~DO|i&7O#^-S~(l1AfjnEK zjFOT9D}DX)@^Za$W4-*MbbUihOG|wNBYh(yU7!lx;>x^|#0uTKVr7USFmqf|i<65o z3raHc^AtelCMM;Vme?vOfh>Xph&xL%(-1c06+^uR^q@XSM&D4+Kp$>4P^%3{)XKjo zGZknv$b36P8?Z_gF{nK@`XI}Z90TzwSQO}0J1!f2c(B=V`5aP@1P1a|PZ!4!3&Gl8 zTYqUsf!gYFyJnXpu0!n&N*SYAX-%d(5gVjrHJWqXQshj@!Zm{!01WsQrH~9=kTxW#6SvuapgMqt>$=j#%eyGrQzr zP{L-3gsMA^$I1&gsBAEL+vxi1*Igl=8#8`5?A-T5=z-sk46WA1IUT)AIZHx1rdUrf zVJrJn<74DDw`j)Ki#gt}mIT-Q`XRa2-jQXQoI%w`nb|XblvzK${ZzlV)m-XcwC(od z71_OEC5Bt9GEXosOXaPTYOia#R4ID2TiU~`zVMl08TV_C%DnU4^+HE>9(CE4D6?Fz oujB08i7adh9xk7*FX66dWH6F5TM;?E2b5PlUHx3vIVCg!0Dx9vYXATM literal 0 HcmV?d00001 diff --git a/mih_ui/android/build/macos/SourcePackages/firebase_auth-6.5.4/example/web/icons/Icon-192.png b/mih_ui/android/build/macos/SourcePackages/firebase_auth-6.5.4/example/web/icons/Icon-192.png new file mode 100644 index 0000000000000000000000000000000000000000..b749bfef07473333cf1dd31e9eed89862a5d52aa GIT binary patch literal 5292 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 literal 0 HcmV?d00001 diff --git a/mih_ui/android/build/macos/SourcePackages/firebase_auth-6.5.4/example/web/icons/Icon-512.png b/mih_ui/android/build/macos/SourcePackages/firebase_auth-6.5.4/example/web/icons/Icon-512.png new file mode 100644 index 0000000000000000000000000000000000000000..88cfd48dff1169879ba46840804b412fe02fefd6 GIT binary patch literal 8252 zcmd5=2T+s!lYZ%-(h(2@5fr2dC?F^$C=i-}R6$UX8af(!je;W5yC_|HmujSgN*6?W z3knF*TL1$|?oD*=zPbBVex*RUIKsL<(&Rj9%^UD2IK3W?2j>D?eWQgvS-HLymHo9%~|N2Q{~j za?*X-{b9JRowv_*Mh|;*-kPFn>PI;r<#kFaxFqbn?aq|PduQg=2Q;~Qc}#z)_T%x9 zE|0!a70`58wjREmAH38H1)#gof)U3g9FZ^ zF7&-0^Hy{4XHWLoC*hOG(dg~2g6&?-wqcpf{ z&3=o8vw7lMi22jCG9RQbv8H}`+}9^zSk`nlR8?Z&G2dlDy$4#+WOlg;VHqzuE=fM@ z?OI6HEJH4&tA?FVG}9>jAnq_^tlw8NbjNhfqk2rQr?h(F&WiKy03Sn=-;ZJRh~JrD zbt)zLbnabttEZ>zUiu`N*u4sfQaLE8-WDn@tHp50uD(^r-}UsUUu)`!Rl1PozAc!a z?uj|2QDQ%oV-jxUJmJycySBINSKdX{kDYRS=+`HgR2GO19fg&lZKyBFbbXhQV~v~L za^U944F1_GtuFXtvDdDNDvp<`fqy);>Vw=ncy!NB85Tw{&sT5&Ox%-p%8fTS;OzlRBwErvO+ROe?{%q-Zge=%Up|D4L#>4K@Ke=x%?*^_^P*KD zgXueMiS63!sEw@fNLB-i^F|@Oib+S4bcy{eu&e}Xvb^(mA!=U=Xr3||IpV~3K zQWzEsUeX_qBe6fky#M zzOJm5b+l;~>=sdp%i}}0h zO?B?i*W;Ndn02Y0GUUPxERG`3Bjtj!NroLoYtyVdLtl?SE*CYpf4|_${ku2s`*_)k zN=a}V8_2R5QANlxsq!1BkT6$4>9=-Ix4As@FSS;1q^#TXPrBsw>hJ}$jZ{kUHoP+H zvoYiR39gX}2OHIBYCa~6ERRPJ#V}RIIZakUmuIoLF*{sO8rAUEB9|+A#C|@kw5>u0 zBd=F!4I)Be8ycH*)X1-VPiZ+Ts8_GB;YW&ZFFUo|Sw|x~ZajLsp+_3gv((Q#N>?Jz zFBf`~p_#^${zhPIIJY~yo!7$-xi2LK%3&RkFg}Ax)3+dFCjGgKv^1;lUzQlPo^E{K zmCnrwJ)NuSaJEmueEPO@(_6h3f5mFffhkU9r8A8(JC5eOkux{gPmx_$Uv&|hyj)gN zd>JP8l2U&81@1Hc>#*su2xd{)T`Yw< zN$dSLUN}dfx)Fu`NcY}TuZ)SdviT{JHaiYgP4~@`x{&h*Hd>c3K_To9BnQi@;tuoL z%PYQo&{|IsM)_>BrF1oB~+`2_uZQ48z9!)mtUR zdfKE+b*w8cPu;F6RYJiYyV;PRBbThqHBEu_(U{(gGtjM}Zi$pL8Whx}<JwE3RM0F8x7%!!s)UJVq|TVd#hf1zVLya$;mYp(^oZQ2>=ZXU1c$}f zm|7kfk>=4KoQoQ!2&SOW5|JP1)%#55C$M(u4%SP~tHa&M+=;YsW=v(Old9L3(j)`u z2?#fK&1vtS?G6aOt@E`gZ9*qCmyvc>Ma@Q8^I4y~f3gs7*d=ATlP>1S zyF=k&6p2;7dn^8?+!wZO5r~B+;@KXFEn^&C=6ma1J7Au6y29iMIxd7#iW%=iUzq&C=$aPLa^Q zncia$@TIy6UT@69=nbty5epP>*fVW@5qbUcb2~Gg75dNd{COFLdiz3}kODn^U*=@E z0*$7u7Rl2u)=%fk4m8EK1ctR!6%Ve`e!O20L$0LkM#f+)n9h^dn{n`T*^~d+l*Qlx z$;JC0P9+en2Wlxjwq#z^a6pdnD6fJM!GV7_%8%c)kc5LZs_G^qvw)&J#6WSp< zmsd~1-(GrgjC56Pdf6#!dt^y8Rg}!#UXf)W%~PeU+kU`FeSZHk)%sFv++#Dujk-~m zFHvVJC}UBn2jN& zs!@nZ?e(iyZPNo`p1i#~wsv9l@#Z|ag3JR>0#u1iW9M1RK1iF6-RbJ4KYg?B`dET9 zyR~DjZ>%_vWYm*Z9_+^~hJ_|SNTzBKx=U0l9 z9x(J96b{`R)UVQ$I`wTJ@$_}`)_DyUNOso6=WOmQKI1e`oyYy1C&%AQU<0-`(ow)1 zT}gYdwWdm4wW6|K)LcfMe&psE0XGhMy&xS`@vLi|1#Za{D6l@#D!?nW87wcscUZgELT{Cz**^;Zb~7 z(~WFRO`~!WvyZAW-8v!6n&j*PLm9NlN}BuUN}@E^TX*4Or#dMMF?V9KBeLSiLO4?B zcE3WNIa-H{ThrlCoN=XjOGk1dT=xwwrmt<1a)mrRzg{35`@C!T?&_;Q4Ce=5=>z^*zE_c(0*vWo2_#TD<2)pLXV$FlwP}Ik74IdDQU@yhkCr5h zn5aa>B7PWy5NQ!vf7@p_qtC*{dZ8zLS;JetPkHi>IvPjtJ#ThGQD|Lq#@vE2xdl%`x4A8xOln}BiQ92Po zW;0%A?I5CQ_O`@Ad=`2BLPPbBuPUp@Hb%a_OOI}y{Rwa<#h z5^6M}s7VzE)2&I*33pA>e71d78QpF>sNK;?lj^Kl#wU7G++`N_oL4QPd-iPqBhhs| z(uVM}$ItF-onXuuXO}o$t)emBO3Hjfyil@*+GF;9j?`&67GBM;TGkLHi>@)rkS4Nj zAEk;u)`jc4C$qN6WV2dVd#q}2X6nKt&X*}I@jP%Srs%%DS92lpDY^K*Sx4`l;aql$ zt*-V{U&$DM>pdO?%jt$t=vg5|p+Rw?SPaLW zB6nvZ69$ne4Z(s$3=Rf&RX8L9PWMV*S0@R zuIk&ba#s6sxVZ51^4Kon46X^9`?DC9mEhWB3f+o4#2EXFqy0(UTc>GU| zGCJmI|Dn-dX#7|_6(fT)>&YQ0H&&JX3cTvAq(a@ydM4>5Njnuere{J8p;3?1az60* z$1E7Yyxt^ytULeokgDnRVKQw9vzHg1>X@@jM$n$HBlveIrKP5-GJq%iWH#odVwV6cF^kKX(@#%%uQVb>#T6L^mC@)%SMd4DF? zVky!~ge27>cpUP1Vi}Z32lbLV+CQy+T5Wdmva6Fg^lKb!zrg|HPU=5Qu}k;4GVH+x z%;&pN1LOce0w@9i1Mo-Y|7|z}fbch@BPp2{&R-5{GLoeu8@limQmFF zaJRR|^;kW_nw~0V^ zfTnR!Ni*;-%oSHG1yItARs~uxra|O?YJxBzLjpeE-=~TO3Dn`JL5Gz;F~O1u3|FE- zvK2Vve`ylc`a}G`gpHg58Cqc9fMoy1L}7x7T>%~b&irrNMo?np3`q;d3d;zTK>nrK zOjPS{@&74-fA7j)8uT9~*g23uGnxwIVj9HorzUX#s0pcp2?GH6i}~+kv9fWChtPa_ z@T3m+$0pbjdQw7jcnHn;Pi85hk_u2-1^}c)LNvjdam8K-XJ+KgKQ%!?2n_!#{$H|| zLO=%;hRo6EDmnOBKCL9Cg~ETU##@u^W_5joZ%Et%X_n##%JDOcsO=0VL|Lkk!VdRJ z^|~2pB@PUspT?NOeO?=0Vb+fAGc!j%Ufn-cB`s2A~W{Zj{`wqWq_-w0wr@6VrM zbzni@8c>WS!7c&|ZR$cQ;`niRw{4kG#e z70e!uX8VmP23SuJ*)#(&R=;SxGAvq|&>geL&!5Z7@0Z(No*W561n#u$Uc`f9pD70# z=sKOSK|bF~#khTTn)B28h^a1{;>EaRnHj~>i=Fnr3+Fa4 z`^+O5_itS#7kPd20rq66_wH`%?HNzWk@XFK0n;Z@Cx{kx==2L22zWH$Yg?7 zvDj|u{{+NR3JvUH({;b*$b(U5U z7(lF!1bz2%06+|-v(D?2KgwNw7( zJB#Tz+ZRi&U$i?f34m7>uTzO#+E5cbaiQ&L}UxyOQq~afbNB4EI{E04ZWg53w0A{O%qo=lF8d zf~ktGvIgf-a~zQoWf>loF7pOodrd0a2|BzwwPDV}ShauTK8*fmF6NRbO>Iw9zZU}u zw8Ya}?seBnEGQDmH#XpUUkj}N49tP<2jYwTFp!P+&Fd(%Z#yo80|5@zN(D{_pNow*&4%ql zW~&yp@scb-+Qj-EmErY+Tu=dUmf@*BoXY2&oKT8U?8?s1d}4a`Aq>7SV800m$FE~? zjmz(LY+Xx9sDX$;vU`xgw*jLw7dWOnWWCO8o|;}f>cu0Q&`0I{YudMn;P;L3R-uz# zfns_mZED_IakFBPP2r_S8XM$X)@O-xVKi4`7373Jkd5{2$M#%cRhWer3M(vr{S6>h zj{givZJ3(`yFL@``(afn&~iNx@B1|-qfYiZu?-_&Z8+R~v`d6R-}EX9IVXWO-!hL5 z*k6T#^2zAXdardU3Ao~I)4DGdAv2bx{4nOK`20rJo>rmk3S2ZDu}))8Z1m}CKigf0 z3L`3Y`{huj`xj9@`$xTZzZc3je?n^yG<8sw$`Y%}9mUsjUR%T!?k^(q)6FH6Af^b6 zlPg~IEwg0y;`t9y;#D+uz!oE4VP&Je!<#q*F?m5L5?J3i@!0J6q#eu z!RRU`-)HeqGi_UJZ(n~|PSNsv+Wgl{P-TvaUQ9j?ZCtvb^37U$sFpBrkT{7Jpd?HpIvj2!}RIq zH{9~+gErN2+}J`>Jvng2hwM`=PLNkc7pkjblKW|+Fk9rc)G1R>Ww>RC=r-|!m-u7( zc(a$9NG}w#PjWNMS~)o=i~WA&4L(YIW25@AL9+H9!?3Y}sv#MOdY{bb9j>p`{?O(P zIvb`n?_(gP2w3P#&91JX*md+bBEr%xUHMVqfB;(f?OPtMnAZ#rm5q5mh;a2f_si2_ z3oXWB?{NF(JtkAn6F(O{z@b76OIqMC$&oJ_&S|YbFJ*)3qVX_uNf5b8(!vGX19hsG z(OP>RmZp29KH9Ge2kKjKigUmOe^K_!UXP`von)PR8Qz$%=EmOB9xS(ZxE_tnyzo}7 z=6~$~9k0M~v}`w={AeqF?_)9q{m8K#6M{a&(;u;O41j)I$^T?lx5(zlebpY@NT&#N zR+1bB)-1-xj}R8uwqwf=iP1GbxBjneCC%UrSdSxK1vM^i9;bUkS#iRZw2H>rS<2<$ zNT3|sDH>{tXb=zq7XZi*K?#Zsa1h1{h5!Tq_YbKFm_*=A5-<~j63he;4`77!|LBlo zR^~tR3yxcU=gDFbshyF6>o0bdp$qmHS7D}m3;^QZq9kBBU|9$N-~oU?G5;jyFR7>z hN`IR97YZXIo@y!QgFWddJ3|0`sjFx!m))><{BI=FK%f8s literal 0 HcmV?d00001 diff --git a/mih_ui/android/build/macos/SourcePackages/firebase_auth-6.5.4/example/web/icons/Icon-maskable-192.png b/mih_ui/android/build/macos/SourcePackages/firebase_auth-6.5.4/example/web/icons/Icon-maskable-192.png new file mode 100644 index 0000000000000000000000000000000000000000..eb9b4d76e525556d5d89141648c724331630325d GIT binary patch literal 5594 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 X>c!)3PgKfL&lX^$Z>Cpu&6)6jvi^Z! literal 0 HcmV?d00001 diff --git a/mih_ui/android/build/macos/SourcePackages/firebase_auth-6.5.4/example/web/icons/Icon-maskable-512.png b/mih_ui/android/build/macos/SourcePackages/firebase_auth-6.5.4/example/web/icons/Icon-maskable-512.png new file mode 100644 index 0000000000000000000000000000000000000000..d69c56691fbdb0b7efa65097c7cc1edac12a6d3e GIT binary patch literal 20998 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 MPgg&ebxsLQ025IeI{*Lx literal 0 HcmV?d00001 diff --git a/mih_ui/android/build/macos/SourcePackages/firebase_auth-6.5.4/example/web/index.html b/mih_ui/android/build/macos/SourcePackages/firebase_auth-6.5.4/example/web/index.html new file mode 100644 index 00000000..0168402a --- /dev/null +++ b/mih_ui/android/build/macos/SourcePackages/firebase_auth-6.5.4/example/web/index.html @@ -0,0 +1,38 @@ + + + + + + + + + + + + + + + + + + + + flutterfire_auth + + + + + + diff --git a/mih_ui/android/build/macos/SourcePackages/firebase_auth-6.5.4/example/web/manifest.json b/mih_ui/android/build/macos/SourcePackages/firebase_auth-6.5.4/example/web/manifest.json new file mode 100644 index 00000000..88044af3 --- /dev/null +++ b/mih_ui/android/build/macos/SourcePackages/firebase_auth-6.5.4/example/web/manifest.json @@ -0,0 +1,35 @@ +{ + "name": "flutterfire_auth", + "short_name": "flutterfire_auth", + "start_url": ".", + "display": "standalone", + "background_color": "#0175C2", + "theme_color": "#0175C2", + "description": "A new Flutter project.", + "orientation": "portrait-primary", + "prefer_related_applications": false, + "icons": [ + { + "src": "icons/Icon-192.png", + "sizes": "192x192", + "type": "image/png" + }, + { + "src": "icons/Icon-512.png", + "sizes": "512x512", + "type": "image/png" + }, + { + "src": "icons/Icon-maskable-192.png", + "sizes": "192x192", + "type": "image/png", + "purpose": "maskable" + }, + { + "src": "icons/Icon-maskable-512.png", + "sizes": "512x512", + "type": "image/png", + "purpose": "maskable" + } + ] +} diff --git a/mih_ui/android/build/macos/SourcePackages/firebase_auth-6.5.4/example/windows/CMakeLists.txt b/mih_ui/android/build/macos/SourcePackages/firebase_auth-6.5.4/example/windows/CMakeLists.txt new file mode 100644 index 00000000..13786727 --- /dev/null +++ b/mih_ui/android/build/macos/SourcePackages/firebase_auth-6.5.4/example/windows/CMakeLists.txt @@ -0,0 +1,102 @@ +# Project-level configuration. +cmake_minimum_required(VERSION 3.14) +project(example LANGUAGES CXX) + +# The name of the executable created for the application. Change this to change +# the on-disk name of your application. +set(BINARY_NAME "example") + +# Explicitly opt in to modern CMake behaviors to avoid warnings with recent +# versions of CMake. +cmake_policy(SET CMP0063 NEW) + +# Define build configuration option. +get_property(IS_MULTICONFIG GLOBAL PROPERTY GENERATOR_IS_MULTI_CONFIG) +if(IS_MULTICONFIG) + set(CMAKE_CONFIGURATION_TYPES "Debug;Profile;Release" + CACHE STRING "" FORCE) +else() + if(NOT CMAKE_BUILD_TYPE AND NOT CMAKE_CONFIGURATION_TYPES) + set(CMAKE_BUILD_TYPE "Debug" CACHE + STRING "Flutter build mode" FORCE) + set_property(CACHE CMAKE_BUILD_TYPE PROPERTY STRINGS + "Debug" "Profile" "Release") + endif() +endif() +# Define settings for the Profile build mode. +set(CMAKE_EXE_LINKER_FLAGS_PROFILE "${CMAKE_EXE_LINKER_FLAGS_RELEASE}") +set(CMAKE_SHARED_LINKER_FLAGS_PROFILE "${CMAKE_SHARED_LINKER_FLAGS_RELEASE}") +set(CMAKE_C_FLAGS_PROFILE "${CMAKE_C_FLAGS_RELEASE}") +set(CMAKE_CXX_FLAGS_PROFILE "${CMAKE_CXX_FLAGS_RELEASE}") + +# Use Unicode for all projects. +add_definitions(-DUNICODE -D_UNICODE) + +# Compilation settings that should be applied to most targets. +# +# Be cautious about adding new options here, as plugins use this function by +# default. In most cases, you should add new options to specific targets instead +# of modifying this function. +function(APPLY_STANDARD_SETTINGS TARGET) + target_compile_features(${TARGET} PUBLIC cxx_std_17) + target_compile_options(${TARGET} PRIVATE /W4 /WX /wd"4100") + target_compile_options(${TARGET} PRIVATE /EHsc) + target_compile_definitions(${TARGET} PRIVATE "_HAS_EXCEPTIONS=0") + target_compile_definitions(${TARGET} PRIVATE "$<$:_DEBUG>") +endfunction() + +# Flutter library and tool build rules. +set(FLUTTER_MANAGED_DIR "${CMAKE_CURRENT_SOURCE_DIR}/flutter") +add_subdirectory(${FLUTTER_MANAGED_DIR}) + +# Application build; see runner/CMakeLists.txt. +add_subdirectory("runner") + + +# Generated plugin build rules, which manage building the plugins and adding +# them to the application. +include(flutter/generated_plugins.cmake) + + +# === Installation === +# Support files are copied into place next to the executable, so that it can +# run in place. This is done instead of making a separate bundle (as on Linux) +# so that building and running from within Visual Studio will work. +set(BUILD_BUNDLE_DIR "$") +# Make the "install" step default, as it's required to run. +set(CMAKE_VS_INCLUDE_INSTALL_TO_DEFAULT_BUILD 1) +if(CMAKE_INSTALL_PREFIX_INITIALIZED_TO_DEFAULT) + set(CMAKE_INSTALL_PREFIX "${BUILD_BUNDLE_DIR}" CACHE PATH "..." FORCE) +endif() + +set(INSTALL_BUNDLE_DATA_DIR "${CMAKE_INSTALL_PREFIX}/data") +set(INSTALL_BUNDLE_LIB_DIR "${CMAKE_INSTALL_PREFIX}") + +install(TARGETS ${BINARY_NAME} RUNTIME DESTINATION "${CMAKE_INSTALL_PREFIX}" + COMPONENT Runtime) + +install(FILES "${FLUTTER_ICU_DATA_FILE}" DESTINATION "${INSTALL_BUNDLE_DATA_DIR}" + COMPONENT Runtime) + +install(FILES "${FLUTTER_LIBRARY}" DESTINATION "${INSTALL_BUNDLE_LIB_DIR}" + COMPONENT Runtime) + +if(PLUGIN_BUNDLED_LIBRARIES) + install(FILES "${PLUGIN_BUNDLED_LIBRARIES}" + DESTINATION "${INSTALL_BUNDLE_LIB_DIR}" + COMPONENT Runtime) +endif() + +# Fully re-copy the assets directory on each build to avoid having stale files +# from a previous install. +set(FLUTTER_ASSET_DIR_NAME "flutter_assets") +install(CODE " + file(REMOVE_RECURSE \"${INSTALL_BUNDLE_DATA_DIR}/${FLUTTER_ASSET_DIR_NAME}\") + " COMPONENT Runtime) +install(DIRECTORY "${PROJECT_BUILD_DIR}/${FLUTTER_ASSET_DIR_NAME}" + DESTINATION "${INSTALL_BUNDLE_DATA_DIR}" COMPONENT Runtime) + +# Install the AOT library on non-Debug builds only. +install(FILES "${AOT_LIBRARY}" DESTINATION "${INSTALL_BUNDLE_DATA_DIR}" + CONFIGURATIONS Profile;Release + COMPONENT Runtime) diff --git a/mih_ui/android/build/macos/SourcePackages/firebase_auth-6.5.4/example/windows/flutter/CMakeLists.txt b/mih_ui/android/build/macos/SourcePackages/firebase_auth-6.5.4/example/windows/flutter/CMakeLists.txt new file mode 100644 index 00000000..903f4899 --- /dev/null +++ b/mih_ui/android/build/macos/SourcePackages/firebase_auth-6.5.4/example/windows/flutter/CMakeLists.txt @@ -0,0 +1,109 @@ +# This file controls Flutter-level build steps. It should not be edited. +cmake_minimum_required(VERSION 3.14) + +set(EPHEMERAL_DIR "${CMAKE_CURRENT_SOURCE_DIR}/ephemeral") + +# Configuration provided via flutter tool. +include(${EPHEMERAL_DIR}/generated_config.cmake) + +# TODO: Move the rest of this into files in ephemeral. See +# https://github.com/flutter/flutter/issues/57146. +set(WRAPPER_ROOT "${EPHEMERAL_DIR}/cpp_client_wrapper") + +# Set fallback configurations for older versions of the flutter tool. +if (NOT DEFINED FLUTTER_TARGET_PLATFORM) + set(FLUTTER_TARGET_PLATFORM "windows-x64") +endif() + +# === Flutter Library === +set(FLUTTER_LIBRARY "${EPHEMERAL_DIR}/flutter_windows.dll") + +# Published to parent scope for install step. +set(FLUTTER_LIBRARY ${FLUTTER_LIBRARY} PARENT_SCOPE) +set(FLUTTER_ICU_DATA_FILE "${EPHEMERAL_DIR}/icudtl.dat" PARENT_SCOPE) +set(PROJECT_BUILD_DIR "${PROJECT_DIR}/build/" PARENT_SCOPE) +set(AOT_LIBRARY "${PROJECT_DIR}/build/windows/app.so" PARENT_SCOPE) + +list(APPEND FLUTTER_LIBRARY_HEADERS + "flutter_export.h" + "flutter_windows.h" + "flutter_messenger.h" + "flutter_plugin_registrar.h" + "flutter_texture_registrar.h" +) +list(TRANSFORM FLUTTER_LIBRARY_HEADERS PREPEND "${EPHEMERAL_DIR}/") +add_library(flutter INTERFACE) +target_include_directories(flutter INTERFACE + "${EPHEMERAL_DIR}" +) +target_link_libraries(flutter INTERFACE "${FLUTTER_LIBRARY}.lib") +add_dependencies(flutter flutter_assemble) + +# === Wrapper === +list(APPEND CPP_WRAPPER_SOURCES_CORE + "core_implementations.cc" + "standard_codec.cc" +) +list(TRANSFORM CPP_WRAPPER_SOURCES_CORE PREPEND "${WRAPPER_ROOT}/") +list(APPEND CPP_WRAPPER_SOURCES_PLUGIN + "plugin_registrar.cc" +) +list(TRANSFORM CPP_WRAPPER_SOURCES_PLUGIN PREPEND "${WRAPPER_ROOT}/") +list(APPEND CPP_WRAPPER_SOURCES_APP + "flutter_engine.cc" + "flutter_view_controller.cc" +) +list(TRANSFORM CPP_WRAPPER_SOURCES_APP PREPEND "${WRAPPER_ROOT}/") + +# Wrapper sources needed for a plugin. +add_library(flutter_wrapper_plugin STATIC + ${CPP_WRAPPER_SOURCES_CORE} + ${CPP_WRAPPER_SOURCES_PLUGIN} +) +apply_standard_settings(flutter_wrapper_plugin) +set_target_properties(flutter_wrapper_plugin PROPERTIES + POSITION_INDEPENDENT_CODE ON) +set_target_properties(flutter_wrapper_plugin PROPERTIES + CXX_VISIBILITY_PRESET hidden) +target_link_libraries(flutter_wrapper_plugin PUBLIC flutter) +target_include_directories(flutter_wrapper_plugin PUBLIC + "${WRAPPER_ROOT}/include" +) +add_dependencies(flutter_wrapper_plugin flutter_assemble) + +# Wrapper sources needed for the runner. +add_library(flutter_wrapper_app STATIC + ${CPP_WRAPPER_SOURCES_CORE} + ${CPP_WRAPPER_SOURCES_APP} +) +apply_standard_settings(flutter_wrapper_app) +target_link_libraries(flutter_wrapper_app PUBLIC flutter) +target_include_directories(flutter_wrapper_app PUBLIC + "${WRAPPER_ROOT}/include" +) +add_dependencies(flutter_wrapper_app flutter_assemble) + +# === Flutter tool backend === +# _phony_ is a non-existent file to force this command to run every time, +# since currently there's no way to get a full input/output list from the +# flutter tool. +set(PHONY_OUTPUT "${CMAKE_CURRENT_BINARY_DIR}/_phony_") +set_source_files_properties("${PHONY_OUTPUT}" PROPERTIES SYMBOLIC TRUE) +add_custom_command( + OUTPUT ${FLUTTER_LIBRARY} ${FLUTTER_LIBRARY_HEADERS} + ${CPP_WRAPPER_SOURCES_CORE} ${CPP_WRAPPER_SOURCES_PLUGIN} + ${CPP_WRAPPER_SOURCES_APP} + ${PHONY_OUTPUT} + COMMAND ${CMAKE_COMMAND} -E env + ${FLUTTER_TOOL_ENVIRONMENT} + "${FLUTTER_ROOT}/packages/flutter_tools/bin/tool_backend.bat" + ${FLUTTER_TARGET_PLATFORM} $ + VERBATIM +) +add_custom_target(flutter_assemble DEPENDS + "${FLUTTER_LIBRARY}" + ${FLUTTER_LIBRARY_HEADERS} + ${CPP_WRAPPER_SOURCES_CORE} + ${CPP_WRAPPER_SOURCES_PLUGIN} + ${CPP_WRAPPER_SOURCES_APP} +) diff --git a/mih_ui/android/build/macos/SourcePackages/firebase_auth-6.5.4/example/windows/runner/CMakeLists.txt b/mih_ui/android/build/macos/SourcePackages/firebase_auth-6.5.4/example/windows/runner/CMakeLists.txt new file mode 100644 index 00000000..394917c0 --- /dev/null +++ b/mih_ui/android/build/macos/SourcePackages/firebase_auth-6.5.4/example/windows/runner/CMakeLists.txt @@ -0,0 +1,40 @@ +cmake_minimum_required(VERSION 3.14) +project(runner LANGUAGES CXX) + +# Define the application target. To change its name, change BINARY_NAME in the +# top-level CMakeLists.txt, not the value here, or `flutter run` will no longer +# work. +# +# Any new source files that you add to the application should be added here. +add_executable(${BINARY_NAME} WIN32 + "flutter_window.cpp" + "main.cpp" + "utils.cpp" + "win32_window.cpp" + "${FLUTTER_MANAGED_DIR}/generated_plugin_registrant.cc" + "Runner.rc" + "runner.exe.manifest" +) + +# Apply the standard set of build settings. This can be removed for applications +# that need different build settings. +apply_standard_settings(${BINARY_NAME}) + +# Add preprocessor definitions for the build version. +target_compile_definitions(${BINARY_NAME} PRIVATE "FLUTTER_VERSION=\"${FLUTTER_VERSION}\"") +target_compile_definitions(${BINARY_NAME} PRIVATE "FLUTTER_VERSION_MAJOR=${FLUTTER_VERSION_MAJOR}") +target_compile_definitions(${BINARY_NAME} PRIVATE "FLUTTER_VERSION_MINOR=${FLUTTER_VERSION_MINOR}") +target_compile_definitions(${BINARY_NAME} PRIVATE "FLUTTER_VERSION_PATCH=${FLUTTER_VERSION_PATCH}") +target_compile_definitions(${BINARY_NAME} PRIVATE "FLUTTER_VERSION_BUILD=${FLUTTER_VERSION_BUILD}") + +# Disable Windows macros that collide with C++ standard library functions. +target_compile_definitions(${BINARY_NAME} PRIVATE "NOMINMAX") + +# Add dependency libraries and include directories. Add any application-specific +# dependencies here. +target_link_libraries(${BINARY_NAME} PRIVATE flutter flutter_wrapper_app) +target_link_libraries(${BINARY_NAME} PRIVATE "dwmapi.lib") +target_include_directories(${BINARY_NAME} PRIVATE "${CMAKE_SOURCE_DIR}") + +# Run the Flutter tool portions of the build. This must not be removed. +add_dependencies(${BINARY_NAME} flutter_assemble) diff --git a/mih_ui/android/build/macos/SourcePackages/firebase_auth-6.5.4/example/windows/runner/Runner.rc b/mih_ui/android/build/macos/SourcePackages/firebase_auth-6.5.4/example/windows/runner/Runner.rc new file mode 100644 index 00000000..4477b011 --- /dev/null +++ b/mih_ui/android/build/macos/SourcePackages/firebase_auth-6.5.4/example/windows/runner/Runner.rc @@ -0,0 +1,121 @@ +// Microsoft Visual C++ generated resource script. +// +#pragma code_page(65001) +#include "resource.h" + +#define APSTUDIO_READONLY_SYMBOLS +///////////////////////////////////////////////////////////////////////////// +// +// Generated from the TEXTINCLUDE 2 resource. +// +#include "winres.h" + +///////////////////////////////////////////////////////////////////////////// +#undef APSTUDIO_READONLY_SYMBOLS + +///////////////////////////////////////////////////////////////////////////// +// English (United States) resources + +#if !defined(AFX_RESOURCE_DLL) || defined(AFX_TARG_ENU) +LANGUAGE LANG_ENGLISH, SUBLANG_ENGLISH_US + +#ifdef APSTUDIO_INVOKED +///////////////////////////////////////////////////////////////////////////// +// +// TEXTINCLUDE +// + +1 TEXTINCLUDE +BEGIN + "resource.h\0" +END + +2 TEXTINCLUDE +BEGIN + "#include ""winres.h""\r\n" + "\0" +END + +3 TEXTINCLUDE +BEGIN + "\r\n" + "\0" +END + +#endif // APSTUDIO_INVOKED + + +///////////////////////////////////////////////////////////////////////////// +// +// Icon +// + +// Icon with lowest ID value placed first to ensure application icon +// remains consistent on all systems. +IDI_APP_ICON ICON "resources\\app_icon.ico" + + +///////////////////////////////////////////////////////////////////////////// +// +// Version +// + +#if defined(FLUTTER_VERSION_MAJOR) && defined(FLUTTER_VERSION_MINOR) && defined(FLUTTER_VERSION_PATCH) && defined(FLUTTER_VERSION_BUILD) +#define VERSION_AS_NUMBER FLUTTER_VERSION_MAJOR,FLUTTER_VERSION_MINOR,FLUTTER_VERSION_PATCH,FLUTTER_VERSION_BUILD +#else +#define VERSION_AS_NUMBER 1,0,0,0 +#endif + +#if defined(FLUTTER_VERSION) +#define VERSION_AS_STRING FLUTTER_VERSION +#else +#define VERSION_AS_STRING "1.0.0" +#endif + +VS_VERSION_INFO VERSIONINFO + FILEVERSION VERSION_AS_NUMBER + PRODUCTVERSION VERSION_AS_NUMBER + FILEFLAGSMASK VS_FFI_FILEFLAGSMASK +#ifdef _DEBUG + FILEFLAGS VS_FF_DEBUG +#else + FILEFLAGS 0x0L +#endif + FILEOS VOS__WINDOWS32 + FILETYPE VFT_APP + FILESUBTYPE 0x0L +BEGIN + BLOCK "StringFileInfo" + BEGIN + BLOCK "040904e4" + BEGIN + VALUE "CompanyName", "io.flutter.plugins.firebase.auth" "\0" + VALUE "FileDescription", "example" "\0" + VALUE "FileVersion", VERSION_AS_STRING "\0" + VALUE "InternalName", "example" "\0" + VALUE "LegalCopyright", "Copyright (C) 2023 io.flutter.plugins.firebase.auth. All rights reserved." "\0" + VALUE "OriginalFilename", "example.exe" "\0" + VALUE "ProductName", "example" "\0" + VALUE "ProductVersion", VERSION_AS_STRING "\0" + END + END + BLOCK "VarFileInfo" + BEGIN + VALUE "Translation", 0x409, 1252 + END +END + +#endif // English (United States) resources +///////////////////////////////////////////////////////////////////////////// + + + +#ifndef APSTUDIO_INVOKED +///////////////////////////////////////////////////////////////////////////// +// +// Generated from the TEXTINCLUDE 3 resource. +// + + +///////////////////////////////////////////////////////////////////////////// +#endif // not APSTUDIO_INVOKED diff --git a/mih_ui/android/build/macos/SourcePackages/firebase_auth-6.5.4/example/windows/runner/flutter_window.cpp b/mih_ui/android/build/macos/SourcePackages/firebase_auth-6.5.4/example/windows/runner/flutter_window.cpp new file mode 100644 index 00000000..227a2489 --- /dev/null +++ b/mih_ui/android/build/macos/SourcePackages/firebase_auth-6.5.4/example/windows/runner/flutter_window.cpp @@ -0,0 +1,68 @@ +// Copyright 2023, the Chromium project authors. Please see the AUTHORS file +// for details. All rights reserved. Use of this source code is governed by a +// BSD-style license that can be found in the LICENSE file. + +#include "flutter_window.h" + +#include + +#include "flutter/generated_plugin_registrant.h" + +FlutterWindow::FlutterWindow(const flutter::DartProject& project) + : project_(project) {} + +FlutterWindow::~FlutterWindow() {} + +bool FlutterWindow::OnCreate() { + if (!Win32Window::OnCreate()) { + return false; + } + + RECT frame = GetClientArea(); + + // The size here must match the window dimensions to avoid unnecessary surface + // creation / destruction in the startup path. + flutter_controller_ = std::make_unique( + frame.right - frame.left, frame.bottom - frame.top, project_); + // Ensure that basic setup of the controller was successful. + if (!flutter_controller_->engine() || !flutter_controller_->view()) { + return false; + } + RegisterPlugins(flutter_controller_->engine()); + SetChildContent(flutter_controller_->view()->GetNativeWindow()); + + flutter_controller_->engine()->SetNextFrameCallback([&]() { this->Show(); }); + + return true; +} + +void FlutterWindow::OnDestroy() { + if (flutter_controller_) { + flutter_controller_ = nullptr; + } + + Win32Window::OnDestroy(); +} + +LRESULT +FlutterWindow::MessageHandler(HWND hwnd, UINT const message, + WPARAM const wparam, + LPARAM const lparam) noexcept { + // Give Flutter, including plugins, an opportunity to handle window messages. + if (flutter_controller_) { + std::optional result = + flutter_controller_->HandleTopLevelWindowProc(hwnd, message, wparam, + lparam); + if (result) { + return *result; + } + } + + switch (message) { + case WM_FONTCHANGE: + flutter_controller_->engine()->ReloadSystemFonts(); + break; + } + + return Win32Window::MessageHandler(hwnd, message, wparam, lparam); +} diff --git a/mih_ui/android/build/macos/SourcePackages/firebase_auth-6.5.4/example/windows/runner/flutter_window.h b/mih_ui/android/build/macos/SourcePackages/firebase_auth-6.5.4/example/windows/runner/flutter_window.h new file mode 100644 index 00000000..2b30f421 --- /dev/null +++ b/mih_ui/android/build/macos/SourcePackages/firebase_auth-6.5.4/example/windows/runner/flutter_window.h @@ -0,0 +1,39 @@ +/* + * Copyright 2023, the Chromium project authors. Please see the AUTHORS file + * for details. All rights reserved. Use of this source code is governed by a + * BSD-style license that can be found in the LICENSE file. + */ + +#ifndef RUNNER_FLUTTER_WINDOW_H_ +#define RUNNER_FLUTTER_WINDOW_H_ + +#include +#include + +#include + +#include "win32_window.h" + +// A window that does nothing but host a Flutter view. +class FlutterWindow : public Win32Window { + public: + // Creates a new FlutterWindow hosting a Flutter view running |project|. + explicit FlutterWindow(const flutter::DartProject& project); + virtual ~FlutterWindow(); + + protected: + // Win32Window: + bool OnCreate() override; + void OnDestroy() override; + LRESULT MessageHandler(HWND window, UINT const message, WPARAM const wparam, + LPARAM const lparam) noexcept override; + + private: + // The project to run. + flutter::DartProject project_; + + // The Flutter instance hosted by this window. + std::unique_ptr flutter_controller_; +}; + +#endif // RUNNER_FLUTTER_WINDOW_H_ diff --git a/mih_ui/android/build/macos/SourcePackages/firebase_auth-6.5.4/example/windows/runner/main.cpp b/mih_ui/android/build/macos/SourcePackages/firebase_auth-6.5.4/example/windows/runner/main.cpp new file mode 100644 index 00000000..7a451dd2 --- /dev/null +++ b/mih_ui/android/build/macos/SourcePackages/firebase_auth-6.5.4/example/windows/runner/main.cpp @@ -0,0 +1,46 @@ +// Copyright 2023, the Chromium project authors. Please see the AUTHORS file +// for details. All rights reserved. Use of this source code is governed by a +// BSD-style license that can be found in the LICENSE file. + +#include +#include +#include + +#include "flutter_window.h" +#include "utils.h" + +int APIENTRY wWinMain(_In_ HINSTANCE instance, _In_opt_ HINSTANCE prev, + _In_ wchar_t* command_line, _In_ int show_command) { + // Attach to console when present (e.g., 'flutter run') or create a + // new console when running with a debugger. + if (!::AttachConsole(ATTACH_PARENT_PROCESS) && ::IsDebuggerPresent()) { + CreateAndAttachConsole(); + } + + // Initialize COM, so that it is available for use in the library and/or + // plugins. + ::CoInitializeEx(nullptr, COINIT_APARTMENTTHREADED); + + flutter::DartProject project(L"data"); + + std::vector command_line_arguments = GetCommandLineArguments(); + + project.set_dart_entrypoint_arguments(std::move(command_line_arguments)); + + FlutterWindow window(project); + Win32Window::Point origin(10, 10); + Win32Window::Size size(1280, 720); + if (!window.Create(L"example", origin, size)) { + return EXIT_FAILURE; + } + window.SetQuitOnClose(true); + + ::MSG msg; + while (::GetMessage(&msg, nullptr, 0, 0)) { + ::TranslateMessage(&msg); + ::DispatchMessage(&msg); + } + + ::CoUninitialize(); + return EXIT_SUCCESS; +} diff --git a/mih_ui/android/build/macos/SourcePackages/firebase_auth-6.5.4/example/windows/runner/resource.h b/mih_ui/android/build/macos/SourcePackages/firebase_auth-6.5.4/example/windows/runner/resource.h new file mode 100644 index 00000000..3b8e4da1 --- /dev/null +++ b/mih_ui/android/build/macos/SourcePackages/firebase_auth-6.5.4/example/windows/runner/resource.h @@ -0,0 +1,22 @@ +/* + * Copyright 2023, the Chromium project authors. Please see the AUTHORS file + * for details. All rights reserved. Use of this source code is governed by a + * BSD-style license that can be found in the LICENSE file. + */ + +//{{NO_DEPENDENCIES}} +// Microsoft Visual C++ generated include file. +// Used by Runner.rc +// +#define IDI_APP_ICON 101 + +// Next default values for new objects +// +#ifdef APSTUDIO_INVOKED +#ifndef APSTUDIO_READONLY_SYMBOLS +#define _APS_NEXT_RESOURCE_VALUE 102 +#define _APS_NEXT_COMMAND_VALUE 40001 +#define _APS_NEXT_CONTROL_VALUE 1001 +#define _APS_NEXT_SYMED_VALUE 101 +#endif +#endif diff --git a/mih_ui/android/build/macos/SourcePackages/firebase_auth-6.5.4/example/windows/runner/resources/app_icon.ico b/mih_ui/android/build/macos/SourcePackages/firebase_auth-6.5.4/example/windows/runner/resources/app_icon.ico new file mode 100644 index 0000000000000000000000000000000000000000..c04e20caf6370ebb9253ad831cc31de4a9c965f6 GIT binary patch literal 33772 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 literal 0 HcmV?d00001 diff --git a/mih_ui/android/build/macos/SourcePackages/firebase_auth-6.5.4/example/windows/runner/runner.exe.manifest b/mih_ui/android/build/macos/SourcePackages/firebase_auth-6.5.4/example/windows/runner/runner.exe.manifest new file mode 100644 index 00000000..a42ea768 --- /dev/null +++ b/mih_ui/android/build/macos/SourcePackages/firebase_auth-6.5.4/example/windows/runner/runner.exe.manifest @@ -0,0 +1,20 @@ + + + + + PerMonitorV2 + + + + + + + + + + + + + + + diff --git a/mih_ui/android/build/macos/SourcePackages/firebase_auth-6.5.4/example/windows/runner/utils.cpp b/mih_ui/android/build/macos/SourcePackages/firebase_auth-6.5.4/example/windows/runner/utils.cpp new file mode 100644 index 00000000..9f01ff8b --- /dev/null +++ b/mih_ui/android/build/macos/SourcePackages/firebase_auth-6.5.4/example/windows/runner/utils.cpp @@ -0,0 +1,69 @@ +// Copyright 2023, the Chromium project authors. Please see the AUTHORS file +// for details. All rights reserved. Use of this source code is governed by a +// BSD-style license that can be found in the LICENSE file. + +#include "utils.h" + +#include +#include +#include +#include + +#include + +void CreateAndAttachConsole() { + if (::AllocConsole()) { + FILE* unused; + if (freopen_s(&unused, "CONOUT$", "w", stdout)) { + _dup2(_fileno(stdout), 1); + } + if (freopen_s(&unused, "CONOUT$", "w", stderr)) { + _dup2(_fileno(stdout), 2); + } + std::ios::sync_with_stdio(); + FlutterDesktopResyncOutputStreams(); + } +} + +std::vector GetCommandLineArguments() { + // Convert the UTF-16 command line arguments to UTF-8 for the Engine to use. + int argc; + wchar_t** argv = ::CommandLineToArgvW(::GetCommandLineW(), &argc); + if (argv == nullptr) { + return std::vector(); + } + + std::vector command_line_arguments; + + // Skip the first argument as it's the binary name. + for (int i = 1; i < argc; i++) { + command_line_arguments.push_back(Utf8FromUtf16(argv[i])); + } + + ::LocalFree(argv); + + return command_line_arguments; +} + +std::string Utf8FromUtf16(const wchar_t* utf16_string) { + if (utf16_string == nullptr) { + return std::string(); + } + int target_length = + ::WideCharToMultiByte(CP_UTF8, WC_ERR_INVALID_CHARS, utf16_string, -1, + nullptr, 0, nullptr, nullptr) - + 1; // remove the trailing null character + int input_length = (int)wcslen(utf16_string); + std::string utf8_string; + if (target_length <= 0 || target_length > utf8_string.max_size()) { + return utf8_string; + } + utf8_string.resize(target_length); + int converted_length = ::WideCharToMultiByte( + CP_UTF8, WC_ERR_INVALID_CHARS, utf16_string, input_length, + utf8_string.data(), target_length, nullptr, nullptr); + if (converted_length == 0) { + return std::string(); + } + return utf8_string; +} diff --git a/mih_ui/android/build/macos/SourcePackages/firebase_auth-6.5.4/example/windows/runner/utils.h b/mih_ui/android/build/macos/SourcePackages/firebase_auth-6.5.4/example/windows/runner/utils.h new file mode 100644 index 00000000..67b5c48b --- /dev/null +++ b/mih_ui/android/build/macos/SourcePackages/firebase_auth-6.5.4/example/windows/runner/utils.h @@ -0,0 +1,25 @@ +/* + * Copyright 2023, the Chromium project authors. Please see the AUTHORS file + * for details. All rights reserved. Use of this source code is governed by a + * BSD-style license that can be found in the LICENSE file. + */ + +#ifndef RUNNER_UTILS_H_ +#define RUNNER_UTILS_H_ + +#include +#include + +// Creates a console for the process, and redirects stdout and stderr to +// it for both the runner and the Flutter library. +void CreateAndAttachConsole(); + +// Takes a null-terminated wchar_t* encoded in UTF-16 and returns a std::string +// encoded in UTF-8. Returns an empty std::string on failure. +std::string Utf8FromUtf16(const wchar_t* utf16_string); + +// Gets the command line arguments passed in as a std::vector, +// encoded in UTF-8. Returns an empty std::vector on failure. +std::vector GetCommandLineArguments(); + +#endif // RUNNER_UTILS_H_ diff --git a/mih_ui/android/build/macos/SourcePackages/firebase_auth-6.5.4/example/windows/runner/win32_window.cpp b/mih_ui/android/build/macos/SourcePackages/firebase_auth-6.5.4/example/windows/runner/win32_window.cpp new file mode 100644 index 00000000..45d150e7 --- /dev/null +++ b/mih_ui/android/build/macos/SourcePackages/firebase_auth-6.5.4/example/windows/runner/win32_window.cpp @@ -0,0 +1,284 @@ +// Copyright 2023, the Chromium project authors. Please see the AUTHORS file +// for details. All rights reserved. Use of this source code is governed by a +// BSD-style license that can be found in the LICENSE file. + +#include "win32_window.h" + +#include +#include + +#include "resource.h" + +namespace { + +/// Window attribute that enables dark mode window decorations. +/// +/// Redefined in case the developer's machine has a Windows SDK older than +/// version 10.0.22000.0. +/// See: +/// https://docs.microsoft.com/windows/win32/api/dwmapi/ne-dwmapi-dwmwindowattribute +#ifndef DWMWA_USE_IMMERSIVE_DARK_MODE +#define DWMWA_USE_IMMERSIVE_DARK_MODE 20 +#endif + +constexpr const wchar_t kWindowClassName[] = L"FLUTTER_RUNNER_WIN32_WINDOW"; + +/// Registry key for app theme preference. +/// +/// A value of 0 indicates apps should use dark mode. A non-zero or missing +/// value indicates apps should use light mode. +constexpr const wchar_t kGetPreferredBrightnessRegKey[] = + L"Software\\Microsoft\\Windows\\CurrentVersion\\Themes\\Personalize"; +constexpr const wchar_t kGetPreferredBrightnessRegValue[] = + L"AppsUseLightTheme"; + +// The number of Win32Window objects that currently exist. +static int g_active_window_count = 0; + +using EnableNonClientDpiScaling = BOOL __stdcall(HWND hwnd); + +// Scale helper to convert logical scaler values to physical using passed in +// scale factor +int Scale(int source, double scale_factor) { + return static_cast(source * scale_factor); +} + +// Dynamically loads the |EnableNonClientDpiScaling| from the User32 module. +// This API is only needed for PerMonitor V1 awareness mode. +void EnableFullDpiSupportIfAvailable(HWND hwnd) { + HMODULE user32_module = LoadLibraryA("User32.dll"); + if (!user32_module) { + return; + } + auto enable_non_client_dpi_scaling = + reinterpret_cast( + GetProcAddress(user32_module, "EnableNonClientDpiScaling")); + if (enable_non_client_dpi_scaling != nullptr) { + enable_non_client_dpi_scaling(hwnd); + } + FreeLibrary(user32_module); +} + +} // namespace + +// Manages the Win32Window's window class registration. +class WindowClassRegistrar { + public: + ~WindowClassRegistrar() = default; + + // Returns the singleton registrar instance. + static WindowClassRegistrar* GetInstance() { + if (!instance_) { + instance_ = new WindowClassRegistrar(); + } + return instance_; + } + + // Returns the name of the window class, registering the class if it hasn't + // previously been registered. + const wchar_t* GetWindowClass(); + + // Unregisters the window class. Should only be called if there are no + // instances of the window. + void UnregisterWindowClass(); + + private: + WindowClassRegistrar() = default; + + static WindowClassRegistrar* instance_; + + bool class_registered_ = false; +}; + +WindowClassRegistrar* WindowClassRegistrar::instance_ = nullptr; + +const wchar_t* WindowClassRegistrar::GetWindowClass() { + if (!class_registered_) { + WNDCLASS window_class{}; + window_class.hCursor = LoadCursor(nullptr, IDC_ARROW); + window_class.lpszClassName = kWindowClassName; + window_class.style = CS_HREDRAW | CS_VREDRAW; + window_class.cbClsExtra = 0; + window_class.cbWndExtra = 0; + window_class.hInstance = GetModuleHandle(nullptr); + window_class.hIcon = + LoadIcon(window_class.hInstance, MAKEINTRESOURCE(IDI_APP_ICON)); + window_class.hbrBackground = 0; + window_class.lpszMenuName = nullptr; + window_class.lpfnWndProc = Win32Window::WndProc; + RegisterClass(&window_class); + class_registered_ = true; + } + return kWindowClassName; +} + +void WindowClassRegistrar::UnregisterWindowClass() { + UnregisterClass(kWindowClassName, nullptr); + class_registered_ = false; +} + +Win32Window::Win32Window() { ++g_active_window_count; } + +Win32Window::~Win32Window() { + --g_active_window_count; + Destroy(); +} + +bool Win32Window::Create(const std::wstring& title, const Point& origin, + const Size& size) { + Destroy(); + + const wchar_t* window_class = + WindowClassRegistrar::GetInstance()->GetWindowClass(); + + const POINT target_point = {static_cast(origin.x), + static_cast(origin.y)}; + HMONITOR monitor = MonitorFromPoint(target_point, MONITOR_DEFAULTTONEAREST); + UINT dpi = FlutterDesktopGetDpiForMonitor(monitor); + double scale_factor = dpi / 96.0; + + HWND window = CreateWindow( + window_class, title.c_str(), WS_OVERLAPPEDWINDOW, + Scale(origin.x, scale_factor), Scale(origin.y, scale_factor), + Scale(size.width, scale_factor), Scale(size.height, scale_factor), + nullptr, nullptr, GetModuleHandle(nullptr), this); + + if (!window) { + return false; + } + + UpdateTheme(window); + + return OnCreate(); +} + +bool Win32Window::Show() { return ShowWindow(window_handle_, SW_SHOWNORMAL); } + +// static +LRESULT CALLBACK Win32Window::WndProc(HWND const window, UINT const message, + WPARAM const wparam, + LPARAM const lparam) noexcept { + if (message == WM_NCCREATE) { + auto window_struct = reinterpret_cast(lparam); + SetWindowLongPtr(window, GWLP_USERDATA, + reinterpret_cast(window_struct->lpCreateParams)); + + auto that = static_cast(window_struct->lpCreateParams); + EnableFullDpiSupportIfAvailable(window); + that->window_handle_ = window; + } else if (Win32Window* that = GetThisFromHandle(window)) { + return that->MessageHandler(window, message, wparam, lparam); + } + + return DefWindowProc(window, message, wparam, lparam); +} + +LRESULT +Win32Window::MessageHandler(HWND hwnd, UINT const message, WPARAM const wparam, + LPARAM const lparam) noexcept { + switch (message) { + case WM_DESTROY: + window_handle_ = nullptr; + Destroy(); + if (quit_on_close_) { + PostQuitMessage(0); + } + return 0; + + case WM_DPICHANGED: { + auto newRectSize = reinterpret_cast(lparam); + LONG newWidth = newRectSize->right - newRectSize->left; + LONG newHeight = newRectSize->bottom - newRectSize->top; + + SetWindowPos(hwnd, nullptr, newRectSize->left, newRectSize->top, newWidth, + newHeight, SWP_NOZORDER | SWP_NOACTIVATE); + + return 0; + } + case WM_SIZE: { + RECT rect = GetClientArea(); + if (child_content_ != nullptr) { + // Size and position the child window. + MoveWindow(child_content_, rect.left, rect.top, rect.right - rect.left, + rect.bottom - rect.top, TRUE); + } + return 0; + } + + case WM_ACTIVATE: + if (child_content_ != nullptr) { + SetFocus(child_content_); + } + return 0; + + case WM_DWMCOLORIZATIONCOLORCHANGED: + UpdateTheme(hwnd); + return 0; + } + + return DefWindowProc(window_handle_, message, wparam, lparam); +} + +void Win32Window::Destroy() { + OnDestroy(); + + if (window_handle_) { + DestroyWindow(window_handle_); + window_handle_ = nullptr; + } + if (g_active_window_count == 0) { + WindowClassRegistrar::GetInstance()->UnregisterWindowClass(); + } +} + +Win32Window* Win32Window::GetThisFromHandle(HWND const window) noexcept { + return reinterpret_cast( + GetWindowLongPtr(window, GWLP_USERDATA)); +} + +void Win32Window::SetChildContent(HWND content) { + child_content_ = content; + SetParent(content, window_handle_); + RECT frame = GetClientArea(); + + MoveWindow(content, frame.left, frame.top, frame.right - frame.left, + frame.bottom - frame.top, true); + + SetFocus(child_content_); +} + +RECT Win32Window::GetClientArea() { + RECT frame; + GetClientRect(window_handle_, &frame); + return frame; +} + +HWND Win32Window::GetHandle() { return window_handle_; } + +void Win32Window::SetQuitOnClose(bool quit_on_close) { + quit_on_close_ = quit_on_close; +} + +bool Win32Window::OnCreate() { + // No-op; provided for subclasses. + return true; +} + +void Win32Window::OnDestroy() { + // No-op; provided for subclasses. +} + +void Win32Window::UpdateTheme(HWND const window) { + DWORD light_mode; + DWORD light_mode_size = sizeof(light_mode); + LSTATUS result = + RegGetValue(HKEY_CURRENT_USER, kGetPreferredBrightnessRegKey, + kGetPreferredBrightnessRegValue, RRF_RT_REG_DWORD, nullptr, + &light_mode, &light_mode_size); + + if (result == ERROR_SUCCESS) { + BOOL enable_dark_mode = light_mode == 0; + DwmSetWindowAttribute(window, DWMWA_USE_IMMERSIVE_DARK_MODE, + &enable_dark_mode, sizeof(enable_dark_mode)); + } +} diff --git a/mih_ui/android/build/macos/SourcePackages/firebase_auth-6.5.4/example/windows/runner/win32_window.h b/mih_ui/android/build/macos/SourcePackages/firebase_auth-6.5.4/example/windows/runner/win32_window.h new file mode 100644 index 00000000..32aab58c --- /dev/null +++ b/mih_ui/android/build/macos/SourcePackages/firebase_auth-6.5.4/example/windows/runner/win32_window.h @@ -0,0 +1,106 @@ +/* + * Copyright 2023, the Chromium project authors. Please see the AUTHORS file + * for details. All rights reserved. Use of this source code is governed by a + * BSD-style license that can be found in the LICENSE file. + */ + +#ifndef RUNNER_WIN32_WINDOW_H_ +#define RUNNER_WIN32_WINDOW_H_ + +#include + +#include +#include +#include + +// A class abstraction for a high DPI-aware Win32 Window. Intended to be +// inherited from by classes that wish to specialize with custom +// rendering and input handling +class Win32Window { + public: + struct Point { + unsigned int x; + unsigned int y; + Point(unsigned int x, unsigned int y) : x(x), y(y) {} + }; + + struct Size { + unsigned int width; + unsigned int height; + Size(unsigned int width, unsigned int height) + : width(width), height(height) {} + }; + + Win32Window(); + virtual ~Win32Window(); + + // Creates a win32 window with |title| that is positioned and sized using + // |origin| and |size|. New windows are created on the default monitor. Window + // sizes are specified to the OS in physical pixels, hence to ensure a + // consistent size this function will scale the inputted width and height as + // as appropriate for the default monitor. The window is invisible until + // |Show| is called. Returns true if the window was created successfully. + bool Create(const std::wstring& title, const Point& origin, const Size& size); + + // Show the current window. Returns true if the window was successfully shown. + bool Show(); + + // Release OS resources associated with window. + void Destroy(); + + // Inserts |content| into the window tree. + void SetChildContent(HWND content); + + // Returns the backing Window handle to enable clients to set icon and other + // window properties. Returns nullptr if the window has been destroyed. + HWND GetHandle(); + + // If true, closing this window will quit the application. + void SetQuitOnClose(bool quit_on_close); + + // Return a RECT representing the bounds of the current client area. + RECT GetClientArea(); + + protected: + // Processes and route salient window messages for mouse handling, + // size change and DPI. Delegates handling of these to member overloads that + // inheriting classes can handle. + virtual LRESULT MessageHandler(HWND window, UINT const message, + WPARAM const wparam, + LPARAM const lparam) noexcept; + + // Called when CreateAndShow is called, allowing subclass window-related + // setup. Subclasses should return false if setup fails. + virtual bool OnCreate(); + + // Called when Destroy is called. + virtual void OnDestroy(); + + private: + friend class WindowClassRegistrar; + + // OS callback called by message pump. Handles the WM_NCCREATE message which + // is passed when the non-client area is being created and enables automatic + // non-client DPI scaling so that the non-client area automatically + // responds to changes in DPI. All other messages are handled by + // MessageHandler. + static LRESULT CALLBACK WndProc(HWND const window, UINT const message, + WPARAM const wparam, + LPARAM const lparam) noexcept; + + // Retrieves a class instance pointer for |window| + static Win32Window* GetThisFromHandle(HWND const window) noexcept; + + // Update the window frame's theme to match the system theme. + static void UpdateTheme(HWND const window); + + bool quit_on_close_ = false; + + // window handle for top level window. + HWND window_handle_ = nullptr; + + // window handle for hosted content. + HWND child_content_ = nullptr; +}; + +#endif // RUNNER_WIN32_WINDOW_H_ diff --git a/mih_ui/android/build/macos/SourcePackages/firebase_auth-6.5.4/ios/firebase_auth.podspec b/mih_ui/android/build/macos/SourcePackages/firebase_auth-6.5.4/ios/firebase_auth.podspec new file mode 100755 index 00000000..eba26315 --- /dev/null +++ b/mih_ui/android/build/macos/SourcePackages/firebase_auth-6.5.4/ios/firebase_auth.podspec @@ -0,0 +1,43 @@ +require 'yaml' + +pubspec = YAML.load_file(File.join('..', 'pubspec.yaml')) +library_version = pubspec['version'].gsub('+', '-') + +if defined?($FirebaseSDKVersion) + Pod::UI.puts "#{pubspec['name']}: Using user specified Firebase SDK version '#{$FirebaseSDKVersion}'" + firebase_sdk_version = $FirebaseSDKVersion +else + firebase_core_script = File.join(File.expand_path('..', File.expand_path('..', File.dirname(__FILE__))), 'firebase_core/ios/firebase_sdk_version.rb') + if File.exist?(firebase_core_script) + require firebase_core_script + firebase_sdk_version = firebase_sdk_version! + Pod::UI.puts "#{pubspec['name']}: Using Firebase SDK version '#{firebase_sdk_version}' defined in 'firebase_core'" + end +end + +Pod::Spec.new do |s| + s.name = pubspec['name'] + s.version = library_version + s.summary = pubspec['description'] + s.description = pubspec['description'] + s.homepage = pubspec['homepage'] + s.license = { :file => '../LICENSE' } + s.authors = 'The Chromium Authors' + s.source = { :path => '.' } + + s.source_files = 'firebase_auth/Sources/firebase_auth/**/*.{h,m}' + s.public_header_files = 'firebase_auth/Sources/firebase_auth/include/Public/**/*.h' + s.private_header_files = 'firebase_auth/Sources/firebase_auth/include/Private/**/*.h' + + s.ios.deployment_target = '15.0' + s.dependency 'Flutter' + + s.dependency 'firebase_core' + s.dependency 'Firebase/Auth', firebase_sdk_version + + s.static_framework = true + s.pod_target_xcconfig = { + 'GCC_PREPROCESSOR_DEFINITIONS' => "LIBRARY_VERSION=\\\"#{library_version}\\\" LIBRARY_NAME=\\\"flutter-fire-auth\\\"", + 'DEFINES_MODULE' => 'YES' + } +end diff --git a/mih_ui/android/build/macos/SourcePackages/firebase_auth-6.5.4/ios/firebase_auth/Package.swift b/mih_ui/android/build/macos/SourcePackages/firebase_auth-6.5.4/ios/firebase_auth/Package.swift new file mode 100644 index 00000000..9793367d --- /dev/null +++ b/mih_ui/android/build/macos/SourcePackages/firebase_auth-6.5.4/ios/firebase_auth/Package.swift @@ -0,0 +1,43 @@ +// swift-tools-version: 5.9 +// The swift-tools-version declares the minimum version of Swift required to build this package. + +// Copyright 2024, the Chromium project authors. Please see the AUTHORS file +// for details. All rights reserved. Use of this source code is governed by a +// BSD-style license that can be found in the LICENSE file. + +import PackageDescription + +let libraryVersion = "6.5.4" +let firebaseSdkVersion: Version = "12.15.0" + +let package = Package( + name: "firebase_auth", + platforms: [ + .iOS("15.0") + ], + products: [ + .library(name: "firebase-auth", targets: ["firebase_auth"]) + ], + dependencies: [ + .package(url: "https://github.com/firebase/firebase-ios-sdk", exact: firebaseSdkVersion), + .package(name: "firebase_core", path: "../firebase_core"), + ], + targets: [ + .target( + name: "firebase_auth", + dependencies: [ + .product(name: "FirebaseAuth", package: "firebase-ios-sdk"), + .product(name: "firebase-core", package: "firebase_core"), + ], + resources: [ + .process("Resources") + ], + cSettings: [ + .headerSearchPath("include/Private"), + .headerSearchPath("include/Public"), + .define("LIBRARY_VERSION", to: "\"\(libraryVersion)\""), + .define("LIBRARY_NAME", to: "\"flutter-fire-auth\""), + ] + ) + ] +) diff --git a/mih_ui/android/build/macos/SourcePackages/firebase_auth-6.5.4/ios/firebase_auth/Sources/firebase_auth/FLTAuthStateChannelStreamHandler.m b/mih_ui/android/build/macos/SourcePackages/firebase_auth-6.5.4/ios/firebase_auth/Sources/firebase_auth/FLTAuthStateChannelStreamHandler.m new file mode 100644 index 00000000..5ef9adaf --- /dev/null +++ b/mih_ui/android/build/macos/SourcePackages/firebase_auth-6.5.4/ios/firebase_auth/Sources/firebase_auth/FLTAuthStateChannelStreamHandler.m @@ -0,0 +1,56 @@ +// Copyright 2021 The Chromium Authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. +@import FirebaseAuth; +#import "include/Private/FLTAuthStateChannelStreamHandler.h" +#import +#import "include/Private/PigeonParser.h" +#import "include/Public/FLTFirebaseAuthPlugin.h" + +@implementation FLTAuthStateChannelStreamHandler { + FIRAuth *_auth; + FIRAuthStateDidChangeListenerHandle _listener; +} + +- (instancetype)initWithAuth:(FIRAuth *)auth { + self = [super init]; + if (self) { + _auth = auth; + } + return self; +} + +- (FlutterError *)onListenWithArguments:(id)arguments eventSink:(FlutterEventSink)events { + bool __block initialAuthState = YES; + + _listener = [_auth addAuthStateDidChangeListener:^(FIRAuth *_Nonnull auth, + FIRUser *_Nullable user) { + if (initialAuthState) { + initialAuthState = NO; + return; + } + + if (user) { + events(@{ + @"user" : [PigeonParser getManualList:[PigeonParser getPigeonDetails:[auth currentUser]]] + }); + } else { + events(@{ + @"user" : [NSNull null], + }); + } + }]; + + return nil; +} + +- (FlutterError *)onCancelWithArguments:(id)arguments { + if (_listener) { + [_auth removeAuthStateDidChangeListener:_listener]; + } + _listener = nil; + + return nil; +} + +@end diff --git a/mih_ui/android/build/macos/SourcePackages/firebase_auth-6.5.4/ios/firebase_auth/Sources/firebase_auth/FLTFirebaseAuthPlugin.m b/mih_ui/android/build/macos/SourcePackages/firebase_auth-6.5.4/ios/firebase_auth/Sources/firebase_auth/FLTFirebaseAuthPlugin.m new file mode 100644 index 00000000..606dda68 --- /dev/null +++ b/mih_ui/android/build/macos/SourcePackages/firebase_auth-6.5.4/ios/firebase_auth/Sources/firebase_auth/FLTFirebaseAuthPlugin.m @@ -0,0 +1,2376 @@ +// Copyright 2020 The Chromium Authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +@import FirebaseAuth; +#import +#import +#if __has_include() +#import +#else +#import +#endif + +#import "include/Private/FLTAuthStateChannelStreamHandler.h" +#import "include/Private/FLTIdTokenChannelStreamHandler.h" +#import "include/Private/FLTPhoneNumberVerificationStreamHandler.h" +#import "include/Private/PigeonParser.h" + +#import "include/Public/CustomPigeonHeader.h" +#import "include/Public/FLTFirebaseAuthPlugin.h" +@import CommonCrypto; +#import + +#if __has_include() +#import +#else +#import +#endif + +NSString *const kFLTFirebaseAuthChannelName = @"plugins.flutter.io/firebase_auth"; + +// Argument Keys +NSString *const kAppName = @"appName"; + +// Provider type keys. +NSString *const kSignInMethodPassword = @"password"; +NSString *const kSignInMethodEmailLink = @"emailLink"; +NSString *const kSignInMethodFacebook = @"facebook.com"; +NSString *const kSignInMethodGoogle = @"google.com"; +NSString *const kSignInMethodGameCenter = @"gc.apple.com"; +NSString *const kSignInMethodTwitter = @"twitter.com"; +NSString *const kSignInMethodGithub = @"github.com"; +NSString *const kSignInMethodApple = @"apple.com"; +NSString *const kSignInMethodPhone = @"phone"; +NSString *const kSignInMethodOAuth = @"oauth"; + +// Credential argument keys. +NSString *const kArgumentCredential = @"credential"; +NSString *const kArgumentProviderId = @"providerId"; +NSString *const kArgumentProviderScope = @"scopes"; +NSString *const kArgumentProviderCustomParameters = @"customParameters"; +NSString *const kArgumentSignInMethod = @"signInMethod"; +NSString *const kArgumentSecret = @"secret"; +NSString *const kArgumentIdToken = @"idToken"; +NSString *const kArgumentAccessToken = @"accessToken"; +NSString *const kArgumentRawNonce = @"rawNonce"; +NSString *const kArgumentEmail = @"email"; +NSString *const kArgumentCode = @"code"; +NSString *const kArgumentNewEmail = @"newEmail"; +NSString *const kArgumentEmailLink = kSignInMethodEmailLink; +NSString *const kArgumentToken = @"token"; +NSString *const kArgumentVerificationId = @"verificationId"; +NSString *const kArgumentSmsCode = @"smsCode"; +NSString *const kArgumentActionCodeSettings = @"actionCodeSettings"; +NSString *const kArgumentFamilyName = @"familyName"; +NSString *const kArgumentGivenName = @"givenName"; +NSString *const kArgumentMiddleName = @"middleName"; +NSString *const kArgumentNickname = @"nickname"; +NSString *const kArgumentNamePrefix = @"namePrefix"; +NSString *const kArgumentNameSuffix = @"nameSuffix"; + +// MultiFactor +NSString *const kArgumentMultiFactorHints = @"multiFactorHints"; +NSString *const kArgumentMultiFactorSessionId = @"multiFactorSessionId"; +NSString *const kArgumentMultiFactorResolverId = @"multiFactorResolverId"; +NSString *const kArgumentMultiFactorInfo = @"multiFactorInfo"; + +// Manual error codes & messages. +NSString *const kErrCodeNoCurrentUser = @"no-current-user"; +NSString *const kErrMsgNoCurrentUser = @"No user currently signed in."; +NSString *const kErrCodeInvalidCredential = @"invalid-credential"; +NSString *const kErrMsgInvalidCredential = + @"The supplied auth credential is malformed, has expired or is not " + @"currently supported."; + +// Used for caching credentials between Method Channel method calls. +static NSMutableDictionary *credentialsMap; + +@interface FLTFirebaseAuthPlugin () +@property(nonatomic, retain) NSObject *messenger; +@property(strong, nonatomic) FIROAuthProvider *authProvider; +// Used to keep the user who wants to link with Apple Sign In +@property(strong, nonatomic) FIRUser *linkWithAppleUser; +@property(strong, nonatomic) FIRAuth *signInWithAppleAuth; +@property BOOL isReauthenticatingWithApple; +@property(strong, nonatomic) NSString *currentNonce; +@property(strong, nonatomic) void (^appleCompletion) + (InternalUserCredential *_Nullable, FlutterError *_Nullable); +@property(strong, nonatomic) AuthPigeonFirebaseApp *appleArguments; +/// YES while an `ASAuthorizationController` Sign in with Apple flow is active. +@property(nonatomic, assign) BOOL appleSignInRequestInFlight; + +@end + +@implementation FLTFirebaseAuthPlugin { + // Map an id to a MultiFactorSession object. + NSMutableDictionary *_multiFactorSessionMap; + + // Map an id to a MultiFactorResolver object. + NSMutableDictionary *_multiFactorResolverMap; + + // Map an id to a MultiFactorResolver object. + NSMutableDictionary *_multiFactorAssertionMap; + + // Map an id to a MultiFactorResolver object. + NSMutableDictionary *_multiFactorTotpSecretMap; + + // Emulator host/port per app, used to build REST URLs for workarounds. + NSMutableDictionary *_emulatorConfigs; + + NSObject *_binaryMessenger; + NSMutableDictionary *_eventChannels; + NSMutableDictionary *> *_streamHandlers; + NSData *_apnsToken; +} + +#pragma mark - FlutterPlugin + +- (instancetype)init:(NSObject *)messenger { + self = [super init]; + if (self) { + [[FLTFirebasePluginRegistry sharedInstance] registerFirebasePlugin:self]; + credentialsMap = [NSMutableDictionary dictionary]; + _binaryMessenger = messenger; + _eventChannels = [NSMutableDictionary dictionary]; + _streamHandlers = [NSMutableDictionary dictionary]; + + _multiFactorSessionMap = [NSMutableDictionary dictionary]; + _multiFactorResolverMap = [NSMutableDictionary dictionary]; + _multiFactorAssertionMap = [NSMutableDictionary dictionary]; + _multiFactorTotpSecretMap = [NSMutableDictionary dictionary]; + _emulatorConfigs = [NSMutableDictionary dictionary]; + } + return self; +} + ++ (void)registerWithRegistrar:(NSObject *)registrar { + FlutterMethodChannel *channel = + [FlutterMethodChannel methodChannelWithName:kFLTFirebaseAuthChannelName + binaryMessenger:[registrar messenger]]; + FLTFirebaseAuthPlugin *instance = [[FLTFirebaseAuthPlugin alloc] init:registrar.messenger]; + + [registrar addMethodCallDelegate:instance channel:channel]; + + [registrar publish:instance]; + [registrar addApplicationDelegate:instance]; +#if !TARGET_OS_OSX + if (@available(iOS 13.0, *)) { + if ([registrar respondsToSelector:@selector(addSceneDelegate:)]) { + [registrar performSelector:@selector(addSceneDelegate:) withObject:instance]; + } + } +#endif + SetUpFirebaseAuthHostApi(registrar.messenger, instance); + SetUpFirebaseAuthUserHostApi(registrar.messenger, instance); + SetUpMultiFactorUserHostApi(registrar.messenger, instance); + SetUpMultiFactoResolverHostApi(registrar.messenger, instance); + SetUpMultiFactorTotpHostApi(registrar.messenger, instance); + SetUpMultiFactorTotpSecretHostApi(registrar.messenger, instance); +} + ++ (FlutterError *)convertToFlutterError:(NSError *)error { + NSString *code = @"unknown"; + NSString *message = @"An unknown error has occurred."; + + if (error == nil) { + return [FlutterError errorWithCode:code message:message details:@{}]; + } + + // code + if ([error userInfo][FIRAuthErrorUserInfoNameKey] != nil) { + // See [FIRAuthErrorCodeString] for list of codes. + // Codes are in the format "ERROR_SOME_NAME", converting below to the format + // required in Dart. ERROR_SOME_NAME -> SOME_NAME + NSString *firebaseErrorCode = [error userInfo][FIRAuthErrorUserInfoNameKey]; + code = [firebaseErrorCode stringByReplacingOccurrencesOfString:@"ERROR_" withString:@""]; + // SOME_NAME -> SOME-NAME + code = [code stringByReplacingOccurrencesOfString:@"_" withString:@"-"]; + // SOME-NAME -> some-name + code = [code lowercaseString]; + } + + // message + if ([error userInfo][NSLocalizedDescriptionKey] != nil) { + message = [error userInfo][NSLocalizedDescriptionKey]; + } + + NSMutableDictionary *additionalData = [NSMutableDictionary dictionary]; + // additionalData.email + if ([error userInfo][FIRAuthErrorUserInfoEmailKey] != nil) { + additionalData[kArgumentEmail] = [error userInfo][FIRAuthErrorUserInfoEmailKey]; + } + // We want to store the credential if present for future sign in if the exception contains a + // credential, we pass a token back to Flutter to allow retrieval of the credential. + NSNumber *token = [FLTFirebaseAuthPlugin storeAuthCredentialIfPresent:error]; + + // additionalData.authCredential + if ([error userInfo][FIRAuthErrorUserInfoUpdatedCredentialKey] != nil) { + FIRAuthCredential *authCredential = [error userInfo][FIRAuthErrorUserInfoUpdatedCredentialKey]; + additionalData[@"authCredential"] = [PigeonParser getPigeonAuthCredential:authCredential + token:token]; + } + + // Manual message overrides to ensure messages/codes matches other platforms. + if ([message isEqual:@"The password must be 6 characters long or more."]) { + message = @"Password should be at least 6 characters"; + } + + return [FlutterError errorWithCode:code message:message details:additionalData]; +} + ++ (id)getNSDictionaryFromAuthCredential:(FIRAuthCredential *)authCredential { + if (authCredential == nil) { + return [NSNull null]; + } + + NSString *accessToken = nil; + if ([authCredential isKindOfClass:[FIROAuthCredential class]]) { + if (((FIROAuthCredential *)authCredential).accessToken != nil) { + accessToken = ((FIROAuthCredential *)authCredential).accessToken; + } else if (((FIROAuthCredential *)authCredential).IDToken != nil) { + // For Sign In With Apple, the token is stored in IDToken + accessToken = ((FIROAuthCredential *)authCredential).IDToken; + } + } + + return @{ + kArgumentProviderId : authCredential.provider, + // Note: "signInMethod" does not exist on iOS SDK, so using provider + // instead. + kArgumentSignInMethod : authCredential.provider, + kArgumentToken : @([authCredential hash]), + kArgumentAccessToken : accessToken ?: [NSNull null], + }; +} + +- (void)cleanupWithCompletion:(void (^)(void))completion { + // Cleanup credentials. + [credentialsMap removeAllObjects]; + + for (FlutterEventChannel *channel in self->_eventChannels.allValues) { + [channel setStreamHandler:nil]; + } + [self->_eventChannels removeAllObjects]; + for (NSObject *handler in self->_streamHandlers.allValues) { + [handler onCancelWithArguments:nil]; + } + [self->_streamHandlers removeAllObjects]; + + if (completion != nil) completion(); +} + +- (void)detachFromEngineForRegistrar:(NSObject *)registrar { + [self cleanupWithCompletion:nil]; +} + +#pragma mark - AppDelegate + +#if TARGET_OS_IPHONE +#if !__has_include() +- (BOOL)application:(UIApplication *)application + didReceiveRemoteNotification:(NSDictionary *)notification + fetchCompletionHandler:(void (^)(UIBackgroundFetchResult result))completionHandler { + if ([[FIRAuth auth] canHandleNotification:notification]) { + completionHandler(UIBackgroundFetchResultNoData); + return YES; + } + return NO; +} +#endif + +- (void)application:(UIApplication *)application + didRegisterForRemoteNotificationsWithDeviceToken:(NSData *)deviceToken { + _apnsToken = deviceToken; +} + +- (BOOL)application:(UIApplication *)app openURL:(NSURL *)url options:(NSDictionary *)options { + return [[FIRAuth auth] canHandleURL:url]; +} + +#pragma mark - SceneDelegate + +- (BOOL)scene:(UIScene *)scene + openURLContexts:(NSSet *)URLContexts API_AVAILABLE(ios(13.0)) { + for (UIOpenURLContext *urlContext in URLContexts) { + if ([[FIRAuth auth] canHandleURL:urlContext.URL]) { + return YES; + } + } + return NO; +} +#endif + +#pragma mark - FLTFirebasePlugin + +- (void)didReinitializeFirebaseCore:(void (^_Nonnull)(void))completion { + [self cleanupWithCompletion:completion]; +} + +- (NSString *_Nonnull)firebaseLibraryName { + return @LIBRARY_NAME; +} + +- (NSString *_Nonnull)firebaseLibraryVersion { + return @LIBRARY_VERSION; +} + +- (NSString *_Nonnull)flutterChannelName { + return kFLTFirebaseAuthChannelName; +} + +- (NSDictionary *_Nonnull)pluginConstantsForFIRApp:(FIRApp *_Nonnull)firebaseApp { + FIRAuth *auth = [FIRAuth authWithApp:firebaseApp]; + return @{ + @"APP_LANGUAGE_CODE" : (id)[auth languageCode] ?: [NSNull null], + @"APP_CURRENT_USER" : [auth currentUser] + ? [PigeonParser getManualList:[PigeonParser getPigeonDetails:[auth currentUser]]] + : [NSNull null], + }; +} + +#pragma mark - Firebase Auth API + +// Adapted from +// https://auth0.com/docs/api-auth/tutorials/nonce#generate-a-cryptographically-random-nonce Used +// for Apple Sign In +- (NSString *)randomNonce:(NSInteger)length { + NSAssert(length > 0, @"Expected nonce to have positive length"); + NSString *characterSet = @"0123456789ABCDEFGHIJKLMNOPQRSTUVXYZabcdefghijklmnopqrstuvwxyz-._"; + NSMutableString *result = [NSMutableString string]; + NSInteger remainingLength = length; + + while (remainingLength > 0) { + NSMutableArray *randoms = [NSMutableArray arrayWithCapacity:16]; + for (NSInteger i = 0; i < 16; i++) { + uint8_t random = 0; + int errorCode = SecRandomCopyBytes(kSecRandomDefault, 1, &random); + NSAssert(errorCode == errSecSuccess, @"Unable to generate nonce: OSStatus %i", errorCode); + + [randoms addObject:@(random)]; + } + + for (NSNumber *random in randoms) { + if (remainingLength == 0) { + break; + } + + if (random.unsignedIntValue < characterSet.length) { + unichar character = [characterSet characterAtIndex:random.unsignedIntValue]; + [result appendFormat:@"%C", character]; + remainingLength--; + } + } + } + + return [result copy]; +} + +- (NSString *)stringBySha256HashingString:(NSString *)input { + const char *string = [input UTF8String]; + unsigned char result[CC_SHA256_DIGEST_LENGTH]; + CC_SHA256(string, (CC_LONG)strlen(string), result); + + NSMutableString *hashed = [NSMutableString stringWithCapacity:CC_SHA256_DIGEST_LENGTH * 2]; + for (NSInteger i = 0; i < CC_SHA256_DIGEST_LENGTH; i++) { + [hashed appendFormat:@"%02x", result[i]]; + } + return hashed; +} + +static void handleSignInWithApple(FLTFirebaseAuthPlugin *object, FIRAuthDataResult *authResult, + NSString *authorizationCode, NSError *error) { + void (^completion)(InternalUserCredential *_Nullable, FlutterError *_Nullable) = + object.appleCompletion; + if (completion == nil) { + object.appleSignInRequestInFlight = NO; + return; + } + + if (error != nil) { + if (error.code == FIRAuthErrorCodeSecondFactorRequired) { + object.appleCompletion = nil; + object.appleSignInRequestInFlight = NO; + [object handleMultiFactorError:object.appleArguments completion:completion withError:error]; + } else { + object.appleCompletion = nil; + object.appleSignInRequestInFlight = NO; + completion(nil, [FLTFirebaseAuthPlugin convertToFlutterError:error]); + } + return; + } + object.appleCompletion = nil; + object.appleSignInRequestInFlight = NO; + completion([PigeonParser getPigeonUserCredentialFromAuthResult:authResult + authorizationCode:authorizationCode], + nil); +} + +- (void)authorizationController:(ASAuthorizationController *)controller + didCompleteWithAuthorization:(ASAuthorization *)authorization + API_AVAILABLE(macos(10.15), ios(13.0)) { + if ([authorization.credential isKindOfClass:[ASAuthorizationAppleIDCredential class]]) { + ASAuthorizationAppleIDCredential *appleIDCredential = authorization.credential; + NSString *rawNonce = self.currentNonce; + NSAssert(rawNonce != nil, + @"Invalid state: A login callback was received, but no login request was sent."); + + if (appleIDCredential.identityToken == nil) { + NSLog(@"Unable to fetch identity token."); + void (^completion)(InternalUserCredential *_Nullable, FlutterError *_Nullable) = + self.appleCompletion; + self.appleCompletion = nil; + self.appleSignInRequestInFlight = NO; + if (completion != nil) { + completion(nil, [FlutterError errorWithCode:kErrCodeInvalidCredential + message:kErrMsgInvalidCredential + details:nil]); + } + return; + } + + NSString *idToken = [[NSString alloc] initWithData:appleIDCredential.identityToken + encoding:NSUTF8StringEncoding]; + if (idToken == nil) { + NSLog(@"Unable to serialize id token from data: %@", appleIDCredential.identityToken); + } + + NSString *authorizationCode = nil; + if (appleIDCredential.authorizationCode != nil) { + authorizationCode = [[NSString alloc] initWithData:appleIDCredential.authorizationCode + encoding:NSUTF8StringEncoding]; + } + + FIROAuthCredential *credential = + [FIROAuthProvider appleCredentialWithIDToken:idToken + rawNonce:rawNonce + fullName:appleIDCredential.fullName]; + + if (self.isReauthenticatingWithApple == YES) { + self.isReauthenticatingWithApple = NO; + void (^capturedCompletion)(InternalUserCredential *_Nullable, FlutterError *_Nullable) = + self.appleCompletion; + [[FIRAuth.auth currentUser] + reauthenticateWithCredential:credential + completion:^(FIRAuthDataResult *_Nullable authResult, + NSError *_Nullable error) { + handleSignInWithApple(self, authResult, authorizationCode, error); + }]; + + } else if (self.linkWithAppleUser != nil) { + FIRUser *userToLink = self.linkWithAppleUser; + void (^capturedCompletion)(InternalUserCredential *_Nullable, FlutterError *_Nullable) = + self.appleCompletion; + [userToLink linkWithCredential:credential + completion:^(FIRAuthDataResult *authResult, NSError *error) { + self.linkWithAppleUser = nil; + handleSignInWithApple(self, authResult, authorizationCode, error); + }]; + + } else { + FIRAuth *signInAuth = + self.signInWithAppleAuth != nil ? self.signInWithAppleAuth : FIRAuth.auth; + void (^capturedCompletion)(InternalUserCredential *_Nullable, FlutterError *_Nullable) = + self.appleCompletion; + [signInAuth signInWithCredential:credential + completion:^(FIRAuthDataResult *_Nullable authResult, + NSError *_Nullable error) { + self.signInWithAppleAuth = nil; + handleSignInWithApple(self, authResult, authorizationCode, error); + }]; + } + } else { + void (^completion)(InternalUserCredential *_Nullable, FlutterError *_Nullable) = + self.appleCompletion; + self.appleCompletion = nil; + self.appleSignInRequestInFlight = NO; + if (completion != nil) { + completion(nil, [FlutterError errorWithCode:kErrCodeInvalidCredential + message:kErrMsgInvalidCredential + details:nil]); + } + } +} + +- (void)authorizationController:(ASAuthorizationController *)controller + didCompleteWithError:(NSError *)error API_AVAILABLE(macos(10.15), ios(13.0)) { + void (^completion)(InternalUserCredential *_Nullable, FlutterError *_Nullable) = + self.appleCompletion; + self.appleCompletion = nil; + self.appleSignInRequestInFlight = NO; + + NSLog(@"Sign in with Apple errored: %@", error); + if (completion == nil) { + return; + } + + switch (error.code) { + case ASAuthorizationErrorCanceled: + completion(nil, [FlutterError errorWithCode:@"canceled" + message:@"The user canceled the authorization attempt." + details:nil]); + break; + + case ASAuthorizationErrorInvalidResponse: + completion(nil, [FlutterError + errorWithCode:@"invalid-response" + message:@"The authorization request received an invalid response." + details:nil]); + break; + + case ASAuthorizationErrorNotHandled: + completion(nil, [FlutterError errorWithCode:@"not-handled" + message:@"The authorization request wasn’t handled." + details:nil]); + break; + + case ASAuthorizationErrorFailed: + completion(nil, [FlutterError errorWithCode:@"failed" + message:@"The authorization attempt failed." + details:nil]); + break; + + case ASAuthorizationErrorUnknown: + default: + completion(nil, [FLTFirebaseAuthPlugin convertToFlutterError:error]); + break; + } +} + +- (void)handleInternalError:(nonnull void (^)(InternalUserCredential *_Nullable, + FlutterError *_Nullable))completion + withError:(NSError *)error { + const NSError *underlyingError = error.userInfo[@"NSUnderlyingError"]; + if (underlyingError != nil) { + const NSDictionary *details = + underlyingError.userInfo[@"FIRAuthErrorUserInfoDeserializedResponseKey"]; + completion(nil, [FlutterError errorWithCode:@"internal-error" + message:error.description + details:details]); + return; + } + completion(nil, [FlutterError errorWithCode:@"internal-error" + message:error.description + details:nil]); +} + +- (void)handleMultiFactorError:(AuthPigeonFirebaseApp *)app + completion:(nonnull void (^)(InternalUserCredential *_Nullable, + FlutterError *_Nullable))completion + withError:(NSError *_Nullable)error { + FIRMultiFactorResolver *resolver = + (FIRMultiFactorResolver *)error.userInfo[FIRAuthErrorUserInfoMultiFactorResolverKey]; + + NSArray *hints = resolver.hints; + FIRMultiFactorSession *session = resolver.session; + + NSString *sessionId = [[NSUUID UUID] UUIDString]; + self->_multiFactorSessionMap[sessionId] = session; + + NSString *resolverId = [[NSUUID UUID] UUIDString]; + self->_multiFactorResolverMap[resolverId] = resolver; + + NSMutableArray *pigeonHints = [NSMutableArray array]; + + for (FIRMultiFactorInfo *multiFactorInfo in hints) { + NSString *phoneNumber; + if ([multiFactorInfo class] == [FIRPhoneMultiFactorInfo class]) { + FIRPhoneMultiFactorInfo *phoneFactorInfo = (FIRPhoneMultiFactorInfo *)multiFactorInfo; + phoneNumber = phoneFactorInfo.phoneNumber; + } + + InternalMultiFactorInfo *object = [InternalMultiFactorInfo + makeWithDisplayName:multiFactorInfo.displayName + enrollmentTimestamp:multiFactorInfo.enrollmentDate.timeIntervalSince1970 + factorId:multiFactorInfo.factorID + uid:multiFactorInfo.UID + phoneNumber:phoneNumber]; + + [pigeonHints addObject:object.toList]; + } + + NSDictionary *output = @{ + kAppName : app.appName, + kArgumentMultiFactorHints : pigeonHints, + kArgumentMultiFactorSessionId : sessionId, + kArgumentMultiFactorResolverId : resolverId, + }; + completion(nil, [FlutterError errorWithCode:@"second-factor-required" + message:error.description + details:output]); +} + +static void launchAppleSignInRequest(FLTFirebaseAuthPlugin *object, AuthPigeonFirebaseApp *app, + InternalSignInProvider *signInProvider, + void (^_Nonnull completion)(InternalUserCredential *_Nullable, + FlutterError *_Nullable)) { + if (@available(iOS 13.0, macOS 10.15, *)) { + if (object.appleSignInRequestInFlight) { + completion(nil, + [FlutterError errorWithCode:@"operation-not-allowed" + message:@"A Sign in with Apple request is already in progress." + details:nil]); + return; + } + + NSString *nonce = [object randomNonce:32]; + object.currentNonce = nonce; + object.appleCompletion = completion; + object.appleArguments = app; + object.appleSignInRequestInFlight = YES; + + ASAuthorizationAppleIDProvider *appleIDProvider = [[ASAuthorizationAppleIDProvider alloc] init]; + + ASAuthorizationAppleIDRequest *request = [appleIDProvider createRequest]; + NSMutableArray *requestedScopes = [NSMutableArray arrayWithCapacity:2]; + if ([signInProvider.scopes containsObject:@"name"]) { + [requestedScopes addObject:ASAuthorizationScopeFullName]; + } + if ([signInProvider.scopes containsObject:@"email"]) { + [requestedScopes addObject:ASAuthorizationScopeEmail]; + } + request.requestedScopes = [requestedScopes copy]; + request.nonce = [object stringBySha256HashingString:nonce]; + + ASAuthorizationController *authorizationController = + [[ASAuthorizationController alloc] initWithAuthorizationRequests:@[ request ]]; + authorizationController.delegate = object; + authorizationController.presentationContextProvider = object; + [authorizationController performRequests]; + } else { + NSLog(@"Sign in with Apple was introduced in iOS 13, update your Podfile with platform :ios, " + @"'13.0'"); + } +} + +static void handleAppleAuthResult(FLTFirebaseAuthPlugin *object, AuthPigeonFirebaseApp *app, + FIRAuth *auth, FIRAuthCredential *credentials, NSError *error, + void (^_Nonnull completion)(InternalUserCredential *_Nullable, + FlutterError *_Nullable)) { + if (error) { + if (error.code == FIRAuthErrorCodeSecondFactorRequired) { + [object handleMultiFactorError:app completion:completion withError:error]; + } else { + completion(nil, [FLTFirebaseAuthPlugin convertToFlutterError:error]); + } + return; + } + if (credentials) { + [auth + signInWithCredential:credentials + completion:^(FIRAuthDataResult *authResult, NSError *error) { + if (error != nil) { + NSDictionary *userInfo = [error userInfo]; + NSError *underlyingError = [userInfo objectForKey:NSUnderlyingErrorKey]; + + NSDictionary *firebaseDictionary = + underlyingError.userInfo[@"FIRAuthErrorUserInfoDes" + @"erializedResponseKey"]; + + NSString *errorCode = userInfo[@"FIRAuthErrorUserInfoNameKey"]; + + if (firebaseDictionary == nil && errorCode != nil) { + if ([errorCode isEqual:@"ERROR_ACCOUNT_EXISTS_WITH_DIFFERENT_CREDENTIAL"]) { + completion(nil, [FLTFirebaseAuthPlugin convertToFlutterError:error]); + return; + } + + // Removing since it's not parsed and causing issue when sending back the + // object to Flutter + NSMutableDictionary *mutableUserInfo = [userInfo mutableCopy]; + [mutableUserInfo + removeObjectForKey:@"FIRAuthErrorUserInfoUpdatedCredentialKey"]; + NSError *modifiedError = [NSError errorWithDomain:error.domain + code:error.code + userInfo:mutableUserInfo]; + + completion(nil, + [FlutterError errorWithCode:@"sign-in-failed" + message:userInfo[@"NSLocalizedDescription"] + details:modifiedError.userInfo]); + + } else if (firebaseDictionary != nil && + firebaseDictionary[@"message"] != nil) { + // error from firebase-ios-sdk is + // buried in underlying error. + completion(nil, + [FlutterError errorWithCode:@"sign-in-failed" + message:error.localizedDescription + details:firebaseDictionary[@"message"]]); + } else { + completion(nil, [FlutterError errorWithCode:@"sign-in-failed" + message:error.localizedDescription + details:error.userInfo]); + } + } else { + completion([PigeonParser getPigeonUserCredentialFromAuthResult:authResult + authorizationCode:nil], + nil); + } + }]; + } +} + +#pragma mark - Utilities + ++ (NSNumber *_Nullable)storeAuthCredentialIfPresent:(NSError *)error { + if ([error userInfo][FIRAuthErrorUserInfoUpdatedCredentialKey] != nil) { + FIRAuthCredential *authCredential = [error userInfo][FIRAuthErrorUserInfoUpdatedCredentialKey]; + // We temporarily store the non-serializable credential so the + // Dart API can consume these at a later time. + NSNumber *authCredentialHash = @([authCredential hash]); + credentialsMap[authCredentialHash] = authCredential; + return authCredentialHash; + } + return nil; +} + +- (FIRAuth *_Nullable)getFIRAuthFromAppNameFromPigeon:(AuthPigeonFirebaseApp *)pigeonApp { + FIRApp *app = [FLTFirebasePlugin firebaseAppNamed:pigeonApp.appName]; + FIRAuth *auth = [FIRAuth authWithApp:app]; + + auth.tenantID = pigeonApp.tenantId; + auth.customAuthDomain = [FLTFirebaseCorePlugin getCustomDomain:app.name]; + // Auth's `customAuthDomain` supersedes value from `getCustomDomain` set by `initializeApp` + if (pigeonApp.customAuthDomain != nil) { + auth.customAuthDomain = pigeonApp.customAuthDomain; + } + + return auth; +} + +- (void)getFIRAuthCredentialFromArguments:(NSDictionary *)arguments + app:(AuthPigeonFirebaseApp *)app + completion:(void (^)(FIRAuthCredential *credential, + NSError *error))completion { + // If the credential dictionary contains a token, it means a native one has + // been stored for later usage, so we'll attempt to retrieve it here. + if (arguments[kArgumentToken] != nil && ![arguments[kArgumentToken] isEqual:[NSNull null]]) { + NSNumber *credentialHashCode = arguments[kArgumentToken]; + if (credentialsMap[credentialHashCode] != nil) { + completion(credentialsMap[credentialHashCode], nil); + return; + } + } + + NSString *signInMethod = arguments[kArgumentSignInMethod]; + + if ([signInMethod isEqualToString:kSignInMethodGameCenter]) { + // Game Center Games is different to other providers, it requires below callback to get a + // credential. This is why getFIRAuthCredentialFromArguments now requires a completion() + // callback + [FIRGameCenterAuthProvider + getCredentialWithCompletion:^(FIRAuthCredential *credential, NSError *error) { + if (error) { + completion(nil, error); + } else { + completion(credential, nil); + } + }]; + return; + } + + NSString *secret = arguments[kArgumentSecret] == [NSNull null] ? nil : arguments[kArgumentSecret]; + NSString *idToken = + arguments[kArgumentIdToken] == [NSNull null] ? nil : arguments[kArgumentIdToken]; + NSString *accessToken = + arguments[kArgumentAccessToken] == [NSNull null] ? nil : arguments[kArgumentAccessToken]; + NSString *rawNonce = + arguments[kArgumentRawNonce] == [NSNull null] ? nil : arguments[kArgumentRawNonce]; + + // Password Auth + if ([signInMethod isEqualToString:kSignInMethodPassword]) { + NSString *email = arguments[kArgumentEmail]; + completion([FIREmailAuthProvider credentialWithEmail:email password:secret], nil); + return; + } + + // Email Link Auth + if ([signInMethod isEqualToString:kSignInMethodEmailLink]) { + NSString *email = arguments[kArgumentEmail]; + NSString *emailLink = arguments[kArgumentEmailLink]; + completion([FIREmailAuthProvider credentialWithEmail:email link:emailLink], nil); + return; + } + + // Facebook Auth + if ([signInMethod isEqualToString:kSignInMethodFacebook]) { + completion([FIRFacebookAuthProvider credentialWithAccessToken:accessToken], nil); + return; + } + + // Google Auth + if ([signInMethod isEqualToString:kSignInMethodGoogle]) { + completion([FIRGoogleAuthProvider credentialWithIDToken:idToken accessToken:accessToken], nil); + return; + } + + // Twitter Auth + if ([signInMethod isEqualToString:kSignInMethodTwitter]) { + completion([FIRTwitterAuthProvider credentialWithToken:accessToken secret:secret], nil); + return; + } + + // GitHub Auth + if ([signInMethod isEqualToString:kSignInMethodGithub]) { + completion([FIRGitHubAuthProvider credentialWithToken:accessToken], nil); + return; + } + + // Phone Auth - Only supported on iOS + if ([signInMethod isEqualToString:kSignInMethodPhone]) { +#if TARGET_OS_IPHONE + NSString *verificationId = arguments[kArgumentVerificationId]; + NSString *smsCode = arguments[kArgumentSmsCode]; + completion([[FIRPhoneAuthProvider providerWithAuth:[self getFIRAuthFromAppNameFromPigeon:app]] + credentialWithVerificationID:verificationId + verificationCode:smsCode], + nil); + return; +#else + NSLog(@"The Firebase Phone Authentication provider is not supported on the " + @"MacOS platform."); + completion(nil, nil); + return; +#endif + } + // Apple Auth + if ([signInMethod isEqualToString:kSignInMethodApple]) { + if (idToken && rawNonce) { + // Credential with idToken, rawNonce and fullName + NSPersonNameComponents *fullName = [[NSPersonNameComponents alloc] init]; + fullName.givenName = + arguments[kArgumentGivenName] == [NSNull null] ? nil : arguments[kArgumentGivenName]; + fullName.familyName = + arguments[kArgumentFamilyName] == [NSNull null] ? nil : arguments[kArgumentFamilyName]; + fullName.nickname = + arguments[kArgumentNickname] == [NSNull null] ? nil : arguments[kArgumentNickname]; + fullName.namePrefix = + arguments[kArgumentNamePrefix] == [NSNull null] ? nil : arguments[kArgumentNamePrefix]; + fullName.nameSuffix = + arguments[kArgumentNameSuffix] == [NSNull null] ? nil : arguments[kArgumentNameSuffix]; + fullName.middleName = + arguments[kArgumentMiddleName] == [NSNull null] ? nil : arguments[kArgumentMiddleName]; + + completion([FIROAuthProvider appleCredentialWithIDToken:idToken + rawNonce:rawNonce + fullName:fullName], + nil); + return; + } + } + // OAuth + if ([signInMethod isEqualToString:kSignInMethodOAuth]) { + NSString *providerId = arguments[kArgumentProviderId]; + completion([FIROAuthProvider credentialWithProviderID:providerId + IDToken:idToken + rawNonce:rawNonce + accessToken:accessToken], + nil); + return; + } + + NSLog(@"Support for an auth provider with identifier '%@' is not implemented.", signInMethod); + completion(nil, nil); + return; +} + +- (void)ensureAPNSTokenSetting { +#if !TARGET_OS_OSX + FIRApp *defaultApp = [FIRApp defaultApp]; + if (defaultApp) { + if ([FIRAuth auth].APNSToken == nil && _apnsToken != nil) { + [[FIRAuth auth] setAPNSToken:_apnsToken type:FIRAuthAPNSTokenTypeUnknown]; + _apnsToken = nil; + } + } +#endif +} + +- (FIRMultiFactor *)getAppMultiFactorFromPigeon:(nonnull AuthPigeonFirebaseApp *)app { + FIRAuth *auth = [self getFIRAuthFromAppNameFromPigeon:app]; + FIRUser *currentUser = auth.currentUser; + return currentUser.multiFactor; +} + +- (nonnull ASPresentationAnchor)presentationAnchorForAuthorizationController: + (nonnull ASAuthorizationController *)controller API_AVAILABLE(macos(10.15), ios(13.0)) { +#if TARGET_OS_OSX + return [[NSApplication sharedApplication] keyWindow]; +#else + // UIApplication.keyWindow is deprecated in iOS 13+ with UIScene lifecycle. + // Walk the connected scenes to find the foreground active window. + if (@available(iOS 15.0, *)) { + for (UIScene *scene in [UIApplication sharedApplication].connectedScenes) { + if (scene.activationState == UISceneActivationStateForegroundActive && + [scene isKindOfClass:[UIWindowScene class]]) { + UIWindowScene *windowScene = (UIWindowScene *)scene; + if (windowScene.keyWindow) { + return windowScene.keyWindow; + } + } + } + } else if (@available(iOS 13.0, *)) { + for (UIScene *scene in [UIApplication sharedApplication].connectedScenes) { + if (scene.activationState == UISceneActivationStateForegroundActive && + [scene isKindOfClass:[UIWindowScene class]]) { + UIWindowScene *windowScene = (UIWindowScene *)scene; + for (UIWindow *window in windowScene.windows) { + if (window.isKeyWindow) { + return window; + } + } + } + } + } + return [[UIApplication sharedApplication] keyWindow]; +#endif +} + +- (void)enrollPhoneApp:(nonnull AuthPigeonFirebaseApp *)app + assertion:(nonnull InternalPhoneMultiFactorAssertion *)assertion + displayName:(nullable NSString *)displayName + completion:(nonnull void (^)(FlutterError *_Nullable))completion { +#if TARGET_OS_OSX + completion([FlutterError errorWithCode:@"unsupported-platform" + message:@"Phone authentication is not supported on macOS" + details:nil]); +#else + + FIRMultiFactor *multiFactor = [self getAppMultiFactorFromPigeon:app]; + + FIRPhoneAuthCredential *credential = + [[FIRPhoneAuthProvider providerWithAuth:[self getFIRAuthFromAppNameFromPigeon:app]] + credentialWithVerificationID:[assertion verificationId] + verificationCode:[assertion verificationCode]]; + + FIRMultiFactorAssertion *multiFactorAssertion = + [FIRPhoneMultiFactorGenerator assertionWithCredential:credential]; + + [multiFactor enrollWithAssertion:multiFactorAssertion + displayName:displayName + completion:^(NSError *_Nullable error) { + if (error == nil) { + completion(nil); + } else { + completion([FlutterError errorWithCode:@"enroll-failed" + message:error.localizedDescription + details:nil]); + } + }]; +#endif +} + +- (void)getEnrolledFactorsApp:(nonnull AuthPigeonFirebaseApp *)app + completion:(nonnull void (^)(NSArray *_Nullable, + FlutterError *_Nullable))completion { + FIRMultiFactor *multiFactor = [self getAppMultiFactorFromPigeon:app]; + + NSArray *enrolledFactors = [multiFactor enrolledFactors]; + + NSMutableArray *results = [NSMutableArray array]; + + for (FIRMultiFactorInfo *multiFactorInfo in enrolledFactors) { + NSString *phoneNumber; + if ([multiFactorInfo class] == [FIRPhoneMultiFactorInfo class]) { + FIRPhoneMultiFactorInfo *phoneFactorInfo = (FIRPhoneMultiFactorInfo *)multiFactorInfo; + phoneNumber = phoneFactorInfo.phoneNumber; + } + + [results addObject:[InternalMultiFactorInfo + makeWithDisplayName:multiFactorInfo.displayName + enrollmentTimestamp:multiFactorInfo.enrollmentDate.timeIntervalSince1970 + factorId:multiFactorInfo.factorID + uid:multiFactorInfo.UID + phoneNumber:phoneNumber]]; + } + + completion(results, nil); +} + +- (void)getSessionApp:(nonnull AuthPigeonFirebaseApp *)app + completion:(nonnull void (^)(InternalMultiFactorSession *_Nullable, + FlutterError *_Nullable))completion { + FIRMultiFactor *multiFactor = [self getAppMultiFactorFromPigeon:app]; + [multiFactor getSessionWithCompletion:^(FIRMultiFactorSession *_Nullable session, + NSError *_Nullable error) { + NSString *UUID = [[NSUUID UUID] UUIDString]; + self->_multiFactorSessionMap[UUID] = session; + + InternalMultiFactorSession *pigeonSession = [InternalMultiFactorSession makeWithId:UUID]; + completion(pigeonSession, nil); + }]; +} + +- (void)unenrollApp:(nonnull AuthPigeonFirebaseApp *)app + factorUid:(nonnull NSString *)factorUid + completion:(nonnull void (^)(FlutterError *_Nullable))completion { + FIRMultiFactor *multiFactor = [self getAppMultiFactorFromPigeon:app]; + [multiFactor unenrollWithFactorUID:factorUid + completion:^(NSError *_Nullable error) { + if (error == nil) { + completion(nil); + } else { + completion([FlutterError errorWithCode:@"unenroll-failed" + message:error.localizedDescription + details:nil]); + } + }]; +} + +- (void)enrollTotpApp:(nonnull AuthPigeonFirebaseApp *)app + assertionId:(nonnull NSString *)assertionId + displayName:(nullable NSString *)displayName + completion:(nonnull void (^)(FlutterError *_Nullable))completion { + FIRMultiFactor *multiFactor = [self getAppMultiFactorFromPigeon:app]; + + FIRMultiFactorAssertion *assertion = _multiFactorAssertionMap[assertionId]; + + [multiFactor enrollWithAssertion:assertion + displayName:displayName + completion:^(NSError *_Nullable error) { + if (error == nil) { + completion(nil); + } else { + completion([FlutterError errorWithCode:@"enroll-failed" + message:error.localizedDescription + details:nil]); + } + }]; +} + +- (void)resolveSignInResolverId:(nonnull NSString *)resolverId + assertion:(nullable InternalPhoneMultiFactorAssertion *)assertion + totpAssertionId:(nullable NSString *)totpAssertionId + completion:(nonnull void (^)(InternalUserCredential *_Nullable, + FlutterError *_Nullable))completion { + FIRMultiFactorResolver *resolver = _multiFactorResolverMap[resolverId]; + + FIRMultiFactorAssertion *multiFactorAssertion; + + if (assertion != nil) { +#if TARGET_OS_IPHONE + FIRPhoneAuthCredential *credential = + [[FIRPhoneAuthProvider provider] credentialWithVerificationID:[assertion verificationId] + verificationCode:[assertion verificationCode]]; + multiFactorAssertion = [FIRPhoneMultiFactorGenerator assertionWithCredential:credential]; +#endif + } else if (totpAssertionId != nil) { + multiFactorAssertion = _multiFactorAssertionMap[totpAssertionId]; + } else { + completion(nil, + [FlutterError errorWithCode:@"resolve-signin-failed" + message:@"Neither assertion nor totpAssertionId were provided" + details:nil]); + return; + } + + [resolver + resolveSignInWithAssertion:multiFactorAssertion + completion:^(FIRAuthDataResult *_Nullable authResult, + NSError *_Nullable error) { + if (error == nil) { + completion([PigeonParser getPigeonUserCredentialFromAuthResult:authResult + authorizationCode:nil], + nil); + } else { + completion(nil, [FlutterError errorWithCode:@"resolve-signin-failed" + message:error.localizedDescription + details:nil]); + } + }]; +} + +- (void)generateSecretSessionId:(nonnull NSString *)sessionId + completion:(nonnull void (^)(InternalTotpSecret *_Nullable, + FlutterError *_Nullable))completion { + FIRMultiFactorSession *multiFactorSession = _multiFactorSessionMap[sessionId]; + + [FIRTOTPMultiFactorGenerator + generateSecretWithMultiFactorSession:multiFactorSession + completion:^(FIRTOTPSecret *_Nullable secret, + NSError *_Nullable error) { + if (error == nil) { + self->_multiFactorTotpSecretMap[secret.sharedSecretKey] = + secret; + completion([PigeonParser getPigeonTotpSecret:secret], nil); + } else { + completion( + nil, [FlutterError errorWithCode:@"generate-secret-failed" + message:error.localizedDescription + details:nil]); + } + }]; +} + +- (void)getAssertionForEnrollmentSecretKey:(nonnull NSString *)secretKey + oneTimePassword:(nonnull NSString *)oneTimePassword + completion:(nonnull void (^)(NSString *_Nullable, + FlutterError *_Nullable))completion { + FIRTOTPSecret *totpSecret = _multiFactorTotpSecretMap[secretKey]; + + FIRTOTPMultiFactorAssertion *assertion = + [FIRTOTPMultiFactorGenerator assertionForEnrollmentWithSecret:totpSecret + oneTimePassword:oneTimePassword]; + + NSString *UUID = [[NSUUID UUID] UUIDString]; + self->_multiFactorAssertionMap[UUID] = assertion; + completion(UUID, nil); +} + +- (void)getAssertionForSignInEnrollmentId:(nonnull NSString *)enrollmentId + oneTimePassword:(nonnull NSString *)oneTimePassword + completion:(nonnull void (^)(NSString *_Nullable, + FlutterError *_Nullable))completion { + FIRTOTPMultiFactorAssertion *assertion = + [FIRTOTPMultiFactorGenerator assertionForSignInWithEnrollmentID:enrollmentId + oneTimePassword:oneTimePassword]; + NSString *UUID = [[NSUUID UUID] UUIDString]; + self->_multiFactorAssertionMap[UUID] = assertion; + completion(UUID, nil); +} + +- (void)generateQrCodeUrlSecretKey:(nonnull NSString *)secretKey + accountName:(nullable NSString *)accountName + issuer:(nullable NSString *)issuer + completion:(nonnull void (^)(NSString *_Nullable, + FlutterError *_Nullable))completion { + FIRTOTPSecret *totpSecret = _multiFactorTotpSecretMap[secretKey]; + completion([totpSecret generateQRCodeURLWithAccountName:accountName issuer:issuer], nil); +} + +- (void)openInOtpAppSecretKey:(nonnull NSString *)secretKey + qrCodeUrl:(nonnull NSString *)qrCodeUrl + completion:(nonnull void (^)(FlutterError *_Nullable))completion { + FIRTOTPSecret *totpSecret = _multiFactorTotpSecretMap[secretKey]; + [totpSecret openInOTPAppWithQRCodeURL:qrCodeUrl]; + completion(nil); +} + +- (void)applyActionCodeApp:(nonnull AuthPigeonFirebaseApp *)app + code:(nonnull NSString *)code + completion:(nonnull void (^)(FlutterError *_Nullable))completion { + FIRAuth *auth = [self getFIRAuthFromAppNameFromPigeon:app]; + [auth applyActionCode:code + completion:^(NSError *_Nullable error) { + if (error != nil) { + completion([FLTFirebaseAuthPlugin convertToFlutterError:error]); + } else { + completion(nil); + } + }]; +} + +- (void)revokeTokenWithAuthorizationCodeApp:(nonnull AuthPigeonFirebaseApp *)app + authorizationCode:(nonnull NSString *)authorizationCode + completion:(nonnull void (^)(FlutterError *_Nullable))completion { + FIRAuth *auth = [self getFIRAuthFromAppNameFromPigeon:app]; + [auth revokeTokenWithAuthorizationCode:authorizationCode + completion:^(NSError *_Nullable error) { + if (error != nil) { + completion([FLTFirebaseAuthPlugin convertToFlutterError:error]); + } else { + completion(nil); + } + }]; +} + +- (void)revokeAccessTokenApp:(nonnull AuthPigeonFirebaseApp *)app + accessToken:(nonnull NSString *)accessToken + completion:(nonnull void (^)(FlutterError *_Nullable))completion { + // `revokeAccessToken(_:)` is currently Android-only on the Firebase SDK. + // On Apple platforms use `revokeTokenWithAuthorizationCode:` instead. + completion([FlutterError errorWithCode:@"unsupported-platform-operation" + message:@"revokeAccessToken is not supported on iOS/macOS. " + @"Use revokeTokenWithAuthorizationCode instead." + details:nil]); +} + +- (void)checkActionCodeApp:(nonnull AuthPigeonFirebaseApp *)app + code:(nonnull NSString *)code + completion:(nonnull void (^)(InternalActionCodeInfo *_Nullable, + FlutterError *_Nullable))completion { + FIRAuth *auth = [self getFIRAuthFromAppNameFromPigeon:app]; + [auth checkActionCode:code + completion:^(FIRActionCodeInfo *_Nullable info, NSError *_Nullable error) { + if (error != nil) { + completion(nil, [FLTFirebaseAuthPlugin convertToFlutterError:error]); + } else { + InternalActionCodeInfo *result = [self parseActionCode:info]; + if (result.operation == ActionCodeInfoOperationUnknown) { + // Workaround: Firebase iOS SDK >=11.12.0 returns .unknown because + // actionCodeOperation(forRequestType:) only matches camelCase but the + // REST API returns SCREAMING_SNAKE_CASE (e.g. "VERIFY_EMAIL"). + // Re-fetch the raw requestType via REST to resolve the operation. + // See: https://github.com/firebase/flutterfire/issues/17452 + [self resolveActionCodeOperationForApp:app + code:code + fallbackInfo:result + completion:completion]; + } else { + completion(result, nil); + } + } + }]; +} + +- (InternalActionCodeInfo *_Nullable)parseActionCode:(nonnull FIRActionCodeInfo *)info { + InternalActionCodeInfoData *data = [InternalActionCodeInfoData makeWithEmail:info.email + previousEmail:info.previousEmail]; + + ActionCodeInfoOperation operation; + + if (info.operation == FIRActionCodeOperationPasswordReset) { + operation = ActionCodeInfoOperationPasswordReset; + } else if (info.operation == FIRActionCodeOperationVerifyEmail) { + operation = ActionCodeInfoOperationVerifyEmail; + } else if (info.operation == FIRActionCodeOperationRecoverEmail) { + operation = ActionCodeInfoOperationRecoverEmail; + } else if (info.operation == FIRActionCodeOperationEmailLink) { + operation = ActionCodeInfoOperationEmailSignIn; + } else if (info.operation == FIRActionCodeOperationVerifyAndChangeEmail) { + operation = ActionCodeInfoOperationVerifyAndChangeEmail; + } else if (info.operation == FIRActionCodeOperationRevertSecondFactorAddition) { + operation = ActionCodeInfoOperationRevertSecondFactorAddition; + } else { + operation = ActionCodeInfoOperationUnknown; + } + + return [InternalActionCodeInfo makeWithOperation:operation data:data]; +} + +/// Maps a raw requestType string (either camelCase or SCREAMING_SNAKE_CASE) to +/// the corresponding Pigeon enum value. ++ (ActionCodeInfoOperation)operationFromRequestType:(nullable NSString *)requestType { + static NSDictionary *mapping; + static dispatch_once_t onceToken; + dispatch_once(&onceToken, ^{ + mapping = @{ + @"PASSWORD_RESET" : @(ActionCodeInfoOperationPasswordReset), + @"resetPassword" : @(ActionCodeInfoOperationPasswordReset), + @"VERIFY_EMAIL" : @(ActionCodeInfoOperationVerifyEmail), + @"verifyEmail" : @(ActionCodeInfoOperationVerifyEmail), + @"RECOVER_EMAIL" : @(ActionCodeInfoOperationRecoverEmail), + @"recoverEmail" : @(ActionCodeInfoOperationRecoverEmail), + @"EMAIL_SIGNIN" : @(ActionCodeInfoOperationEmailSignIn), + @"signIn" : @(ActionCodeInfoOperationEmailSignIn), + @"VERIFY_AND_CHANGE_EMAIL" : @(ActionCodeInfoOperationVerifyAndChangeEmail), + @"verifyAndChangeEmail" : @(ActionCodeInfoOperationVerifyAndChangeEmail), + @"REVERT_SECOND_FACTOR_ADDITION" : @(ActionCodeInfoOperationRevertSecondFactorAddition), + @"revertSecondFactorAddition" : @(ActionCodeInfoOperationRevertSecondFactorAddition), + }; + }); + + NSNumber *value = mapping[requestType]; + return value ? (ActionCodeInfoOperation)value.integerValue : ActionCodeInfoOperationUnknown; +} + +/// Calls the Identity Toolkit REST API directly to retrieve the raw requestType +/// string, which the iOS SDK fails to parse correctly. Falls back to the original +/// result if the REST call fails for any reason. +- (void)resolveActionCodeOperationForApp:(nonnull AuthPigeonFirebaseApp *)app + code:(nonnull NSString *)code + fallbackInfo:(nonnull InternalActionCodeInfo *)fallbackInfo + completion:(nonnull void (^)(InternalActionCodeInfo *_Nullable, + FlutterError *_Nullable))completion { + FIRApp *firebaseApp = [FLTFirebasePlugin firebaseAppNamed:app.appName]; + NSString *apiKey = firebaseApp.options.APIKey; + + NSString *baseURL; + NSDictionary *emulatorConfig = _emulatorConfigs[app.appName]; + if (emulatorConfig) { + baseURL = [NSString stringWithFormat:@"http://%@:%@/identitytoolkit.googleapis.com", + emulatorConfig[@"host"], emulatorConfig[@"port"]]; + } else { + baseURL = @"https://identitytoolkit.googleapis.com"; + } + + NSString *urlString = + [NSString stringWithFormat:@"%@/v1/accounts:resetPassword?key=%@", baseURL, apiKey]; + NSURL *url = [NSURL URLWithString:urlString]; + + NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:url]; + request.HTTPMethod = @"POST"; + [request setValue:@"application/json" forHTTPHeaderField:@"Content-Type"]; + request.HTTPBody = [NSJSONSerialization dataWithJSONObject:@{@"oobCode" : code} + options:0 + error:nil]; + + NSURLSessionDataTask *task = [[NSURLSession sharedSession] + dataTaskWithRequest:request + completionHandler:^(NSData *_Nullable data, NSURLResponse *_Nullable response, + NSError *_Nullable error) { + if (error || !data) { + completion(fallbackInfo, nil); + return; + } + + NSDictionary *json = [NSJSONSerialization JSONObjectWithData:data options:0 error:nil]; + if (!json || json[@"error"]) { + completion(fallbackInfo, nil); + return; + } + + ActionCodeInfoOperation operation = + [FLTFirebaseAuthPlugin operationFromRequestType:json[@"requestType"]]; + + if (operation != ActionCodeInfoOperationUnknown) { + completion([InternalActionCodeInfo makeWithOperation:operation data:fallbackInfo.data], + nil); + } else { + completion(fallbackInfo, nil); + } + }]; + [task resume]; +} + +- (void)confirmPasswordResetApp:(nonnull AuthPigeonFirebaseApp *)app + code:(nonnull NSString *)code + newPassword:(nonnull NSString *)newPassword + completion:(nonnull void (^)(FlutterError *_Nullable))completion { + FIRAuth *auth = [self getFIRAuthFromAppNameFromPigeon:app]; + [auth confirmPasswordResetWithCode:code + newPassword:newPassword + completion:^(NSError *_Nullable error) { + if (error != nil) { + completion([FLTFirebaseAuthPlugin convertToFlutterError:error]); + } else { + completion(nil); + } + }]; +} + +- (void)createUserWithEmailAndPasswordApp:(nonnull AuthPigeonFirebaseApp *)app + email:(nonnull NSString *)email + password:(nonnull NSString *)password + completion:(nonnull void (^)(InternalUserCredential *_Nullable, + FlutterError *_Nullable))completion { + FIRAuth *auth = [self getFIRAuthFromAppNameFromPigeon:app]; + [auth createUserWithEmail:email + password:password + completion:^(FIRAuthDataResult *_Nullable authResult, NSError *_Nullable error) { + if (error != nil) { + completion(nil, [FLTFirebaseAuthPlugin convertToFlutterError:error]); + } else { + completion([PigeonParser getPigeonUserCredentialFromAuthResult:authResult + authorizationCode:nil], + nil); + } + }]; +} + +- (void)fetchSignInMethodsForEmailApp:(nonnull AuthPigeonFirebaseApp *)app + email:(nonnull NSString *)email + completion:(nonnull void (^)(NSArray *_Nullable, + FlutterError *_Nullable))completion { + FIRAuth *auth = [self getFIRAuthFromAppNameFromPigeon:app]; + [auth fetchSignInMethodsForEmail:email + completion:^(NSArray *_Nullable providers, + NSError *_Nullable error) { + if (error != nil) { + completion(nil, [FLTFirebaseAuthPlugin convertToFlutterError:error]); + } else { + if (providers == nil) { + completion(@[], nil); + } else { + completion(providers, nil); + } + } + }]; +} + +- (void)registerAuthStateListenerApp:(nonnull AuthPigeonFirebaseApp *)app + completion:(nonnull void (^)(NSString *_Nullable, + FlutterError *_Nullable))completion { + FIRAuth *auth = [self getFIRAuthFromAppNameFromPigeon:app]; + + NSString *name = + [NSString stringWithFormat:@"%@/auth-state/%@", kFLTFirebaseAuthChannelName, auth.app.name]; + FlutterEventChannel *channel = [FlutterEventChannel eventChannelWithName:name + binaryMessenger:_binaryMessenger]; + + FLTAuthStateChannelStreamHandler *handler = + [[FLTAuthStateChannelStreamHandler alloc] initWithAuth:auth]; + [channel setStreamHandler:handler]; + + [_eventChannels setObject:channel forKey:name]; + [_streamHandlers setObject:handler forKey:name]; + + completion(name, nil); +} + +- (void)registerIdTokenListenerApp:(nonnull AuthPigeonFirebaseApp *)app + completion:(nonnull void (^)(NSString *_Nullable, + FlutterError *_Nullable))completion { + FIRAuth *auth = [self getFIRAuthFromAppNameFromPigeon:app]; + + NSString *name = + [NSString stringWithFormat:@"%@/id-token/%@", kFLTFirebaseAuthChannelName, auth.app.name]; + + FlutterEventChannel *channel = [FlutterEventChannel eventChannelWithName:name + binaryMessenger:_binaryMessenger]; + + FLTIdTokenChannelStreamHandler *handler = + [[FLTIdTokenChannelStreamHandler alloc] initWithAuth:auth]; + [channel setStreamHandler:handler]; + + [_eventChannels setObject:channel forKey:name]; + [_streamHandlers setObject:handler forKey:name]; + + completion(name, nil); +} + +- (void)sendPasswordResetEmailApp:(nonnull AuthPigeonFirebaseApp *)app + email:(nonnull NSString *)email + actionCodeSettings:(nullable InternalActionCodeSettings *)actionCodeSettings + completion:(nonnull void (^)(FlutterError *_Nullable))completion { + FIRAuth *auth = [self getFIRAuthFromAppNameFromPigeon:app]; + if (actionCodeSettings != nil) { + FIRActionCodeSettings *settings = [PigeonParser parseActionCodeSettings:actionCodeSettings]; + [auth sendPasswordResetWithEmail:email + actionCodeSettings:settings + completion:^(NSError *_Nullable error) { + if (error != nil) { + completion([FLTFirebaseAuthPlugin convertToFlutterError:error]); + } else { + completion(nil); + } + }]; + } else { + [auth sendPasswordResetWithEmail:email + completion:^(NSError *_Nullable error) { + if (error != nil) { + completion([FLTFirebaseAuthPlugin convertToFlutterError:error]); + } else { + completion(nil); + } + }]; + } +} + +- (void)sendSignInLinkToEmailApp:(nonnull AuthPigeonFirebaseApp *)app + email:(nonnull NSString *)email + actionCodeSettings:(nonnull InternalActionCodeSettings *)actionCodeSettings + completion:(nonnull void (^)(FlutterError *_Nullable))completion { + FIRAuth *auth = [self getFIRAuthFromAppNameFromPigeon:app]; + [auth sendSignInLinkToEmail:email + actionCodeSettings:[PigeonParser parseActionCodeSettings:actionCodeSettings] + completion:^(NSError *_Nullable error) { + if (error != nil) { + if (error.code == FIRAuthErrorCodeInternalError) { + [self + handleInternalError:^(InternalUserCredential *_Nullable creds, + FlutterError *_Nullable internalError) { + completion(internalError); + } + withError:error]; + } else { + completion([FLTFirebaseAuthPlugin convertToFlutterError:error]); + } + } else { + completion(nil); + } + }]; +} + +- (void)setLanguageCodeApp:(nonnull AuthPigeonFirebaseApp *)app + languageCode:(nullable NSString *)languageCode + completion: + (nonnull void (^)(NSString *_Nullable, FlutterError *_Nullable))completion { + FIRAuth *auth = [self getFIRAuthFromAppNameFromPigeon:app]; + + if (languageCode != nil && ![languageCode isEqual:[NSNull null]]) { + auth.languageCode = languageCode; + } else { + [auth useAppLanguage]; + } + + completion(auth.languageCode, nil); +} + +- (void)setSettingsApp:(nonnull AuthPigeonFirebaseApp *)app + settings:(nonnull InternalFirebaseAuthSettings *)settings + completion:(nonnull void (^)(FlutterError *_Nullable))completion { + FIRAuth *auth = [self getFIRAuthFromAppNameFromPigeon:app]; + + if (settings.userAccessGroup != nil) { + BOOL useUserAccessGroupSuccessful; + NSError *useUserAccessGroupErrorPtr; + useUserAccessGroupSuccessful = [auth useUserAccessGroup:settings.userAccessGroup + error:&useUserAccessGroupErrorPtr]; + if (!useUserAccessGroupSuccessful) { + completion([FLTFirebaseAuthPlugin convertToFlutterError:useUserAccessGroupErrorPtr]); + return; + } + } + +#if TARGET_OS_IPHONE + if (settings.appVerificationDisabledForTesting) { + auth.settings.appVerificationDisabledForTesting = settings.appVerificationDisabledForTesting; + } +#else + NSLog(@"FIRAuthSettings.appVerificationDisabledForTesting is not supported " + @"on MacOS."); +#endif + + completion(nil); +} + +- (void)signInAnonymouslyApp:(nonnull AuthPigeonFirebaseApp *)app + completion:(nonnull void (^)(InternalUserCredential *_Nullable, + FlutterError *_Nullable))completion { + FIRAuth *auth = [self getFIRAuthFromAppNameFromPigeon:app]; + [auth signInAnonymouslyWithCompletion:^(FIRAuthDataResult *authResult, NSError *error) { + if (error != nil) { + completion(nil, [FLTFirebaseAuthPlugin convertToFlutterError:error]); + } else { + completion([PigeonParser getPigeonUserCredentialFromAuthResult:authResult + authorizationCode:nil], + nil); + } + }]; +} + +- (void)signInWithCredentialApp:(nonnull AuthPigeonFirebaseApp *)app + input:(nonnull NSDictionary *)input + completion:(nonnull void (^)(InternalUserCredential *_Nullable, + FlutterError *_Nullable))completion { + FIRAuth *auth = [self getFIRAuthFromAppNameFromPigeon:app]; + [self + getFIRAuthCredentialFromArguments:input + app:app + completion:^(FIRAuthCredential *credential, NSError *error) { + if (credential == nil) { + completion(nil, + [FlutterError errorWithCode:kErrCodeInvalidCredential + message:kErrMsgInvalidCredential + details:nil]); + return; + } + + if (error) { + completion(nil, + [FLTFirebaseAuthPlugin convertToFlutterError:error]); + } + + [auth + signInWithCredential:credential + completion:^(FIRAuthDataResult *authResult, + NSError *error) { + if (error != nil) { + NSDictionary *userInfo = [error userInfo]; + NSError *underlyingError = + [userInfo objectForKey:NSUnderlyingErrorKey]; + + NSDictionary *firebaseDictionary = + underlyingError + .userInfo[@"FIRAuthErrorUserInfoDeserializ" + @"edResponseKey"]; + + if (firebaseDictionary != nil && + firebaseDictionary[@"message"] != nil) { + // error from firebase-ios-sdk is buried in + // underlying error. + if ([firebaseDictionary[@"code"] + isKindOfClass:[NSNumber class]]) { + [self handleInternalError:completion + withError:error]; + } else { + completion(nil, + [FlutterError + errorWithCode:firebaseDictionary + [@"code"] + message:firebaseDictionary + [@"message"] + details:nil]); + } + } else { + if (error.code == + FIRAuthErrorCodeSecondFactorRequired) { + [self handleMultiFactorError:app + completion:completion + withError:error]; + } else if (error.code == + FIRAuthErrorCodeInternalError) { + [self handleInternalError:completion + withError:error]; + } else { + completion(nil, + [FLTFirebaseAuthPlugin + convertToFlutterError:error]); + } + } + } else { + completion( + [PigeonParser + getPigeonUserCredentialFromAuthResult: + authResult + authorizationCode:nil], + nil); + } + }]; + }]; +} + +- (void)signInWithCustomTokenApp:(nonnull AuthPigeonFirebaseApp *)app + token:(nonnull NSString *)token + completion:(nonnull void (^)(InternalUserCredential *_Nullable, + FlutterError *_Nullable))completion { + FIRAuth *auth = [self getFIRAuthFromAppNameFromPigeon:app]; + + [auth signInWithCustomToken:token + completion:^(FIRAuthDataResult *_Nullable authResult, NSError *_Nullable error) { + if (error != nil) { + if (error.code == FIRAuthErrorCodeSecondFactorRequired) { + [self handleMultiFactorError:app completion:completion withError:error]; + } else if (error.code == FIRAuthErrorCodeInternalError) { + [self handleInternalError:completion withError:error]; + } else { + completion(nil, [FLTFirebaseAuthPlugin convertToFlutterError:error]); + } + } else { + completion([PigeonParser getPigeonUserCredentialFromAuthResult:authResult + authorizationCode:nil], + nil); + } + }]; +} + +- (void)signInWithEmailAndPasswordApp:(nonnull AuthPigeonFirebaseApp *)app + email:(nonnull NSString *)email + password:(nonnull NSString *)password + completion:(nonnull void (^)(InternalUserCredential *_Nullable, + FlutterError *_Nullable))completion { + FIRAuth *auth = [self getFIRAuthFromAppNameFromPigeon:app]; + [auth signInWithEmail:email + password:password + completion:^(FIRAuthDataResult *_Nullable authResult, NSError *_Nullable error) { + if (error != nil) { + if (error.code == FIRAuthErrorCodeSecondFactorRequired) { + [self handleMultiFactorError:app completion:completion withError:error]; + } else if (error.code == FIRAuthErrorCodeInternalError) { + [self handleInternalError:completion withError:error]; + } else { + completion(nil, [FLTFirebaseAuthPlugin convertToFlutterError:error]); + } + } else { + completion([PigeonParser getPigeonUserCredentialFromAuthResult:authResult + authorizationCode:nil], + nil); + } + }]; +} + +- (void)signInWithEmailLinkApp:(nonnull AuthPigeonFirebaseApp *)app + email:(nonnull NSString *)email + emailLink:(nonnull NSString *)emailLink + completion:(nonnull void (^)(InternalUserCredential *_Nullable, + FlutterError *_Nullable))completion { + FIRAuth *auth = [self getFIRAuthFromAppNameFromPigeon:app]; + [auth signInWithEmail:email + link:emailLink + completion:^(FIRAuthDataResult *_Nullable authResult, NSError *_Nullable error) { + if (error != nil) { + if (error.code == FIRAuthErrorCodeSecondFactorRequired) { + [self handleMultiFactorError:app completion:completion withError:error]; + } else if (error.code == FIRAuthErrorCodeInternalError) { + [self handleInternalError:completion withError:error]; + } else { + completion(nil, [FLTFirebaseAuthPlugin convertToFlutterError:error]); + } + } else { + completion([PigeonParser getPigeonUserCredentialFromAuthResult:authResult + authorizationCode:nil], + nil); + } + }]; +} + +- (void)signInWithProviderApp:(nonnull AuthPigeonFirebaseApp *)app + signInProvider:(nonnull InternalSignInProvider *)signInProvider + completion:(nonnull void (^)(InternalUserCredential *_Nullable, + FlutterError *_Nullable))completion { + FIRAuth *auth = [self getFIRAuthFromAppNameFromPigeon:app]; + + if ([signInProvider.providerId isEqualToString:kSignInMethodGameCenter]) { + completion( + nil, + [FlutterError + errorWithCode:@"sign-in-failure" + message: + @"Game Center sign-in requires signing in with 'signInWithCredential()' API." + details:@{}]); + return; + } + + if ([signInProvider.providerId isEqualToString:kSignInMethodApple]) { + self.signInWithAppleAuth = auth; + launchAppleSignInRequest(self, app, signInProvider, completion); + return; + } +#if TARGET_OS_OSX + NSLog(@"signInWithProvider is not supported on the " + @"MacOS platform."); + completion(nil, nil); +#else + self.authProvider = [FIROAuthProvider providerWithProviderID:signInProvider.providerId auth:auth]; + NSArray *scopes = signInProvider.scopes; + if (scopes != nil) { + [self.authProvider setScopes:scopes]; + } + NSDictionary *customParameters = signInProvider.customParameters; + if (customParameters != nil) { + [self.authProvider setCustomParameters:customParameters]; + } + + [self.authProvider + getCredentialWithUIDelegate:nil + completion:^(FIRAuthCredential *_Nullable credential, + NSError *_Nullable error) { + handleAppleAuthResult(self, app, auth, credential, error, completion); + }]; +#endif +} + +- (void)signOutApp:(nonnull AuthPigeonFirebaseApp *)app + completion:(nonnull void (^)(FlutterError *_Nullable))completion { + FIRAuth *auth = [self getFIRAuthFromAppNameFromPigeon:app]; + + if (auth.currentUser == nil) { + completion(nil); + return; + } + + NSError *signOutErrorPtr; + BOOL signOutSuccessful = [auth signOut:&signOutErrorPtr]; + + if (!signOutSuccessful) { + completion([FLTFirebaseAuthPlugin convertToFlutterError:signOutErrorPtr]); + } else { + completion(nil); + } +} + +- (void)useEmulatorApp:(nonnull AuthPigeonFirebaseApp *)app + host:(nonnull NSString *)host + port:(long)port + completion:(nonnull void (^)(FlutterError *_Nullable))completion { + FIRAuth *auth = [self getFIRAuthFromAppNameFromPigeon:app]; + [auth useEmulatorWithHost:host port:port]; + _emulatorConfigs[app.appName] = @{@"host" : host, @"port" : @(port)}; + completion(nil); +} + +- (void)verifyPasswordResetCodeApp:(nonnull AuthPigeonFirebaseApp *)app + code:(nonnull NSString *)code + completion:(nonnull void (^)(NSString *_Nullable, + FlutterError *_Nullable))completion { + FIRAuth *auth = [self getFIRAuthFromAppNameFromPigeon:app]; + + [auth verifyPasswordResetCode:code + completion:^(NSString *_Nullable email, NSError *_Nullable error) { + if (error != nil) { + completion(nil, [FLTFirebaseAuthPlugin convertToFlutterError:error]); + } else { + completion(email, nil); + } + }]; +} + +- (void)verifyPhoneNumberApp:(nonnull AuthPigeonFirebaseApp *)app + request:(nonnull InternalVerifyPhoneNumberRequest *)request + completion: + (nonnull void (^)(NSString *_Nullable, FlutterError *_Nullable))completion { +#if TARGET_OS_OSX + NSLog(@"The Firebase Phone Authentication provider is not supported on the " + @"MacOS platform."); + completion(nil, nil); +#else + FIRAuth *auth = [self getFIRAuthFromAppNameFromPigeon:app]; + + NSString *name = [NSString + stringWithFormat:@"%@/phone/%@", kFLTFirebaseAuthChannelName, [NSUUID UUID].UUIDString]; + FlutterEventChannel *channel = [FlutterEventChannel eventChannelWithName:name + binaryMessenger:_binaryMessenger]; + + NSString *multiFactorSessionId = request.multiFactorSessionId; + FIRMultiFactorSession *multiFactorSession = nil; + + if (multiFactorSessionId != nil) { + multiFactorSession = _multiFactorSessionMap[multiFactorSessionId]; + } + + NSString *multiFactorInfoId = request.multiFactorInfoId; + + FIRPhoneMultiFactorInfo *multiFactorInfo = nil; + if (multiFactorInfoId != nil) { + for (NSString *resolverId in _multiFactorResolverMap) { + for (FIRMultiFactorInfo *info in _multiFactorResolverMap[resolverId].hints) { + if ([info.UID isEqualToString:multiFactorInfoId] && + [info class] == [FIRPhoneMultiFactorInfo class]) { + multiFactorInfo = (FIRPhoneMultiFactorInfo *)info; + break; + } + } + } + } + +#if TARGET_OS_OSX + FLTPhoneNumberVerificationStreamHandler *handler = + [[FLTPhoneNumberVerificationStreamHandler alloc] initWithAuth:auth]; +#else + FLTPhoneNumberVerificationStreamHandler *handler = + [[FLTPhoneNumberVerificationStreamHandler alloc] initWithAuth:auth + request:request + session:multiFactorSession + factorInfo:multiFactorInfo]; +#endif + + [channel setStreamHandler:handler]; + + [_eventChannels setObject:channel forKey:name]; + [_streamHandlers setObject:handler forKey:name]; + + completion(name, nil); +#endif +} + +- (void)deleteApp:(nonnull AuthPigeonFirebaseApp *)app + completion:(nonnull void (^)(FlutterError *_Nullable))completion { + FIRAuth *auth = [self getFIRAuthFromAppNameFromPigeon:app]; + FIRUser *currentUser = auth.currentUser; + if (currentUser == nil) { + completion([FlutterError errorWithCode:kErrCodeNoCurrentUser + message:kErrMsgNoCurrentUser + details:nil]); + return; + } + + [currentUser deleteWithCompletion:^(NSError *_Nullable error) { + if (error != nil) { + completion([FLTFirebaseAuthPlugin convertToFlutterError:error]); + } else { + completion(nil); + } + }]; +} + +- (void)getIdTokenApp:(nonnull AuthPigeonFirebaseApp *)app + forceRefresh:(BOOL)forceRefresh + completion:(nonnull void (^)(InternalIdTokenResult *_Nullable, + FlutterError *_Nullable))completion { + FIRAuth *auth = [self getFIRAuthFromAppNameFromPigeon:app]; + FIRUser *currentUser = auth.currentUser; + if (currentUser == nil) { + completion(nil, [FlutterError errorWithCode:kErrCodeNoCurrentUser + message:kErrMsgNoCurrentUser + details:nil]); + return; + } + + [currentUser + getIDTokenResultForcingRefresh:forceRefresh + completion:^(FIRAuthTokenResult *tokenResult, NSError *error) { + if (error != nil) { + completion(nil, [FLTFirebaseAuthPlugin convertToFlutterError:error]); + return; + } + + completion([PigeonParser parseIdTokenResult:tokenResult], nil); + }]; +} + +- (void)linkWithCredentialApp:(nonnull AuthPigeonFirebaseApp *)app + input:(nonnull NSDictionary *)input + completion:(nonnull void (^)(InternalUserCredential *_Nullable, + FlutterError *_Nullable))completion { + FIRAuth *auth = [self getFIRAuthFromAppNameFromPigeon:app]; + FIRUser *currentUser = auth.currentUser; + if (currentUser == nil) { + completion(nil, [FlutterError errorWithCode:kErrCodeNoCurrentUser + message:kErrMsgNoCurrentUser + details:nil]); + return; + } + + [self + getFIRAuthCredentialFromArguments:input + app:app + completion:^(FIRAuthCredential *credential, NSError *error) { + if (credential == nil) { + completion(nil, + [FlutterError errorWithCode:kErrCodeInvalidCredential + message:kErrMsgInvalidCredential + details:nil]); + return; + } + + if (error) { + completion(nil, + [FLTFirebaseAuthPlugin convertToFlutterError:error]); + } + + [currentUser + linkWithCredential:credential + completion:^(FIRAuthDataResult *authResult, + NSError *error) { + if (error != nil) { + if (error.code == + FIRAuthErrorCodeSecondFactorRequired) { + [self handleMultiFactorError:app + completion:completion + withError:error]; + } else { + completion(nil, [FLTFirebaseAuthPlugin + convertToFlutterError:error]); + } + } else { + completion( + [PigeonParser + getPigeonUserCredentialFromAuthResult: + authResult + authorizationCode:nil], + nil); + } + }]; + }]; +} + +- (void)linkWithProviderApp:(nonnull AuthPigeonFirebaseApp *)app + signInProvider:(nonnull InternalSignInProvider *)signInProvider + completion:(nonnull void (^)(InternalUserCredential *_Nullable, + FlutterError *_Nullable))completion { + FIRAuth *auth = [self getFIRAuthFromAppNameFromPigeon:app]; + FIRUser *currentUser = auth.currentUser; + if ([signInProvider.providerId isEqualToString:kSignInMethodGameCenter]) { + completion( + nil, + [FlutterError + errorWithCode:@"provider-link-failure" + message:@"Game Center provider requires linking with 'linkWithCredential()' API." + details:@{}]); + return; + } + + if (currentUser == nil) { + completion(nil, [FlutterError errorWithCode:kErrCodeNoCurrentUser + message:kErrMsgNoCurrentUser + details:nil]); + return; + } + + if ([signInProvider.providerId isEqualToString:kSignInMethodApple]) { + self.linkWithAppleUser = currentUser; + launchAppleSignInRequest(self, app, signInProvider, completion); + return; + } +#if TARGET_OS_OSX + NSLog(@"linkWithProvider is not supported on the " + @"MacOS platform."); + completion(nil, nil); +#else + self.authProvider = [FIROAuthProvider providerWithProviderID:signInProvider.providerId]; + NSArray *scopes = signInProvider.scopes; + if (scopes != nil) { + [self.authProvider setScopes:scopes]; + } + NSDictionary *customParameters = signInProvider.customParameters; + if (customParameters != nil) { + [self.authProvider setCustomParameters:customParameters]; + } + + [currentUser + linkWithProvider:self.authProvider + UIDelegate:nil + completion:^(FIRAuthDataResult *authResult, NSError *error) { + handleAppleAuthResult(self, app, auth, authResult.credential, error, completion); + }]; +#endif +} + +- (void)reauthenticateWithCredentialApp:(nonnull AuthPigeonFirebaseApp *)app + input:(nonnull NSDictionary *)input + completion:(nonnull void (^)(InternalUserCredential *_Nullable, + FlutterError *_Nullable))completion { + FIRAuth *auth = [self getFIRAuthFromAppNameFromPigeon:app]; + FIRUser *currentUser = auth.currentUser; + if (currentUser == nil) { + completion(nil, [FlutterError errorWithCode:kErrCodeNoCurrentUser + message:kErrMsgNoCurrentUser + details:nil]); + return; + } + + [self + getFIRAuthCredentialFromArguments:input + app:app + completion:^(FIRAuthCredential *credential, NSError *error) { + if (credential == nil) { + completion(nil, + [FlutterError errorWithCode:kErrCodeInvalidCredential + message:kErrMsgInvalidCredential + details:nil]); + return; + } + + if (error) { + completion(nil, + [FLTFirebaseAuthPlugin convertToFlutterError:error]); + } + + [currentUser + reauthenticateWithCredential:credential + completion:^(FIRAuthDataResult *authResult, + NSError *error) { + if (error != nil) { + if (error.code == + FIRAuthErrorCodeSecondFactorRequired) { + [self handleMultiFactorError:app + completion:completion + withError:error]; + } else { + completion( + nil, + [FLTFirebaseAuthPlugin + convertToFlutterError:error]); + } + } else { + completion( + [PigeonParser + getPigeonUserCredentialFromAuthResult: + authResult + authorizationCode: + nil], + nil); + } + }]; + }]; +} + +- (void)reauthenticateWithProviderApp:(nonnull AuthPigeonFirebaseApp *)app + signInProvider:(nonnull InternalSignInProvider *)signInProvider + completion:(nonnull void (^)(InternalUserCredential *_Nullable, + FlutterError *_Nullable))completion { + FIRAuth *auth = [self getFIRAuthFromAppNameFromPigeon:app]; + FIRUser *currentUser = auth.currentUser; + if (currentUser == nil) { + completion(nil, [FlutterError errorWithCode:kErrCodeNoCurrentUser + message:kErrMsgNoCurrentUser + details:nil]); + return; + } + + if ([signInProvider.providerId isEqualToString:kSignInMethodApple]) { + self.isReauthenticatingWithApple = YES; + launchAppleSignInRequest(self, app, signInProvider, completion); + return; + } +#if TARGET_OS_OSX + NSLog(@"reauthenticateWithProvider is not supported on the " + @"MacOS platform."); + completion(nil, nil); +#else + self.authProvider = [FIROAuthProvider providerWithProviderID:signInProvider.providerId]; + NSArray *scopes = signInProvider.scopes; + if (scopes != nil) { + [self.authProvider setScopes:scopes]; + } + NSDictionary *customParameters = signInProvider.customParameters; + if (customParameters != nil) { + [self.authProvider setCustomParameters:customParameters]; + } + + [currentUser reauthenticateWithProvider:self.authProvider + UIDelegate:nil + completion:^(FIRAuthDataResult *authResult, NSError *error) { + handleAppleAuthResult(self, app, auth, authResult.credential, + error, completion); + }]; +#endif +} + +- (void)reloadApp:(nonnull AuthPigeonFirebaseApp *)app + completion: + (nonnull void (^)(InternalUserDetails *_Nullable, FlutterError *_Nullable))completion { + FIRAuth *auth = [self getFIRAuthFromAppNameFromPigeon:app]; + FIRUser *currentUser = auth.currentUser; + if (currentUser == nil) { + completion(nil, [FlutterError errorWithCode:kErrCodeNoCurrentUser + message:kErrMsgNoCurrentUser + details:nil]); + return; + } + + [currentUser reloadWithCompletion:^(NSError *_Nullable error) { + if (error != nil) { + completion(nil, [FLTFirebaseAuthPlugin convertToFlutterError:error]); + } else { + completion([PigeonParser getPigeonDetails:currentUser], nil); + } + }]; +} + +- (void)sendEmailVerificationApp:(nonnull AuthPigeonFirebaseApp *)app + actionCodeSettings:(nullable InternalActionCodeSettings *)actionCodeSettings + completion:(nonnull void (^)(FlutterError *_Nullable))completion { + FIRAuth *auth = [self getFIRAuthFromAppNameFromPigeon:app]; + FIRUser *currentUser = auth.currentUser; + if (currentUser == nil) { + completion([FlutterError errorWithCode:kErrCodeNoCurrentUser + message:kErrMsgNoCurrentUser + details:nil]); + return; + } + + [currentUser + sendEmailVerificationWithActionCodeSettings:[PigeonParser + parseActionCodeSettings:actionCodeSettings] + + completion:^(NSError *_Nullable error) { + if (error != nil) { + completion( + [FLTFirebaseAuthPlugin convertToFlutterError:error]); + } else { + completion(nil); + } + }]; +} + +- (void)unlinkApp:(nonnull AuthPigeonFirebaseApp *)app + providerId:(nonnull NSString *)providerId + completion:(nonnull void (^)(InternalUserCredential *_Nullable, + FlutterError *_Nullable))completion { + FIRAuth *auth = [self getFIRAuthFromAppNameFromPigeon:app]; + FIRUser *currentUser = auth.currentUser; + if (currentUser == nil) { + completion(nil, [FlutterError errorWithCode:kErrCodeNoCurrentUser + message:kErrMsgNoCurrentUser + details:nil]); + return; + } + + [currentUser unlinkFromProvider:providerId + completion:^(FIRUser *_Nullable user, NSError *_Nullable error) { + if (error != nil) { + completion(nil, [FLTFirebaseAuthPlugin convertToFlutterError:error]); + } else { + completion([PigeonParser getPigeonUserCredentialFromFIRUser:user], nil); + } + }]; +} + +- (void)updateEmailApp:(nonnull AuthPigeonFirebaseApp *)app + newEmail:(nonnull NSString *)newEmail + completion:(nonnull void (^)(InternalUserDetails *_Nullable, + FlutterError *_Nullable))completion { + FIRAuth *auth = [self getFIRAuthFromAppNameFromPigeon:app]; + FIRUser *currentUser = auth.currentUser; + if (currentUser == nil) { + completion(nil, [FlutterError errorWithCode:kErrCodeNoCurrentUser + message:kErrMsgNoCurrentUser + details:nil]); + return; + } + + [currentUser updateEmail:newEmail + completion:^(NSError *_Nullable error) { + if (error != nil) { + completion(nil, [FLTFirebaseAuthPlugin convertToFlutterError:error]); + } else { + [currentUser reloadWithCompletion:^(NSError *_Nullable reloadError) { + if (reloadError != nil) { + completion(nil, [FLTFirebaseAuthPlugin convertToFlutterError:reloadError]); + } else { + completion([PigeonParser getPigeonDetails:currentUser], nil); + } + }]; + } + }]; +} + +- (void)updatePasswordApp:(nonnull AuthPigeonFirebaseApp *)app + newPassword:(nonnull NSString *)newPassword + completion:(nonnull void (^)(InternalUserDetails *_Nullable, + FlutterError *_Nullable))completion { + FIRAuth *auth = [self getFIRAuthFromAppNameFromPigeon:app]; + FIRUser *currentUser = auth.currentUser; + if (currentUser == nil) { + completion(nil, [FlutterError errorWithCode:kErrCodeNoCurrentUser + message:kErrMsgNoCurrentUser + details:nil]); + return; + } + + [currentUser + updatePassword:newPassword + completion:^(NSError *_Nullable error) { + if (error != nil) { + completion(nil, [FLTFirebaseAuthPlugin convertToFlutterError:error]); + } else { + [currentUser reloadWithCompletion:^(NSError *_Nullable reloadError) { + if (reloadError != nil) { + completion(nil, [FLTFirebaseAuthPlugin convertToFlutterError:reloadError]); + } else { + completion([PigeonParser getPigeonDetails:currentUser], nil); + } + }]; + } + }]; +} + +- (void)updatePhoneNumberApp:(nonnull AuthPigeonFirebaseApp *)app + input:(nonnull NSDictionary *)input + completion:(nonnull void (^)(InternalUserDetails *_Nullable, + FlutterError *_Nullable))completion { +#if TARGET_OS_IPHONE + FIRAuth *auth = [self getFIRAuthFromAppNameFromPigeon:app]; + FIRUser *currentUser = auth.currentUser; + if (currentUser == nil) { + completion(nil, [FlutterError errorWithCode:kErrCodeNoCurrentUser + message:kErrMsgNoCurrentUser + details:nil]); + return; + } + + [self + getFIRAuthCredentialFromArguments:input + app:app + completion:^(FIRAuthCredential *credential, NSError *error) { + if (credential == nil) { + completion(nil, + [FlutterError errorWithCode:kErrCodeInvalidCredential + message:kErrMsgInvalidCredential + details:nil]); + return; + } + + if (error) { + completion(nil, + [FLTFirebaseAuthPlugin convertToFlutterError:error]); + } + + [currentUser + updatePhoneNumberCredential:(FIRPhoneAuthCredential *)credential + completion:^(NSError *_Nullable error) { + if (error != nil) { + completion( + nil, [FLTFirebaseAuthPlugin + convertToFlutterError:error]); + } else { + [currentUser + reloadWithCompletion:^( + NSError *_Nullable reloadError) { + if (reloadError != nil) { + completion( + nil, [FLTFirebaseAuthPlugin + convertToFlutterError: + reloadError]); + } else { + completion( + [PigeonParser getPigeonDetails: + currentUser], + nil); + } + }]; + } + }]; + }]; +#else + NSLog(@"Updating a users phone number via Firebase Authentication is only " + @"supported on the iOS " + @"platform."); + completion(nil, nil); +#endif +} + +- (void)updateProfileApp:(nonnull AuthPigeonFirebaseApp *)app + profile:(nonnull InternalUserProfile *)profile + completion:(nonnull void (^)(InternalUserDetails *_Nullable, + FlutterError *_Nullable))completion { + FIRAuth *auth = [self getFIRAuthFromAppNameFromPigeon:app]; + FIRUser *currentUser = auth.currentUser; + if (currentUser == nil) { + completion(nil, [FlutterError errorWithCode:kErrCodeNoCurrentUser + message:kErrMsgNoCurrentUser + details:nil]); + return; + } + + FIRUserProfileChangeRequest *changeRequest = [currentUser profileChangeRequest]; + + if (profile.displayNameChanged) { + changeRequest.displayName = profile.displayName; + } + + if (profile.photoUrlChanged) { + if (profile.photoUrl == nil) { + // We apparently cannot set photoURL to nil/NULL to remove it. + // Instead, setting it to empty string appears to work. + // When doing so, Dart will properly receive `null` anyway. + changeRequest.photoURL = [NSURL URLWithString:@""]; + } else { + changeRequest.photoURL = [NSURL URLWithString:profile.photoUrl]; + } + } + + [changeRequest commitChangesWithCompletion:^(NSError *error) { + if (error != nil) { + completion(nil, [FLTFirebaseAuthPlugin convertToFlutterError:error]); + } else { + [currentUser reloadWithCompletion:^(NSError *_Nullable reloadError) { + if (reloadError != nil) { + completion(nil, [FLTFirebaseAuthPlugin convertToFlutterError:reloadError]); + } else { + completion([PigeonParser getPigeonDetails:currentUser], nil); + } + }]; + } + }]; +} + +- (void)verifyBeforeUpdateEmailApp:(nonnull AuthPigeonFirebaseApp *)app + newEmail:(nonnull NSString *)newEmail + actionCodeSettings:(nullable InternalActionCodeSettings *)actionCodeSettings + completion:(nonnull void (^)(FlutterError *_Nullable))completion { + FIRAuth *auth = [self getFIRAuthFromAppNameFromPigeon:app]; + FIRUser *currentUser = auth.currentUser; + if (currentUser == nil) { + completion([FlutterError errorWithCode:kErrCodeNoCurrentUser + message:kErrMsgNoCurrentUser + details:nil]); + return; + } + + [currentUser + sendEmailVerificationBeforeUpdatingEmail:newEmail + actionCodeSettings:[PigeonParser + parseActionCodeSettings:actionCodeSettings] + completion:^(NSError *error) { + if (error != nil) { + completion( + [FLTFirebaseAuthPlugin convertToFlutterError:error]); + } else { + completion(nil); + } + }]; +} + +- (void)initializeRecaptchaConfigApp:(AuthPigeonFirebaseApp *)app + completion:(void (^)(FlutterError *_Nullable))completion { +#if TARGET_OS_OSX + NSLog(@"initializeRecaptchaConfigWithCompletion is not supported on the " + @"MacOS platform."); + completion(nil); +#else + FIRAuth *auth = [self getFIRAuthFromAppNameFromPigeon:app]; + [auth initializeRecaptchaConfigWithCompletion:^(NSError *_Nullable error) { + if (error != nil) { + completion([FLTFirebaseAuthPlugin convertToFlutterError:error]); + } else { + completion(nil); + } + }]; +#endif +} + +@end diff --git a/mih_ui/android/build/macos/SourcePackages/firebase_auth-6.5.4/ios/firebase_auth/Sources/firebase_auth/FLTIdTokenChannelStreamHandler.m b/mih_ui/android/build/macos/SourcePackages/firebase_auth-6.5.4/ios/firebase_auth/Sources/firebase_auth/FLTIdTokenChannelStreamHandler.m new file mode 100644 index 00000000..315bc5ec --- /dev/null +++ b/mih_ui/android/build/macos/SourcePackages/firebase_auth-6.5.4/ios/firebase_auth/Sources/firebase_auth/FLTIdTokenChannelStreamHandler.m @@ -0,0 +1,54 @@ +// Copyright 2021 The Chromium Authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. +@import FirebaseAuth; +#import "include/Private/FLTIdTokenChannelStreamHandler.h" +#import +#import "include/Private/PigeonParser.h" +#import "include/Public/FLTFirebaseAuthPlugin.h" + +@implementation FLTIdTokenChannelStreamHandler { + FIRAuth *_auth; + FIRIDTokenDidChangeListenerHandle _listener; +} + +- (instancetype)initWithAuth:(FIRAuth *)auth { + self = [super init]; + if (self) { + _auth = auth; + } + return self; +} + +- (FlutterError *)onListenWithArguments:(id)arguments eventSink:(FlutterEventSink)events { + bool __block initialAuthState = YES; + + _listener = [_auth addIDTokenDidChangeListener:^(FIRAuth *_Nonnull auth, + FIRUser *_Nullable user) { + if (initialAuthState) { + initialAuthState = NO; + return; + } + + if (user) { + events(@{ + @"user" : [PigeonParser getManualList:[PigeonParser getPigeonDetails:[auth currentUser]]] + }); + } else { + events(@{@"user" : [NSNull null]}); + } + }]; + + return nil; +} + +- (FlutterError *)onCancelWithArguments:(id)arguments { + if (_listener) { + [_auth removeIDTokenDidChangeListener:_listener]; + } + _listener = nil; + + return nil; +} + +@end diff --git a/mih_ui/android/build/macos/SourcePackages/firebase_auth-6.5.4/ios/firebase_auth/Sources/firebase_auth/FLTPhoneNumberVerificationStreamHandler.m b/mih_ui/android/build/macos/SourcePackages/firebase_auth-6.5.4/ios/firebase_auth/Sources/firebase_auth/FLTPhoneNumberVerificationStreamHandler.m new file mode 100644 index 00000000..511d2caa --- /dev/null +++ b/mih_ui/android/build/macos/SourcePackages/firebase_auth-6.5.4/ios/firebase_auth/Sources/firebase_auth/FLTPhoneNumberVerificationStreamHandler.m @@ -0,0 +1,98 @@ +// Copyright 2021 The Chromium Authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +@import FirebaseAuth; + +#import "include/Private/FLTPhoneNumberVerificationStreamHandler.h" +#import "include/Public/FLTFirebaseAuthPlugin.h" + +@implementation FLTPhoneNumberVerificationStreamHandler { + FIRAuth *_auth; + NSString *_phoneNumber; +#if TARGET_OS_OSX +#else + FIRMultiFactorSession *_session; + FIRPhoneMultiFactorInfo *_factorInfo; +#endif +} + +#if TARGET_OS_OSX +- (instancetype)initWithAuth:(id)auth request:(InternalVerifyPhoneNumberRequest *)request { + self = [super init]; + if (self) { + _auth = auth; + _phoneNumber = request.phoneNumber; + } + return self; +} +#else +- (instancetype)initWithAuth:(id)auth + request:(InternalVerifyPhoneNumberRequest *)request + session:(FIRMultiFactorSession *)session + factorInfo:(FIRPhoneMultiFactorInfo *)factorInfo { + self = [super init]; + if (self) { + _auth = auth; + _phoneNumber = request.phoneNumber; + _session = session; + _factorInfo = factorInfo; + } + return self; +} +#endif + +- (FlutterError *)onListenWithArguments:(id)arguments eventSink:(FlutterEventSink)events { +#if TARGET_OS_IPHONE + id completer = ^(NSString *verificationID, NSError *error) { + if (error != nil) { + FlutterError *errorDetails = [FLTFirebaseAuthPlugin convertToFlutterError:error]; + events(@{ + @"name" : @"Auth#phoneVerificationFailed", + @"error" : @{ + @"code" : errorDetails.code, + @"message" : errorDetails.message, + @"details" : errorDetails.details, + } + }); + } else { + events(@{ + @"name" : @"Auth#phoneCodeSent", + @"verificationId" : verificationID, + }); + } + }; + + // Try catch to capture 'missing URL scheme' error. + @try { + if (_factorInfo != nil) { + [[FIRPhoneAuthProvider providerWithAuth:_auth] + verifyPhoneNumberWithMultiFactorInfo:_factorInfo + UIDelegate:nil + multiFactorSession:_session + completion:completer]; + + } else { + [[FIRPhoneAuthProvider providerWithAuth:_auth] verifyPhoneNumber:_phoneNumber + UIDelegate:nil + multiFactorSession:_session + completion:completer]; + } + } @catch (NSException *exception) { + events(@{ + @"name" : @"Auth#phoneVerificationFailed", + @"error" : @{ + @"message" : exception.reason, + } + }); + } +#endif + + return nil; +} + +- (FlutterError *)onCancelWithArguments:(id)arguments { + return nil; +} + +@end diff --git a/mih_ui/android/build/macos/SourcePackages/firebase_auth-6.5.4/ios/firebase_auth/Sources/firebase_auth/PigeonParser.m b/mih_ui/android/build/macos/SourcePackages/firebase_auth-6.5.4/ios/firebase_auth/Sources/firebase_auth/PigeonParser.m new file mode 100644 index 00000000..8d7a7b1c --- /dev/null +++ b/mih_ui/android/build/macos/SourcePackages/firebase_auth-6.5.4/ios/firebase_auth/Sources/firebase_auth/PigeonParser.m @@ -0,0 +1,171 @@ +// Copyright 2023, the Chromium project authors. Please see the AUTHORS file +// for details. All rights reserved. Use of this source code is governed by a +// BSD-style license that can be found in the LICENSE file. + +@import FirebaseAuth; + +#import "include/Private/PigeonParser.h" +#import +#import "include/Public/CustomPigeonHeader.h" + +@implementation PigeonParser + ++ (InternalUserCredential *) + getPigeonUserCredentialFromAuthResult:(nonnull FIRAuthDataResult *)authResult + authorizationCode:(nullable NSString *)authorizationCode { + return [InternalUserCredential + makeWithUser:[self getPigeonDetails:authResult.user] + additionalUserInfo:[self getPigeonAdditionalUserInfo:authResult.additionalUserInfo + authorizationCode:authorizationCode] + credential:[self getPigeonAuthCredential:authResult.credential token:nil]]; +} + ++ (InternalUserCredential *)getPigeonUserCredentialFromFIRUser:(nonnull FIRUser *)user { + return [InternalUserCredential makeWithUser:[self getPigeonDetails:user] + additionalUserInfo:nil + credential:nil]; +} + ++ (InternalUserDetails *)getPigeonDetails:(nonnull FIRUser *)user { + return [InternalUserDetails makeWithUserInfo:[self getPigeonUserInfo:user] + providerData:[self getProviderData:user.providerData]]; +} + ++ (InternalUserInfo *)getPigeonUserInfo:(nonnull FIRUser *)user { + NSString *photoUrlString = user.photoURL.absoluteString; + return [InternalUserInfo + makeWithUid:user.uid + email:user.email + displayName:user.displayName + photoUrl:(photoUrlString.length > 0) ? photoUrlString : nil + phoneNumber:user.phoneNumber + isAnonymous:user.isAnonymous + isEmailVerified:user.emailVerified + providerId:user.providerID + tenantId:user.tenantID + refreshToken:user.refreshToken + creationTimestamp:@((long)([user.metadata.creationDate timeIntervalSince1970] * 1000)) + lastSignInTimestamp:@((long)([user.metadata.lastSignInDate timeIntervalSince1970] * 1000))]; +} + ++ (NSArray *> *)getProviderData: + (nonnull NSArray> *)providerData { + NSMutableArray *> *dataArray = + [NSMutableArray arrayWithCapacity:providerData.count]; + + for (id userInfo in providerData) { + NSString *photoUrlStr = userInfo.photoURL.absoluteString; + NSDictionary *dataDict = @{ + @"providerId" : userInfo.providerID, + // Can be null on emulator + @"uid" : userInfo.uid ?: @"", + @"displayName" : userInfo.displayName ?: [NSNull null], + @"email" : userInfo.email ?: [NSNull null], + @"phoneNumber" : userInfo.phoneNumber ?: [NSNull null], + @"photoURL" : photoUrlStr ?: [NSNull null], + // isAnonymous is always false on in a providerData object (the user is not anonymous) + @"isAnonymous" : @NO, + // isEmailVerified is always true on in a providerData object (the email is verified by the + // provider) + @"isEmailVerified" : @YES, + }; + [dataArray addObject:dataDict]; + } + return [dataArray copy]; +} + ++ (InternalAdditionalUserInfo *)getPigeonAdditionalUserInfo: + (nonnull FIRAdditionalUserInfo *)userInfo + authorizationCode:(nullable NSString *)authorizationCode { + return [InternalAdditionalUserInfo makeWithIsNewUser:userInfo.isNewUser + providerId:userInfo.providerID + username:userInfo.username + authorizationCode:authorizationCode + profile:userInfo.profile]; +} + ++ (InternalTotpSecret *)getPigeonTotpSecret:(FIRTOTPSecret *)secret { + return [InternalTotpSecret makeWithCodeIntervalSeconds:nil + codeLength:nil + enrollmentCompletionDeadline:nil + hashingAlgorithm:nil + secretKey:secret.sharedSecretKey]; +} + ++ (InternalAuthCredential *)getPigeonAuthCredential:(FIRAuthCredential *)authCredential + token:(NSNumber *_Nullable)token { + if (authCredential == nil) { + return nil; + } + + NSString *accessToken = nil; + if ([authCredential isKindOfClass:[FIROAuthCredential class]]) { + if (((FIROAuthCredential *)authCredential).accessToken != nil) { + accessToken = ((FIROAuthCredential *)authCredential).accessToken; + } else if (((FIROAuthCredential *)authCredential).IDToken != nil) { + // For Sign In With Apple, the token is stored in IDToken + accessToken = ((FIROAuthCredential *)authCredential).IDToken; + } + } + + NSUInteger nativeId = + token != nil ? [token unsignedLongValue] : (NSUInteger)[authCredential hash]; + + return [InternalAuthCredential makeWithProviderId:authCredential.provider + signInMethod:authCredential.provider + nativeId:nativeId + accessToken:accessToken ?: nil]; +} + ++ (FIRActionCodeSettings *_Nullable)parseActionCodeSettings: + (nullable InternalActionCodeSettings *)settings { + if (settings == nil) { + return nil; + } + + FIRActionCodeSettings *codeSettings = [[FIRActionCodeSettings alloc] init]; + + if (settings.url != nil) { + codeSettings.URL = [NSURL URLWithString:settings.url]; + } + + if (settings.linkDomain != nil) { + codeSettings.linkDomain = settings.linkDomain; + } + + codeSettings.handleCodeInApp = settings.handleCodeInApp; + + if (settings.iOSBundleId != nil) { + codeSettings.iOSBundleID = settings.iOSBundleId; + } + + return codeSettings; +} + ++ (InternalIdTokenResult *)parseIdTokenResult:(FIRAuthTokenResult *)tokenResult { + long expirationTimestamp = (long)[tokenResult.expirationDate timeIntervalSince1970] * 1000; + long authTimestamp = (long)[tokenResult.authDate timeIntervalSince1970] * 1000; + long issuedAtTimestamp = (long)[tokenResult.issuedAtDate timeIntervalSince1970] * 1000; + + return [InternalIdTokenResult makeWithToken:tokenResult.token + expirationTimestamp:@(expirationTimestamp) + authTimestamp:@(authTimestamp) + issuedAtTimestamp:@(issuedAtTimestamp) + signInProvider:tokenResult.signInProvider + claims:tokenResult.claims + signInSecondFactor:tokenResult.signInSecondFactor]; +} + ++ (NSArray *_Nonnull)getManualList:(nonnull InternalUserDetails *)userDetails { + NSMutableArray *output = [NSMutableArray array]; + + id userInfoList = [[userDetails userInfo] toList]; + [output addObject:userInfoList]; + + id providerData = [userDetails providerData]; + [output addObject:providerData]; + + return [output copy]; +} + +@end diff --git a/mih_ui/android/build/macos/SourcePackages/firebase_auth-6.5.4/ios/firebase_auth/Sources/firebase_auth/firebase_auth_messages.g.m b/mih_ui/android/build/macos/SourcePackages/firebase_auth-6.5.4/ios/firebase_auth/Sources/firebase_auth/firebase_auth_messages.g.m new file mode 100644 index 00000000..82ae8cfc --- /dev/null +++ b/mih_ui/android/build/macos/SourcePackages/firebase_auth-6.5.4/ios/firebase_auth/Sources/firebase_auth/firebase_auth_messages.g.m @@ -0,0 +1,3005 @@ +// Copyright 2023, the Chromium project authors. Please see the AUTHORS file +// for details. All rights reserved. Use of this source code is governed by a +// BSD-style license that can be found in the LICENSE file. +// Autogenerated from Pigeon (v26.3.4), do not edit directly. +// See also: https://pub.dev/packages/pigeon + +#import "include/Public/firebase_auth_messages.g.h" + +#if TARGET_OS_OSX +@import FlutterMacOS; +#else +@import Flutter; +#endif + +static BOOL __attribute__((unused)) FLTPigeonDeepEquals(id _Nullable a, id _Nullable b) { + if (a == b) { + return YES; + } + if (a == nil) { + return b == [NSNull null]; + } + if (b == nil) { + return a == [NSNull null]; + } + if ([a isKindOfClass:[NSNumber class]] && [b isKindOfClass:[NSNumber class]]) { + return + [a isEqual:b] || (isnan([(NSNumber *)a doubleValue]) && isnan([(NSNumber *)b doubleValue])); + } + if ([a isKindOfClass:[NSArray class]] && [b isKindOfClass:[NSArray class]]) { + NSArray *arrayA = (NSArray *)a; + NSArray *arrayB = (NSArray *)b; + if (arrayA.count != arrayB.count) { + return NO; + } + for (NSUInteger i = 0; i < arrayA.count; i++) { + if (!FLTPigeonDeepEquals(arrayA[i], arrayB[i])) { + return NO; + } + } + return YES; + } + if ([a isKindOfClass:[NSDictionary class]] && [b isKindOfClass:[NSDictionary class]]) { + NSDictionary *dictA = (NSDictionary *)a; + NSDictionary *dictB = (NSDictionary *)b; + if (dictA.count != dictB.count) { + return NO; + } + for (id keyA in dictA) { + id valueA = dictA[keyA]; + BOOL found = NO; + for (id keyB in dictB) { + if (FLTPigeonDeepEquals(keyA, keyB)) { + id valueB = dictB[keyB]; + if (FLTPigeonDeepEquals(valueA, valueB)) { + found = YES; + break; + } else { + return NO; + } + } + } + if (!found) { + return NO; + } + } + return YES; + } + return [a isEqual:b]; +} + +static NSUInteger __attribute__((unused)) FLTPigeonDeepHash(id _Nullable value) { + if (value == nil || value == (id)[NSNull null]) { + return 0; + } + if ([value isKindOfClass:[NSNumber class]]) { + NSNumber *n = (NSNumber *)value; + double d = n.doubleValue; + if (isnan(d)) { + // Normalize NaN to a consistent hash. + return (NSUInteger)0x7FF8000000000000; + } + if (d == 0.0) { + // Normalize -0.0 to 0.0 so they have the same hash code. + d = 0.0; + } + return @(d).hash; + } + if ([value isKindOfClass:[NSArray class]]) { + NSUInteger result = 1; + for (id item in (NSArray *)value) { + result = result * 31 + FLTPigeonDeepHash(item); + } + return result; + } + if ([value isKindOfClass:[NSDictionary class]]) { + NSUInteger result = 0; + NSDictionary *dict = (NSDictionary *)value; + for (id key in dict) { + result += ((FLTPigeonDeepHash(key) * 31) ^ FLTPigeonDeepHash(dict[key])); + } + return result; + } + return [value hash]; +} + +static NSArray *wrapResult(id result, FlutterError *error) { + if (error) { + return @[ + error.code ?: [NSNull null], error.message ?: [NSNull null], error.details ?: [NSNull null] + ]; + } + return @[ result ?: [NSNull null] ]; +} + +static id GetNullableObjectAtIndex(NSArray *array, NSInteger key) { + id result = array[key]; + return (result == [NSNull null]) ? nil : result; +} + +/// The type of operation that generated the action code from calling +/// [checkActionCode]. +@implementation ActionCodeInfoOperationBox +- (instancetype)initWithValue:(ActionCodeInfoOperation)value { + self = [super init]; + if (self) { + _value = value; + } + return self; +} +@end + +@interface InternalMultiFactorSession () ++ (InternalMultiFactorSession *)fromList:(NSArray *)list; ++ (nullable InternalMultiFactorSession *)nullableFromList:(NSArray *)list; +- (NSArray *)toList; +@end + +@interface InternalPhoneMultiFactorAssertion () ++ (InternalPhoneMultiFactorAssertion *)fromList:(NSArray *)list; ++ (nullable InternalPhoneMultiFactorAssertion *)nullableFromList:(NSArray *)list; +- (NSArray *)toList; +@end + +@interface InternalMultiFactorInfo () ++ (InternalMultiFactorInfo *)fromList:(NSArray *)list; ++ (nullable InternalMultiFactorInfo *)nullableFromList:(NSArray *)list; +- (NSArray *)toList; +@end + +@interface AuthPigeonFirebaseApp () ++ (AuthPigeonFirebaseApp *)fromList:(NSArray *)list; ++ (nullable AuthPigeonFirebaseApp *)nullableFromList:(NSArray *)list; +- (NSArray *)toList; +@end + +@interface InternalActionCodeInfoData () ++ (InternalActionCodeInfoData *)fromList:(NSArray *)list; ++ (nullable InternalActionCodeInfoData *)nullableFromList:(NSArray *)list; +- (NSArray *)toList; +@end + +@interface InternalActionCodeInfo () ++ (InternalActionCodeInfo *)fromList:(NSArray *)list; ++ (nullable InternalActionCodeInfo *)nullableFromList:(NSArray *)list; +- (NSArray *)toList; +@end + +@interface InternalAdditionalUserInfo () ++ (InternalAdditionalUserInfo *)fromList:(NSArray *)list; ++ (nullable InternalAdditionalUserInfo *)nullableFromList:(NSArray *)list; +- (NSArray *)toList; +@end + +@interface InternalAuthCredential () ++ (InternalAuthCredential *)fromList:(NSArray *)list; ++ (nullable InternalAuthCredential *)nullableFromList:(NSArray *)list; +- (NSArray *)toList; +@end + +@interface InternalUserInfo () ++ (InternalUserInfo *)fromList:(NSArray *)list; ++ (nullable InternalUserInfo *)nullableFromList:(NSArray *)list; +- (NSArray *)toList; +@end + +@interface InternalUserDetails () ++ (InternalUserDetails *)fromList:(NSArray *)list; ++ (nullable InternalUserDetails *)nullableFromList:(NSArray *)list; +- (NSArray *)toList; +@end + +@interface InternalUserCredential () ++ (InternalUserCredential *)fromList:(NSArray *)list; ++ (nullable InternalUserCredential *)nullableFromList:(NSArray *)list; +- (NSArray *)toList; +@end + +@interface InternalAuthCredentialInput () ++ (InternalAuthCredentialInput *)fromList:(NSArray *)list; ++ (nullable InternalAuthCredentialInput *)nullableFromList:(NSArray *)list; +- (NSArray *)toList; +@end + +@interface InternalActionCodeSettings () ++ (InternalActionCodeSettings *)fromList:(NSArray *)list; ++ (nullable InternalActionCodeSettings *)nullableFromList:(NSArray *)list; +- (NSArray *)toList; +@end + +@interface InternalFirebaseAuthSettings () ++ (InternalFirebaseAuthSettings *)fromList:(NSArray *)list; ++ (nullable InternalFirebaseAuthSettings *)nullableFromList:(NSArray *)list; +- (NSArray *)toList; +@end + +@interface InternalSignInProvider () ++ (InternalSignInProvider *)fromList:(NSArray *)list; ++ (nullable InternalSignInProvider *)nullableFromList:(NSArray *)list; +- (NSArray *)toList; +@end + +@interface InternalVerifyPhoneNumberRequest () ++ (InternalVerifyPhoneNumberRequest *)fromList:(NSArray *)list; ++ (nullable InternalVerifyPhoneNumberRequest *)nullableFromList:(NSArray *)list; +- (NSArray *)toList; +@end + +@interface InternalIdTokenResult () ++ (InternalIdTokenResult *)fromList:(NSArray *)list; ++ (nullable InternalIdTokenResult *)nullableFromList:(NSArray *)list; +- (NSArray *)toList; +@end + +@interface InternalUserProfile () ++ (InternalUserProfile *)fromList:(NSArray *)list; ++ (nullable InternalUserProfile *)nullableFromList:(NSArray *)list; +- (NSArray *)toList; +@end + +@interface InternalTotpSecret () ++ (InternalTotpSecret *)fromList:(NSArray *)list; ++ (nullable InternalTotpSecret *)nullableFromList:(NSArray *)list; +- (NSArray *)toList; +@end + +@implementation InternalMultiFactorSession ++ (instancetype)makeWithId:(NSString *)id { + InternalMultiFactorSession *pigeonResult = [[InternalMultiFactorSession alloc] init]; + pigeonResult.id = id; + return pigeonResult; +} ++ (InternalMultiFactorSession *)fromList:(NSArray *)list { + InternalMultiFactorSession *pigeonResult = [[InternalMultiFactorSession alloc] init]; + pigeonResult.id = GetNullableObjectAtIndex(list, 0); + return pigeonResult; +} ++ (nullable InternalMultiFactorSession *)nullableFromList:(NSArray *)list { + return (list) ? [InternalMultiFactorSession fromList:list] : nil; +} +- (NSArray *)toList { + return @[ + self.id ?: [NSNull null], + ]; +} +- (BOOL)isEqual:(id)object { + if (self == object) { + return YES; + } + if (![object isKindOfClass:[self class]]) { + return NO; + } + InternalMultiFactorSession *other = (InternalMultiFactorSession *)object; + return FLTPigeonDeepEquals(self.id, other.id); +} + +- (NSUInteger)hash { + NSUInteger result = [self class].hash; + result = result * 31 + FLTPigeonDeepHash(self.id); + return result; +} +@end + +@implementation InternalPhoneMultiFactorAssertion ++ (instancetype)makeWithVerificationId:(NSString *)verificationId + verificationCode:(NSString *)verificationCode { + InternalPhoneMultiFactorAssertion *pigeonResult = + [[InternalPhoneMultiFactorAssertion alloc] init]; + pigeonResult.verificationId = verificationId; + pigeonResult.verificationCode = verificationCode; + return pigeonResult; +} ++ (InternalPhoneMultiFactorAssertion *)fromList:(NSArray *)list { + InternalPhoneMultiFactorAssertion *pigeonResult = + [[InternalPhoneMultiFactorAssertion alloc] init]; + pigeonResult.verificationId = GetNullableObjectAtIndex(list, 0); + pigeonResult.verificationCode = GetNullableObjectAtIndex(list, 1); + return pigeonResult; +} ++ (nullable InternalPhoneMultiFactorAssertion *)nullableFromList:(NSArray *)list { + return (list) ? [InternalPhoneMultiFactorAssertion fromList:list] : nil; +} +- (NSArray *)toList { + return @[ + self.verificationId ?: [NSNull null], + self.verificationCode ?: [NSNull null], + ]; +} +- (BOOL)isEqual:(id)object { + if (self == object) { + return YES; + } + if (![object isKindOfClass:[self class]]) { + return NO; + } + InternalPhoneMultiFactorAssertion *other = (InternalPhoneMultiFactorAssertion *)object; + return FLTPigeonDeepEquals(self.verificationId, other.verificationId) && + FLTPigeonDeepEquals(self.verificationCode, other.verificationCode); +} + +- (NSUInteger)hash { + NSUInteger result = [self class].hash; + result = result * 31 + FLTPigeonDeepHash(self.verificationId); + result = result * 31 + FLTPigeonDeepHash(self.verificationCode); + return result; +} +@end + +@implementation InternalMultiFactorInfo ++ (instancetype)makeWithDisplayName:(nullable NSString *)displayName + enrollmentTimestamp:(double)enrollmentTimestamp + factorId:(nullable NSString *)factorId + uid:(NSString *)uid + phoneNumber:(nullable NSString *)phoneNumber { + InternalMultiFactorInfo *pigeonResult = [[InternalMultiFactorInfo alloc] init]; + pigeonResult.displayName = displayName; + pigeonResult.enrollmentTimestamp = enrollmentTimestamp; + pigeonResult.factorId = factorId; + pigeonResult.uid = uid; + pigeonResult.phoneNumber = phoneNumber; + return pigeonResult; +} ++ (InternalMultiFactorInfo *)fromList:(NSArray *)list { + InternalMultiFactorInfo *pigeonResult = [[InternalMultiFactorInfo alloc] init]; + pigeonResult.displayName = GetNullableObjectAtIndex(list, 0); + pigeonResult.enrollmentTimestamp = [GetNullableObjectAtIndex(list, 1) doubleValue]; + pigeonResult.factorId = GetNullableObjectAtIndex(list, 2); + pigeonResult.uid = GetNullableObjectAtIndex(list, 3); + pigeonResult.phoneNumber = GetNullableObjectAtIndex(list, 4); + return pigeonResult; +} ++ (nullable InternalMultiFactorInfo *)nullableFromList:(NSArray *)list { + return (list) ? [InternalMultiFactorInfo fromList:list] : nil; +} +- (NSArray *)toList { + return @[ + self.displayName ?: [NSNull null], + @(self.enrollmentTimestamp), + self.factorId ?: [NSNull null], + self.uid ?: [NSNull null], + self.phoneNumber ?: [NSNull null], + ]; +} +- (BOOL)isEqual:(id)object { + if (self == object) { + return YES; + } + if (![object isKindOfClass:[self class]]) { + return NO; + } + InternalMultiFactorInfo *other = (InternalMultiFactorInfo *)object; + return FLTPigeonDeepEquals(self.displayName, other.displayName) && + (self.enrollmentTimestamp == other.enrollmentTimestamp || + (isnan(self.enrollmentTimestamp) && isnan(other.enrollmentTimestamp))) && + FLTPigeonDeepEquals(self.factorId, other.factorId) && + FLTPigeonDeepEquals(self.uid, other.uid) && + FLTPigeonDeepEquals(self.phoneNumber, other.phoneNumber); +} + +- (NSUInteger)hash { + NSUInteger result = [self class].hash; + result = result * 31 + FLTPigeonDeepHash(self.displayName); + result = result * 31 + (isnan(self.enrollmentTimestamp) ? (NSUInteger)0x7FF8000000000000 + : @(self.enrollmentTimestamp).hash); + result = result * 31 + FLTPigeonDeepHash(self.factorId); + result = result * 31 + FLTPigeonDeepHash(self.uid); + result = result * 31 + FLTPigeonDeepHash(self.phoneNumber); + return result; +} +@end + +@implementation AuthPigeonFirebaseApp ++ (instancetype)makeWithAppName:(NSString *)appName + tenantId:(nullable NSString *)tenantId + customAuthDomain:(nullable NSString *)customAuthDomain { + AuthPigeonFirebaseApp *pigeonResult = [[AuthPigeonFirebaseApp alloc] init]; + pigeonResult.appName = appName; + pigeonResult.tenantId = tenantId; + pigeonResult.customAuthDomain = customAuthDomain; + return pigeonResult; +} ++ (AuthPigeonFirebaseApp *)fromList:(NSArray *)list { + AuthPigeonFirebaseApp *pigeonResult = [[AuthPigeonFirebaseApp alloc] init]; + pigeonResult.appName = GetNullableObjectAtIndex(list, 0); + pigeonResult.tenantId = GetNullableObjectAtIndex(list, 1); + pigeonResult.customAuthDomain = GetNullableObjectAtIndex(list, 2); + return pigeonResult; +} ++ (nullable AuthPigeonFirebaseApp *)nullableFromList:(NSArray *)list { + return (list) ? [AuthPigeonFirebaseApp fromList:list] : nil; +} +- (NSArray *)toList { + return @[ + self.appName ?: [NSNull null], + self.tenantId ?: [NSNull null], + self.customAuthDomain ?: [NSNull null], + ]; +} +- (BOOL)isEqual:(id)object { + if (self == object) { + return YES; + } + if (![object isKindOfClass:[self class]]) { + return NO; + } + AuthPigeonFirebaseApp *other = (AuthPigeonFirebaseApp *)object; + return FLTPigeonDeepEquals(self.appName, other.appName) && + FLTPigeonDeepEquals(self.tenantId, other.tenantId) && + FLTPigeonDeepEquals(self.customAuthDomain, other.customAuthDomain); +} + +- (NSUInteger)hash { + NSUInteger result = [self class].hash; + result = result * 31 + FLTPigeonDeepHash(self.appName); + result = result * 31 + FLTPigeonDeepHash(self.tenantId); + result = result * 31 + FLTPigeonDeepHash(self.customAuthDomain); + return result; +} +@end + +@implementation InternalActionCodeInfoData ++ (instancetype)makeWithEmail:(nullable NSString *)email + previousEmail:(nullable NSString *)previousEmail { + InternalActionCodeInfoData *pigeonResult = [[InternalActionCodeInfoData alloc] init]; + pigeonResult.email = email; + pigeonResult.previousEmail = previousEmail; + return pigeonResult; +} ++ (InternalActionCodeInfoData *)fromList:(NSArray *)list { + InternalActionCodeInfoData *pigeonResult = [[InternalActionCodeInfoData alloc] init]; + pigeonResult.email = GetNullableObjectAtIndex(list, 0); + pigeonResult.previousEmail = GetNullableObjectAtIndex(list, 1); + return pigeonResult; +} ++ (nullable InternalActionCodeInfoData *)nullableFromList:(NSArray *)list { + return (list) ? [InternalActionCodeInfoData fromList:list] : nil; +} +- (NSArray *)toList { + return @[ + self.email ?: [NSNull null], + self.previousEmail ?: [NSNull null], + ]; +} +- (BOOL)isEqual:(id)object { + if (self == object) { + return YES; + } + if (![object isKindOfClass:[self class]]) { + return NO; + } + InternalActionCodeInfoData *other = (InternalActionCodeInfoData *)object; + return FLTPigeonDeepEquals(self.email, other.email) && + FLTPigeonDeepEquals(self.previousEmail, other.previousEmail); +} + +- (NSUInteger)hash { + NSUInteger result = [self class].hash; + result = result * 31 + FLTPigeonDeepHash(self.email); + result = result * 31 + FLTPigeonDeepHash(self.previousEmail); + return result; +} +@end + +@implementation InternalActionCodeInfo ++ (instancetype)makeWithOperation:(ActionCodeInfoOperation)operation + data:(InternalActionCodeInfoData *)data { + InternalActionCodeInfo *pigeonResult = [[InternalActionCodeInfo alloc] init]; + pigeonResult.operation = operation; + pigeonResult.data = data; + return pigeonResult; +} ++ (InternalActionCodeInfo *)fromList:(NSArray *)list { + InternalActionCodeInfo *pigeonResult = [[InternalActionCodeInfo alloc] init]; + ActionCodeInfoOperationBox *boxedActionCodeInfoOperation = GetNullableObjectAtIndex(list, 0); + pigeonResult.operation = boxedActionCodeInfoOperation.value; + pigeonResult.data = GetNullableObjectAtIndex(list, 1); + return pigeonResult; +} ++ (nullable InternalActionCodeInfo *)nullableFromList:(NSArray *)list { + return (list) ? [InternalActionCodeInfo fromList:list] : nil; +} +- (NSArray *)toList { + return @[ + [[ActionCodeInfoOperationBox alloc] initWithValue:self.operation], + self.data ?: [NSNull null], + ]; +} +- (BOOL)isEqual:(id)object { + if (self == object) { + return YES; + } + if (![object isKindOfClass:[self class]]) { + return NO; + } + InternalActionCodeInfo *other = (InternalActionCodeInfo *)object; + return self.operation == other.operation && FLTPigeonDeepEquals(self.data, other.data); +} + +- (NSUInteger)hash { + NSUInteger result = [self class].hash; + result = result * 31 + @(self.operation).hash; + result = result * 31 + FLTPigeonDeepHash(self.data); + return result; +} +@end + +@implementation InternalAdditionalUserInfo ++ (instancetype)makeWithIsNewUser:(BOOL)isNewUser + providerId:(nullable NSString *)providerId + username:(nullable NSString *)username + authorizationCode:(nullable NSString *)authorizationCode + profile:(nullable NSDictionary *)profile { + InternalAdditionalUserInfo *pigeonResult = [[InternalAdditionalUserInfo alloc] init]; + pigeonResult.isNewUser = isNewUser; + pigeonResult.providerId = providerId; + pigeonResult.username = username; + pigeonResult.authorizationCode = authorizationCode; + pigeonResult.profile = profile; + return pigeonResult; +} ++ (InternalAdditionalUserInfo *)fromList:(NSArray *)list { + InternalAdditionalUserInfo *pigeonResult = [[InternalAdditionalUserInfo alloc] init]; + pigeonResult.isNewUser = [GetNullableObjectAtIndex(list, 0) boolValue]; + pigeonResult.providerId = GetNullableObjectAtIndex(list, 1); + pigeonResult.username = GetNullableObjectAtIndex(list, 2); + pigeonResult.authorizationCode = GetNullableObjectAtIndex(list, 3); + pigeonResult.profile = GetNullableObjectAtIndex(list, 4); + return pigeonResult; +} ++ (nullable InternalAdditionalUserInfo *)nullableFromList:(NSArray *)list { + return (list) ? [InternalAdditionalUserInfo fromList:list] : nil; +} +- (NSArray *)toList { + return @[ + @(self.isNewUser), + self.providerId ?: [NSNull null], + self.username ?: [NSNull null], + self.authorizationCode ?: [NSNull null], + self.profile ?: [NSNull null], + ]; +} +- (BOOL)isEqual:(id)object { + if (self == object) { + return YES; + } + if (![object isKindOfClass:[self class]]) { + return NO; + } + InternalAdditionalUserInfo *other = (InternalAdditionalUserInfo *)object; + return self.isNewUser == other.isNewUser && + FLTPigeonDeepEquals(self.providerId, other.providerId) && + FLTPigeonDeepEquals(self.username, other.username) && + FLTPigeonDeepEquals(self.authorizationCode, other.authorizationCode) && + FLTPigeonDeepEquals(self.profile, other.profile); +} + +- (NSUInteger)hash { + NSUInteger result = [self class].hash; + result = result * 31 + @(self.isNewUser).hash; + result = result * 31 + FLTPigeonDeepHash(self.providerId); + result = result * 31 + FLTPigeonDeepHash(self.username); + result = result * 31 + FLTPigeonDeepHash(self.authorizationCode); + result = result * 31 + FLTPigeonDeepHash(self.profile); + return result; +} +@end + +@implementation InternalAuthCredential ++ (instancetype)makeWithProviderId:(NSString *)providerId + signInMethod:(NSString *)signInMethod + nativeId:(NSInteger)nativeId + accessToken:(nullable NSString *)accessToken { + InternalAuthCredential *pigeonResult = [[InternalAuthCredential alloc] init]; + pigeonResult.providerId = providerId; + pigeonResult.signInMethod = signInMethod; + pigeonResult.nativeId = nativeId; + pigeonResult.accessToken = accessToken; + return pigeonResult; +} ++ (InternalAuthCredential *)fromList:(NSArray *)list { + InternalAuthCredential *pigeonResult = [[InternalAuthCredential alloc] init]; + pigeonResult.providerId = GetNullableObjectAtIndex(list, 0); + pigeonResult.signInMethod = GetNullableObjectAtIndex(list, 1); + pigeonResult.nativeId = [GetNullableObjectAtIndex(list, 2) integerValue]; + pigeonResult.accessToken = GetNullableObjectAtIndex(list, 3); + return pigeonResult; +} ++ (nullable InternalAuthCredential *)nullableFromList:(NSArray *)list { + return (list) ? [InternalAuthCredential fromList:list] : nil; +} +- (NSArray *)toList { + return @[ + self.providerId ?: [NSNull null], + self.signInMethod ?: [NSNull null], + @(self.nativeId), + self.accessToken ?: [NSNull null], + ]; +} +- (BOOL)isEqual:(id)object { + if (self == object) { + return YES; + } + if (![object isKindOfClass:[self class]]) { + return NO; + } + InternalAuthCredential *other = (InternalAuthCredential *)object; + return FLTPigeonDeepEquals(self.providerId, other.providerId) && + FLTPigeonDeepEquals(self.signInMethod, other.signInMethod) && + self.nativeId == other.nativeId && + FLTPigeonDeepEquals(self.accessToken, other.accessToken); +} + +- (NSUInteger)hash { + NSUInteger result = [self class].hash; + result = result * 31 + FLTPigeonDeepHash(self.providerId); + result = result * 31 + FLTPigeonDeepHash(self.signInMethod); + result = result * 31 + @(self.nativeId).hash; + result = result * 31 + FLTPigeonDeepHash(self.accessToken); + return result; +} +@end + +@implementation InternalUserInfo ++ (instancetype)makeWithUid:(NSString *)uid + email:(nullable NSString *)email + displayName:(nullable NSString *)displayName + photoUrl:(nullable NSString *)photoUrl + phoneNumber:(nullable NSString *)phoneNumber + isAnonymous:(BOOL)isAnonymous + isEmailVerified:(BOOL)isEmailVerified + providerId:(nullable NSString *)providerId + tenantId:(nullable NSString *)tenantId + refreshToken:(nullable NSString *)refreshToken + creationTimestamp:(nullable NSNumber *)creationTimestamp + lastSignInTimestamp:(nullable NSNumber *)lastSignInTimestamp { + InternalUserInfo *pigeonResult = [[InternalUserInfo alloc] init]; + pigeonResult.uid = uid; + pigeonResult.email = email; + pigeonResult.displayName = displayName; + pigeonResult.photoUrl = photoUrl; + pigeonResult.phoneNumber = phoneNumber; + pigeonResult.isAnonymous = isAnonymous; + pigeonResult.isEmailVerified = isEmailVerified; + pigeonResult.providerId = providerId; + pigeonResult.tenantId = tenantId; + pigeonResult.refreshToken = refreshToken; + pigeonResult.creationTimestamp = creationTimestamp; + pigeonResult.lastSignInTimestamp = lastSignInTimestamp; + return pigeonResult; +} ++ (InternalUserInfo *)fromList:(NSArray *)list { + InternalUserInfo *pigeonResult = [[InternalUserInfo alloc] init]; + pigeonResult.uid = GetNullableObjectAtIndex(list, 0); + pigeonResult.email = GetNullableObjectAtIndex(list, 1); + pigeonResult.displayName = GetNullableObjectAtIndex(list, 2); + pigeonResult.photoUrl = GetNullableObjectAtIndex(list, 3); + pigeonResult.phoneNumber = GetNullableObjectAtIndex(list, 4); + pigeonResult.isAnonymous = [GetNullableObjectAtIndex(list, 5) boolValue]; + pigeonResult.isEmailVerified = [GetNullableObjectAtIndex(list, 6) boolValue]; + pigeonResult.providerId = GetNullableObjectAtIndex(list, 7); + pigeonResult.tenantId = GetNullableObjectAtIndex(list, 8); + pigeonResult.refreshToken = GetNullableObjectAtIndex(list, 9); + pigeonResult.creationTimestamp = GetNullableObjectAtIndex(list, 10); + pigeonResult.lastSignInTimestamp = GetNullableObjectAtIndex(list, 11); + return pigeonResult; +} ++ (nullable InternalUserInfo *)nullableFromList:(NSArray *)list { + return (list) ? [InternalUserInfo fromList:list] : nil; +} +- (NSArray *)toList { + return @[ + self.uid ?: [NSNull null], + self.email ?: [NSNull null], + self.displayName ?: [NSNull null], + self.photoUrl ?: [NSNull null], + self.phoneNumber ?: [NSNull null], + @(self.isAnonymous), + @(self.isEmailVerified), + self.providerId ?: [NSNull null], + self.tenantId ?: [NSNull null], + self.refreshToken ?: [NSNull null], + self.creationTimestamp ?: [NSNull null], + self.lastSignInTimestamp ?: [NSNull null], + ]; +} +- (BOOL)isEqual:(id)object { + if (self == object) { + return YES; + } + if (![object isKindOfClass:[self class]]) { + return NO; + } + InternalUserInfo *other = (InternalUserInfo *)object; + return FLTPigeonDeepEquals(self.uid, other.uid) && FLTPigeonDeepEquals(self.email, other.email) && + FLTPigeonDeepEquals(self.displayName, other.displayName) && + FLTPigeonDeepEquals(self.photoUrl, other.photoUrl) && + FLTPigeonDeepEquals(self.phoneNumber, other.phoneNumber) && + self.isAnonymous == other.isAnonymous && self.isEmailVerified == other.isEmailVerified && + FLTPigeonDeepEquals(self.providerId, other.providerId) && + FLTPigeonDeepEquals(self.tenantId, other.tenantId) && + FLTPigeonDeepEquals(self.refreshToken, other.refreshToken) && + FLTPigeonDeepEquals(self.creationTimestamp, other.creationTimestamp) && + FLTPigeonDeepEquals(self.lastSignInTimestamp, other.lastSignInTimestamp); +} + +- (NSUInteger)hash { + NSUInteger result = [self class].hash; + result = result * 31 + FLTPigeonDeepHash(self.uid); + result = result * 31 + FLTPigeonDeepHash(self.email); + result = result * 31 + FLTPigeonDeepHash(self.displayName); + result = result * 31 + FLTPigeonDeepHash(self.photoUrl); + result = result * 31 + FLTPigeonDeepHash(self.phoneNumber); + result = result * 31 + @(self.isAnonymous).hash; + result = result * 31 + @(self.isEmailVerified).hash; + result = result * 31 + FLTPigeonDeepHash(self.providerId); + result = result * 31 + FLTPigeonDeepHash(self.tenantId); + result = result * 31 + FLTPigeonDeepHash(self.refreshToken); + result = result * 31 + FLTPigeonDeepHash(self.creationTimestamp); + result = result * 31 + FLTPigeonDeepHash(self.lastSignInTimestamp); + return result; +} +@end + +@implementation InternalUserDetails ++ (instancetype)makeWithUserInfo:(InternalUserInfo *)userInfo + providerData:(NSArray *> *)providerData { + InternalUserDetails *pigeonResult = [[InternalUserDetails alloc] init]; + pigeonResult.userInfo = userInfo; + pigeonResult.providerData = providerData; + return pigeonResult; +} ++ (InternalUserDetails *)fromList:(NSArray *)list { + InternalUserDetails *pigeonResult = [[InternalUserDetails alloc] init]; + pigeonResult.userInfo = GetNullableObjectAtIndex(list, 0); + pigeonResult.providerData = GetNullableObjectAtIndex(list, 1); + return pigeonResult; +} ++ (nullable InternalUserDetails *)nullableFromList:(NSArray *)list { + return (list) ? [InternalUserDetails fromList:list] : nil; +} +- (NSArray *)toList { + return @[ + self.userInfo ?: [NSNull null], + self.providerData ?: [NSNull null], + ]; +} +- (BOOL)isEqual:(id)object { + if (self == object) { + return YES; + } + if (![object isKindOfClass:[self class]]) { + return NO; + } + InternalUserDetails *other = (InternalUserDetails *)object; + return FLTPigeonDeepEquals(self.userInfo, other.userInfo) && + FLTPigeonDeepEquals(self.providerData, other.providerData); +} + +- (NSUInteger)hash { + NSUInteger result = [self class].hash; + result = result * 31 + FLTPigeonDeepHash(self.userInfo); + result = result * 31 + FLTPigeonDeepHash(self.providerData); + return result; +} +@end + +@implementation InternalUserCredential ++ (instancetype)makeWithUser:(nullable InternalUserDetails *)user + additionalUserInfo:(nullable InternalAdditionalUserInfo *)additionalUserInfo + credential:(nullable InternalAuthCredential *)credential { + InternalUserCredential *pigeonResult = [[InternalUserCredential alloc] init]; + pigeonResult.user = user; + pigeonResult.additionalUserInfo = additionalUserInfo; + pigeonResult.credential = credential; + return pigeonResult; +} ++ (InternalUserCredential *)fromList:(NSArray *)list { + InternalUserCredential *pigeonResult = [[InternalUserCredential alloc] init]; + pigeonResult.user = GetNullableObjectAtIndex(list, 0); + pigeonResult.additionalUserInfo = GetNullableObjectAtIndex(list, 1); + pigeonResult.credential = GetNullableObjectAtIndex(list, 2); + return pigeonResult; +} ++ (nullable InternalUserCredential *)nullableFromList:(NSArray *)list { + return (list) ? [InternalUserCredential fromList:list] : nil; +} +- (NSArray *)toList { + return @[ + self.user ?: [NSNull null], + self.additionalUserInfo ?: [NSNull null], + self.credential ?: [NSNull null], + ]; +} +- (BOOL)isEqual:(id)object { + if (self == object) { + return YES; + } + if (![object isKindOfClass:[self class]]) { + return NO; + } + InternalUserCredential *other = (InternalUserCredential *)object; + return FLTPigeonDeepEquals(self.user, other.user) && + FLTPigeonDeepEquals(self.additionalUserInfo, other.additionalUserInfo) && + FLTPigeonDeepEquals(self.credential, other.credential); +} + +- (NSUInteger)hash { + NSUInteger result = [self class].hash; + result = result * 31 + FLTPigeonDeepHash(self.user); + result = result * 31 + FLTPigeonDeepHash(self.additionalUserInfo); + result = result * 31 + FLTPigeonDeepHash(self.credential); + return result; +} +@end + +@implementation InternalAuthCredentialInput ++ (instancetype)makeWithProviderId:(NSString *)providerId + signInMethod:(NSString *)signInMethod + token:(nullable NSString *)token + accessToken:(nullable NSString *)accessToken { + InternalAuthCredentialInput *pigeonResult = [[InternalAuthCredentialInput alloc] init]; + pigeonResult.providerId = providerId; + pigeonResult.signInMethod = signInMethod; + pigeonResult.token = token; + pigeonResult.accessToken = accessToken; + return pigeonResult; +} ++ (InternalAuthCredentialInput *)fromList:(NSArray *)list { + InternalAuthCredentialInput *pigeonResult = [[InternalAuthCredentialInput alloc] init]; + pigeonResult.providerId = GetNullableObjectAtIndex(list, 0); + pigeonResult.signInMethod = GetNullableObjectAtIndex(list, 1); + pigeonResult.token = GetNullableObjectAtIndex(list, 2); + pigeonResult.accessToken = GetNullableObjectAtIndex(list, 3); + return pigeonResult; +} ++ (nullable InternalAuthCredentialInput *)nullableFromList:(NSArray *)list { + return (list) ? [InternalAuthCredentialInput fromList:list] : nil; +} +- (NSArray *)toList { + return @[ + self.providerId ?: [NSNull null], + self.signInMethod ?: [NSNull null], + self.token ?: [NSNull null], + self.accessToken ?: [NSNull null], + ]; +} +- (BOOL)isEqual:(id)object { + if (self == object) { + return YES; + } + if (![object isKindOfClass:[self class]]) { + return NO; + } + InternalAuthCredentialInput *other = (InternalAuthCredentialInput *)object; + return FLTPigeonDeepEquals(self.providerId, other.providerId) && + FLTPigeonDeepEquals(self.signInMethod, other.signInMethod) && + FLTPigeonDeepEquals(self.token, other.token) && + FLTPigeonDeepEquals(self.accessToken, other.accessToken); +} + +- (NSUInteger)hash { + NSUInteger result = [self class].hash; + result = result * 31 + FLTPigeonDeepHash(self.providerId); + result = result * 31 + FLTPigeonDeepHash(self.signInMethod); + result = result * 31 + FLTPigeonDeepHash(self.token); + result = result * 31 + FLTPigeonDeepHash(self.accessToken); + return result; +} +@end + +@implementation InternalActionCodeSettings ++ (instancetype)makeWithUrl:(NSString *)url + dynamicLinkDomain:(nullable NSString *)dynamicLinkDomain + handleCodeInApp:(BOOL)handleCodeInApp + iOSBundleId:(nullable NSString *)iOSBundleId + androidPackageName:(nullable NSString *)androidPackageName + androidInstallApp:(BOOL)androidInstallApp + androidMinimumVersion:(nullable NSString *)androidMinimumVersion + linkDomain:(nullable NSString *)linkDomain { + InternalActionCodeSettings *pigeonResult = [[InternalActionCodeSettings alloc] init]; + pigeonResult.url = url; + pigeonResult.dynamicLinkDomain = dynamicLinkDomain; + pigeonResult.handleCodeInApp = handleCodeInApp; + pigeonResult.iOSBundleId = iOSBundleId; + pigeonResult.androidPackageName = androidPackageName; + pigeonResult.androidInstallApp = androidInstallApp; + pigeonResult.androidMinimumVersion = androidMinimumVersion; + pigeonResult.linkDomain = linkDomain; + return pigeonResult; +} ++ (InternalActionCodeSettings *)fromList:(NSArray *)list { + InternalActionCodeSettings *pigeonResult = [[InternalActionCodeSettings alloc] init]; + pigeonResult.url = GetNullableObjectAtIndex(list, 0); + pigeonResult.dynamicLinkDomain = GetNullableObjectAtIndex(list, 1); + pigeonResult.handleCodeInApp = [GetNullableObjectAtIndex(list, 2) boolValue]; + pigeonResult.iOSBundleId = GetNullableObjectAtIndex(list, 3); + pigeonResult.androidPackageName = GetNullableObjectAtIndex(list, 4); + pigeonResult.androidInstallApp = [GetNullableObjectAtIndex(list, 5) boolValue]; + pigeonResult.androidMinimumVersion = GetNullableObjectAtIndex(list, 6); + pigeonResult.linkDomain = GetNullableObjectAtIndex(list, 7); + return pigeonResult; +} ++ (nullable InternalActionCodeSettings *)nullableFromList:(NSArray *)list { + return (list) ? [InternalActionCodeSettings fromList:list] : nil; +} +- (NSArray *)toList { + return @[ + self.url ?: [NSNull null], + self.dynamicLinkDomain ?: [NSNull null], + @(self.handleCodeInApp), + self.iOSBundleId ?: [NSNull null], + self.androidPackageName ?: [NSNull null], + @(self.androidInstallApp), + self.androidMinimumVersion ?: [NSNull null], + self.linkDomain ?: [NSNull null], + ]; +} +- (BOOL)isEqual:(id)object { + if (self == object) { + return YES; + } + if (![object isKindOfClass:[self class]]) { + return NO; + } + InternalActionCodeSettings *other = (InternalActionCodeSettings *)object; + return FLTPigeonDeepEquals(self.url, other.url) && + FLTPigeonDeepEquals(self.dynamicLinkDomain, other.dynamicLinkDomain) && + self.handleCodeInApp == other.handleCodeInApp && + FLTPigeonDeepEquals(self.iOSBundleId, other.iOSBundleId) && + FLTPigeonDeepEquals(self.androidPackageName, other.androidPackageName) && + self.androidInstallApp == other.androidInstallApp && + FLTPigeonDeepEquals(self.androidMinimumVersion, other.androidMinimumVersion) && + FLTPigeonDeepEquals(self.linkDomain, other.linkDomain); +} + +- (NSUInteger)hash { + NSUInteger result = [self class].hash; + result = result * 31 + FLTPigeonDeepHash(self.url); + result = result * 31 + FLTPigeonDeepHash(self.dynamicLinkDomain); + result = result * 31 + @(self.handleCodeInApp).hash; + result = result * 31 + FLTPigeonDeepHash(self.iOSBundleId); + result = result * 31 + FLTPigeonDeepHash(self.androidPackageName); + result = result * 31 + @(self.androidInstallApp).hash; + result = result * 31 + FLTPigeonDeepHash(self.androidMinimumVersion); + result = result * 31 + FLTPigeonDeepHash(self.linkDomain); + return result; +} +@end + +@implementation InternalFirebaseAuthSettings ++ (instancetype)makeWithAppVerificationDisabledForTesting:(BOOL)appVerificationDisabledForTesting + userAccessGroup:(nullable NSString *)userAccessGroup + phoneNumber:(nullable NSString *)phoneNumber + smsCode:(nullable NSString *)smsCode + forceRecaptchaFlow:(nullable NSNumber *)forceRecaptchaFlow { + InternalFirebaseAuthSettings *pigeonResult = [[InternalFirebaseAuthSettings alloc] init]; + pigeonResult.appVerificationDisabledForTesting = appVerificationDisabledForTesting; + pigeonResult.userAccessGroup = userAccessGroup; + pigeonResult.phoneNumber = phoneNumber; + pigeonResult.smsCode = smsCode; + pigeonResult.forceRecaptchaFlow = forceRecaptchaFlow; + return pigeonResult; +} ++ (InternalFirebaseAuthSettings *)fromList:(NSArray *)list { + InternalFirebaseAuthSettings *pigeonResult = [[InternalFirebaseAuthSettings alloc] init]; + pigeonResult.appVerificationDisabledForTesting = [GetNullableObjectAtIndex(list, 0) boolValue]; + pigeonResult.userAccessGroup = GetNullableObjectAtIndex(list, 1); + pigeonResult.phoneNumber = GetNullableObjectAtIndex(list, 2); + pigeonResult.smsCode = GetNullableObjectAtIndex(list, 3); + pigeonResult.forceRecaptchaFlow = GetNullableObjectAtIndex(list, 4); + return pigeonResult; +} ++ (nullable InternalFirebaseAuthSettings *)nullableFromList:(NSArray *)list { + return (list) ? [InternalFirebaseAuthSettings fromList:list] : nil; +} +- (NSArray *)toList { + return @[ + @(self.appVerificationDisabledForTesting), + self.userAccessGroup ?: [NSNull null], + self.phoneNumber ?: [NSNull null], + self.smsCode ?: [NSNull null], + self.forceRecaptchaFlow ?: [NSNull null], + ]; +} +- (BOOL)isEqual:(id)object { + if (self == object) { + return YES; + } + if (![object isKindOfClass:[self class]]) { + return NO; + } + InternalFirebaseAuthSettings *other = (InternalFirebaseAuthSettings *)object; + return self.appVerificationDisabledForTesting == other.appVerificationDisabledForTesting && + FLTPigeonDeepEquals(self.userAccessGroup, other.userAccessGroup) && + FLTPigeonDeepEquals(self.phoneNumber, other.phoneNumber) && + FLTPigeonDeepEquals(self.smsCode, other.smsCode) && + FLTPigeonDeepEquals(self.forceRecaptchaFlow, other.forceRecaptchaFlow); +} + +- (NSUInteger)hash { + NSUInteger result = [self class].hash; + result = result * 31 + @(self.appVerificationDisabledForTesting).hash; + result = result * 31 + FLTPigeonDeepHash(self.userAccessGroup); + result = result * 31 + FLTPigeonDeepHash(self.phoneNumber); + result = result * 31 + FLTPigeonDeepHash(self.smsCode); + result = result * 31 + FLTPigeonDeepHash(self.forceRecaptchaFlow); + return result; +} +@end + +@implementation InternalSignInProvider ++ (instancetype)makeWithProviderId:(NSString *)providerId + scopes:(nullable NSArray *)scopes + customParameters: + (nullable NSDictionary *)customParameters { + InternalSignInProvider *pigeonResult = [[InternalSignInProvider alloc] init]; + pigeonResult.providerId = providerId; + pigeonResult.scopes = scopes; + pigeonResult.customParameters = customParameters; + return pigeonResult; +} ++ (InternalSignInProvider *)fromList:(NSArray *)list { + InternalSignInProvider *pigeonResult = [[InternalSignInProvider alloc] init]; + pigeonResult.providerId = GetNullableObjectAtIndex(list, 0); + pigeonResult.scopes = GetNullableObjectAtIndex(list, 1); + pigeonResult.customParameters = GetNullableObjectAtIndex(list, 2); + return pigeonResult; +} ++ (nullable InternalSignInProvider *)nullableFromList:(NSArray *)list { + return (list) ? [InternalSignInProvider fromList:list] : nil; +} +- (NSArray *)toList { + return @[ + self.providerId ?: [NSNull null], + self.scopes ?: [NSNull null], + self.customParameters ?: [NSNull null], + ]; +} +- (BOOL)isEqual:(id)object { + if (self == object) { + return YES; + } + if (![object isKindOfClass:[self class]]) { + return NO; + } + InternalSignInProvider *other = (InternalSignInProvider *)object; + return FLTPigeonDeepEquals(self.providerId, other.providerId) && + FLTPigeonDeepEquals(self.scopes, other.scopes) && + FLTPigeonDeepEquals(self.customParameters, other.customParameters); +} + +- (NSUInteger)hash { + NSUInteger result = [self class].hash; + result = result * 31 + FLTPigeonDeepHash(self.providerId); + result = result * 31 + FLTPigeonDeepHash(self.scopes); + result = result * 31 + FLTPigeonDeepHash(self.customParameters); + return result; +} +@end + +@implementation InternalVerifyPhoneNumberRequest ++ (instancetype)makeWithPhoneNumber:(nullable NSString *)phoneNumber + timeout:(NSInteger)timeout + forceResendingToken:(nullable NSNumber *)forceResendingToken + autoRetrievedSmsCodeForTesting:(nullable NSString *)autoRetrievedSmsCodeForTesting + multiFactorInfoId:(nullable NSString *)multiFactorInfoId + multiFactorSessionId:(nullable NSString *)multiFactorSessionId { + InternalVerifyPhoneNumberRequest *pigeonResult = [[InternalVerifyPhoneNumberRequest alloc] init]; + pigeonResult.phoneNumber = phoneNumber; + pigeonResult.timeout = timeout; + pigeonResult.forceResendingToken = forceResendingToken; + pigeonResult.autoRetrievedSmsCodeForTesting = autoRetrievedSmsCodeForTesting; + pigeonResult.multiFactorInfoId = multiFactorInfoId; + pigeonResult.multiFactorSessionId = multiFactorSessionId; + return pigeonResult; +} ++ (InternalVerifyPhoneNumberRequest *)fromList:(NSArray *)list { + InternalVerifyPhoneNumberRequest *pigeonResult = [[InternalVerifyPhoneNumberRequest alloc] init]; + pigeonResult.phoneNumber = GetNullableObjectAtIndex(list, 0); + pigeonResult.timeout = [GetNullableObjectAtIndex(list, 1) integerValue]; + pigeonResult.forceResendingToken = GetNullableObjectAtIndex(list, 2); + pigeonResult.autoRetrievedSmsCodeForTesting = GetNullableObjectAtIndex(list, 3); + pigeonResult.multiFactorInfoId = GetNullableObjectAtIndex(list, 4); + pigeonResult.multiFactorSessionId = GetNullableObjectAtIndex(list, 5); + return pigeonResult; +} ++ (nullable InternalVerifyPhoneNumberRequest *)nullableFromList:(NSArray *)list { + return (list) ? [InternalVerifyPhoneNumberRequest fromList:list] : nil; +} +- (NSArray *)toList { + return @[ + self.phoneNumber ?: [NSNull null], + @(self.timeout), + self.forceResendingToken ?: [NSNull null], + self.autoRetrievedSmsCodeForTesting ?: [NSNull null], + self.multiFactorInfoId ?: [NSNull null], + self.multiFactorSessionId ?: [NSNull null], + ]; +} +- (BOOL)isEqual:(id)object { + if (self == object) { + return YES; + } + if (![object isKindOfClass:[self class]]) { + return NO; + } + InternalVerifyPhoneNumberRequest *other = (InternalVerifyPhoneNumberRequest *)object; + return FLTPigeonDeepEquals(self.phoneNumber, other.phoneNumber) && + self.timeout == other.timeout && + FLTPigeonDeepEquals(self.forceResendingToken, other.forceResendingToken) && + FLTPigeonDeepEquals(self.autoRetrievedSmsCodeForTesting, + other.autoRetrievedSmsCodeForTesting) && + FLTPigeonDeepEquals(self.multiFactorInfoId, other.multiFactorInfoId) && + FLTPigeonDeepEquals(self.multiFactorSessionId, other.multiFactorSessionId); +} + +- (NSUInteger)hash { + NSUInteger result = [self class].hash; + result = result * 31 + FLTPigeonDeepHash(self.phoneNumber); + result = result * 31 + @(self.timeout).hash; + result = result * 31 + FLTPigeonDeepHash(self.forceResendingToken); + result = result * 31 + FLTPigeonDeepHash(self.autoRetrievedSmsCodeForTesting); + result = result * 31 + FLTPigeonDeepHash(self.multiFactorInfoId); + result = result * 31 + FLTPigeonDeepHash(self.multiFactorSessionId); + return result; +} +@end + +@implementation InternalIdTokenResult ++ (instancetype)makeWithToken:(nullable NSString *)token + expirationTimestamp:(nullable NSNumber *)expirationTimestamp + authTimestamp:(nullable NSNumber *)authTimestamp + issuedAtTimestamp:(nullable NSNumber *)issuedAtTimestamp + signInProvider:(nullable NSString *)signInProvider + claims:(nullable NSDictionary *)claims + signInSecondFactor:(nullable NSString *)signInSecondFactor { + InternalIdTokenResult *pigeonResult = [[InternalIdTokenResult alloc] init]; + pigeonResult.token = token; + pigeonResult.expirationTimestamp = expirationTimestamp; + pigeonResult.authTimestamp = authTimestamp; + pigeonResult.issuedAtTimestamp = issuedAtTimestamp; + pigeonResult.signInProvider = signInProvider; + pigeonResult.claims = claims; + pigeonResult.signInSecondFactor = signInSecondFactor; + return pigeonResult; +} ++ (InternalIdTokenResult *)fromList:(NSArray *)list { + InternalIdTokenResult *pigeonResult = [[InternalIdTokenResult alloc] init]; + pigeonResult.token = GetNullableObjectAtIndex(list, 0); + pigeonResult.expirationTimestamp = GetNullableObjectAtIndex(list, 1); + pigeonResult.authTimestamp = GetNullableObjectAtIndex(list, 2); + pigeonResult.issuedAtTimestamp = GetNullableObjectAtIndex(list, 3); + pigeonResult.signInProvider = GetNullableObjectAtIndex(list, 4); + pigeonResult.claims = GetNullableObjectAtIndex(list, 5); + pigeonResult.signInSecondFactor = GetNullableObjectAtIndex(list, 6); + return pigeonResult; +} ++ (nullable InternalIdTokenResult *)nullableFromList:(NSArray *)list { + return (list) ? [InternalIdTokenResult fromList:list] : nil; +} +- (NSArray *)toList { + return @[ + self.token ?: [NSNull null], + self.expirationTimestamp ?: [NSNull null], + self.authTimestamp ?: [NSNull null], + self.issuedAtTimestamp ?: [NSNull null], + self.signInProvider ?: [NSNull null], + self.claims ?: [NSNull null], + self.signInSecondFactor ?: [NSNull null], + ]; +} +- (BOOL)isEqual:(id)object { + if (self == object) { + return YES; + } + if (![object isKindOfClass:[self class]]) { + return NO; + } + InternalIdTokenResult *other = (InternalIdTokenResult *)object; + return FLTPigeonDeepEquals(self.token, other.token) && + FLTPigeonDeepEquals(self.expirationTimestamp, other.expirationTimestamp) && + FLTPigeonDeepEquals(self.authTimestamp, other.authTimestamp) && + FLTPigeonDeepEquals(self.issuedAtTimestamp, other.issuedAtTimestamp) && + FLTPigeonDeepEquals(self.signInProvider, other.signInProvider) && + FLTPigeonDeepEquals(self.claims, other.claims) && + FLTPigeonDeepEquals(self.signInSecondFactor, other.signInSecondFactor); +} + +- (NSUInteger)hash { + NSUInteger result = [self class].hash; + result = result * 31 + FLTPigeonDeepHash(self.token); + result = result * 31 + FLTPigeonDeepHash(self.expirationTimestamp); + result = result * 31 + FLTPigeonDeepHash(self.authTimestamp); + result = result * 31 + FLTPigeonDeepHash(self.issuedAtTimestamp); + result = result * 31 + FLTPigeonDeepHash(self.signInProvider); + result = result * 31 + FLTPigeonDeepHash(self.claims); + result = result * 31 + FLTPigeonDeepHash(self.signInSecondFactor); + return result; +} +@end + +@implementation InternalUserProfile ++ (instancetype)makeWithDisplayName:(nullable NSString *)displayName + photoUrl:(nullable NSString *)photoUrl + displayNameChanged:(BOOL)displayNameChanged + photoUrlChanged:(BOOL)photoUrlChanged { + InternalUserProfile *pigeonResult = [[InternalUserProfile alloc] init]; + pigeonResult.displayName = displayName; + pigeonResult.photoUrl = photoUrl; + pigeonResult.displayNameChanged = displayNameChanged; + pigeonResult.photoUrlChanged = photoUrlChanged; + return pigeonResult; +} ++ (InternalUserProfile *)fromList:(NSArray *)list { + InternalUserProfile *pigeonResult = [[InternalUserProfile alloc] init]; + pigeonResult.displayName = GetNullableObjectAtIndex(list, 0); + pigeonResult.photoUrl = GetNullableObjectAtIndex(list, 1); + pigeonResult.displayNameChanged = [GetNullableObjectAtIndex(list, 2) boolValue]; + pigeonResult.photoUrlChanged = [GetNullableObjectAtIndex(list, 3) boolValue]; + return pigeonResult; +} ++ (nullable InternalUserProfile *)nullableFromList:(NSArray *)list { + return (list) ? [InternalUserProfile fromList:list] : nil; +} +- (NSArray *)toList { + return @[ + self.displayName ?: [NSNull null], + self.photoUrl ?: [NSNull null], + @(self.displayNameChanged), + @(self.photoUrlChanged), + ]; +} +- (BOOL)isEqual:(id)object { + if (self == object) { + return YES; + } + if (![object isKindOfClass:[self class]]) { + return NO; + } + InternalUserProfile *other = (InternalUserProfile *)object; + return FLTPigeonDeepEquals(self.displayName, other.displayName) && + FLTPigeonDeepEquals(self.photoUrl, other.photoUrl) && + self.displayNameChanged == other.displayNameChanged && + self.photoUrlChanged == other.photoUrlChanged; +} + +- (NSUInteger)hash { + NSUInteger result = [self class].hash; + result = result * 31 + FLTPigeonDeepHash(self.displayName); + result = result * 31 + FLTPigeonDeepHash(self.photoUrl); + result = result * 31 + @(self.displayNameChanged).hash; + result = result * 31 + @(self.photoUrlChanged).hash; + return result; +} +@end + +@implementation InternalTotpSecret ++ (instancetype)makeWithCodeIntervalSeconds:(nullable NSNumber *)codeIntervalSeconds + codeLength:(nullable NSNumber *)codeLength + enrollmentCompletionDeadline:(nullable NSNumber *)enrollmentCompletionDeadline + hashingAlgorithm:(nullable NSString *)hashingAlgorithm + secretKey:(NSString *)secretKey { + InternalTotpSecret *pigeonResult = [[InternalTotpSecret alloc] init]; + pigeonResult.codeIntervalSeconds = codeIntervalSeconds; + pigeonResult.codeLength = codeLength; + pigeonResult.enrollmentCompletionDeadline = enrollmentCompletionDeadline; + pigeonResult.hashingAlgorithm = hashingAlgorithm; + pigeonResult.secretKey = secretKey; + return pigeonResult; +} ++ (InternalTotpSecret *)fromList:(NSArray *)list { + InternalTotpSecret *pigeonResult = [[InternalTotpSecret alloc] init]; + pigeonResult.codeIntervalSeconds = GetNullableObjectAtIndex(list, 0); + pigeonResult.codeLength = GetNullableObjectAtIndex(list, 1); + pigeonResult.enrollmentCompletionDeadline = GetNullableObjectAtIndex(list, 2); + pigeonResult.hashingAlgorithm = GetNullableObjectAtIndex(list, 3); + pigeonResult.secretKey = GetNullableObjectAtIndex(list, 4); + return pigeonResult; +} ++ (nullable InternalTotpSecret *)nullableFromList:(NSArray *)list { + return (list) ? [InternalTotpSecret fromList:list] : nil; +} +- (NSArray *)toList { + return @[ + self.codeIntervalSeconds ?: [NSNull null], + self.codeLength ?: [NSNull null], + self.enrollmentCompletionDeadline ?: [NSNull null], + self.hashingAlgorithm ?: [NSNull null], + self.secretKey ?: [NSNull null], + ]; +} +- (BOOL)isEqual:(id)object { + if (self == object) { + return YES; + } + if (![object isKindOfClass:[self class]]) { + return NO; + } + InternalTotpSecret *other = (InternalTotpSecret *)object; + return FLTPigeonDeepEquals(self.codeIntervalSeconds, other.codeIntervalSeconds) && + FLTPigeonDeepEquals(self.codeLength, other.codeLength) && + FLTPigeonDeepEquals(self.enrollmentCompletionDeadline, + other.enrollmentCompletionDeadline) && + FLTPigeonDeepEquals(self.hashingAlgorithm, other.hashingAlgorithm) && + FLTPigeonDeepEquals(self.secretKey, other.secretKey); +} + +- (NSUInteger)hash { + NSUInteger result = [self class].hash; + result = result * 31 + FLTPigeonDeepHash(self.codeIntervalSeconds); + result = result * 31 + FLTPigeonDeepHash(self.codeLength); + result = result * 31 + FLTPigeonDeepHash(self.enrollmentCompletionDeadline); + result = result * 31 + FLTPigeonDeepHash(self.hashingAlgorithm); + result = result * 31 + FLTPigeonDeepHash(self.secretKey); + return result; +} +@end + +@interface nullFirebaseAuthMessagesPigeonCodecReader : FlutterStandardReader +@end +@implementation nullFirebaseAuthMessagesPigeonCodecReader +- (nullable id)readValueOfType:(UInt8)type { + switch (type) { + case 129: { + NSNumber *enumAsNumber = [self readValue]; + return enumAsNumber == nil + ? nil + : [[ActionCodeInfoOperationBox alloc] initWithValue:[enumAsNumber integerValue]]; + } + case 130: + return [InternalMultiFactorSession fromList:[self readValue]]; + case 131: + return [InternalPhoneMultiFactorAssertion fromList:[self readValue]]; + case 132: + return [InternalMultiFactorInfo fromList:[self readValue]]; + case 133: + return [AuthPigeonFirebaseApp fromList:[self readValue]]; + case 134: + return [InternalActionCodeInfoData fromList:[self readValue]]; + case 135: + return [InternalActionCodeInfo fromList:[self readValue]]; + case 136: + return [InternalAdditionalUserInfo fromList:[self readValue]]; + case 137: + return [InternalAuthCredential fromList:[self readValue]]; + case 138: + return [InternalUserInfo fromList:[self readValue]]; + case 139: + return [InternalUserDetails fromList:[self readValue]]; + case 140: + return [InternalUserCredential fromList:[self readValue]]; + case 141: + return [InternalAuthCredentialInput fromList:[self readValue]]; + case 142: + return [InternalActionCodeSettings fromList:[self readValue]]; + case 143: + return [InternalFirebaseAuthSettings fromList:[self readValue]]; + case 144: + return [InternalSignInProvider fromList:[self readValue]]; + case 145: + return [InternalVerifyPhoneNumberRequest fromList:[self readValue]]; + case 146: + return [InternalIdTokenResult fromList:[self readValue]]; + case 147: + return [InternalUserProfile fromList:[self readValue]]; + case 148: + return [InternalTotpSecret fromList:[self readValue]]; + default: + return [super readValueOfType:type]; + } +} +@end + +@interface nullFirebaseAuthMessagesPigeonCodecWriter : FlutterStandardWriter +@end +@implementation nullFirebaseAuthMessagesPigeonCodecWriter +- (void)writeValue:(id)value { + if ([value isKindOfClass:[ActionCodeInfoOperationBox class]]) { + ActionCodeInfoOperationBox *box = (ActionCodeInfoOperationBox *)value; + [self writeByte:129]; + [self writeValue:(value == nil ? [NSNull null] : [NSNumber numberWithInteger:box.value])]; + } else if ([value isKindOfClass:[InternalMultiFactorSession class]]) { + [self writeByte:130]; + [self writeValue:[value toList]]; + } else if ([value isKindOfClass:[InternalPhoneMultiFactorAssertion class]]) { + [self writeByte:131]; + [self writeValue:[value toList]]; + } else if ([value isKindOfClass:[InternalMultiFactorInfo class]]) { + [self writeByte:132]; + [self writeValue:[value toList]]; + } else if ([value isKindOfClass:[AuthPigeonFirebaseApp class]]) { + [self writeByte:133]; + [self writeValue:[value toList]]; + } else if ([value isKindOfClass:[InternalActionCodeInfoData class]]) { + [self writeByte:134]; + [self writeValue:[value toList]]; + } else if ([value isKindOfClass:[InternalActionCodeInfo class]]) { + [self writeByte:135]; + [self writeValue:[value toList]]; + } else if ([value isKindOfClass:[InternalAdditionalUserInfo class]]) { + [self writeByte:136]; + [self writeValue:[value toList]]; + } else if ([value isKindOfClass:[InternalAuthCredential class]]) { + [self writeByte:137]; + [self writeValue:[value toList]]; + } else if ([value isKindOfClass:[InternalUserInfo class]]) { + [self writeByte:138]; + [self writeValue:[value toList]]; + } else if ([value isKindOfClass:[InternalUserDetails class]]) { + [self writeByte:139]; + [self writeValue:[value toList]]; + } else if ([value isKindOfClass:[InternalUserCredential class]]) { + [self writeByte:140]; + [self writeValue:[value toList]]; + } else if ([value isKindOfClass:[InternalAuthCredentialInput class]]) { + [self writeByte:141]; + [self writeValue:[value toList]]; + } else if ([value isKindOfClass:[InternalActionCodeSettings class]]) { + [self writeByte:142]; + [self writeValue:[value toList]]; + } else if ([value isKindOfClass:[InternalFirebaseAuthSettings class]]) { + [self writeByte:143]; + [self writeValue:[value toList]]; + } else if ([value isKindOfClass:[InternalSignInProvider class]]) { + [self writeByte:144]; + [self writeValue:[value toList]]; + } else if ([value isKindOfClass:[InternalVerifyPhoneNumberRequest class]]) { + [self writeByte:145]; + [self writeValue:[value toList]]; + } else if ([value isKindOfClass:[InternalIdTokenResult class]]) { + [self writeByte:146]; + [self writeValue:[value toList]]; + } else if ([value isKindOfClass:[InternalUserProfile class]]) { + [self writeByte:147]; + [self writeValue:[value toList]]; + } else if ([value isKindOfClass:[InternalTotpSecret class]]) { + [self writeByte:148]; + [self writeValue:[value toList]]; + } else { + [super writeValue:value]; + } +} +@end + +@interface nullFirebaseAuthMessagesPigeonCodecReaderWriter : FlutterStandardReaderWriter +@end +@implementation nullFirebaseAuthMessagesPigeonCodecReaderWriter +- (FlutterStandardWriter *)writerWithData:(NSMutableData *)data { + return [[nullFirebaseAuthMessagesPigeonCodecWriter alloc] initWithData:data]; +} +- (FlutterStandardReader *)readerWithData:(NSData *)data { + return [[nullFirebaseAuthMessagesPigeonCodecReader alloc] initWithData:data]; +} +@end + +NSObject *nullGetFirebaseAuthMessagesCodec(void) { + static FlutterStandardMessageCodec *sSharedObject = nil; + static dispatch_once_t sPred = 0; + dispatch_once(&sPred, ^{ + nullFirebaseAuthMessagesPigeonCodecReaderWriter *readerWriter = + [[nullFirebaseAuthMessagesPigeonCodecReaderWriter alloc] init]; + sSharedObject = [FlutterStandardMessageCodec codecWithReaderWriter:readerWriter]; + }); + return sSharedObject; +} +void SetUpFirebaseAuthHostApi(id binaryMessenger, + NSObject *api) { + SetUpFirebaseAuthHostApiWithSuffix(binaryMessenger, api, @""); +} + +void SetUpFirebaseAuthHostApiWithSuffix(id binaryMessenger, + NSObject *api, + NSString *messageChannelSuffix) { + messageChannelSuffix = messageChannelSuffix.length > 0 + ? [NSString stringWithFormat:@".%@", messageChannelSuffix] + : @""; + { + FlutterBasicMessageChannel *channel = [[FlutterBasicMessageChannel alloc] + initWithName:[NSString + stringWithFormat:@"%@%@", + @"dev.flutter.pigeon.firebase_auth_platform_interface." + @"FirebaseAuthHostApi.registerIdTokenListener", + messageChannelSuffix] + binaryMessenger:binaryMessenger + codec:nullGetFirebaseAuthMessagesCodec()]; + if (api) { + NSCAssert([api respondsToSelector:@selector(registerIdTokenListenerApp:completion:)], + @"FirebaseAuthHostApi api (%@) doesn't respond to " + @"@selector(registerIdTokenListenerApp:completion:)", + api); + [channel setMessageHandler:^(id _Nullable message, FlutterReply callback) { + NSArray *args = message; + AuthPigeonFirebaseApp *arg_app = GetNullableObjectAtIndex(args, 0); + [api registerIdTokenListenerApp:arg_app + completion:^(NSString *_Nullable output, + FlutterError *_Nullable error) { + callback(wrapResult(output, error)); + }]; + }]; + } else { + [channel setMessageHandler:nil]; + } + } + { + FlutterBasicMessageChannel *channel = [[FlutterBasicMessageChannel alloc] + initWithName:[NSString + stringWithFormat:@"%@%@", + @"dev.flutter.pigeon.firebase_auth_platform_interface." + @"FirebaseAuthHostApi.registerAuthStateListener", + messageChannelSuffix] + binaryMessenger:binaryMessenger + codec:nullGetFirebaseAuthMessagesCodec()]; + if (api) { + NSCAssert([api respondsToSelector:@selector(registerAuthStateListenerApp:completion:)], + @"FirebaseAuthHostApi api (%@) doesn't respond to " + @"@selector(registerAuthStateListenerApp:completion:)", + api); + [channel setMessageHandler:^(id _Nullable message, FlutterReply callback) { + NSArray *args = message; + AuthPigeonFirebaseApp *arg_app = GetNullableObjectAtIndex(args, 0); + [api registerAuthStateListenerApp:arg_app + completion:^(NSString *_Nullable output, + FlutterError *_Nullable error) { + callback(wrapResult(output, error)); + }]; + }]; + } else { + [channel setMessageHandler:nil]; + } + } + { + FlutterBasicMessageChannel *channel = [[FlutterBasicMessageChannel alloc] + initWithName:[NSString stringWithFormat:@"%@%@", + @"dev.flutter.pigeon.firebase_auth_platform_" + @"interface.FirebaseAuthHostApi.useEmulator", + messageChannelSuffix] + binaryMessenger:binaryMessenger + codec:nullGetFirebaseAuthMessagesCodec()]; + if (api) { + NSCAssert([api respondsToSelector:@selector(useEmulatorApp:host:port:completion:)], + @"FirebaseAuthHostApi api (%@) doesn't respond to " + @"@selector(useEmulatorApp:host:port:completion:)", + api); + [channel setMessageHandler:^(id _Nullable message, FlutterReply callback) { + NSArray *args = message; + AuthPigeonFirebaseApp *arg_app = GetNullableObjectAtIndex(args, 0); + NSString *arg_host = GetNullableObjectAtIndex(args, 1); + NSInteger arg_port = [GetNullableObjectAtIndex(args, 2) integerValue]; + [api useEmulatorApp:arg_app + host:arg_host + port:arg_port + completion:^(FlutterError *_Nullable error) { + callback(wrapResult(nil, error)); + }]; + }]; + } else { + [channel setMessageHandler:nil]; + } + } + { + FlutterBasicMessageChannel *channel = [[FlutterBasicMessageChannel alloc] + initWithName:[NSString stringWithFormat:@"%@%@", + @"dev.flutter.pigeon.firebase_auth_platform_" + @"interface.FirebaseAuthHostApi.applyActionCode", + messageChannelSuffix] + binaryMessenger:binaryMessenger + codec:nullGetFirebaseAuthMessagesCodec()]; + if (api) { + NSCAssert([api respondsToSelector:@selector(applyActionCodeApp:code:completion:)], + @"FirebaseAuthHostApi api (%@) doesn't respond to " + @"@selector(applyActionCodeApp:code:completion:)", + api); + [channel setMessageHandler:^(id _Nullable message, FlutterReply callback) { + NSArray *args = message; + AuthPigeonFirebaseApp *arg_app = GetNullableObjectAtIndex(args, 0); + NSString *arg_code = GetNullableObjectAtIndex(args, 1); + [api applyActionCodeApp:arg_app + code:arg_code + completion:^(FlutterError *_Nullable error) { + callback(wrapResult(nil, error)); + }]; + }]; + } else { + [channel setMessageHandler:nil]; + } + } + { + FlutterBasicMessageChannel *channel = [[FlutterBasicMessageChannel alloc] + initWithName:[NSString stringWithFormat:@"%@%@", + @"dev.flutter.pigeon.firebase_auth_platform_" + @"interface.FirebaseAuthHostApi.checkActionCode", + messageChannelSuffix] + binaryMessenger:binaryMessenger + codec:nullGetFirebaseAuthMessagesCodec()]; + if (api) { + NSCAssert([api respondsToSelector:@selector(checkActionCodeApp:code:completion:)], + @"FirebaseAuthHostApi api (%@) doesn't respond to " + @"@selector(checkActionCodeApp:code:completion:)", + api); + [channel setMessageHandler:^(id _Nullable message, FlutterReply callback) { + NSArray *args = message; + AuthPigeonFirebaseApp *arg_app = GetNullableObjectAtIndex(args, 0); + NSString *arg_code = GetNullableObjectAtIndex(args, 1); + [api checkActionCodeApp:arg_app + code:arg_code + completion:^(InternalActionCodeInfo *_Nullable output, + FlutterError *_Nullable error) { + callback(wrapResult(output, error)); + }]; + }]; + } else { + [channel setMessageHandler:nil]; + } + } + { + FlutterBasicMessageChannel *channel = [[FlutterBasicMessageChannel alloc] + initWithName:[NSString + stringWithFormat:@"%@%@", + @"dev.flutter.pigeon.firebase_auth_platform_interface." + @"FirebaseAuthHostApi.confirmPasswordReset", + messageChannelSuffix] + binaryMessenger:binaryMessenger + codec:nullGetFirebaseAuthMessagesCodec()]; + if (api) { + NSCAssert( + [api respondsToSelector:@selector(confirmPasswordResetApp:code:newPassword:completion:)], + @"FirebaseAuthHostApi api (%@) doesn't respond to " + @"@selector(confirmPasswordResetApp:code:newPassword:completion:)", + api); + [channel setMessageHandler:^(id _Nullable message, FlutterReply callback) { + NSArray *args = message; + AuthPigeonFirebaseApp *arg_app = GetNullableObjectAtIndex(args, 0); + NSString *arg_code = GetNullableObjectAtIndex(args, 1); + NSString *arg_newPassword = GetNullableObjectAtIndex(args, 2); + [api confirmPasswordResetApp:arg_app + code:arg_code + newPassword:arg_newPassword + completion:^(FlutterError *_Nullable error) { + callback(wrapResult(nil, error)); + }]; + }]; + } else { + [channel setMessageHandler:nil]; + } + } + { + FlutterBasicMessageChannel *channel = [[FlutterBasicMessageChannel alloc] + initWithName:[NSString + stringWithFormat:@"%@%@", + @"dev.flutter.pigeon.firebase_auth_platform_interface." + @"FirebaseAuthHostApi.createUserWithEmailAndPassword", + messageChannelSuffix] + binaryMessenger:binaryMessenger + codec:nullGetFirebaseAuthMessagesCodec()]; + if (api) { + NSCAssert( + [api + respondsToSelector:@selector( + createUserWithEmailAndPasswordApp:email:password:completion:)], + @"FirebaseAuthHostApi api (%@) doesn't respond to " + @"@selector(createUserWithEmailAndPasswordApp:email:password:completion:)", + api); + [channel setMessageHandler:^(id _Nullable message, FlutterReply callback) { + NSArray *args = message; + AuthPigeonFirebaseApp *arg_app = GetNullableObjectAtIndex(args, 0); + NSString *arg_email = GetNullableObjectAtIndex(args, 1); + NSString *arg_password = GetNullableObjectAtIndex(args, 2); + [api createUserWithEmailAndPasswordApp:arg_app + email:arg_email + password:arg_password + completion:^(InternalUserCredential *_Nullable output, + FlutterError *_Nullable error) { + callback(wrapResult(output, error)); + }]; + }]; + } else { + [channel setMessageHandler:nil]; + } + } + { + FlutterBasicMessageChannel *channel = [[FlutterBasicMessageChannel alloc] + initWithName:[NSString + stringWithFormat:@"%@%@", + @"dev.flutter.pigeon.firebase_auth_platform_interface." + @"FirebaseAuthHostApi.signInAnonymously", + messageChannelSuffix] + binaryMessenger:binaryMessenger + codec:nullGetFirebaseAuthMessagesCodec()]; + if (api) { + NSCAssert([api respondsToSelector:@selector(signInAnonymouslyApp:completion:)], + @"FirebaseAuthHostApi api (%@) doesn't respond to " + @"@selector(signInAnonymouslyApp:completion:)", + api); + [channel setMessageHandler:^(id _Nullable message, FlutterReply callback) { + NSArray *args = message; + AuthPigeonFirebaseApp *arg_app = GetNullableObjectAtIndex(args, 0); + [api signInAnonymouslyApp:arg_app + completion:^(InternalUserCredential *_Nullable output, + FlutterError *_Nullable error) { + callback(wrapResult(output, error)); + }]; + }]; + } else { + [channel setMessageHandler:nil]; + } + } + { + FlutterBasicMessageChannel *channel = [[FlutterBasicMessageChannel alloc] + initWithName:[NSString + stringWithFormat:@"%@%@", + @"dev.flutter.pigeon.firebase_auth_platform_interface." + @"FirebaseAuthHostApi.signInWithCredential", + messageChannelSuffix] + binaryMessenger:binaryMessenger + codec:nullGetFirebaseAuthMessagesCodec()]; + if (api) { + NSCAssert([api respondsToSelector:@selector(signInWithCredentialApp:input:completion:)], + @"FirebaseAuthHostApi api (%@) doesn't respond to " + @"@selector(signInWithCredentialApp:input:completion:)", + api); + [channel setMessageHandler:^(id _Nullable message, FlutterReply callback) { + NSArray *args = message; + AuthPigeonFirebaseApp *arg_app = GetNullableObjectAtIndex(args, 0); + NSDictionary *arg_input = GetNullableObjectAtIndex(args, 1); + [api signInWithCredentialApp:arg_app + input:arg_input + completion:^(InternalUserCredential *_Nullable output, + FlutterError *_Nullable error) { + callback(wrapResult(output, error)); + }]; + }]; + } else { + [channel setMessageHandler:nil]; + } + } + { + FlutterBasicMessageChannel *channel = [[FlutterBasicMessageChannel alloc] + initWithName:[NSString + stringWithFormat:@"%@%@", + @"dev.flutter.pigeon.firebase_auth_platform_interface." + @"FirebaseAuthHostApi.signInWithCustomToken", + messageChannelSuffix] + binaryMessenger:binaryMessenger + codec:nullGetFirebaseAuthMessagesCodec()]; + if (api) { + NSCAssert([api respondsToSelector:@selector(signInWithCustomTokenApp:token:completion:)], + @"FirebaseAuthHostApi api (%@) doesn't respond to " + @"@selector(signInWithCustomTokenApp:token:completion:)", + api); + [channel setMessageHandler:^(id _Nullable message, FlutterReply callback) { + NSArray *args = message; + AuthPigeonFirebaseApp *arg_app = GetNullableObjectAtIndex(args, 0); + NSString *arg_token = GetNullableObjectAtIndex(args, 1); + [api signInWithCustomTokenApp:arg_app + token:arg_token + completion:^(InternalUserCredential *_Nullable output, + FlutterError *_Nullable error) { + callback(wrapResult(output, error)); + }]; + }]; + } else { + [channel setMessageHandler:nil]; + } + } + { + FlutterBasicMessageChannel *channel = [[FlutterBasicMessageChannel alloc] + initWithName:[NSString + stringWithFormat:@"%@%@", + @"dev.flutter.pigeon.firebase_auth_platform_interface." + @"FirebaseAuthHostApi.signInWithEmailAndPassword", + messageChannelSuffix] + binaryMessenger:binaryMessenger + codec:nullGetFirebaseAuthMessagesCodec()]; + if (api) { + NSCAssert( + [api respondsToSelector:@selector( + signInWithEmailAndPasswordApp:email:password:completion:)], + @"FirebaseAuthHostApi api (%@) doesn't respond to " + @"@selector(signInWithEmailAndPasswordApp:email:password:completion:)", + api); + [channel setMessageHandler:^(id _Nullable message, FlutterReply callback) { + NSArray *args = message; + AuthPigeonFirebaseApp *arg_app = GetNullableObjectAtIndex(args, 0); + NSString *arg_email = GetNullableObjectAtIndex(args, 1); + NSString *arg_password = GetNullableObjectAtIndex(args, 2); + [api signInWithEmailAndPasswordApp:arg_app + email:arg_email + password:arg_password + completion:^(InternalUserCredential *_Nullable output, + FlutterError *_Nullable error) { + callback(wrapResult(output, error)); + }]; + }]; + } else { + [channel setMessageHandler:nil]; + } + } + { + FlutterBasicMessageChannel *channel = [[FlutterBasicMessageChannel alloc] + initWithName:[NSString + stringWithFormat:@"%@%@", + @"dev.flutter.pigeon.firebase_auth_platform_interface." + @"FirebaseAuthHostApi.signInWithEmailLink", + messageChannelSuffix] + binaryMessenger:binaryMessenger + codec:nullGetFirebaseAuthMessagesCodec()]; + if (api) { + NSCAssert( + [api respondsToSelector:@selector(signInWithEmailLinkApp:email:emailLink:completion:)], + @"FirebaseAuthHostApi api (%@) doesn't respond to " + @"@selector(signInWithEmailLinkApp:email:emailLink:completion:)", + api); + [channel setMessageHandler:^(id _Nullable message, FlutterReply callback) { + NSArray *args = message; + AuthPigeonFirebaseApp *arg_app = GetNullableObjectAtIndex(args, 0); + NSString *arg_email = GetNullableObjectAtIndex(args, 1); + NSString *arg_emailLink = GetNullableObjectAtIndex(args, 2); + [api signInWithEmailLinkApp:arg_app + email:arg_email + emailLink:arg_emailLink + completion:^(InternalUserCredential *_Nullable output, + FlutterError *_Nullable error) { + callback(wrapResult(output, error)); + }]; + }]; + } else { + [channel setMessageHandler:nil]; + } + } + { + FlutterBasicMessageChannel *channel = [[FlutterBasicMessageChannel alloc] + initWithName:[NSString + stringWithFormat:@"%@%@", + @"dev.flutter.pigeon.firebase_auth_platform_interface." + @"FirebaseAuthHostApi.signInWithProvider", + messageChannelSuffix] + binaryMessenger:binaryMessenger + codec:nullGetFirebaseAuthMessagesCodec()]; + if (api) { + NSCAssert( + [api respondsToSelector:@selector(signInWithProviderApp:signInProvider:completion:)], + @"FirebaseAuthHostApi api (%@) doesn't respond to " + @"@selector(signInWithProviderApp:signInProvider:completion:)", + api); + [channel setMessageHandler:^(id _Nullable message, FlutterReply callback) { + NSArray *args = message; + AuthPigeonFirebaseApp *arg_app = GetNullableObjectAtIndex(args, 0); + InternalSignInProvider *arg_signInProvider = GetNullableObjectAtIndex(args, 1); + [api signInWithProviderApp:arg_app + signInProvider:arg_signInProvider + completion:^(InternalUserCredential *_Nullable output, + FlutterError *_Nullable error) { + callback(wrapResult(output, error)); + }]; + }]; + } else { + [channel setMessageHandler:nil]; + } + } + { + FlutterBasicMessageChannel *channel = [[FlutterBasicMessageChannel alloc] + initWithName:[NSString stringWithFormat:@"%@%@", + @"dev.flutter.pigeon.firebase_auth_platform_" + @"interface.FirebaseAuthHostApi.signOut", + messageChannelSuffix] + binaryMessenger:binaryMessenger + codec:nullGetFirebaseAuthMessagesCodec()]; + if (api) { + NSCAssert( + [api respondsToSelector:@selector(signOutApp:completion:)], + @"FirebaseAuthHostApi api (%@) doesn't respond to @selector(signOutApp:completion:)", + api); + [channel setMessageHandler:^(id _Nullable message, FlutterReply callback) { + NSArray *args = message; + AuthPigeonFirebaseApp *arg_app = GetNullableObjectAtIndex(args, 0); + [api signOutApp:arg_app + completion:^(FlutterError *_Nullable error) { + callback(wrapResult(nil, error)); + }]; + }]; + } else { + [channel setMessageHandler:nil]; + } + } + { + FlutterBasicMessageChannel *channel = [[FlutterBasicMessageChannel alloc] + initWithName:[NSString + stringWithFormat:@"%@%@", + @"dev.flutter.pigeon.firebase_auth_platform_interface." + @"FirebaseAuthHostApi.fetchSignInMethodsForEmail", + messageChannelSuffix] + binaryMessenger:binaryMessenger + codec:nullGetFirebaseAuthMessagesCodec()]; + if (api) { + NSCAssert([api respondsToSelector:@selector(fetchSignInMethodsForEmailApp:email:completion:)], + @"FirebaseAuthHostApi api (%@) doesn't respond to " + @"@selector(fetchSignInMethodsForEmailApp:email:completion:)", + api); + [channel setMessageHandler:^(id _Nullable message, FlutterReply callback) { + NSArray *args = message; + AuthPigeonFirebaseApp *arg_app = GetNullableObjectAtIndex(args, 0); + NSString *arg_email = GetNullableObjectAtIndex(args, 1); + [api fetchSignInMethodsForEmailApp:arg_app + email:arg_email + completion:^(NSArray *_Nullable output, + FlutterError *_Nullable error) { + callback(wrapResult(output, error)); + }]; + }]; + } else { + [channel setMessageHandler:nil]; + } + } + { + FlutterBasicMessageChannel *channel = [[FlutterBasicMessageChannel alloc] + initWithName:[NSString + stringWithFormat:@"%@%@", + @"dev.flutter.pigeon.firebase_auth_platform_interface." + @"FirebaseAuthHostApi.sendPasswordResetEmail", + messageChannelSuffix] + binaryMessenger:binaryMessenger + codec:nullGetFirebaseAuthMessagesCodec()]; + if (api) { + NSCAssert([api respondsToSelector: + @selector(sendPasswordResetEmailApp:email:actionCodeSettings:completion:)], + @"FirebaseAuthHostApi api (%@) doesn't respond to " + @"@selector(sendPasswordResetEmailApp:email:actionCodeSettings:completion:)", + api); + [channel setMessageHandler:^(id _Nullable message, FlutterReply callback) { + NSArray *args = message; + AuthPigeonFirebaseApp *arg_app = GetNullableObjectAtIndex(args, 0); + NSString *arg_email = GetNullableObjectAtIndex(args, 1); + InternalActionCodeSettings *arg_actionCodeSettings = GetNullableObjectAtIndex(args, 2); + [api sendPasswordResetEmailApp:arg_app + email:arg_email + actionCodeSettings:arg_actionCodeSettings + completion:^(FlutterError *_Nullable error) { + callback(wrapResult(nil, error)); + }]; + }]; + } else { + [channel setMessageHandler:nil]; + } + } + { + FlutterBasicMessageChannel *channel = [[FlutterBasicMessageChannel alloc] + initWithName:[NSString + stringWithFormat:@"%@%@", + @"dev.flutter.pigeon.firebase_auth_platform_interface." + @"FirebaseAuthHostApi.sendSignInLinkToEmail", + messageChannelSuffix] + binaryMessenger:binaryMessenger + codec:nullGetFirebaseAuthMessagesCodec()]; + if (api) { + NSCAssert([api respondsToSelector: + @selector(sendSignInLinkToEmailApp:email:actionCodeSettings:completion:)], + @"FirebaseAuthHostApi api (%@) doesn't respond to " + @"@selector(sendSignInLinkToEmailApp:email:actionCodeSettings:completion:)", + api); + [channel setMessageHandler:^(id _Nullable message, FlutterReply callback) { + NSArray *args = message; + AuthPigeonFirebaseApp *arg_app = GetNullableObjectAtIndex(args, 0); + NSString *arg_email = GetNullableObjectAtIndex(args, 1); + InternalActionCodeSettings *arg_actionCodeSettings = GetNullableObjectAtIndex(args, 2); + [api sendSignInLinkToEmailApp:arg_app + email:arg_email + actionCodeSettings:arg_actionCodeSettings + completion:^(FlutterError *_Nullable error) { + callback(wrapResult(nil, error)); + }]; + }]; + } else { + [channel setMessageHandler:nil]; + } + } + { + FlutterBasicMessageChannel *channel = [[FlutterBasicMessageChannel alloc] + initWithName:[NSString stringWithFormat:@"%@%@", + @"dev.flutter.pigeon.firebase_auth_platform_" + @"interface.FirebaseAuthHostApi.setLanguageCode", + messageChannelSuffix] + binaryMessenger:binaryMessenger + codec:nullGetFirebaseAuthMessagesCodec()]; + if (api) { + NSCAssert([api respondsToSelector:@selector(setLanguageCodeApp:languageCode:completion:)], + @"FirebaseAuthHostApi api (%@) doesn't respond to " + @"@selector(setLanguageCodeApp:languageCode:completion:)", + api); + [channel setMessageHandler:^(id _Nullable message, FlutterReply callback) { + NSArray *args = message; + AuthPigeonFirebaseApp *arg_app = GetNullableObjectAtIndex(args, 0); + NSString *arg_languageCode = GetNullableObjectAtIndex(args, 1); + [api setLanguageCodeApp:arg_app + languageCode:arg_languageCode + completion:^(NSString *_Nullable output, FlutterError *_Nullable error) { + callback(wrapResult(output, error)); + }]; + }]; + } else { + [channel setMessageHandler:nil]; + } + } + { + FlutterBasicMessageChannel *channel = [[FlutterBasicMessageChannel alloc] + initWithName:[NSString stringWithFormat:@"%@%@", + @"dev.flutter.pigeon.firebase_auth_platform_" + @"interface.FirebaseAuthHostApi.setSettings", + messageChannelSuffix] + binaryMessenger:binaryMessenger + codec:nullGetFirebaseAuthMessagesCodec()]; + if (api) { + NSCAssert([api respondsToSelector:@selector(setSettingsApp:settings:completion:)], + @"FirebaseAuthHostApi api (%@) doesn't respond to " + @"@selector(setSettingsApp:settings:completion:)", + api); + [channel setMessageHandler:^(id _Nullable message, FlutterReply callback) { + NSArray *args = message; + AuthPigeonFirebaseApp *arg_app = GetNullableObjectAtIndex(args, 0); + InternalFirebaseAuthSettings *arg_settings = GetNullableObjectAtIndex(args, 1); + [api setSettingsApp:arg_app + settings:arg_settings + completion:^(FlutterError *_Nullable error) { + callback(wrapResult(nil, error)); + }]; + }]; + } else { + [channel setMessageHandler:nil]; + } + } + { + FlutterBasicMessageChannel *channel = [[FlutterBasicMessageChannel alloc] + initWithName:[NSString + stringWithFormat:@"%@%@", + @"dev.flutter.pigeon.firebase_auth_platform_interface." + @"FirebaseAuthHostApi.verifyPasswordResetCode", + messageChannelSuffix] + binaryMessenger:binaryMessenger + codec:nullGetFirebaseAuthMessagesCodec()]; + if (api) { + NSCAssert([api respondsToSelector:@selector(verifyPasswordResetCodeApp:code:completion:)], + @"FirebaseAuthHostApi api (%@) doesn't respond to " + @"@selector(verifyPasswordResetCodeApp:code:completion:)", + api); + [channel setMessageHandler:^(id _Nullable message, FlutterReply callback) { + NSArray *args = message; + AuthPigeonFirebaseApp *arg_app = GetNullableObjectAtIndex(args, 0); + NSString *arg_code = GetNullableObjectAtIndex(args, 1); + [api verifyPasswordResetCodeApp:arg_app + code:arg_code + completion:^(NSString *_Nullable output, + FlutterError *_Nullable error) { + callback(wrapResult(output, error)); + }]; + }]; + } else { + [channel setMessageHandler:nil]; + } + } + { + FlutterBasicMessageChannel *channel = [[FlutterBasicMessageChannel alloc] + initWithName:[NSString + stringWithFormat:@"%@%@", + @"dev.flutter.pigeon.firebase_auth_platform_interface." + @"FirebaseAuthHostApi.verifyPhoneNumber", + messageChannelSuffix] + binaryMessenger:binaryMessenger + codec:nullGetFirebaseAuthMessagesCodec()]; + if (api) { + NSCAssert([api respondsToSelector:@selector(verifyPhoneNumberApp:request:completion:)], + @"FirebaseAuthHostApi api (%@) doesn't respond to " + @"@selector(verifyPhoneNumberApp:request:completion:)", + api); + [channel setMessageHandler:^(id _Nullable message, FlutterReply callback) { + NSArray *args = message; + AuthPigeonFirebaseApp *arg_app = GetNullableObjectAtIndex(args, 0); + InternalVerifyPhoneNumberRequest *arg_request = GetNullableObjectAtIndex(args, 1); + [api verifyPhoneNumberApp:arg_app + request:arg_request + completion:^(NSString *_Nullable output, FlutterError *_Nullable error) { + callback(wrapResult(output, error)); + }]; + }]; + } else { + [channel setMessageHandler:nil]; + } + } + { + FlutterBasicMessageChannel *channel = [[FlutterBasicMessageChannel alloc] + initWithName: + [NSString stringWithFormat:@"%@%@", + @"dev.flutter.pigeon.firebase_auth_platform_interface." + @"FirebaseAuthHostApi.revokeTokenWithAuthorizationCode", + messageChannelSuffix] + binaryMessenger:binaryMessenger + codec:nullGetFirebaseAuthMessagesCodec()]; + if (api) { + NSCAssert([api respondsToSelector:@selector(revokeTokenWithAuthorizationCodeApp: + authorizationCode:completion:)], + @"FirebaseAuthHostApi api (%@) doesn't respond to " + @"@selector(revokeTokenWithAuthorizationCodeApp:authorizationCode:completion:)", + api); + [channel setMessageHandler:^(id _Nullable message, FlutterReply callback) { + NSArray *args = message; + AuthPigeonFirebaseApp *arg_app = GetNullableObjectAtIndex(args, 0); + NSString *arg_authorizationCode = GetNullableObjectAtIndex(args, 1); + [api revokeTokenWithAuthorizationCodeApp:arg_app + authorizationCode:arg_authorizationCode + completion:^(FlutterError *_Nullable error) { + callback(wrapResult(nil, error)); + }]; + }]; + } else { + [channel setMessageHandler:nil]; + } + } + { + FlutterBasicMessageChannel *channel = [[FlutterBasicMessageChannel alloc] + initWithName:[NSString + stringWithFormat:@"%@%@", + @"dev.flutter.pigeon.firebase_auth_platform_interface." + @"FirebaseAuthHostApi.revokeAccessToken", + messageChannelSuffix] + binaryMessenger:binaryMessenger + codec:nullGetFirebaseAuthMessagesCodec()]; + if (api) { + NSCAssert([api respondsToSelector:@selector(revokeAccessTokenApp:accessToken:completion:)], + @"FirebaseAuthHostApi api (%@) doesn't respond to " + @"@selector(revokeAccessTokenApp:accessToken:completion:)", + api); + [channel setMessageHandler:^(id _Nullable message, FlutterReply callback) { + NSArray *args = message; + AuthPigeonFirebaseApp *arg_app = GetNullableObjectAtIndex(args, 0); + NSString *arg_accessToken = GetNullableObjectAtIndex(args, 1); + [api revokeAccessTokenApp:arg_app + accessToken:arg_accessToken + completion:^(FlutterError *_Nullable error) { + callback(wrapResult(nil, error)); + }]; + }]; + } else { + [channel setMessageHandler:nil]; + } + } + { + FlutterBasicMessageChannel *channel = [[FlutterBasicMessageChannel alloc] + initWithName:[NSString + stringWithFormat:@"%@%@", + @"dev.flutter.pigeon.firebase_auth_platform_interface." + @"FirebaseAuthHostApi.initializeRecaptchaConfig", + messageChannelSuffix] + binaryMessenger:binaryMessenger + codec:nullGetFirebaseAuthMessagesCodec()]; + if (api) { + NSCAssert([api respondsToSelector:@selector(initializeRecaptchaConfigApp:completion:)], + @"FirebaseAuthHostApi api (%@) doesn't respond to " + @"@selector(initializeRecaptchaConfigApp:completion:)", + api); + [channel setMessageHandler:^(id _Nullable message, FlutterReply callback) { + NSArray *args = message; + AuthPigeonFirebaseApp *arg_app = GetNullableObjectAtIndex(args, 0); + [api initializeRecaptchaConfigApp:arg_app + completion:^(FlutterError *_Nullable error) { + callback(wrapResult(nil, error)); + }]; + }]; + } else { + [channel setMessageHandler:nil]; + } + } +} +void SetUpFirebaseAuthUserHostApi(id binaryMessenger, + NSObject *api) { + SetUpFirebaseAuthUserHostApiWithSuffix(binaryMessenger, api, @""); +} + +void SetUpFirebaseAuthUserHostApiWithSuffix(id binaryMessenger, + NSObject *api, + NSString *messageChannelSuffix) { + messageChannelSuffix = messageChannelSuffix.length > 0 + ? [NSString stringWithFormat:@".%@", messageChannelSuffix] + : @""; + { + FlutterBasicMessageChannel *channel = [[FlutterBasicMessageChannel alloc] + initWithName:[NSString stringWithFormat:@"%@%@", + @"dev.flutter.pigeon.firebase_auth_platform_" + @"interface.FirebaseAuthUserHostApi.delete", + messageChannelSuffix] + binaryMessenger:binaryMessenger + codec:nullGetFirebaseAuthMessagesCodec()]; + if (api) { + NSCAssert( + [api respondsToSelector:@selector(deleteApp:completion:)], + @"FirebaseAuthUserHostApi api (%@) doesn't respond to @selector(deleteApp:completion:)", + api); + [channel setMessageHandler:^(id _Nullable message, FlutterReply callback) { + NSArray *args = message; + AuthPigeonFirebaseApp *arg_app = GetNullableObjectAtIndex(args, 0); + [api deleteApp:arg_app + completion:^(FlutterError *_Nullable error) { + callback(wrapResult(nil, error)); + }]; + }]; + } else { + [channel setMessageHandler:nil]; + } + } + { + FlutterBasicMessageChannel *channel = [[FlutterBasicMessageChannel alloc] + initWithName:[NSString stringWithFormat:@"%@%@", + @"dev.flutter.pigeon.firebase_auth_platform_" + @"interface.FirebaseAuthUserHostApi.getIdToken", + messageChannelSuffix] + binaryMessenger:binaryMessenger + codec:nullGetFirebaseAuthMessagesCodec()]; + if (api) { + NSCAssert([api respondsToSelector:@selector(getIdTokenApp:forceRefresh:completion:)], + @"FirebaseAuthUserHostApi api (%@) doesn't respond to " + @"@selector(getIdTokenApp:forceRefresh:completion:)", + api); + [channel setMessageHandler:^(id _Nullable message, FlutterReply callback) { + NSArray *args = message; + AuthPigeonFirebaseApp *arg_app = GetNullableObjectAtIndex(args, 0); + BOOL arg_forceRefresh = [GetNullableObjectAtIndex(args, 1) boolValue]; + [api getIdTokenApp:arg_app + forceRefresh:arg_forceRefresh + completion:^(InternalIdTokenResult *_Nullable output, + FlutterError *_Nullable error) { + callback(wrapResult(output, error)); + }]; + }]; + } else { + [channel setMessageHandler:nil]; + } + } + { + FlutterBasicMessageChannel *channel = [[FlutterBasicMessageChannel alloc] + initWithName:[NSString + stringWithFormat:@"%@%@", + @"dev.flutter.pigeon.firebase_auth_platform_interface." + @"FirebaseAuthUserHostApi.linkWithCredential", + messageChannelSuffix] + binaryMessenger:binaryMessenger + codec:nullGetFirebaseAuthMessagesCodec()]; + if (api) { + NSCAssert([api respondsToSelector:@selector(linkWithCredentialApp:input:completion:)], + @"FirebaseAuthUserHostApi api (%@) doesn't respond to " + @"@selector(linkWithCredentialApp:input:completion:)", + api); + [channel setMessageHandler:^(id _Nullable message, FlutterReply callback) { + NSArray *args = message; + AuthPigeonFirebaseApp *arg_app = GetNullableObjectAtIndex(args, 0); + NSDictionary *arg_input = GetNullableObjectAtIndex(args, 1); + [api linkWithCredentialApp:arg_app + input:arg_input + completion:^(InternalUserCredential *_Nullable output, + FlutterError *_Nullable error) { + callback(wrapResult(output, error)); + }]; + }]; + } else { + [channel setMessageHandler:nil]; + } + } + { + FlutterBasicMessageChannel *channel = [[FlutterBasicMessageChannel alloc] + initWithName:[NSString + stringWithFormat:@"%@%@", + @"dev.flutter.pigeon.firebase_auth_platform_interface." + @"FirebaseAuthUserHostApi.linkWithProvider", + messageChannelSuffix] + binaryMessenger:binaryMessenger + codec:nullGetFirebaseAuthMessagesCodec()]; + if (api) { + NSCAssert([api respondsToSelector:@selector(linkWithProviderApp:signInProvider:completion:)], + @"FirebaseAuthUserHostApi api (%@) doesn't respond to " + @"@selector(linkWithProviderApp:signInProvider:completion:)", + api); + [channel setMessageHandler:^(id _Nullable message, FlutterReply callback) { + NSArray *args = message; + AuthPigeonFirebaseApp *arg_app = GetNullableObjectAtIndex(args, 0); + InternalSignInProvider *arg_signInProvider = GetNullableObjectAtIndex(args, 1); + [api linkWithProviderApp:arg_app + signInProvider:arg_signInProvider + completion:^(InternalUserCredential *_Nullable output, + FlutterError *_Nullable error) { + callback(wrapResult(output, error)); + }]; + }]; + } else { + [channel setMessageHandler:nil]; + } + } + { + FlutterBasicMessageChannel *channel = [[FlutterBasicMessageChannel alloc] + initWithName: + [NSString stringWithFormat:@"%@%@", + @"dev.flutter.pigeon.firebase_auth_platform_interface." + @"FirebaseAuthUserHostApi.reauthenticateWithCredential", + messageChannelSuffix] + binaryMessenger:binaryMessenger + codec:nullGetFirebaseAuthMessagesCodec()]; + if (api) { + NSCAssert( + [api respondsToSelector:@selector(reauthenticateWithCredentialApp:input:completion:)], + @"FirebaseAuthUserHostApi api (%@) doesn't respond to " + @"@selector(reauthenticateWithCredentialApp:input:completion:)", + api); + [channel setMessageHandler:^(id _Nullable message, FlutterReply callback) { + NSArray *args = message; + AuthPigeonFirebaseApp *arg_app = GetNullableObjectAtIndex(args, 0); + NSDictionary *arg_input = GetNullableObjectAtIndex(args, 1); + [api reauthenticateWithCredentialApp:arg_app + input:arg_input + completion:^(InternalUserCredential *_Nullable output, + FlutterError *_Nullable error) { + callback(wrapResult(output, error)); + }]; + }]; + } else { + [channel setMessageHandler:nil]; + } + } + { + FlutterBasicMessageChannel *channel = [[FlutterBasicMessageChannel alloc] + initWithName:[NSString + stringWithFormat:@"%@%@", + @"dev.flutter.pigeon.firebase_auth_platform_interface." + @"FirebaseAuthUserHostApi.reauthenticateWithProvider", + messageChannelSuffix] + binaryMessenger:binaryMessenger + codec:nullGetFirebaseAuthMessagesCodec()]; + if (api) { + NSCAssert( + [api respondsToSelector:@selector( + reauthenticateWithProviderApp:signInProvider:completion:)], + @"FirebaseAuthUserHostApi api (%@) doesn't respond to " + @"@selector(reauthenticateWithProviderApp:signInProvider:completion:)", + api); + [channel setMessageHandler:^(id _Nullable message, FlutterReply callback) { + NSArray *args = message; + AuthPigeonFirebaseApp *arg_app = GetNullableObjectAtIndex(args, 0); + InternalSignInProvider *arg_signInProvider = GetNullableObjectAtIndex(args, 1); + [api reauthenticateWithProviderApp:arg_app + signInProvider:arg_signInProvider + completion:^(InternalUserCredential *_Nullable output, + FlutterError *_Nullable error) { + callback(wrapResult(output, error)); + }]; + }]; + } else { + [channel setMessageHandler:nil]; + } + } + { + FlutterBasicMessageChannel *channel = [[FlutterBasicMessageChannel alloc] + initWithName:[NSString stringWithFormat:@"%@%@", + @"dev.flutter.pigeon.firebase_auth_platform_" + @"interface.FirebaseAuthUserHostApi.reload", + messageChannelSuffix] + binaryMessenger:binaryMessenger + codec:nullGetFirebaseAuthMessagesCodec()]; + if (api) { + NSCAssert( + [api respondsToSelector:@selector(reloadApp:completion:)], + @"FirebaseAuthUserHostApi api (%@) doesn't respond to @selector(reloadApp:completion:)", + api); + [channel setMessageHandler:^(id _Nullable message, FlutterReply callback) { + NSArray *args = message; + AuthPigeonFirebaseApp *arg_app = GetNullableObjectAtIndex(args, 0); + [api reloadApp:arg_app + completion:^(InternalUserDetails *_Nullable output, FlutterError *_Nullable error) { + callback(wrapResult(output, error)); + }]; + }]; + } else { + [channel setMessageHandler:nil]; + } + } + { + FlutterBasicMessageChannel *channel = [[FlutterBasicMessageChannel alloc] + initWithName:[NSString + stringWithFormat:@"%@%@", + @"dev.flutter.pigeon.firebase_auth_platform_interface." + @"FirebaseAuthUserHostApi.sendEmailVerification", + messageChannelSuffix] + binaryMessenger:binaryMessenger + codec:nullGetFirebaseAuthMessagesCodec()]; + if (api) { + NSCAssert( + [api respondsToSelector:@selector( + sendEmailVerificationApp:actionCodeSettings:completion:)], + @"FirebaseAuthUserHostApi api (%@) doesn't respond to " + @"@selector(sendEmailVerificationApp:actionCodeSettings:completion:)", + api); + [channel setMessageHandler:^(id _Nullable message, FlutterReply callback) { + NSArray *args = message; + AuthPigeonFirebaseApp *arg_app = GetNullableObjectAtIndex(args, 0); + InternalActionCodeSettings *arg_actionCodeSettings = GetNullableObjectAtIndex(args, 1); + [api sendEmailVerificationApp:arg_app + actionCodeSettings:arg_actionCodeSettings + completion:^(FlutterError *_Nullable error) { + callback(wrapResult(nil, error)); + }]; + }]; + } else { + [channel setMessageHandler:nil]; + } + } + { + FlutterBasicMessageChannel *channel = [[FlutterBasicMessageChannel alloc] + initWithName:[NSString stringWithFormat:@"%@%@", + @"dev.flutter.pigeon.firebase_auth_platform_" + @"interface.FirebaseAuthUserHostApi.unlink", + messageChannelSuffix] + binaryMessenger:binaryMessenger + codec:nullGetFirebaseAuthMessagesCodec()]; + if (api) { + NSCAssert([api respondsToSelector:@selector(unlinkApp:providerId:completion:)], + @"FirebaseAuthUserHostApi api (%@) doesn't respond to " + @"@selector(unlinkApp:providerId:completion:)", + api); + [channel setMessageHandler:^(id _Nullable message, FlutterReply callback) { + NSArray *args = message; + AuthPigeonFirebaseApp *arg_app = GetNullableObjectAtIndex(args, 0); + NSString *arg_providerId = GetNullableObjectAtIndex(args, 1); + [api unlinkApp:arg_app + providerId:arg_providerId + completion:^(InternalUserCredential *_Nullable output, FlutterError *_Nullable error) { + callback(wrapResult(output, error)); + }]; + }]; + } else { + [channel setMessageHandler:nil]; + } + } + { + FlutterBasicMessageChannel *channel = [[FlutterBasicMessageChannel alloc] + initWithName:[NSString stringWithFormat:@"%@%@", + @"dev.flutter.pigeon.firebase_auth_platform_" + @"interface.FirebaseAuthUserHostApi.updateEmail", + messageChannelSuffix] + binaryMessenger:binaryMessenger + codec:nullGetFirebaseAuthMessagesCodec()]; + if (api) { + NSCAssert([api respondsToSelector:@selector(updateEmailApp:newEmail:completion:)], + @"FirebaseAuthUserHostApi api (%@) doesn't respond to " + @"@selector(updateEmailApp:newEmail:completion:)", + api); + [channel setMessageHandler:^(id _Nullable message, FlutterReply callback) { + NSArray *args = message; + AuthPigeonFirebaseApp *arg_app = GetNullableObjectAtIndex(args, 0); + NSString *arg_newEmail = GetNullableObjectAtIndex(args, 1); + [api + updateEmailApp:arg_app + newEmail:arg_newEmail + completion:^(InternalUserDetails *_Nullable output, FlutterError *_Nullable error) { + callback(wrapResult(output, error)); + }]; + }]; + } else { + [channel setMessageHandler:nil]; + } + } + { + FlutterBasicMessageChannel *channel = [[FlutterBasicMessageChannel alloc] + initWithName:[NSString + stringWithFormat:@"%@%@", + @"dev.flutter.pigeon.firebase_auth_platform_interface." + @"FirebaseAuthUserHostApi.updatePassword", + messageChannelSuffix] + binaryMessenger:binaryMessenger + codec:nullGetFirebaseAuthMessagesCodec()]; + if (api) { + NSCAssert([api respondsToSelector:@selector(updatePasswordApp:newPassword:completion:)], + @"FirebaseAuthUserHostApi api (%@) doesn't respond to " + @"@selector(updatePasswordApp:newPassword:completion:)", + api); + [channel setMessageHandler:^(id _Nullable message, FlutterReply callback) { + NSArray *args = message; + AuthPigeonFirebaseApp *arg_app = GetNullableObjectAtIndex(args, 0); + NSString *arg_newPassword = GetNullableObjectAtIndex(args, 1); + [api updatePasswordApp:arg_app + newPassword:arg_newPassword + completion:^(InternalUserDetails *_Nullable output, + FlutterError *_Nullable error) { + callback(wrapResult(output, error)); + }]; + }]; + } else { + [channel setMessageHandler:nil]; + } + } + { + FlutterBasicMessageChannel *channel = [[FlutterBasicMessageChannel alloc] + initWithName:[NSString + stringWithFormat:@"%@%@", + @"dev.flutter.pigeon.firebase_auth_platform_interface." + @"FirebaseAuthUserHostApi.updatePhoneNumber", + messageChannelSuffix] + binaryMessenger:binaryMessenger + codec:nullGetFirebaseAuthMessagesCodec()]; + if (api) { + NSCAssert([api respondsToSelector:@selector(updatePhoneNumberApp:input:completion:)], + @"FirebaseAuthUserHostApi api (%@) doesn't respond to " + @"@selector(updatePhoneNumberApp:input:completion:)", + api); + [channel setMessageHandler:^(id _Nullable message, FlutterReply callback) { + NSArray *args = message; + AuthPigeonFirebaseApp *arg_app = GetNullableObjectAtIndex(args, 0); + NSDictionary *arg_input = GetNullableObjectAtIndex(args, 1); + [api updatePhoneNumberApp:arg_app + input:arg_input + completion:^(InternalUserDetails *_Nullable output, + FlutterError *_Nullable error) { + callback(wrapResult(output, error)); + }]; + }]; + } else { + [channel setMessageHandler:nil]; + } + } + { + FlutterBasicMessageChannel *channel = [[FlutterBasicMessageChannel alloc] + initWithName:[NSString + stringWithFormat:@"%@%@", + @"dev.flutter.pigeon.firebase_auth_platform_interface." + @"FirebaseAuthUserHostApi.updateProfile", + messageChannelSuffix] + binaryMessenger:binaryMessenger + codec:nullGetFirebaseAuthMessagesCodec()]; + if (api) { + NSCAssert([api respondsToSelector:@selector(updateProfileApp:profile:completion:)], + @"FirebaseAuthUserHostApi api (%@) doesn't respond to " + @"@selector(updateProfileApp:profile:completion:)", + api); + [channel setMessageHandler:^(id _Nullable message, FlutterReply callback) { + NSArray *args = message; + AuthPigeonFirebaseApp *arg_app = GetNullableObjectAtIndex(args, 0); + InternalUserProfile *arg_profile = GetNullableObjectAtIndex(args, 1); + [api updateProfileApp:arg_app + profile:arg_profile + completion:^(InternalUserDetails *_Nullable output, + FlutterError *_Nullable error) { + callback(wrapResult(output, error)); + }]; + }]; + } else { + [channel setMessageHandler:nil]; + } + } + { + FlutterBasicMessageChannel *channel = [[FlutterBasicMessageChannel alloc] + initWithName:[NSString + stringWithFormat:@"%@%@", + @"dev.flutter.pigeon.firebase_auth_platform_interface." + @"FirebaseAuthUserHostApi.verifyBeforeUpdateEmail", + messageChannelSuffix] + binaryMessenger:binaryMessenger + codec:nullGetFirebaseAuthMessagesCodec()]; + if (api) { + NSCAssert([api respondsToSelector:@selector(verifyBeforeUpdateEmailApp:newEmail: + actionCodeSettings:completion:)], + @"FirebaseAuthUserHostApi api (%@) doesn't respond to " + @"@selector(verifyBeforeUpdateEmailApp:newEmail:actionCodeSettings:completion:)", + api); + [channel setMessageHandler:^(id _Nullable message, FlutterReply callback) { + NSArray *args = message; + AuthPigeonFirebaseApp *arg_app = GetNullableObjectAtIndex(args, 0); + NSString *arg_newEmail = GetNullableObjectAtIndex(args, 1); + InternalActionCodeSettings *arg_actionCodeSettings = GetNullableObjectAtIndex(args, 2); + [api verifyBeforeUpdateEmailApp:arg_app + newEmail:arg_newEmail + actionCodeSettings:arg_actionCodeSettings + completion:^(FlutterError *_Nullable error) { + callback(wrapResult(nil, error)); + }]; + }]; + } else { + [channel setMessageHandler:nil]; + } + } +} +void SetUpMultiFactorUserHostApi(id binaryMessenger, + NSObject *api) { + SetUpMultiFactorUserHostApiWithSuffix(binaryMessenger, api, @""); +} + +void SetUpMultiFactorUserHostApiWithSuffix(id binaryMessenger, + NSObject *api, + NSString *messageChannelSuffix) { + messageChannelSuffix = messageChannelSuffix.length > 0 + ? [NSString stringWithFormat:@".%@", messageChannelSuffix] + : @""; + { + FlutterBasicMessageChannel *channel = [[FlutterBasicMessageChannel alloc] + initWithName:[NSString stringWithFormat:@"%@%@", + @"dev.flutter.pigeon.firebase_auth_platform_" + @"interface.MultiFactorUserHostApi.enrollPhone", + messageChannelSuffix] + binaryMessenger:binaryMessenger + codec:nullGetFirebaseAuthMessagesCodec()]; + if (api) { + NSCAssert( + [api respondsToSelector:@selector(enrollPhoneApp:assertion:displayName:completion:)], + @"MultiFactorUserHostApi api (%@) doesn't respond to " + @"@selector(enrollPhoneApp:assertion:displayName:completion:)", + api); + [channel setMessageHandler:^(id _Nullable message, FlutterReply callback) { + NSArray *args = message; + AuthPigeonFirebaseApp *arg_app = GetNullableObjectAtIndex(args, 0); + InternalPhoneMultiFactorAssertion *arg_assertion = GetNullableObjectAtIndex(args, 1); + NSString *arg_displayName = GetNullableObjectAtIndex(args, 2); + [api enrollPhoneApp:arg_app + assertion:arg_assertion + displayName:arg_displayName + completion:^(FlutterError *_Nullable error) { + callback(wrapResult(nil, error)); + }]; + }]; + } else { + [channel setMessageHandler:nil]; + } + } + { + FlutterBasicMessageChannel *channel = [[FlutterBasicMessageChannel alloc] + initWithName:[NSString stringWithFormat:@"%@%@", + @"dev.flutter.pigeon.firebase_auth_platform_" + @"interface.MultiFactorUserHostApi.enrollTotp", + messageChannelSuffix] + binaryMessenger:binaryMessenger + codec:nullGetFirebaseAuthMessagesCodec()]; + if (api) { + NSCAssert( + [api respondsToSelector:@selector(enrollTotpApp:assertionId:displayName:completion:)], + @"MultiFactorUserHostApi api (%@) doesn't respond to " + @"@selector(enrollTotpApp:assertionId:displayName:completion:)", + api); + [channel setMessageHandler:^(id _Nullable message, FlutterReply callback) { + NSArray *args = message; + AuthPigeonFirebaseApp *arg_app = GetNullableObjectAtIndex(args, 0); + NSString *arg_assertionId = GetNullableObjectAtIndex(args, 1); + NSString *arg_displayName = GetNullableObjectAtIndex(args, 2); + [api enrollTotpApp:arg_app + assertionId:arg_assertionId + displayName:arg_displayName + completion:^(FlutterError *_Nullable error) { + callback(wrapResult(nil, error)); + }]; + }]; + } else { + [channel setMessageHandler:nil]; + } + } + { + FlutterBasicMessageChannel *channel = [[FlutterBasicMessageChannel alloc] + initWithName:[NSString stringWithFormat:@"%@%@", + @"dev.flutter.pigeon.firebase_auth_platform_" + @"interface.MultiFactorUserHostApi.getSession", + messageChannelSuffix] + binaryMessenger:binaryMessenger + codec:nullGetFirebaseAuthMessagesCodec()]; + if (api) { + NSCAssert([api respondsToSelector:@selector(getSessionApp:completion:)], + @"MultiFactorUserHostApi api (%@) doesn't respond to " + @"@selector(getSessionApp:completion:)", + api); + [channel setMessageHandler:^(id _Nullable message, FlutterReply callback) { + NSArray *args = message; + AuthPigeonFirebaseApp *arg_app = GetNullableObjectAtIndex(args, 0); + [api getSessionApp:arg_app + completion:^(InternalMultiFactorSession *_Nullable output, + FlutterError *_Nullable error) { + callback(wrapResult(output, error)); + }]; + }]; + } else { + [channel setMessageHandler:nil]; + } + } + { + FlutterBasicMessageChannel *channel = [[FlutterBasicMessageChannel alloc] + initWithName:[NSString stringWithFormat:@"%@%@", + @"dev.flutter.pigeon.firebase_auth_platform_" + @"interface.MultiFactorUserHostApi.unenroll", + messageChannelSuffix] + binaryMessenger:binaryMessenger + codec:nullGetFirebaseAuthMessagesCodec()]; + if (api) { + NSCAssert([api respondsToSelector:@selector(unenrollApp:factorUid:completion:)], + @"MultiFactorUserHostApi api (%@) doesn't respond to " + @"@selector(unenrollApp:factorUid:completion:)", + api); + [channel setMessageHandler:^(id _Nullable message, FlutterReply callback) { + NSArray *args = message; + AuthPigeonFirebaseApp *arg_app = GetNullableObjectAtIndex(args, 0); + NSString *arg_factorUid = GetNullableObjectAtIndex(args, 1); + [api unenrollApp:arg_app + factorUid:arg_factorUid + completion:^(FlutterError *_Nullable error) { + callback(wrapResult(nil, error)); + }]; + }]; + } else { + [channel setMessageHandler:nil]; + } + } + { + FlutterBasicMessageChannel *channel = [[FlutterBasicMessageChannel alloc] + initWithName:[NSString + stringWithFormat:@"%@%@", + @"dev.flutter.pigeon.firebase_auth_platform_interface." + @"MultiFactorUserHostApi.getEnrolledFactors", + messageChannelSuffix] + binaryMessenger:binaryMessenger + codec:nullGetFirebaseAuthMessagesCodec()]; + if (api) { + NSCAssert([api respondsToSelector:@selector(getEnrolledFactorsApp:completion:)], + @"MultiFactorUserHostApi api (%@) doesn't respond to " + @"@selector(getEnrolledFactorsApp:completion:)", + api); + [channel setMessageHandler:^(id _Nullable message, FlutterReply callback) { + NSArray *args = message; + AuthPigeonFirebaseApp *arg_app = GetNullableObjectAtIndex(args, 0); + [api getEnrolledFactorsApp:arg_app + completion:^(NSArray *_Nullable output, + FlutterError *_Nullable error) { + callback(wrapResult(output, error)); + }]; + }]; + } else { + [channel setMessageHandler:nil]; + } + } +} +void SetUpMultiFactoResolverHostApi(id binaryMessenger, + NSObject *api) { + SetUpMultiFactoResolverHostApiWithSuffix(binaryMessenger, api, @""); +} + +void SetUpMultiFactoResolverHostApiWithSuffix(id binaryMessenger, + NSObject *api, + NSString *messageChannelSuffix) { + messageChannelSuffix = messageChannelSuffix.length > 0 + ? [NSString stringWithFormat:@".%@", messageChannelSuffix] + : @""; + { + FlutterBasicMessageChannel *channel = [[FlutterBasicMessageChannel alloc] + initWithName:[NSString + stringWithFormat:@"%@%@", + @"dev.flutter.pigeon.firebase_auth_platform_interface." + @"MultiFactoResolverHostApi.resolveSignIn", + messageChannelSuffix] + binaryMessenger:binaryMessenger + codec:nullGetFirebaseAuthMessagesCodec()]; + if (api) { + NSCAssert([api respondsToSelector: + @selector(resolveSignInResolverId:assertion:totpAssertionId:completion:)], + @"MultiFactoResolverHostApi api (%@) doesn't respond to " + @"@selector(resolveSignInResolverId:assertion:totpAssertionId:completion:)", + api); + [channel setMessageHandler:^(id _Nullable message, FlutterReply callback) { + NSArray *args = message; + NSString *arg_resolverId = GetNullableObjectAtIndex(args, 0); + InternalPhoneMultiFactorAssertion *arg_assertion = GetNullableObjectAtIndex(args, 1); + NSString *arg_totpAssertionId = GetNullableObjectAtIndex(args, 2); + [api resolveSignInResolverId:arg_resolverId + assertion:arg_assertion + totpAssertionId:arg_totpAssertionId + completion:^(InternalUserCredential *_Nullable output, + FlutterError *_Nullable error) { + callback(wrapResult(output, error)); + }]; + }]; + } else { + [channel setMessageHandler:nil]; + } + } +} +void SetUpMultiFactorTotpHostApi(id binaryMessenger, + NSObject *api) { + SetUpMultiFactorTotpHostApiWithSuffix(binaryMessenger, api, @""); +} + +void SetUpMultiFactorTotpHostApiWithSuffix(id binaryMessenger, + NSObject *api, + NSString *messageChannelSuffix) { + messageChannelSuffix = messageChannelSuffix.length > 0 + ? [NSString stringWithFormat:@".%@", messageChannelSuffix] + : @""; + { + FlutterBasicMessageChannel *channel = [[FlutterBasicMessageChannel alloc] + initWithName:[NSString + stringWithFormat:@"%@%@", + @"dev.flutter.pigeon.firebase_auth_platform_interface." + @"MultiFactorTotpHostApi.generateSecret", + messageChannelSuffix] + binaryMessenger:binaryMessenger + codec:nullGetFirebaseAuthMessagesCodec()]; + if (api) { + NSCAssert([api respondsToSelector:@selector(generateSecretSessionId:completion:)], + @"MultiFactorTotpHostApi api (%@) doesn't respond to " + @"@selector(generateSecretSessionId:completion:)", + api); + [channel setMessageHandler:^(id _Nullable message, FlutterReply callback) { + NSArray *args = message; + NSString *arg_sessionId = GetNullableObjectAtIndex(args, 0); + [api generateSecretSessionId:arg_sessionId + completion:^(InternalTotpSecret *_Nullable output, + FlutterError *_Nullable error) { + callback(wrapResult(output, error)); + }]; + }]; + } else { + [channel setMessageHandler:nil]; + } + } + { + FlutterBasicMessageChannel *channel = [[FlutterBasicMessageChannel alloc] + initWithName:[NSString + stringWithFormat:@"%@%@", + @"dev.flutter.pigeon.firebase_auth_platform_interface." + @"MultiFactorTotpHostApi.getAssertionForEnrollment", + messageChannelSuffix] + binaryMessenger:binaryMessenger + codec:nullGetFirebaseAuthMessagesCodec()]; + if (api) { + NSCAssert([api respondsToSelector: + @selector(getAssertionForEnrollmentSecretKey:oneTimePassword:completion:)], + @"MultiFactorTotpHostApi api (%@) doesn't respond to " + @"@selector(getAssertionForEnrollmentSecretKey:oneTimePassword:completion:)", + api); + [channel setMessageHandler:^(id _Nullable message, FlutterReply callback) { + NSArray *args = message; + NSString *arg_secretKey = GetNullableObjectAtIndex(args, 0); + NSString *arg_oneTimePassword = GetNullableObjectAtIndex(args, 1); + [api getAssertionForEnrollmentSecretKey:arg_secretKey + oneTimePassword:arg_oneTimePassword + completion:^(NSString *_Nullable output, + FlutterError *_Nullable error) { + callback(wrapResult(output, error)); + }]; + }]; + } else { + [channel setMessageHandler:nil]; + } + } + { + FlutterBasicMessageChannel *channel = [[FlutterBasicMessageChannel alloc] + initWithName:[NSString + stringWithFormat:@"%@%@", + @"dev.flutter.pigeon.firebase_auth_platform_interface." + @"MultiFactorTotpHostApi.getAssertionForSignIn", + messageChannelSuffix] + binaryMessenger:binaryMessenger + codec:nullGetFirebaseAuthMessagesCodec()]; + if (api) { + NSCAssert([api respondsToSelector: + @selector(getAssertionForSignInEnrollmentId:oneTimePassword:completion:)], + @"MultiFactorTotpHostApi api (%@) doesn't respond to " + @"@selector(getAssertionForSignInEnrollmentId:oneTimePassword:completion:)", + api); + [channel setMessageHandler:^(id _Nullable message, FlutterReply callback) { + NSArray *args = message; + NSString *arg_enrollmentId = GetNullableObjectAtIndex(args, 0); + NSString *arg_oneTimePassword = GetNullableObjectAtIndex(args, 1); + [api getAssertionForSignInEnrollmentId:arg_enrollmentId + oneTimePassword:arg_oneTimePassword + completion:^(NSString *_Nullable output, + FlutterError *_Nullable error) { + callback(wrapResult(output, error)); + }]; + }]; + } else { + [channel setMessageHandler:nil]; + } + } +} +void SetUpMultiFactorTotpSecretHostApi(id binaryMessenger, + NSObject *api) { + SetUpMultiFactorTotpSecretHostApiWithSuffix(binaryMessenger, api, @""); +} + +void SetUpMultiFactorTotpSecretHostApiWithSuffix(id binaryMessenger, + NSObject *api, + NSString *messageChannelSuffix) { + messageChannelSuffix = messageChannelSuffix.length > 0 + ? [NSString stringWithFormat:@".%@", messageChannelSuffix] + : @""; + { + FlutterBasicMessageChannel *channel = [[FlutterBasicMessageChannel alloc] + initWithName:[NSString + stringWithFormat:@"%@%@", + @"dev.flutter.pigeon.firebase_auth_platform_interface." + @"MultiFactorTotpSecretHostApi.generateQrCodeUrl", + messageChannelSuffix] + binaryMessenger:binaryMessenger + codec:nullGetFirebaseAuthMessagesCodec()]; + if (api) { + NSCAssert( + [api respondsToSelector:@selector( + generateQrCodeUrlSecretKey:accountName:issuer:completion:)], + @"MultiFactorTotpSecretHostApi api (%@) doesn't respond to " + @"@selector(generateQrCodeUrlSecretKey:accountName:issuer:completion:)", + api); + [channel setMessageHandler:^(id _Nullable message, FlutterReply callback) { + NSArray *args = message; + NSString *arg_secretKey = GetNullableObjectAtIndex(args, 0); + NSString *arg_accountName = GetNullableObjectAtIndex(args, 1); + NSString *arg_issuer = GetNullableObjectAtIndex(args, 2); + [api generateQrCodeUrlSecretKey:arg_secretKey + accountName:arg_accountName + issuer:arg_issuer + completion:^(NSString *_Nullable output, + FlutterError *_Nullable error) { + callback(wrapResult(output, error)); + }]; + }]; + } else { + [channel setMessageHandler:nil]; + } + } + { + FlutterBasicMessageChannel *channel = [[FlutterBasicMessageChannel alloc] + initWithName:[NSString + stringWithFormat:@"%@%@", + @"dev.flutter.pigeon.firebase_auth_platform_interface." + @"MultiFactorTotpSecretHostApi.openInOtpApp", + messageChannelSuffix] + binaryMessenger:binaryMessenger + codec:nullGetFirebaseAuthMessagesCodec()]; + if (api) { + NSCAssert([api respondsToSelector:@selector(openInOtpAppSecretKey:qrCodeUrl:completion:)], + @"MultiFactorTotpSecretHostApi api (%@) doesn't respond to " + @"@selector(openInOtpAppSecretKey:qrCodeUrl:completion:)", + api); + [channel setMessageHandler:^(id _Nullable message, FlutterReply callback) { + NSArray *args = message; + NSString *arg_secretKey = GetNullableObjectAtIndex(args, 0); + NSString *arg_qrCodeUrl = GetNullableObjectAtIndex(args, 1); + [api openInOtpAppSecretKey:arg_secretKey + qrCodeUrl:arg_qrCodeUrl + completion:^(FlutterError *_Nullable error) { + callback(wrapResult(nil, error)); + }]; + }]; + } else { + [channel setMessageHandler:nil]; + } + } +} +void SetUpGenerateInterfaces(id binaryMessenger, + NSObject *api) { + SetUpGenerateInterfacesWithSuffix(binaryMessenger, api, @""); +} + +void SetUpGenerateInterfacesWithSuffix(id binaryMessenger, + NSObject *api, + NSString *messageChannelSuffix) { + messageChannelSuffix = messageChannelSuffix.length > 0 + ? [NSString stringWithFormat:@".%@", messageChannelSuffix] + : @""; + { + FlutterBasicMessageChannel *channel = [[FlutterBasicMessageChannel alloc] + initWithName:[NSString stringWithFormat:@"%@%@", + @"dev.flutter.pigeon.firebase_auth_platform_" + @"interface.GenerateInterfaces.pigeonInterface", + messageChannelSuffix] + binaryMessenger:binaryMessenger + codec:nullGetFirebaseAuthMessagesCodec()]; + if (api) { + NSCAssert( + [api respondsToSelector:@selector(pigeonInterfaceInfo:error:)], + @"GenerateInterfaces api (%@) doesn't respond to @selector(pigeonInterfaceInfo:error:)", + api); + [channel setMessageHandler:^(id _Nullable message, FlutterReply callback) { + NSArray *args = message; + InternalMultiFactorInfo *arg_info = GetNullableObjectAtIndex(args, 0); + FlutterError *error; + [api pigeonInterfaceInfo:arg_info error:&error]; + callback(wrapResult(nil, error)); + }]; + } else { + [channel setMessageHandler:nil]; + } + } +} diff --git a/mih_ui/android/build/macos/SourcePackages/firebase_auth-6.5.4/ios/firebase_auth/Sources/firebase_auth/include/Private/FLTAuthStateChannelStreamHandler.h b/mih_ui/android/build/macos/SourcePackages/firebase_auth-6.5.4/ios/firebase_auth/Sources/firebase_auth/include/Private/FLTAuthStateChannelStreamHandler.h new file mode 100644 index 00000000..7b7efae7 --- /dev/null +++ b/mih_ui/android/build/macos/SourcePackages/firebase_auth-6.5.4/ios/firebase_auth/Sources/firebase_auth/include/Private/FLTAuthStateChannelStreamHandler.h @@ -0,0 +1,26 @@ +// Copyright 2021 The Chromium Authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +#import + +#if TARGET_OS_OSX +#import +#else +#import +#endif + +#import +#import "../Public/CustomPigeonHeader.h" + +@class FIRAuth; + +NS_ASSUME_NONNULL_BEGIN + +@interface FLTAuthStateChannelStreamHandler : NSObject + +- (instancetype)initWithAuth:(FIRAuth *)auth; + +@end + +NS_ASSUME_NONNULL_END diff --git a/mih_ui/android/build/macos/SourcePackages/firebase_auth-6.5.4/ios/firebase_auth/Sources/firebase_auth/include/Private/FLTIdTokenChannelStreamHandler.h b/mih_ui/android/build/macos/SourcePackages/firebase_auth-6.5.4/ios/firebase_auth/Sources/firebase_auth/include/Private/FLTIdTokenChannelStreamHandler.h new file mode 100644 index 00000000..c1660499 --- /dev/null +++ b/mih_ui/android/build/macos/SourcePackages/firebase_auth-6.5.4/ios/firebase_auth/Sources/firebase_auth/include/Private/FLTIdTokenChannelStreamHandler.h @@ -0,0 +1,27 @@ +// Copyright 2021 The Chromium Authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +#import + +#if TARGET_OS_OSX +#import +#else +#import +#endif + +#import "../Public/CustomPigeonHeader.h" + +#import + +@class FIRAuth; + +NS_ASSUME_NONNULL_BEGIN + +@interface FLTIdTokenChannelStreamHandler : NSObject + +- (instancetype)initWithAuth:(FIRAuth *)auth; + +@end + +NS_ASSUME_NONNULL_END diff --git a/mih_ui/android/build/macos/SourcePackages/firebase_auth-6.5.4/ios/firebase_auth/Sources/firebase_auth/include/Private/FLTPhoneNumberVerificationStreamHandler.h b/mih_ui/android/build/macos/SourcePackages/firebase_auth-6.5.4/ios/firebase_auth/Sources/firebase_auth/include/Private/FLTPhoneNumberVerificationStreamHandler.h new file mode 100644 index 00000000..53e5f28c --- /dev/null +++ b/mih_ui/android/build/macos/SourcePackages/firebase_auth-6.5.4/ios/firebase_auth/Sources/firebase_auth/include/Private/FLTPhoneNumberVerificationStreamHandler.h @@ -0,0 +1,36 @@ +// Copyright 2021 The Chromium Authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +#import + +#if TARGET_OS_OSX +#import +#else +#import +#endif + +#import "../Public/firebase_auth_messages.g.h" + +#import + +@class FIRAuth; +@class FIRMultiFactorSession; +@class FIRPhoneMultiFactorInfo; + +NS_ASSUME_NONNULL_BEGIN + +@interface FLTPhoneNumberVerificationStreamHandler : NSObject + +#if TARGET_OS_OSX +- (instancetype)initWithAuth:(FIRAuth *)auth arguments:(NSDictionary *)arguments; +#else +- (instancetype)initWithAuth:(FIRAuth *)auth + request:(InternalVerifyPhoneNumberRequest *)request + session:(FIRMultiFactorSession *)session + factorInfo:(FIRPhoneMultiFactorInfo *)factorInfo; +#endif + +@end + +NS_ASSUME_NONNULL_END diff --git a/mih_ui/android/build/macos/SourcePackages/firebase_auth-6.5.4/ios/firebase_auth/Sources/firebase_auth/include/Private/PigeonParser.h b/mih_ui/android/build/macos/SourcePackages/firebase_auth-6.5.4/ios/firebase_auth/Sources/firebase_auth/include/Private/PigeonParser.h new file mode 100644 index 00000000..b500fd2c --- /dev/null +++ b/mih_ui/android/build/macos/SourcePackages/firebase_auth-6.5.4/ios/firebase_auth/Sources/firebase_auth/include/Private/PigeonParser.h @@ -0,0 +1,33 @@ +/* + * Copyright 2023, the Chromium project authors. Please see the AUTHORS file + * for details. All rights reserved. Use of this source code is governed by a + * BSD-style license that can be found in the LICENSE file. + */ + +#import +#import "../Public/firebase_auth_messages.g.h" + +@class FIRAuthDataResult; +@class FIRUser; +@class FIRActionCodeSettings; +@class FIRAuthTokenResult; +@class FIRTOTPSecret; +@class FIRAuthCredential; + +@interface PigeonParser : NSObject + ++ (NSArray *_Nonnull)getManualList:(nonnull InternalUserDetails *)userDetails; ++ (InternalUserCredential *_Nullable) + getPigeonUserCredentialFromAuthResult:(nonnull FIRAuthDataResult *)authResult + authorizationCode:(nullable NSString *)authorizationCode; ++ (InternalUserDetails *_Nullable)getPigeonDetails:(nonnull FIRUser *)user; ++ (InternalUserInfo *_Nullable)getPigeonUserInfo:(nonnull FIRUser *)user; ++ (FIRActionCodeSettings *_Nullable)parseActionCodeSettings: + (nullable InternalActionCodeSettings *)settings; ++ (InternalUserCredential *_Nullable)getPigeonUserCredentialFromFIRUser:(nonnull FIRUser *)user; ++ (InternalIdTokenResult *_Nonnull)parseIdTokenResult:(nonnull FIRAuthTokenResult *)tokenResult; ++ (InternalTotpSecret *_Nonnull)getPigeonTotpSecret:(nonnull FIRTOTPSecret *)secret; ++ (InternalAuthCredential *_Nullable)getPigeonAuthCredential: + (FIRAuthCredential *_Nullable)authCredentialToken + token:(NSNumber *_Nullable)token; +@end diff --git a/mih_ui/android/build/macos/SourcePackages/firebase_auth-6.5.4/ios/firebase_auth/Sources/firebase_auth/include/Public/CustomPigeonHeader.h b/mih_ui/android/build/macos/SourcePackages/firebase_auth-6.5.4/ios/firebase_auth/Sources/firebase_auth/include/Public/CustomPigeonHeader.h new file mode 100644 index 00000000..d32a6b45 --- /dev/null +++ b/mih_ui/android/build/macos/SourcePackages/firebase_auth-6.5.4/ios/firebase_auth/Sources/firebase_auth/include/Public/CustomPigeonHeader.h @@ -0,0 +1,16 @@ +// Copyright 2021 The Chromium Authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. +#import "firebase_auth_messages.g.h" + +@interface InternalMultiFactorInfo (Map) +- (NSDictionary *)toList; +@end + +@interface InternalUserDetails (Map) +- (NSDictionary *)toList; +@end + +@interface InternalUserInfo (Map) +- (NSDictionary *)toList; +@end diff --git a/mih_ui/android/build/macos/SourcePackages/firebase_auth-6.5.4/ios/firebase_auth/Sources/firebase_auth/include/Public/FLTFirebaseAuthPlugin.h b/mih_ui/android/build/macos/SourcePackages/firebase_auth-6.5.4/ios/firebase_auth/Sources/firebase_auth/include/Public/FLTFirebaseAuthPlugin.h new file mode 100644 index 00000000..53e20eca --- /dev/null +++ b/mih_ui/android/build/macos/SourcePackages/firebase_auth-6.5.4/ios/firebase_auth/Sources/firebase_auth/include/Public/FLTFirebaseAuthPlugin.h @@ -0,0 +1,45 @@ +// Copyright 2020 The Chromium Authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +#import + +#if TARGET_OS_OSX +#import +#else +#import +#endif + +#import +#import +#if __has_include() +#import +#else +#import +#endif +#import "firebase_auth_messages.g.h" + +#if !TARGET_OS_OSX +@protocol FlutterSceneLifeCycleDelegate; +#endif + +@interface FLTFirebaseAuthPlugin + : FLTFirebasePlugin ) + , + FlutterSceneLifeCycleDelegate +#endif +#endif + > + ++ (FlutterError *)convertToFlutterError:(NSError *)error; +@end diff --git a/mih_ui/android/build/macos/SourcePackages/firebase_auth-6.5.4/ios/firebase_auth/Sources/firebase_auth/include/Public/firebase_auth_messages.g.h b/mih_ui/android/build/macos/SourcePackages/firebase_auth-6.5.4/ios/firebase_auth/Sources/firebase_auth/include/Public/firebase_auth_messages.g.h new file mode 100644 index 00000000..f83da7e3 --- /dev/null +++ b/mih_ui/android/build/macos/SourcePackages/firebase_auth-6.5.4/ios/firebase_auth/Sources/firebase_auth/include/Public/firebase_auth_messages.g.h @@ -0,0 +1,571 @@ +// Copyright 2023, the Chromium project authors. Please see the AUTHORS file +// for details. All rights reserved. Use of this source code is governed by a +// BSD-style license that can be found in the LICENSE file. +// Autogenerated from Pigeon (v26.3.4), do not edit directly. +// See also: https://pub.dev/packages/pigeon + +@import Foundation; + +@protocol FlutterBinaryMessenger; +@protocol FlutterMessageCodec; +@class FlutterError; +@class FlutterStandardTypedData; + +NS_ASSUME_NONNULL_BEGIN + +/// The type of operation that generated the action code from calling +/// [checkActionCode]. +typedef NS_ENUM(NSUInteger, ActionCodeInfoOperation) { + /// Unknown operation. + ActionCodeInfoOperationUnknown = 0, + /// Password reset code generated via [sendPasswordResetEmail]. + ActionCodeInfoOperationPasswordReset = 1, + /// Email verification code generated via [User.sendEmailVerification]. + ActionCodeInfoOperationVerifyEmail = 2, + /// Email change revocation code generated via [User.updateEmail]. + ActionCodeInfoOperationRecoverEmail = 3, + /// Email sign in code generated via [sendSignInLinkToEmail]. + ActionCodeInfoOperationEmailSignIn = 4, + /// Verify and change email code generated via [User.verifyBeforeUpdateEmail]. + ActionCodeInfoOperationVerifyAndChangeEmail = 5, + /// Action code for reverting second factor addition. + ActionCodeInfoOperationRevertSecondFactorAddition = 6, +}; + +/// Wrapper for ActionCodeInfoOperation to allow for nullability. +@interface ActionCodeInfoOperationBox : NSObject +@property(nonatomic, assign) ActionCodeInfoOperation value; +- (instancetype)initWithValue:(ActionCodeInfoOperation)value; +@end + +@class InternalMultiFactorSession; +@class InternalPhoneMultiFactorAssertion; +@class InternalMultiFactorInfo; +@class AuthPigeonFirebaseApp; +@class InternalActionCodeInfoData; +@class InternalActionCodeInfo; +@class InternalAdditionalUserInfo; +@class InternalAuthCredential; +@class InternalUserInfo; +@class InternalUserDetails; +@class InternalUserCredential; +@class InternalAuthCredentialInput; +@class InternalActionCodeSettings; +@class InternalFirebaseAuthSettings; +@class InternalSignInProvider; +@class InternalVerifyPhoneNumberRequest; +@class InternalIdTokenResult; +@class InternalUserProfile; +@class InternalTotpSecret; + +@interface InternalMultiFactorSession : NSObject +/// `init` unavailable to enforce nonnull fields, see the `make` class method. +- (instancetype)init NS_UNAVAILABLE; ++ (instancetype)makeWithId:(NSString *)id; +@property(nonatomic, copy) NSString *id; +@end + +@interface InternalPhoneMultiFactorAssertion : NSObject +/// `init` unavailable to enforce nonnull fields, see the `make` class method. +- (instancetype)init NS_UNAVAILABLE; ++ (instancetype)makeWithVerificationId:(NSString *)verificationId + verificationCode:(NSString *)verificationCode; +@property(nonatomic, copy) NSString *verificationId; +@property(nonatomic, copy) NSString *verificationCode; +@end + +@interface InternalMultiFactorInfo : NSObject +/// `init` unavailable to enforce nonnull fields, see the `make` class method. +- (instancetype)init NS_UNAVAILABLE; ++ (instancetype)makeWithDisplayName:(nullable NSString *)displayName + enrollmentTimestamp:(double)enrollmentTimestamp + factorId:(nullable NSString *)factorId + uid:(NSString *)uid + phoneNumber:(nullable NSString *)phoneNumber; +@property(nonatomic, copy, nullable) NSString *displayName; +@property(nonatomic, assign) double enrollmentTimestamp; +@property(nonatomic, copy, nullable) NSString *factorId; +@property(nonatomic, copy) NSString *uid; +@property(nonatomic, copy, nullable) NSString *phoneNumber; +@end + +@interface AuthPigeonFirebaseApp : NSObject +/// `init` unavailable to enforce nonnull fields, see the `make` class method. +- (instancetype)init NS_UNAVAILABLE; ++ (instancetype)makeWithAppName:(NSString *)appName + tenantId:(nullable NSString *)tenantId + customAuthDomain:(nullable NSString *)customAuthDomain; +@property(nonatomic, copy) NSString *appName; +@property(nonatomic, copy, nullable) NSString *tenantId; +@property(nonatomic, copy, nullable) NSString *customAuthDomain; +@end + +@interface InternalActionCodeInfoData : NSObject ++ (instancetype)makeWithEmail:(nullable NSString *)email + previousEmail:(nullable NSString *)previousEmail; +@property(nonatomic, copy, nullable) NSString *email; +@property(nonatomic, copy, nullable) NSString *previousEmail; +@end + +@interface InternalActionCodeInfo : NSObject +/// `init` unavailable to enforce nonnull fields, see the `make` class method. +- (instancetype)init NS_UNAVAILABLE; ++ (instancetype)makeWithOperation:(ActionCodeInfoOperation)operation + data:(InternalActionCodeInfoData *)data; +@property(nonatomic, assign) ActionCodeInfoOperation operation; +@property(nonatomic, strong) InternalActionCodeInfoData *data; +@end + +@interface InternalAdditionalUserInfo : NSObject +/// `init` unavailable to enforce nonnull fields, see the `make` class method. +- (instancetype)init NS_UNAVAILABLE; ++ (instancetype)makeWithIsNewUser:(BOOL)isNewUser + providerId:(nullable NSString *)providerId + username:(nullable NSString *)username + authorizationCode:(nullable NSString *)authorizationCode + profile:(nullable NSDictionary *)profile; +@property(nonatomic, assign) BOOL isNewUser; +@property(nonatomic, copy, nullable) NSString *providerId; +@property(nonatomic, copy, nullable) NSString *username; +@property(nonatomic, copy, nullable) NSString *authorizationCode; +@property(nonatomic, copy, nullable) NSDictionary *profile; +@end + +@interface InternalAuthCredential : NSObject +/// `init` unavailable to enforce nonnull fields, see the `make` class method. +- (instancetype)init NS_UNAVAILABLE; ++ (instancetype)makeWithProviderId:(NSString *)providerId + signInMethod:(NSString *)signInMethod + nativeId:(NSInteger)nativeId + accessToken:(nullable NSString *)accessToken; +@property(nonatomic, copy) NSString *providerId; +@property(nonatomic, copy) NSString *signInMethod; +@property(nonatomic, assign) NSInteger nativeId; +@property(nonatomic, copy, nullable) NSString *accessToken; +@end + +@interface InternalUserInfo : NSObject +/// `init` unavailable to enforce nonnull fields, see the `make` class method. +- (instancetype)init NS_UNAVAILABLE; ++ (instancetype)makeWithUid:(NSString *)uid + email:(nullable NSString *)email + displayName:(nullable NSString *)displayName + photoUrl:(nullable NSString *)photoUrl + phoneNumber:(nullable NSString *)phoneNumber + isAnonymous:(BOOL)isAnonymous + isEmailVerified:(BOOL)isEmailVerified + providerId:(nullable NSString *)providerId + tenantId:(nullable NSString *)tenantId + refreshToken:(nullable NSString *)refreshToken + creationTimestamp:(nullable NSNumber *)creationTimestamp + lastSignInTimestamp:(nullable NSNumber *)lastSignInTimestamp; +@property(nonatomic, copy) NSString *uid; +@property(nonatomic, copy, nullable) NSString *email; +@property(nonatomic, copy, nullable) NSString *displayName; +@property(nonatomic, copy, nullable) NSString *photoUrl; +@property(nonatomic, copy, nullable) NSString *phoneNumber; +@property(nonatomic, assign) BOOL isAnonymous; +@property(nonatomic, assign) BOOL isEmailVerified; +@property(nonatomic, copy, nullable) NSString *providerId; +@property(nonatomic, copy, nullable) NSString *tenantId; +@property(nonatomic, copy, nullable) NSString *refreshToken; +@property(nonatomic, strong, nullable) NSNumber *creationTimestamp; +@property(nonatomic, strong, nullable) NSNumber *lastSignInTimestamp; +@end + +@interface InternalUserDetails : NSObject +/// `init` unavailable to enforce nonnull fields, see the `make` class method. +- (instancetype)init NS_UNAVAILABLE; ++ (instancetype)makeWithUserInfo:(InternalUserInfo *)userInfo + providerData:(NSArray *> *)providerData; +@property(nonatomic, strong) InternalUserInfo *userInfo; +@property(nonatomic, copy) NSArray *> *providerData; +@end + +@interface InternalUserCredential : NSObject ++ (instancetype)makeWithUser:(nullable InternalUserDetails *)user + additionalUserInfo:(nullable InternalAdditionalUserInfo *)additionalUserInfo + credential:(nullable InternalAuthCredential *)credential; +@property(nonatomic, strong, nullable) InternalUserDetails *user; +@property(nonatomic, strong, nullable) InternalAdditionalUserInfo *additionalUserInfo; +@property(nonatomic, strong, nullable) InternalAuthCredential *credential; +@end + +@interface InternalAuthCredentialInput : NSObject +/// `init` unavailable to enforce nonnull fields, see the `make` class method. +- (instancetype)init NS_UNAVAILABLE; ++ (instancetype)makeWithProviderId:(NSString *)providerId + signInMethod:(NSString *)signInMethod + token:(nullable NSString *)token + accessToken:(nullable NSString *)accessToken; +@property(nonatomic, copy) NSString *providerId; +@property(nonatomic, copy) NSString *signInMethod; +@property(nonatomic, copy, nullable) NSString *token; +@property(nonatomic, copy, nullable) NSString *accessToken; +@end + +@interface InternalActionCodeSettings : NSObject +/// `init` unavailable to enforce nonnull fields, see the `make` class method. +- (instancetype)init NS_UNAVAILABLE; ++ (instancetype)makeWithUrl:(NSString *)url + dynamicLinkDomain:(nullable NSString *)dynamicLinkDomain + handleCodeInApp:(BOOL)handleCodeInApp + iOSBundleId:(nullable NSString *)iOSBundleId + androidPackageName:(nullable NSString *)androidPackageName + androidInstallApp:(BOOL)androidInstallApp + androidMinimumVersion:(nullable NSString *)androidMinimumVersion + linkDomain:(nullable NSString *)linkDomain; +@property(nonatomic, copy) NSString *url; +@property(nonatomic, copy, nullable) NSString *dynamicLinkDomain; +@property(nonatomic, assign) BOOL handleCodeInApp; +@property(nonatomic, copy, nullable) NSString *iOSBundleId; +@property(nonatomic, copy, nullable) NSString *androidPackageName; +@property(nonatomic, assign) BOOL androidInstallApp; +@property(nonatomic, copy, nullable) NSString *androidMinimumVersion; +@property(nonatomic, copy, nullable) NSString *linkDomain; +@end + +@interface InternalFirebaseAuthSettings : NSObject +/// `init` unavailable to enforce nonnull fields, see the `make` class method. +- (instancetype)init NS_UNAVAILABLE; ++ (instancetype)makeWithAppVerificationDisabledForTesting:(BOOL)appVerificationDisabledForTesting + userAccessGroup:(nullable NSString *)userAccessGroup + phoneNumber:(nullable NSString *)phoneNumber + smsCode:(nullable NSString *)smsCode + forceRecaptchaFlow:(nullable NSNumber *)forceRecaptchaFlow; +@property(nonatomic, assign) BOOL appVerificationDisabledForTesting; +@property(nonatomic, copy, nullable) NSString *userAccessGroup; +@property(nonatomic, copy, nullable) NSString *phoneNumber; +@property(nonatomic, copy, nullable) NSString *smsCode; +@property(nonatomic, strong, nullable) NSNumber *forceRecaptchaFlow; +@end + +@interface InternalSignInProvider : NSObject +/// `init` unavailable to enforce nonnull fields, see the `make` class method. +- (instancetype)init NS_UNAVAILABLE; ++ (instancetype)makeWithProviderId:(NSString *)providerId + scopes:(nullable NSArray *)scopes + customParameters: + (nullable NSDictionary *)customParameters; +@property(nonatomic, copy) NSString *providerId; +@property(nonatomic, copy, nullable) NSArray *scopes; +@property(nonatomic, copy, nullable) NSDictionary *customParameters; +@end + +@interface InternalVerifyPhoneNumberRequest : NSObject +/// `init` unavailable to enforce nonnull fields, see the `make` class method. +- (instancetype)init NS_UNAVAILABLE; ++ (instancetype)makeWithPhoneNumber:(nullable NSString *)phoneNumber + timeout:(NSInteger)timeout + forceResendingToken:(nullable NSNumber *)forceResendingToken + autoRetrievedSmsCodeForTesting:(nullable NSString *)autoRetrievedSmsCodeForTesting + multiFactorInfoId:(nullable NSString *)multiFactorInfoId + multiFactorSessionId:(nullable NSString *)multiFactorSessionId; +@property(nonatomic, copy, nullable) NSString *phoneNumber; +@property(nonatomic, assign) NSInteger timeout; +@property(nonatomic, strong, nullable) NSNumber *forceResendingToken; +@property(nonatomic, copy, nullable) NSString *autoRetrievedSmsCodeForTesting; +@property(nonatomic, copy, nullable) NSString *multiFactorInfoId; +@property(nonatomic, copy, nullable) NSString *multiFactorSessionId; +@end + +@interface InternalIdTokenResult : NSObject ++ (instancetype)makeWithToken:(nullable NSString *)token + expirationTimestamp:(nullable NSNumber *)expirationTimestamp + authTimestamp:(nullable NSNumber *)authTimestamp + issuedAtTimestamp:(nullable NSNumber *)issuedAtTimestamp + signInProvider:(nullable NSString *)signInProvider + claims:(nullable NSDictionary *)claims + signInSecondFactor:(nullable NSString *)signInSecondFactor; +@property(nonatomic, copy, nullable) NSString *token; +@property(nonatomic, strong, nullable) NSNumber *expirationTimestamp; +@property(nonatomic, strong, nullable) NSNumber *authTimestamp; +@property(nonatomic, strong, nullable) NSNumber *issuedAtTimestamp; +@property(nonatomic, copy, nullable) NSString *signInProvider; +@property(nonatomic, copy, nullable) NSDictionary *claims; +@property(nonatomic, copy, nullable) NSString *signInSecondFactor; +@end + +@interface InternalUserProfile : NSObject +/// `init` unavailable to enforce nonnull fields, see the `make` class method. +- (instancetype)init NS_UNAVAILABLE; ++ (instancetype)makeWithDisplayName:(nullable NSString *)displayName + photoUrl:(nullable NSString *)photoUrl + displayNameChanged:(BOOL)displayNameChanged + photoUrlChanged:(BOOL)photoUrlChanged; +@property(nonatomic, copy, nullable) NSString *displayName; +@property(nonatomic, copy, nullable) NSString *photoUrl; +@property(nonatomic, assign) BOOL displayNameChanged; +@property(nonatomic, assign) BOOL photoUrlChanged; +@end + +@interface InternalTotpSecret : NSObject +/// `init` unavailable to enforce nonnull fields, see the `make` class method. +- (instancetype)init NS_UNAVAILABLE; ++ (instancetype)makeWithCodeIntervalSeconds:(nullable NSNumber *)codeIntervalSeconds + codeLength:(nullable NSNumber *)codeLength + enrollmentCompletionDeadline:(nullable NSNumber *)enrollmentCompletionDeadline + hashingAlgorithm:(nullable NSString *)hashingAlgorithm + secretKey:(NSString *)secretKey; +@property(nonatomic, strong, nullable) NSNumber *codeIntervalSeconds; +@property(nonatomic, strong, nullable) NSNumber *codeLength; +@property(nonatomic, strong, nullable) NSNumber *enrollmentCompletionDeadline; +@property(nonatomic, copy, nullable) NSString *hashingAlgorithm; +@property(nonatomic, copy) NSString *secretKey; +@end + +/// The codec used by all APIs. +NSObject *nullGetFirebaseAuthMessagesCodec(void); + +@protocol FirebaseAuthHostApi +- (void)registerIdTokenListenerApp:(AuthPigeonFirebaseApp *)app + completion: + (void (^)(NSString *_Nullable, FlutterError *_Nullable))completion; +- (void)registerAuthStateListenerApp:(AuthPigeonFirebaseApp *)app + completion: + (void (^)(NSString *_Nullable, FlutterError *_Nullable))completion; +- (void)useEmulatorApp:(AuthPigeonFirebaseApp *)app + host:(NSString *)host + port:(NSInteger)port + completion:(void (^)(FlutterError *_Nullable))completion; +- (void)applyActionCodeApp:(AuthPigeonFirebaseApp *)app + code:(NSString *)code + completion:(void (^)(FlutterError *_Nullable))completion; +- (void)checkActionCodeApp:(AuthPigeonFirebaseApp *)app + code:(NSString *)code + completion:(void (^)(InternalActionCodeInfo *_Nullable, + FlutterError *_Nullable))completion; +- (void)confirmPasswordResetApp:(AuthPigeonFirebaseApp *)app + code:(NSString *)code + newPassword:(NSString *)newPassword + completion:(void (^)(FlutterError *_Nullable))completion; +- (void)createUserWithEmailAndPasswordApp:(AuthPigeonFirebaseApp *)app + email:(NSString *)email + password:(NSString *)password + completion:(void (^)(InternalUserCredential *_Nullable, + FlutterError *_Nullable))completion; +- (void)signInAnonymouslyApp:(AuthPigeonFirebaseApp *)app + completion:(void (^)(InternalUserCredential *_Nullable, + FlutterError *_Nullable))completion; +- (void)signInWithCredentialApp:(AuthPigeonFirebaseApp *)app + input:(NSDictionary *)input + completion:(void (^)(InternalUserCredential *_Nullable, + FlutterError *_Nullable))completion; +- (void)signInWithCustomTokenApp:(AuthPigeonFirebaseApp *)app + token:(NSString *)token + completion:(void (^)(InternalUserCredential *_Nullable, + FlutterError *_Nullable))completion; +- (void)signInWithEmailAndPasswordApp:(AuthPigeonFirebaseApp *)app + email:(NSString *)email + password:(NSString *)password + completion:(void (^)(InternalUserCredential *_Nullable, + FlutterError *_Nullable))completion; +- (void)signInWithEmailLinkApp:(AuthPigeonFirebaseApp *)app + email:(NSString *)email + emailLink:(NSString *)emailLink + completion:(void (^)(InternalUserCredential *_Nullable, + FlutterError *_Nullable))completion; +- (void)signInWithProviderApp:(AuthPigeonFirebaseApp *)app + signInProvider:(InternalSignInProvider *)signInProvider + completion:(void (^)(InternalUserCredential *_Nullable, + FlutterError *_Nullable))completion; +- (void)signOutApp:(AuthPigeonFirebaseApp *)app + completion:(void (^)(FlutterError *_Nullable))completion; +- (void)fetchSignInMethodsForEmailApp:(AuthPigeonFirebaseApp *)app + email:(NSString *)email + completion:(void (^)(NSArray *_Nullable, + FlutterError *_Nullable))completion; +- (void)sendPasswordResetEmailApp:(AuthPigeonFirebaseApp *)app + email:(NSString *)email + actionCodeSettings:(nullable InternalActionCodeSettings *)actionCodeSettings + completion:(void (^)(FlutterError *_Nullable))completion; +- (void)sendSignInLinkToEmailApp:(AuthPigeonFirebaseApp *)app + email:(NSString *)email + actionCodeSettings:(InternalActionCodeSettings *)actionCodeSettings + completion:(void (^)(FlutterError *_Nullable))completion; +- (void)setLanguageCodeApp:(AuthPigeonFirebaseApp *)app + languageCode:(nullable NSString *)languageCode + completion:(void (^)(NSString *_Nullable, FlutterError *_Nullable))completion; +- (void)setSettingsApp:(AuthPigeonFirebaseApp *)app + settings:(InternalFirebaseAuthSettings *)settings + completion:(void (^)(FlutterError *_Nullable))completion; +- (void)verifyPasswordResetCodeApp:(AuthPigeonFirebaseApp *)app + code:(NSString *)code + completion: + (void (^)(NSString *_Nullable, FlutterError *_Nullable))completion; +- (void)verifyPhoneNumberApp:(AuthPigeonFirebaseApp *)app + request:(InternalVerifyPhoneNumberRequest *)request + completion:(void (^)(NSString *_Nullable, FlutterError *_Nullable))completion; +- (void)revokeTokenWithAuthorizationCodeApp:(AuthPigeonFirebaseApp *)app + authorizationCode:(NSString *)authorizationCode + completion:(void (^)(FlutterError *_Nullable))completion; +- (void)revokeAccessTokenApp:(AuthPigeonFirebaseApp *)app + accessToken:(NSString *)accessToken + completion:(void (^)(FlutterError *_Nullable))completion; +- (void)initializeRecaptchaConfigApp:(AuthPigeonFirebaseApp *)app + completion:(void (^)(FlutterError *_Nullable))completion; +@end + +extern void SetUpFirebaseAuthHostApi(id binaryMessenger, + NSObject *_Nullable api); + +extern void SetUpFirebaseAuthHostApiWithSuffix(id binaryMessenger, + NSObject *_Nullable api, + NSString *messageChannelSuffix); + +@protocol FirebaseAuthUserHostApi +- (void)deleteApp:(AuthPigeonFirebaseApp *)app + completion:(void (^)(FlutterError *_Nullable))completion; +- (void)getIdTokenApp:(AuthPigeonFirebaseApp *)app + forceRefresh:(BOOL)forceRefresh + completion: + (void (^)(InternalIdTokenResult *_Nullable, FlutterError *_Nullable))completion; +- (void)linkWithCredentialApp:(AuthPigeonFirebaseApp *)app + input:(NSDictionary *)input + completion:(void (^)(InternalUserCredential *_Nullable, + FlutterError *_Nullable))completion; +- (void)linkWithProviderApp:(AuthPigeonFirebaseApp *)app + signInProvider:(InternalSignInProvider *)signInProvider + completion:(void (^)(InternalUserCredential *_Nullable, + FlutterError *_Nullable))completion; +- (void)reauthenticateWithCredentialApp:(AuthPigeonFirebaseApp *)app + input:(NSDictionary *)input + completion:(void (^)(InternalUserCredential *_Nullable, + FlutterError *_Nullable))completion; +- (void)reauthenticateWithProviderApp:(AuthPigeonFirebaseApp *)app + signInProvider:(InternalSignInProvider *)signInProvider + completion:(void (^)(InternalUserCredential *_Nullable, + FlutterError *_Nullable))completion; +- (void)reloadApp:(AuthPigeonFirebaseApp *)app + completion:(void (^)(InternalUserDetails *_Nullable, FlutterError *_Nullable))completion; +- (void)sendEmailVerificationApp:(AuthPigeonFirebaseApp *)app + actionCodeSettings:(nullable InternalActionCodeSettings *)actionCodeSettings + completion:(void (^)(FlutterError *_Nullable))completion; +- (void)unlinkApp:(AuthPigeonFirebaseApp *)app + providerId:(NSString *)providerId + completion:(void (^)(InternalUserCredential *_Nullable, FlutterError *_Nullable))completion; +- (void)updateEmailApp:(AuthPigeonFirebaseApp *)app + newEmail:(NSString *)newEmail + completion: + (void (^)(InternalUserDetails *_Nullable, FlutterError *_Nullable))completion; +- (void)updatePasswordApp:(AuthPigeonFirebaseApp *)app + newPassword:(NSString *)newPassword + completion: + (void (^)(InternalUserDetails *_Nullable, FlutterError *_Nullable))completion; +- (void)updatePhoneNumberApp:(AuthPigeonFirebaseApp *)app + input:(NSDictionary *)input + completion: + (void (^)(InternalUserDetails *_Nullable, FlutterError *_Nullable))completion; +- (void)updateProfileApp:(AuthPigeonFirebaseApp *)app + profile:(InternalUserProfile *)profile + completion: + (void (^)(InternalUserDetails *_Nullable, FlutterError *_Nullable))completion; +- (void)verifyBeforeUpdateEmailApp:(AuthPigeonFirebaseApp *)app + newEmail:(NSString *)newEmail + actionCodeSettings:(nullable InternalActionCodeSettings *)actionCodeSettings + completion:(void (^)(FlutterError *_Nullable))completion; +@end + +extern void SetUpFirebaseAuthUserHostApi(id binaryMessenger, + NSObject *_Nullable api); + +extern void SetUpFirebaseAuthUserHostApiWithSuffix(id binaryMessenger, + NSObject *_Nullable api, + NSString *messageChannelSuffix); + +@protocol MultiFactorUserHostApi +- (void)enrollPhoneApp:(AuthPigeonFirebaseApp *)app + assertion:(InternalPhoneMultiFactorAssertion *)assertion + displayName:(nullable NSString *)displayName + completion:(void (^)(FlutterError *_Nullable))completion; +- (void)enrollTotpApp:(AuthPigeonFirebaseApp *)app + assertionId:(NSString *)assertionId + displayName:(nullable NSString *)displayName + completion:(void (^)(FlutterError *_Nullable))completion; +- (void)getSessionApp:(AuthPigeonFirebaseApp *)app + completion: + (void (^)(InternalMultiFactorSession *_Nullable, FlutterError *_Nullable))completion; +- (void)unenrollApp:(AuthPigeonFirebaseApp *)app + factorUid:(NSString *)factorUid + completion:(void (^)(FlutterError *_Nullable))completion; +- (void)getEnrolledFactorsApp:(AuthPigeonFirebaseApp *)app + completion:(void (^)(NSArray *_Nullable, + FlutterError *_Nullable))completion; +@end + +extern void SetUpMultiFactorUserHostApi(id binaryMessenger, + NSObject *_Nullable api); + +extern void SetUpMultiFactorUserHostApiWithSuffix(id binaryMessenger, + NSObject *_Nullable api, + NSString *messageChannelSuffix); + +@protocol MultiFactoResolverHostApi +- (void)resolveSignInResolverId:(NSString *)resolverId + assertion:(nullable InternalPhoneMultiFactorAssertion *)assertion + totpAssertionId:(nullable NSString *)totpAssertionId + completion:(void (^)(InternalUserCredential *_Nullable, + FlutterError *_Nullable))completion; +@end + +extern void SetUpMultiFactoResolverHostApi(id binaryMessenger, + NSObject *_Nullable api); + +extern void SetUpMultiFactoResolverHostApiWithSuffix( + id binaryMessenger, NSObject *_Nullable api, + NSString *messageChannelSuffix); + +@protocol MultiFactorTotpHostApi +- (void)generateSecretSessionId:(NSString *)sessionId + completion:(void (^)(InternalTotpSecret *_Nullable, + FlutterError *_Nullable))completion; +- (void)getAssertionForEnrollmentSecretKey:(NSString *)secretKey + oneTimePassword:(NSString *)oneTimePassword + completion:(void (^)(NSString *_Nullable, + FlutterError *_Nullable))completion; +- (void)getAssertionForSignInEnrollmentId:(NSString *)enrollmentId + oneTimePassword:(NSString *)oneTimePassword + completion:(void (^)(NSString *_Nullable, + FlutterError *_Nullable))completion; +@end + +extern void SetUpMultiFactorTotpHostApi(id binaryMessenger, + NSObject *_Nullable api); + +extern void SetUpMultiFactorTotpHostApiWithSuffix(id binaryMessenger, + NSObject *_Nullable api, + NSString *messageChannelSuffix); + +@protocol MultiFactorTotpSecretHostApi +- (void)generateQrCodeUrlSecretKey:(NSString *)secretKey + accountName:(nullable NSString *)accountName + issuer:(nullable NSString *)issuer + completion: + (void (^)(NSString *_Nullable, FlutterError *_Nullable))completion; +- (void)openInOtpAppSecretKey:(NSString *)secretKey + qrCodeUrl:(NSString *)qrCodeUrl + completion:(void (^)(FlutterError *_Nullable))completion; +@end + +extern void SetUpMultiFactorTotpSecretHostApi( + id binaryMessenger, + NSObject *_Nullable api); + +extern void SetUpMultiFactorTotpSecretHostApiWithSuffix( + id binaryMessenger, + NSObject *_Nullable api, NSString *messageChannelSuffix); + +/// Only used to generate the object interface that are use outside of the Pigeon interface +@protocol GenerateInterfaces +- (void)pigeonInterfaceInfo:(InternalMultiFactorInfo *)info + error:(FlutterError *_Nullable *_Nonnull)error; +@end + +extern void SetUpGenerateInterfaces(id binaryMessenger, + NSObject *_Nullable api); + +extern void SetUpGenerateInterfacesWithSuffix(id binaryMessenger, + NSObject *_Nullable api, + NSString *messageChannelSuffix); + +NS_ASSUME_NONNULL_END diff --git a/mih_ui/android/build/macos/SourcePackages/firebase_auth-6.5.4/lib/firebase_auth.dart b/mih_ui/android/build/macos/SourcePackages/firebase_auth-6.5.4/lib/firebase_auth.dart new file mode 100755 index 00000000..61e60561 --- /dev/null +++ b/mih_ui/android/build/macos/SourcePackages/firebase_auth-6.5.4/lib/firebase_auth.dart @@ -0,0 +1,72 @@ +// Copyright 2019 The Chromium Authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +import 'dart:async'; + +import 'package:firebase_auth_platform_interface/firebase_auth_platform_interface.dart'; +import 'package:firebase_core/firebase_core.dart'; +import 'package:firebase_core_platform_interface/firebase_core_platform_interface.dart'; +import 'package:flutter/foundation.dart'; + +export 'package:firebase_auth_platform_interface/firebase_auth_platform_interface.dart' + show + FirebaseAuthException, + MultiFactorInfo, + MultiFactorSession, + PhoneMultiFactorInfo, + TotpMultiFactorInfo, + IdTokenResult, + UserMetadata, + UserInfo, + ActionCodeInfo, + ActionCodeSettings, + AdditionalUserInfo, + ActionCodeInfoOperation, + Persistence, + PhoneVerificationCompleted, + PhoneVerificationFailed, + PhoneCodeSent, + PhoneCodeAutoRetrievalTimeout, + AuthCredential, + AuthProvider, + AppleAuthProvider, + AppleFullPersonName, + AppleAuthCredential, + EmailAuthProvider, + EmailAuthCredential, + FacebookAuthProvider, + FacebookAuthCredential, + GameCenterAuthProvider, + GameCenterAuthCredential, + PlayGamesAuthProvider, + PlayGamesAuthCredential, + GithubAuthProvider, + GithubAuthCredential, + GoogleAuthProvider, + GoogleAuthCredential, + YahooAuthProvider, + YahooAuthCredential, + MicrosoftAuthProvider, + OAuthProvider, + OAuthCredential, + PhoneAuthProvider, + PhoneAuthCredential, + SAMLAuthProvider, + TwitterAuthProvider, + TwitterAuthCredential, + RecaptchaVerifierOnSuccess, + RecaptchaVerifierOnExpired, + RecaptchaVerifierOnError, + RecaptchaVerifierSize, + RecaptchaVerifierTheme, + PasswordValidationStatus; +export 'package:firebase_core_platform_interface/firebase_core_platform_interface.dart' + show FirebaseException; + +part 'src/confirmation_result.dart'; +part 'src/firebase_auth.dart'; +part 'src/multi_factor.dart'; +part 'src/recaptcha_verifier.dart'; +part 'src/user.dart'; +part 'src/user_credential.dart'; diff --git a/mih_ui/android/build/macos/SourcePackages/firebase_auth-6.5.4/lib/src/confirmation_result.dart b/mih_ui/android/build/macos/SourcePackages/firebase_auth-6.5.4/lib/src/confirmation_result.dart new file mode 100644 index 00000000..c039cd79 --- /dev/null +++ b/mih_ui/android/build/macos/SourcePackages/firebase_auth-6.5.4/lib/src/confirmation_result.dart @@ -0,0 +1,36 @@ +// ignore_for_file: require_trailing_commas +// Copyright 2020 The Chromium Authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +part of '../firebase_auth.dart'; + +/// A result from a phone number sign-in, link, or reauthenticate call. +/// +/// This class is only usable on web based platforms. +class ConfirmationResult { + ConfirmationResultPlatform _delegate; + + final FirebaseAuth _auth; + + ConfirmationResult._(this._auth, this._delegate) { + ConfirmationResultPlatform.verify(_delegate); + } + + /// The phone number authentication operation's verification ID. + /// + /// This can be used along with the verification code to initialize a phone + /// auth credential. + String get verificationId { + return _delegate.verificationId; + } + + /// Finishes a phone number sign-in, link, or reauthentication, given the code + /// that was sent to the user's mobile device. + Future confirm(String verificationCode) async { + return UserCredential._( + _auth, + await _delegate.confirm(verificationCode), + ); + } +} diff --git a/mih_ui/android/build/macos/SourcePackages/firebase_auth-6.5.4/lib/src/firebase_auth.dart b/mih_ui/android/build/macos/SourcePackages/firebase_auth-6.5.4/lib/src/firebase_auth.dart new file mode 100644 index 00000000..2f4ebe42 --- /dev/null +++ b/mih_ui/android/build/macos/SourcePackages/firebase_auth-6.5.4/lib/src/firebase_auth.dart @@ -0,0 +1,893 @@ +// ignore_for_file: require_trailing_commas +// Copyright 2017 The Chromium Authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +part of '../firebase_auth.dart'; + +/// The entry point of the Firebase Authentication SDK. +class FirebaseAuth extends FirebasePluginPlatform implements FirebaseService { + // Cached instances of [FirebaseAuth]. + static Map _firebaseAuthInstances = {}; + + // Cached and lazily loaded instance of [FirebaseAuthPlatform] to avoid + // creating a [MethodChannelFirebaseAuth] when not needed or creating an + // instance with the default app before a user specifies an app. + FirebaseAuthPlatform? _delegatePackingProperty; + + /// Returns the underlying delegate implementation. + /// + /// If called and no [_delegatePackingProperty] exists, it will first be + /// created and assigned before returning the delegate. + FirebaseAuthPlatform get _delegate { + _delegatePackingProperty ??= FirebaseAuthPlatform.instanceFor( + app: app, + pluginConstants: pluginConstants, + ); + return _delegatePackingProperty!; + } + + /// The [FirebaseApp] for this current Auth instance. + FirebaseApp app; + + FirebaseAuth._({required this.app}) + : super(app.name, 'plugins.flutter.io/firebase_auth'); + + /// Returns an instance using the default [FirebaseApp]. + static FirebaseAuth get instance { + FirebaseApp defaultAppInstance = Firebase.app(); + + return FirebaseAuth.instanceFor(app: defaultAppInstance); + } + + /// Returns an instance using a specified [FirebaseApp]. + factory FirebaseAuth.instanceFor({ + required FirebaseApp app, + }) { + return _firebaseAuthInstances.putIfAbsent(app.name, () { + final instance = FirebaseAuth._(app: app); + app.registerService( + instance, + dispose: (auth) => auth._dispose(), + ); + return instance; + }); + } + + Future _dispose() async { + _firebaseAuthInstances.remove(app.name); + final delegate = _delegatePackingProperty; + _delegatePackingProperty = null; + await delegate?.dispose(); + } + + /// Returns the current [User] if they are currently signed-in, or `null` if + /// not. + /// + /// This getter only provides a snapshot of user state. Applications that need + /// to react to changes in user state should instead use [authStateChanges], + /// [idTokenChanges] or [userChanges] to subscribe to updates. + User? get currentUser { + if (_delegate.currentUser != null) { + return User._(this, _delegate.currentUser!); + } + + return null; + } + + /// The current Auth instance's language code. + /// + /// See [setLanguageCode] to update the language code. + String? get languageCode { + return _delegate.languageCode; + } + + /// Changes this instance to point to an Auth emulator running locally. + /// + /// Set the [host] of the local emulator, such as "localhost" + /// Set the [port] of the local emulator, such as "9099" (port 9099 is default for auth package) + /// + /// Note: Must be called immediately, prior to accessing auth methods. + /// Do not use with production credentials as emulator traffic is not encrypted. + Future useAuthEmulator(String host, int port, + {bool automaticHostMapping = true}) async { + String mappedHost = automaticHostMapping ? getMappedHost(host) : host; + + await _delegate.useAuthEmulator(mappedHost, port); + } + + /// The current Auth instance's tenant ID. + String? get tenantId { + return _delegate.tenantId; + } + + /// Set the current Auth instance's tenant ID. + /// + /// When you set the tenant ID of an Auth instance, all future sign-in/sign-up + /// operations will pass this tenant ID and sign in or sign up users to the + /// specified tenant project. When set to null, users are signed in to the + /// parent project. By default, this is set to `null`. + set tenantId(String? tenantId) { + _delegate.tenantId = tenantId; + } + + /// The current Auth instance's custom auth domain. + /// The auth domain used to handle redirects from OAuth provides, for example + /// "my-awesome-app.firebaseapp.com". By default, this is set to `null` and + /// default auth domain is used. + /// + /// If not `null`, this value will supersede `authDomain` property set in `initializeApp`. + String? get customAuthDomain { + return _delegate.customAuthDomain; + } + + /// Set the current Auth instance's auth domain for apple and android platforms. + /// The auth domain used to handle redirects from OAuth provides, for example + /// "my-awesome-app.firebaseapp.com". By default, this is set to `null` and + /// default auth domain is used. + /// + /// If not `null`, this value will supersede `authDomain` property set in `initializeApp`. + set customAuthDomain(String? customAuthDomain) { + // Web and windows do not support setting custom auth domains on the auth instance + if (defaultTargetPlatform == TargetPlatform.windows || kIsWeb) { + final message = defaultTargetPlatform == TargetPlatform.windows + ? 'Cannot set custom auth domain on a FirebaseAuth instance for windows platform' + : 'Cannot set custom auth domain on a FirebaseAuth instance. Set the custom auth domain on `FirebaseOptions.authDomain` instance and pass into `Firebase.initializeApp()` instead.'; + throw UnimplementedError( + message, + ); + } + _delegate.customAuthDomain = customAuthDomain; + } + + /// Applies a verification code sent to the user by email or other out-of-band + /// mechanism. + /// + /// A [FirebaseAuthException] maybe thrown with the following error code: + /// - **expired-action-code**: + /// - Thrown if the action code has expired. + /// - **invalid-action-code**: + /// - Thrown if the action code is invalid. This can happen if the code is + /// malformed or has already been used. + /// - **user-disabled**: + /// - Thrown if the user corresponding to the given action code has been + /// disabled. + /// - **user-not-found**: + /// - Thrown if there is no user corresponding to the action code. This may + /// have happened if the user was deleted between when the action code was + /// issued and when this method was called. + Future applyActionCode(String code) async { + await _delegate.applyActionCode(code); + } + + /// Checks a verification code sent to the user by email or other out-of-band + /// mechanism. + /// + /// Returns [ActionCodeInfo] about the code. + /// + /// A [FirebaseAuthException] maybe thrown with the following error code: + /// - **expired-action-code**: + /// - Thrown if the action code has expired. + /// - **invalid-action-code**: + /// - Thrown if the action code is invalid. This can happen if the code is + /// malformed or has already been used. + /// - **user-disabled**: + /// - Thrown if the user corresponding to the given action code has been + /// disabled. + /// - **user-not-found**: + /// - Thrown if there is no user corresponding to the action code. This may + /// have happened if the user was deleted between when the action code was + /// issued and when this method was called. + Future checkActionCode(String code) { + return _delegate.checkActionCode(code); + } + + /// Completes the password reset process, given a confirmation code and new + /// password. + /// + /// A [FirebaseAuthException] maybe thrown with the following error code: + /// - **expired-action-code**: + /// - Thrown if the action code has expired. + /// - **invalid-action-code**: + /// - Thrown if the action code is invalid. This can happen if the code is + /// malformed or has already been used. + /// - **user-disabled**: + /// - Thrown if the user corresponding to the given action code has been + /// disabled. + /// - **user-not-found**: + /// - Thrown if there is no user corresponding to the action code. This may + /// have happened if the user was deleted between when the action code was + /// issued and when this method was called. + /// - **weak-password**: + /// - Thrown if the new password is not strong enough. + Future confirmPasswordReset({ + required String code, + required String newPassword, + }) async { + await _delegate.confirmPasswordReset(code, newPassword); + } + + /// Tries to create a new user account with the given email address and + /// password. + /// + /// A [FirebaseAuthException] maybe thrown with the following error code: + /// - **email-already-in-use**: + /// - Thrown if there already exists an account with the given email address. + /// - **invalid-email**: + /// - Thrown if the email address is not valid. + /// - **operation-not-allowed**: + /// - Thrown if email/password accounts are not enabled. Enable + /// email/password accounts in the Firebase Console, under the Auth tab. + /// - **weak-password**: + /// - Thrown if the password is not strong enough. + /// - **too-many-requests**: + /// - Thrown if the user sent too many requests at the same time, for security + /// the api will not allow too many attempts at the same time, user will have + /// to wait for some time + /// - **user-token-expired**: + /// - Thrown if the user is no longer authenticated since his refresh token + /// has been expired + /// - **network-request-failed**: + /// - Thrown if there was a network request error, for example the user + /// doesn't have internet connection + /// - **operation-not-allowed**: + /// - Thrown if email/password accounts are not enabled. Enable + /// email/password accounts in the Firebase Console, under the Auth tab. + Future createUserWithEmailAndPassword({ + required String email, + required String password, + }) async { + return UserCredential._( + this, + await _delegate.createUserWithEmailAndPassword(email, password), + ); + } + + /// Returns a UserCredential from the redirect-based sign-in flow. + /// + /// If sign-in succeeded, returns the signed in user. If sign-in was + /// unsuccessful, fails with an error. If no redirect operation was called, + /// returns a [UserCredential] with a null User. + /// + /// This method is only support on web platforms. + Future getRedirectResult() async { + return UserCredential._(this, await _delegate.getRedirectResult()); + } + + /// Checks if an incoming link is a sign-in with email link. + bool isSignInWithEmailLink(String emailLink) { + return _delegate.isSignInWithEmailLink(emailLink); + } + + /// Internal helper which pipes internal [Stream] events onto + /// a users own Stream. + Stream _pipeStreamChanges(Stream stream) { + return stream.map((delegateUser) { + if (delegateUser == null) { + return null; + } + + return User._(this, delegateUser); + }).asBroadcastStream(onCancel: (sub) => sub.cancel()); + } + + /// Notifies about changes to the user's sign-in state (such as sign-in or + /// sign-out). + Stream authStateChanges() => + _pipeStreamChanges(_delegate.authStateChanges()); + + /// Notifies about changes to the user's sign-in state (such as sign-in or + /// sign-out) and also token refresh events. + Stream idTokenChanges() => + _pipeStreamChanges(_delegate.idTokenChanges()); + + /// Notifies about changes to any user updates. + /// + /// This is a superset of both [authStateChanges] and [idTokenChanges]. It + /// provides events on all user changes, such as when credentials are linked, + /// unlinked and when updates to the user profile are made. The purpose of + /// this Stream is for listening to realtime updates to the user state + /// (signed-in, signed-out, different user & token refresh) without + /// manually having to call [reload] and then rehydrating changes to your + /// application. + Stream userChanges() => _pipeStreamChanges(_delegate.userChanges()); + + /// Sends a password reset email to the given email address. + /// + /// To complete the password reset, call [confirmPasswordReset] with the code supplied + /// in the email sent to the user, along with the new password specified by the user. + /// + /// If email enumeration protection is enabled for the Firebase project, this + /// method may complete successfully even when the email does not correspond + /// to an existing user. + /// + /// May throw a [FirebaseAuthException] with the following error codes: + /// + /// - **auth/invalid-email**\ + /// Thrown if the email address is not valid. + /// - **auth/missing-android-pkg-name**\ + /// An Android package name must be provided if the Android app is required to be installed. + /// - **auth/missing-continue-uri**\ + /// A continue URL must be provided in the request. + /// - **auth/missing-ios-bundle-id**\ + /// An iOS Bundle ID must be provided if an App Store ID is provided. + /// - **auth/invalid-continue-uri**\ + /// The continue URL provided in the request is invalid. + /// - **auth/unauthorized-continue-uri**\ + /// The domain of the continue URL is not whitelisted. Whitelist the domain in the Firebase console. + /// - **auth/user-not-found**\ + /// Thrown if there is no user corresponding to the email address. Note: This + /// exception is not thrown when email enumeration protection is enabled. + Future sendPasswordResetEmail({ + required String email, + ActionCodeSettings? actionCodeSettings, + }) { + return _delegate.sendPasswordResetEmail(email, actionCodeSettings); + } + + /// Sends a sign in with email link to provided email address. + /// + /// To complete the password reset, call [confirmPasswordReset] with the code + /// supplied in the email sent to the user, along with the new password + /// specified by the user. + /// + /// The [handleCodeInApp] of [actionCodeSettings] must be set to `true` + /// otherwise an [ArgumentError] will be thrown. + /// + /// A [FirebaseAuthException] maybe thrown with the following error code: + /// - **invalid-email**: + /// - Thrown if the email address is not valid. + Future sendSignInLinkToEmail({ + required String email, + required ActionCodeSettings actionCodeSettings, + }) async { + if (actionCodeSettings.handleCodeInApp != true) { + throw ArgumentError( + 'The [handleCodeInApp] value of [ActionCodeSettings] must be `true`.', + ); + } + + await _delegate.sendSignInLinkToEmail(email, actionCodeSettings); + } + + /// When set to null, sets the user-facing language code to be the default app language. + /// + /// The language code will propagate to email action templates (password + /// reset, email verification and email change revocation), SMS templates for + /// phone authentication, reCAPTCHA verifier and OAuth popup/redirect + /// operations provided the specified providers support localization with the + /// language code specified. + Future setLanguageCode(String? languageCode) { + return _delegate.setLanguageCode(languageCode); + } + + /// Updates the current instance with the provided settings. + /// + /// [appVerificationDisabledForTesting] This setting applies to Android, iOS and + /// web platforms. When set to `true`, this property disables app + /// verification for the purpose of testing phone authentication. For this + /// property to take effect, it needs to be set before handling a reCAPTCHA + /// app verifier. When this is disabled, a mock reCAPTCHA is rendered + /// instead. This is useful for manual testing during development or for + /// automated integration tests. + /// + /// In order to use this feature, you will need to + /// [whitelist your phone number](https://firebase.google.com/docs/auth/web/phone-auth?authuser=0#test-with-whitelisted-phone-numbers) + /// via the Firebase Console. + /// + /// The default value is `false` (app verification is enabled). + /// + /// [forceRecaptchaFlow] This setting applies to Android only. When set to 'true', + /// it forces the application verification to use the web reCAPTCHA flow for Phone Authentication. + /// Once this has been called, every call to PhoneAuthProvider#verifyPhoneNumber() will skip the SafetyNet verification flow and use the reCAPTCHA flow instead. + /// Calling this method a second time will overwrite the previously passed parameter. + /// + /// [phoneNumber] & [smsCode] These settings apply to Android only. The phone number and SMS code here must have been configured in the Firebase Console (Authentication > Sign In Method > Phone). + /// Once this has been called, every call to PhoneAuthProvider#verifyPhoneNumber() with the same phone number as the one that is configured here will have onVerificationCompleted() triggered as the callback. + /// Calling this method a second time will overwrite the previously passed parameters. Only one number can be configured at a given time. + /// Calling this method with either parameter set to null removes this functionality until valid parameters are passed. + /// Verifying a phone number other than the one configured here will trigger normal behavior. If the phone number is configured as a test phone number in the console, the regular testing flow occurs. Otherwise, normal phone number verification will take place. + /// When this is set and PhoneAuthProvider#verifyPhoneNumber() is called with a matching phone number, PhoneAuthProvider.OnVerificationStateChangedCallbacks.onCodeAutoRetrievalTimeOut(String) will never be called. + /// + /// [userAccessGroup] This setting only applies to iOS and MacOS platforms. + /// When set, it allows you to share authentication state between + /// applications. Set the property to your team group ID or set to `null` + /// to remove sharing capabilities. + /// + /// Key Sharing capabilities must be enabled for your app via XCode (Project + /// settings > Capabilities). To learn more, visit the + /// [Apple documentation](https://developer.apple.com/documentation/security/keychain_services/keychain_items/sharing_access_to_keychain_items_among_a_collection_of_apps). + Future setSettings({ + bool appVerificationDisabledForTesting = false, + String? userAccessGroup, + String? phoneNumber, + String? smsCode, + bool? forceRecaptchaFlow, + }) { + return _delegate.setSettings( + appVerificationDisabledForTesting: appVerificationDisabledForTesting, + userAccessGroup: userAccessGroup, + phoneNumber: phoneNumber, + smsCode: smsCode, + forceRecaptchaFlow: forceRecaptchaFlow, + ); + } + + /// Changes the current type of persistence on the current Auth instance for + /// the currently saved Auth session and applies this type of persistence for + /// future sign-in requests, including sign-in with redirect requests. + /// + /// This will return a promise that will resolve once the state finishes + /// copying from one type of storage to the other. Calling a sign-in method + /// after changing persistence will wait for that persistence change to + /// complete before applying it on the new Auth state. + /// + /// This makes it easy for a user signing in to specify whether their session + /// should be remembered or not. It also makes it easier to never persist the + /// Auth state for applications that are shared by other users or have + /// sensitive data. + /// + /// This is only supported on web based platforms. + Future setPersistence(Persistence persistence) async { + return _delegate.setPersistence(persistence); + } + + /// Asynchronously creates and becomes an anonymous user. + /// + /// If there is already an anonymous user signed in, that user will be + /// returned instead. If there is any other existing user signed in, that + /// user will be signed out. + /// + /// **Important**: You must enable Anonymous accounts in the Auth section + /// of the Firebase console before being able to use them. + /// + /// A [FirebaseAuthException] maybe thrown with the following error code: + /// - **operation-not-allowed**: + /// - Thrown if anonymous accounts are not enabled. Enable anonymous accounts + /// in the Firebase Console, under the Auth tab. + Future signInAnonymously() async { + return UserCredential._(this, await _delegate.signInAnonymously()); + } + + /// Asynchronously signs in to Firebase with the given 3rd-party credentials + /// (e.g. a Facebook login Access Token, a Google ID Token/Access Token pair, + /// etc.) and returns additional identity provider data. + /// + /// If successful, it also signs the user in into the app and updates + /// any [authStateChanges], [idTokenChanges] or [userChanges] stream + /// listeners. + /// + /// If the user doesn't have an account already, one will be created + /// automatically. + /// + /// **Important**: You must enable the relevant accounts in the Auth section + /// of the Firebase console before being able to use them. + /// + /// A [FirebaseAuthException] maybe thrown with the following error code: + /// - **account-exists-with-different-credential**: + /// - Thrown if there already exists an account with the email address + /// asserted by the credential. + // ignore: deprecated_member_use_from_same_package + /// Resolve this by asking + /// the user to sign in using one of the returned providers. + /// Once the user is signed in, the original credential can be linked to + /// the user with [linkWithCredential]. + /// - **invalid-credential**: + /// - Thrown if the credential is malformed or has expired. + /// - **operation-not-allowed**: + /// - Thrown if the type of account corresponding to the credential is not + /// enabled. Enable the account type in the Firebase Console, under the + /// Auth tab. + /// - **user-disabled**: + /// - Thrown if the user corresponding to the given credential has been + /// disabled. + /// - **user-not-found**: + /// - Thrown if signing in with a credential from [EmailAuthProvider.credential] + /// and there is no user corresponding to the given email. + /// - **wrong-password**: + /// - Thrown if signing in with a credential from [EmailAuthProvider.credential] + /// and the password is invalid for the given email, or if the account + /// corresponding to the email does not have a password set. + /// - **invalid-verification-code**: + /// - Thrown if the credential is a [PhoneAuthProvider.credential] and the + /// verification code of the credential is not valid. + /// - **invalid-verification-id**: + /// - Thrown if the credential is a [PhoneAuthProvider.credential] and the + /// verification ID of the credential is not valid. + Future signInWithCredential(AuthCredential credential) async { + try { + return UserCredential._( + this, + await _delegate.signInWithCredential(credential), + ); + } on FirebaseAuthMultiFactorExceptionPlatform catch (e) { + throw FirebaseAuthMultiFactorException._(this, e); + } catch (e) { + rethrow; + } + } + + /// Tries to sign in a user with a given custom token. + /// + /// Custom tokens are used to integrate Firebase Auth with existing auth + /// systems, and must be generated by the auth backend. + /// + /// If successful, it also signs the user in into the app and updates + /// any [authStateChanges], [idTokenChanges] or [userChanges] stream + /// listeners. + /// + /// If the user identified by the [uid] specified in the token doesn't + /// have an account already, one will be created automatically. + /// + /// Read how to use Custom Token authentication and the cases where it is + /// useful in [the guides](https://firebase.google.com/docs/auth/android/custom-auth). + /// + /// A [FirebaseAuthException] maybe thrown with the following error code: + /// - **custom-token-mismatch**: + /// - Thrown if the custom token is for a different Firebase App. + /// - **invalid-custom-token**: + /// - Thrown if the custom token format is incorrect. + Future signInWithCustomToken(String token) async { + try { + return UserCredential._( + this, await _delegate.signInWithCustomToken(token)); + } on FirebaseAuthMultiFactorExceptionPlatform catch (e) { + throw FirebaseAuthMultiFactorException._(this, e); + } catch (e) { + rethrow; + } + } + + /// Attempts to sign in a user with the given email address and password. + /// + /// If successful, it also signs the user in into the app and updates + /// any [authStateChanges], [idTokenChanges] or [userChanges] stream + /// listeners. + /// + /// **Important**: You must enable Email & Password accounts in the Auth + /// section of the Firebase console before being able to use them. + /// + /// A [FirebaseAuthException] maybe thrown with the following error code: + /// - **invalid-email**: + /// - Thrown if the email address is not valid. + /// - **user-disabled**: + /// - Thrown if the user corresponding to the given email has been disabled. + /// - **user-not-found** _(deprecated)_: + /// - Thrown if there is no user corresponding to the given email. + /// **Note:** This code is no longer returned on projects that have + /// [email enumeration protection](https://cloud.google.com/identity-platform/docs/admin/email-enumeration-protection) + /// enabled (the default for new projects since September 2023). + /// Use **invalid-credential** instead. + /// - **wrong-password** _(deprecated)_: + /// - Thrown if the password is invalid for the given email, or the account + /// corresponding to the email does not have a password set. + /// **Note:** This code is no longer returned on projects that have + /// [email enumeration protection](https://cloud.google.com/identity-platform/docs/admin/email-enumeration-protection) + /// enabled (the default for new projects since September 2023). + /// Use **invalid-credential** instead. + /// - **too-many-requests**: + /// - Thrown if the user sent too many requests at the same time, for security + /// the api will not allow too many attempts at the same time, user will have + /// to wait for some time + /// - **user-token-expired**: + /// - Thrown if the user is no longer authenticated since his refresh token + /// has been expired + /// - **network-request-failed**: + /// - Thrown if there was a network request error, for example the user + /// doesn't have internet connection + /// - **invalid-credential**: + /// - Thrown if the email or password is incorrect. On projects with + /// [email enumeration protection](https://cloud.google.com/identity-platform/docs/admin/email-enumeration-protection) + /// enabled (the default since September 2023), this replaces + /// **user-not-found** and **wrong-password** to prevent revealing + /// whether an account exists. On the Firebase emulator, the code may + /// appear as **INVALID_LOGIN_CREDENTIALS**. + /// - **operation-not-allowed**: + /// - Thrown if email/password accounts are not enabled. Enable + /// email/password accounts in the Firebase Console, under the Auth tab. + Future signInWithEmailAndPassword({ + required String email, + required String password, + }) async { + try { + return UserCredential._( + this, + await _delegate.signInWithEmailAndPassword(email, password), + ); + } on FirebaseAuthMultiFactorExceptionPlatform catch (e) { + throw FirebaseAuthMultiFactorException._(this, e); + } catch (e) { + rethrow; + } + } + + /// Signs in using an email address and email sign-in link. + /// + /// Fails with an error if the email address is invalid or OTP in email link + /// expires. + /// + /// Confirm the link is a sign-in email link before calling this method, + /// using [isSignInWithEmailLink]. + /// + /// A [FirebaseAuthException] maybe thrown with the following error code: + /// - **expired-action-code**: + /// - Thrown if OTP in email link expires. + /// - **invalid-email**: + /// - Thrown if the email address is not valid. + /// - **user-disabled**: + /// - Thrown if the user corresponding to the given email has been disabled. + Future signInWithEmailLink({ + required String email, + required String emailLink, + }) async { + try { + return UserCredential._( + this, + await _delegate.signInWithEmailLink(email, emailLink), + ); + } on FirebaseAuthMultiFactorExceptionPlatform catch (e) { + throw FirebaseAuthMultiFactorException._(this, e); + } catch (e) { + rethrow; + } + } + + /// Signs in with an AuthProvider using native authentication flow. + /// + /// A [FirebaseAuthException] maybe thrown with the following error code: + /// - **user-disabled**: + /// - Thrown if the user corresponding to the given email has been disabled. + Future signInWithProvider( + AuthProvider provider, + ) async { + try { + return UserCredential._( + this, + await _delegate.signInWithProvider(provider), + ); + } on FirebaseAuthMultiFactorExceptionPlatform catch (e) { + throw FirebaseAuthMultiFactorException._(this, e); + } catch (e) { + rethrow; + } + } + + /// Starts a sign-in flow for a phone number. + /// + /// You can optionally provide a [RecaptchaVerifier] instance to control the + /// reCAPTCHA widget appearance and behavior. + /// + /// Once the reCAPTCHA verification has completed, called [ConfirmationResult.confirm] + /// with the users SMS verification code to complete the authentication flow. + /// + /// This method is only available on web based platforms. + Future signInWithPhoneNumber( + String phoneNumber, [ + RecaptchaVerifier? verifier, + ]) async { + assert(phoneNumber.isNotEmpty); + // If we add a recaptcha to the page by creating a new instance, we must + // also clear that instance before proceeding. + bool mustClear = verifier == null; + verifier ??= RecaptchaVerifier(auth: _delegate); + final result = + await _delegate.signInWithPhoneNumber(phoneNumber, verifier.delegate); + if (mustClear) { + verifier.clear(); + } + return ConfirmationResult._(this, result); + } + + /// Authenticates a Firebase client using a popup-based OAuth authentication + /// flow. + /// + /// If succeeds, returns the signed in user along with the provider's + /// credential. + /// + /// This method is only available on web based platforms. + Future signInWithPopup(AuthProvider provider) async { + try { + return UserCredential._(this, await _delegate.signInWithPopup(provider)); + } on FirebaseAuthMultiFactorExceptionPlatform catch (e) { + throw FirebaseAuthMultiFactorException._(this, e); + } catch (e) { + rethrow; + } + } + + /// Authenticates a Firebase client using a full-page redirect flow. + /// + /// To handle the results and errors for this operation, refer to + /// [getRedirectResult]. + Future signInWithRedirect(AuthProvider provider) { + try { + return _delegate.signInWithRedirect(provider); + } on FirebaseAuthMultiFactorExceptionPlatform catch (e) { + throw FirebaseAuthMultiFactorException._(this, e); + } catch (e) { + rethrow; + } + } + + /// Checks a password reset code sent to the user by email or other + /// out-of-band mechanism. + /// + /// Returns the user's email address if valid. + /// + /// A [FirebaseAuthException] maybe thrown with the following error code: + /// - **expired-action-code**: + /// - Thrown if the password reset code has expired. + /// - **invalid-action-code**: + /// - Thrown if the password reset code is invalid. This can happen if the + /// code is malformed or has already been used. + /// - **user-disabled**: + /// - Thrown if the user corresponding to the given email has been disabled. + /// - **user-not-found**: + /// - Thrown if there is no user corresponding to the password reset code. + /// This may have happened if the user was deleted between when the code + /// was issued and when this method was called. + Future verifyPasswordResetCode(String code) { + return _delegate.verifyPasswordResetCode(code); + } + + /// Starts a phone number verification process for the given phone number. + /// + /// This method is used to verify that the user-provided phone number belongs + /// to the user. Firebase sends a code via SMS message to the phone number, + /// where you must then prompt the user to enter the code. The code can be + /// combined with the verification ID to create a [PhoneAuthProvider.credential] + /// which you can then use to sign the user in, or link with their account ( + /// see [signInWithCredential] or [linkWithCredential]). + /// + /// On some Android devices, auto-verification can be handled by the device + /// and a [PhoneAuthCredential] will be automatically provided. + /// + /// No duplicated SMS will be sent out unless a [forceResendingToken] is + /// provided. + /// + /// [phoneNumber] The phone number for the account the user is signing up + /// for or signing into. Make sure to pass in a phone number with country + /// code prefixed with plus sign ('+'). + /// Should be null if it's a multi-factor sign in. + /// + /// [multiFactorInfo] The multi factor info you're using to verify the phone number. + /// Should be set if a [multiFactorSession] is provided. + /// + /// [multiFactorSession] The multi factor session you're using to verify the phone number. + /// Should be set if a [multiFactorInfo] is provided. + /// + /// [timeout] The maximum amount of time you are willing to wait for SMS + /// auto-retrieval to be completed by the library. Maximum allowed value + /// is 2 minutes. + /// + /// [forceResendingToken] The [forceResendingToken] obtained from [codeSent] + /// callback to force re-sending another verification SMS before the + /// auto-retrieval timeout. + /// + /// [verificationCompleted] Triggered when an SMS is auto-retrieved or the + /// phone number has been instantly verified. The callback will receive an + /// [PhoneAuthCredential] that can be passed to [signInWithCredential] or + /// [linkWithCredential]. + /// + /// [verificationFailed] Triggered when an error occurred during phone number + /// verification. A [FirebaseAuthException] is provided when this is + /// triggered. + /// + /// [codeSent] Triggered when an SMS has been sent to the users phone, and + /// will include a [verificationId] and [forceResendingToken]. + /// + /// [codeAutoRetrievalTimeout] Triggered when SMS auto-retrieval times out and + /// provide a [verificationId]. + Future verifyPhoneNumber({ + String? phoneNumber, + PhoneMultiFactorInfo? multiFactorInfo, + required PhoneVerificationCompleted verificationCompleted, + required PhoneVerificationFailed verificationFailed, + required PhoneCodeSent codeSent, + required PhoneCodeAutoRetrievalTimeout codeAutoRetrievalTimeout, + @visibleForTesting String? autoRetrievedSmsCodeForTesting, + Duration timeout = const Duration(seconds: 30), + int? forceResendingToken, + MultiFactorSession? multiFactorSession, + }) { + assert( + phoneNumber != null || multiFactorInfo != null, + 'Either phoneNumber or multiFactorInfo must be provided.', + ); + return _delegate.verifyPhoneNumber( + phoneNumber: phoneNumber, + multiFactorInfo: multiFactorInfo, + timeout: timeout, + forceResendingToken: forceResendingToken, + verificationCompleted: verificationCompleted, + verificationFailed: verificationFailed, + codeSent: codeSent, + codeAutoRetrievalTimeout: codeAutoRetrievalTimeout, + // ignore: invalid_use_of_visible_for_testing_member + autoRetrievedSmsCodeForTesting: autoRetrievedSmsCodeForTesting, + multiFactorSession: multiFactorSession, + ); + } + + /// Apple only. Users signed in with Apple provider can revoke their token using an authorization code. + /// Authorization code can be retrieved on the user credential i.e. userCredential.additionalUserInfo.authorizationCode + Future revokeTokenWithAuthorizationCode(String authorizationCode) { + return _delegate.revokeTokenWithAuthorizationCode(authorizationCode); + } + + /// Android only. Revokes the provided accessToken. Currently supports revoking Apple-issued accessToken only. + Future revokeAccessToken(String accessToken) { + return _delegate.revokeAccessToken(accessToken); + } + + /// Signs out the current user. + /// + /// If successful, it also updates + /// any [authStateChanges], [idTokenChanges] or [userChanges] stream + /// listeners. + Future signOut() async { + await _delegate.signOut(); + } + + /// Initializes the reCAPTCHA Enterprise client proactively to enhance reCAPTCHA signal collection and + /// to complete reCAPTCHA-protected flows in a single attempt. + Future initializeRecaptchaConfig() { + return _delegate.initializeRecaptchaConfig(); + } + + /// Validates a password against the password policy configured for the project or tenant. + /// + /// If no tenant ID is set on the Auth instance, then this method will use the password policy configured for the project. + /// Otherwise, this method will use the policy configured for the tenant. If a password policy has not been configured, + /// then the default policy configured for all projects will be used. + /// + /// If an auth flow fails because a submitted password does not meet the password policy requirements and this method has previously been called, + /// then this method will use the most recent policy available when called again. + /// + /// Returns a map with the following keys: + /// - **status**: A boolean indicating if the password is valid. + /// - **passwordPolicy**: The password policy used to validate the password. + /// - **meetsMinPasswordLength**: A boolean indicating if the password meets the minimum length requirement. + /// - **meetsMaxPasswordLength**: A boolean indicating if the password meets the maximum length requirement. + /// - **meetsLowercaseRequirement**: A boolean indicating if the password meets the lowercase requirement. + /// - **meetsUppercaseRequirement**: A boolean indicating if the password meets the uppercase requirement. + /// - **meetsDigitsRequirement**: A boolean indicating if the password meets the digits requirement. + /// - **meetsSymbolsRequirement**: A boolean indicating if the password meets the symbols requirement. + /// + /// A [FirebaseAuthException] maybe thrown with the following error code: + /// - **invalid-password**: + /// - Thrown if the password is invalid. + /// - **network-request-failed**: + /// - Thrown if there was a network request error, for example the user + /// doesn't have internet connection + /// - **INVALID_LOGIN_CREDENTIALS** or **invalid-credential**: + /// - Thrown if the password is invalid for the given email, or the account + /// corresponding to the email does not have a password set. + /// Depending on if you are using firebase emulator or not the code is + /// different + /// - **operation-not-allowed**: + /// - Thrown if email/password accounts are not enabled. Enable + /// email/password accounts in the Firebase Console, under the Auth tab. + Future validatePassword( + FirebaseAuth auth, + String? password, + ) async { + if (password == null || password.isEmpty) { + throw FirebaseAuthException( + code: 'invalid-password', + message: 'Password cannot be null or empty', + ); + } + PasswordPolicyApi passwordPolicyApi = + PasswordPolicyApi(auth.app.options.apiKey); + PasswordPolicy passwordPolicy = + await passwordPolicyApi.fetchPasswordPolicy(); + PasswordPolicyImpl passwordPolicyImpl = PasswordPolicyImpl(passwordPolicy); + return passwordPolicyImpl.isPasswordValid(password); + } + + @override + String toString() { + return 'FirebaseAuth(app: ${app.name})'; + } +} diff --git a/mih_ui/android/build/macos/SourcePackages/firebase_auth-6.5.4/lib/src/multi_factor.dart b/mih_ui/android/build/macos/SourcePackages/firebase_auth-6.5.4/lib/src/multi_factor.dart new file mode 100644 index 00000000..4610e284 --- /dev/null +++ b/mih_ui/android/build/macos/SourcePackages/firebase_auth-6.5.4/lib/src/multi_factor.dart @@ -0,0 +1,213 @@ +// Copyright 2022, the Chromium project authors. Please see the AUTHORS file +// for details. All rights reserved. Use of this source code is governed by a +// BSD-style license that can be found in the LICENSE file. + +part of '../firebase_auth.dart'; + +/// Defines multi-factor related properties and operations pertaining to a [User]. +/// This class acts as the main entry point for enrolling or un-enrolling +/// second factors for a user, and provides access to their currently enrolled factors. +class MultiFactor { + MultiFactorPlatform _delegate; + + MultiFactor._(this._delegate); + + /// Returns a session identifier for a second factor enrollment operation. + Future getSession() { + return _delegate.getSession(); + } + + /// Enrolls a second factor as identified by the [MultiFactorAssertion] parameter for the current user. + /// + /// [displayName] can be used to provide a display name for the second factor. + Future enroll( + MultiFactorAssertion assertion, { + String? displayName, + }) async { + if (assertion._delegate is TotpMultiFactorGeneratorPlatform) { + assert(displayName != null, 'displayName is mandatory for TOTP'); + } + return _delegate.enroll(assertion._delegate, displayName: displayName); + } + + /// Unenrolls a second factor from this user. + /// + /// [factorUid] is the unique identifier of the second factor to unenroll. + /// [multiFactorInfo] is the [MultiFactorInfo] of the second factor to unenroll. + /// Only one of [factorUid] or [multiFactorInfo] should be provided. + Future unenroll({String? factorUid, MultiFactorInfo? multiFactorInfo}) { + assert( + (factorUid != null && multiFactorInfo == null) || + (factorUid == null && multiFactorInfo != null), + 'Exactly one of `factorUid` or `multiFactorInfo` must be provided', + ); + return _delegate.unenroll( + factorUid: factorUid, + multiFactorInfo: multiFactorInfo, + ); + } + + /// Returns a list of the [MultiFactorInfo] already associated with this user. + Future> getEnrolledFactors() { + return _delegate.getEnrolledFactors(); + } +} + +/// Provider for generating a PhoneMultiFactorAssertion. +class PhoneMultiFactorGenerator { + /// Transforms a PhoneAuthCredential into a [MultiFactorAssertion] + /// which can be used to confirm ownership of a phone second factor. + static MultiFactorAssertion getAssertion( + PhoneAuthCredential credential, + ) { + final assertion = + PhoneMultiFactorGeneratorPlatform.instance.getAssertion(credential); + return MultiFactorAssertion._(assertion); + } +} + +/// Provider for generating a PhoneMultiFactorAssertion. +class TotpMultiFactorGenerator { + /// Transforms a PhoneAuthCredential into a [MultiFactorAssertion] + /// which can be used to confirm ownership of a phone second factor. + static Future generateSecret( + MultiFactorSession session, + ) async { + final secret = + await TotpMultiFactorGeneratorPlatform.instance.generateSecret(session); + return TotpSecret._( + secret.codeIntervalSeconds, + secret.codeLength, + secret.enrollmentCompletionDeadline, + secret.hashingAlgorithm, + secret.secretKey, + secret, + ); + } + + /// Get a [MultiFactorAssertion] + /// which can be used to confirm ownership of a TOTP second factor. + static Future getAssertionForEnrollment( + TotpSecret secret, + String oneTimePassword, + ) async { + final assertion = await TotpMultiFactorGeneratorPlatform.instance + .getAssertionForEnrollment( + secret._instance, + oneTimePassword, + ); + + return MultiFactorAssertion._(assertion); + } + + /// Get a [MultiFactorAssertion] + /// which can be used to confirm ownership of a TOTP second factor. + static Future getAssertionForSignIn( + String enrollmentId, + String oneTimePassword, + ) async { + final assertion = + await TotpMultiFactorGeneratorPlatform.instance.getAssertionForSignIn( + enrollmentId, + oneTimePassword, + ); + + return MultiFactorAssertion._(assertion); + } +} + +class TotpSecret { + final TotpSecretPlatform _instance; + + final int? codeIntervalSeconds; + final int? codeLength; + final DateTime? enrollmentCompletionDeadline; + final String? hashingAlgorithm; + final String secretKey; + + TotpSecret._( + this.codeIntervalSeconds, + this.codeLength, + this.enrollmentCompletionDeadline, + this.hashingAlgorithm, + this.secretKey, + this._instance, + ); + + /// Generate a TOTP secret for the authenticated user. + Future generateQrCodeUrl({ + String? accountName, + String? issuer, + }) { + return _instance.generateQrCodeUrl( + accountName: accountName, + issuer: issuer, + ); + } + + /// Opens the specified QR Code URL in a password manager like iCloud Keychain. + Future openInOtpApp( + String qrCodeUrl, + ) async { + await _instance.openInOtpApp( + qrCodeUrl, + ); + } +} + +/// Represents an assertion that the Firebase Authentication server +/// can use to authenticate a user as part of a multi-factor flow. +class MultiFactorAssertion { + final MultiFactorAssertionPlatform _delegate; + + MultiFactorAssertion._(this._delegate) { + MultiFactorAssertionPlatform.verify(_delegate); + } +} + +/// Utility class that contains methods to resolve second factor +/// requirements on users that have opted into two-factor authentication. +class MultiFactorResolver { + final FirebaseAuth _auth; + final MultiFactorResolverPlatform _delegate; + + MultiFactorResolver._(this._auth, this._delegate) { + MultiFactorResolverPlatform.verify(_delegate); + } + + /// List of [MultiFactorInfo] which represents the available + /// second factors that can be used to complete the sign-in for the current session. + List get hints => _delegate.hints; + + /// A MultiFactorSession, an opaque session identifier for the current sign-in flow. + MultiFactorSession get session => _delegate.session; + + /// Completes sign in with a second factor using an MultiFactorAssertion which + /// confirms that the user has successfully completed the second factor challenge. + Future resolveSignIn( + MultiFactorAssertion assertion, + ) async { + final credential = await _delegate.resolveSignIn(assertion._delegate); + return UserCredential._(_auth, credential); + } +} + +/// MultiFactor exception related to Firebase Authentication. Check the error code +/// and message for more details. +class FirebaseAuthMultiFactorException extends FirebaseAuthException { + final FirebaseAuth _auth; + final FirebaseAuthMultiFactorExceptionPlatform _delegate; + + FirebaseAuthMultiFactorException._(this._auth, this._delegate) + : super( + code: _delegate.code, + message: _delegate.message, + email: _delegate.email, + credential: _delegate.credential, + phoneNumber: _delegate.phoneNumber, + tenantId: _delegate.tenantId, + ); + + MultiFactorResolver get resolver => + MultiFactorResolver._(_auth, _delegate.resolver); +} diff --git a/mih_ui/android/build/macos/SourcePackages/firebase_auth-6.5.4/lib/src/recaptcha_verifier.dart b/mih_ui/android/build/macos/SourcePackages/firebase_auth-6.5.4/lib/src/recaptcha_verifier.dart new file mode 100644 index 00000000..8c86d794 --- /dev/null +++ b/mih_ui/android/build/macos/SourcePackages/firebase_auth-6.5.4/lib/src/recaptcha_verifier.dart @@ -0,0 +1,100 @@ +// ignore_for_file: require_trailing_commas +// Copyright 2020 The Chromium Authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +part of '../firebase_auth.dart'; + +/// An [reCAPTCHA](https://www.google.com/recaptcha/?authuser=0)-based +/// application verifier. +class RecaptchaVerifier { + static final RecaptchaVerifierFactoryPlatform _factory = + RecaptchaVerifierFactoryPlatform.instance; + + RecaptchaVerifier._(this._delegate); + + RecaptchaVerifierFactoryPlatform _delegate; + + /// Creates a new [RecaptchaVerifier] instance used to render a reCAPTCHA widget + /// when calling [signInWithPhoneNumber]. + /// + /// It is possible to configure the reCAPTCHA widget with the following arguments, + /// however if no arguments are provided, an "invisible" reCAPTCHA widget with + /// defaults will be created. + /// + /// [container] If a value is provided, the element must exist in the DOM when + /// [render] or [signInWithPhoneNumber] is called. The reCAPTCHA widget will + /// be rendered within the specified DOM element. + /// + /// If no value is provided, an "invisible" reCAPTCHA will be shown when [render] + /// is called. An invisible reCAPTCHA widget is shown a modal on-top of your + /// application. + /// + /// [size] When providing a custom [container], a size (normal or compact) can + /// be provided to change the size of the reCAPTCHA widget. This has no effect + /// when a [container] is not provided. Defaults to [RecaptchaVerifierSize.normal]. + /// + /// [theme] When providing a custom [container], a theme (light or dark) can + /// be provided to change the appearance of the reCAPTCHA widget. This has no + /// effect when a [container] is not provided. Defaults to [RecaptchaVerifierTheme.light]. + /// + /// [onSuccess] An optional callback which is called when the user successfully + /// completes the reCAPTCHA widget. + /// + /// [onError] An optional callback which is called when the reCAPTCHA widget errors + /// (such as a network issue). + /// + /// [onExpired] An optional callback which is called when the reCAPTCHA expires. + factory RecaptchaVerifier({ + required FirebaseAuthPlatform auth, + String? container, + RecaptchaVerifierSize size = RecaptchaVerifierSize.normal, + RecaptchaVerifierTheme theme = RecaptchaVerifierTheme.light, + RecaptchaVerifierOnSuccess? onSuccess, + RecaptchaVerifierOnError? onError, + RecaptchaVerifierOnExpired? onExpired, + }) { + return RecaptchaVerifier._( + _factory.delegateFor( + auth: auth, + container: container, + size: size, + theme: theme, + onSuccess: onSuccess, + onError: onError, + onExpired: onExpired, + ), + ); + } + + /// Returns the underlying factory delegate instance. + @protected + RecaptchaVerifierFactoryPlatform get delegate { + return _delegate; + } + + /// The application verifier type. For a reCAPTCHA verifier, this is + /// 'recaptcha'. + String get type { + return _delegate.type; + } + + /// Clears the reCAPTCHA widget from the page and destroys the current + /// instance. + void clear() { + return _delegate.clear(); + } + + /// Renders the reCAPTCHA widget on the page. + /// + /// Returns a [Future] that resolves with the reCAPTCHA widget ID. + Future render() async { + return _delegate.render(); + } + + /// Waits for the user to solve the reCAPTCHA and resolves with the reCAPTCHA + /// token. + Future verify() async { + return _delegate.verify(); + } +} diff --git a/mih_ui/android/build/macos/SourcePackages/firebase_auth-6.5.4/lib/src/user.dart b/mih_ui/android/build/macos/SourcePackages/firebase_auth-6.5.4/lib/src/user.dart new file mode 100644 index 00000000..9b7ccdb7 --- /dev/null +++ b/mih_ui/android/build/macos/SourcePackages/firebase_auth-6.5.4/lib/src/user.dart @@ -0,0 +1,685 @@ +// ignore_for_file: require_trailing_commas +// Copyright 2020 The Chromium Authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +part of '../firebase_auth.dart'; + +/// A user account. +class User { + UserPlatform _delegate; + + final FirebaseAuth _auth; + MultiFactor? _multiFactor; + + User._(this._auth, this._delegate) { + UserPlatform.verify(_delegate); + } + + /// The users display name. + /// + /// Will be `null` if signing in anonymously or via password authentication. + String? get displayName { + return _delegate.displayName; + } + + /// The users email address. + /// + /// Will be `null` if signing in anonymously. + String? get email { + return _delegate.email; + } + + /// Returns whether the users email address has been verified. + /// + /// To send a verification email, see [sendEmailVerification]. + /// + /// Once verified, call [reload] to ensure the latest user information is + /// retrieved from Firebase. + bool get emailVerified { + return _delegate.isEmailVerified; + } + + /// Returns whether the user is a anonymous. + bool get isAnonymous { + return _delegate.isAnonymous; + } + + /// Returns additional metadata about the user, such as their creation time. + UserMetadata get metadata { + return _delegate.metadata; + } + + /// Returns the users phone number. + /// + /// This property will be `null` if the user has not signed in or been has + /// their phone number linked. + String? get phoneNumber { + return _delegate.phoneNumber; + } + + /// Returns a photo URL for the user. + /// + /// This property will be populated if the user has signed in or been linked + /// with a 3rd party OAuth provider (such as Google). + String? get photoURL { + return _delegate.photoURL; + } + + /// Returns a list of user information for each linked provider. + List get providerData { + return _delegate.providerData; + } + + /// Returns a JWT refresh token for the user. + /// + /// This property will be an empty string for native platforms (android, iOS & macOS) as they do not + /// support refresh tokens. + String? get refreshToken { + return _delegate.refreshToken; + } + + /// The current user's tenant ID. + /// + /// This is a read-only property, which indicates the tenant ID used to sign + /// in the current user. This is `null` if the user is signed in from the + /// parent project. + String? get tenantId { + return _delegate.tenantId; + } + + /// The user's unique ID. + String get uid { + return _delegate.uid; + } + + /// Deletes and signs out the user. + /// + /// **Important**: this is a security-sensitive operation that requires the + /// user to have recently signed in. If this requirement isn't met, ask the + /// user to authenticate again and then call [User.reauthenticateWithCredential]. + /// + /// A [FirebaseAuthException] maybe thrown with the following error code: + /// - **requires-recent-login**: + /// - Thrown if the user's last sign-in time does not meet the security + /// threshold. Use [User.reauthenticateWithCredential] to resolve. This + /// does not apply if the user is anonymous. + Future delete() async { + return _delegate.delete(); + } + + /// Returns a JSON Web Token (JWT) used to identify the user to a Firebase + /// service. + /// + /// Returns the current token if it has not expired. Otherwise, this will + /// refresh the token and return a new one. + /// + /// If [forceRefresh] is `true`, the token returned will be refreshed regardless + /// of token expiration. + Future getIdToken([bool forceRefresh = false]) { + return _delegate.getIdToken(forceRefresh); + } + + /// Returns a [IdTokenResult] containing the users JSON Web Token (JWT) and + /// other metadata. + /// + /// Returns the current token if it has not expired. Otherwise, this will + /// refresh the token and return a new one. + /// + /// If [forceRefresh] is `true`, the token returned will be refreshed regardless + /// of token expiration. + Future getIdTokenResult([bool forceRefresh = false]) { + return _delegate.getIdTokenResult(forceRefresh); + } + + /// Links the user account with the given credentials. + /// + /// A [FirebaseAuthException] maybe thrown with the following error code: + /// - **provider-already-linked**: + /// - Thrown if the provider has already been linked to the user. This error + /// is thrown even if this is not the same provider's account that is + /// currently linked to the user. + /// - **invalid-credential**: + /// - Thrown if the provider's credential is not valid. This can happen if it + /// has already expired when calling link, or if it used invalid token(s). + /// See the Firebase documentation for your provider, and make sure you + /// pass in the correct parameters to the credential method. + /// - **credential-already-in-use**: + /// - Thrown if the account corresponding to the credential already exists + /// among your users, or is already linked to a Firebase User. For example, + /// this error could be thrown if you are upgrading an anonymous user to a + /// Google user by linking a Google credential to it and the Google + /// credential used is already associated with an existing Firebase Google + /// user. The fields `email`, `phoneNumber`, and `credential` + /// ([AuthCredential]) may be provided, depending on the type of + /// credential. You can recover from this error by signing in with + /// `credential` directly via [signInWithCredential]. Please note, you will + /// not recover from this error if you're using a [PhoneAuthCredential] to link + /// a provider to an account. Once an attempt to link an account has been made, + /// a new sms code is required to sign in the user. + /// - **email-already-in-use**: + /// - Thrown if the email corresponding to the credential already exists + /// among your users. When thrown while linking a credential to an existing + /// user, an `email` and `credential` ([AuthCredential]) fields are also + /// provided. You have to link the credential to the existing user with + /// that email if you wish to continue signing in with that credential. To + /// do so, sign in to `email` via one of + /// the providers returned and then [User.linkWithCredential] the original + /// credential to that newly signed in user. + /// - **operation-not-allowed**: + /// - Thrown if you have not enabled the provider in the Firebase Console. Go + /// to the Firebase Console for your project, in the Auth section and the + /// Sign in Method tab and configure the provider. + /// - **invalid-email**: + /// - Thrown if the email used in a [EmailAuthProvider.credential] is + /// invalid. + /// - **invalid-email**: + /// - Thrown if the password used in a [EmailAuthProvider.credential] is not + /// correct or when the user associated with the email does not have a + /// password. + /// - **invalid-verification-code**: + /// - Thrown if the credential is a [PhoneAuthProvider.credential] and the + /// verification code of the credential is not valid. + /// - **invalid-verification-id**: + /// - Thrown if the credential is a [PhoneAuthProvider.credential] and the + /// verification ID of the credential is not valid. + Future linkWithCredential(AuthCredential credential) async { + try { + return UserCredential._( + _auth, + await _delegate.linkWithCredential(credential), + ); + } on FirebaseAuthMultiFactorExceptionPlatform catch (e) { + throw FirebaseAuthMultiFactorException._(_auth, e); + } catch (e) { + rethrow; + } + } + + /// Links with an AuthProvider using native authentication flow. + /// On web, you should use [linkWithPopup] or [linkWithRedirect] instead. + /// + /// A [FirebaseAuthException] maybe thrown with the following error code: + /// - **provider-already-linked**: + /// - Thrown if the provider has already been linked to the user. This error + /// is thrown even if this is not the same provider's account that is + /// currently linked to the user. + /// - **invalid-credential**: + /// - Thrown if the provider's credential is not valid. This can happen if it + /// has already expired when calling link, or if it used invalid token(s). + /// See the Firebase documentation for your provider, and make sure you + /// pass in the correct parameters to the credential method. + /// - **credential-already-in-use**: + /// - Thrown if the account corresponding to the credential already exists + /// among your users, or is already linked to a Firebase User. For example, + /// this error could be thrown if you are upgrading an anonymous user to a + /// Google user by linking a Google credential to it and the Google + /// credential used is already associated with an existing Firebase Google + /// user. The fields `email`, `phoneNumber`, and `credential` + /// ([AuthCredential]) may be provided, depending on the type of + /// credential. You can recover from this error by signing in with + /// `credential` directly via [signInWithCredential]. + /// - **email-already-in-use**: + /// - Thrown if the email corresponding to the credential already exists + /// among your users. When thrown while linking a credential to an existing + /// user, an `email` and `credential` ([AuthCredential]) fields are also + /// provided. You have to link the credential to the existing user with + /// that email if you wish to continue signing in with that credential. + /// To do so, sign in to `email` via one + /// of the providers and then [User.linkWithCredential] the + /// original credential to that newly signed in user. + /// - **operation-not-allowed**: + /// - Thrown if you have not enabled the provider in the Firebase Console. Go + /// to the Firebase Console for your project, in the Auth section and the + /// Sign in Method tab and configure the provider. + Future linkWithProvider( + AuthProvider provider, + ) async { + try { + return UserCredential._( + _auth, + await _delegate.linkWithProvider(provider), + ); + } on FirebaseAuthMultiFactorExceptionPlatform catch (e) { + throw FirebaseAuthMultiFactorException._(_auth, e); + } catch (e) { + rethrow; + } + } + + /// Re-authenticates a user using a Provider. + /// + /// Use before operations such as [User.updatePassword] that require tokens + /// from recent sign-in attempts. + /// + /// A [FirebaseAuthException] maybe thrown with the following error code: + /// - **user-mismatch**: + /// - Thrown if the credential given does not correspond to the user. + /// - **user-not-found**: + /// - Thrown if the credential given does not correspond to any existing + /// user. + /// - **invalid-credential**: + /// - Thrown if the provider's credential is not valid. This can happen if it + /// has already expired when calling link, or if it used invalid token(s). + /// See the Firebase documentation for your provider, and make sure you + /// pass in the correct parameters to the credential method. + /// - **invalid-email**: + /// - Thrown if the email used in a [EmailAuthProvider.credential] is + /// invalid. + /// - **wrong-password**: + /// - Thrown if the password used in a [EmailAuthProvider.credential] is not + /// correct or when the user associated with the email does not have a + /// password. + /// - **invalid-verification-code**: + /// - Thrown if the credential is a [PhoneAuthProvider.credential] and the + /// verification code of the credential is not valid. + /// - **invalid-verification-id**: + /// - Thrown if the credential is a [PhoneAuthProvider.credential] and the + /// verification ID of the credential is not valid. + Future reauthenticateWithProvider( + AuthProvider provider, + ) async { + try { + return UserCredential._( + _auth, + await _delegate.reauthenticateWithProvider(provider), + ); + } on FirebaseAuthMultiFactorExceptionPlatform catch (e) { + throw FirebaseAuthMultiFactorException._(_auth, e); + } catch (e) { + rethrow; + } + } + + /// Re-authenticates a user using a popup on Web. + /// + /// Use before operations such as [User.updatePassword] that require tokens + /// from recent sign-in attempts. + /// + /// A [FirebaseAuthException] maybe thrown with the following error code: + /// - **user-mismatch**: + /// - Thrown if the credential given does not correspond to the user. + /// - **user-not-found**: + /// - Thrown if the credential given does not correspond to any existing + /// user. + /// - **invalid-credential**: + /// - Thrown if the provider's credential is not valid. This can happen if it + /// has already expired when calling link, or if it used invalid token(s). + /// See the Firebase documentation for your provider, and make sure you + /// pass in the correct parameters to the credential method. + /// - **invalid-email**: + /// - Thrown if the email used in a [EmailAuthProvider.credential] is + /// invalid. + /// - **wrong-password**: + /// - Thrown if the password used in a [EmailAuthProvider.credential] is not + /// correct or when the user associated with the email does not have a + /// password. + /// - **invalid-verification-code**: + /// - Thrown if the credential is a [PhoneAuthProvider.credential] and the + /// verification code of the credential is not valid. + /// - **invalid-verification-id**: + /// - Thrown if the credential is a [PhoneAuthProvider.credential] and the + /// verification ID of the credential is not valid. + Future reauthenticateWithPopup( + AuthProvider provider, + ) async { + return UserCredential._( + _auth, + await _delegate.reauthenticateWithPopup(provider), + ); + } + + /// Re-authenticates a user using a redirection on Web. + /// + /// Use before operations such as [User.updatePassword] that require tokens + /// from recent sign-in attempts. + /// + /// A [FirebaseAuthException] maybe thrown with the following error code: + /// - **user-mismatch**: + /// - Thrown if the credential given does not correspond to the user. + /// - **user-not-found**: + /// - Thrown if the credential given does not correspond to any existing + /// user. + /// - **invalid-credential**: + /// - Thrown if the provider's credential is not valid. This can happen if it + /// has already expired when calling link, or if it used invalid token(s). + /// See the Firebase documentation for your provider, and make sure you + /// pass in the correct parameters to the credential method. + /// - **invalid-email**: + /// - Thrown if the email used in a [EmailAuthProvider.credential] is + /// invalid. + /// - **wrong-password**: + /// - Thrown if the password used in a [EmailAuthProvider.credential] is not + /// correct or when the user associated with the email does not have a + /// password. + /// - **invalid-verification-code**: + /// - Thrown if the credential is a [PhoneAuthProvider.credential] and the + /// verification code of the credential is not valid. + /// - **invalid-verification-id**: + /// - Thrown if the credential is a [PhoneAuthProvider.credential] and the + /// verification ID of the credential is not valid. + Future reauthenticateWithRedirect( + AuthProvider provider, + ) async { + await _delegate.reauthenticateWithRedirect(provider); + } + + /// Links the user account with the given provider. + /// + /// A [FirebaseAuthException] maybe thrown with the following error code: + /// - **provider-already-linked**: + /// - Thrown if the provider has already been linked to the user. This error + /// is thrown even if this is not the same provider's account that is + /// currently linked to the user. + /// - **invalid-credential**: + /// - Thrown if the provider's credential is not valid. This can happen if it + /// has already expired when calling link, or if it used invalid token(s). + /// See the Firebase documentation for your provider, and make sure you + /// pass in the correct parameters to the credential method. + /// - **credential-already-in-use**: + /// - Thrown if the account corresponding to the credential already exists + /// among your users, or is already linked to a Firebase User. For example, + /// this error could be thrown if you are upgrading an anonymous user to a + /// Google user by linking a Google credential to it and the Google + /// credential used is already associated with an existing Firebase Google + /// user. The fields `email`, `phoneNumber`, and `credential` + /// ([AuthCredential]) may be provided, depending on the type of + /// credential. You can recover from this error by signing in with + /// `credential` directly via [signInWithCredential]. + /// - **email-already-in-use**: + /// - Thrown if the email corresponding to the credential already exists + /// among your users. When thrown while linking a credential to an existing + /// user, an `email` and `credential` ([AuthCredential]) fields are also + /// provided. You have to link the credential to the existing user with + /// that email if you wish to continue signing in with that credential. + /// To do so, sign in to `email` via one + /// of the providers and then [User.linkWithCredential] the + /// original credential to that newly signed in user. + /// - **operation-not-allowed**: + /// - Thrown if you have not enabled the provider in the Firebase Console. Go + /// to the Firebase Console for your project, in the Auth section and the + /// Sign in Method tab and configure the provider. + Future linkWithPopup(AuthProvider provider) async { + try { + return UserCredential._( + _auth, + await _delegate.linkWithPopup(provider), + ); + } on FirebaseAuthMultiFactorExceptionPlatform catch (e) { + throw FirebaseAuthMultiFactorException._(_auth, e); + } catch (e) { + rethrow; + } + } + + /// Links the user account with the given provider. + /// + /// A [FirebaseAuthException] maybe thrown with the following error code: + /// - **provider-already-linked**: + /// - Thrown if the provider has already been linked to the user. This error + /// is thrown even if this is not the same provider's account that is + /// currently linked to the user. + /// - **invalid-credential**: + /// - Thrown if the provider's credential is not valid. This can happen if it + /// has already expired when calling link, or if it used invalid token(s). + /// See the Firebase documentation for your provider, and make sure you + /// pass in the correct parameters to the credential method. + /// - **credential-already-in-use**: + /// - Thrown if the account corresponding to the credential already exists + /// among your users, or is already linked to a Firebase User. For example, + /// this error could be thrown if you are upgrading an anonymous user to a + /// Google user by linking a Google credential to it and the Google + /// credential used is already associated with an existing Firebase Google + /// user. The fields `email`, `phoneNumber`, and `credential` + /// ([AuthCredential]) may be provided, depending on the type of + /// credential. You can recover from this error by signing in with + /// `credential` directly via [signInWithCredential]. + /// - **email-already-in-use**: + /// - Thrown if the email corresponding to the credential already exists + /// among your users. When thrown while linking a credential to an existing + /// user, an `email` and `credential` ([AuthCredential]) fields are also + /// provided. You have to link the credential to the existing user with + /// that email if you wish to continue signing in with that credential. + /// To do so, sign in to `email` via one + /// of the providers and then [User.linkWithCredential] the + /// original credential to that newly signed in user. + /// - **operation-not-allowed**: + /// - Thrown if you have not enabled the provider in the Firebase Console. Go + /// to the Firebase Console for your project, in the Auth section and the + /// Sign in Method tab and configure the provider. + Future linkWithRedirect(AuthProvider provider) async { + try { + await _delegate.linkWithRedirect(provider); + } on FirebaseAuthMultiFactorExceptionPlatform catch (e) { + throw FirebaseAuthMultiFactorException._(_auth, e); + } catch (e) { + rethrow; + } + } + + /// Links the user account with the given phone number. + /// + /// This method is only supported on web platforms. Use [verifyPhoneNumber] and + /// then [linkWithCredential] on these platforms. + /// + /// A [FirebaseAuthException] maybe thrown with the following error code: + /// - **provider-already-linked**: + /// - Thrown if the provider has already been linked to the user. This error + /// is thrown even if this is not the same provider's account that is + /// currently linked to the user. + /// - **captcha-check-failed**: + /// - Thrown if the reCAPTCHA response token was invalid, expired, or if this + /// method was called from a non-whitelisted domain. + /// - **invalid-phone-number**: + /// - Thrown if the phone number has an invalid format. + /// - **quota-exceeded**: + /// - Thrown if the SMS quota for the Firebase project has been exceeded. + /// - **user-disabled**: + /// - Thrown if the user corresponding to the given phone number has been disabled. + /// - **credential-already-in-use**: + /// - Thrown if the account corresponding to the phone number already exists + /// among your users, or is already linked to a Firebase User. + /// - **operation-not-allowed**: + /// - Thrown if you have not enabled the phone authentication provider in the + /// Firebase Console. Go to the Firebase Console for your project, in the Auth + /// section and the Sign in Method tab and configure the provider. + Future linkWithPhoneNumber( + String phoneNumber, [ + RecaptchaVerifier? verifier, + ]) async { + assert(phoneNumber.isNotEmpty); + // If we add a recaptcha to the page by creating a new instance, we must + // also clear that instance before proceeding. + bool mustClear = verifier == null; + verifier ??= RecaptchaVerifier(auth: _delegate.auth); + try { + final result = + await _delegate.linkWithPhoneNumber(phoneNumber, verifier.delegate); + if (mustClear) { + verifier.clear(); + } + return ConfirmationResult._(_auth, result); + } on FirebaseAuthMultiFactorExceptionPlatform catch (e) { + throw FirebaseAuthMultiFactorException._(_auth, e); + } catch (e) { + rethrow; + } + } + + /// Re-authenticates a user using a fresh credential. + /// + /// Use before operations such as [User.updatePassword] that require tokens + /// from recent sign-in attempts. + /// + /// A [FirebaseAuthException] maybe thrown with the following error code: + /// - **user-mismatch**: + /// - Thrown if the credential given does not correspond to the user. + /// - **user-not-found**: + /// - Thrown if the credential given does not correspond to any existing + /// user. + /// - **invalid-credential**: + /// - Thrown if the provider's credential is not valid. This can happen if it + /// has already expired when calling link, or if it used invalid token(s). + /// See the Firebase documentation for your provider, and make sure you + /// pass in the correct parameters to the credential method. + /// - **invalid-email**: + /// - Thrown if the email used in a [EmailAuthProvider.credential] is + /// invalid. + /// - **wrong-password**: + /// - Thrown if the password used in a [EmailAuthProvider.credential] is not + /// correct or when the user associated with the email does not have a + /// password. + /// - **invalid-verification-code**: + /// - Thrown if the credential is a [PhoneAuthProvider.credential] and the + /// verification code of the credential is not valid. + /// - **invalid-verification-id**: + /// - Thrown if the credential is a [PhoneAuthProvider.credential] and the + /// verification ID of the credential is not valid. + Future reauthenticateWithCredential( + AuthCredential credential, + ) async { + try { + return UserCredential._( + _auth, + await _delegate.reauthenticateWithCredential(credential), + ); + } on FirebaseAuthMultiFactorExceptionPlatform catch (e) { + throw FirebaseAuthMultiFactorException._(_auth, e); + } catch (e) { + rethrow; + } + } + + /// Refreshes the current user, if signed in. + Future reload() async { + await _delegate.reload(); + } + + /// Sends a verification email to a user. + /// + /// The verification process is completed by calling [applyActionCode]. + Future sendEmailVerification([ + ActionCodeSettings? actionCodeSettings, + ]) async { + await _delegate.sendEmailVerification(actionCodeSettings); + } + + /// Unlinks a provider from a user account. + /// + /// A [FirebaseAuthException] maybe thrown with the following error code: + /// - **no-such-provider**: + /// - Thrown if the user does not have this provider linked or when the + /// provider ID given does not exist. + Future unlink(String providerId) async { + return User._(_auth, await _delegate.unlink(providerId)); + } + + /// Updates the user's email address. + /// + /// An email will be sent to the original email address (if it was set) that + /// allows to revoke the email address change, in order to protect them from + /// account hijacking. + /// + /// **Important**: this is a security sensitive operation that requires the + /// user to have recently signed in. If this requirement isn't met, ask the + /// user to authenticate again and then call [User.reauthenticateWithCredential]. + /// + + /// Updates the user's password. + /// + /// **Important**: this is a security sensitive operation that requires the + /// user to have recently signed in. If this requirement isn't met, ask the + /// user to authenticate again and then call [User.reauthenticateWithCredential]. + /// + /// A [FirebaseAuthException] maybe thrown with the following error code: + /// - **weak-password**: + /// - Thrown if the password is not strong enough. + /// - **requires-recent-login**: + /// - Thrown if the user's last sign-in time does not meet the security + /// threshold. Use [User.reauthenticateWithCredential] to resolve. This + /// does not apply if the user is anonymous. + Future updatePassword(String newPassword) async { + await _delegate.updatePassword(newPassword); + } + + /// Updates the user's phone number. + /// + /// A credential can be created by verifying a phone number via [verifyPhoneNumber]. + /// + /// A [FirebaseAuthException] maybe thrown with the following error code: + /// - **invalid-verification-code**: + /// - Thrown if the verification code of the credential is not valid. + /// - **invalid-verification-id**: + /// - Thrown if the verification ID of the credential is not valid. + Future updatePhoneNumber(PhoneAuthCredential phoneCredential) async { + await _delegate.updatePhoneNumber(phoneCredential); + } + + /// Update the user name. + Future updateDisplayName(String? displayName) { + return _delegate + .updateProfile({'displayName': displayName}); + } + + /// Update the user's profile picture. + Future updatePhotoURL(String? photoURL) { + return _delegate.updateProfile({'photoURL': photoURL}); + } + + /// Updates a user's profile data. + Future updateProfile({String? displayName, String? photoURL}) { + return _delegate.updateProfile({ + 'displayName': displayName, + 'photoURL': photoURL, + }); + } + + /// Sends a verification email to a new email address. The user's email will + /// be updated to the new one after being verified. + /// + /// If you have a custom email action handler, you can complete the + /// verification process by calling [applyActionCode]. + /// + /// A [FirebaseAuthException] maybe thrown with the following error code: + /// - **missing-android-pkg-name**: + /// - An Android package name must be provided if the Android app is required to be installed. + /// - **missing-continue-uri**: + /// - A continue URL must be provided in the request. + /// - **missing-ios-bundle-id**: + /// - An iOS bundle ID must be provided if an App Store ID is provided. + /// - **invalid-continue-uri**: + /// - The continue URL provided in the request is invalid. + /// - **unauthorized-continue-uri**: + /// - The domain of the continue URL is not whitelisted. Whitelist the domain in the Firebase console. + Future verifyBeforeUpdateEmail( + String newEmail, [ + ActionCodeSettings? actionCodeSettings, + ]) async { + await _delegate.verifyBeforeUpdateEmail(newEmail, actionCodeSettings); + } + + MultiFactor get multiFactor { + if (!kIsWeb && (defaultTargetPlatform == TargetPlatform.windows)) { + throw UnimplementedError( + 'MultiFactor Authentication is only supported on web, Android, iOS and macOS.', + ); + } + return _multiFactor ??= MultiFactor._(_delegate.multiFactor); + } + + @override + String toString() { + return '$User(' + 'displayName: $displayName, ' + 'email: $email, ' + 'isEmailVerified: $emailVerified, ' + 'isAnonymous: $isAnonymous, ' + 'metadata: $metadata, ' + 'phoneNumber: $phoneNumber, ' + 'photoURL: $photoURL, ' + 'providerData, $providerData, ' + 'refreshToken: $refreshToken, ' + 'tenantId: $tenantId, ' + 'uid: $uid)'; + } +} diff --git a/mih_ui/android/build/macos/SourcePackages/firebase_auth-6.5.4/lib/src/user_credential.dart b/mih_ui/android/build/macos/SourcePackages/firebase_auth-6.5.4/lib/src/user_credential.dart new file mode 100644 index 00000000..3afbbc7d --- /dev/null +++ b/mih_ui/android/build/macos/SourcePackages/firebase_auth-6.5.4/lib/src/user_credential.dart @@ -0,0 +1,39 @@ +// ignore_for_file: require_trailing_commas +// Copyright 2020 The Chromium Authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +part of '../firebase_auth.dart'; + +/// A UserCredential is returned from authentication requests such as +/// [createUserWithEmailAndPassword]. +class UserCredential { + UserCredential._(this._auth, this._delegate) { + UserCredentialPlatform.verify(_delegate); + } + + final FirebaseAuth _auth; + final UserCredentialPlatform _delegate; + + /// Returns additional information about the user, such as whether they are a + /// newly created one. + AdditionalUserInfo? get additionalUserInfo => _delegate.additionalUserInfo; + + /// The users [AuthCredential]. + AuthCredential? get credential => _delegate.credential; + + /// Returns a [User] containing additional information and user specific + /// methods. + User? get user { + // TODO(rousselGit): cache the `user` instance or override == so that ".user == .user" + return _delegate.user == null ? null : User._(_auth, _delegate.user!); + } + + @override + String toString() { + return 'UserCredential(' + 'additionalUserInfo: $additionalUserInfo, ' + 'credential: $credential, ' + 'user: $user)'; + } +} diff --git a/mih_ui/android/build/macos/SourcePackages/firebase_auth-6.5.4/macos/firebase_auth.podspec b/mih_ui/android/build/macos/SourcePackages/firebase_auth-6.5.4/macos/firebase_auth.podspec new file mode 100755 index 00000000..4e5be544 --- /dev/null +++ b/mih_ui/android/build/macos/SourcePackages/firebase_auth-6.5.4/macos/firebase_auth.podspec @@ -0,0 +1,65 @@ +require 'yaml' + +pubspec = YAML.load_file(File.join('..', 'pubspec.yaml')) +library_version = pubspec['version'].gsub('+', '-') + +if defined?($FirebaseSDKVersion) + Pod::UI.puts "#{pubspec['name']}: Using user specified Firebase SDK version '#{$FirebaseSDKVersion}'" + firebase_sdk_version = $FirebaseSDKVersion +else + firebase_core_script = File.join(File.expand_path('..', File.expand_path('..', File.dirname(__FILE__))), 'firebase_core/ios/firebase_sdk_version.rb') + if File.exist?(firebase_core_script) + require firebase_core_script + firebase_sdk_version = firebase_sdk_version! + Pod::UI.puts "#{pubspec['name']}: Using Firebase SDK version '#{firebase_sdk_version}' defined in 'firebase_core'" + end +end + +begin + required_macos_version = "10.12" + current_target_definition = Pod::Config.instance.podfile.send(:current_target_definition) + user_osx_target = current_target_definition.to_hash["platform"]["osx"] + if (Gem::Version.new(user_osx_target) < Gem::Version.new(required_macos_version)) + error_message = "The FlutterFire plugin #{pubspec['name']} for macOS requires a macOS deployment target of #{required_macos_version} or later." + Pod::UI.warn error_message, [ + "Update the `platform :osx, '#{user_osx_target}'` line in your macOS/Podfile to version `#{required_macos_version}` and ensure you commit this file.", + "Open your `macos/Runner.xcodeproj` Xcode project and under the 'Runner' target General tab set your Deployment Target to #{required_macos_version} or later." + ] + raise Pod::Informative, error_message + end +rescue Pod::Informative + raise +rescue + # Do nothing for all other errors and let `pod install` deal with any issues. +end + +Pod::Spec.new do |s| + s.name = pubspec['name'] + s.version = library_version + s.summary = pubspec['description'] + s.description = pubspec['description'] + s.homepage = pubspec['homepage'] + s.license = { :file => '../LICENSE' } + s.authors = 'The Chromium Authors' + s.source = { :path => '.' } + + s.source_files = 'firebase_auth/Sources/firebase_auth/**/*.{h,m}' + s.public_header_files = 'firebase_auth/Sources/firebase_auth/include/Public/**/*.h' + s.private_header_files = 'firebase_auth/Sources/firebase_auth/include/Private/**/*.h' + + s.platform = :osx, '10.13' + + # Flutter dependencies + s.dependency 'FlutterMacOS' + + # Firebase dependencies + s.dependency 'firebase_core' + s.dependency 'Firebase/CoreOnly', "~> #{firebase_sdk_version}" + s.dependency 'Firebase/Auth', "~> #{firebase_sdk_version}" + + s.static_framework = true + s.pod_target_xcconfig = { + 'GCC_PREPROCESSOR_DEFINITIONS' => "LIBRARY_VERSION=\\\"#{library_version}\\\" LIBRARY_NAME=\\\"flutter-fire-auth\\\"", + 'DEFINES_MODULE' => 'YES' + } +end diff --git a/mih_ui/android/build/macos/SourcePackages/firebase_auth-6.5.4/macos/firebase_auth/Package.swift b/mih_ui/android/build/macos/SourcePackages/firebase_auth-6.5.4/macos/firebase_auth/Package.swift new file mode 100644 index 00000000..7360233f --- /dev/null +++ b/mih_ui/android/build/macos/SourcePackages/firebase_auth-6.5.4/macos/firebase_auth/Package.swift @@ -0,0 +1,43 @@ +// swift-tools-version: 5.9 +// The swift-tools-version declares the minimum version of Swift required to build this package. + +// Copyright 2024, the Chromium project authors. Please see the AUTHORS file +// for details. All rights reserved. Use of this source code is governed by a +// BSD-style license that can be found in the LICENSE file. + +import PackageDescription + +let libraryVersion = "6.5.4" +let firebaseSdkVersion: Version = "12.15.0" + +let package = Package( + name: "firebase_auth", + platforms: [ + .macOS("10.15") + ], + products: [ + .library(name: "firebase-auth", targets: ["firebase_auth"]) + ], + dependencies: [ + .package(url: "https://github.com/firebase/firebase-ios-sdk", exact: firebaseSdkVersion), + .package(name: "firebase_core", path: "../firebase_core-4.11.0"), + ], + targets: [ + .target( + name: "firebase_auth", + dependencies: [ + .product(name: "FirebaseAuth", package: "firebase-ios-sdk"), + .product(name: "firebase-core", package: "firebase_core"), + ], + resources: [ + .process("Resources") + ], + cSettings: [ + .headerSearchPath("include/Private"), + .headerSearchPath("include/Public"), + .define("LIBRARY_VERSION", to: "\"\(libraryVersion)\""), + .define("LIBRARY_NAME", to: "\"flutter-fire-auth\""), + ] + ) + ] +) diff --git a/mih_ui/android/build/macos/SourcePackages/firebase_auth-6.5.4/macos/firebase_auth/Sources/firebase_auth/FLTAuthStateChannelStreamHandler.m b/mih_ui/android/build/macos/SourcePackages/firebase_auth-6.5.4/macos/firebase_auth/Sources/firebase_auth/FLTAuthStateChannelStreamHandler.m new file mode 100644 index 00000000..5ef9adaf --- /dev/null +++ b/mih_ui/android/build/macos/SourcePackages/firebase_auth-6.5.4/macos/firebase_auth/Sources/firebase_auth/FLTAuthStateChannelStreamHandler.m @@ -0,0 +1,56 @@ +// Copyright 2021 The Chromium Authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. +@import FirebaseAuth; +#import "include/Private/FLTAuthStateChannelStreamHandler.h" +#import +#import "include/Private/PigeonParser.h" +#import "include/Public/FLTFirebaseAuthPlugin.h" + +@implementation FLTAuthStateChannelStreamHandler { + FIRAuth *_auth; + FIRAuthStateDidChangeListenerHandle _listener; +} + +- (instancetype)initWithAuth:(FIRAuth *)auth { + self = [super init]; + if (self) { + _auth = auth; + } + return self; +} + +- (FlutterError *)onListenWithArguments:(id)arguments eventSink:(FlutterEventSink)events { + bool __block initialAuthState = YES; + + _listener = [_auth addAuthStateDidChangeListener:^(FIRAuth *_Nonnull auth, + FIRUser *_Nullable user) { + if (initialAuthState) { + initialAuthState = NO; + return; + } + + if (user) { + events(@{ + @"user" : [PigeonParser getManualList:[PigeonParser getPigeonDetails:[auth currentUser]]] + }); + } else { + events(@{ + @"user" : [NSNull null], + }); + } + }]; + + return nil; +} + +- (FlutterError *)onCancelWithArguments:(id)arguments { + if (_listener) { + [_auth removeAuthStateDidChangeListener:_listener]; + } + _listener = nil; + + return nil; +} + +@end diff --git a/mih_ui/android/build/macos/SourcePackages/firebase_auth-6.5.4/macos/firebase_auth/Sources/firebase_auth/FLTFirebaseAuthPlugin.m b/mih_ui/android/build/macos/SourcePackages/firebase_auth-6.5.4/macos/firebase_auth/Sources/firebase_auth/FLTFirebaseAuthPlugin.m new file mode 100644 index 00000000..606dda68 --- /dev/null +++ b/mih_ui/android/build/macos/SourcePackages/firebase_auth-6.5.4/macos/firebase_auth/Sources/firebase_auth/FLTFirebaseAuthPlugin.m @@ -0,0 +1,2376 @@ +// Copyright 2020 The Chromium Authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +@import FirebaseAuth; +#import +#import +#if __has_include() +#import +#else +#import +#endif + +#import "include/Private/FLTAuthStateChannelStreamHandler.h" +#import "include/Private/FLTIdTokenChannelStreamHandler.h" +#import "include/Private/FLTPhoneNumberVerificationStreamHandler.h" +#import "include/Private/PigeonParser.h" + +#import "include/Public/CustomPigeonHeader.h" +#import "include/Public/FLTFirebaseAuthPlugin.h" +@import CommonCrypto; +#import + +#if __has_include() +#import +#else +#import +#endif + +NSString *const kFLTFirebaseAuthChannelName = @"plugins.flutter.io/firebase_auth"; + +// Argument Keys +NSString *const kAppName = @"appName"; + +// Provider type keys. +NSString *const kSignInMethodPassword = @"password"; +NSString *const kSignInMethodEmailLink = @"emailLink"; +NSString *const kSignInMethodFacebook = @"facebook.com"; +NSString *const kSignInMethodGoogle = @"google.com"; +NSString *const kSignInMethodGameCenter = @"gc.apple.com"; +NSString *const kSignInMethodTwitter = @"twitter.com"; +NSString *const kSignInMethodGithub = @"github.com"; +NSString *const kSignInMethodApple = @"apple.com"; +NSString *const kSignInMethodPhone = @"phone"; +NSString *const kSignInMethodOAuth = @"oauth"; + +// Credential argument keys. +NSString *const kArgumentCredential = @"credential"; +NSString *const kArgumentProviderId = @"providerId"; +NSString *const kArgumentProviderScope = @"scopes"; +NSString *const kArgumentProviderCustomParameters = @"customParameters"; +NSString *const kArgumentSignInMethod = @"signInMethod"; +NSString *const kArgumentSecret = @"secret"; +NSString *const kArgumentIdToken = @"idToken"; +NSString *const kArgumentAccessToken = @"accessToken"; +NSString *const kArgumentRawNonce = @"rawNonce"; +NSString *const kArgumentEmail = @"email"; +NSString *const kArgumentCode = @"code"; +NSString *const kArgumentNewEmail = @"newEmail"; +NSString *const kArgumentEmailLink = kSignInMethodEmailLink; +NSString *const kArgumentToken = @"token"; +NSString *const kArgumentVerificationId = @"verificationId"; +NSString *const kArgumentSmsCode = @"smsCode"; +NSString *const kArgumentActionCodeSettings = @"actionCodeSettings"; +NSString *const kArgumentFamilyName = @"familyName"; +NSString *const kArgumentGivenName = @"givenName"; +NSString *const kArgumentMiddleName = @"middleName"; +NSString *const kArgumentNickname = @"nickname"; +NSString *const kArgumentNamePrefix = @"namePrefix"; +NSString *const kArgumentNameSuffix = @"nameSuffix"; + +// MultiFactor +NSString *const kArgumentMultiFactorHints = @"multiFactorHints"; +NSString *const kArgumentMultiFactorSessionId = @"multiFactorSessionId"; +NSString *const kArgumentMultiFactorResolverId = @"multiFactorResolverId"; +NSString *const kArgumentMultiFactorInfo = @"multiFactorInfo"; + +// Manual error codes & messages. +NSString *const kErrCodeNoCurrentUser = @"no-current-user"; +NSString *const kErrMsgNoCurrentUser = @"No user currently signed in."; +NSString *const kErrCodeInvalidCredential = @"invalid-credential"; +NSString *const kErrMsgInvalidCredential = + @"The supplied auth credential is malformed, has expired or is not " + @"currently supported."; + +// Used for caching credentials between Method Channel method calls. +static NSMutableDictionary *credentialsMap; + +@interface FLTFirebaseAuthPlugin () +@property(nonatomic, retain) NSObject *messenger; +@property(strong, nonatomic) FIROAuthProvider *authProvider; +// Used to keep the user who wants to link with Apple Sign In +@property(strong, nonatomic) FIRUser *linkWithAppleUser; +@property(strong, nonatomic) FIRAuth *signInWithAppleAuth; +@property BOOL isReauthenticatingWithApple; +@property(strong, nonatomic) NSString *currentNonce; +@property(strong, nonatomic) void (^appleCompletion) + (InternalUserCredential *_Nullable, FlutterError *_Nullable); +@property(strong, nonatomic) AuthPigeonFirebaseApp *appleArguments; +/// YES while an `ASAuthorizationController` Sign in with Apple flow is active. +@property(nonatomic, assign) BOOL appleSignInRequestInFlight; + +@end + +@implementation FLTFirebaseAuthPlugin { + // Map an id to a MultiFactorSession object. + NSMutableDictionary *_multiFactorSessionMap; + + // Map an id to a MultiFactorResolver object. + NSMutableDictionary *_multiFactorResolverMap; + + // Map an id to a MultiFactorResolver object. + NSMutableDictionary *_multiFactorAssertionMap; + + // Map an id to a MultiFactorResolver object. + NSMutableDictionary *_multiFactorTotpSecretMap; + + // Emulator host/port per app, used to build REST URLs for workarounds. + NSMutableDictionary *_emulatorConfigs; + + NSObject *_binaryMessenger; + NSMutableDictionary *_eventChannels; + NSMutableDictionary *> *_streamHandlers; + NSData *_apnsToken; +} + +#pragma mark - FlutterPlugin + +- (instancetype)init:(NSObject *)messenger { + self = [super init]; + if (self) { + [[FLTFirebasePluginRegistry sharedInstance] registerFirebasePlugin:self]; + credentialsMap = [NSMutableDictionary dictionary]; + _binaryMessenger = messenger; + _eventChannels = [NSMutableDictionary dictionary]; + _streamHandlers = [NSMutableDictionary dictionary]; + + _multiFactorSessionMap = [NSMutableDictionary dictionary]; + _multiFactorResolverMap = [NSMutableDictionary dictionary]; + _multiFactorAssertionMap = [NSMutableDictionary dictionary]; + _multiFactorTotpSecretMap = [NSMutableDictionary dictionary]; + _emulatorConfigs = [NSMutableDictionary dictionary]; + } + return self; +} + ++ (void)registerWithRegistrar:(NSObject *)registrar { + FlutterMethodChannel *channel = + [FlutterMethodChannel methodChannelWithName:kFLTFirebaseAuthChannelName + binaryMessenger:[registrar messenger]]; + FLTFirebaseAuthPlugin *instance = [[FLTFirebaseAuthPlugin alloc] init:registrar.messenger]; + + [registrar addMethodCallDelegate:instance channel:channel]; + + [registrar publish:instance]; + [registrar addApplicationDelegate:instance]; +#if !TARGET_OS_OSX + if (@available(iOS 13.0, *)) { + if ([registrar respondsToSelector:@selector(addSceneDelegate:)]) { + [registrar performSelector:@selector(addSceneDelegate:) withObject:instance]; + } + } +#endif + SetUpFirebaseAuthHostApi(registrar.messenger, instance); + SetUpFirebaseAuthUserHostApi(registrar.messenger, instance); + SetUpMultiFactorUserHostApi(registrar.messenger, instance); + SetUpMultiFactoResolverHostApi(registrar.messenger, instance); + SetUpMultiFactorTotpHostApi(registrar.messenger, instance); + SetUpMultiFactorTotpSecretHostApi(registrar.messenger, instance); +} + ++ (FlutterError *)convertToFlutterError:(NSError *)error { + NSString *code = @"unknown"; + NSString *message = @"An unknown error has occurred."; + + if (error == nil) { + return [FlutterError errorWithCode:code message:message details:@{}]; + } + + // code + if ([error userInfo][FIRAuthErrorUserInfoNameKey] != nil) { + // See [FIRAuthErrorCodeString] for list of codes. + // Codes are in the format "ERROR_SOME_NAME", converting below to the format + // required in Dart. ERROR_SOME_NAME -> SOME_NAME + NSString *firebaseErrorCode = [error userInfo][FIRAuthErrorUserInfoNameKey]; + code = [firebaseErrorCode stringByReplacingOccurrencesOfString:@"ERROR_" withString:@""]; + // SOME_NAME -> SOME-NAME + code = [code stringByReplacingOccurrencesOfString:@"_" withString:@"-"]; + // SOME-NAME -> some-name + code = [code lowercaseString]; + } + + // message + if ([error userInfo][NSLocalizedDescriptionKey] != nil) { + message = [error userInfo][NSLocalizedDescriptionKey]; + } + + NSMutableDictionary *additionalData = [NSMutableDictionary dictionary]; + // additionalData.email + if ([error userInfo][FIRAuthErrorUserInfoEmailKey] != nil) { + additionalData[kArgumentEmail] = [error userInfo][FIRAuthErrorUserInfoEmailKey]; + } + // We want to store the credential if present for future sign in if the exception contains a + // credential, we pass a token back to Flutter to allow retrieval of the credential. + NSNumber *token = [FLTFirebaseAuthPlugin storeAuthCredentialIfPresent:error]; + + // additionalData.authCredential + if ([error userInfo][FIRAuthErrorUserInfoUpdatedCredentialKey] != nil) { + FIRAuthCredential *authCredential = [error userInfo][FIRAuthErrorUserInfoUpdatedCredentialKey]; + additionalData[@"authCredential"] = [PigeonParser getPigeonAuthCredential:authCredential + token:token]; + } + + // Manual message overrides to ensure messages/codes matches other platforms. + if ([message isEqual:@"The password must be 6 characters long or more."]) { + message = @"Password should be at least 6 characters"; + } + + return [FlutterError errorWithCode:code message:message details:additionalData]; +} + ++ (id)getNSDictionaryFromAuthCredential:(FIRAuthCredential *)authCredential { + if (authCredential == nil) { + return [NSNull null]; + } + + NSString *accessToken = nil; + if ([authCredential isKindOfClass:[FIROAuthCredential class]]) { + if (((FIROAuthCredential *)authCredential).accessToken != nil) { + accessToken = ((FIROAuthCredential *)authCredential).accessToken; + } else if (((FIROAuthCredential *)authCredential).IDToken != nil) { + // For Sign In With Apple, the token is stored in IDToken + accessToken = ((FIROAuthCredential *)authCredential).IDToken; + } + } + + return @{ + kArgumentProviderId : authCredential.provider, + // Note: "signInMethod" does not exist on iOS SDK, so using provider + // instead. + kArgumentSignInMethod : authCredential.provider, + kArgumentToken : @([authCredential hash]), + kArgumentAccessToken : accessToken ?: [NSNull null], + }; +} + +- (void)cleanupWithCompletion:(void (^)(void))completion { + // Cleanup credentials. + [credentialsMap removeAllObjects]; + + for (FlutterEventChannel *channel in self->_eventChannels.allValues) { + [channel setStreamHandler:nil]; + } + [self->_eventChannels removeAllObjects]; + for (NSObject *handler in self->_streamHandlers.allValues) { + [handler onCancelWithArguments:nil]; + } + [self->_streamHandlers removeAllObjects]; + + if (completion != nil) completion(); +} + +- (void)detachFromEngineForRegistrar:(NSObject *)registrar { + [self cleanupWithCompletion:nil]; +} + +#pragma mark - AppDelegate + +#if TARGET_OS_IPHONE +#if !__has_include() +- (BOOL)application:(UIApplication *)application + didReceiveRemoteNotification:(NSDictionary *)notification + fetchCompletionHandler:(void (^)(UIBackgroundFetchResult result))completionHandler { + if ([[FIRAuth auth] canHandleNotification:notification]) { + completionHandler(UIBackgroundFetchResultNoData); + return YES; + } + return NO; +} +#endif + +- (void)application:(UIApplication *)application + didRegisterForRemoteNotificationsWithDeviceToken:(NSData *)deviceToken { + _apnsToken = deviceToken; +} + +- (BOOL)application:(UIApplication *)app openURL:(NSURL *)url options:(NSDictionary *)options { + return [[FIRAuth auth] canHandleURL:url]; +} + +#pragma mark - SceneDelegate + +- (BOOL)scene:(UIScene *)scene + openURLContexts:(NSSet *)URLContexts API_AVAILABLE(ios(13.0)) { + for (UIOpenURLContext *urlContext in URLContexts) { + if ([[FIRAuth auth] canHandleURL:urlContext.URL]) { + return YES; + } + } + return NO; +} +#endif + +#pragma mark - FLTFirebasePlugin + +- (void)didReinitializeFirebaseCore:(void (^_Nonnull)(void))completion { + [self cleanupWithCompletion:completion]; +} + +- (NSString *_Nonnull)firebaseLibraryName { + return @LIBRARY_NAME; +} + +- (NSString *_Nonnull)firebaseLibraryVersion { + return @LIBRARY_VERSION; +} + +- (NSString *_Nonnull)flutterChannelName { + return kFLTFirebaseAuthChannelName; +} + +- (NSDictionary *_Nonnull)pluginConstantsForFIRApp:(FIRApp *_Nonnull)firebaseApp { + FIRAuth *auth = [FIRAuth authWithApp:firebaseApp]; + return @{ + @"APP_LANGUAGE_CODE" : (id)[auth languageCode] ?: [NSNull null], + @"APP_CURRENT_USER" : [auth currentUser] + ? [PigeonParser getManualList:[PigeonParser getPigeonDetails:[auth currentUser]]] + : [NSNull null], + }; +} + +#pragma mark - Firebase Auth API + +// Adapted from +// https://auth0.com/docs/api-auth/tutorials/nonce#generate-a-cryptographically-random-nonce Used +// for Apple Sign In +- (NSString *)randomNonce:(NSInteger)length { + NSAssert(length > 0, @"Expected nonce to have positive length"); + NSString *characterSet = @"0123456789ABCDEFGHIJKLMNOPQRSTUVXYZabcdefghijklmnopqrstuvwxyz-._"; + NSMutableString *result = [NSMutableString string]; + NSInteger remainingLength = length; + + while (remainingLength > 0) { + NSMutableArray *randoms = [NSMutableArray arrayWithCapacity:16]; + for (NSInteger i = 0; i < 16; i++) { + uint8_t random = 0; + int errorCode = SecRandomCopyBytes(kSecRandomDefault, 1, &random); + NSAssert(errorCode == errSecSuccess, @"Unable to generate nonce: OSStatus %i", errorCode); + + [randoms addObject:@(random)]; + } + + for (NSNumber *random in randoms) { + if (remainingLength == 0) { + break; + } + + if (random.unsignedIntValue < characterSet.length) { + unichar character = [characterSet characterAtIndex:random.unsignedIntValue]; + [result appendFormat:@"%C", character]; + remainingLength--; + } + } + } + + return [result copy]; +} + +- (NSString *)stringBySha256HashingString:(NSString *)input { + const char *string = [input UTF8String]; + unsigned char result[CC_SHA256_DIGEST_LENGTH]; + CC_SHA256(string, (CC_LONG)strlen(string), result); + + NSMutableString *hashed = [NSMutableString stringWithCapacity:CC_SHA256_DIGEST_LENGTH * 2]; + for (NSInteger i = 0; i < CC_SHA256_DIGEST_LENGTH; i++) { + [hashed appendFormat:@"%02x", result[i]]; + } + return hashed; +} + +static void handleSignInWithApple(FLTFirebaseAuthPlugin *object, FIRAuthDataResult *authResult, + NSString *authorizationCode, NSError *error) { + void (^completion)(InternalUserCredential *_Nullable, FlutterError *_Nullable) = + object.appleCompletion; + if (completion == nil) { + object.appleSignInRequestInFlight = NO; + return; + } + + if (error != nil) { + if (error.code == FIRAuthErrorCodeSecondFactorRequired) { + object.appleCompletion = nil; + object.appleSignInRequestInFlight = NO; + [object handleMultiFactorError:object.appleArguments completion:completion withError:error]; + } else { + object.appleCompletion = nil; + object.appleSignInRequestInFlight = NO; + completion(nil, [FLTFirebaseAuthPlugin convertToFlutterError:error]); + } + return; + } + object.appleCompletion = nil; + object.appleSignInRequestInFlight = NO; + completion([PigeonParser getPigeonUserCredentialFromAuthResult:authResult + authorizationCode:authorizationCode], + nil); +} + +- (void)authorizationController:(ASAuthorizationController *)controller + didCompleteWithAuthorization:(ASAuthorization *)authorization + API_AVAILABLE(macos(10.15), ios(13.0)) { + if ([authorization.credential isKindOfClass:[ASAuthorizationAppleIDCredential class]]) { + ASAuthorizationAppleIDCredential *appleIDCredential = authorization.credential; + NSString *rawNonce = self.currentNonce; + NSAssert(rawNonce != nil, + @"Invalid state: A login callback was received, but no login request was sent."); + + if (appleIDCredential.identityToken == nil) { + NSLog(@"Unable to fetch identity token."); + void (^completion)(InternalUserCredential *_Nullable, FlutterError *_Nullable) = + self.appleCompletion; + self.appleCompletion = nil; + self.appleSignInRequestInFlight = NO; + if (completion != nil) { + completion(nil, [FlutterError errorWithCode:kErrCodeInvalidCredential + message:kErrMsgInvalidCredential + details:nil]); + } + return; + } + + NSString *idToken = [[NSString alloc] initWithData:appleIDCredential.identityToken + encoding:NSUTF8StringEncoding]; + if (idToken == nil) { + NSLog(@"Unable to serialize id token from data: %@", appleIDCredential.identityToken); + } + + NSString *authorizationCode = nil; + if (appleIDCredential.authorizationCode != nil) { + authorizationCode = [[NSString alloc] initWithData:appleIDCredential.authorizationCode + encoding:NSUTF8StringEncoding]; + } + + FIROAuthCredential *credential = + [FIROAuthProvider appleCredentialWithIDToken:idToken + rawNonce:rawNonce + fullName:appleIDCredential.fullName]; + + if (self.isReauthenticatingWithApple == YES) { + self.isReauthenticatingWithApple = NO; + void (^capturedCompletion)(InternalUserCredential *_Nullable, FlutterError *_Nullable) = + self.appleCompletion; + [[FIRAuth.auth currentUser] + reauthenticateWithCredential:credential + completion:^(FIRAuthDataResult *_Nullable authResult, + NSError *_Nullable error) { + handleSignInWithApple(self, authResult, authorizationCode, error); + }]; + + } else if (self.linkWithAppleUser != nil) { + FIRUser *userToLink = self.linkWithAppleUser; + void (^capturedCompletion)(InternalUserCredential *_Nullable, FlutterError *_Nullable) = + self.appleCompletion; + [userToLink linkWithCredential:credential + completion:^(FIRAuthDataResult *authResult, NSError *error) { + self.linkWithAppleUser = nil; + handleSignInWithApple(self, authResult, authorizationCode, error); + }]; + + } else { + FIRAuth *signInAuth = + self.signInWithAppleAuth != nil ? self.signInWithAppleAuth : FIRAuth.auth; + void (^capturedCompletion)(InternalUserCredential *_Nullable, FlutterError *_Nullable) = + self.appleCompletion; + [signInAuth signInWithCredential:credential + completion:^(FIRAuthDataResult *_Nullable authResult, + NSError *_Nullable error) { + self.signInWithAppleAuth = nil; + handleSignInWithApple(self, authResult, authorizationCode, error); + }]; + } + } else { + void (^completion)(InternalUserCredential *_Nullable, FlutterError *_Nullable) = + self.appleCompletion; + self.appleCompletion = nil; + self.appleSignInRequestInFlight = NO; + if (completion != nil) { + completion(nil, [FlutterError errorWithCode:kErrCodeInvalidCredential + message:kErrMsgInvalidCredential + details:nil]); + } + } +} + +- (void)authorizationController:(ASAuthorizationController *)controller + didCompleteWithError:(NSError *)error API_AVAILABLE(macos(10.15), ios(13.0)) { + void (^completion)(InternalUserCredential *_Nullable, FlutterError *_Nullable) = + self.appleCompletion; + self.appleCompletion = nil; + self.appleSignInRequestInFlight = NO; + + NSLog(@"Sign in with Apple errored: %@", error); + if (completion == nil) { + return; + } + + switch (error.code) { + case ASAuthorizationErrorCanceled: + completion(nil, [FlutterError errorWithCode:@"canceled" + message:@"The user canceled the authorization attempt." + details:nil]); + break; + + case ASAuthorizationErrorInvalidResponse: + completion(nil, [FlutterError + errorWithCode:@"invalid-response" + message:@"The authorization request received an invalid response." + details:nil]); + break; + + case ASAuthorizationErrorNotHandled: + completion(nil, [FlutterError errorWithCode:@"not-handled" + message:@"The authorization request wasn’t handled." + details:nil]); + break; + + case ASAuthorizationErrorFailed: + completion(nil, [FlutterError errorWithCode:@"failed" + message:@"The authorization attempt failed." + details:nil]); + break; + + case ASAuthorizationErrorUnknown: + default: + completion(nil, [FLTFirebaseAuthPlugin convertToFlutterError:error]); + break; + } +} + +- (void)handleInternalError:(nonnull void (^)(InternalUserCredential *_Nullable, + FlutterError *_Nullable))completion + withError:(NSError *)error { + const NSError *underlyingError = error.userInfo[@"NSUnderlyingError"]; + if (underlyingError != nil) { + const NSDictionary *details = + underlyingError.userInfo[@"FIRAuthErrorUserInfoDeserializedResponseKey"]; + completion(nil, [FlutterError errorWithCode:@"internal-error" + message:error.description + details:details]); + return; + } + completion(nil, [FlutterError errorWithCode:@"internal-error" + message:error.description + details:nil]); +} + +- (void)handleMultiFactorError:(AuthPigeonFirebaseApp *)app + completion:(nonnull void (^)(InternalUserCredential *_Nullable, + FlutterError *_Nullable))completion + withError:(NSError *_Nullable)error { + FIRMultiFactorResolver *resolver = + (FIRMultiFactorResolver *)error.userInfo[FIRAuthErrorUserInfoMultiFactorResolverKey]; + + NSArray *hints = resolver.hints; + FIRMultiFactorSession *session = resolver.session; + + NSString *sessionId = [[NSUUID UUID] UUIDString]; + self->_multiFactorSessionMap[sessionId] = session; + + NSString *resolverId = [[NSUUID UUID] UUIDString]; + self->_multiFactorResolverMap[resolverId] = resolver; + + NSMutableArray *pigeonHints = [NSMutableArray array]; + + for (FIRMultiFactorInfo *multiFactorInfo in hints) { + NSString *phoneNumber; + if ([multiFactorInfo class] == [FIRPhoneMultiFactorInfo class]) { + FIRPhoneMultiFactorInfo *phoneFactorInfo = (FIRPhoneMultiFactorInfo *)multiFactorInfo; + phoneNumber = phoneFactorInfo.phoneNumber; + } + + InternalMultiFactorInfo *object = [InternalMultiFactorInfo + makeWithDisplayName:multiFactorInfo.displayName + enrollmentTimestamp:multiFactorInfo.enrollmentDate.timeIntervalSince1970 + factorId:multiFactorInfo.factorID + uid:multiFactorInfo.UID + phoneNumber:phoneNumber]; + + [pigeonHints addObject:object.toList]; + } + + NSDictionary *output = @{ + kAppName : app.appName, + kArgumentMultiFactorHints : pigeonHints, + kArgumentMultiFactorSessionId : sessionId, + kArgumentMultiFactorResolverId : resolverId, + }; + completion(nil, [FlutterError errorWithCode:@"second-factor-required" + message:error.description + details:output]); +} + +static void launchAppleSignInRequest(FLTFirebaseAuthPlugin *object, AuthPigeonFirebaseApp *app, + InternalSignInProvider *signInProvider, + void (^_Nonnull completion)(InternalUserCredential *_Nullable, + FlutterError *_Nullable)) { + if (@available(iOS 13.0, macOS 10.15, *)) { + if (object.appleSignInRequestInFlight) { + completion(nil, + [FlutterError errorWithCode:@"operation-not-allowed" + message:@"A Sign in with Apple request is already in progress." + details:nil]); + return; + } + + NSString *nonce = [object randomNonce:32]; + object.currentNonce = nonce; + object.appleCompletion = completion; + object.appleArguments = app; + object.appleSignInRequestInFlight = YES; + + ASAuthorizationAppleIDProvider *appleIDProvider = [[ASAuthorizationAppleIDProvider alloc] init]; + + ASAuthorizationAppleIDRequest *request = [appleIDProvider createRequest]; + NSMutableArray *requestedScopes = [NSMutableArray arrayWithCapacity:2]; + if ([signInProvider.scopes containsObject:@"name"]) { + [requestedScopes addObject:ASAuthorizationScopeFullName]; + } + if ([signInProvider.scopes containsObject:@"email"]) { + [requestedScopes addObject:ASAuthorizationScopeEmail]; + } + request.requestedScopes = [requestedScopes copy]; + request.nonce = [object stringBySha256HashingString:nonce]; + + ASAuthorizationController *authorizationController = + [[ASAuthorizationController alloc] initWithAuthorizationRequests:@[ request ]]; + authorizationController.delegate = object; + authorizationController.presentationContextProvider = object; + [authorizationController performRequests]; + } else { + NSLog(@"Sign in with Apple was introduced in iOS 13, update your Podfile with platform :ios, " + @"'13.0'"); + } +} + +static void handleAppleAuthResult(FLTFirebaseAuthPlugin *object, AuthPigeonFirebaseApp *app, + FIRAuth *auth, FIRAuthCredential *credentials, NSError *error, + void (^_Nonnull completion)(InternalUserCredential *_Nullable, + FlutterError *_Nullable)) { + if (error) { + if (error.code == FIRAuthErrorCodeSecondFactorRequired) { + [object handleMultiFactorError:app completion:completion withError:error]; + } else { + completion(nil, [FLTFirebaseAuthPlugin convertToFlutterError:error]); + } + return; + } + if (credentials) { + [auth + signInWithCredential:credentials + completion:^(FIRAuthDataResult *authResult, NSError *error) { + if (error != nil) { + NSDictionary *userInfo = [error userInfo]; + NSError *underlyingError = [userInfo objectForKey:NSUnderlyingErrorKey]; + + NSDictionary *firebaseDictionary = + underlyingError.userInfo[@"FIRAuthErrorUserInfoDes" + @"erializedResponseKey"]; + + NSString *errorCode = userInfo[@"FIRAuthErrorUserInfoNameKey"]; + + if (firebaseDictionary == nil && errorCode != nil) { + if ([errorCode isEqual:@"ERROR_ACCOUNT_EXISTS_WITH_DIFFERENT_CREDENTIAL"]) { + completion(nil, [FLTFirebaseAuthPlugin convertToFlutterError:error]); + return; + } + + // Removing since it's not parsed and causing issue when sending back the + // object to Flutter + NSMutableDictionary *mutableUserInfo = [userInfo mutableCopy]; + [mutableUserInfo + removeObjectForKey:@"FIRAuthErrorUserInfoUpdatedCredentialKey"]; + NSError *modifiedError = [NSError errorWithDomain:error.domain + code:error.code + userInfo:mutableUserInfo]; + + completion(nil, + [FlutterError errorWithCode:@"sign-in-failed" + message:userInfo[@"NSLocalizedDescription"] + details:modifiedError.userInfo]); + + } else if (firebaseDictionary != nil && + firebaseDictionary[@"message"] != nil) { + // error from firebase-ios-sdk is + // buried in underlying error. + completion(nil, + [FlutterError errorWithCode:@"sign-in-failed" + message:error.localizedDescription + details:firebaseDictionary[@"message"]]); + } else { + completion(nil, [FlutterError errorWithCode:@"sign-in-failed" + message:error.localizedDescription + details:error.userInfo]); + } + } else { + completion([PigeonParser getPigeonUserCredentialFromAuthResult:authResult + authorizationCode:nil], + nil); + } + }]; + } +} + +#pragma mark - Utilities + ++ (NSNumber *_Nullable)storeAuthCredentialIfPresent:(NSError *)error { + if ([error userInfo][FIRAuthErrorUserInfoUpdatedCredentialKey] != nil) { + FIRAuthCredential *authCredential = [error userInfo][FIRAuthErrorUserInfoUpdatedCredentialKey]; + // We temporarily store the non-serializable credential so the + // Dart API can consume these at a later time. + NSNumber *authCredentialHash = @([authCredential hash]); + credentialsMap[authCredentialHash] = authCredential; + return authCredentialHash; + } + return nil; +} + +- (FIRAuth *_Nullable)getFIRAuthFromAppNameFromPigeon:(AuthPigeonFirebaseApp *)pigeonApp { + FIRApp *app = [FLTFirebasePlugin firebaseAppNamed:pigeonApp.appName]; + FIRAuth *auth = [FIRAuth authWithApp:app]; + + auth.tenantID = pigeonApp.tenantId; + auth.customAuthDomain = [FLTFirebaseCorePlugin getCustomDomain:app.name]; + // Auth's `customAuthDomain` supersedes value from `getCustomDomain` set by `initializeApp` + if (pigeonApp.customAuthDomain != nil) { + auth.customAuthDomain = pigeonApp.customAuthDomain; + } + + return auth; +} + +- (void)getFIRAuthCredentialFromArguments:(NSDictionary *)arguments + app:(AuthPigeonFirebaseApp *)app + completion:(void (^)(FIRAuthCredential *credential, + NSError *error))completion { + // If the credential dictionary contains a token, it means a native one has + // been stored for later usage, so we'll attempt to retrieve it here. + if (arguments[kArgumentToken] != nil && ![arguments[kArgumentToken] isEqual:[NSNull null]]) { + NSNumber *credentialHashCode = arguments[kArgumentToken]; + if (credentialsMap[credentialHashCode] != nil) { + completion(credentialsMap[credentialHashCode], nil); + return; + } + } + + NSString *signInMethod = arguments[kArgumentSignInMethod]; + + if ([signInMethod isEqualToString:kSignInMethodGameCenter]) { + // Game Center Games is different to other providers, it requires below callback to get a + // credential. This is why getFIRAuthCredentialFromArguments now requires a completion() + // callback + [FIRGameCenterAuthProvider + getCredentialWithCompletion:^(FIRAuthCredential *credential, NSError *error) { + if (error) { + completion(nil, error); + } else { + completion(credential, nil); + } + }]; + return; + } + + NSString *secret = arguments[kArgumentSecret] == [NSNull null] ? nil : arguments[kArgumentSecret]; + NSString *idToken = + arguments[kArgumentIdToken] == [NSNull null] ? nil : arguments[kArgumentIdToken]; + NSString *accessToken = + arguments[kArgumentAccessToken] == [NSNull null] ? nil : arguments[kArgumentAccessToken]; + NSString *rawNonce = + arguments[kArgumentRawNonce] == [NSNull null] ? nil : arguments[kArgumentRawNonce]; + + // Password Auth + if ([signInMethod isEqualToString:kSignInMethodPassword]) { + NSString *email = arguments[kArgumentEmail]; + completion([FIREmailAuthProvider credentialWithEmail:email password:secret], nil); + return; + } + + // Email Link Auth + if ([signInMethod isEqualToString:kSignInMethodEmailLink]) { + NSString *email = arguments[kArgumentEmail]; + NSString *emailLink = arguments[kArgumentEmailLink]; + completion([FIREmailAuthProvider credentialWithEmail:email link:emailLink], nil); + return; + } + + // Facebook Auth + if ([signInMethod isEqualToString:kSignInMethodFacebook]) { + completion([FIRFacebookAuthProvider credentialWithAccessToken:accessToken], nil); + return; + } + + // Google Auth + if ([signInMethod isEqualToString:kSignInMethodGoogle]) { + completion([FIRGoogleAuthProvider credentialWithIDToken:idToken accessToken:accessToken], nil); + return; + } + + // Twitter Auth + if ([signInMethod isEqualToString:kSignInMethodTwitter]) { + completion([FIRTwitterAuthProvider credentialWithToken:accessToken secret:secret], nil); + return; + } + + // GitHub Auth + if ([signInMethod isEqualToString:kSignInMethodGithub]) { + completion([FIRGitHubAuthProvider credentialWithToken:accessToken], nil); + return; + } + + // Phone Auth - Only supported on iOS + if ([signInMethod isEqualToString:kSignInMethodPhone]) { +#if TARGET_OS_IPHONE + NSString *verificationId = arguments[kArgumentVerificationId]; + NSString *smsCode = arguments[kArgumentSmsCode]; + completion([[FIRPhoneAuthProvider providerWithAuth:[self getFIRAuthFromAppNameFromPigeon:app]] + credentialWithVerificationID:verificationId + verificationCode:smsCode], + nil); + return; +#else + NSLog(@"The Firebase Phone Authentication provider is not supported on the " + @"MacOS platform."); + completion(nil, nil); + return; +#endif + } + // Apple Auth + if ([signInMethod isEqualToString:kSignInMethodApple]) { + if (idToken && rawNonce) { + // Credential with idToken, rawNonce and fullName + NSPersonNameComponents *fullName = [[NSPersonNameComponents alloc] init]; + fullName.givenName = + arguments[kArgumentGivenName] == [NSNull null] ? nil : arguments[kArgumentGivenName]; + fullName.familyName = + arguments[kArgumentFamilyName] == [NSNull null] ? nil : arguments[kArgumentFamilyName]; + fullName.nickname = + arguments[kArgumentNickname] == [NSNull null] ? nil : arguments[kArgumentNickname]; + fullName.namePrefix = + arguments[kArgumentNamePrefix] == [NSNull null] ? nil : arguments[kArgumentNamePrefix]; + fullName.nameSuffix = + arguments[kArgumentNameSuffix] == [NSNull null] ? nil : arguments[kArgumentNameSuffix]; + fullName.middleName = + arguments[kArgumentMiddleName] == [NSNull null] ? nil : arguments[kArgumentMiddleName]; + + completion([FIROAuthProvider appleCredentialWithIDToken:idToken + rawNonce:rawNonce + fullName:fullName], + nil); + return; + } + } + // OAuth + if ([signInMethod isEqualToString:kSignInMethodOAuth]) { + NSString *providerId = arguments[kArgumentProviderId]; + completion([FIROAuthProvider credentialWithProviderID:providerId + IDToken:idToken + rawNonce:rawNonce + accessToken:accessToken], + nil); + return; + } + + NSLog(@"Support for an auth provider with identifier '%@' is not implemented.", signInMethod); + completion(nil, nil); + return; +} + +- (void)ensureAPNSTokenSetting { +#if !TARGET_OS_OSX + FIRApp *defaultApp = [FIRApp defaultApp]; + if (defaultApp) { + if ([FIRAuth auth].APNSToken == nil && _apnsToken != nil) { + [[FIRAuth auth] setAPNSToken:_apnsToken type:FIRAuthAPNSTokenTypeUnknown]; + _apnsToken = nil; + } + } +#endif +} + +- (FIRMultiFactor *)getAppMultiFactorFromPigeon:(nonnull AuthPigeonFirebaseApp *)app { + FIRAuth *auth = [self getFIRAuthFromAppNameFromPigeon:app]; + FIRUser *currentUser = auth.currentUser; + return currentUser.multiFactor; +} + +- (nonnull ASPresentationAnchor)presentationAnchorForAuthorizationController: + (nonnull ASAuthorizationController *)controller API_AVAILABLE(macos(10.15), ios(13.0)) { +#if TARGET_OS_OSX + return [[NSApplication sharedApplication] keyWindow]; +#else + // UIApplication.keyWindow is deprecated in iOS 13+ with UIScene lifecycle. + // Walk the connected scenes to find the foreground active window. + if (@available(iOS 15.0, *)) { + for (UIScene *scene in [UIApplication sharedApplication].connectedScenes) { + if (scene.activationState == UISceneActivationStateForegroundActive && + [scene isKindOfClass:[UIWindowScene class]]) { + UIWindowScene *windowScene = (UIWindowScene *)scene; + if (windowScene.keyWindow) { + return windowScene.keyWindow; + } + } + } + } else if (@available(iOS 13.0, *)) { + for (UIScene *scene in [UIApplication sharedApplication].connectedScenes) { + if (scene.activationState == UISceneActivationStateForegroundActive && + [scene isKindOfClass:[UIWindowScene class]]) { + UIWindowScene *windowScene = (UIWindowScene *)scene; + for (UIWindow *window in windowScene.windows) { + if (window.isKeyWindow) { + return window; + } + } + } + } + } + return [[UIApplication sharedApplication] keyWindow]; +#endif +} + +- (void)enrollPhoneApp:(nonnull AuthPigeonFirebaseApp *)app + assertion:(nonnull InternalPhoneMultiFactorAssertion *)assertion + displayName:(nullable NSString *)displayName + completion:(nonnull void (^)(FlutterError *_Nullable))completion { +#if TARGET_OS_OSX + completion([FlutterError errorWithCode:@"unsupported-platform" + message:@"Phone authentication is not supported on macOS" + details:nil]); +#else + + FIRMultiFactor *multiFactor = [self getAppMultiFactorFromPigeon:app]; + + FIRPhoneAuthCredential *credential = + [[FIRPhoneAuthProvider providerWithAuth:[self getFIRAuthFromAppNameFromPigeon:app]] + credentialWithVerificationID:[assertion verificationId] + verificationCode:[assertion verificationCode]]; + + FIRMultiFactorAssertion *multiFactorAssertion = + [FIRPhoneMultiFactorGenerator assertionWithCredential:credential]; + + [multiFactor enrollWithAssertion:multiFactorAssertion + displayName:displayName + completion:^(NSError *_Nullable error) { + if (error == nil) { + completion(nil); + } else { + completion([FlutterError errorWithCode:@"enroll-failed" + message:error.localizedDescription + details:nil]); + } + }]; +#endif +} + +- (void)getEnrolledFactorsApp:(nonnull AuthPigeonFirebaseApp *)app + completion:(nonnull void (^)(NSArray *_Nullable, + FlutterError *_Nullable))completion { + FIRMultiFactor *multiFactor = [self getAppMultiFactorFromPigeon:app]; + + NSArray *enrolledFactors = [multiFactor enrolledFactors]; + + NSMutableArray *results = [NSMutableArray array]; + + for (FIRMultiFactorInfo *multiFactorInfo in enrolledFactors) { + NSString *phoneNumber; + if ([multiFactorInfo class] == [FIRPhoneMultiFactorInfo class]) { + FIRPhoneMultiFactorInfo *phoneFactorInfo = (FIRPhoneMultiFactorInfo *)multiFactorInfo; + phoneNumber = phoneFactorInfo.phoneNumber; + } + + [results addObject:[InternalMultiFactorInfo + makeWithDisplayName:multiFactorInfo.displayName + enrollmentTimestamp:multiFactorInfo.enrollmentDate.timeIntervalSince1970 + factorId:multiFactorInfo.factorID + uid:multiFactorInfo.UID + phoneNumber:phoneNumber]]; + } + + completion(results, nil); +} + +- (void)getSessionApp:(nonnull AuthPigeonFirebaseApp *)app + completion:(nonnull void (^)(InternalMultiFactorSession *_Nullable, + FlutterError *_Nullable))completion { + FIRMultiFactor *multiFactor = [self getAppMultiFactorFromPigeon:app]; + [multiFactor getSessionWithCompletion:^(FIRMultiFactorSession *_Nullable session, + NSError *_Nullable error) { + NSString *UUID = [[NSUUID UUID] UUIDString]; + self->_multiFactorSessionMap[UUID] = session; + + InternalMultiFactorSession *pigeonSession = [InternalMultiFactorSession makeWithId:UUID]; + completion(pigeonSession, nil); + }]; +} + +- (void)unenrollApp:(nonnull AuthPigeonFirebaseApp *)app + factorUid:(nonnull NSString *)factorUid + completion:(nonnull void (^)(FlutterError *_Nullable))completion { + FIRMultiFactor *multiFactor = [self getAppMultiFactorFromPigeon:app]; + [multiFactor unenrollWithFactorUID:factorUid + completion:^(NSError *_Nullable error) { + if (error == nil) { + completion(nil); + } else { + completion([FlutterError errorWithCode:@"unenroll-failed" + message:error.localizedDescription + details:nil]); + } + }]; +} + +- (void)enrollTotpApp:(nonnull AuthPigeonFirebaseApp *)app + assertionId:(nonnull NSString *)assertionId + displayName:(nullable NSString *)displayName + completion:(nonnull void (^)(FlutterError *_Nullable))completion { + FIRMultiFactor *multiFactor = [self getAppMultiFactorFromPigeon:app]; + + FIRMultiFactorAssertion *assertion = _multiFactorAssertionMap[assertionId]; + + [multiFactor enrollWithAssertion:assertion + displayName:displayName + completion:^(NSError *_Nullable error) { + if (error == nil) { + completion(nil); + } else { + completion([FlutterError errorWithCode:@"enroll-failed" + message:error.localizedDescription + details:nil]); + } + }]; +} + +- (void)resolveSignInResolverId:(nonnull NSString *)resolverId + assertion:(nullable InternalPhoneMultiFactorAssertion *)assertion + totpAssertionId:(nullable NSString *)totpAssertionId + completion:(nonnull void (^)(InternalUserCredential *_Nullable, + FlutterError *_Nullable))completion { + FIRMultiFactorResolver *resolver = _multiFactorResolverMap[resolverId]; + + FIRMultiFactorAssertion *multiFactorAssertion; + + if (assertion != nil) { +#if TARGET_OS_IPHONE + FIRPhoneAuthCredential *credential = + [[FIRPhoneAuthProvider provider] credentialWithVerificationID:[assertion verificationId] + verificationCode:[assertion verificationCode]]; + multiFactorAssertion = [FIRPhoneMultiFactorGenerator assertionWithCredential:credential]; +#endif + } else if (totpAssertionId != nil) { + multiFactorAssertion = _multiFactorAssertionMap[totpAssertionId]; + } else { + completion(nil, + [FlutterError errorWithCode:@"resolve-signin-failed" + message:@"Neither assertion nor totpAssertionId were provided" + details:nil]); + return; + } + + [resolver + resolveSignInWithAssertion:multiFactorAssertion + completion:^(FIRAuthDataResult *_Nullable authResult, + NSError *_Nullable error) { + if (error == nil) { + completion([PigeonParser getPigeonUserCredentialFromAuthResult:authResult + authorizationCode:nil], + nil); + } else { + completion(nil, [FlutterError errorWithCode:@"resolve-signin-failed" + message:error.localizedDescription + details:nil]); + } + }]; +} + +- (void)generateSecretSessionId:(nonnull NSString *)sessionId + completion:(nonnull void (^)(InternalTotpSecret *_Nullable, + FlutterError *_Nullable))completion { + FIRMultiFactorSession *multiFactorSession = _multiFactorSessionMap[sessionId]; + + [FIRTOTPMultiFactorGenerator + generateSecretWithMultiFactorSession:multiFactorSession + completion:^(FIRTOTPSecret *_Nullable secret, + NSError *_Nullable error) { + if (error == nil) { + self->_multiFactorTotpSecretMap[secret.sharedSecretKey] = + secret; + completion([PigeonParser getPigeonTotpSecret:secret], nil); + } else { + completion( + nil, [FlutterError errorWithCode:@"generate-secret-failed" + message:error.localizedDescription + details:nil]); + } + }]; +} + +- (void)getAssertionForEnrollmentSecretKey:(nonnull NSString *)secretKey + oneTimePassword:(nonnull NSString *)oneTimePassword + completion:(nonnull void (^)(NSString *_Nullable, + FlutterError *_Nullable))completion { + FIRTOTPSecret *totpSecret = _multiFactorTotpSecretMap[secretKey]; + + FIRTOTPMultiFactorAssertion *assertion = + [FIRTOTPMultiFactorGenerator assertionForEnrollmentWithSecret:totpSecret + oneTimePassword:oneTimePassword]; + + NSString *UUID = [[NSUUID UUID] UUIDString]; + self->_multiFactorAssertionMap[UUID] = assertion; + completion(UUID, nil); +} + +- (void)getAssertionForSignInEnrollmentId:(nonnull NSString *)enrollmentId + oneTimePassword:(nonnull NSString *)oneTimePassword + completion:(nonnull void (^)(NSString *_Nullable, + FlutterError *_Nullable))completion { + FIRTOTPMultiFactorAssertion *assertion = + [FIRTOTPMultiFactorGenerator assertionForSignInWithEnrollmentID:enrollmentId + oneTimePassword:oneTimePassword]; + NSString *UUID = [[NSUUID UUID] UUIDString]; + self->_multiFactorAssertionMap[UUID] = assertion; + completion(UUID, nil); +} + +- (void)generateQrCodeUrlSecretKey:(nonnull NSString *)secretKey + accountName:(nullable NSString *)accountName + issuer:(nullable NSString *)issuer + completion:(nonnull void (^)(NSString *_Nullable, + FlutterError *_Nullable))completion { + FIRTOTPSecret *totpSecret = _multiFactorTotpSecretMap[secretKey]; + completion([totpSecret generateQRCodeURLWithAccountName:accountName issuer:issuer], nil); +} + +- (void)openInOtpAppSecretKey:(nonnull NSString *)secretKey + qrCodeUrl:(nonnull NSString *)qrCodeUrl + completion:(nonnull void (^)(FlutterError *_Nullable))completion { + FIRTOTPSecret *totpSecret = _multiFactorTotpSecretMap[secretKey]; + [totpSecret openInOTPAppWithQRCodeURL:qrCodeUrl]; + completion(nil); +} + +- (void)applyActionCodeApp:(nonnull AuthPigeonFirebaseApp *)app + code:(nonnull NSString *)code + completion:(nonnull void (^)(FlutterError *_Nullable))completion { + FIRAuth *auth = [self getFIRAuthFromAppNameFromPigeon:app]; + [auth applyActionCode:code + completion:^(NSError *_Nullable error) { + if (error != nil) { + completion([FLTFirebaseAuthPlugin convertToFlutterError:error]); + } else { + completion(nil); + } + }]; +} + +- (void)revokeTokenWithAuthorizationCodeApp:(nonnull AuthPigeonFirebaseApp *)app + authorizationCode:(nonnull NSString *)authorizationCode + completion:(nonnull void (^)(FlutterError *_Nullable))completion { + FIRAuth *auth = [self getFIRAuthFromAppNameFromPigeon:app]; + [auth revokeTokenWithAuthorizationCode:authorizationCode + completion:^(NSError *_Nullable error) { + if (error != nil) { + completion([FLTFirebaseAuthPlugin convertToFlutterError:error]); + } else { + completion(nil); + } + }]; +} + +- (void)revokeAccessTokenApp:(nonnull AuthPigeonFirebaseApp *)app + accessToken:(nonnull NSString *)accessToken + completion:(nonnull void (^)(FlutterError *_Nullable))completion { + // `revokeAccessToken(_:)` is currently Android-only on the Firebase SDK. + // On Apple platforms use `revokeTokenWithAuthorizationCode:` instead. + completion([FlutterError errorWithCode:@"unsupported-platform-operation" + message:@"revokeAccessToken is not supported on iOS/macOS. " + @"Use revokeTokenWithAuthorizationCode instead." + details:nil]); +} + +- (void)checkActionCodeApp:(nonnull AuthPigeonFirebaseApp *)app + code:(nonnull NSString *)code + completion:(nonnull void (^)(InternalActionCodeInfo *_Nullable, + FlutterError *_Nullable))completion { + FIRAuth *auth = [self getFIRAuthFromAppNameFromPigeon:app]; + [auth checkActionCode:code + completion:^(FIRActionCodeInfo *_Nullable info, NSError *_Nullable error) { + if (error != nil) { + completion(nil, [FLTFirebaseAuthPlugin convertToFlutterError:error]); + } else { + InternalActionCodeInfo *result = [self parseActionCode:info]; + if (result.operation == ActionCodeInfoOperationUnknown) { + // Workaround: Firebase iOS SDK >=11.12.0 returns .unknown because + // actionCodeOperation(forRequestType:) only matches camelCase but the + // REST API returns SCREAMING_SNAKE_CASE (e.g. "VERIFY_EMAIL"). + // Re-fetch the raw requestType via REST to resolve the operation. + // See: https://github.com/firebase/flutterfire/issues/17452 + [self resolveActionCodeOperationForApp:app + code:code + fallbackInfo:result + completion:completion]; + } else { + completion(result, nil); + } + } + }]; +} + +- (InternalActionCodeInfo *_Nullable)parseActionCode:(nonnull FIRActionCodeInfo *)info { + InternalActionCodeInfoData *data = [InternalActionCodeInfoData makeWithEmail:info.email + previousEmail:info.previousEmail]; + + ActionCodeInfoOperation operation; + + if (info.operation == FIRActionCodeOperationPasswordReset) { + operation = ActionCodeInfoOperationPasswordReset; + } else if (info.operation == FIRActionCodeOperationVerifyEmail) { + operation = ActionCodeInfoOperationVerifyEmail; + } else if (info.operation == FIRActionCodeOperationRecoverEmail) { + operation = ActionCodeInfoOperationRecoverEmail; + } else if (info.operation == FIRActionCodeOperationEmailLink) { + operation = ActionCodeInfoOperationEmailSignIn; + } else if (info.operation == FIRActionCodeOperationVerifyAndChangeEmail) { + operation = ActionCodeInfoOperationVerifyAndChangeEmail; + } else if (info.operation == FIRActionCodeOperationRevertSecondFactorAddition) { + operation = ActionCodeInfoOperationRevertSecondFactorAddition; + } else { + operation = ActionCodeInfoOperationUnknown; + } + + return [InternalActionCodeInfo makeWithOperation:operation data:data]; +} + +/// Maps a raw requestType string (either camelCase or SCREAMING_SNAKE_CASE) to +/// the corresponding Pigeon enum value. ++ (ActionCodeInfoOperation)operationFromRequestType:(nullable NSString *)requestType { + static NSDictionary *mapping; + static dispatch_once_t onceToken; + dispatch_once(&onceToken, ^{ + mapping = @{ + @"PASSWORD_RESET" : @(ActionCodeInfoOperationPasswordReset), + @"resetPassword" : @(ActionCodeInfoOperationPasswordReset), + @"VERIFY_EMAIL" : @(ActionCodeInfoOperationVerifyEmail), + @"verifyEmail" : @(ActionCodeInfoOperationVerifyEmail), + @"RECOVER_EMAIL" : @(ActionCodeInfoOperationRecoverEmail), + @"recoverEmail" : @(ActionCodeInfoOperationRecoverEmail), + @"EMAIL_SIGNIN" : @(ActionCodeInfoOperationEmailSignIn), + @"signIn" : @(ActionCodeInfoOperationEmailSignIn), + @"VERIFY_AND_CHANGE_EMAIL" : @(ActionCodeInfoOperationVerifyAndChangeEmail), + @"verifyAndChangeEmail" : @(ActionCodeInfoOperationVerifyAndChangeEmail), + @"REVERT_SECOND_FACTOR_ADDITION" : @(ActionCodeInfoOperationRevertSecondFactorAddition), + @"revertSecondFactorAddition" : @(ActionCodeInfoOperationRevertSecondFactorAddition), + }; + }); + + NSNumber *value = mapping[requestType]; + return value ? (ActionCodeInfoOperation)value.integerValue : ActionCodeInfoOperationUnknown; +} + +/// Calls the Identity Toolkit REST API directly to retrieve the raw requestType +/// string, which the iOS SDK fails to parse correctly. Falls back to the original +/// result if the REST call fails for any reason. +- (void)resolveActionCodeOperationForApp:(nonnull AuthPigeonFirebaseApp *)app + code:(nonnull NSString *)code + fallbackInfo:(nonnull InternalActionCodeInfo *)fallbackInfo + completion:(nonnull void (^)(InternalActionCodeInfo *_Nullable, + FlutterError *_Nullable))completion { + FIRApp *firebaseApp = [FLTFirebasePlugin firebaseAppNamed:app.appName]; + NSString *apiKey = firebaseApp.options.APIKey; + + NSString *baseURL; + NSDictionary *emulatorConfig = _emulatorConfigs[app.appName]; + if (emulatorConfig) { + baseURL = [NSString stringWithFormat:@"http://%@:%@/identitytoolkit.googleapis.com", + emulatorConfig[@"host"], emulatorConfig[@"port"]]; + } else { + baseURL = @"https://identitytoolkit.googleapis.com"; + } + + NSString *urlString = + [NSString stringWithFormat:@"%@/v1/accounts:resetPassword?key=%@", baseURL, apiKey]; + NSURL *url = [NSURL URLWithString:urlString]; + + NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:url]; + request.HTTPMethod = @"POST"; + [request setValue:@"application/json" forHTTPHeaderField:@"Content-Type"]; + request.HTTPBody = [NSJSONSerialization dataWithJSONObject:@{@"oobCode" : code} + options:0 + error:nil]; + + NSURLSessionDataTask *task = [[NSURLSession sharedSession] + dataTaskWithRequest:request + completionHandler:^(NSData *_Nullable data, NSURLResponse *_Nullable response, + NSError *_Nullable error) { + if (error || !data) { + completion(fallbackInfo, nil); + return; + } + + NSDictionary *json = [NSJSONSerialization JSONObjectWithData:data options:0 error:nil]; + if (!json || json[@"error"]) { + completion(fallbackInfo, nil); + return; + } + + ActionCodeInfoOperation operation = + [FLTFirebaseAuthPlugin operationFromRequestType:json[@"requestType"]]; + + if (operation != ActionCodeInfoOperationUnknown) { + completion([InternalActionCodeInfo makeWithOperation:operation data:fallbackInfo.data], + nil); + } else { + completion(fallbackInfo, nil); + } + }]; + [task resume]; +} + +- (void)confirmPasswordResetApp:(nonnull AuthPigeonFirebaseApp *)app + code:(nonnull NSString *)code + newPassword:(nonnull NSString *)newPassword + completion:(nonnull void (^)(FlutterError *_Nullable))completion { + FIRAuth *auth = [self getFIRAuthFromAppNameFromPigeon:app]; + [auth confirmPasswordResetWithCode:code + newPassword:newPassword + completion:^(NSError *_Nullable error) { + if (error != nil) { + completion([FLTFirebaseAuthPlugin convertToFlutterError:error]); + } else { + completion(nil); + } + }]; +} + +- (void)createUserWithEmailAndPasswordApp:(nonnull AuthPigeonFirebaseApp *)app + email:(nonnull NSString *)email + password:(nonnull NSString *)password + completion:(nonnull void (^)(InternalUserCredential *_Nullable, + FlutterError *_Nullable))completion { + FIRAuth *auth = [self getFIRAuthFromAppNameFromPigeon:app]; + [auth createUserWithEmail:email + password:password + completion:^(FIRAuthDataResult *_Nullable authResult, NSError *_Nullable error) { + if (error != nil) { + completion(nil, [FLTFirebaseAuthPlugin convertToFlutterError:error]); + } else { + completion([PigeonParser getPigeonUserCredentialFromAuthResult:authResult + authorizationCode:nil], + nil); + } + }]; +} + +- (void)fetchSignInMethodsForEmailApp:(nonnull AuthPigeonFirebaseApp *)app + email:(nonnull NSString *)email + completion:(nonnull void (^)(NSArray *_Nullable, + FlutterError *_Nullable))completion { + FIRAuth *auth = [self getFIRAuthFromAppNameFromPigeon:app]; + [auth fetchSignInMethodsForEmail:email + completion:^(NSArray *_Nullable providers, + NSError *_Nullable error) { + if (error != nil) { + completion(nil, [FLTFirebaseAuthPlugin convertToFlutterError:error]); + } else { + if (providers == nil) { + completion(@[], nil); + } else { + completion(providers, nil); + } + } + }]; +} + +- (void)registerAuthStateListenerApp:(nonnull AuthPigeonFirebaseApp *)app + completion:(nonnull void (^)(NSString *_Nullable, + FlutterError *_Nullable))completion { + FIRAuth *auth = [self getFIRAuthFromAppNameFromPigeon:app]; + + NSString *name = + [NSString stringWithFormat:@"%@/auth-state/%@", kFLTFirebaseAuthChannelName, auth.app.name]; + FlutterEventChannel *channel = [FlutterEventChannel eventChannelWithName:name + binaryMessenger:_binaryMessenger]; + + FLTAuthStateChannelStreamHandler *handler = + [[FLTAuthStateChannelStreamHandler alloc] initWithAuth:auth]; + [channel setStreamHandler:handler]; + + [_eventChannels setObject:channel forKey:name]; + [_streamHandlers setObject:handler forKey:name]; + + completion(name, nil); +} + +- (void)registerIdTokenListenerApp:(nonnull AuthPigeonFirebaseApp *)app + completion:(nonnull void (^)(NSString *_Nullable, + FlutterError *_Nullable))completion { + FIRAuth *auth = [self getFIRAuthFromAppNameFromPigeon:app]; + + NSString *name = + [NSString stringWithFormat:@"%@/id-token/%@", kFLTFirebaseAuthChannelName, auth.app.name]; + + FlutterEventChannel *channel = [FlutterEventChannel eventChannelWithName:name + binaryMessenger:_binaryMessenger]; + + FLTIdTokenChannelStreamHandler *handler = + [[FLTIdTokenChannelStreamHandler alloc] initWithAuth:auth]; + [channel setStreamHandler:handler]; + + [_eventChannels setObject:channel forKey:name]; + [_streamHandlers setObject:handler forKey:name]; + + completion(name, nil); +} + +- (void)sendPasswordResetEmailApp:(nonnull AuthPigeonFirebaseApp *)app + email:(nonnull NSString *)email + actionCodeSettings:(nullable InternalActionCodeSettings *)actionCodeSettings + completion:(nonnull void (^)(FlutterError *_Nullable))completion { + FIRAuth *auth = [self getFIRAuthFromAppNameFromPigeon:app]; + if (actionCodeSettings != nil) { + FIRActionCodeSettings *settings = [PigeonParser parseActionCodeSettings:actionCodeSettings]; + [auth sendPasswordResetWithEmail:email + actionCodeSettings:settings + completion:^(NSError *_Nullable error) { + if (error != nil) { + completion([FLTFirebaseAuthPlugin convertToFlutterError:error]); + } else { + completion(nil); + } + }]; + } else { + [auth sendPasswordResetWithEmail:email + completion:^(NSError *_Nullable error) { + if (error != nil) { + completion([FLTFirebaseAuthPlugin convertToFlutterError:error]); + } else { + completion(nil); + } + }]; + } +} + +- (void)sendSignInLinkToEmailApp:(nonnull AuthPigeonFirebaseApp *)app + email:(nonnull NSString *)email + actionCodeSettings:(nonnull InternalActionCodeSettings *)actionCodeSettings + completion:(nonnull void (^)(FlutterError *_Nullable))completion { + FIRAuth *auth = [self getFIRAuthFromAppNameFromPigeon:app]; + [auth sendSignInLinkToEmail:email + actionCodeSettings:[PigeonParser parseActionCodeSettings:actionCodeSettings] + completion:^(NSError *_Nullable error) { + if (error != nil) { + if (error.code == FIRAuthErrorCodeInternalError) { + [self + handleInternalError:^(InternalUserCredential *_Nullable creds, + FlutterError *_Nullable internalError) { + completion(internalError); + } + withError:error]; + } else { + completion([FLTFirebaseAuthPlugin convertToFlutterError:error]); + } + } else { + completion(nil); + } + }]; +} + +- (void)setLanguageCodeApp:(nonnull AuthPigeonFirebaseApp *)app + languageCode:(nullable NSString *)languageCode + completion: + (nonnull void (^)(NSString *_Nullable, FlutterError *_Nullable))completion { + FIRAuth *auth = [self getFIRAuthFromAppNameFromPigeon:app]; + + if (languageCode != nil && ![languageCode isEqual:[NSNull null]]) { + auth.languageCode = languageCode; + } else { + [auth useAppLanguage]; + } + + completion(auth.languageCode, nil); +} + +- (void)setSettingsApp:(nonnull AuthPigeonFirebaseApp *)app + settings:(nonnull InternalFirebaseAuthSettings *)settings + completion:(nonnull void (^)(FlutterError *_Nullable))completion { + FIRAuth *auth = [self getFIRAuthFromAppNameFromPigeon:app]; + + if (settings.userAccessGroup != nil) { + BOOL useUserAccessGroupSuccessful; + NSError *useUserAccessGroupErrorPtr; + useUserAccessGroupSuccessful = [auth useUserAccessGroup:settings.userAccessGroup + error:&useUserAccessGroupErrorPtr]; + if (!useUserAccessGroupSuccessful) { + completion([FLTFirebaseAuthPlugin convertToFlutterError:useUserAccessGroupErrorPtr]); + return; + } + } + +#if TARGET_OS_IPHONE + if (settings.appVerificationDisabledForTesting) { + auth.settings.appVerificationDisabledForTesting = settings.appVerificationDisabledForTesting; + } +#else + NSLog(@"FIRAuthSettings.appVerificationDisabledForTesting is not supported " + @"on MacOS."); +#endif + + completion(nil); +} + +- (void)signInAnonymouslyApp:(nonnull AuthPigeonFirebaseApp *)app + completion:(nonnull void (^)(InternalUserCredential *_Nullable, + FlutterError *_Nullable))completion { + FIRAuth *auth = [self getFIRAuthFromAppNameFromPigeon:app]; + [auth signInAnonymouslyWithCompletion:^(FIRAuthDataResult *authResult, NSError *error) { + if (error != nil) { + completion(nil, [FLTFirebaseAuthPlugin convertToFlutterError:error]); + } else { + completion([PigeonParser getPigeonUserCredentialFromAuthResult:authResult + authorizationCode:nil], + nil); + } + }]; +} + +- (void)signInWithCredentialApp:(nonnull AuthPigeonFirebaseApp *)app + input:(nonnull NSDictionary *)input + completion:(nonnull void (^)(InternalUserCredential *_Nullable, + FlutterError *_Nullable))completion { + FIRAuth *auth = [self getFIRAuthFromAppNameFromPigeon:app]; + [self + getFIRAuthCredentialFromArguments:input + app:app + completion:^(FIRAuthCredential *credential, NSError *error) { + if (credential == nil) { + completion(nil, + [FlutterError errorWithCode:kErrCodeInvalidCredential + message:kErrMsgInvalidCredential + details:nil]); + return; + } + + if (error) { + completion(nil, + [FLTFirebaseAuthPlugin convertToFlutterError:error]); + } + + [auth + signInWithCredential:credential + completion:^(FIRAuthDataResult *authResult, + NSError *error) { + if (error != nil) { + NSDictionary *userInfo = [error userInfo]; + NSError *underlyingError = + [userInfo objectForKey:NSUnderlyingErrorKey]; + + NSDictionary *firebaseDictionary = + underlyingError + .userInfo[@"FIRAuthErrorUserInfoDeserializ" + @"edResponseKey"]; + + if (firebaseDictionary != nil && + firebaseDictionary[@"message"] != nil) { + // error from firebase-ios-sdk is buried in + // underlying error. + if ([firebaseDictionary[@"code"] + isKindOfClass:[NSNumber class]]) { + [self handleInternalError:completion + withError:error]; + } else { + completion(nil, + [FlutterError + errorWithCode:firebaseDictionary + [@"code"] + message:firebaseDictionary + [@"message"] + details:nil]); + } + } else { + if (error.code == + FIRAuthErrorCodeSecondFactorRequired) { + [self handleMultiFactorError:app + completion:completion + withError:error]; + } else if (error.code == + FIRAuthErrorCodeInternalError) { + [self handleInternalError:completion + withError:error]; + } else { + completion(nil, + [FLTFirebaseAuthPlugin + convertToFlutterError:error]); + } + } + } else { + completion( + [PigeonParser + getPigeonUserCredentialFromAuthResult: + authResult + authorizationCode:nil], + nil); + } + }]; + }]; +} + +- (void)signInWithCustomTokenApp:(nonnull AuthPigeonFirebaseApp *)app + token:(nonnull NSString *)token + completion:(nonnull void (^)(InternalUserCredential *_Nullable, + FlutterError *_Nullable))completion { + FIRAuth *auth = [self getFIRAuthFromAppNameFromPigeon:app]; + + [auth signInWithCustomToken:token + completion:^(FIRAuthDataResult *_Nullable authResult, NSError *_Nullable error) { + if (error != nil) { + if (error.code == FIRAuthErrorCodeSecondFactorRequired) { + [self handleMultiFactorError:app completion:completion withError:error]; + } else if (error.code == FIRAuthErrorCodeInternalError) { + [self handleInternalError:completion withError:error]; + } else { + completion(nil, [FLTFirebaseAuthPlugin convertToFlutterError:error]); + } + } else { + completion([PigeonParser getPigeonUserCredentialFromAuthResult:authResult + authorizationCode:nil], + nil); + } + }]; +} + +- (void)signInWithEmailAndPasswordApp:(nonnull AuthPigeonFirebaseApp *)app + email:(nonnull NSString *)email + password:(nonnull NSString *)password + completion:(nonnull void (^)(InternalUserCredential *_Nullable, + FlutterError *_Nullable))completion { + FIRAuth *auth = [self getFIRAuthFromAppNameFromPigeon:app]; + [auth signInWithEmail:email + password:password + completion:^(FIRAuthDataResult *_Nullable authResult, NSError *_Nullable error) { + if (error != nil) { + if (error.code == FIRAuthErrorCodeSecondFactorRequired) { + [self handleMultiFactorError:app completion:completion withError:error]; + } else if (error.code == FIRAuthErrorCodeInternalError) { + [self handleInternalError:completion withError:error]; + } else { + completion(nil, [FLTFirebaseAuthPlugin convertToFlutterError:error]); + } + } else { + completion([PigeonParser getPigeonUserCredentialFromAuthResult:authResult + authorizationCode:nil], + nil); + } + }]; +} + +- (void)signInWithEmailLinkApp:(nonnull AuthPigeonFirebaseApp *)app + email:(nonnull NSString *)email + emailLink:(nonnull NSString *)emailLink + completion:(nonnull void (^)(InternalUserCredential *_Nullable, + FlutterError *_Nullable))completion { + FIRAuth *auth = [self getFIRAuthFromAppNameFromPigeon:app]; + [auth signInWithEmail:email + link:emailLink + completion:^(FIRAuthDataResult *_Nullable authResult, NSError *_Nullable error) { + if (error != nil) { + if (error.code == FIRAuthErrorCodeSecondFactorRequired) { + [self handleMultiFactorError:app completion:completion withError:error]; + } else if (error.code == FIRAuthErrorCodeInternalError) { + [self handleInternalError:completion withError:error]; + } else { + completion(nil, [FLTFirebaseAuthPlugin convertToFlutterError:error]); + } + } else { + completion([PigeonParser getPigeonUserCredentialFromAuthResult:authResult + authorizationCode:nil], + nil); + } + }]; +} + +- (void)signInWithProviderApp:(nonnull AuthPigeonFirebaseApp *)app + signInProvider:(nonnull InternalSignInProvider *)signInProvider + completion:(nonnull void (^)(InternalUserCredential *_Nullable, + FlutterError *_Nullable))completion { + FIRAuth *auth = [self getFIRAuthFromAppNameFromPigeon:app]; + + if ([signInProvider.providerId isEqualToString:kSignInMethodGameCenter]) { + completion( + nil, + [FlutterError + errorWithCode:@"sign-in-failure" + message: + @"Game Center sign-in requires signing in with 'signInWithCredential()' API." + details:@{}]); + return; + } + + if ([signInProvider.providerId isEqualToString:kSignInMethodApple]) { + self.signInWithAppleAuth = auth; + launchAppleSignInRequest(self, app, signInProvider, completion); + return; + } +#if TARGET_OS_OSX + NSLog(@"signInWithProvider is not supported on the " + @"MacOS platform."); + completion(nil, nil); +#else + self.authProvider = [FIROAuthProvider providerWithProviderID:signInProvider.providerId auth:auth]; + NSArray *scopes = signInProvider.scopes; + if (scopes != nil) { + [self.authProvider setScopes:scopes]; + } + NSDictionary *customParameters = signInProvider.customParameters; + if (customParameters != nil) { + [self.authProvider setCustomParameters:customParameters]; + } + + [self.authProvider + getCredentialWithUIDelegate:nil + completion:^(FIRAuthCredential *_Nullable credential, + NSError *_Nullable error) { + handleAppleAuthResult(self, app, auth, credential, error, completion); + }]; +#endif +} + +- (void)signOutApp:(nonnull AuthPigeonFirebaseApp *)app + completion:(nonnull void (^)(FlutterError *_Nullable))completion { + FIRAuth *auth = [self getFIRAuthFromAppNameFromPigeon:app]; + + if (auth.currentUser == nil) { + completion(nil); + return; + } + + NSError *signOutErrorPtr; + BOOL signOutSuccessful = [auth signOut:&signOutErrorPtr]; + + if (!signOutSuccessful) { + completion([FLTFirebaseAuthPlugin convertToFlutterError:signOutErrorPtr]); + } else { + completion(nil); + } +} + +- (void)useEmulatorApp:(nonnull AuthPigeonFirebaseApp *)app + host:(nonnull NSString *)host + port:(long)port + completion:(nonnull void (^)(FlutterError *_Nullable))completion { + FIRAuth *auth = [self getFIRAuthFromAppNameFromPigeon:app]; + [auth useEmulatorWithHost:host port:port]; + _emulatorConfigs[app.appName] = @{@"host" : host, @"port" : @(port)}; + completion(nil); +} + +- (void)verifyPasswordResetCodeApp:(nonnull AuthPigeonFirebaseApp *)app + code:(nonnull NSString *)code + completion:(nonnull void (^)(NSString *_Nullable, + FlutterError *_Nullable))completion { + FIRAuth *auth = [self getFIRAuthFromAppNameFromPigeon:app]; + + [auth verifyPasswordResetCode:code + completion:^(NSString *_Nullable email, NSError *_Nullable error) { + if (error != nil) { + completion(nil, [FLTFirebaseAuthPlugin convertToFlutterError:error]); + } else { + completion(email, nil); + } + }]; +} + +- (void)verifyPhoneNumberApp:(nonnull AuthPigeonFirebaseApp *)app + request:(nonnull InternalVerifyPhoneNumberRequest *)request + completion: + (nonnull void (^)(NSString *_Nullable, FlutterError *_Nullable))completion { +#if TARGET_OS_OSX + NSLog(@"The Firebase Phone Authentication provider is not supported on the " + @"MacOS platform."); + completion(nil, nil); +#else + FIRAuth *auth = [self getFIRAuthFromAppNameFromPigeon:app]; + + NSString *name = [NSString + stringWithFormat:@"%@/phone/%@", kFLTFirebaseAuthChannelName, [NSUUID UUID].UUIDString]; + FlutterEventChannel *channel = [FlutterEventChannel eventChannelWithName:name + binaryMessenger:_binaryMessenger]; + + NSString *multiFactorSessionId = request.multiFactorSessionId; + FIRMultiFactorSession *multiFactorSession = nil; + + if (multiFactorSessionId != nil) { + multiFactorSession = _multiFactorSessionMap[multiFactorSessionId]; + } + + NSString *multiFactorInfoId = request.multiFactorInfoId; + + FIRPhoneMultiFactorInfo *multiFactorInfo = nil; + if (multiFactorInfoId != nil) { + for (NSString *resolverId in _multiFactorResolverMap) { + for (FIRMultiFactorInfo *info in _multiFactorResolverMap[resolverId].hints) { + if ([info.UID isEqualToString:multiFactorInfoId] && + [info class] == [FIRPhoneMultiFactorInfo class]) { + multiFactorInfo = (FIRPhoneMultiFactorInfo *)info; + break; + } + } + } + } + +#if TARGET_OS_OSX + FLTPhoneNumberVerificationStreamHandler *handler = + [[FLTPhoneNumberVerificationStreamHandler alloc] initWithAuth:auth]; +#else + FLTPhoneNumberVerificationStreamHandler *handler = + [[FLTPhoneNumberVerificationStreamHandler alloc] initWithAuth:auth + request:request + session:multiFactorSession + factorInfo:multiFactorInfo]; +#endif + + [channel setStreamHandler:handler]; + + [_eventChannels setObject:channel forKey:name]; + [_streamHandlers setObject:handler forKey:name]; + + completion(name, nil); +#endif +} + +- (void)deleteApp:(nonnull AuthPigeonFirebaseApp *)app + completion:(nonnull void (^)(FlutterError *_Nullable))completion { + FIRAuth *auth = [self getFIRAuthFromAppNameFromPigeon:app]; + FIRUser *currentUser = auth.currentUser; + if (currentUser == nil) { + completion([FlutterError errorWithCode:kErrCodeNoCurrentUser + message:kErrMsgNoCurrentUser + details:nil]); + return; + } + + [currentUser deleteWithCompletion:^(NSError *_Nullable error) { + if (error != nil) { + completion([FLTFirebaseAuthPlugin convertToFlutterError:error]); + } else { + completion(nil); + } + }]; +} + +- (void)getIdTokenApp:(nonnull AuthPigeonFirebaseApp *)app + forceRefresh:(BOOL)forceRefresh + completion:(nonnull void (^)(InternalIdTokenResult *_Nullable, + FlutterError *_Nullable))completion { + FIRAuth *auth = [self getFIRAuthFromAppNameFromPigeon:app]; + FIRUser *currentUser = auth.currentUser; + if (currentUser == nil) { + completion(nil, [FlutterError errorWithCode:kErrCodeNoCurrentUser + message:kErrMsgNoCurrentUser + details:nil]); + return; + } + + [currentUser + getIDTokenResultForcingRefresh:forceRefresh + completion:^(FIRAuthTokenResult *tokenResult, NSError *error) { + if (error != nil) { + completion(nil, [FLTFirebaseAuthPlugin convertToFlutterError:error]); + return; + } + + completion([PigeonParser parseIdTokenResult:tokenResult], nil); + }]; +} + +- (void)linkWithCredentialApp:(nonnull AuthPigeonFirebaseApp *)app + input:(nonnull NSDictionary *)input + completion:(nonnull void (^)(InternalUserCredential *_Nullable, + FlutterError *_Nullable))completion { + FIRAuth *auth = [self getFIRAuthFromAppNameFromPigeon:app]; + FIRUser *currentUser = auth.currentUser; + if (currentUser == nil) { + completion(nil, [FlutterError errorWithCode:kErrCodeNoCurrentUser + message:kErrMsgNoCurrentUser + details:nil]); + return; + } + + [self + getFIRAuthCredentialFromArguments:input + app:app + completion:^(FIRAuthCredential *credential, NSError *error) { + if (credential == nil) { + completion(nil, + [FlutterError errorWithCode:kErrCodeInvalidCredential + message:kErrMsgInvalidCredential + details:nil]); + return; + } + + if (error) { + completion(nil, + [FLTFirebaseAuthPlugin convertToFlutterError:error]); + } + + [currentUser + linkWithCredential:credential + completion:^(FIRAuthDataResult *authResult, + NSError *error) { + if (error != nil) { + if (error.code == + FIRAuthErrorCodeSecondFactorRequired) { + [self handleMultiFactorError:app + completion:completion + withError:error]; + } else { + completion(nil, [FLTFirebaseAuthPlugin + convertToFlutterError:error]); + } + } else { + completion( + [PigeonParser + getPigeonUserCredentialFromAuthResult: + authResult + authorizationCode:nil], + nil); + } + }]; + }]; +} + +- (void)linkWithProviderApp:(nonnull AuthPigeonFirebaseApp *)app + signInProvider:(nonnull InternalSignInProvider *)signInProvider + completion:(nonnull void (^)(InternalUserCredential *_Nullable, + FlutterError *_Nullable))completion { + FIRAuth *auth = [self getFIRAuthFromAppNameFromPigeon:app]; + FIRUser *currentUser = auth.currentUser; + if ([signInProvider.providerId isEqualToString:kSignInMethodGameCenter]) { + completion( + nil, + [FlutterError + errorWithCode:@"provider-link-failure" + message:@"Game Center provider requires linking with 'linkWithCredential()' API." + details:@{}]); + return; + } + + if (currentUser == nil) { + completion(nil, [FlutterError errorWithCode:kErrCodeNoCurrentUser + message:kErrMsgNoCurrentUser + details:nil]); + return; + } + + if ([signInProvider.providerId isEqualToString:kSignInMethodApple]) { + self.linkWithAppleUser = currentUser; + launchAppleSignInRequest(self, app, signInProvider, completion); + return; + } +#if TARGET_OS_OSX + NSLog(@"linkWithProvider is not supported on the " + @"MacOS platform."); + completion(nil, nil); +#else + self.authProvider = [FIROAuthProvider providerWithProviderID:signInProvider.providerId]; + NSArray *scopes = signInProvider.scopes; + if (scopes != nil) { + [self.authProvider setScopes:scopes]; + } + NSDictionary *customParameters = signInProvider.customParameters; + if (customParameters != nil) { + [self.authProvider setCustomParameters:customParameters]; + } + + [currentUser + linkWithProvider:self.authProvider + UIDelegate:nil + completion:^(FIRAuthDataResult *authResult, NSError *error) { + handleAppleAuthResult(self, app, auth, authResult.credential, error, completion); + }]; +#endif +} + +- (void)reauthenticateWithCredentialApp:(nonnull AuthPigeonFirebaseApp *)app + input:(nonnull NSDictionary *)input + completion:(nonnull void (^)(InternalUserCredential *_Nullable, + FlutterError *_Nullable))completion { + FIRAuth *auth = [self getFIRAuthFromAppNameFromPigeon:app]; + FIRUser *currentUser = auth.currentUser; + if (currentUser == nil) { + completion(nil, [FlutterError errorWithCode:kErrCodeNoCurrentUser + message:kErrMsgNoCurrentUser + details:nil]); + return; + } + + [self + getFIRAuthCredentialFromArguments:input + app:app + completion:^(FIRAuthCredential *credential, NSError *error) { + if (credential == nil) { + completion(nil, + [FlutterError errorWithCode:kErrCodeInvalidCredential + message:kErrMsgInvalidCredential + details:nil]); + return; + } + + if (error) { + completion(nil, + [FLTFirebaseAuthPlugin convertToFlutterError:error]); + } + + [currentUser + reauthenticateWithCredential:credential + completion:^(FIRAuthDataResult *authResult, + NSError *error) { + if (error != nil) { + if (error.code == + FIRAuthErrorCodeSecondFactorRequired) { + [self handleMultiFactorError:app + completion:completion + withError:error]; + } else { + completion( + nil, + [FLTFirebaseAuthPlugin + convertToFlutterError:error]); + } + } else { + completion( + [PigeonParser + getPigeonUserCredentialFromAuthResult: + authResult + authorizationCode: + nil], + nil); + } + }]; + }]; +} + +- (void)reauthenticateWithProviderApp:(nonnull AuthPigeonFirebaseApp *)app + signInProvider:(nonnull InternalSignInProvider *)signInProvider + completion:(nonnull void (^)(InternalUserCredential *_Nullable, + FlutterError *_Nullable))completion { + FIRAuth *auth = [self getFIRAuthFromAppNameFromPigeon:app]; + FIRUser *currentUser = auth.currentUser; + if (currentUser == nil) { + completion(nil, [FlutterError errorWithCode:kErrCodeNoCurrentUser + message:kErrMsgNoCurrentUser + details:nil]); + return; + } + + if ([signInProvider.providerId isEqualToString:kSignInMethodApple]) { + self.isReauthenticatingWithApple = YES; + launchAppleSignInRequest(self, app, signInProvider, completion); + return; + } +#if TARGET_OS_OSX + NSLog(@"reauthenticateWithProvider is not supported on the " + @"MacOS platform."); + completion(nil, nil); +#else + self.authProvider = [FIROAuthProvider providerWithProviderID:signInProvider.providerId]; + NSArray *scopes = signInProvider.scopes; + if (scopes != nil) { + [self.authProvider setScopes:scopes]; + } + NSDictionary *customParameters = signInProvider.customParameters; + if (customParameters != nil) { + [self.authProvider setCustomParameters:customParameters]; + } + + [currentUser reauthenticateWithProvider:self.authProvider + UIDelegate:nil + completion:^(FIRAuthDataResult *authResult, NSError *error) { + handleAppleAuthResult(self, app, auth, authResult.credential, + error, completion); + }]; +#endif +} + +- (void)reloadApp:(nonnull AuthPigeonFirebaseApp *)app + completion: + (nonnull void (^)(InternalUserDetails *_Nullable, FlutterError *_Nullable))completion { + FIRAuth *auth = [self getFIRAuthFromAppNameFromPigeon:app]; + FIRUser *currentUser = auth.currentUser; + if (currentUser == nil) { + completion(nil, [FlutterError errorWithCode:kErrCodeNoCurrentUser + message:kErrMsgNoCurrentUser + details:nil]); + return; + } + + [currentUser reloadWithCompletion:^(NSError *_Nullable error) { + if (error != nil) { + completion(nil, [FLTFirebaseAuthPlugin convertToFlutterError:error]); + } else { + completion([PigeonParser getPigeonDetails:currentUser], nil); + } + }]; +} + +- (void)sendEmailVerificationApp:(nonnull AuthPigeonFirebaseApp *)app + actionCodeSettings:(nullable InternalActionCodeSettings *)actionCodeSettings + completion:(nonnull void (^)(FlutterError *_Nullable))completion { + FIRAuth *auth = [self getFIRAuthFromAppNameFromPigeon:app]; + FIRUser *currentUser = auth.currentUser; + if (currentUser == nil) { + completion([FlutterError errorWithCode:kErrCodeNoCurrentUser + message:kErrMsgNoCurrentUser + details:nil]); + return; + } + + [currentUser + sendEmailVerificationWithActionCodeSettings:[PigeonParser + parseActionCodeSettings:actionCodeSettings] + + completion:^(NSError *_Nullable error) { + if (error != nil) { + completion( + [FLTFirebaseAuthPlugin convertToFlutterError:error]); + } else { + completion(nil); + } + }]; +} + +- (void)unlinkApp:(nonnull AuthPigeonFirebaseApp *)app + providerId:(nonnull NSString *)providerId + completion:(nonnull void (^)(InternalUserCredential *_Nullable, + FlutterError *_Nullable))completion { + FIRAuth *auth = [self getFIRAuthFromAppNameFromPigeon:app]; + FIRUser *currentUser = auth.currentUser; + if (currentUser == nil) { + completion(nil, [FlutterError errorWithCode:kErrCodeNoCurrentUser + message:kErrMsgNoCurrentUser + details:nil]); + return; + } + + [currentUser unlinkFromProvider:providerId + completion:^(FIRUser *_Nullable user, NSError *_Nullable error) { + if (error != nil) { + completion(nil, [FLTFirebaseAuthPlugin convertToFlutterError:error]); + } else { + completion([PigeonParser getPigeonUserCredentialFromFIRUser:user], nil); + } + }]; +} + +- (void)updateEmailApp:(nonnull AuthPigeonFirebaseApp *)app + newEmail:(nonnull NSString *)newEmail + completion:(nonnull void (^)(InternalUserDetails *_Nullable, + FlutterError *_Nullable))completion { + FIRAuth *auth = [self getFIRAuthFromAppNameFromPigeon:app]; + FIRUser *currentUser = auth.currentUser; + if (currentUser == nil) { + completion(nil, [FlutterError errorWithCode:kErrCodeNoCurrentUser + message:kErrMsgNoCurrentUser + details:nil]); + return; + } + + [currentUser updateEmail:newEmail + completion:^(NSError *_Nullable error) { + if (error != nil) { + completion(nil, [FLTFirebaseAuthPlugin convertToFlutterError:error]); + } else { + [currentUser reloadWithCompletion:^(NSError *_Nullable reloadError) { + if (reloadError != nil) { + completion(nil, [FLTFirebaseAuthPlugin convertToFlutterError:reloadError]); + } else { + completion([PigeonParser getPigeonDetails:currentUser], nil); + } + }]; + } + }]; +} + +- (void)updatePasswordApp:(nonnull AuthPigeonFirebaseApp *)app + newPassword:(nonnull NSString *)newPassword + completion:(nonnull void (^)(InternalUserDetails *_Nullable, + FlutterError *_Nullable))completion { + FIRAuth *auth = [self getFIRAuthFromAppNameFromPigeon:app]; + FIRUser *currentUser = auth.currentUser; + if (currentUser == nil) { + completion(nil, [FlutterError errorWithCode:kErrCodeNoCurrentUser + message:kErrMsgNoCurrentUser + details:nil]); + return; + } + + [currentUser + updatePassword:newPassword + completion:^(NSError *_Nullable error) { + if (error != nil) { + completion(nil, [FLTFirebaseAuthPlugin convertToFlutterError:error]); + } else { + [currentUser reloadWithCompletion:^(NSError *_Nullable reloadError) { + if (reloadError != nil) { + completion(nil, [FLTFirebaseAuthPlugin convertToFlutterError:reloadError]); + } else { + completion([PigeonParser getPigeonDetails:currentUser], nil); + } + }]; + } + }]; +} + +- (void)updatePhoneNumberApp:(nonnull AuthPigeonFirebaseApp *)app + input:(nonnull NSDictionary *)input + completion:(nonnull void (^)(InternalUserDetails *_Nullable, + FlutterError *_Nullable))completion { +#if TARGET_OS_IPHONE + FIRAuth *auth = [self getFIRAuthFromAppNameFromPigeon:app]; + FIRUser *currentUser = auth.currentUser; + if (currentUser == nil) { + completion(nil, [FlutterError errorWithCode:kErrCodeNoCurrentUser + message:kErrMsgNoCurrentUser + details:nil]); + return; + } + + [self + getFIRAuthCredentialFromArguments:input + app:app + completion:^(FIRAuthCredential *credential, NSError *error) { + if (credential == nil) { + completion(nil, + [FlutterError errorWithCode:kErrCodeInvalidCredential + message:kErrMsgInvalidCredential + details:nil]); + return; + } + + if (error) { + completion(nil, + [FLTFirebaseAuthPlugin convertToFlutterError:error]); + } + + [currentUser + updatePhoneNumberCredential:(FIRPhoneAuthCredential *)credential + completion:^(NSError *_Nullable error) { + if (error != nil) { + completion( + nil, [FLTFirebaseAuthPlugin + convertToFlutterError:error]); + } else { + [currentUser + reloadWithCompletion:^( + NSError *_Nullable reloadError) { + if (reloadError != nil) { + completion( + nil, [FLTFirebaseAuthPlugin + convertToFlutterError: + reloadError]); + } else { + completion( + [PigeonParser getPigeonDetails: + currentUser], + nil); + } + }]; + } + }]; + }]; +#else + NSLog(@"Updating a users phone number via Firebase Authentication is only " + @"supported on the iOS " + @"platform."); + completion(nil, nil); +#endif +} + +- (void)updateProfileApp:(nonnull AuthPigeonFirebaseApp *)app + profile:(nonnull InternalUserProfile *)profile + completion:(nonnull void (^)(InternalUserDetails *_Nullable, + FlutterError *_Nullable))completion { + FIRAuth *auth = [self getFIRAuthFromAppNameFromPigeon:app]; + FIRUser *currentUser = auth.currentUser; + if (currentUser == nil) { + completion(nil, [FlutterError errorWithCode:kErrCodeNoCurrentUser + message:kErrMsgNoCurrentUser + details:nil]); + return; + } + + FIRUserProfileChangeRequest *changeRequest = [currentUser profileChangeRequest]; + + if (profile.displayNameChanged) { + changeRequest.displayName = profile.displayName; + } + + if (profile.photoUrlChanged) { + if (profile.photoUrl == nil) { + // We apparently cannot set photoURL to nil/NULL to remove it. + // Instead, setting it to empty string appears to work. + // When doing so, Dart will properly receive `null` anyway. + changeRequest.photoURL = [NSURL URLWithString:@""]; + } else { + changeRequest.photoURL = [NSURL URLWithString:profile.photoUrl]; + } + } + + [changeRequest commitChangesWithCompletion:^(NSError *error) { + if (error != nil) { + completion(nil, [FLTFirebaseAuthPlugin convertToFlutterError:error]); + } else { + [currentUser reloadWithCompletion:^(NSError *_Nullable reloadError) { + if (reloadError != nil) { + completion(nil, [FLTFirebaseAuthPlugin convertToFlutterError:reloadError]); + } else { + completion([PigeonParser getPigeonDetails:currentUser], nil); + } + }]; + } + }]; +} + +- (void)verifyBeforeUpdateEmailApp:(nonnull AuthPigeonFirebaseApp *)app + newEmail:(nonnull NSString *)newEmail + actionCodeSettings:(nullable InternalActionCodeSettings *)actionCodeSettings + completion:(nonnull void (^)(FlutterError *_Nullable))completion { + FIRAuth *auth = [self getFIRAuthFromAppNameFromPigeon:app]; + FIRUser *currentUser = auth.currentUser; + if (currentUser == nil) { + completion([FlutterError errorWithCode:kErrCodeNoCurrentUser + message:kErrMsgNoCurrentUser + details:nil]); + return; + } + + [currentUser + sendEmailVerificationBeforeUpdatingEmail:newEmail + actionCodeSettings:[PigeonParser + parseActionCodeSettings:actionCodeSettings] + completion:^(NSError *error) { + if (error != nil) { + completion( + [FLTFirebaseAuthPlugin convertToFlutterError:error]); + } else { + completion(nil); + } + }]; +} + +- (void)initializeRecaptchaConfigApp:(AuthPigeonFirebaseApp *)app + completion:(void (^)(FlutterError *_Nullable))completion { +#if TARGET_OS_OSX + NSLog(@"initializeRecaptchaConfigWithCompletion is not supported on the " + @"MacOS platform."); + completion(nil); +#else + FIRAuth *auth = [self getFIRAuthFromAppNameFromPigeon:app]; + [auth initializeRecaptchaConfigWithCompletion:^(NSError *_Nullable error) { + if (error != nil) { + completion([FLTFirebaseAuthPlugin convertToFlutterError:error]); + } else { + completion(nil); + } + }]; +#endif +} + +@end diff --git a/mih_ui/android/build/macos/SourcePackages/firebase_auth-6.5.4/macos/firebase_auth/Sources/firebase_auth/FLTIdTokenChannelStreamHandler.m b/mih_ui/android/build/macos/SourcePackages/firebase_auth-6.5.4/macos/firebase_auth/Sources/firebase_auth/FLTIdTokenChannelStreamHandler.m new file mode 100644 index 00000000..315bc5ec --- /dev/null +++ b/mih_ui/android/build/macos/SourcePackages/firebase_auth-6.5.4/macos/firebase_auth/Sources/firebase_auth/FLTIdTokenChannelStreamHandler.m @@ -0,0 +1,54 @@ +// Copyright 2021 The Chromium Authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. +@import FirebaseAuth; +#import "include/Private/FLTIdTokenChannelStreamHandler.h" +#import +#import "include/Private/PigeonParser.h" +#import "include/Public/FLTFirebaseAuthPlugin.h" + +@implementation FLTIdTokenChannelStreamHandler { + FIRAuth *_auth; + FIRIDTokenDidChangeListenerHandle _listener; +} + +- (instancetype)initWithAuth:(FIRAuth *)auth { + self = [super init]; + if (self) { + _auth = auth; + } + return self; +} + +- (FlutterError *)onListenWithArguments:(id)arguments eventSink:(FlutterEventSink)events { + bool __block initialAuthState = YES; + + _listener = [_auth addIDTokenDidChangeListener:^(FIRAuth *_Nonnull auth, + FIRUser *_Nullable user) { + if (initialAuthState) { + initialAuthState = NO; + return; + } + + if (user) { + events(@{ + @"user" : [PigeonParser getManualList:[PigeonParser getPigeonDetails:[auth currentUser]]] + }); + } else { + events(@{@"user" : [NSNull null]}); + } + }]; + + return nil; +} + +- (FlutterError *)onCancelWithArguments:(id)arguments { + if (_listener) { + [_auth removeIDTokenDidChangeListener:_listener]; + } + _listener = nil; + + return nil; +} + +@end diff --git a/mih_ui/android/build/macos/SourcePackages/firebase_auth-6.5.4/macos/firebase_auth/Sources/firebase_auth/FLTPhoneNumberVerificationStreamHandler.m b/mih_ui/android/build/macos/SourcePackages/firebase_auth-6.5.4/macos/firebase_auth/Sources/firebase_auth/FLTPhoneNumberVerificationStreamHandler.m new file mode 100644 index 00000000..511d2caa --- /dev/null +++ b/mih_ui/android/build/macos/SourcePackages/firebase_auth-6.5.4/macos/firebase_auth/Sources/firebase_auth/FLTPhoneNumberVerificationStreamHandler.m @@ -0,0 +1,98 @@ +// Copyright 2021 The Chromium Authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +@import FirebaseAuth; + +#import "include/Private/FLTPhoneNumberVerificationStreamHandler.h" +#import "include/Public/FLTFirebaseAuthPlugin.h" + +@implementation FLTPhoneNumberVerificationStreamHandler { + FIRAuth *_auth; + NSString *_phoneNumber; +#if TARGET_OS_OSX +#else + FIRMultiFactorSession *_session; + FIRPhoneMultiFactorInfo *_factorInfo; +#endif +} + +#if TARGET_OS_OSX +- (instancetype)initWithAuth:(id)auth request:(InternalVerifyPhoneNumberRequest *)request { + self = [super init]; + if (self) { + _auth = auth; + _phoneNumber = request.phoneNumber; + } + return self; +} +#else +- (instancetype)initWithAuth:(id)auth + request:(InternalVerifyPhoneNumberRequest *)request + session:(FIRMultiFactorSession *)session + factorInfo:(FIRPhoneMultiFactorInfo *)factorInfo { + self = [super init]; + if (self) { + _auth = auth; + _phoneNumber = request.phoneNumber; + _session = session; + _factorInfo = factorInfo; + } + return self; +} +#endif + +- (FlutterError *)onListenWithArguments:(id)arguments eventSink:(FlutterEventSink)events { +#if TARGET_OS_IPHONE + id completer = ^(NSString *verificationID, NSError *error) { + if (error != nil) { + FlutterError *errorDetails = [FLTFirebaseAuthPlugin convertToFlutterError:error]; + events(@{ + @"name" : @"Auth#phoneVerificationFailed", + @"error" : @{ + @"code" : errorDetails.code, + @"message" : errorDetails.message, + @"details" : errorDetails.details, + } + }); + } else { + events(@{ + @"name" : @"Auth#phoneCodeSent", + @"verificationId" : verificationID, + }); + } + }; + + // Try catch to capture 'missing URL scheme' error. + @try { + if (_factorInfo != nil) { + [[FIRPhoneAuthProvider providerWithAuth:_auth] + verifyPhoneNumberWithMultiFactorInfo:_factorInfo + UIDelegate:nil + multiFactorSession:_session + completion:completer]; + + } else { + [[FIRPhoneAuthProvider providerWithAuth:_auth] verifyPhoneNumber:_phoneNumber + UIDelegate:nil + multiFactorSession:_session + completion:completer]; + } + } @catch (NSException *exception) { + events(@{ + @"name" : @"Auth#phoneVerificationFailed", + @"error" : @{ + @"message" : exception.reason, + } + }); + } +#endif + + return nil; +} + +- (FlutterError *)onCancelWithArguments:(id)arguments { + return nil; +} + +@end diff --git a/mih_ui/android/build/macos/SourcePackages/firebase_auth-6.5.4/macos/firebase_auth/Sources/firebase_auth/PigeonParser.m b/mih_ui/android/build/macos/SourcePackages/firebase_auth-6.5.4/macos/firebase_auth/Sources/firebase_auth/PigeonParser.m new file mode 100644 index 00000000..8d7a7b1c --- /dev/null +++ b/mih_ui/android/build/macos/SourcePackages/firebase_auth-6.5.4/macos/firebase_auth/Sources/firebase_auth/PigeonParser.m @@ -0,0 +1,171 @@ +// Copyright 2023, the Chromium project authors. Please see the AUTHORS file +// for details. All rights reserved. Use of this source code is governed by a +// BSD-style license that can be found in the LICENSE file. + +@import FirebaseAuth; + +#import "include/Private/PigeonParser.h" +#import +#import "include/Public/CustomPigeonHeader.h" + +@implementation PigeonParser + ++ (InternalUserCredential *) + getPigeonUserCredentialFromAuthResult:(nonnull FIRAuthDataResult *)authResult + authorizationCode:(nullable NSString *)authorizationCode { + return [InternalUserCredential + makeWithUser:[self getPigeonDetails:authResult.user] + additionalUserInfo:[self getPigeonAdditionalUserInfo:authResult.additionalUserInfo + authorizationCode:authorizationCode] + credential:[self getPigeonAuthCredential:authResult.credential token:nil]]; +} + ++ (InternalUserCredential *)getPigeonUserCredentialFromFIRUser:(nonnull FIRUser *)user { + return [InternalUserCredential makeWithUser:[self getPigeonDetails:user] + additionalUserInfo:nil + credential:nil]; +} + ++ (InternalUserDetails *)getPigeonDetails:(nonnull FIRUser *)user { + return [InternalUserDetails makeWithUserInfo:[self getPigeonUserInfo:user] + providerData:[self getProviderData:user.providerData]]; +} + ++ (InternalUserInfo *)getPigeonUserInfo:(nonnull FIRUser *)user { + NSString *photoUrlString = user.photoURL.absoluteString; + return [InternalUserInfo + makeWithUid:user.uid + email:user.email + displayName:user.displayName + photoUrl:(photoUrlString.length > 0) ? photoUrlString : nil + phoneNumber:user.phoneNumber + isAnonymous:user.isAnonymous + isEmailVerified:user.emailVerified + providerId:user.providerID + tenantId:user.tenantID + refreshToken:user.refreshToken + creationTimestamp:@((long)([user.metadata.creationDate timeIntervalSince1970] * 1000)) + lastSignInTimestamp:@((long)([user.metadata.lastSignInDate timeIntervalSince1970] * 1000))]; +} + ++ (NSArray *> *)getProviderData: + (nonnull NSArray> *)providerData { + NSMutableArray *> *dataArray = + [NSMutableArray arrayWithCapacity:providerData.count]; + + for (id userInfo in providerData) { + NSString *photoUrlStr = userInfo.photoURL.absoluteString; + NSDictionary *dataDict = @{ + @"providerId" : userInfo.providerID, + // Can be null on emulator + @"uid" : userInfo.uid ?: @"", + @"displayName" : userInfo.displayName ?: [NSNull null], + @"email" : userInfo.email ?: [NSNull null], + @"phoneNumber" : userInfo.phoneNumber ?: [NSNull null], + @"photoURL" : photoUrlStr ?: [NSNull null], + // isAnonymous is always false on in a providerData object (the user is not anonymous) + @"isAnonymous" : @NO, + // isEmailVerified is always true on in a providerData object (the email is verified by the + // provider) + @"isEmailVerified" : @YES, + }; + [dataArray addObject:dataDict]; + } + return [dataArray copy]; +} + ++ (InternalAdditionalUserInfo *)getPigeonAdditionalUserInfo: + (nonnull FIRAdditionalUserInfo *)userInfo + authorizationCode:(nullable NSString *)authorizationCode { + return [InternalAdditionalUserInfo makeWithIsNewUser:userInfo.isNewUser + providerId:userInfo.providerID + username:userInfo.username + authorizationCode:authorizationCode + profile:userInfo.profile]; +} + ++ (InternalTotpSecret *)getPigeonTotpSecret:(FIRTOTPSecret *)secret { + return [InternalTotpSecret makeWithCodeIntervalSeconds:nil + codeLength:nil + enrollmentCompletionDeadline:nil + hashingAlgorithm:nil + secretKey:secret.sharedSecretKey]; +} + ++ (InternalAuthCredential *)getPigeonAuthCredential:(FIRAuthCredential *)authCredential + token:(NSNumber *_Nullable)token { + if (authCredential == nil) { + return nil; + } + + NSString *accessToken = nil; + if ([authCredential isKindOfClass:[FIROAuthCredential class]]) { + if (((FIROAuthCredential *)authCredential).accessToken != nil) { + accessToken = ((FIROAuthCredential *)authCredential).accessToken; + } else if (((FIROAuthCredential *)authCredential).IDToken != nil) { + // For Sign In With Apple, the token is stored in IDToken + accessToken = ((FIROAuthCredential *)authCredential).IDToken; + } + } + + NSUInteger nativeId = + token != nil ? [token unsignedLongValue] : (NSUInteger)[authCredential hash]; + + return [InternalAuthCredential makeWithProviderId:authCredential.provider + signInMethod:authCredential.provider + nativeId:nativeId + accessToken:accessToken ?: nil]; +} + ++ (FIRActionCodeSettings *_Nullable)parseActionCodeSettings: + (nullable InternalActionCodeSettings *)settings { + if (settings == nil) { + return nil; + } + + FIRActionCodeSettings *codeSettings = [[FIRActionCodeSettings alloc] init]; + + if (settings.url != nil) { + codeSettings.URL = [NSURL URLWithString:settings.url]; + } + + if (settings.linkDomain != nil) { + codeSettings.linkDomain = settings.linkDomain; + } + + codeSettings.handleCodeInApp = settings.handleCodeInApp; + + if (settings.iOSBundleId != nil) { + codeSettings.iOSBundleID = settings.iOSBundleId; + } + + return codeSettings; +} + ++ (InternalIdTokenResult *)parseIdTokenResult:(FIRAuthTokenResult *)tokenResult { + long expirationTimestamp = (long)[tokenResult.expirationDate timeIntervalSince1970] * 1000; + long authTimestamp = (long)[tokenResult.authDate timeIntervalSince1970] * 1000; + long issuedAtTimestamp = (long)[tokenResult.issuedAtDate timeIntervalSince1970] * 1000; + + return [InternalIdTokenResult makeWithToken:tokenResult.token + expirationTimestamp:@(expirationTimestamp) + authTimestamp:@(authTimestamp) + issuedAtTimestamp:@(issuedAtTimestamp) + signInProvider:tokenResult.signInProvider + claims:tokenResult.claims + signInSecondFactor:tokenResult.signInSecondFactor]; +} + ++ (NSArray *_Nonnull)getManualList:(nonnull InternalUserDetails *)userDetails { + NSMutableArray *output = [NSMutableArray array]; + + id userInfoList = [[userDetails userInfo] toList]; + [output addObject:userInfoList]; + + id providerData = [userDetails providerData]; + [output addObject:providerData]; + + return [output copy]; +} + +@end diff --git a/mih_ui/android/build/macos/SourcePackages/firebase_auth-6.5.4/macos/firebase_auth/Sources/firebase_auth/firebase_auth_messages.g.m b/mih_ui/android/build/macos/SourcePackages/firebase_auth-6.5.4/macos/firebase_auth/Sources/firebase_auth/firebase_auth_messages.g.m new file mode 100644 index 00000000..82ae8cfc --- /dev/null +++ b/mih_ui/android/build/macos/SourcePackages/firebase_auth-6.5.4/macos/firebase_auth/Sources/firebase_auth/firebase_auth_messages.g.m @@ -0,0 +1,3005 @@ +// Copyright 2023, the Chromium project authors. Please see the AUTHORS file +// for details. All rights reserved. Use of this source code is governed by a +// BSD-style license that can be found in the LICENSE file. +// Autogenerated from Pigeon (v26.3.4), do not edit directly. +// See also: https://pub.dev/packages/pigeon + +#import "include/Public/firebase_auth_messages.g.h" + +#if TARGET_OS_OSX +@import FlutterMacOS; +#else +@import Flutter; +#endif + +static BOOL __attribute__((unused)) FLTPigeonDeepEquals(id _Nullable a, id _Nullable b) { + if (a == b) { + return YES; + } + if (a == nil) { + return b == [NSNull null]; + } + if (b == nil) { + return a == [NSNull null]; + } + if ([a isKindOfClass:[NSNumber class]] && [b isKindOfClass:[NSNumber class]]) { + return + [a isEqual:b] || (isnan([(NSNumber *)a doubleValue]) && isnan([(NSNumber *)b doubleValue])); + } + if ([a isKindOfClass:[NSArray class]] && [b isKindOfClass:[NSArray class]]) { + NSArray *arrayA = (NSArray *)a; + NSArray *arrayB = (NSArray *)b; + if (arrayA.count != arrayB.count) { + return NO; + } + for (NSUInteger i = 0; i < arrayA.count; i++) { + if (!FLTPigeonDeepEquals(arrayA[i], arrayB[i])) { + return NO; + } + } + return YES; + } + if ([a isKindOfClass:[NSDictionary class]] && [b isKindOfClass:[NSDictionary class]]) { + NSDictionary *dictA = (NSDictionary *)a; + NSDictionary *dictB = (NSDictionary *)b; + if (dictA.count != dictB.count) { + return NO; + } + for (id keyA in dictA) { + id valueA = dictA[keyA]; + BOOL found = NO; + for (id keyB in dictB) { + if (FLTPigeonDeepEquals(keyA, keyB)) { + id valueB = dictB[keyB]; + if (FLTPigeonDeepEquals(valueA, valueB)) { + found = YES; + break; + } else { + return NO; + } + } + } + if (!found) { + return NO; + } + } + return YES; + } + return [a isEqual:b]; +} + +static NSUInteger __attribute__((unused)) FLTPigeonDeepHash(id _Nullable value) { + if (value == nil || value == (id)[NSNull null]) { + return 0; + } + if ([value isKindOfClass:[NSNumber class]]) { + NSNumber *n = (NSNumber *)value; + double d = n.doubleValue; + if (isnan(d)) { + // Normalize NaN to a consistent hash. + return (NSUInteger)0x7FF8000000000000; + } + if (d == 0.0) { + // Normalize -0.0 to 0.0 so they have the same hash code. + d = 0.0; + } + return @(d).hash; + } + if ([value isKindOfClass:[NSArray class]]) { + NSUInteger result = 1; + for (id item in (NSArray *)value) { + result = result * 31 + FLTPigeonDeepHash(item); + } + return result; + } + if ([value isKindOfClass:[NSDictionary class]]) { + NSUInteger result = 0; + NSDictionary *dict = (NSDictionary *)value; + for (id key in dict) { + result += ((FLTPigeonDeepHash(key) * 31) ^ FLTPigeonDeepHash(dict[key])); + } + return result; + } + return [value hash]; +} + +static NSArray *wrapResult(id result, FlutterError *error) { + if (error) { + return @[ + error.code ?: [NSNull null], error.message ?: [NSNull null], error.details ?: [NSNull null] + ]; + } + return @[ result ?: [NSNull null] ]; +} + +static id GetNullableObjectAtIndex(NSArray *array, NSInteger key) { + id result = array[key]; + return (result == [NSNull null]) ? nil : result; +} + +/// The type of operation that generated the action code from calling +/// [checkActionCode]. +@implementation ActionCodeInfoOperationBox +- (instancetype)initWithValue:(ActionCodeInfoOperation)value { + self = [super init]; + if (self) { + _value = value; + } + return self; +} +@end + +@interface InternalMultiFactorSession () ++ (InternalMultiFactorSession *)fromList:(NSArray *)list; ++ (nullable InternalMultiFactorSession *)nullableFromList:(NSArray *)list; +- (NSArray *)toList; +@end + +@interface InternalPhoneMultiFactorAssertion () ++ (InternalPhoneMultiFactorAssertion *)fromList:(NSArray *)list; ++ (nullable InternalPhoneMultiFactorAssertion *)nullableFromList:(NSArray *)list; +- (NSArray *)toList; +@end + +@interface InternalMultiFactorInfo () ++ (InternalMultiFactorInfo *)fromList:(NSArray *)list; ++ (nullable InternalMultiFactorInfo *)nullableFromList:(NSArray *)list; +- (NSArray *)toList; +@end + +@interface AuthPigeonFirebaseApp () ++ (AuthPigeonFirebaseApp *)fromList:(NSArray *)list; ++ (nullable AuthPigeonFirebaseApp *)nullableFromList:(NSArray *)list; +- (NSArray *)toList; +@end + +@interface InternalActionCodeInfoData () ++ (InternalActionCodeInfoData *)fromList:(NSArray *)list; ++ (nullable InternalActionCodeInfoData *)nullableFromList:(NSArray *)list; +- (NSArray *)toList; +@end + +@interface InternalActionCodeInfo () ++ (InternalActionCodeInfo *)fromList:(NSArray *)list; ++ (nullable InternalActionCodeInfo *)nullableFromList:(NSArray *)list; +- (NSArray *)toList; +@end + +@interface InternalAdditionalUserInfo () ++ (InternalAdditionalUserInfo *)fromList:(NSArray *)list; ++ (nullable InternalAdditionalUserInfo *)nullableFromList:(NSArray *)list; +- (NSArray *)toList; +@end + +@interface InternalAuthCredential () ++ (InternalAuthCredential *)fromList:(NSArray *)list; ++ (nullable InternalAuthCredential *)nullableFromList:(NSArray *)list; +- (NSArray *)toList; +@end + +@interface InternalUserInfo () ++ (InternalUserInfo *)fromList:(NSArray *)list; ++ (nullable InternalUserInfo *)nullableFromList:(NSArray *)list; +- (NSArray *)toList; +@end + +@interface InternalUserDetails () ++ (InternalUserDetails *)fromList:(NSArray *)list; ++ (nullable InternalUserDetails *)nullableFromList:(NSArray *)list; +- (NSArray *)toList; +@end + +@interface InternalUserCredential () ++ (InternalUserCredential *)fromList:(NSArray *)list; ++ (nullable InternalUserCredential *)nullableFromList:(NSArray *)list; +- (NSArray *)toList; +@end + +@interface InternalAuthCredentialInput () ++ (InternalAuthCredentialInput *)fromList:(NSArray *)list; ++ (nullable InternalAuthCredentialInput *)nullableFromList:(NSArray *)list; +- (NSArray *)toList; +@end + +@interface InternalActionCodeSettings () ++ (InternalActionCodeSettings *)fromList:(NSArray *)list; ++ (nullable InternalActionCodeSettings *)nullableFromList:(NSArray *)list; +- (NSArray *)toList; +@end + +@interface InternalFirebaseAuthSettings () ++ (InternalFirebaseAuthSettings *)fromList:(NSArray *)list; ++ (nullable InternalFirebaseAuthSettings *)nullableFromList:(NSArray *)list; +- (NSArray *)toList; +@end + +@interface InternalSignInProvider () ++ (InternalSignInProvider *)fromList:(NSArray *)list; ++ (nullable InternalSignInProvider *)nullableFromList:(NSArray *)list; +- (NSArray *)toList; +@end + +@interface InternalVerifyPhoneNumberRequest () ++ (InternalVerifyPhoneNumberRequest *)fromList:(NSArray *)list; ++ (nullable InternalVerifyPhoneNumberRequest *)nullableFromList:(NSArray *)list; +- (NSArray *)toList; +@end + +@interface InternalIdTokenResult () ++ (InternalIdTokenResult *)fromList:(NSArray *)list; ++ (nullable InternalIdTokenResult *)nullableFromList:(NSArray *)list; +- (NSArray *)toList; +@end + +@interface InternalUserProfile () ++ (InternalUserProfile *)fromList:(NSArray *)list; ++ (nullable InternalUserProfile *)nullableFromList:(NSArray *)list; +- (NSArray *)toList; +@end + +@interface InternalTotpSecret () ++ (InternalTotpSecret *)fromList:(NSArray *)list; ++ (nullable InternalTotpSecret *)nullableFromList:(NSArray *)list; +- (NSArray *)toList; +@end + +@implementation InternalMultiFactorSession ++ (instancetype)makeWithId:(NSString *)id { + InternalMultiFactorSession *pigeonResult = [[InternalMultiFactorSession alloc] init]; + pigeonResult.id = id; + return pigeonResult; +} ++ (InternalMultiFactorSession *)fromList:(NSArray *)list { + InternalMultiFactorSession *pigeonResult = [[InternalMultiFactorSession alloc] init]; + pigeonResult.id = GetNullableObjectAtIndex(list, 0); + return pigeonResult; +} ++ (nullable InternalMultiFactorSession *)nullableFromList:(NSArray *)list { + return (list) ? [InternalMultiFactorSession fromList:list] : nil; +} +- (NSArray *)toList { + return @[ + self.id ?: [NSNull null], + ]; +} +- (BOOL)isEqual:(id)object { + if (self == object) { + return YES; + } + if (![object isKindOfClass:[self class]]) { + return NO; + } + InternalMultiFactorSession *other = (InternalMultiFactorSession *)object; + return FLTPigeonDeepEquals(self.id, other.id); +} + +- (NSUInteger)hash { + NSUInteger result = [self class].hash; + result = result * 31 + FLTPigeonDeepHash(self.id); + return result; +} +@end + +@implementation InternalPhoneMultiFactorAssertion ++ (instancetype)makeWithVerificationId:(NSString *)verificationId + verificationCode:(NSString *)verificationCode { + InternalPhoneMultiFactorAssertion *pigeonResult = + [[InternalPhoneMultiFactorAssertion alloc] init]; + pigeonResult.verificationId = verificationId; + pigeonResult.verificationCode = verificationCode; + return pigeonResult; +} ++ (InternalPhoneMultiFactorAssertion *)fromList:(NSArray *)list { + InternalPhoneMultiFactorAssertion *pigeonResult = + [[InternalPhoneMultiFactorAssertion alloc] init]; + pigeonResult.verificationId = GetNullableObjectAtIndex(list, 0); + pigeonResult.verificationCode = GetNullableObjectAtIndex(list, 1); + return pigeonResult; +} ++ (nullable InternalPhoneMultiFactorAssertion *)nullableFromList:(NSArray *)list { + return (list) ? [InternalPhoneMultiFactorAssertion fromList:list] : nil; +} +- (NSArray *)toList { + return @[ + self.verificationId ?: [NSNull null], + self.verificationCode ?: [NSNull null], + ]; +} +- (BOOL)isEqual:(id)object { + if (self == object) { + return YES; + } + if (![object isKindOfClass:[self class]]) { + return NO; + } + InternalPhoneMultiFactorAssertion *other = (InternalPhoneMultiFactorAssertion *)object; + return FLTPigeonDeepEquals(self.verificationId, other.verificationId) && + FLTPigeonDeepEquals(self.verificationCode, other.verificationCode); +} + +- (NSUInteger)hash { + NSUInteger result = [self class].hash; + result = result * 31 + FLTPigeonDeepHash(self.verificationId); + result = result * 31 + FLTPigeonDeepHash(self.verificationCode); + return result; +} +@end + +@implementation InternalMultiFactorInfo ++ (instancetype)makeWithDisplayName:(nullable NSString *)displayName + enrollmentTimestamp:(double)enrollmentTimestamp + factorId:(nullable NSString *)factorId + uid:(NSString *)uid + phoneNumber:(nullable NSString *)phoneNumber { + InternalMultiFactorInfo *pigeonResult = [[InternalMultiFactorInfo alloc] init]; + pigeonResult.displayName = displayName; + pigeonResult.enrollmentTimestamp = enrollmentTimestamp; + pigeonResult.factorId = factorId; + pigeonResult.uid = uid; + pigeonResult.phoneNumber = phoneNumber; + return pigeonResult; +} ++ (InternalMultiFactorInfo *)fromList:(NSArray *)list { + InternalMultiFactorInfo *pigeonResult = [[InternalMultiFactorInfo alloc] init]; + pigeonResult.displayName = GetNullableObjectAtIndex(list, 0); + pigeonResult.enrollmentTimestamp = [GetNullableObjectAtIndex(list, 1) doubleValue]; + pigeonResult.factorId = GetNullableObjectAtIndex(list, 2); + pigeonResult.uid = GetNullableObjectAtIndex(list, 3); + pigeonResult.phoneNumber = GetNullableObjectAtIndex(list, 4); + return pigeonResult; +} ++ (nullable InternalMultiFactorInfo *)nullableFromList:(NSArray *)list { + return (list) ? [InternalMultiFactorInfo fromList:list] : nil; +} +- (NSArray *)toList { + return @[ + self.displayName ?: [NSNull null], + @(self.enrollmentTimestamp), + self.factorId ?: [NSNull null], + self.uid ?: [NSNull null], + self.phoneNumber ?: [NSNull null], + ]; +} +- (BOOL)isEqual:(id)object { + if (self == object) { + return YES; + } + if (![object isKindOfClass:[self class]]) { + return NO; + } + InternalMultiFactorInfo *other = (InternalMultiFactorInfo *)object; + return FLTPigeonDeepEquals(self.displayName, other.displayName) && + (self.enrollmentTimestamp == other.enrollmentTimestamp || + (isnan(self.enrollmentTimestamp) && isnan(other.enrollmentTimestamp))) && + FLTPigeonDeepEquals(self.factorId, other.factorId) && + FLTPigeonDeepEquals(self.uid, other.uid) && + FLTPigeonDeepEquals(self.phoneNumber, other.phoneNumber); +} + +- (NSUInteger)hash { + NSUInteger result = [self class].hash; + result = result * 31 + FLTPigeonDeepHash(self.displayName); + result = result * 31 + (isnan(self.enrollmentTimestamp) ? (NSUInteger)0x7FF8000000000000 + : @(self.enrollmentTimestamp).hash); + result = result * 31 + FLTPigeonDeepHash(self.factorId); + result = result * 31 + FLTPigeonDeepHash(self.uid); + result = result * 31 + FLTPigeonDeepHash(self.phoneNumber); + return result; +} +@end + +@implementation AuthPigeonFirebaseApp ++ (instancetype)makeWithAppName:(NSString *)appName + tenantId:(nullable NSString *)tenantId + customAuthDomain:(nullable NSString *)customAuthDomain { + AuthPigeonFirebaseApp *pigeonResult = [[AuthPigeonFirebaseApp alloc] init]; + pigeonResult.appName = appName; + pigeonResult.tenantId = tenantId; + pigeonResult.customAuthDomain = customAuthDomain; + return pigeonResult; +} ++ (AuthPigeonFirebaseApp *)fromList:(NSArray *)list { + AuthPigeonFirebaseApp *pigeonResult = [[AuthPigeonFirebaseApp alloc] init]; + pigeonResult.appName = GetNullableObjectAtIndex(list, 0); + pigeonResult.tenantId = GetNullableObjectAtIndex(list, 1); + pigeonResult.customAuthDomain = GetNullableObjectAtIndex(list, 2); + return pigeonResult; +} ++ (nullable AuthPigeonFirebaseApp *)nullableFromList:(NSArray *)list { + return (list) ? [AuthPigeonFirebaseApp fromList:list] : nil; +} +- (NSArray *)toList { + return @[ + self.appName ?: [NSNull null], + self.tenantId ?: [NSNull null], + self.customAuthDomain ?: [NSNull null], + ]; +} +- (BOOL)isEqual:(id)object { + if (self == object) { + return YES; + } + if (![object isKindOfClass:[self class]]) { + return NO; + } + AuthPigeonFirebaseApp *other = (AuthPigeonFirebaseApp *)object; + return FLTPigeonDeepEquals(self.appName, other.appName) && + FLTPigeonDeepEquals(self.tenantId, other.tenantId) && + FLTPigeonDeepEquals(self.customAuthDomain, other.customAuthDomain); +} + +- (NSUInteger)hash { + NSUInteger result = [self class].hash; + result = result * 31 + FLTPigeonDeepHash(self.appName); + result = result * 31 + FLTPigeonDeepHash(self.tenantId); + result = result * 31 + FLTPigeonDeepHash(self.customAuthDomain); + return result; +} +@end + +@implementation InternalActionCodeInfoData ++ (instancetype)makeWithEmail:(nullable NSString *)email + previousEmail:(nullable NSString *)previousEmail { + InternalActionCodeInfoData *pigeonResult = [[InternalActionCodeInfoData alloc] init]; + pigeonResult.email = email; + pigeonResult.previousEmail = previousEmail; + return pigeonResult; +} ++ (InternalActionCodeInfoData *)fromList:(NSArray *)list { + InternalActionCodeInfoData *pigeonResult = [[InternalActionCodeInfoData alloc] init]; + pigeonResult.email = GetNullableObjectAtIndex(list, 0); + pigeonResult.previousEmail = GetNullableObjectAtIndex(list, 1); + return pigeonResult; +} ++ (nullable InternalActionCodeInfoData *)nullableFromList:(NSArray *)list { + return (list) ? [InternalActionCodeInfoData fromList:list] : nil; +} +- (NSArray *)toList { + return @[ + self.email ?: [NSNull null], + self.previousEmail ?: [NSNull null], + ]; +} +- (BOOL)isEqual:(id)object { + if (self == object) { + return YES; + } + if (![object isKindOfClass:[self class]]) { + return NO; + } + InternalActionCodeInfoData *other = (InternalActionCodeInfoData *)object; + return FLTPigeonDeepEquals(self.email, other.email) && + FLTPigeonDeepEquals(self.previousEmail, other.previousEmail); +} + +- (NSUInteger)hash { + NSUInteger result = [self class].hash; + result = result * 31 + FLTPigeonDeepHash(self.email); + result = result * 31 + FLTPigeonDeepHash(self.previousEmail); + return result; +} +@end + +@implementation InternalActionCodeInfo ++ (instancetype)makeWithOperation:(ActionCodeInfoOperation)operation + data:(InternalActionCodeInfoData *)data { + InternalActionCodeInfo *pigeonResult = [[InternalActionCodeInfo alloc] init]; + pigeonResult.operation = operation; + pigeonResult.data = data; + return pigeonResult; +} ++ (InternalActionCodeInfo *)fromList:(NSArray *)list { + InternalActionCodeInfo *pigeonResult = [[InternalActionCodeInfo alloc] init]; + ActionCodeInfoOperationBox *boxedActionCodeInfoOperation = GetNullableObjectAtIndex(list, 0); + pigeonResult.operation = boxedActionCodeInfoOperation.value; + pigeonResult.data = GetNullableObjectAtIndex(list, 1); + return pigeonResult; +} ++ (nullable InternalActionCodeInfo *)nullableFromList:(NSArray *)list { + return (list) ? [InternalActionCodeInfo fromList:list] : nil; +} +- (NSArray *)toList { + return @[ + [[ActionCodeInfoOperationBox alloc] initWithValue:self.operation], + self.data ?: [NSNull null], + ]; +} +- (BOOL)isEqual:(id)object { + if (self == object) { + return YES; + } + if (![object isKindOfClass:[self class]]) { + return NO; + } + InternalActionCodeInfo *other = (InternalActionCodeInfo *)object; + return self.operation == other.operation && FLTPigeonDeepEquals(self.data, other.data); +} + +- (NSUInteger)hash { + NSUInteger result = [self class].hash; + result = result * 31 + @(self.operation).hash; + result = result * 31 + FLTPigeonDeepHash(self.data); + return result; +} +@end + +@implementation InternalAdditionalUserInfo ++ (instancetype)makeWithIsNewUser:(BOOL)isNewUser + providerId:(nullable NSString *)providerId + username:(nullable NSString *)username + authorizationCode:(nullable NSString *)authorizationCode + profile:(nullable NSDictionary *)profile { + InternalAdditionalUserInfo *pigeonResult = [[InternalAdditionalUserInfo alloc] init]; + pigeonResult.isNewUser = isNewUser; + pigeonResult.providerId = providerId; + pigeonResult.username = username; + pigeonResult.authorizationCode = authorizationCode; + pigeonResult.profile = profile; + return pigeonResult; +} ++ (InternalAdditionalUserInfo *)fromList:(NSArray *)list { + InternalAdditionalUserInfo *pigeonResult = [[InternalAdditionalUserInfo alloc] init]; + pigeonResult.isNewUser = [GetNullableObjectAtIndex(list, 0) boolValue]; + pigeonResult.providerId = GetNullableObjectAtIndex(list, 1); + pigeonResult.username = GetNullableObjectAtIndex(list, 2); + pigeonResult.authorizationCode = GetNullableObjectAtIndex(list, 3); + pigeonResult.profile = GetNullableObjectAtIndex(list, 4); + return pigeonResult; +} ++ (nullable InternalAdditionalUserInfo *)nullableFromList:(NSArray *)list { + return (list) ? [InternalAdditionalUserInfo fromList:list] : nil; +} +- (NSArray *)toList { + return @[ + @(self.isNewUser), + self.providerId ?: [NSNull null], + self.username ?: [NSNull null], + self.authorizationCode ?: [NSNull null], + self.profile ?: [NSNull null], + ]; +} +- (BOOL)isEqual:(id)object { + if (self == object) { + return YES; + } + if (![object isKindOfClass:[self class]]) { + return NO; + } + InternalAdditionalUserInfo *other = (InternalAdditionalUserInfo *)object; + return self.isNewUser == other.isNewUser && + FLTPigeonDeepEquals(self.providerId, other.providerId) && + FLTPigeonDeepEquals(self.username, other.username) && + FLTPigeonDeepEquals(self.authorizationCode, other.authorizationCode) && + FLTPigeonDeepEquals(self.profile, other.profile); +} + +- (NSUInteger)hash { + NSUInteger result = [self class].hash; + result = result * 31 + @(self.isNewUser).hash; + result = result * 31 + FLTPigeonDeepHash(self.providerId); + result = result * 31 + FLTPigeonDeepHash(self.username); + result = result * 31 + FLTPigeonDeepHash(self.authorizationCode); + result = result * 31 + FLTPigeonDeepHash(self.profile); + return result; +} +@end + +@implementation InternalAuthCredential ++ (instancetype)makeWithProviderId:(NSString *)providerId + signInMethod:(NSString *)signInMethod + nativeId:(NSInteger)nativeId + accessToken:(nullable NSString *)accessToken { + InternalAuthCredential *pigeonResult = [[InternalAuthCredential alloc] init]; + pigeonResult.providerId = providerId; + pigeonResult.signInMethod = signInMethod; + pigeonResult.nativeId = nativeId; + pigeonResult.accessToken = accessToken; + return pigeonResult; +} ++ (InternalAuthCredential *)fromList:(NSArray *)list { + InternalAuthCredential *pigeonResult = [[InternalAuthCredential alloc] init]; + pigeonResult.providerId = GetNullableObjectAtIndex(list, 0); + pigeonResult.signInMethod = GetNullableObjectAtIndex(list, 1); + pigeonResult.nativeId = [GetNullableObjectAtIndex(list, 2) integerValue]; + pigeonResult.accessToken = GetNullableObjectAtIndex(list, 3); + return pigeonResult; +} ++ (nullable InternalAuthCredential *)nullableFromList:(NSArray *)list { + return (list) ? [InternalAuthCredential fromList:list] : nil; +} +- (NSArray *)toList { + return @[ + self.providerId ?: [NSNull null], + self.signInMethod ?: [NSNull null], + @(self.nativeId), + self.accessToken ?: [NSNull null], + ]; +} +- (BOOL)isEqual:(id)object { + if (self == object) { + return YES; + } + if (![object isKindOfClass:[self class]]) { + return NO; + } + InternalAuthCredential *other = (InternalAuthCredential *)object; + return FLTPigeonDeepEquals(self.providerId, other.providerId) && + FLTPigeonDeepEquals(self.signInMethod, other.signInMethod) && + self.nativeId == other.nativeId && + FLTPigeonDeepEquals(self.accessToken, other.accessToken); +} + +- (NSUInteger)hash { + NSUInteger result = [self class].hash; + result = result * 31 + FLTPigeonDeepHash(self.providerId); + result = result * 31 + FLTPigeonDeepHash(self.signInMethod); + result = result * 31 + @(self.nativeId).hash; + result = result * 31 + FLTPigeonDeepHash(self.accessToken); + return result; +} +@end + +@implementation InternalUserInfo ++ (instancetype)makeWithUid:(NSString *)uid + email:(nullable NSString *)email + displayName:(nullable NSString *)displayName + photoUrl:(nullable NSString *)photoUrl + phoneNumber:(nullable NSString *)phoneNumber + isAnonymous:(BOOL)isAnonymous + isEmailVerified:(BOOL)isEmailVerified + providerId:(nullable NSString *)providerId + tenantId:(nullable NSString *)tenantId + refreshToken:(nullable NSString *)refreshToken + creationTimestamp:(nullable NSNumber *)creationTimestamp + lastSignInTimestamp:(nullable NSNumber *)lastSignInTimestamp { + InternalUserInfo *pigeonResult = [[InternalUserInfo alloc] init]; + pigeonResult.uid = uid; + pigeonResult.email = email; + pigeonResult.displayName = displayName; + pigeonResult.photoUrl = photoUrl; + pigeonResult.phoneNumber = phoneNumber; + pigeonResult.isAnonymous = isAnonymous; + pigeonResult.isEmailVerified = isEmailVerified; + pigeonResult.providerId = providerId; + pigeonResult.tenantId = tenantId; + pigeonResult.refreshToken = refreshToken; + pigeonResult.creationTimestamp = creationTimestamp; + pigeonResult.lastSignInTimestamp = lastSignInTimestamp; + return pigeonResult; +} ++ (InternalUserInfo *)fromList:(NSArray *)list { + InternalUserInfo *pigeonResult = [[InternalUserInfo alloc] init]; + pigeonResult.uid = GetNullableObjectAtIndex(list, 0); + pigeonResult.email = GetNullableObjectAtIndex(list, 1); + pigeonResult.displayName = GetNullableObjectAtIndex(list, 2); + pigeonResult.photoUrl = GetNullableObjectAtIndex(list, 3); + pigeonResult.phoneNumber = GetNullableObjectAtIndex(list, 4); + pigeonResult.isAnonymous = [GetNullableObjectAtIndex(list, 5) boolValue]; + pigeonResult.isEmailVerified = [GetNullableObjectAtIndex(list, 6) boolValue]; + pigeonResult.providerId = GetNullableObjectAtIndex(list, 7); + pigeonResult.tenantId = GetNullableObjectAtIndex(list, 8); + pigeonResult.refreshToken = GetNullableObjectAtIndex(list, 9); + pigeonResult.creationTimestamp = GetNullableObjectAtIndex(list, 10); + pigeonResult.lastSignInTimestamp = GetNullableObjectAtIndex(list, 11); + return pigeonResult; +} ++ (nullable InternalUserInfo *)nullableFromList:(NSArray *)list { + return (list) ? [InternalUserInfo fromList:list] : nil; +} +- (NSArray *)toList { + return @[ + self.uid ?: [NSNull null], + self.email ?: [NSNull null], + self.displayName ?: [NSNull null], + self.photoUrl ?: [NSNull null], + self.phoneNumber ?: [NSNull null], + @(self.isAnonymous), + @(self.isEmailVerified), + self.providerId ?: [NSNull null], + self.tenantId ?: [NSNull null], + self.refreshToken ?: [NSNull null], + self.creationTimestamp ?: [NSNull null], + self.lastSignInTimestamp ?: [NSNull null], + ]; +} +- (BOOL)isEqual:(id)object { + if (self == object) { + return YES; + } + if (![object isKindOfClass:[self class]]) { + return NO; + } + InternalUserInfo *other = (InternalUserInfo *)object; + return FLTPigeonDeepEquals(self.uid, other.uid) && FLTPigeonDeepEquals(self.email, other.email) && + FLTPigeonDeepEquals(self.displayName, other.displayName) && + FLTPigeonDeepEquals(self.photoUrl, other.photoUrl) && + FLTPigeonDeepEquals(self.phoneNumber, other.phoneNumber) && + self.isAnonymous == other.isAnonymous && self.isEmailVerified == other.isEmailVerified && + FLTPigeonDeepEquals(self.providerId, other.providerId) && + FLTPigeonDeepEquals(self.tenantId, other.tenantId) && + FLTPigeonDeepEquals(self.refreshToken, other.refreshToken) && + FLTPigeonDeepEquals(self.creationTimestamp, other.creationTimestamp) && + FLTPigeonDeepEquals(self.lastSignInTimestamp, other.lastSignInTimestamp); +} + +- (NSUInteger)hash { + NSUInteger result = [self class].hash; + result = result * 31 + FLTPigeonDeepHash(self.uid); + result = result * 31 + FLTPigeonDeepHash(self.email); + result = result * 31 + FLTPigeonDeepHash(self.displayName); + result = result * 31 + FLTPigeonDeepHash(self.photoUrl); + result = result * 31 + FLTPigeonDeepHash(self.phoneNumber); + result = result * 31 + @(self.isAnonymous).hash; + result = result * 31 + @(self.isEmailVerified).hash; + result = result * 31 + FLTPigeonDeepHash(self.providerId); + result = result * 31 + FLTPigeonDeepHash(self.tenantId); + result = result * 31 + FLTPigeonDeepHash(self.refreshToken); + result = result * 31 + FLTPigeonDeepHash(self.creationTimestamp); + result = result * 31 + FLTPigeonDeepHash(self.lastSignInTimestamp); + return result; +} +@end + +@implementation InternalUserDetails ++ (instancetype)makeWithUserInfo:(InternalUserInfo *)userInfo + providerData:(NSArray *> *)providerData { + InternalUserDetails *pigeonResult = [[InternalUserDetails alloc] init]; + pigeonResult.userInfo = userInfo; + pigeonResult.providerData = providerData; + return pigeonResult; +} ++ (InternalUserDetails *)fromList:(NSArray *)list { + InternalUserDetails *pigeonResult = [[InternalUserDetails alloc] init]; + pigeonResult.userInfo = GetNullableObjectAtIndex(list, 0); + pigeonResult.providerData = GetNullableObjectAtIndex(list, 1); + return pigeonResult; +} ++ (nullable InternalUserDetails *)nullableFromList:(NSArray *)list { + return (list) ? [InternalUserDetails fromList:list] : nil; +} +- (NSArray *)toList { + return @[ + self.userInfo ?: [NSNull null], + self.providerData ?: [NSNull null], + ]; +} +- (BOOL)isEqual:(id)object { + if (self == object) { + return YES; + } + if (![object isKindOfClass:[self class]]) { + return NO; + } + InternalUserDetails *other = (InternalUserDetails *)object; + return FLTPigeonDeepEquals(self.userInfo, other.userInfo) && + FLTPigeonDeepEquals(self.providerData, other.providerData); +} + +- (NSUInteger)hash { + NSUInteger result = [self class].hash; + result = result * 31 + FLTPigeonDeepHash(self.userInfo); + result = result * 31 + FLTPigeonDeepHash(self.providerData); + return result; +} +@end + +@implementation InternalUserCredential ++ (instancetype)makeWithUser:(nullable InternalUserDetails *)user + additionalUserInfo:(nullable InternalAdditionalUserInfo *)additionalUserInfo + credential:(nullable InternalAuthCredential *)credential { + InternalUserCredential *pigeonResult = [[InternalUserCredential alloc] init]; + pigeonResult.user = user; + pigeonResult.additionalUserInfo = additionalUserInfo; + pigeonResult.credential = credential; + return pigeonResult; +} ++ (InternalUserCredential *)fromList:(NSArray *)list { + InternalUserCredential *pigeonResult = [[InternalUserCredential alloc] init]; + pigeonResult.user = GetNullableObjectAtIndex(list, 0); + pigeonResult.additionalUserInfo = GetNullableObjectAtIndex(list, 1); + pigeonResult.credential = GetNullableObjectAtIndex(list, 2); + return pigeonResult; +} ++ (nullable InternalUserCredential *)nullableFromList:(NSArray *)list { + return (list) ? [InternalUserCredential fromList:list] : nil; +} +- (NSArray *)toList { + return @[ + self.user ?: [NSNull null], + self.additionalUserInfo ?: [NSNull null], + self.credential ?: [NSNull null], + ]; +} +- (BOOL)isEqual:(id)object { + if (self == object) { + return YES; + } + if (![object isKindOfClass:[self class]]) { + return NO; + } + InternalUserCredential *other = (InternalUserCredential *)object; + return FLTPigeonDeepEquals(self.user, other.user) && + FLTPigeonDeepEquals(self.additionalUserInfo, other.additionalUserInfo) && + FLTPigeonDeepEquals(self.credential, other.credential); +} + +- (NSUInteger)hash { + NSUInteger result = [self class].hash; + result = result * 31 + FLTPigeonDeepHash(self.user); + result = result * 31 + FLTPigeonDeepHash(self.additionalUserInfo); + result = result * 31 + FLTPigeonDeepHash(self.credential); + return result; +} +@end + +@implementation InternalAuthCredentialInput ++ (instancetype)makeWithProviderId:(NSString *)providerId + signInMethod:(NSString *)signInMethod + token:(nullable NSString *)token + accessToken:(nullable NSString *)accessToken { + InternalAuthCredentialInput *pigeonResult = [[InternalAuthCredentialInput alloc] init]; + pigeonResult.providerId = providerId; + pigeonResult.signInMethod = signInMethod; + pigeonResult.token = token; + pigeonResult.accessToken = accessToken; + return pigeonResult; +} ++ (InternalAuthCredentialInput *)fromList:(NSArray *)list { + InternalAuthCredentialInput *pigeonResult = [[InternalAuthCredentialInput alloc] init]; + pigeonResult.providerId = GetNullableObjectAtIndex(list, 0); + pigeonResult.signInMethod = GetNullableObjectAtIndex(list, 1); + pigeonResult.token = GetNullableObjectAtIndex(list, 2); + pigeonResult.accessToken = GetNullableObjectAtIndex(list, 3); + return pigeonResult; +} ++ (nullable InternalAuthCredentialInput *)nullableFromList:(NSArray *)list { + return (list) ? [InternalAuthCredentialInput fromList:list] : nil; +} +- (NSArray *)toList { + return @[ + self.providerId ?: [NSNull null], + self.signInMethod ?: [NSNull null], + self.token ?: [NSNull null], + self.accessToken ?: [NSNull null], + ]; +} +- (BOOL)isEqual:(id)object { + if (self == object) { + return YES; + } + if (![object isKindOfClass:[self class]]) { + return NO; + } + InternalAuthCredentialInput *other = (InternalAuthCredentialInput *)object; + return FLTPigeonDeepEquals(self.providerId, other.providerId) && + FLTPigeonDeepEquals(self.signInMethod, other.signInMethod) && + FLTPigeonDeepEquals(self.token, other.token) && + FLTPigeonDeepEquals(self.accessToken, other.accessToken); +} + +- (NSUInteger)hash { + NSUInteger result = [self class].hash; + result = result * 31 + FLTPigeonDeepHash(self.providerId); + result = result * 31 + FLTPigeonDeepHash(self.signInMethod); + result = result * 31 + FLTPigeonDeepHash(self.token); + result = result * 31 + FLTPigeonDeepHash(self.accessToken); + return result; +} +@end + +@implementation InternalActionCodeSettings ++ (instancetype)makeWithUrl:(NSString *)url + dynamicLinkDomain:(nullable NSString *)dynamicLinkDomain + handleCodeInApp:(BOOL)handleCodeInApp + iOSBundleId:(nullable NSString *)iOSBundleId + androidPackageName:(nullable NSString *)androidPackageName + androidInstallApp:(BOOL)androidInstallApp + androidMinimumVersion:(nullable NSString *)androidMinimumVersion + linkDomain:(nullable NSString *)linkDomain { + InternalActionCodeSettings *pigeonResult = [[InternalActionCodeSettings alloc] init]; + pigeonResult.url = url; + pigeonResult.dynamicLinkDomain = dynamicLinkDomain; + pigeonResult.handleCodeInApp = handleCodeInApp; + pigeonResult.iOSBundleId = iOSBundleId; + pigeonResult.androidPackageName = androidPackageName; + pigeonResult.androidInstallApp = androidInstallApp; + pigeonResult.androidMinimumVersion = androidMinimumVersion; + pigeonResult.linkDomain = linkDomain; + return pigeonResult; +} ++ (InternalActionCodeSettings *)fromList:(NSArray *)list { + InternalActionCodeSettings *pigeonResult = [[InternalActionCodeSettings alloc] init]; + pigeonResult.url = GetNullableObjectAtIndex(list, 0); + pigeonResult.dynamicLinkDomain = GetNullableObjectAtIndex(list, 1); + pigeonResult.handleCodeInApp = [GetNullableObjectAtIndex(list, 2) boolValue]; + pigeonResult.iOSBundleId = GetNullableObjectAtIndex(list, 3); + pigeonResult.androidPackageName = GetNullableObjectAtIndex(list, 4); + pigeonResult.androidInstallApp = [GetNullableObjectAtIndex(list, 5) boolValue]; + pigeonResult.androidMinimumVersion = GetNullableObjectAtIndex(list, 6); + pigeonResult.linkDomain = GetNullableObjectAtIndex(list, 7); + return pigeonResult; +} ++ (nullable InternalActionCodeSettings *)nullableFromList:(NSArray *)list { + return (list) ? [InternalActionCodeSettings fromList:list] : nil; +} +- (NSArray *)toList { + return @[ + self.url ?: [NSNull null], + self.dynamicLinkDomain ?: [NSNull null], + @(self.handleCodeInApp), + self.iOSBundleId ?: [NSNull null], + self.androidPackageName ?: [NSNull null], + @(self.androidInstallApp), + self.androidMinimumVersion ?: [NSNull null], + self.linkDomain ?: [NSNull null], + ]; +} +- (BOOL)isEqual:(id)object { + if (self == object) { + return YES; + } + if (![object isKindOfClass:[self class]]) { + return NO; + } + InternalActionCodeSettings *other = (InternalActionCodeSettings *)object; + return FLTPigeonDeepEquals(self.url, other.url) && + FLTPigeonDeepEquals(self.dynamicLinkDomain, other.dynamicLinkDomain) && + self.handleCodeInApp == other.handleCodeInApp && + FLTPigeonDeepEquals(self.iOSBundleId, other.iOSBundleId) && + FLTPigeonDeepEquals(self.androidPackageName, other.androidPackageName) && + self.androidInstallApp == other.androidInstallApp && + FLTPigeonDeepEquals(self.androidMinimumVersion, other.androidMinimumVersion) && + FLTPigeonDeepEquals(self.linkDomain, other.linkDomain); +} + +- (NSUInteger)hash { + NSUInteger result = [self class].hash; + result = result * 31 + FLTPigeonDeepHash(self.url); + result = result * 31 + FLTPigeonDeepHash(self.dynamicLinkDomain); + result = result * 31 + @(self.handleCodeInApp).hash; + result = result * 31 + FLTPigeonDeepHash(self.iOSBundleId); + result = result * 31 + FLTPigeonDeepHash(self.androidPackageName); + result = result * 31 + @(self.androidInstallApp).hash; + result = result * 31 + FLTPigeonDeepHash(self.androidMinimumVersion); + result = result * 31 + FLTPigeonDeepHash(self.linkDomain); + return result; +} +@end + +@implementation InternalFirebaseAuthSettings ++ (instancetype)makeWithAppVerificationDisabledForTesting:(BOOL)appVerificationDisabledForTesting + userAccessGroup:(nullable NSString *)userAccessGroup + phoneNumber:(nullable NSString *)phoneNumber + smsCode:(nullable NSString *)smsCode + forceRecaptchaFlow:(nullable NSNumber *)forceRecaptchaFlow { + InternalFirebaseAuthSettings *pigeonResult = [[InternalFirebaseAuthSettings alloc] init]; + pigeonResult.appVerificationDisabledForTesting = appVerificationDisabledForTesting; + pigeonResult.userAccessGroup = userAccessGroup; + pigeonResult.phoneNumber = phoneNumber; + pigeonResult.smsCode = smsCode; + pigeonResult.forceRecaptchaFlow = forceRecaptchaFlow; + return pigeonResult; +} ++ (InternalFirebaseAuthSettings *)fromList:(NSArray *)list { + InternalFirebaseAuthSettings *pigeonResult = [[InternalFirebaseAuthSettings alloc] init]; + pigeonResult.appVerificationDisabledForTesting = [GetNullableObjectAtIndex(list, 0) boolValue]; + pigeonResult.userAccessGroup = GetNullableObjectAtIndex(list, 1); + pigeonResult.phoneNumber = GetNullableObjectAtIndex(list, 2); + pigeonResult.smsCode = GetNullableObjectAtIndex(list, 3); + pigeonResult.forceRecaptchaFlow = GetNullableObjectAtIndex(list, 4); + return pigeonResult; +} ++ (nullable InternalFirebaseAuthSettings *)nullableFromList:(NSArray *)list { + return (list) ? [InternalFirebaseAuthSettings fromList:list] : nil; +} +- (NSArray *)toList { + return @[ + @(self.appVerificationDisabledForTesting), + self.userAccessGroup ?: [NSNull null], + self.phoneNumber ?: [NSNull null], + self.smsCode ?: [NSNull null], + self.forceRecaptchaFlow ?: [NSNull null], + ]; +} +- (BOOL)isEqual:(id)object { + if (self == object) { + return YES; + } + if (![object isKindOfClass:[self class]]) { + return NO; + } + InternalFirebaseAuthSettings *other = (InternalFirebaseAuthSettings *)object; + return self.appVerificationDisabledForTesting == other.appVerificationDisabledForTesting && + FLTPigeonDeepEquals(self.userAccessGroup, other.userAccessGroup) && + FLTPigeonDeepEquals(self.phoneNumber, other.phoneNumber) && + FLTPigeonDeepEquals(self.smsCode, other.smsCode) && + FLTPigeonDeepEquals(self.forceRecaptchaFlow, other.forceRecaptchaFlow); +} + +- (NSUInteger)hash { + NSUInteger result = [self class].hash; + result = result * 31 + @(self.appVerificationDisabledForTesting).hash; + result = result * 31 + FLTPigeonDeepHash(self.userAccessGroup); + result = result * 31 + FLTPigeonDeepHash(self.phoneNumber); + result = result * 31 + FLTPigeonDeepHash(self.smsCode); + result = result * 31 + FLTPigeonDeepHash(self.forceRecaptchaFlow); + return result; +} +@end + +@implementation InternalSignInProvider ++ (instancetype)makeWithProviderId:(NSString *)providerId + scopes:(nullable NSArray *)scopes + customParameters: + (nullable NSDictionary *)customParameters { + InternalSignInProvider *pigeonResult = [[InternalSignInProvider alloc] init]; + pigeonResult.providerId = providerId; + pigeonResult.scopes = scopes; + pigeonResult.customParameters = customParameters; + return pigeonResult; +} ++ (InternalSignInProvider *)fromList:(NSArray *)list { + InternalSignInProvider *pigeonResult = [[InternalSignInProvider alloc] init]; + pigeonResult.providerId = GetNullableObjectAtIndex(list, 0); + pigeonResult.scopes = GetNullableObjectAtIndex(list, 1); + pigeonResult.customParameters = GetNullableObjectAtIndex(list, 2); + return pigeonResult; +} ++ (nullable InternalSignInProvider *)nullableFromList:(NSArray *)list { + return (list) ? [InternalSignInProvider fromList:list] : nil; +} +- (NSArray *)toList { + return @[ + self.providerId ?: [NSNull null], + self.scopes ?: [NSNull null], + self.customParameters ?: [NSNull null], + ]; +} +- (BOOL)isEqual:(id)object { + if (self == object) { + return YES; + } + if (![object isKindOfClass:[self class]]) { + return NO; + } + InternalSignInProvider *other = (InternalSignInProvider *)object; + return FLTPigeonDeepEquals(self.providerId, other.providerId) && + FLTPigeonDeepEquals(self.scopes, other.scopes) && + FLTPigeonDeepEquals(self.customParameters, other.customParameters); +} + +- (NSUInteger)hash { + NSUInteger result = [self class].hash; + result = result * 31 + FLTPigeonDeepHash(self.providerId); + result = result * 31 + FLTPigeonDeepHash(self.scopes); + result = result * 31 + FLTPigeonDeepHash(self.customParameters); + return result; +} +@end + +@implementation InternalVerifyPhoneNumberRequest ++ (instancetype)makeWithPhoneNumber:(nullable NSString *)phoneNumber + timeout:(NSInteger)timeout + forceResendingToken:(nullable NSNumber *)forceResendingToken + autoRetrievedSmsCodeForTesting:(nullable NSString *)autoRetrievedSmsCodeForTesting + multiFactorInfoId:(nullable NSString *)multiFactorInfoId + multiFactorSessionId:(nullable NSString *)multiFactorSessionId { + InternalVerifyPhoneNumberRequest *pigeonResult = [[InternalVerifyPhoneNumberRequest alloc] init]; + pigeonResult.phoneNumber = phoneNumber; + pigeonResult.timeout = timeout; + pigeonResult.forceResendingToken = forceResendingToken; + pigeonResult.autoRetrievedSmsCodeForTesting = autoRetrievedSmsCodeForTesting; + pigeonResult.multiFactorInfoId = multiFactorInfoId; + pigeonResult.multiFactorSessionId = multiFactorSessionId; + return pigeonResult; +} ++ (InternalVerifyPhoneNumberRequest *)fromList:(NSArray *)list { + InternalVerifyPhoneNumberRequest *pigeonResult = [[InternalVerifyPhoneNumberRequest alloc] init]; + pigeonResult.phoneNumber = GetNullableObjectAtIndex(list, 0); + pigeonResult.timeout = [GetNullableObjectAtIndex(list, 1) integerValue]; + pigeonResult.forceResendingToken = GetNullableObjectAtIndex(list, 2); + pigeonResult.autoRetrievedSmsCodeForTesting = GetNullableObjectAtIndex(list, 3); + pigeonResult.multiFactorInfoId = GetNullableObjectAtIndex(list, 4); + pigeonResult.multiFactorSessionId = GetNullableObjectAtIndex(list, 5); + return pigeonResult; +} ++ (nullable InternalVerifyPhoneNumberRequest *)nullableFromList:(NSArray *)list { + return (list) ? [InternalVerifyPhoneNumberRequest fromList:list] : nil; +} +- (NSArray *)toList { + return @[ + self.phoneNumber ?: [NSNull null], + @(self.timeout), + self.forceResendingToken ?: [NSNull null], + self.autoRetrievedSmsCodeForTesting ?: [NSNull null], + self.multiFactorInfoId ?: [NSNull null], + self.multiFactorSessionId ?: [NSNull null], + ]; +} +- (BOOL)isEqual:(id)object { + if (self == object) { + return YES; + } + if (![object isKindOfClass:[self class]]) { + return NO; + } + InternalVerifyPhoneNumberRequest *other = (InternalVerifyPhoneNumberRequest *)object; + return FLTPigeonDeepEquals(self.phoneNumber, other.phoneNumber) && + self.timeout == other.timeout && + FLTPigeonDeepEquals(self.forceResendingToken, other.forceResendingToken) && + FLTPigeonDeepEquals(self.autoRetrievedSmsCodeForTesting, + other.autoRetrievedSmsCodeForTesting) && + FLTPigeonDeepEquals(self.multiFactorInfoId, other.multiFactorInfoId) && + FLTPigeonDeepEquals(self.multiFactorSessionId, other.multiFactorSessionId); +} + +- (NSUInteger)hash { + NSUInteger result = [self class].hash; + result = result * 31 + FLTPigeonDeepHash(self.phoneNumber); + result = result * 31 + @(self.timeout).hash; + result = result * 31 + FLTPigeonDeepHash(self.forceResendingToken); + result = result * 31 + FLTPigeonDeepHash(self.autoRetrievedSmsCodeForTesting); + result = result * 31 + FLTPigeonDeepHash(self.multiFactorInfoId); + result = result * 31 + FLTPigeonDeepHash(self.multiFactorSessionId); + return result; +} +@end + +@implementation InternalIdTokenResult ++ (instancetype)makeWithToken:(nullable NSString *)token + expirationTimestamp:(nullable NSNumber *)expirationTimestamp + authTimestamp:(nullable NSNumber *)authTimestamp + issuedAtTimestamp:(nullable NSNumber *)issuedAtTimestamp + signInProvider:(nullable NSString *)signInProvider + claims:(nullable NSDictionary *)claims + signInSecondFactor:(nullable NSString *)signInSecondFactor { + InternalIdTokenResult *pigeonResult = [[InternalIdTokenResult alloc] init]; + pigeonResult.token = token; + pigeonResult.expirationTimestamp = expirationTimestamp; + pigeonResult.authTimestamp = authTimestamp; + pigeonResult.issuedAtTimestamp = issuedAtTimestamp; + pigeonResult.signInProvider = signInProvider; + pigeonResult.claims = claims; + pigeonResult.signInSecondFactor = signInSecondFactor; + return pigeonResult; +} ++ (InternalIdTokenResult *)fromList:(NSArray *)list { + InternalIdTokenResult *pigeonResult = [[InternalIdTokenResult alloc] init]; + pigeonResult.token = GetNullableObjectAtIndex(list, 0); + pigeonResult.expirationTimestamp = GetNullableObjectAtIndex(list, 1); + pigeonResult.authTimestamp = GetNullableObjectAtIndex(list, 2); + pigeonResult.issuedAtTimestamp = GetNullableObjectAtIndex(list, 3); + pigeonResult.signInProvider = GetNullableObjectAtIndex(list, 4); + pigeonResult.claims = GetNullableObjectAtIndex(list, 5); + pigeonResult.signInSecondFactor = GetNullableObjectAtIndex(list, 6); + return pigeonResult; +} ++ (nullable InternalIdTokenResult *)nullableFromList:(NSArray *)list { + return (list) ? [InternalIdTokenResult fromList:list] : nil; +} +- (NSArray *)toList { + return @[ + self.token ?: [NSNull null], + self.expirationTimestamp ?: [NSNull null], + self.authTimestamp ?: [NSNull null], + self.issuedAtTimestamp ?: [NSNull null], + self.signInProvider ?: [NSNull null], + self.claims ?: [NSNull null], + self.signInSecondFactor ?: [NSNull null], + ]; +} +- (BOOL)isEqual:(id)object { + if (self == object) { + return YES; + } + if (![object isKindOfClass:[self class]]) { + return NO; + } + InternalIdTokenResult *other = (InternalIdTokenResult *)object; + return FLTPigeonDeepEquals(self.token, other.token) && + FLTPigeonDeepEquals(self.expirationTimestamp, other.expirationTimestamp) && + FLTPigeonDeepEquals(self.authTimestamp, other.authTimestamp) && + FLTPigeonDeepEquals(self.issuedAtTimestamp, other.issuedAtTimestamp) && + FLTPigeonDeepEquals(self.signInProvider, other.signInProvider) && + FLTPigeonDeepEquals(self.claims, other.claims) && + FLTPigeonDeepEquals(self.signInSecondFactor, other.signInSecondFactor); +} + +- (NSUInteger)hash { + NSUInteger result = [self class].hash; + result = result * 31 + FLTPigeonDeepHash(self.token); + result = result * 31 + FLTPigeonDeepHash(self.expirationTimestamp); + result = result * 31 + FLTPigeonDeepHash(self.authTimestamp); + result = result * 31 + FLTPigeonDeepHash(self.issuedAtTimestamp); + result = result * 31 + FLTPigeonDeepHash(self.signInProvider); + result = result * 31 + FLTPigeonDeepHash(self.claims); + result = result * 31 + FLTPigeonDeepHash(self.signInSecondFactor); + return result; +} +@end + +@implementation InternalUserProfile ++ (instancetype)makeWithDisplayName:(nullable NSString *)displayName + photoUrl:(nullable NSString *)photoUrl + displayNameChanged:(BOOL)displayNameChanged + photoUrlChanged:(BOOL)photoUrlChanged { + InternalUserProfile *pigeonResult = [[InternalUserProfile alloc] init]; + pigeonResult.displayName = displayName; + pigeonResult.photoUrl = photoUrl; + pigeonResult.displayNameChanged = displayNameChanged; + pigeonResult.photoUrlChanged = photoUrlChanged; + return pigeonResult; +} ++ (InternalUserProfile *)fromList:(NSArray *)list { + InternalUserProfile *pigeonResult = [[InternalUserProfile alloc] init]; + pigeonResult.displayName = GetNullableObjectAtIndex(list, 0); + pigeonResult.photoUrl = GetNullableObjectAtIndex(list, 1); + pigeonResult.displayNameChanged = [GetNullableObjectAtIndex(list, 2) boolValue]; + pigeonResult.photoUrlChanged = [GetNullableObjectAtIndex(list, 3) boolValue]; + return pigeonResult; +} ++ (nullable InternalUserProfile *)nullableFromList:(NSArray *)list { + return (list) ? [InternalUserProfile fromList:list] : nil; +} +- (NSArray *)toList { + return @[ + self.displayName ?: [NSNull null], + self.photoUrl ?: [NSNull null], + @(self.displayNameChanged), + @(self.photoUrlChanged), + ]; +} +- (BOOL)isEqual:(id)object { + if (self == object) { + return YES; + } + if (![object isKindOfClass:[self class]]) { + return NO; + } + InternalUserProfile *other = (InternalUserProfile *)object; + return FLTPigeonDeepEquals(self.displayName, other.displayName) && + FLTPigeonDeepEquals(self.photoUrl, other.photoUrl) && + self.displayNameChanged == other.displayNameChanged && + self.photoUrlChanged == other.photoUrlChanged; +} + +- (NSUInteger)hash { + NSUInteger result = [self class].hash; + result = result * 31 + FLTPigeonDeepHash(self.displayName); + result = result * 31 + FLTPigeonDeepHash(self.photoUrl); + result = result * 31 + @(self.displayNameChanged).hash; + result = result * 31 + @(self.photoUrlChanged).hash; + return result; +} +@end + +@implementation InternalTotpSecret ++ (instancetype)makeWithCodeIntervalSeconds:(nullable NSNumber *)codeIntervalSeconds + codeLength:(nullable NSNumber *)codeLength + enrollmentCompletionDeadline:(nullable NSNumber *)enrollmentCompletionDeadline + hashingAlgorithm:(nullable NSString *)hashingAlgorithm + secretKey:(NSString *)secretKey { + InternalTotpSecret *pigeonResult = [[InternalTotpSecret alloc] init]; + pigeonResult.codeIntervalSeconds = codeIntervalSeconds; + pigeonResult.codeLength = codeLength; + pigeonResult.enrollmentCompletionDeadline = enrollmentCompletionDeadline; + pigeonResult.hashingAlgorithm = hashingAlgorithm; + pigeonResult.secretKey = secretKey; + return pigeonResult; +} ++ (InternalTotpSecret *)fromList:(NSArray *)list { + InternalTotpSecret *pigeonResult = [[InternalTotpSecret alloc] init]; + pigeonResult.codeIntervalSeconds = GetNullableObjectAtIndex(list, 0); + pigeonResult.codeLength = GetNullableObjectAtIndex(list, 1); + pigeonResult.enrollmentCompletionDeadline = GetNullableObjectAtIndex(list, 2); + pigeonResult.hashingAlgorithm = GetNullableObjectAtIndex(list, 3); + pigeonResult.secretKey = GetNullableObjectAtIndex(list, 4); + return pigeonResult; +} ++ (nullable InternalTotpSecret *)nullableFromList:(NSArray *)list { + return (list) ? [InternalTotpSecret fromList:list] : nil; +} +- (NSArray *)toList { + return @[ + self.codeIntervalSeconds ?: [NSNull null], + self.codeLength ?: [NSNull null], + self.enrollmentCompletionDeadline ?: [NSNull null], + self.hashingAlgorithm ?: [NSNull null], + self.secretKey ?: [NSNull null], + ]; +} +- (BOOL)isEqual:(id)object { + if (self == object) { + return YES; + } + if (![object isKindOfClass:[self class]]) { + return NO; + } + InternalTotpSecret *other = (InternalTotpSecret *)object; + return FLTPigeonDeepEquals(self.codeIntervalSeconds, other.codeIntervalSeconds) && + FLTPigeonDeepEquals(self.codeLength, other.codeLength) && + FLTPigeonDeepEquals(self.enrollmentCompletionDeadline, + other.enrollmentCompletionDeadline) && + FLTPigeonDeepEquals(self.hashingAlgorithm, other.hashingAlgorithm) && + FLTPigeonDeepEquals(self.secretKey, other.secretKey); +} + +- (NSUInteger)hash { + NSUInteger result = [self class].hash; + result = result * 31 + FLTPigeonDeepHash(self.codeIntervalSeconds); + result = result * 31 + FLTPigeonDeepHash(self.codeLength); + result = result * 31 + FLTPigeonDeepHash(self.enrollmentCompletionDeadline); + result = result * 31 + FLTPigeonDeepHash(self.hashingAlgorithm); + result = result * 31 + FLTPigeonDeepHash(self.secretKey); + return result; +} +@end + +@interface nullFirebaseAuthMessagesPigeonCodecReader : FlutterStandardReader +@end +@implementation nullFirebaseAuthMessagesPigeonCodecReader +- (nullable id)readValueOfType:(UInt8)type { + switch (type) { + case 129: { + NSNumber *enumAsNumber = [self readValue]; + return enumAsNumber == nil + ? nil + : [[ActionCodeInfoOperationBox alloc] initWithValue:[enumAsNumber integerValue]]; + } + case 130: + return [InternalMultiFactorSession fromList:[self readValue]]; + case 131: + return [InternalPhoneMultiFactorAssertion fromList:[self readValue]]; + case 132: + return [InternalMultiFactorInfo fromList:[self readValue]]; + case 133: + return [AuthPigeonFirebaseApp fromList:[self readValue]]; + case 134: + return [InternalActionCodeInfoData fromList:[self readValue]]; + case 135: + return [InternalActionCodeInfo fromList:[self readValue]]; + case 136: + return [InternalAdditionalUserInfo fromList:[self readValue]]; + case 137: + return [InternalAuthCredential fromList:[self readValue]]; + case 138: + return [InternalUserInfo fromList:[self readValue]]; + case 139: + return [InternalUserDetails fromList:[self readValue]]; + case 140: + return [InternalUserCredential fromList:[self readValue]]; + case 141: + return [InternalAuthCredentialInput fromList:[self readValue]]; + case 142: + return [InternalActionCodeSettings fromList:[self readValue]]; + case 143: + return [InternalFirebaseAuthSettings fromList:[self readValue]]; + case 144: + return [InternalSignInProvider fromList:[self readValue]]; + case 145: + return [InternalVerifyPhoneNumberRequest fromList:[self readValue]]; + case 146: + return [InternalIdTokenResult fromList:[self readValue]]; + case 147: + return [InternalUserProfile fromList:[self readValue]]; + case 148: + return [InternalTotpSecret fromList:[self readValue]]; + default: + return [super readValueOfType:type]; + } +} +@end + +@interface nullFirebaseAuthMessagesPigeonCodecWriter : FlutterStandardWriter +@end +@implementation nullFirebaseAuthMessagesPigeonCodecWriter +- (void)writeValue:(id)value { + if ([value isKindOfClass:[ActionCodeInfoOperationBox class]]) { + ActionCodeInfoOperationBox *box = (ActionCodeInfoOperationBox *)value; + [self writeByte:129]; + [self writeValue:(value == nil ? [NSNull null] : [NSNumber numberWithInteger:box.value])]; + } else if ([value isKindOfClass:[InternalMultiFactorSession class]]) { + [self writeByte:130]; + [self writeValue:[value toList]]; + } else if ([value isKindOfClass:[InternalPhoneMultiFactorAssertion class]]) { + [self writeByte:131]; + [self writeValue:[value toList]]; + } else if ([value isKindOfClass:[InternalMultiFactorInfo class]]) { + [self writeByte:132]; + [self writeValue:[value toList]]; + } else if ([value isKindOfClass:[AuthPigeonFirebaseApp class]]) { + [self writeByte:133]; + [self writeValue:[value toList]]; + } else if ([value isKindOfClass:[InternalActionCodeInfoData class]]) { + [self writeByte:134]; + [self writeValue:[value toList]]; + } else if ([value isKindOfClass:[InternalActionCodeInfo class]]) { + [self writeByte:135]; + [self writeValue:[value toList]]; + } else if ([value isKindOfClass:[InternalAdditionalUserInfo class]]) { + [self writeByte:136]; + [self writeValue:[value toList]]; + } else if ([value isKindOfClass:[InternalAuthCredential class]]) { + [self writeByte:137]; + [self writeValue:[value toList]]; + } else if ([value isKindOfClass:[InternalUserInfo class]]) { + [self writeByte:138]; + [self writeValue:[value toList]]; + } else if ([value isKindOfClass:[InternalUserDetails class]]) { + [self writeByte:139]; + [self writeValue:[value toList]]; + } else if ([value isKindOfClass:[InternalUserCredential class]]) { + [self writeByte:140]; + [self writeValue:[value toList]]; + } else if ([value isKindOfClass:[InternalAuthCredentialInput class]]) { + [self writeByte:141]; + [self writeValue:[value toList]]; + } else if ([value isKindOfClass:[InternalActionCodeSettings class]]) { + [self writeByte:142]; + [self writeValue:[value toList]]; + } else if ([value isKindOfClass:[InternalFirebaseAuthSettings class]]) { + [self writeByte:143]; + [self writeValue:[value toList]]; + } else if ([value isKindOfClass:[InternalSignInProvider class]]) { + [self writeByte:144]; + [self writeValue:[value toList]]; + } else if ([value isKindOfClass:[InternalVerifyPhoneNumberRequest class]]) { + [self writeByte:145]; + [self writeValue:[value toList]]; + } else if ([value isKindOfClass:[InternalIdTokenResult class]]) { + [self writeByte:146]; + [self writeValue:[value toList]]; + } else if ([value isKindOfClass:[InternalUserProfile class]]) { + [self writeByte:147]; + [self writeValue:[value toList]]; + } else if ([value isKindOfClass:[InternalTotpSecret class]]) { + [self writeByte:148]; + [self writeValue:[value toList]]; + } else { + [super writeValue:value]; + } +} +@end + +@interface nullFirebaseAuthMessagesPigeonCodecReaderWriter : FlutterStandardReaderWriter +@end +@implementation nullFirebaseAuthMessagesPigeonCodecReaderWriter +- (FlutterStandardWriter *)writerWithData:(NSMutableData *)data { + return [[nullFirebaseAuthMessagesPigeonCodecWriter alloc] initWithData:data]; +} +- (FlutterStandardReader *)readerWithData:(NSData *)data { + return [[nullFirebaseAuthMessagesPigeonCodecReader alloc] initWithData:data]; +} +@end + +NSObject *nullGetFirebaseAuthMessagesCodec(void) { + static FlutterStandardMessageCodec *sSharedObject = nil; + static dispatch_once_t sPred = 0; + dispatch_once(&sPred, ^{ + nullFirebaseAuthMessagesPigeonCodecReaderWriter *readerWriter = + [[nullFirebaseAuthMessagesPigeonCodecReaderWriter alloc] init]; + sSharedObject = [FlutterStandardMessageCodec codecWithReaderWriter:readerWriter]; + }); + return sSharedObject; +} +void SetUpFirebaseAuthHostApi(id binaryMessenger, + NSObject *api) { + SetUpFirebaseAuthHostApiWithSuffix(binaryMessenger, api, @""); +} + +void SetUpFirebaseAuthHostApiWithSuffix(id binaryMessenger, + NSObject *api, + NSString *messageChannelSuffix) { + messageChannelSuffix = messageChannelSuffix.length > 0 + ? [NSString stringWithFormat:@".%@", messageChannelSuffix] + : @""; + { + FlutterBasicMessageChannel *channel = [[FlutterBasicMessageChannel alloc] + initWithName:[NSString + stringWithFormat:@"%@%@", + @"dev.flutter.pigeon.firebase_auth_platform_interface." + @"FirebaseAuthHostApi.registerIdTokenListener", + messageChannelSuffix] + binaryMessenger:binaryMessenger + codec:nullGetFirebaseAuthMessagesCodec()]; + if (api) { + NSCAssert([api respondsToSelector:@selector(registerIdTokenListenerApp:completion:)], + @"FirebaseAuthHostApi api (%@) doesn't respond to " + @"@selector(registerIdTokenListenerApp:completion:)", + api); + [channel setMessageHandler:^(id _Nullable message, FlutterReply callback) { + NSArray *args = message; + AuthPigeonFirebaseApp *arg_app = GetNullableObjectAtIndex(args, 0); + [api registerIdTokenListenerApp:arg_app + completion:^(NSString *_Nullable output, + FlutterError *_Nullable error) { + callback(wrapResult(output, error)); + }]; + }]; + } else { + [channel setMessageHandler:nil]; + } + } + { + FlutterBasicMessageChannel *channel = [[FlutterBasicMessageChannel alloc] + initWithName:[NSString + stringWithFormat:@"%@%@", + @"dev.flutter.pigeon.firebase_auth_platform_interface." + @"FirebaseAuthHostApi.registerAuthStateListener", + messageChannelSuffix] + binaryMessenger:binaryMessenger + codec:nullGetFirebaseAuthMessagesCodec()]; + if (api) { + NSCAssert([api respondsToSelector:@selector(registerAuthStateListenerApp:completion:)], + @"FirebaseAuthHostApi api (%@) doesn't respond to " + @"@selector(registerAuthStateListenerApp:completion:)", + api); + [channel setMessageHandler:^(id _Nullable message, FlutterReply callback) { + NSArray *args = message; + AuthPigeonFirebaseApp *arg_app = GetNullableObjectAtIndex(args, 0); + [api registerAuthStateListenerApp:arg_app + completion:^(NSString *_Nullable output, + FlutterError *_Nullable error) { + callback(wrapResult(output, error)); + }]; + }]; + } else { + [channel setMessageHandler:nil]; + } + } + { + FlutterBasicMessageChannel *channel = [[FlutterBasicMessageChannel alloc] + initWithName:[NSString stringWithFormat:@"%@%@", + @"dev.flutter.pigeon.firebase_auth_platform_" + @"interface.FirebaseAuthHostApi.useEmulator", + messageChannelSuffix] + binaryMessenger:binaryMessenger + codec:nullGetFirebaseAuthMessagesCodec()]; + if (api) { + NSCAssert([api respondsToSelector:@selector(useEmulatorApp:host:port:completion:)], + @"FirebaseAuthHostApi api (%@) doesn't respond to " + @"@selector(useEmulatorApp:host:port:completion:)", + api); + [channel setMessageHandler:^(id _Nullable message, FlutterReply callback) { + NSArray *args = message; + AuthPigeonFirebaseApp *arg_app = GetNullableObjectAtIndex(args, 0); + NSString *arg_host = GetNullableObjectAtIndex(args, 1); + NSInteger arg_port = [GetNullableObjectAtIndex(args, 2) integerValue]; + [api useEmulatorApp:arg_app + host:arg_host + port:arg_port + completion:^(FlutterError *_Nullable error) { + callback(wrapResult(nil, error)); + }]; + }]; + } else { + [channel setMessageHandler:nil]; + } + } + { + FlutterBasicMessageChannel *channel = [[FlutterBasicMessageChannel alloc] + initWithName:[NSString stringWithFormat:@"%@%@", + @"dev.flutter.pigeon.firebase_auth_platform_" + @"interface.FirebaseAuthHostApi.applyActionCode", + messageChannelSuffix] + binaryMessenger:binaryMessenger + codec:nullGetFirebaseAuthMessagesCodec()]; + if (api) { + NSCAssert([api respondsToSelector:@selector(applyActionCodeApp:code:completion:)], + @"FirebaseAuthHostApi api (%@) doesn't respond to " + @"@selector(applyActionCodeApp:code:completion:)", + api); + [channel setMessageHandler:^(id _Nullable message, FlutterReply callback) { + NSArray *args = message; + AuthPigeonFirebaseApp *arg_app = GetNullableObjectAtIndex(args, 0); + NSString *arg_code = GetNullableObjectAtIndex(args, 1); + [api applyActionCodeApp:arg_app + code:arg_code + completion:^(FlutterError *_Nullable error) { + callback(wrapResult(nil, error)); + }]; + }]; + } else { + [channel setMessageHandler:nil]; + } + } + { + FlutterBasicMessageChannel *channel = [[FlutterBasicMessageChannel alloc] + initWithName:[NSString stringWithFormat:@"%@%@", + @"dev.flutter.pigeon.firebase_auth_platform_" + @"interface.FirebaseAuthHostApi.checkActionCode", + messageChannelSuffix] + binaryMessenger:binaryMessenger + codec:nullGetFirebaseAuthMessagesCodec()]; + if (api) { + NSCAssert([api respondsToSelector:@selector(checkActionCodeApp:code:completion:)], + @"FirebaseAuthHostApi api (%@) doesn't respond to " + @"@selector(checkActionCodeApp:code:completion:)", + api); + [channel setMessageHandler:^(id _Nullable message, FlutterReply callback) { + NSArray *args = message; + AuthPigeonFirebaseApp *arg_app = GetNullableObjectAtIndex(args, 0); + NSString *arg_code = GetNullableObjectAtIndex(args, 1); + [api checkActionCodeApp:arg_app + code:arg_code + completion:^(InternalActionCodeInfo *_Nullable output, + FlutterError *_Nullable error) { + callback(wrapResult(output, error)); + }]; + }]; + } else { + [channel setMessageHandler:nil]; + } + } + { + FlutterBasicMessageChannel *channel = [[FlutterBasicMessageChannel alloc] + initWithName:[NSString + stringWithFormat:@"%@%@", + @"dev.flutter.pigeon.firebase_auth_platform_interface." + @"FirebaseAuthHostApi.confirmPasswordReset", + messageChannelSuffix] + binaryMessenger:binaryMessenger + codec:nullGetFirebaseAuthMessagesCodec()]; + if (api) { + NSCAssert( + [api respondsToSelector:@selector(confirmPasswordResetApp:code:newPassword:completion:)], + @"FirebaseAuthHostApi api (%@) doesn't respond to " + @"@selector(confirmPasswordResetApp:code:newPassword:completion:)", + api); + [channel setMessageHandler:^(id _Nullable message, FlutterReply callback) { + NSArray *args = message; + AuthPigeonFirebaseApp *arg_app = GetNullableObjectAtIndex(args, 0); + NSString *arg_code = GetNullableObjectAtIndex(args, 1); + NSString *arg_newPassword = GetNullableObjectAtIndex(args, 2); + [api confirmPasswordResetApp:arg_app + code:arg_code + newPassword:arg_newPassword + completion:^(FlutterError *_Nullable error) { + callback(wrapResult(nil, error)); + }]; + }]; + } else { + [channel setMessageHandler:nil]; + } + } + { + FlutterBasicMessageChannel *channel = [[FlutterBasicMessageChannel alloc] + initWithName:[NSString + stringWithFormat:@"%@%@", + @"dev.flutter.pigeon.firebase_auth_platform_interface." + @"FirebaseAuthHostApi.createUserWithEmailAndPassword", + messageChannelSuffix] + binaryMessenger:binaryMessenger + codec:nullGetFirebaseAuthMessagesCodec()]; + if (api) { + NSCAssert( + [api + respondsToSelector:@selector( + createUserWithEmailAndPasswordApp:email:password:completion:)], + @"FirebaseAuthHostApi api (%@) doesn't respond to " + @"@selector(createUserWithEmailAndPasswordApp:email:password:completion:)", + api); + [channel setMessageHandler:^(id _Nullable message, FlutterReply callback) { + NSArray *args = message; + AuthPigeonFirebaseApp *arg_app = GetNullableObjectAtIndex(args, 0); + NSString *arg_email = GetNullableObjectAtIndex(args, 1); + NSString *arg_password = GetNullableObjectAtIndex(args, 2); + [api createUserWithEmailAndPasswordApp:arg_app + email:arg_email + password:arg_password + completion:^(InternalUserCredential *_Nullable output, + FlutterError *_Nullable error) { + callback(wrapResult(output, error)); + }]; + }]; + } else { + [channel setMessageHandler:nil]; + } + } + { + FlutterBasicMessageChannel *channel = [[FlutterBasicMessageChannel alloc] + initWithName:[NSString + stringWithFormat:@"%@%@", + @"dev.flutter.pigeon.firebase_auth_platform_interface." + @"FirebaseAuthHostApi.signInAnonymously", + messageChannelSuffix] + binaryMessenger:binaryMessenger + codec:nullGetFirebaseAuthMessagesCodec()]; + if (api) { + NSCAssert([api respondsToSelector:@selector(signInAnonymouslyApp:completion:)], + @"FirebaseAuthHostApi api (%@) doesn't respond to " + @"@selector(signInAnonymouslyApp:completion:)", + api); + [channel setMessageHandler:^(id _Nullable message, FlutterReply callback) { + NSArray *args = message; + AuthPigeonFirebaseApp *arg_app = GetNullableObjectAtIndex(args, 0); + [api signInAnonymouslyApp:arg_app + completion:^(InternalUserCredential *_Nullable output, + FlutterError *_Nullable error) { + callback(wrapResult(output, error)); + }]; + }]; + } else { + [channel setMessageHandler:nil]; + } + } + { + FlutterBasicMessageChannel *channel = [[FlutterBasicMessageChannel alloc] + initWithName:[NSString + stringWithFormat:@"%@%@", + @"dev.flutter.pigeon.firebase_auth_platform_interface." + @"FirebaseAuthHostApi.signInWithCredential", + messageChannelSuffix] + binaryMessenger:binaryMessenger + codec:nullGetFirebaseAuthMessagesCodec()]; + if (api) { + NSCAssert([api respondsToSelector:@selector(signInWithCredentialApp:input:completion:)], + @"FirebaseAuthHostApi api (%@) doesn't respond to " + @"@selector(signInWithCredentialApp:input:completion:)", + api); + [channel setMessageHandler:^(id _Nullable message, FlutterReply callback) { + NSArray *args = message; + AuthPigeonFirebaseApp *arg_app = GetNullableObjectAtIndex(args, 0); + NSDictionary *arg_input = GetNullableObjectAtIndex(args, 1); + [api signInWithCredentialApp:arg_app + input:arg_input + completion:^(InternalUserCredential *_Nullable output, + FlutterError *_Nullable error) { + callback(wrapResult(output, error)); + }]; + }]; + } else { + [channel setMessageHandler:nil]; + } + } + { + FlutterBasicMessageChannel *channel = [[FlutterBasicMessageChannel alloc] + initWithName:[NSString + stringWithFormat:@"%@%@", + @"dev.flutter.pigeon.firebase_auth_platform_interface." + @"FirebaseAuthHostApi.signInWithCustomToken", + messageChannelSuffix] + binaryMessenger:binaryMessenger + codec:nullGetFirebaseAuthMessagesCodec()]; + if (api) { + NSCAssert([api respondsToSelector:@selector(signInWithCustomTokenApp:token:completion:)], + @"FirebaseAuthHostApi api (%@) doesn't respond to " + @"@selector(signInWithCustomTokenApp:token:completion:)", + api); + [channel setMessageHandler:^(id _Nullable message, FlutterReply callback) { + NSArray *args = message; + AuthPigeonFirebaseApp *arg_app = GetNullableObjectAtIndex(args, 0); + NSString *arg_token = GetNullableObjectAtIndex(args, 1); + [api signInWithCustomTokenApp:arg_app + token:arg_token + completion:^(InternalUserCredential *_Nullable output, + FlutterError *_Nullable error) { + callback(wrapResult(output, error)); + }]; + }]; + } else { + [channel setMessageHandler:nil]; + } + } + { + FlutterBasicMessageChannel *channel = [[FlutterBasicMessageChannel alloc] + initWithName:[NSString + stringWithFormat:@"%@%@", + @"dev.flutter.pigeon.firebase_auth_platform_interface." + @"FirebaseAuthHostApi.signInWithEmailAndPassword", + messageChannelSuffix] + binaryMessenger:binaryMessenger + codec:nullGetFirebaseAuthMessagesCodec()]; + if (api) { + NSCAssert( + [api respondsToSelector:@selector( + signInWithEmailAndPasswordApp:email:password:completion:)], + @"FirebaseAuthHostApi api (%@) doesn't respond to " + @"@selector(signInWithEmailAndPasswordApp:email:password:completion:)", + api); + [channel setMessageHandler:^(id _Nullable message, FlutterReply callback) { + NSArray *args = message; + AuthPigeonFirebaseApp *arg_app = GetNullableObjectAtIndex(args, 0); + NSString *arg_email = GetNullableObjectAtIndex(args, 1); + NSString *arg_password = GetNullableObjectAtIndex(args, 2); + [api signInWithEmailAndPasswordApp:arg_app + email:arg_email + password:arg_password + completion:^(InternalUserCredential *_Nullable output, + FlutterError *_Nullable error) { + callback(wrapResult(output, error)); + }]; + }]; + } else { + [channel setMessageHandler:nil]; + } + } + { + FlutterBasicMessageChannel *channel = [[FlutterBasicMessageChannel alloc] + initWithName:[NSString + stringWithFormat:@"%@%@", + @"dev.flutter.pigeon.firebase_auth_platform_interface." + @"FirebaseAuthHostApi.signInWithEmailLink", + messageChannelSuffix] + binaryMessenger:binaryMessenger + codec:nullGetFirebaseAuthMessagesCodec()]; + if (api) { + NSCAssert( + [api respondsToSelector:@selector(signInWithEmailLinkApp:email:emailLink:completion:)], + @"FirebaseAuthHostApi api (%@) doesn't respond to " + @"@selector(signInWithEmailLinkApp:email:emailLink:completion:)", + api); + [channel setMessageHandler:^(id _Nullable message, FlutterReply callback) { + NSArray *args = message; + AuthPigeonFirebaseApp *arg_app = GetNullableObjectAtIndex(args, 0); + NSString *arg_email = GetNullableObjectAtIndex(args, 1); + NSString *arg_emailLink = GetNullableObjectAtIndex(args, 2); + [api signInWithEmailLinkApp:arg_app + email:arg_email + emailLink:arg_emailLink + completion:^(InternalUserCredential *_Nullable output, + FlutterError *_Nullable error) { + callback(wrapResult(output, error)); + }]; + }]; + } else { + [channel setMessageHandler:nil]; + } + } + { + FlutterBasicMessageChannel *channel = [[FlutterBasicMessageChannel alloc] + initWithName:[NSString + stringWithFormat:@"%@%@", + @"dev.flutter.pigeon.firebase_auth_platform_interface." + @"FirebaseAuthHostApi.signInWithProvider", + messageChannelSuffix] + binaryMessenger:binaryMessenger + codec:nullGetFirebaseAuthMessagesCodec()]; + if (api) { + NSCAssert( + [api respondsToSelector:@selector(signInWithProviderApp:signInProvider:completion:)], + @"FirebaseAuthHostApi api (%@) doesn't respond to " + @"@selector(signInWithProviderApp:signInProvider:completion:)", + api); + [channel setMessageHandler:^(id _Nullable message, FlutterReply callback) { + NSArray *args = message; + AuthPigeonFirebaseApp *arg_app = GetNullableObjectAtIndex(args, 0); + InternalSignInProvider *arg_signInProvider = GetNullableObjectAtIndex(args, 1); + [api signInWithProviderApp:arg_app + signInProvider:arg_signInProvider + completion:^(InternalUserCredential *_Nullable output, + FlutterError *_Nullable error) { + callback(wrapResult(output, error)); + }]; + }]; + } else { + [channel setMessageHandler:nil]; + } + } + { + FlutterBasicMessageChannel *channel = [[FlutterBasicMessageChannel alloc] + initWithName:[NSString stringWithFormat:@"%@%@", + @"dev.flutter.pigeon.firebase_auth_platform_" + @"interface.FirebaseAuthHostApi.signOut", + messageChannelSuffix] + binaryMessenger:binaryMessenger + codec:nullGetFirebaseAuthMessagesCodec()]; + if (api) { + NSCAssert( + [api respondsToSelector:@selector(signOutApp:completion:)], + @"FirebaseAuthHostApi api (%@) doesn't respond to @selector(signOutApp:completion:)", + api); + [channel setMessageHandler:^(id _Nullable message, FlutterReply callback) { + NSArray *args = message; + AuthPigeonFirebaseApp *arg_app = GetNullableObjectAtIndex(args, 0); + [api signOutApp:arg_app + completion:^(FlutterError *_Nullable error) { + callback(wrapResult(nil, error)); + }]; + }]; + } else { + [channel setMessageHandler:nil]; + } + } + { + FlutterBasicMessageChannel *channel = [[FlutterBasicMessageChannel alloc] + initWithName:[NSString + stringWithFormat:@"%@%@", + @"dev.flutter.pigeon.firebase_auth_platform_interface." + @"FirebaseAuthHostApi.fetchSignInMethodsForEmail", + messageChannelSuffix] + binaryMessenger:binaryMessenger + codec:nullGetFirebaseAuthMessagesCodec()]; + if (api) { + NSCAssert([api respondsToSelector:@selector(fetchSignInMethodsForEmailApp:email:completion:)], + @"FirebaseAuthHostApi api (%@) doesn't respond to " + @"@selector(fetchSignInMethodsForEmailApp:email:completion:)", + api); + [channel setMessageHandler:^(id _Nullable message, FlutterReply callback) { + NSArray *args = message; + AuthPigeonFirebaseApp *arg_app = GetNullableObjectAtIndex(args, 0); + NSString *arg_email = GetNullableObjectAtIndex(args, 1); + [api fetchSignInMethodsForEmailApp:arg_app + email:arg_email + completion:^(NSArray *_Nullable output, + FlutterError *_Nullable error) { + callback(wrapResult(output, error)); + }]; + }]; + } else { + [channel setMessageHandler:nil]; + } + } + { + FlutterBasicMessageChannel *channel = [[FlutterBasicMessageChannel alloc] + initWithName:[NSString + stringWithFormat:@"%@%@", + @"dev.flutter.pigeon.firebase_auth_platform_interface." + @"FirebaseAuthHostApi.sendPasswordResetEmail", + messageChannelSuffix] + binaryMessenger:binaryMessenger + codec:nullGetFirebaseAuthMessagesCodec()]; + if (api) { + NSCAssert([api respondsToSelector: + @selector(sendPasswordResetEmailApp:email:actionCodeSettings:completion:)], + @"FirebaseAuthHostApi api (%@) doesn't respond to " + @"@selector(sendPasswordResetEmailApp:email:actionCodeSettings:completion:)", + api); + [channel setMessageHandler:^(id _Nullable message, FlutterReply callback) { + NSArray *args = message; + AuthPigeonFirebaseApp *arg_app = GetNullableObjectAtIndex(args, 0); + NSString *arg_email = GetNullableObjectAtIndex(args, 1); + InternalActionCodeSettings *arg_actionCodeSettings = GetNullableObjectAtIndex(args, 2); + [api sendPasswordResetEmailApp:arg_app + email:arg_email + actionCodeSettings:arg_actionCodeSettings + completion:^(FlutterError *_Nullable error) { + callback(wrapResult(nil, error)); + }]; + }]; + } else { + [channel setMessageHandler:nil]; + } + } + { + FlutterBasicMessageChannel *channel = [[FlutterBasicMessageChannel alloc] + initWithName:[NSString + stringWithFormat:@"%@%@", + @"dev.flutter.pigeon.firebase_auth_platform_interface." + @"FirebaseAuthHostApi.sendSignInLinkToEmail", + messageChannelSuffix] + binaryMessenger:binaryMessenger + codec:nullGetFirebaseAuthMessagesCodec()]; + if (api) { + NSCAssert([api respondsToSelector: + @selector(sendSignInLinkToEmailApp:email:actionCodeSettings:completion:)], + @"FirebaseAuthHostApi api (%@) doesn't respond to " + @"@selector(sendSignInLinkToEmailApp:email:actionCodeSettings:completion:)", + api); + [channel setMessageHandler:^(id _Nullable message, FlutterReply callback) { + NSArray *args = message; + AuthPigeonFirebaseApp *arg_app = GetNullableObjectAtIndex(args, 0); + NSString *arg_email = GetNullableObjectAtIndex(args, 1); + InternalActionCodeSettings *arg_actionCodeSettings = GetNullableObjectAtIndex(args, 2); + [api sendSignInLinkToEmailApp:arg_app + email:arg_email + actionCodeSettings:arg_actionCodeSettings + completion:^(FlutterError *_Nullable error) { + callback(wrapResult(nil, error)); + }]; + }]; + } else { + [channel setMessageHandler:nil]; + } + } + { + FlutterBasicMessageChannel *channel = [[FlutterBasicMessageChannel alloc] + initWithName:[NSString stringWithFormat:@"%@%@", + @"dev.flutter.pigeon.firebase_auth_platform_" + @"interface.FirebaseAuthHostApi.setLanguageCode", + messageChannelSuffix] + binaryMessenger:binaryMessenger + codec:nullGetFirebaseAuthMessagesCodec()]; + if (api) { + NSCAssert([api respondsToSelector:@selector(setLanguageCodeApp:languageCode:completion:)], + @"FirebaseAuthHostApi api (%@) doesn't respond to " + @"@selector(setLanguageCodeApp:languageCode:completion:)", + api); + [channel setMessageHandler:^(id _Nullable message, FlutterReply callback) { + NSArray *args = message; + AuthPigeonFirebaseApp *arg_app = GetNullableObjectAtIndex(args, 0); + NSString *arg_languageCode = GetNullableObjectAtIndex(args, 1); + [api setLanguageCodeApp:arg_app + languageCode:arg_languageCode + completion:^(NSString *_Nullable output, FlutterError *_Nullable error) { + callback(wrapResult(output, error)); + }]; + }]; + } else { + [channel setMessageHandler:nil]; + } + } + { + FlutterBasicMessageChannel *channel = [[FlutterBasicMessageChannel alloc] + initWithName:[NSString stringWithFormat:@"%@%@", + @"dev.flutter.pigeon.firebase_auth_platform_" + @"interface.FirebaseAuthHostApi.setSettings", + messageChannelSuffix] + binaryMessenger:binaryMessenger + codec:nullGetFirebaseAuthMessagesCodec()]; + if (api) { + NSCAssert([api respondsToSelector:@selector(setSettingsApp:settings:completion:)], + @"FirebaseAuthHostApi api (%@) doesn't respond to " + @"@selector(setSettingsApp:settings:completion:)", + api); + [channel setMessageHandler:^(id _Nullable message, FlutterReply callback) { + NSArray *args = message; + AuthPigeonFirebaseApp *arg_app = GetNullableObjectAtIndex(args, 0); + InternalFirebaseAuthSettings *arg_settings = GetNullableObjectAtIndex(args, 1); + [api setSettingsApp:arg_app + settings:arg_settings + completion:^(FlutterError *_Nullable error) { + callback(wrapResult(nil, error)); + }]; + }]; + } else { + [channel setMessageHandler:nil]; + } + } + { + FlutterBasicMessageChannel *channel = [[FlutterBasicMessageChannel alloc] + initWithName:[NSString + stringWithFormat:@"%@%@", + @"dev.flutter.pigeon.firebase_auth_platform_interface." + @"FirebaseAuthHostApi.verifyPasswordResetCode", + messageChannelSuffix] + binaryMessenger:binaryMessenger + codec:nullGetFirebaseAuthMessagesCodec()]; + if (api) { + NSCAssert([api respondsToSelector:@selector(verifyPasswordResetCodeApp:code:completion:)], + @"FirebaseAuthHostApi api (%@) doesn't respond to " + @"@selector(verifyPasswordResetCodeApp:code:completion:)", + api); + [channel setMessageHandler:^(id _Nullable message, FlutterReply callback) { + NSArray *args = message; + AuthPigeonFirebaseApp *arg_app = GetNullableObjectAtIndex(args, 0); + NSString *arg_code = GetNullableObjectAtIndex(args, 1); + [api verifyPasswordResetCodeApp:arg_app + code:arg_code + completion:^(NSString *_Nullable output, + FlutterError *_Nullable error) { + callback(wrapResult(output, error)); + }]; + }]; + } else { + [channel setMessageHandler:nil]; + } + } + { + FlutterBasicMessageChannel *channel = [[FlutterBasicMessageChannel alloc] + initWithName:[NSString + stringWithFormat:@"%@%@", + @"dev.flutter.pigeon.firebase_auth_platform_interface." + @"FirebaseAuthHostApi.verifyPhoneNumber", + messageChannelSuffix] + binaryMessenger:binaryMessenger + codec:nullGetFirebaseAuthMessagesCodec()]; + if (api) { + NSCAssert([api respondsToSelector:@selector(verifyPhoneNumberApp:request:completion:)], + @"FirebaseAuthHostApi api (%@) doesn't respond to " + @"@selector(verifyPhoneNumberApp:request:completion:)", + api); + [channel setMessageHandler:^(id _Nullable message, FlutterReply callback) { + NSArray *args = message; + AuthPigeonFirebaseApp *arg_app = GetNullableObjectAtIndex(args, 0); + InternalVerifyPhoneNumberRequest *arg_request = GetNullableObjectAtIndex(args, 1); + [api verifyPhoneNumberApp:arg_app + request:arg_request + completion:^(NSString *_Nullable output, FlutterError *_Nullable error) { + callback(wrapResult(output, error)); + }]; + }]; + } else { + [channel setMessageHandler:nil]; + } + } + { + FlutterBasicMessageChannel *channel = [[FlutterBasicMessageChannel alloc] + initWithName: + [NSString stringWithFormat:@"%@%@", + @"dev.flutter.pigeon.firebase_auth_platform_interface." + @"FirebaseAuthHostApi.revokeTokenWithAuthorizationCode", + messageChannelSuffix] + binaryMessenger:binaryMessenger + codec:nullGetFirebaseAuthMessagesCodec()]; + if (api) { + NSCAssert([api respondsToSelector:@selector(revokeTokenWithAuthorizationCodeApp: + authorizationCode:completion:)], + @"FirebaseAuthHostApi api (%@) doesn't respond to " + @"@selector(revokeTokenWithAuthorizationCodeApp:authorizationCode:completion:)", + api); + [channel setMessageHandler:^(id _Nullable message, FlutterReply callback) { + NSArray *args = message; + AuthPigeonFirebaseApp *arg_app = GetNullableObjectAtIndex(args, 0); + NSString *arg_authorizationCode = GetNullableObjectAtIndex(args, 1); + [api revokeTokenWithAuthorizationCodeApp:arg_app + authorizationCode:arg_authorizationCode + completion:^(FlutterError *_Nullable error) { + callback(wrapResult(nil, error)); + }]; + }]; + } else { + [channel setMessageHandler:nil]; + } + } + { + FlutterBasicMessageChannel *channel = [[FlutterBasicMessageChannel alloc] + initWithName:[NSString + stringWithFormat:@"%@%@", + @"dev.flutter.pigeon.firebase_auth_platform_interface." + @"FirebaseAuthHostApi.revokeAccessToken", + messageChannelSuffix] + binaryMessenger:binaryMessenger + codec:nullGetFirebaseAuthMessagesCodec()]; + if (api) { + NSCAssert([api respondsToSelector:@selector(revokeAccessTokenApp:accessToken:completion:)], + @"FirebaseAuthHostApi api (%@) doesn't respond to " + @"@selector(revokeAccessTokenApp:accessToken:completion:)", + api); + [channel setMessageHandler:^(id _Nullable message, FlutterReply callback) { + NSArray *args = message; + AuthPigeonFirebaseApp *arg_app = GetNullableObjectAtIndex(args, 0); + NSString *arg_accessToken = GetNullableObjectAtIndex(args, 1); + [api revokeAccessTokenApp:arg_app + accessToken:arg_accessToken + completion:^(FlutterError *_Nullable error) { + callback(wrapResult(nil, error)); + }]; + }]; + } else { + [channel setMessageHandler:nil]; + } + } + { + FlutterBasicMessageChannel *channel = [[FlutterBasicMessageChannel alloc] + initWithName:[NSString + stringWithFormat:@"%@%@", + @"dev.flutter.pigeon.firebase_auth_platform_interface." + @"FirebaseAuthHostApi.initializeRecaptchaConfig", + messageChannelSuffix] + binaryMessenger:binaryMessenger + codec:nullGetFirebaseAuthMessagesCodec()]; + if (api) { + NSCAssert([api respondsToSelector:@selector(initializeRecaptchaConfigApp:completion:)], + @"FirebaseAuthHostApi api (%@) doesn't respond to " + @"@selector(initializeRecaptchaConfigApp:completion:)", + api); + [channel setMessageHandler:^(id _Nullable message, FlutterReply callback) { + NSArray *args = message; + AuthPigeonFirebaseApp *arg_app = GetNullableObjectAtIndex(args, 0); + [api initializeRecaptchaConfigApp:arg_app + completion:^(FlutterError *_Nullable error) { + callback(wrapResult(nil, error)); + }]; + }]; + } else { + [channel setMessageHandler:nil]; + } + } +} +void SetUpFirebaseAuthUserHostApi(id binaryMessenger, + NSObject *api) { + SetUpFirebaseAuthUserHostApiWithSuffix(binaryMessenger, api, @""); +} + +void SetUpFirebaseAuthUserHostApiWithSuffix(id binaryMessenger, + NSObject *api, + NSString *messageChannelSuffix) { + messageChannelSuffix = messageChannelSuffix.length > 0 + ? [NSString stringWithFormat:@".%@", messageChannelSuffix] + : @""; + { + FlutterBasicMessageChannel *channel = [[FlutterBasicMessageChannel alloc] + initWithName:[NSString stringWithFormat:@"%@%@", + @"dev.flutter.pigeon.firebase_auth_platform_" + @"interface.FirebaseAuthUserHostApi.delete", + messageChannelSuffix] + binaryMessenger:binaryMessenger + codec:nullGetFirebaseAuthMessagesCodec()]; + if (api) { + NSCAssert( + [api respondsToSelector:@selector(deleteApp:completion:)], + @"FirebaseAuthUserHostApi api (%@) doesn't respond to @selector(deleteApp:completion:)", + api); + [channel setMessageHandler:^(id _Nullable message, FlutterReply callback) { + NSArray *args = message; + AuthPigeonFirebaseApp *arg_app = GetNullableObjectAtIndex(args, 0); + [api deleteApp:arg_app + completion:^(FlutterError *_Nullable error) { + callback(wrapResult(nil, error)); + }]; + }]; + } else { + [channel setMessageHandler:nil]; + } + } + { + FlutterBasicMessageChannel *channel = [[FlutterBasicMessageChannel alloc] + initWithName:[NSString stringWithFormat:@"%@%@", + @"dev.flutter.pigeon.firebase_auth_platform_" + @"interface.FirebaseAuthUserHostApi.getIdToken", + messageChannelSuffix] + binaryMessenger:binaryMessenger + codec:nullGetFirebaseAuthMessagesCodec()]; + if (api) { + NSCAssert([api respondsToSelector:@selector(getIdTokenApp:forceRefresh:completion:)], + @"FirebaseAuthUserHostApi api (%@) doesn't respond to " + @"@selector(getIdTokenApp:forceRefresh:completion:)", + api); + [channel setMessageHandler:^(id _Nullable message, FlutterReply callback) { + NSArray *args = message; + AuthPigeonFirebaseApp *arg_app = GetNullableObjectAtIndex(args, 0); + BOOL arg_forceRefresh = [GetNullableObjectAtIndex(args, 1) boolValue]; + [api getIdTokenApp:arg_app + forceRefresh:arg_forceRefresh + completion:^(InternalIdTokenResult *_Nullable output, + FlutterError *_Nullable error) { + callback(wrapResult(output, error)); + }]; + }]; + } else { + [channel setMessageHandler:nil]; + } + } + { + FlutterBasicMessageChannel *channel = [[FlutterBasicMessageChannel alloc] + initWithName:[NSString + stringWithFormat:@"%@%@", + @"dev.flutter.pigeon.firebase_auth_platform_interface." + @"FirebaseAuthUserHostApi.linkWithCredential", + messageChannelSuffix] + binaryMessenger:binaryMessenger + codec:nullGetFirebaseAuthMessagesCodec()]; + if (api) { + NSCAssert([api respondsToSelector:@selector(linkWithCredentialApp:input:completion:)], + @"FirebaseAuthUserHostApi api (%@) doesn't respond to " + @"@selector(linkWithCredentialApp:input:completion:)", + api); + [channel setMessageHandler:^(id _Nullable message, FlutterReply callback) { + NSArray *args = message; + AuthPigeonFirebaseApp *arg_app = GetNullableObjectAtIndex(args, 0); + NSDictionary *arg_input = GetNullableObjectAtIndex(args, 1); + [api linkWithCredentialApp:arg_app + input:arg_input + completion:^(InternalUserCredential *_Nullable output, + FlutterError *_Nullable error) { + callback(wrapResult(output, error)); + }]; + }]; + } else { + [channel setMessageHandler:nil]; + } + } + { + FlutterBasicMessageChannel *channel = [[FlutterBasicMessageChannel alloc] + initWithName:[NSString + stringWithFormat:@"%@%@", + @"dev.flutter.pigeon.firebase_auth_platform_interface." + @"FirebaseAuthUserHostApi.linkWithProvider", + messageChannelSuffix] + binaryMessenger:binaryMessenger + codec:nullGetFirebaseAuthMessagesCodec()]; + if (api) { + NSCAssert([api respondsToSelector:@selector(linkWithProviderApp:signInProvider:completion:)], + @"FirebaseAuthUserHostApi api (%@) doesn't respond to " + @"@selector(linkWithProviderApp:signInProvider:completion:)", + api); + [channel setMessageHandler:^(id _Nullable message, FlutterReply callback) { + NSArray *args = message; + AuthPigeonFirebaseApp *arg_app = GetNullableObjectAtIndex(args, 0); + InternalSignInProvider *arg_signInProvider = GetNullableObjectAtIndex(args, 1); + [api linkWithProviderApp:arg_app + signInProvider:arg_signInProvider + completion:^(InternalUserCredential *_Nullable output, + FlutterError *_Nullable error) { + callback(wrapResult(output, error)); + }]; + }]; + } else { + [channel setMessageHandler:nil]; + } + } + { + FlutterBasicMessageChannel *channel = [[FlutterBasicMessageChannel alloc] + initWithName: + [NSString stringWithFormat:@"%@%@", + @"dev.flutter.pigeon.firebase_auth_platform_interface." + @"FirebaseAuthUserHostApi.reauthenticateWithCredential", + messageChannelSuffix] + binaryMessenger:binaryMessenger + codec:nullGetFirebaseAuthMessagesCodec()]; + if (api) { + NSCAssert( + [api respondsToSelector:@selector(reauthenticateWithCredentialApp:input:completion:)], + @"FirebaseAuthUserHostApi api (%@) doesn't respond to " + @"@selector(reauthenticateWithCredentialApp:input:completion:)", + api); + [channel setMessageHandler:^(id _Nullable message, FlutterReply callback) { + NSArray *args = message; + AuthPigeonFirebaseApp *arg_app = GetNullableObjectAtIndex(args, 0); + NSDictionary *arg_input = GetNullableObjectAtIndex(args, 1); + [api reauthenticateWithCredentialApp:arg_app + input:arg_input + completion:^(InternalUserCredential *_Nullable output, + FlutterError *_Nullable error) { + callback(wrapResult(output, error)); + }]; + }]; + } else { + [channel setMessageHandler:nil]; + } + } + { + FlutterBasicMessageChannel *channel = [[FlutterBasicMessageChannel alloc] + initWithName:[NSString + stringWithFormat:@"%@%@", + @"dev.flutter.pigeon.firebase_auth_platform_interface." + @"FirebaseAuthUserHostApi.reauthenticateWithProvider", + messageChannelSuffix] + binaryMessenger:binaryMessenger + codec:nullGetFirebaseAuthMessagesCodec()]; + if (api) { + NSCAssert( + [api respondsToSelector:@selector( + reauthenticateWithProviderApp:signInProvider:completion:)], + @"FirebaseAuthUserHostApi api (%@) doesn't respond to " + @"@selector(reauthenticateWithProviderApp:signInProvider:completion:)", + api); + [channel setMessageHandler:^(id _Nullable message, FlutterReply callback) { + NSArray *args = message; + AuthPigeonFirebaseApp *arg_app = GetNullableObjectAtIndex(args, 0); + InternalSignInProvider *arg_signInProvider = GetNullableObjectAtIndex(args, 1); + [api reauthenticateWithProviderApp:arg_app + signInProvider:arg_signInProvider + completion:^(InternalUserCredential *_Nullable output, + FlutterError *_Nullable error) { + callback(wrapResult(output, error)); + }]; + }]; + } else { + [channel setMessageHandler:nil]; + } + } + { + FlutterBasicMessageChannel *channel = [[FlutterBasicMessageChannel alloc] + initWithName:[NSString stringWithFormat:@"%@%@", + @"dev.flutter.pigeon.firebase_auth_platform_" + @"interface.FirebaseAuthUserHostApi.reload", + messageChannelSuffix] + binaryMessenger:binaryMessenger + codec:nullGetFirebaseAuthMessagesCodec()]; + if (api) { + NSCAssert( + [api respondsToSelector:@selector(reloadApp:completion:)], + @"FirebaseAuthUserHostApi api (%@) doesn't respond to @selector(reloadApp:completion:)", + api); + [channel setMessageHandler:^(id _Nullable message, FlutterReply callback) { + NSArray *args = message; + AuthPigeonFirebaseApp *arg_app = GetNullableObjectAtIndex(args, 0); + [api reloadApp:arg_app + completion:^(InternalUserDetails *_Nullable output, FlutterError *_Nullable error) { + callback(wrapResult(output, error)); + }]; + }]; + } else { + [channel setMessageHandler:nil]; + } + } + { + FlutterBasicMessageChannel *channel = [[FlutterBasicMessageChannel alloc] + initWithName:[NSString + stringWithFormat:@"%@%@", + @"dev.flutter.pigeon.firebase_auth_platform_interface." + @"FirebaseAuthUserHostApi.sendEmailVerification", + messageChannelSuffix] + binaryMessenger:binaryMessenger + codec:nullGetFirebaseAuthMessagesCodec()]; + if (api) { + NSCAssert( + [api respondsToSelector:@selector( + sendEmailVerificationApp:actionCodeSettings:completion:)], + @"FirebaseAuthUserHostApi api (%@) doesn't respond to " + @"@selector(sendEmailVerificationApp:actionCodeSettings:completion:)", + api); + [channel setMessageHandler:^(id _Nullable message, FlutterReply callback) { + NSArray *args = message; + AuthPigeonFirebaseApp *arg_app = GetNullableObjectAtIndex(args, 0); + InternalActionCodeSettings *arg_actionCodeSettings = GetNullableObjectAtIndex(args, 1); + [api sendEmailVerificationApp:arg_app + actionCodeSettings:arg_actionCodeSettings + completion:^(FlutterError *_Nullable error) { + callback(wrapResult(nil, error)); + }]; + }]; + } else { + [channel setMessageHandler:nil]; + } + } + { + FlutterBasicMessageChannel *channel = [[FlutterBasicMessageChannel alloc] + initWithName:[NSString stringWithFormat:@"%@%@", + @"dev.flutter.pigeon.firebase_auth_platform_" + @"interface.FirebaseAuthUserHostApi.unlink", + messageChannelSuffix] + binaryMessenger:binaryMessenger + codec:nullGetFirebaseAuthMessagesCodec()]; + if (api) { + NSCAssert([api respondsToSelector:@selector(unlinkApp:providerId:completion:)], + @"FirebaseAuthUserHostApi api (%@) doesn't respond to " + @"@selector(unlinkApp:providerId:completion:)", + api); + [channel setMessageHandler:^(id _Nullable message, FlutterReply callback) { + NSArray *args = message; + AuthPigeonFirebaseApp *arg_app = GetNullableObjectAtIndex(args, 0); + NSString *arg_providerId = GetNullableObjectAtIndex(args, 1); + [api unlinkApp:arg_app + providerId:arg_providerId + completion:^(InternalUserCredential *_Nullable output, FlutterError *_Nullable error) { + callback(wrapResult(output, error)); + }]; + }]; + } else { + [channel setMessageHandler:nil]; + } + } + { + FlutterBasicMessageChannel *channel = [[FlutterBasicMessageChannel alloc] + initWithName:[NSString stringWithFormat:@"%@%@", + @"dev.flutter.pigeon.firebase_auth_platform_" + @"interface.FirebaseAuthUserHostApi.updateEmail", + messageChannelSuffix] + binaryMessenger:binaryMessenger + codec:nullGetFirebaseAuthMessagesCodec()]; + if (api) { + NSCAssert([api respondsToSelector:@selector(updateEmailApp:newEmail:completion:)], + @"FirebaseAuthUserHostApi api (%@) doesn't respond to " + @"@selector(updateEmailApp:newEmail:completion:)", + api); + [channel setMessageHandler:^(id _Nullable message, FlutterReply callback) { + NSArray *args = message; + AuthPigeonFirebaseApp *arg_app = GetNullableObjectAtIndex(args, 0); + NSString *arg_newEmail = GetNullableObjectAtIndex(args, 1); + [api + updateEmailApp:arg_app + newEmail:arg_newEmail + completion:^(InternalUserDetails *_Nullable output, FlutterError *_Nullable error) { + callback(wrapResult(output, error)); + }]; + }]; + } else { + [channel setMessageHandler:nil]; + } + } + { + FlutterBasicMessageChannel *channel = [[FlutterBasicMessageChannel alloc] + initWithName:[NSString + stringWithFormat:@"%@%@", + @"dev.flutter.pigeon.firebase_auth_platform_interface." + @"FirebaseAuthUserHostApi.updatePassword", + messageChannelSuffix] + binaryMessenger:binaryMessenger + codec:nullGetFirebaseAuthMessagesCodec()]; + if (api) { + NSCAssert([api respondsToSelector:@selector(updatePasswordApp:newPassword:completion:)], + @"FirebaseAuthUserHostApi api (%@) doesn't respond to " + @"@selector(updatePasswordApp:newPassword:completion:)", + api); + [channel setMessageHandler:^(id _Nullable message, FlutterReply callback) { + NSArray *args = message; + AuthPigeonFirebaseApp *arg_app = GetNullableObjectAtIndex(args, 0); + NSString *arg_newPassword = GetNullableObjectAtIndex(args, 1); + [api updatePasswordApp:arg_app + newPassword:arg_newPassword + completion:^(InternalUserDetails *_Nullable output, + FlutterError *_Nullable error) { + callback(wrapResult(output, error)); + }]; + }]; + } else { + [channel setMessageHandler:nil]; + } + } + { + FlutterBasicMessageChannel *channel = [[FlutterBasicMessageChannel alloc] + initWithName:[NSString + stringWithFormat:@"%@%@", + @"dev.flutter.pigeon.firebase_auth_platform_interface." + @"FirebaseAuthUserHostApi.updatePhoneNumber", + messageChannelSuffix] + binaryMessenger:binaryMessenger + codec:nullGetFirebaseAuthMessagesCodec()]; + if (api) { + NSCAssert([api respondsToSelector:@selector(updatePhoneNumberApp:input:completion:)], + @"FirebaseAuthUserHostApi api (%@) doesn't respond to " + @"@selector(updatePhoneNumberApp:input:completion:)", + api); + [channel setMessageHandler:^(id _Nullable message, FlutterReply callback) { + NSArray *args = message; + AuthPigeonFirebaseApp *arg_app = GetNullableObjectAtIndex(args, 0); + NSDictionary *arg_input = GetNullableObjectAtIndex(args, 1); + [api updatePhoneNumberApp:arg_app + input:arg_input + completion:^(InternalUserDetails *_Nullable output, + FlutterError *_Nullable error) { + callback(wrapResult(output, error)); + }]; + }]; + } else { + [channel setMessageHandler:nil]; + } + } + { + FlutterBasicMessageChannel *channel = [[FlutterBasicMessageChannel alloc] + initWithName:[NSString + stringWithFormat:@"%@%@", + @"dev.flutter.pigeon.firebase_auth_platform_interface." + @"FirebaseAuthUserHostApi.updateProfile", + messageChannelSuffix] + binaryMessenger:binaryMessenger + codec:nullGetFirebaseAuthMessagesCodec()]; + if (api) { + NSCAssert([api respondsToSelector:@selector(updateProfileApp:profile:completion:)], + @"FirebaseAuthUserHostApi api (%@) doesn't respond to " + @"@selector(updateProfileApp:profile:completion:)", + api); + [channel setMessageHandler:^(id _Nullable message, FlutterReply callback) { + NSArray *args = message; + AuthPigeonFirebaseApp *arg_app = GetNullableObjectAtIndex(args, 0); + InternalUserProfile *arg_profile = GetNullableObjectAtIndex(args, 1); + [api updateProfileApp:arg_app + profile:arg_profile + completion:^(InternalUserDetails *_Nullable output, + FlutterError *_Nullable error) { + callback(wrapResult(output, error)); + }]; + }]; + } else { + [channel setMessageHandler:nil]; + } + } + { + FlutterBasicMessageChannel *channel = [[FlutterBasicMessageChannel alloc] + initWithName:[NSString + stringWithFormat:@"%@%@", + @"dev.flutter.pigeon.firebase_auth_platform_interface." + @"FirebaseAuthUserHostApi.verifyBeforeUpdateEmail", + messageChannelSuffix] + binaryMessenger:binaryMessenger + codec:nullGetFirebaseAuthMessagesCodec()]; + if (api) { + NSCAssert([api respondsToSelector:@selector(verifyBeforeUpdateEmailApp:newEmail: + actionCodeSettings:completion:)], + @"FirebaseAuthUserHostApi api (%@) doesn't respond to " + @"@selector(verifyBeforeUpdateEmailApp:newEmail:actionCodeSettings:completion:)", + api); + [channel setMessageHandler:^(id _Nullable message, FlutterReply callback) { + NSArray *args = message; + AuthPigeonFirebaseApp *arg_app = GetNullableObjectAtIndex(args, 0); + NSString *arg_newEmail = GetNullableObjectAtIndex(args, 1); + InternalActionCodeSettings *arg_actionCodeSettings = GetNullableObjectAtIndex(args, 2); + [api verifyBeforeUpdateEmailApp:arg_app + newEmail:arg_newEmail + actionCodeSettings:arg_actionCodeSettings + completion:^(FlutterError *_Nullable error) { + callback(wrapResult(nil, error)); + }]; + }]; + } else { + [channel setMessageHandler:nil]; + } + } +} +void SetUpMultiFactorUserHostApi(id binaryMessenger, + NSObject *api) { + SetUpMultiFactorUserHostApiWithSuffix(binaryMessenger, api, @""); +} + +void SetUpMultiFactorUserHostApiWithSuffix(id binaryMessenger, + NSObject *api, + NSString *messageChannelSuffix) { + messageChannelSuffix = messageChannelSuffix.length > 0 + ? [NSString stringWithFormat:@".%@", messageChannelSuffix] + : @""; + { + FlutterBasicMessageChannel *channel = [[FlutterBasicMessageChannel alloc] + initWithName:[NSString stringWithFormat:@"%@%@", + @"dev.flutter.pigeon.firebase_auth_platform_" + @"interface.MultiFactorUserHostApi.enrollPhone", + messageChannelSuffix] + binaryMessenger:binaryMessenger + codec:nullGetFirebaseAuthMessagesCodec()]; + if (api) { + NSCAssert( + [api respondsToSelector:@selector(enrollPhoneApp:assertion:displayName:completion:)], + @"MultiFactorUserHostApi api (%@) doesn't respond to " + @"@selector(enrollPhoneApp:assertion:displayName:completion:)", + api); + [channel setMessageHandler:^(id _Nullable message, FlutterReply callback) { + NSArray *args = message; + AuthPigeonFirebaseApp *arg_app = GetNullableObjectAtIndex(args, 0); + InternalPhoneMultiFactorAssertion *arg_assertion = GetNullableObjectAtIndex(args, 1); + NSString *arg_displayName = GetNullableObjectAtIndex(args, 2); + [api enrollPhoneApp:arg_app + assertion:arg_assertion + displayName:arg_displayName + completion:^(FlutterError *_Nullable error) { + callback(wrapResult(nil, error)); + }]; + }]; + } else { + [channel setMessageHandler:nil]; + } + } + { + FlutterBasicMessageChannel *channel = [[FlutterBasicMessageChannel alloc] + initWithName:[NSString stringWithFormat:@"%@%@", + @"dev.flutter.pigeon.firebase_auth_platform_" + @"interface.MultiFactorUserHostApi.enrollTotp", + messageChannelSuffix] + binaryMessenger:binaryMessenger + codec:nullGetFirebaseAuthMessagesCodec()]; + if (api) { + NSCAssert( + [api respondsToSelector:@selector(enrollTotpApp:assertionId:displayName:completion:)], + @"MultiFactorUserHostApi api (%@) doesn't respond to " + @"@selector(enrollTotpApp:assertionId:displayName:completion:)", + api); + [channel setMessageHandler:^(id _Nullable message, FlutterReply callback) { + NSArray *args = message; + AuthPigeonFirebaseApp *arg_app = GetNullableObjectAtIndex(args, 0); + NSString *arg_assertionId = GetNullableObjectAtIndex(args, 1); + NSString *arg_displayName = GetNullableObjectAtIndex(args, 2); + [api enrollTotpApp:arg_app + assertionId:arg_assertionId + displayName:arg_displayName + completion:^(FlutterError *_Nullable error) { + callback(wrapResult(nil, error)); + }]; + }]; + } else { + [channel setMessageHandler:nil]; + } + } + { + FlutterBasicMessageChannel *channel = [[FlutterBasicMessageChannel alloc] + initWithName:[NSString stringWithFormat:@"%@%@", + @"dev.flutter.pigeon.firebase_auth_platform_" + @"interface.MultiFactorUserHostApi.getSession", + messageChannelSuffix] + binaryMessenger:binaryMessenger + codec:nullGetFirebaseAuthMessagesCodec()]; + if (api) { + NSCAssert([api respondsToSelector:@selector(getSessionApp:completion:)], + @"MultiFactorUserHostApi api (%@) doesn't respond to " + @"@selector(getSessionApp:completion:)", + api); + [channel setMessageHandler:^(id _Nullable message, FlutterReply callback) { + NSArray *args = message; + AuthPigeonFirebaseApp *arg_app = GetNullableObjectAtIndex(args, 0); + [api getSessionApp:arg_app + completion:^(InternalMultiFactorSession *_Nullable output, + FlutterError *_Nullable error) { + callback(wrapResult(output, error)); + }]; + }]; + } else { + [channel setMessageHandler:nil]; + } + } + { + FlutterBasicMessageChannel *channel = [[FlutterBasicMessageChannel alloc] + initWithName:[NSString stringWithFormat:@"%@%@", + @"dev.flutter.pigeon.firebase_auth_platform_" + @"interface.MultiFactorUserHostApi.unenroll", + messageChannelSuffix] + binaryMessenger:binaryMessenger + codec:nullGetFirebaseAuthMessagesCodec()]; + if (api) { + NSCAssert([api respondsToSelector:@selector(unenrollApp:factorUid:completion:)], + @"MultiFactorUserHostApi api (%@) doesn't respond to " + @"@selector(unenrollApp:factorUid:completion:)", + api); + [channel setMessageHandler:^(id _Nullable message, FlutterReply callback) { + NSArray *args = message; + AuthPigeonFirebaseApp *arg_app = GetNullableObjectAtIndex(args, 0); + NSString *arg_factorUid = GetNullableObjectAtIndex(args, 1); + [api unenrollApp:arg_app + factorUid:arg_factorUid + completion:^(FlutterError *_Nullable error) { + callback(wrapResult(nil, error)); + }]; + }]; + } else { + [channel setMessageHandler:nil]; + } + } + { + FlutterBasicMessageChannel *channel = [[FlutterBasicMessageChannel alloc] + initWithName:[NSString + stringWithFormat:@"%@%@", + @"dev.flutter.pigeon.firebase_auth_platform_interface." + @"MultiFactorUserHostApi.getEnrolledFactors", + messageChannelSuffix] + binaryMessenger:binaryMessenger + codec:nullGetFirebaseAuthMessagesCodec()]; + if (api) { + NSCAssert([api respondsToSelector:@selector(getEnrolledFactorsApp:completion:)], + @"MultiFactorUserHostApi api (%@) doesn't respond to " + @"@selector(getEnrolledFactorsApp:completion:)", + api); + [channel setMessageHandler:^(id _Nullable message, FlutterReply callback) { + NSArray *args = message; + AuthPigeonFirebaseApp *arg_app = GetNullableObjectAtIndex(args, 0); + [api getEnrolledFactorsApp:arg_app + completion:^(NSArray *_Nullable output, + FlutterError *_Nullable error) { + callback(wrapResult(output, error)); + }]; + }]; + } else { + [channel setMessageHandler:nil]; + } + } +} +void SetUpMultiFactoResolverHostApi(id binaryMessenger, + NSObject *api) { + SetUpMultiFactoResolverHostApiWithSuffix(binaryMessenger, api, @""); +} + +void SetUpMultiFactoResolverHostApiWithSuffix(id binaryMessenger, + NSObject *api, + NSString *messageChannelSuffix) { + messageChannelSuffix = messageChannelSuffix.length > 0 + ? [NSString stringWithFormat:@".%@", messageChannelSuffix] + : @""; + { + FlutterBasicMessageChannel *channel = [[FlutterBasicMessageChannel alloc] + initWithName:[NSString + stringWithFormat:@"%@%@", + @"dev.flutter.pigeon.firebase_auth_platform_interface." + @"MultiFactoResolverHostApi.resolveSignIn", + messageChannelSuffix] + binaryMessenger:binaryMessenger + codec:nullGetFirebaseAuthMessagesCodec()]; + if (api) { + NSCAssert([api respondsToSelector: + @selector(resolveSignInResolverId:assertion:totpAssertionId:completion:)], + @"MultiFactoResolverHostApi api (%@) doesn't respond to " + @"@selector(resolveSignInResolverId:assertion:totpAssertionId:completion:)", + api); + [channel setMessageHandler:^(id _Nullable message, FlutterReply callback) { + NSArray *args = message; + NSString *arg_resolverId = GetNullableObjectAtIndex(args, 0); + InternalPhoneMultiFactorAssertion *arg_assertion = GetNullableObjectAtIndex(args, 1); + NSString *arg_totpAssertionId = GetNullableObjectAtIndex(args, 2); + [api resolveSignInResolverId:arg_resolverId + assertion:arg_assertion + totpAssertionId:arg_totpAssertionId + completion:^(InternalUserCredential *_Nullable output, + FlutterError *_Nullable error) { + callback(wrapResult(output, error)); + }]; + }]; + } else { + [channel setMessageHandler:nil]; + } + } +} +void SetUpMultiFactorTotpHostApi(id binaryMessenger, + NSObject *api) { + SetUpMultiFactorTotpHostApiWithSuffix(binaryMessenger, api, @""); +} + +void SetUpMultiFactorTotpHostApiWithSuffix(id binaryMessenger, + NSObject *api, + NSString *messageChannelSuffix) { + messageChannelSuffix = messageChannelSuffix.length > 0 + ? [NSString stringWithFormat:@".%@", messageChannelSuffix] + : @""; + { + FlutterBasicMessageChannel *channel = [[FlutterBasicMessageChannel alloc] + initWithName:[NSString + stringWithFormat:@"%@%@", + @"dev.flutter.pigeon.firebase_auth_platform_interface." + @"MultiFactorTotpHostApi.generateSecret", + messageChannelSuffix] + binaryMessenger:binaryMessenger + codec:nullGetFirebaseAuthMessagesCodec()]; + if (api) { + NSCAssert([api respondsToSelector:@selector(generateSecretSessionId:completion:)], + @"MultiFactorTotpHostApi api (%@) doesn't respond to " + @"@selector(generateSecretSessionId:completion:)", + api); + [channel setMessageHandler:^(id _Nullable message, FlutterReply callback) { + NSArray *args = message; + NSString *arg_sessionId = GetNullableObjectAtIndex(args, 0); + [api generateSecretSessionId:arg_sessionId + completion:^(InternalTotpSecret *_Nullable output, + FlutterError *_Nullable error) { + callback(wrapResult(output, error)); + }]; + }]; + } else { + [channel setMessageHandler:nil]; + } + } + { + FlutterBasicMessageChannel *channel = [[FlutterBasicMessageChannel alloc] + initWithName:[NSString + stringWithFormat:@"%@%@", + @"dev.flutter.pigeon.firebase_auth_platform_interface." + @"MultiFactorTotpHostApi.getAssertionForEnrollment", + messageChannelSuffix] + binaryMessenger:binaryMessenger + codec:nullGetFirebaseAuthMessagesCodec()]; + if (api) { + NSCAssert([api respondsToSelector: + @selector(getAssertionForEnrollmentSecretKey:oneTimePassword:completion:)], + @"MultiFactorTotpHostApi api (%@) doesn't respond to " + @"@selector(getAssertionForEnrollmentSecretKey:oneTimePassword:completion:)", + api); + [channel setMessageHandler:^(id _Nullable message, FlutterReply callback) { + NSArray *args = message; + NSString *arg_secretKey = GetNullableObjectAtIndex(args, 0); + NSString *arg_oneTimePassword = GetNullableObjectAtIndex(args, 1); + [api getAssertionForEnrollmentSecretKey:arg_secretKey + oneTimePassword:arg_oneTimePassword + completion:^(NSString *_Nullable output, + FlutterError *_Nullable error) { + callback(wrapResult(output, error)); + }]; + }]; + } else { + [channel setMessageHandler:nil]; + } + } + { + FlutterBasicMessageChannel *channel = [[FlutterBasicMessageChannel alloc] + initWithName:[NSString + stringWithFormat:@"%@%@", + @"dev.flutter.pigeon.firebase_auth_platform_interface." + @"MultiFactorTotpHostApi.getAssertionForSignIn", + messageChannelSuffix] + binaryMessenger:binaryMessenger + codec:nullGetFirebaseAuthMessagesCodec()]; + if (api) { + NSCAssert([api respondsToSelector: + @selector(getAssertionForSignInEnrollmentId:oneTimePassword:completion:)], + @"MultiFactorTotpHostApi api (%@) doesn't respond to " + @"@selector(getAssertionForSignInEnrollmentId:oneTimePassword:completion:)", + api); + [channel setMessageHandler:^(id _Nullable message, FlutterReply callback) { + NSArray *args = message; + NSString *arg_enrollmentId = GetNullableObjectAtIndex(args, 0); + NSString *arg_oneTimePassword = GetNullableObjectAtIndex(args, 1); + [api getAssertionForSignInEnrollmentId:arg_enrollmentId + oneTimePassword:arg_oneTimePassword + completion:^(NSString *_Nullable output, + FlutterError *_Nullable error) { + callback(wrapResult(output, error)); + }]; + }]; + } else { + [channel setMessageHandler:nil]; + } + } +} +void SetUpMultiFactorTotpSecretHostApi(id binaryMessenger, + NSObject *api) { + SetUpMultiFactorTotpSecretHostApiWithSuffix(binaryMessenger, api, @""); +} + +void SetUpMultiFactorTotpSecretHostApiWithSuffix(id binaryMessenger, + NSObject *api, + NSString *messageChannelSuffix) { + messageChannelSuffix = messageChannelSuffix.length > 0 + ? [NSString stringWithFormat:@".%@", messageChannelSuffix] + : @""; + { + FlutterBasicMessageChannel *channel = [[FlutterBasicMessageChannel alloc] + initWithName:[NSString + stringWithFormat:@"%@%@", + @"dev.flutter.pigeon.firebase_auth_platform_interface." + @"MultiFactorTotpSecretHostApi.generateQrCodeUrl", + messageChannelSuffix] + binaryMessenger:binaryMessenger + codec:nullGetFirebaseAuthMessagesCodec()]; + if (api) { + NSCAssert( + [api respondsToSelector:@selector( + generateQrCodeUrlSecretKey:accountName:issuer:completion:)], + @"MultiFactorTotpSecretHostApi api (%@) doesn't respond to " + @"@selector(generateQrCodeUrlSecretKey:accountName:issuer:completion:)", + api); + [channel setMessageHandler:^(id _Nullable message, FlutterReply callback) { + NSArray *args = message; + NSString *arg_secretKey = GetNullableObjectAtIndex(args, 0); + NSString *arg_accountName = GetNullableObjectAtIndex(args, 1); + NSString *arg_issuer = GetNullableObjectAtIndex(args, 2); + [api generateQrCodeUrlSecretKey:arg_secretKey + accountName:arg_accountName + issuer:arg_issuer + completion:^(NSString *_Nullable output, + FlutterError *_Nullable error) { + callback(wrapResult(output, error)); + }]; + }]; + } else { + [channel setMessageHandler:nil]; + } + } + { + FlutterBasicMessageChannel *channel = [[FlutterBasicMessageChannel alloc] + initWithName:[NSString + stringWithFormat:@"%@%@", + @"dev.flutter.pigeon.firebase_auth_platform_interface." + @"MultiFactorTotpSecretHostApi.openInOtpApp", + messageChannelSuffix] + binaryMessenger:binaryMessenger + codec:nullGetFirebaseAuthMessagesCodec()]; + if (api) { + NSCAssert([api respondsToSelector:@selector(openInOtpAppSecretKey:qrCodeUrl:completion:)], + @"MultiFactorTotpSecretHostApi api (%@) doesn't respond to " + @"@selector(openInOtpAppSecretKey:qrCodeUrl:completion:)", + api); + [channel setMessageHandler:^(id _Nullable message, FlutterReply callback) { + NSArray *args = message; + NSString *arg_secretKey = GetNullableObjectAtIndex(args, 0); + NSString *arg_qrCodeUrl = GetNullableObjectAtIndex(args, 1); + [api openInOtpAppSecretKey:arg_secretKey + qrCodeUrl:arg_qrCodeUrl + completion:^(FlutterError *_Nullable error) { + callback(wrapResult(nil, error)); + }]; + }]; + } else { + [channel setMessageHandler:nil]; + } + } +} +void SetUpGenerateInterfaces(id binaryMessenger, + NSObject *api) { + SetUpGenerateInterfacesWithSuffix(binaryMessenger, api, @""); +} + +void SetUpGenerateInterfacesWithSuffix(id binaryMessenger, + NSObject *api, + NSString *messageChannelSuffix) { + messageChannelSuffix = messageChannelSuffix.length > 0 + ? [NSString stringWithFormat:@".%@", messageChannelSuffix] + : @""; + { + FlutterBasicMessageChannel *channel = [[FlutterBasicMessageChannel alloc] + initWithName:[NSString stringWithFormat:@"%@%@", + @"dev.flutter.pigeon.firebase_auth_platform_" + @"interface.GenerateInterfaces.pigeonInterface", + messageChannelSuffix] + binaryMessenger:binaryMessenger + codec:nullGetFirebaseAuthMessagesCodec()]; + if (api) { + NSCAssert( + [api respondsToSelector:@selector(pigeonInterfaceInfo:error:)], + @"GenerateInterfaces api (%@) doesn't respond to @selector(pigeonInterfaceInfo:error:)", + api); + [channel setMessageHandler:^(id _Nullable message, FlutterReply callback) { + NSArray *args = message; + InternalMultiFactorInfo *arg_info = GetNullableObjectAtIndex(args, 0); + FlutterError *error; + [api pigeonInterfaceInfo:arg_info error:&error]; + callback(wrapResult(nil, error)); + }]; + } else { + [channel setMessageHandler:nil]; + } + } +} diff --git a/mih_ui/android/build/macos/SourcePackages/firebase_auth-6.5.4/macos/firebase_auth/Sources/firebase_auth/include/Private/FLTAuthStateChannelStreamHandler.h b/mih_ui/android/build/macos/SourcePackages/firebase_auth-6.5.4/macos/firebase_auth/Sources/firebase_auth/include/Private/FLTAuthStateChannelStreamHandler.h new file mode 100644 index 00000000..7b7efae7 --- /dev/null +++ b/mih_ui/android/build/macos/SourcePackages/firebase_auth-6.5.4/macos/firebase_auth/Sources/firebase_auth/include/Private/FLTAuthStateChannelStreamHandler.h @@ -0,0 +1,26 @@ +// Copyright 2021 The Chromium Authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +#import + +#if TARGET_OS_OSX +#import +#else +#import +#endif + +#import +#import "../Public/CustomPigeonHeader.h" + +@class FIRAuth; + +NS_ASSUME_NONNULL_BEGIN + +@interface FLTAuthStateChannelStreamHandler : NSObject + +- (instancetype)initWithAuth:(FIRAuth *)auth; + +@end + +NS_ASSUME_NONNULL_END diff --git a/mih_ui/android/build/macos/SourcePackages/firebase_auth-6.5.4/macos/firebase_auth/Sources/firebase_auth/include/Private/FLTIdTokenChannelStreamHandler.h b/mih_ui/android/build/macos/SourcePackages/firebase_auth-6.5.4/macos/firebase_auth/Sources/firebase_auth/include/Private/FLTIdTokenChannelStreamHandler.h new file mode 100644 index 00000000..c1660499 --- /dev/null +++ b/mih_ui/android/build/macos/SourcePackages/firebase_auth-6.5.4/macos/firebase_auth/Sources/firebase_auth/include/Private/FLTIdTokenChannelStreamHandler.h @@ -0,0 +1,27 @@ +// Copyright 2021 The Chromium Authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +#import + +#if TARGET_OS_OSX +#import +#else +#import +#endif + +#import "../Public/CustomPigeonHeader.h" + +#import + +@class FIRAuth; + +NS_ASSUME_NONNULL_BEGIN + +@interface FLTIdTokenChannelStreamHandler : NSObject + +- (instancetype)initWithAuth:(FIRAuth *)auth; + +@end + +NS_ASSUME_NONNULL_END diff --git a/mih_ui/android/build/macos/SourcePackages/firebase_auth-6.5.4/macos/firebase_auth/Sources/firebase_auth/include/Private/FLTPhoneNumberVerificationStreamHandler.h b/mih_ui/android/build/macos/SourcePackages/firebase_auth-6.5.4/macos/firebase_auth/Sources/firebase_auth/include/Private/FLTPhoneNumberVerificationStreamHandler.h new file mode 100644 index 00000000..53e5f28c --- /dev/null +++ b/mih_ui/android/build/macos/SourcePackages/firebase_auth-6.5.4/macos/firebase_auth/Sources/firebase_auth/include/Private/FLTPhoneNumberVerificationStreamHandler.h @@ -0,0 +1,36 @@ +// Copyright 2021 The Chromium Authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +#import + +#if TARGET_OS_OSX +#import +#else +#import +#endif + +#import "../Public/firebase_auth_messages.g.h" + +#import + +@class FIRAuth; +@class FIRMultiFactorSession; +@class FIRPhoneMultiFactorInfo; + +NS_ASSUME_NONNULL_BEGIN + +@interface FLTPhoneNumberVerificationStreamHandler : NSObject + +#if TARGET_OS_OSX +- (instancetype)initWithAuth:(FIRAuth *)auth arguments:(NSDictionary *)arguments; +#else +- (instancetype)initWithAuth:(FIRAuth *)auth + request:(InternalVerifyPhoneNumberRequest *)request + session:(FIRMultiFactorSession *)session + factorInfo:(FIRPhoneMultiFactorInfo *)factorInfo; +#endif + +@end + +NS_ASSUME_NONNULL_END diff --git a/mih_ui/android/build/macos/SourcePackages/firebase_auth-6.5.4/macos/firebase_auth/Sources/firebase_auth/include/Private/PigeonParser.h b/mih_ui/android/build/macos/SourcePackages/firebase_auth-6.5.4/macos/firebase_auth/Sources/firebase_auth/include/Private/PigeonParser.h new file mode 100644 index 00000000..b500fd2c --- /dev/null +++ b/mih_ui/android/build/macos/SourcePackages/firebase_auth-6.5.4/macos/firebase_auth/Sources/firebase_auth/include/Private/PigeonParser.h @@ -0,0 +1,33 @@ +/* + * Copyright 2023, the Chromium project authors. Please see the AUTHORS file + * for details. All rights reserved. Use of this source code is governed by a + * BSD-style license that can be found in the LICENSE file. + */ + +#import +#import "../Public/firebase_auth_messages.g.h" + +@class FIRAuthDataResult; +@class FIRUser; +@class FIRActionCodeSettings; +@class FIRAuthTokenResult; +@class FIRTOTPSecret; +@class FIRAuthCredential; + +@interface PigeonParser : NSObject + ++ (NSArray *_Nonnull)getManualList:(nonnull InternalUserDetails *)userDetails; ++ (InternalUserCredential *_Nullable) + getPigeonUserCredentialFromAuthResult:(nonnull FIRAuthDataResult *)authResult + authorizationCode:(nullable NSString *)authorizationCode; ++ (InternalUserDetails *_Nullable)getPigeonDetails:(nonnull FIRUser *)user; ++ (InternalUserInfo *_Nullable)getPigeonUserInfo:(nonnull FIRUser *)user; ++ (FIRActionCodeSettings *_Nullable)parseActionCodeSettings: + (nullable InternalActionCodeSettings *)settings; ++ (InternalUserCredential *_Nullable)getPigeonUserCredentialFromFIRUser:(nonnull FIRUser *)user; ++ (InternalIdTokenResult *_Nonnull)parseIdTokenResult:(nonnull FIRAuthTokenResult *)tokenResult; ++ (InternalTotpSecret *_Nonnull)getPigeonTotpSecret:(nonnull FIRTOTPSecret *)secret; ++ (InternalAuthCredential *_Nullable)getPigeonAuthCredential: + (FIRAuthCredential *_Nullable)authCredentialToken + token:(NSNumber *_Nullable)token; +@end diff --git a/mih_ui/android/build/macos/SourcePackages/firebase_auth-6.5.4/macos/firebase_auth/Sources/firebase_auth/include/Public/CustomPigeonHeader.h b/mih_ui/android/build/macos/SourcePackages/firebase_auth-6.5.4/macos/firebase_auth/Sources/firebase_auth/include/Public/CustomPigeonHeader.h new file mode 100644 index 00000000..d32a6b45 --- /dev/null +++ b/mih_ui/android/build/macos/SourcePackages/firebase_auth-6.5.4/macos/firebase_auth/Sources/firebase_auth/include/Public/CustomPigeonHeader.h @@ -0,0 +1,16 @@ +// Copyright 2021 The Chromium Authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. +#import "firebase_auth_messages.g.h" + +@interface InternalMultiFactorInfo (Map) +- (NSDictionary *)toList; +@end + +@interface InternalUserDetails (Map) +- (NSDictionary *)toList; +@end + +@interface InternalUserInfo (Map) +- (NSDictionary *)toList; +@end diff --git a/mih_ui/android/build/macos/SourcePackages/firebase_auth-6.5.4/macos/firebase_auth/Sources/firebase_auth/include/Public/FLTFirebaseAuthPlugin.h b/mih_ui/android/build/macos/SourcePackages/firebase_auth-6.5.4/macos/firebase_auth/Sources/firebase_auth/include/Public/FLTFirebaseAuthPlugin.h new file mode 100644 index 00000000..53e20eca --- /dev/null +++ b/mih_ui/android/build/macos/SourcePackages/firebase_auth-6.5.4/macos/firebase_auth/Sources/firebase_auth/include/Public/FLTFirebaseAuthPlugin.h @@ -0,0 +1,45 @@ +// Copyright 2020 The Chromium Authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +#import + +#if TARGET_OS_OSX +#import +#else +#import +#endif + +#import +#import +#if __has_include() +#import +#else +#import +#endif +#import "firebase_auth_messages.g.h" + +#if !TARGET_OS_OSX +@protocol FlutterSceneLifeCycleDelegate; +#endif + +@interface FLTFirebaseAuthPlugin + : FLTFirebasePlugin ) + , + FlutterSceneLifeCycleDelegate +#endif +#endif + > + ++ (FlutterError *)convertToFlutterError:(NSError *)error; +@end diff --git a/mih_ui/android/build/macos/SourcePackages/firebase_auth-6.5.4/macos/firebase_auth/Sources/firebase_auth/include/Public/firebase_auth_messages.g.h b/mih_ui/android/build/macos/SourcePackages/firebase_auth-6.5.4/macos/firebase_auth/Sources/firebase_auth/include/Public/firebase_auth_messages.g.h new file mode 100644 index 00000000..f83da7e3 --- /dev/null +++ b/mih_ui/android/build/macos/SourcePackages/firebase_auth-6.5.4/macos/firebase_auth/Sources/firebase_auth/include/Public/firebase_auth_messages.g.h @@ -0,0 +1,571 @@ +// Copyright 2023, the Chromium project authors. Please see the AUTHORS file +// for details. All rights reserved. Use of this source code is governed by a +// BSD-style license that can be found in the LICENSE file. +// Autogenerated from Pigeon (v26.3.4), do not edit directly. +// See also: https://pub.dev/packages/pigeon + +@import Foundation; + +@protocol FlutterBinaryMessenger; +@protocol FlutterMessageCodec; +@class FlutterError; +@class FlutterStandardTypedData; + +NS_ASSUME_NONNULL_BEGIN + +/// The type of operation that generated the action code from calling +/// [checkActionCode]. +typedef NS_ENUM(NSUInteger, ActionCodeInfoOperation) { + /// Unknown operation. + ActionCodeInfoOperationUnknown = 0, + /// Password reset code generated via [sendPasswordResetEmail]. + ActionCodeInfoOperationPasswordReset = 1, + /// Email verification code generated via [User.sendEmailVerification]. + ActionCodeInfoOperationVerifyEmail = 2, + /// Email change revocation code generated via [User.updateEmail]. + ActionCodeInfoOperationRecoverEmail = 3, + /// Email sign in code generated via [sendSignInLinkToEmail]. + ActionCodeInfoOperationEmailSignIn = 4, + /// Verify and change email code generated via [User.verifyBeforeUpdateEmail]. + ActionCodeInfoOperationVerifyAndChangeEmail = 5, + /// Action code for reverting second factor addition. + ActionCodeInfoOperationRevertSecondFactorAddition = 6, +}; + +/// Wrapper for ActionCodeInfoOperation to allow for nullability. +@interface ActionCodeInfoOperationBox : NSObject +@property(nonatomic, assign) ActionCodeInfoOperation value; +- (instancetype)initWithValue:(ActionCodeInfoOperation)value; +@end + +@class InternalMultiFactorSession; +@class InternalPhoneMultiFactorAssertion; +@class InternalMultiFactorInfo; +@class AuthPigeonFirebaseApp; +@class InternalActionCodeInfoData; +@class InternalActionCodeInfo; +@class InternalAdditionalUserInfo; +@class InternalAuthCredential; +@class InternalUserInfo; +@class InternalUserDetails; +@class InternalUserCredential; +@class InternalAuthCredentialInput; +@class InternalActionCodeSettings; +@class InternalFirebaseAuthSettings; +@class InternalSignInProvider; +@class InternalVerifyPhoneNumberRequest; +@class InternalIdTokenResult; +@class InternalUserProfile; +@class InternalTotpSecret; + +@interface InternalMultiFactorSession : NSObject +/// `init` unavailable to enforce nonnull fields, see the `make` class method. +- (instancetype)init NS_UNAVAILABLE; ++ (instancetype)makeWithId:(NSString *)id; +@property(nonatomic, copy) NSString *id; +@end + +@interface InternalPhoneMultiFactorAssertion : NSObject +/// `init` unavailable to enforce nonnull fields, see the `make` class method. +- (instancetype)init NS_UNAVAILABLE; ++ (instancetype)makeWithVerificationId:(NSString *)verificationId + verificationCode:(NSString *)verificationCode; +@property(nonatomic, copy) NSString *verificationId; +@property(nonatomic, copy) NSString *verificationCode; +@end + +@interface InternalMultiFactorInfo : NSObject +/// `init` unavailable to enforce nonnull fields, see the `make` class method. +- (instancetype)init NS_UNAVAILABLE; ++ (instancetype)makeWithDisplayName:(nullable NSString *)displayName + enrollmentTimestamp:(double)enrollmentTimestamp + factorId:(nullable NSString *)factorId + uid:(NSString *)uid + phoneNumber:(nullable NSString *)phoneNumber; +@property(nonatomic, copy, nullable) NSString *displayName; +@property(nonatomic, assign) double enrollmentTimestamp; +@property(nonatomic, copy, nullable) NSString *factorId; +@property(nonatomic, copy) NSString *uid; +@property(nonatomic, copy, nullable) NSString *phoneNumber; +@end + +@interface AuthPigeonFirebaseApp : NSObject +/// `init` unavailable to enforce nonnull fields, see the `make` class method. +- (instancetype)init NS_UNAVAILABLE; ++ (instancetype)makeWithAppName:(NSString *)appName + tenantId:(nullable NSString *)tenantId + customAuthDomain:(nullable NSString *)customAuthDomain; +@property(nonatomic, copy) NSString *appName; +@property(nonatomic, copy, nullable) NSString *tenantId; +@property(nonatomic, copy, nullable) NSString *customAuthDomain; +@end + +@interface InternalActionCodeInfoData : NSObject ++ (instancetype)makeWithEmail:(nullable NSString *)email + previousEmail:(nullable NSString *)previousEmail; +@property(nonatomic, copy, nullable) NSString *email; +@property(nonatomic, copy, nullable) NSString *previousEmail; +@end + +@interface InternalActionCodeInfo : NSObject +/// `init` unavailable to enforce nonnull fields, see the `make` class method. +- (instancetype)init NS_UNAVAILABLE; ++ (instancetype)makeWithOperation:(ActionCodeInfoOperation)operation + data:(InternalActionCodeInfoData *)data; +@property(nonatomic, assign) ActionCodeInfoOperation operation; +@property(nonatomic, strong) InternalActionCodeInfoData *data; +@end + +@interface InternalAdditionalUserInfo : NSObject +/// `init` unavailable to enforce nonnull fields, see the `make` class method. +- (instancetype)init NS_UNAVAILABLE; ++ (instancetype)makeWithIsNewUser:(BOOL)isNewUser + providerId:(nullable NSString *)providerId + username:(nullable NSString *)username + authorizationCode:(nullable NSString *)authorizationCode + profile:(nullable NSDictionary *)profile; +@property(nonatomic, assign) BOOL isNewUser; +@property(nonatomic, copy, nullable) NSString *providerId; +@property(nonatomic, copy, nullable) NSString *username; +@property(nonatomic, copy, nullable) NSString *authorizationCode; +@property(nonatomic, copy, nullable) NSDictionary *profile; +@end + +@interface InternalAuthCredential : NSObject +/// `init` unavailable to enforce nonnull fields, see the `make` class method. +- (instancetype)init NS_UNAVAILABLE; ++ (instancetype)makeWithProviderId:(NSString *)providerId + signInMethod:(NSString *)signInMethod + nativeId:(NSInteger)nativeId + accessToken:(nullable NSString *)accessToken; +@property(nonatomic, copy) NSString *providerId; +@property(nonatomic, copy) NSString *signInMethod; +@property(nonatomic, assign) NSInteger nativeId; +@property(nonatomic, copy, nullable) NSString *accessToken; +@end + +@interface InternalUserInfo : NSObject +/// `init` unavailable to enforce nonnull fields, see the `make` class method. +- (instancetype)init NS_UNAVAILABLE; ++ (instancetype)makeWithUid:(NSString *)uid + email:(nullable NSString *)email + displayName:(nullable NSString *)displayName + photoUrl:(nullable NSString *)photoUrl + phoneNumber:(nullable NSString *)phoneNumber + isAnonymous:(BOOL)isAnonymous + isEmailVerified:(BOOL)isEmailVerified + providerId:(nullable NSString *)providerId + tenantId:(nullable NSString *)tenantId + refreshToken:(nullable NSString *)refreshToken + creationTimestamp:(nullable NSNumber *)creationTimestamp + lastSignInTimestamp:(nullable NSNumber *)lastSignInTimestamp; +@property(nonatomic, copy) NSString *uid; +@property(nonatomic, copy, nullable) NSString *email; +@property(nonatomic, copy, nullable) NSString *displayName; +@property(nonatomic, copy, nullable) NSString *photoUrl; +@property(nonatomic, copy, nullable) NSString *phoneNumber; +@property(nonatomic, assign) BOOL isAnonymous; +@property(nonatomic, assign) BOOL isEmailVerified; +@property(nonatomic, copy, nullable) NSString *providerId; +@property(nonatomic, copy, nullable) NSString *tenantId; +@property(nonatomic, copy, nullable) NSString *refreshToken; +@property(nonatomic, strong, nullable) NSNumber *creationTimestamp; +@property(nonatomic, strong, nullable) NSNumber *lastSignInTimestamp; +@end + +@interface InternalUserDetails : NSObject +/// `init` unavailable to enforce nonnull fields, see the `make` class method. +- (instancetype)init NS_UNAVAILABLE; ++ (instancetype)makeWithUserInfo:(InternalUserInfo *)userInfo + providerData:(NSArray *> *)providerData; +@property(nonatomic, strong) InternalUserInfo *userInfo; +@property(nonatomic, copy) NSArray *> *providerData; +@end + +@interface InternalUserCredential : NSObject ++ (instancetype)makeWithUser:(nullable InternalUserDetails *)user + additionalUserInfo:(nullable InternalAdditionalUserInfo *)additionalUserInfo + credential:(nullable InternalAuthCredential *)credential; +@property(nonatomic, strong, nullable) InternalUserDetails *user; +@property(nonatomic, strong, nullable) InternalAdditionalUserInfo *additionalUserInfo; +@property(nonatomic, strong, nullable) InternalAuthCredential *credential; +@end + +@interface InternalAuthCredentialInput : NSObject +/// `init` unavailable to enforce nonnull fields, see the `make` class method. +- (instancetype)init NS_UNAVAILABLE; ++ (instancetype)makeWithProviderId:(NSString *)providerId + signInMethod:(NSString *)signInMethod + token:(nullable NSString *)token + accessToken:(nullable NSString *)accessToken; +@property(nonatomic, copy) NSString *providerId; +@property(nonatomic, copy) NSString *signInMethod; +@property(nonatomic, copy, nullable) NSString *token; +@property(nonatomic, copy, nullable) NSString *accessToken; +@end + +@interface InternalActionCodeSettings : NSObject +/// `init` unavailable to enforce nonnull fields, see the `make` class method. +- (instancetype)init NS_UNAVAILABLE; ++ (instancetype)makeWithUrl:(NSString *)url + dynamicLinkDomain:(nullable NSString *)dynamicLinkDomain + handleCodeInApp:(BOOL)handleCodeInApp + iOSBundleId:(nullable NSString *)iOSBundleId + androidPackageName:(nullable NSString *)androidPackageName + androidInstallApp:(BOOL)androidInstallApp + androidMinimumVersion:(nullable NSString *)androidMinimumVersion + linkDomain:(nullable NSString *)linkDomain; +@property(nonatomic, copy) NSString *url; +@property(nonatomic, copy, nullable) NSString *dynamicLinkDomain; +@property(nonatomic, assign) BOOL handleCodeInApp; +@property(nonatomic, copy, nullable) NSString *iOSBundleId; +@property(nonatomic, copy, nullable) NSString *androidPackageName; +@property(nonatomic, assign) BOOL androidInstallApp; +@property(nonatomic, copy, nullable) NSString *androidMinimumVersion; +@property(nonatomic, copy, nullable) NSString *linkDomain; +@end + +@interface InternalFirebaseAuthSettings : NSObject +/// `init` unavailable to enforce nonnull fields, see the `make` class method. +- (instancetype)init NS_UNAVAILABLE; ++ (instancetype)makeWithAppVerificationDisabledForTesting:(BOOL)appVerificationDisabledForTesting + userAccessGroup:(nullable NSString *)userAccessGroup + phoneNumber:(nullable NSString *)phoneNumber + smsCode:(nullable NSString *)smsCode + forceRecaptchaFlow:(nullable NSNumber *)forceRecaptchaFlow; +@property(nonatomic, assign) BOOL appVerificationDisabledForTesting; +@property(nonatomic, copy, nullable) NSString *userAccessGroup; +@property(nonatomic, copy, nullable) NSString *phoneNumber; +@property(nonatomic, copy, nullable) NSString *smsCode; +@property(nonatomic, strong, nullable) NSNumber *forceRecaptchaFlow; +@end + +@interface InternalSignInProvider : NSObject +/// `init` unavailable to enforce nonnull fields, see the `make` class method. +- (instancetype)init NS_UNAVAILABLE; ++ (instancetype)makeWithProviderId:(NSString *)providerId + scopes:(nullable NSArray *)scopes + customParameters: + (nullable NSDictionary *)customParameters; +@property(nonatomic, copy) NSString *providerId; +@property(nonatomic, copy, nullable) NSArray *scopes; +@property(nonatomic, copy, nullable) NSDictionary *customParameters; +@end + +@interface InternalVerifyPhoneNumberRequest : NSObject +/// `init` unavailable to enforce nonnull fields, see the `make` class method. +- (instancetype)init NS_UNAVAILABLE; ++ (instancetype)makeWithPhoneNumber:(nullable NSString *)phoneNumber + timeout:(NSInteger)timeout + forceResendingToken:(nullable NSNumber *)forceResendingToken + autoRetrievedSmsCodeForTesting:(nullable NSString *)autoRetrievedSmsCodeForTesting + multiFactorInfoId:(nullable NSString *)multiFactorInfoId + multiFactorSessionId:(nullable NSString *)multiFactorSessionId; +@property(nonatomic, copy, nullable) NSString *phoneNumber; +@property(nonatomic, assign) NSInteger timeout; +@property(nonatomic, strong, nullable) NSNumber *forceResendingToken; +@property(nonatomic, copy, nullable) NSString *autoRetrievedSmsCodeForTesting; +@property(nonatomic, copy, nullable) NSString *multiFactorInfoId; +@property(nonatomic, copy, nullable) NSString *multiFactorSessionId; +@end + +@interface InternalIdTokenResult : NSObject ++ (instancetype)makeWithToken:(nullable NSString *)token + expirationTimestamp:(nullable NSNumber *)expirationTimestamp + authTimestamp:(nullable NSNumber *)authTimestamp + issuedAtTimestamp:(nullable NSNumber *)issuedAtTimestamp + signInProvider:(nullable NSString *)signInProvider + claims:(nullable NSDictionary *)claims + signInSecondFactor:(nullable NSString *)signInSecondFactor; +@property(nonatomic, copy, nullable) NSString *token; +@property(nonatomic, strong, nullable) NSNumber *expirationTimestamp; +@property(nonatomic, strong, nullable) NSNumber *authTimestamp; +@property(nonatomic, strong, nullable) NSNumber *issuedAtTimestamp; +@property(nonatomic, copy, nullable) NSString *signInProvider; +@property(nonatomic, copy, nullable) NSDictionary *claims; +@property(nonatomic, copy, nullable) NSString *signInSecondFactor; +@end + +@interface InternalUserProfile : NSObject +/// `init` unavailable to enforce nonnull fields, see the `make` class method. +- (instancetype)init NS_UNAVAILABLE; ++ (instancetype)makeWithDisplayName:(nullable NSString *)displayName + photoUrl:(nullable NSString *)photoUrl + displayNameChanged:(BOOL)displayNameChanged + photoUrlChanged:(BOOL)photoUrlChanged; +@property(nonatomic, copy, nullable) NSString *displayName; +@property(nonatomic, copy, nullable) NSString *photoUrl; +@property(nonatomic, assign) BOOL displayNameChanged; +@property(nonatomic, assign) BOOL photoUrlChanged; +@end + +@interface InternalTotpSecret : NSObject +/// `init` unavailable to enforce nonnull fields, see the `make` class method. +- (instancetype)init NS_UNAVAILABLE; ++ (instancetype)makeWithCodeIntervalSeconds:(nullable NSNumber *)codeIntervalSeconds + codeLength:(nullable NSNumber *)codeLength + enrollmentCompletionDeadline:(nullable NSNumber *)enrollmentCompletionDeadline + hashingAlgorithm:(nullable NSString *)hashingAlgorithm + secretKey:(NSString *)secretKey; +@property(nonatomic, strong, nullable) NSNumber *codeIntervalSeconds; +@property(nonatomic, strong, nullable) NSNumber *codeLength; +@property(nonatomic, strong, nullable) NSNumber *enrollmentCompletionDeadline; +@property(nonatomic, copy, nullable) NSString *hashingAlgorithm; +@property(nonatomic, copy) NSString *secretKey; +@end + +/// The codec used by all APIs. +NSObject *nullGetFirebaseAuthMessagesCodec(void); + +@protocol FirebaseAuthHostApi +- (void)registerIdTokenListenerApp:(AuthPigeonFirebaseApp *)app + completion: + (void (^)(NSString *_Nullable, FlutterError *_Nullable))completion; +- (void)registerAuthStateListenerApp:(AuthPigeonFirebaseApp *)app + completion: + (void (^)(NSString *_Nullable, FlutterError *_Nullable))completion; +- (void)useEmulatorApp:(AuthPigeonFirebaseApp *)app + host:(NSString *)host + port:(NSInteger)port + completion:(void (^)(FlutterError *_Nullable))completion; +- (void)applyActionCodeApp:(AuthPigeonFirebaseApp *)app + code:(NSString *)code + completion:(void (^)(FlutterError *_Nullable))completion; +- (void)checkActionCodeApp:(AuthPigeonFirebaseApp *)app + code:(NSString *)code + completion:(void (^)(InternalActionCodeInfo *_Nullable, + FlutterError *_Nullable))completion; +- (void)confirmPasswordResetApp:(AuthPigeonFirebaseApp *)app + code:(NSString *)code + newPassword:(NSString *)newPassword + completion:(void (^)(FlutterError *_Nullable))completion; +- (void)createUserWithEmailAndPasswordApp:(AuthPigeonFirebaseApp *)app + email:(NSString *)email + password:(NSString *)password + completion:(void (^)(InternalUserCredential *_Nullable, + FlutterError *_Nullable))completion; +- (void)signInAnonymouslyApp:(AuthPigeonFirebaseApp *)app + completion:(void (^)(InternalUserCredential *_Nullable, + FlutterError *_Nullable))completion; +- (void)signInWithCredentialApp:(AuthPigeonFirebaseApp *)app + input:(NSDictionary *)input + completion:(void (^)(InternalUserCredential *_Nullable, + FlutterError *_Nullable))completion; +- (void)signInWithCustomTokenApp:(AuthPigeonFirebaseApp *)app + token:(NSString *)token + completion:(void (^)(InternalUserCredential *_Nullable, + FlutterError *_Nullable))completion; +- (void)signInWithEmailAndPasswordApp:(AuthPigeonFirebaseApp *)app + email:(NSString *)email + password:(NSString *)password + completion:(void (^)(InternalUserCredential *_Nullable, + FlutterError *_Nullable))completion; +- (void)signInWithEmailLinkApp:(AuthPigeonFirebaseApp *)app + email:(NSString *)email + emailLink:(NSString *)emailLink + completion:(void (^)(InternalUserCredential *_Nullable, + FlutterError *_Nullable))completion; +- (void)signInWithProviderApp:(AuthPigeonFirebaseApp *)app + signInProvider:(InternalSignInProvider *)signInProvider + completion:(void (^)(InternalUserCredential *_Nullable, + FlutterError *_Nullable))completion; +- (void)signOutApp:(AuthPigeonFirebaseApp *)app + completion:(void (^)(FlutterError *_Nullable))completion; +- (void)fetchSignInMethodsForEmailApp:(AuthPigeonFirebaseApp *)app + email:(NSString *)email + completion:(void (^)(NSArray *_Nullable, + FlutterError *_Nullable))completion; +- (void)sendPasswordResetEmailApp:(AuthPigeonFirebaseApp *)app + email:(NSString *)email + actionCodeSettings:(nullable InternalActionCodeSettings *)actionCodeSettings + completion:(void (^)(FlutterError *_Nullable))completion; +- (void)sendSignInLinkToEmailApp:(AuthPigeonFirebaseApp *)app + email:(NSString *)email + actionCodeSettings:(InternalActionCodeSettings *)actionCodeSettings + completion:(void (^)(FlutterError *_Nullable))completion; +- (void)setLanguageCodeApp:(AuthPigeonFirebaseApp *)app + languageCode:(nullable NSString *)languageCode + completion:(void (^)(NSString *_Nullable, FlutterError *_Nullable))completion; +- (void)setSettingsApp:(AuthPigeonFirebaseApp *)app + settings:(InternalFirebaseAuthSettings *)settings + completion:(void (^)(FlutterError *_Nullable))completion; +- (void)verifyPasswordResetCodeApp:(AuthPigeonFirebaseApp *)app + code:(NSString *)code + completion: + (void (^)(NSString *_Nullable, FlutterError *_Nullable))completion; +- (void)verifyPhoneNumberApp:(AuthPigeonFirebaseApp *)app + request:(InternalVerifyPhoneNumberRequest *)request + completion:(void (^)(NSString *_Nullable, FlutterError *_Nullable))completion; +- (void)revokeTokenWithAuthorizationCodeApp:(AuthPigeonFirebaseApp *)app + authorizationCode:(NSString *)authorizationCode + completion:(void (^)(FlutterError *_Nullable))completion; +- (void)revokeAccessTokenApp:(AuthPigeonFirebaseApp *)app + accessToken:(NSString *)accessToken + completion:(void (^)(FlutterError *_Nullable))completion; +- (void)initializeRecaptchaConfigApp:(AuthPigeonFirebaseApp *)app + completion:(void (^)(FlutterError *_Nullable))completion; +@end + +extern void SetUpFirebaseAuthHostApi(id binaryMessenger, + NSObject *_Nullable api); + +extern void SetUpFirebaseAuthHostApiWithSuffix(id binaryMessenger, + NSObject *_Nullable api, + NSString *messageChannelSuffix); + +@protocol FirebaseAuthUserHostApi +- (void)deleteApp:(AuthPigeonFirebaseApp *)app + completion:(void (^)(FlutterError *_Nullable))completion; +- (void)getIdTokenApp:(AuthPigeonFirebaseApp *)app + forceRefresh:(BOOL)forceRefresh + completion: + (void (^)(InternalIdTokenResult *_Nullable, FlutterError *_Nullable))completion; +- (void)linkWithCredentialApp:(AuthPigeonFirebaseApp *)app + input:(NSDictionary *)input + completion:(void (^)(InternalUserCredential *_Nullable, + FlutterError *_Nullable))completion; +- (void)linkWithProviderApp:(AuthPigeonFirebaseApp *)app + signInProvider:(InternalSignInProvider *)signInProvider + completion:(void (^)(InternalUserCredential *_Nullable, + FlutterError *_Nullable))completion; +- (void)reauthenticateWithCredentialApp:(AuthPigeonFirebaseApp *)app + input:(NSDictionary *)input + completion:(void (^)(InternalUserCredential *_Nullable, + FlutterError *_Nullable))completion; +- (void)reauthenticateWithProviderApp:(AuthPigeonFirebaseApp *)app + signInProvider:(InternalSignInProvider *)signInProvider + completion:(void (^)(InternalUserCredential *_Nullable, + FlutterError *_Nullable))completion; +- (void)reloadApp:(AuthPigeonFirebaseApp *)app + completion:(void (^)(InternalUserDetails *_Nullable, FlutterError *_Nullable))completion; +- (void)sendEmailVerificationApp:(AuthPigeonFirebaseApp *)app + actionCodeSettings:(nullable InternalActionCodeSettings *)actionCodeSettings + completion:(void (^)(FlutterError *_Nullable))completion; +- (void)unlinkApp:(AuthPigeonFirebaseApp *)app + providerId:(NSString *)providerId + completion:(void (^)(InternalUserCredential *_Nullable, FlutterError *_Nullable))completion; +- (void)updateEmailApp:(AuthPigeonFirebaseApp *)app + newEmail:(NSString *)newEmail + completion: + (void (^)(InternalUserDetails *_Nullable, FlutterError *_Nullable))completion; +- (void)updatePasswordApp:(AuthPigeonFirebaseApp *)app + newPassword:(NSString *)newPassword + completion: + (void (^)(InternalUserDetails *_Nullable, FlutterError *_Nullable))completion; +- (void)updatePhoneNumberApp:(AuthPigeonFirebaseApp *)app + input:(NSDictionary *)input + completion: + (void (^)(InternalUserDetails *_Nullable, FlutterError *_Nullable))completion; +- (void)updateProfileApp:(AuthPigeonFirebaseApp *)app + profile:(InternalUserProfile *)profile + completion: + (void (^)(InternalUserDetails *_Nullable, FlutterError *_Nullable))completion; +- (void)verifyBeforeUpdateEmailApp:(AuthPigeonFirebaseApp *)app + newEmail:(NSString *)newEmail + actionCodeSettings:(nullable InternalActionCodeSettings *)actionCodeSettings + completion:(void (^)(FlutterError *_Nullable))completion; +@end + +extern void SetUpFirebaseAuthUserHostApi(id binaryMessenger, + NSObject *_Nullable api); + +extern void SetUpFirebaseAuthUserHostApiWithSuffix(id binaryMessenger, + NSObject *_Nullable api, + NSString *messageChannelSuffix); + +@protocol MultiFactorUserHostApi +- (void)enrollPhoneApp:(AuthPigeonFirebaseApp *)app + assertion:(InternalPhoneMultiFactorAssertion *)assertion + displayName:(nullable NSString *)displayName + completion:(void (^)(FlutterError *_Nullable))completion; +- (void)enrollTotpApp:(AuthPigeonFirebaseApp *)app + assertionId:(NSString *)assertionId + displayName:(nullable NSString *)displayName + completion:(void (^)(FlutterError *_Nullable))completion; +- (void)getSessionApp:(AuthPigeonFirebaseApp *)app + completion: + (void (^)(InternalMultiFactorSession *_Nullable, FlutterError *_Nullable))completion; +- (void)unenrollApp:(AuthPigeonFirebaseApp *)app + factorUid:(NSString *)factorUid + completion:(void (^)(FlutterError *_Nullable))completion; +- (void)getEnrolledFactorsApp:(AuthPigeonFirebaseApp *)app + completion:(void (^)(NSArray *_Nullable, + FlutterError *_Nullable))completion; +@end + +extern void SetUpMultiFactorUserHostApi(id binaryMessenger, + NSObject *_Nullable api); + +extern void SetUpMultiFactorUserHostApiWithSuffix(id binaryMessenger, + NSObject *_Nullable api, + NSString *messageChannelSuffix); + +@protocol MultiFactoResolverHostApi +- (void)resolveSignInResolverId:(NSString *)resolverId + assertion:(nullable InternalPhoneMultiFactorAssertion *)assertion + totpAssertionId:(nullable NSString *)totpAssertionId + completion:(void (^)(InternalUserCredential *_Nullable, + FlutterError *_Nullable))completion; +@end + +extern void SetUpMultiFactoResolverHostApi(id binaryMessenger, + NSObject *_Nullable api); + +extern void SetUpMultiFactoResolverHostApiWithSuffix( + id binaryMessenger, NSObject *_Nullable api, + NSString *messageChannelSuffix); + +@protocol MultiFactorTotpHostApi +- (void)generateSecretSessionId:(NSString *)sessionId + completion:(void (^)(InternalTotpSecret *_Nullable, + FlutterError *_Nullable))completion; +- (void)getAssertionForEnrollmentSecretKey:(NSString *)secretKey + oneTimePassword:(NSString *)oneTimePassword + completion:(void (^)(NSString *_Nullable, + FlutterError *_Nullable))completion; +- (void)getAssertionForSignInEnrollmentId:(NSString *)enrollmentId + oneTimePassword:(NSString *)oneTimePassword + completion:(void (^)(NSString *_Nullable, + FlutterError *_Nullable))completion; +@end + +extern void SetUpMultiFactorTotpHostApi(id binaryMessenger, + NSObject *_Nullable api); + +extern void SetUpMultiFactorTotpHostApiWithSuffix(id binaryMessenger, + NSObject *_Nullable api, + NSString *messageChannelSuffix); + +@protocol MultiFactorTotpSecretHostApi +- (void)generateQrCodeUrlSecretKey:(NSString *)secretKey + accountName:(nullable NSString *)accountName + issuer:(nullable NSString *)issuer + completion: + (void (^)(NSString *_Nullable, FlutterError *_Nullable))completion; +- (void)openInOtpAppSecretKey:(NSString *)secretKey + qrCodeUrl:(NSString *)qrCodeUrl + completion:(void (^)(FlutterError *_Nullable))completion; +@end + +extern void SetUpMultiFactorTotpSecretHostApi( + id binaryMessenger, + NSObject *_Nullable api); + +extern void SetUpMultiFactorTotpSecretHostApiWithSuffix( + id binaryMessenger, + NSObject *_Nullable api, NSString *messageChannelSuffix); + +/// Only used to generate the object interface that are use outside of the Pigeon interface +@protocol GenerateInterfaces +- (void)pigeonInterfaceInfo:(InternalMultiFactorInfo *)info + error:(FlutterError *_Nullable *_Nonnull)error; +@end + +extern void SetUpGenerateInterfaces(id binaryMessenger, + NSObject *_Nullable api); + +extern void SetUpGenerateInterfacesWithSuffix(id binaryMessenger, + NSObject *_Nullable api, + NSString *messageChannelSuffix); + +NS_ASSUME_NONNULL_END diff --git a/mih_ui/android/build/macos/SourcePackages/firebase_auth-6.5.4/pubspec.yaml b/mih_ui/android/build/macos/SourcePackages/firebase_auth-6.5.4/pubspec.yaml new file mode 100755 index 00000000..ed5194bd --- /dev/null +++ b/mih_ui/android/build/macos/SourcePackages/firebase_auth-6.5.4/pubspec.yaml @@ -0,0 +1,52 @@ +name: firebase_auth +description: Flutter plugin for Firebase Auth, enabling + authentication using passwords, phone numbers and identity providers + like Google, Facebook and Twitter. +homepage: https://firebase.google.com/docs/auth +repository: https://github.com/firebase/flutterfire/tree/main/packages/firebase_auth/firebase_auth +version: 6.5.4 +resolution: workspace +topics: + - firebase + - authentication + - identity + - sign-in + - sign-up + +false_secrets: + - example/** + +environment: + sdk: '^3.6.0' + flutter: '>=3.16.0' + +dependencies: + firebase_auth_platform_interface: ^9.0.3 + firebase_auth_web: ^6.2.3 + firebase_core: ^4.11.0 + firebase_core_platform_interface: ^7.1.0 + flutter: + sdk: flutter + meta: ^1.8.0 +dev_dependencies: + async: ^2.5.0 + flutter_test: + sdk: flutter + mockito: ^5.0.0 + plugin_platform_interface: ^2.1.3 + +flutter: + plugin: + platforms: + android: + package: io.flutter.plugins.firebase.auth + pluginClass: FlutterFirebaseAuthPlugin + ios: + pluginClass: FLTFirebaseAuthPlugin + macos: + pluginClass: FLTFirebaseAuthPlugin + web: + default_package: firebase_auth_web + windows: + pluginClass: FirebaseAuthPluginCApi + diff --git a/mih_ui/android/build/macos/SourcePackages/firebase_auth-6.5.4/test/firebase_auth_test.dart b/mih_ui/android/build/macos/SourcePackages/firebase_auth-6.5.4/test/firebase_auth_test.dart new file mode 100644 index 00000000..5e570b0b --- /dev/null +++ b/mih_ui/android/build/macos/SourcePackages/firebase_auth-6.5.4/test/firebase_auth_test.dart @@ -0,0 +1,1382 @@ +// ignore_for_file: require_trailing_commas +// Copyright 2020, the Chromium project authors. Please see the AUTHORS file +// for details. All rights reserved. Use of this source code is governed by a +// BSD-style license that can be found in the LICENSE file. + +import 'dart:async'; + +import 'package:async/async.dart'; +import 'package:firebase_auth/firebase_auth.dart'; +import 'package:firebase_auth_platform_interface/firebase_auth_platform_interface.dart'; +import 'package:firebase_auth_platform_interface/src/method_channel/method_channel_firebase_auth.dart'; +import 'package:firebase_core/firebase_core.dart'; +import 'package:flutter/foundation.dart'; +import 'package:flutter_test/flutter_test.dart'; +import 'package:mockito/mockito.dart'; +import 'package:plugin_platform_interface/plugin_platform_interface.dart'; + +import './mock.dart'; + +void main() { + setupFirebaseAuthMocks(); + + late FirebaseAuth auth; + + const String kMockActionCode = '12345'; + const String kMockEmail = 'test@example.com'; + const String kMockPassword = 'passw0rd'; + const String kMockIdToken = '12345'; + const String kMockRawNonce = 'abcde12345'; + const String kMockAccessToken = '67890'; + const String kMockGithubToken = 'github'; + const String kMockCustomToken = '12345'; + const String kMockPhoneNumber = '5555555555'; + const String kMockVerificationId = '12345'; + const String kMockSmsCode = '123456'; + const String kMockLanguage = 'en'; + const String kMockOobCode = 'oobcode'; + const String kMockAuthToken = '12460'; + const String kMockURL = 'http://www.example.com'; + const String kMockHost = 'www.example.com'; + const String kMockValidPassword = + 'Password123!'; // For password policy impl testing + const String kMockInvalidPassword = 'Pa1!'; + const String kMockInvalidPassword2 = 'password123!'; + const String kMockInvalidPassword3 = 'PASSWORD123!'; + const String kMockInvalidPassword4 = 'password!'; + const String kMockInvalidPassword5 = 'Password123'; + const Map kMockPasswordPolicy = { + 'customStrengthOptions': { + 'minPasswordLength': 6, + 'maxPasswordLength': 12, + 'containsLowercaseCharacter': true, + 'containsUppercaseCharacter': true, + 'containsNumericCharacter': true, + 'containsNonAlphanumericCharacter': true, + }, + 'allowedNonAlphanumericCharacters': ['!'], + 'schemaVersion': 1, + 'enforcement': 'OFF', + }; + final PasswordPolicy kMockPasswordPolicyObject = + PasswordPolicy(kMockPasswordPolicy); + const int kMockPort = 31337; + + final TestAuthProvider testAuthProvider = TestAuthProvider(); + final int kMockCreationTimestamp = + DateTime.now().subtract(const Duration(days: 2)).millisecondsSinceEpoch; + final int kMockLastSignInTimestamp = + DateTime.now().subtract(const Duration(days: 1)).millisecondsSinceEpoch; + + final kMockUser = InternalUserDetails( + userInfo: InternalUserInfo( + uid: '12345', + displayName: 'displayName', + creationTimestamp: kMockCreationTimestamp, + lastSignInTimestamp: kMockLastSignInTimestamp, + isAnonymous: true, + isEmailVerified: false, + ), + providerData: [ + { + 'providerId': 'firebase', + 'uid': '12345', + 'displayName': 'Flutter Test User', + 'photoUrl': 'http://www.example.com/', + 'email': 'test@example.com', + } + ], + ); + + late MockUserPlatform mockUserPlatform; + late MockUserCredentialPlatform mockUserCredPlatform; + late MockConfirmationResultPlatform mockConfirmationResultPlatform; + late MockRecaptchaVerifier mockVerifier; + late AdditionalUserInfo mockAdditionalUserInfo; + late EmailAuthCredential mockCredential; + + MockFirebaseAuth mockAuthPlatform = MockFirebaseAuth(); + + group('$FirebaseAuth', () { + InternalUserDetails user; + // used to generate a unique application name for each test + var testCount = 0; + + setUp(() async { + FirebaseAuthPlatform.instance = mockAuthPlatform = MockFirebaseAuth(); + + // Each test uses a unique FirebaseApp instance to avoid sharing state + final app = await Firebase.initializeApp( + name: '$testCount', + options: const FirebaseOptions( + apiKey: '', + appId: '', + messagingSenderId: '', + projectId: '', + ), + ); + + auth = FirebaseAuth.instanceFor(app: app); + user = kMockUser; + + mockUserPlatform = MockUserPlatform( + mockAuthPlatform, TestMultiFactorPlatform(mockAuthPlatform), user); + mockConfirmationResultPlatform = MockConfirmationResultPlatform(); + mockAdditionalUserInfo = AdditionalUserInfo( + isNewUser: false, + username: 'flutterUser', + providerId: 'testProvider', + profile: {'foo': 'bar'}, + ); + mockCredential = EmailAuthProvider.credential( + email: 'test', + password: 'test', + ) as EmailAuthCredential; + mockUserCredPlatform = MockUserCredentialPlatform( + FirebaseAuthPlatform.instance, + mockAdditionalUserInfo, + mockCredential, + mockUserPlatform, + ); + mockVerifier = MockRecaptchaVerifier(); + + when(mockAuthPlatform.signInAnonymously()) + .thenAnswer((_) async => mockUserCredPlatform); + + when(mockAuthPlatform.signInWithCredential(any)).thenAnswer( + (_) => Future.value(mockUserCredPlatform)); + + when(mockAuthPlatform.currentUser).thenReturn(mockUserPlatform); + + when(mockAuthPlatform.instanceFor( + app: anyNamed('app'), + pluginConstants: anyNamed('pluginConstants'), + )).thenAnswer((_) => mockUserPlatform); + + when(mockAuthPlatform.delegateFor( + app: anyNamed('app'), + )).thenAnswer((_) => mockAuthPlatform); + + when(mockAuthPlatform.setInitialValues( + currentUser: anyNamed('currentUser'), + languageCode: anyNamed('languageCode'), + )).thenAnswer((_) => mockAuthPlatform); + + when(mockAuthPlatform.createUserWithEmailAndPassword(any, any)) + .thenAnswer((_) async => mockUserCredPlatform); + + when(mockAuthPlatform.getRedirectResult()) + .thenAnswer((_) async => mockUserCredPlatform); + + when(mockAuthPlatform.signInWithCustomToken(any)) + .thenAnswer((_) async => mockUserCredPlatform); + + when(mockAuthPlatform.signInWithEmailAndPassword(any, any)) + .thenAnswer((_) async => mockUserCredPlatform); + + when(mockAuthPlatform.signInWithEmailLink(any, any)) + .thenAnswer((_) async => mockUserCredPlatform); + + when(mockAuthPlatform.signInWithPhoneNumber(any, any)) + .thenAnswer((_) async => mockConfirmationResultPlatform); + + when(mockVerifier.delegate).thenReturn(mockVerifier.mockDelegate); + + when(mockAuthPlatform.signInWithPopup(any)) + .thenAnswer((_) async => mockUserCredPlatform); + + when(mockAuthPlatform.signInWithRedirect(any)) + .thenAnswer((_) async => mockUserCredPlatform); + + when(mockAuthPlatform.authStateChanges()).thenAnswer((_) => + Stream.fromIterable([mockUserPlatform])); + + when(mockAuthPlatform.idTokenChanges()).thenAnswer((_) => + Stream.fromIterable([mockUserPlatform])); + + when(mockAuthPlatform.userChanges()).thenAnswer((_) => + Stream.fromIterable([mockUserPlatform])); + + TestDefaultBinaryMessengerBinding.instance.defaultBinaryMessenger + .setMockMethodCallHandler(MethodChannelFirebaseAuth.channel, + (call) async { + return {'user': user}; + }); + }); + + // incremented after tests completed, in case a test may want to use this + // value for an assertion (toString) + tearDown(() => testCount++); + + setUp(() async { + user = kMockUser; + await auth.signInAnonymously(); + }); + + group('emulator', () { + test('useAuthEmulator() should call delegate method', () async { + // Necessary as we otherwise get a "null is not a Future" error + when(mockAuthPlatform.useAuthEmulator(kMockHost, kMockPort)) + .thenAnswer((i) async {}); + await auth.useAuthEmulator(kMockHost, kMockPort); + verify(mockAuthPlatform.useAuthEmulator(kMockHost, kMockPort)); + }); + }); + + group('currentUser', () { + test('get currentUser', () { + User? user = auth.currentUser; + verify(mockAuthPlatform.currentUser); + expect(user, isA()); + }); + }); + + test('creates a fresh instance after app delete and reinitialize', + () async { + final appName = 'delete-reinit-$testCount'; + const options = FirebaseOptions( + apiKey: 'apiKey', + appId: 'appId', + messagingSenderId: 'messagingSenderId', + projectId: 'projectId', + ); + final app = await Firebase.initializeApp( + name: appName, + options: options, + ); + final auth1 = FirebaseAuth.instanceFor(app: app); + + expect(app.getService(), same(auth1)); + + await app.delete(); + + final app2 = await Firebase.initializeApp( + name: appName, + options: options, + ); + addTearDown(app2.delete); + + final auth2 = FirebaseAuth.instanceFor(app: app2); + + expect(auth2, isNot(same(auth1))); + expect(auth2.app, app2); + expect(app2.getService(), same(auth2)); + }); + + group('tenantId', () { + test('set tenantId should call delegate method', () async { + // Each test uses a unique FirebaseApp instance to avoid sharing state + final app = await Firebase.initializeApp( + name: 'tenantIdTest', + options: const FirebaseOptions( + apiKey: 'apiKey', + appId: 'appId', + messagingSenderId: 'messagingSenderId', + projectId: 'projectId')); + + FirebaseAuthPlatform.instance = + FakeFirebaseAuthPlatform(tenantId: 'foo'); + auth = FirebaseAuth.instanceFor(app: app); + + expect(auth.tenantId, 'foo'); + + auth.tenantId = 'bar'; + + expect(auth.tenantId, 'bar'); + expect(FirebaseAuthPlatform.instance.tenantId, 'bar'); + }); + }); + + group('customAuthDomain', () { + test('set customAuthDomain should call delegate method', () async { + // Each test uses a unique FirebaseApp instance to avoid sharing state + final app = await Firebase.initializeApp( + name: 'customAuthDomainTest', + options: const FirebaseOptions( + apiKey: 'apiKey', + appId: 'appId', + messagingSenderId: 'messagingSenderId', + projectId: 'projectId')); + + FirebaseAuthPlatform.instance = + FakeFirebaseAuthPlatform(customAuthDomain: 'foo'); + auth = FirebaseAuth.instanceFor(app: app); + + expect(auth.customAuthDomain, 'foo'); + if (defaultTargetPlatform == TargetPlatform.windows || kIsWeb) { + try { + auth.customAuthDomain = 'bar'; + } on UnimplementedError catch (e) { + expect(e.message, contains('Cannot set auth domain')); + } + } else { + auth.customAuthDomain = 'bar'; + + expect(auth.customAuthDomain, 'bar'); + expect(FirebaseAuthPlatform.instance.customAuthDomain, 'bar'); + } + }); + }); + + group('languageCode', () { + test('.languageCode should call delegate method', () { + auth.languageCode; + verify(mockAuthPlatform.languageCode); + }); + + test('setLanguageCode() should call delegate method', () async { + // Necessary as we otherwise get a "null is not a Future" error + when(mockAuthPlatform.setLanguageCode(any)).thenAnswer((i) async {}); + + await auth.setLanguageCode(kMockLanguage); + verify(mockAuthPlatform.setLanguageCode(kMockLanguage)); + }); + }); + + group('checkActionCode()', () { + test('should call delegate method', () async { + // Necessary as we otherwise get a "null is not a Future" error + when(mockAuthPlatform.checkActionCode(any)).thenAnswer( + (i) async => ActionCodeInfo( + data: ActionCodeInfoData(email: null, previousEmail: null), + operation: ActionCodeInfoOperation.unknown, + ), + ); + + await auth.checkActionCode(kMockActionCode); + verify(mockAuthPlatform.checkActionCode(kMockActionCode)); + }); + }); + + group('confirmPasswordReset()', () { + test('should call delegate method', () async { + // Necessary as we otherwise get a "null is not a Future" error + when(mockAuthPlatform.confirmPasswordReset(any, any)) + .thenAnswer((i) async {}); + + await auth.confirmPasswordReset( + code: kMockActionCode, + newPassword: kMockPassword, + ); + verify(mockAuthPlatform.confirmPasswordReset( + kMockActionCode, kMockPassword)); + }); + }); + + group('createUserWithEmailAndPassword()', () { + test('should call delegate method', () async { + // Necessary as we otherwise get a "null is not a Future" error + when(mockAuthPlatform.createUserWithEmailAndPassword(any, any)) + .thenAnswer((i) async => EmptyUserCredentialPlatform()); + + await auth.createUserWithEmailAndPassword( + email: kMockEmail, + password: kMockPassword, + ); + + verify(mockAuthPlatform.createUserWithEmailAndPassword( + kMockEmail, + kMockPassword, + )); + }); + }); + + group('getRedirectResult()', () { + test('should call delegate method', () async { + // Necessary as we otherwise get a "null is not a Future" error + when(mockAuthPlatform.getRedirectResult()) + .thenAnswer((i) async => EmptyUserCredentialPlatform()); + + await auth.getRedirectResult(); + verify(mockAuthPlatform.getRedirectResult()); + }); + }); + + group('isSignInWithEmailLink()', () { + test('should call delegate method', () async { + // Necessary as we otherwise get a "null is not a Future" error + when(mockAuthPlatform.isSignInWithEmailLink(any)) + .thenAnswer((i) => false); + + auth.isSignInWithEmailLink(kMockURL); + verify(mockAuthPlatform.isSignInWithEmailLink(kMockURL)); + }); + }); + + group('authStateChanges()', () { + test('should stream changes', () async { + final StreamQueue changes = + StreamQueue(auth.authStateChanges()); + expect(await changes.next, isA()); + }); + }); + + group('idTokenChanges()', () { + test('should stream changes', () async { + final StreamQueue changes = + StreamQueue(auth.idTokenChanges()); + expect(await changes.next, isA()); + }); + }); + + group('userChanges()', () { + test('should stream changes', () async { + final StreamQueue changes = + StreamQueue(auth.userChanges()); + expect(await changes.next, isA()); + }); + }); + + group('sendPasswordResetEmail()', () { + test('should call delegate method', () async { + // Necessary as we otherwise get a "null is not a Future" error + when(mockAuthPlatform.sendPasswordResetEmail(any)) + .thenAnswer((i) async {}); + + await auth.sendPasswordResetEmail(email: kMockEmail); + verify(mockAuthPlatform.sendPasswordResetEmail(kMockEmail)); + }); + }); + + group('sendPasswordResetEmail()', () { + test('should call delegate method', () async { + // Necessary as we otherwise get a "null is not a Future" error + when(mockAuthPlatform.sendPasswordResetEmail(any)) + .thenAnswer((i) async {}); + + await auth.sendPasswordResetEmail(email: kMockEmail); + verify(mockAuthPlatform.sendPasswordResetEmail(kMockEmail)); + }); + }); + + group('sendSignInLinkToEmail()', () { + test('should throw if actionCodeSettings.handleCodeInApp is not true', + () async { + // Necessary as we otherwise get a "null is not a Future" error + when(mockAuthPlatform.sendSignInLinkToEmail(any, any)) + .thenAnswer((i) async {}); + + final ActionCodeSettings kMockActionCodeSettingsNull = + ActionCodeSettings(url: kMockURL); + final ActionCodeSettings kMockActionCodeSettingsFalse = + ActionCodeSettings(url: kMockURL); + + // when handleCodeInApp is null + expect( + () => auth.sendSignInLinkToEmail( + email: kMockEmail, + actionCodeSettings: kMockActionCodeSettingsNull), + throwsArgumentError, + ); + // when handleCodeInApp is false + expect( + () => auth.sendSignInLinkToEmail( + email: kMockEmail, + actionCodeSettings: kMockActionCodeSettingsFalse), + throwsArgumentError, + ); + }); + + test('should call delegate method', () async { + // Necessary as we otherwise get a "null is not a Future" error + when(mockAuthPlatform.sendSignInLinkToEmail(any, any)) + .thenAnswer((i) async {}); + + final ActionCodeSettings kMockActionCodeSettingsValid = + ActionCodeSettings(url: kMockURL, handleCodeInApp: true); + + await auth.sendSignInLinkToEmail( + email: kMockEmail, + actionCodeSettings: kMockActionCodeSettingsValid, + ); + + verify(mockAuthPlatform.sendSignInLinkToEmail( + kMockEmail, + kMockActionCodeSettingsValid, + )); + }); + }); + + group('setSettings()', () { + test('should call delegate method', () async { + // Necessary as we otherwise get a "null is not a Future" error + when(mockAuthPlatform.setSettings( + appVerificationDisabledForTesting: any, + phoneNumber: any, + smsCode: any, + forceRecaptchaFlow: any, + userAccessGroup: any, + )).thenAnswer((i) async {}); + + String phoneNumber = '123456'; + String smsCode = '1234'; + bool forceRecaptchaFlow = true; + bool appVerificationDisabledForTesting = true; + String userAccessGroup = 'group-id'; + + await auth.setSettings( + appVerificationDisabledForTesting: appVerificationDisabledForTesting, + phoneNumber: phoneNumber, + smsCode: smsCode, + forceRecaptchaFlow: forceRecaptchaFlow, + userAccessGroup: userAccessGroup, + ); + + verify( + mockAuthPlatform.setSettings( + appVerificationDisabledForTesting: + appVerificationDisabledForTesting, + phoneNumber: phoneNumber, + smsCode: smsCode, + forceRecaptchaFlow: forceRecaptchaFlow, + userAccessGroup: userAccessGroup, + ), + ); + }); + }); + + group('setPersistence()', () { + test('should call delegate method', () async { + // Necessary as we otherwise get a "null is not a Future" error + when(mockAuthPlatform.setPersistence(any)).thenAnswer((i) async {}); + + await auth.setPersistence(Persistence.LOCAL); + verify(mockAuthPlatform.setPersistence(Persistence.LOCAL)); + }); + }); + + group('signInAnonymously()', () { + test('should call delegate method', () async { + // Necessary as we otherwise get a "null is not a Future" error + when(mockAuthPlatform.signInAnonymously()) + .thenAnswer((i) async => EmptyUserCredentialPlatform()); + + await auth.signInAnonymously(); + verify(mockAuthPlatform.signInAnonymously()); + }); + }); + + group('signInWithCredential()', () { + test('GithubAuthProvider signInWithCredential', () async { + final AuthCredential credential = + GithubAuthProvider.credential(kMockGithubToken); + await auth.signInWithCredential(credential); + final captured = + verify(mockAuthPlatform.signInWithCredential(captureAny)) + .captured + .single; + expect(captured, isA()); + expect(captured.providerId, equals('github.com')); + expect(captured.accessToken, equals(kMockGithubToken)); + }); + + test('EmailAuthProvider (withLink) signInWithCredential', () async { + final AuthCredential credential = EmailAuthProvider.credentialWithLink( + email: 'test@example.com', + emailLink: '', + ); + await auth.signInWithCredential(credential); + final EmailAuthCredential captured = + verify(mockAuthPlatform.signInWithCredential(captureAny)) + .captured + .single; + expect(captured.providerId, equals('password')); + expect(captured.email, equals('test@example.com')); + expect(captured.emailLink, + equals('')); + }); + + test('TwitterAuthProvider signInWithCredential', () async { + final AuthCredential credential = TwitterAuthProvider.credential( + accessToken: kMockIdToken, + secret: kMockAccessToken, + ); + await auth.signInWithCredential(credential); + final captured = + verify(mockAuthPlatform.signInWithCredential(captureAny)) + .captured + .single; + expect(captured, isA()); + expect(captured.providerId, equals('twitter.com')); + expect(captured.accessToken, equals(kMockIdToken)); + expect(captured.secret, equals(kMockAccessToken)); + }); + + test('GoogleAuthProvider signInWithCredential', () async { + final credential = GoogleAuthProvider.credential( + idToken: kMockIdToken, + accessToken: kMockAccessToken, + ); + await auth.signInWithCredential(credential); + final captured = + verify(mockAuthPlatform.signInWithCredential(captureAny)) + .captured + .single; + expect(captured, isA()); + expect(captured.providerId, equals('google.com')); + expect(captured.idToken, equals(kMockIdToken)); + expect(captured.accessToken, equals(kMockAccessToken)); + }); + + test('OAuthProvider signInWithCredential for Apple', () async { + OAuthProvider oAuthProvider = OAuthProvider('apple.com'); + final AuthCredential credential = oAuthProvider.credential( + idToken: kMockIdToken, + accessToken: kMockAccessToken, + ); + await auth.signInWithCredential(credential); + final captured = + verify(mockAuthPlatform.signInWithCredential(captureAny)) + .captured + .single; + expect(captured.providerId, equals('apple.com')); + expect(captured.idToken, equals(kMockIdToken)); + expect(captured.accessToken, equals(kMockAccessToken)); + expect(captured.rawNonce, equals(null)); + }); + + test('OAuthProvider signInWithCredential for Apple with rawNonce', + () async { + OAuthProvider oAuthProvider = OAuthProvider('apple.com'); + final AuthCredential credential = oAuthProvider.credential( + idToken: kMockIdToken, + rawNonce: kMockRawNonce, + accessToken: kMockAccessToken, + ); + await auth.signInWithCredential(credential); + final captured = + verify(mockAuthPlatform.signInWithCredential(captureAny)) + .captured + .single; + expect(captured.providerId, equals('apple.com')); + expect(captured.idToken, equals(kMockIdToken)); + expect(captured.rawNonce, equals(kMockRawNonce)); + expect(captured.accessToken, equals(kMockAccessToken)); + }); + + test( + 'OAuthProvider signInWithCredential for Apple with rawNonce (empty accessToken)', + () async { + OAuthProvider oAuthProvider = OAuthProvider('apple.com'); + final AuthCredential credential = oAuthProvider.credential( + idToken: kMockIdToken, + rawNonce: kMockRawNonce, + ); + await auth.signInWithCredential(credential); + final captured = + verify(mockAuthPlatform.signInWithCredential(captureAny)) + .captured + .single; + expect(captured.providerId, equals('apple.com')); + expect(captured.idToken, equals(kMockIdToken)); + expect(captured.rawNonce, equals(kMockRawNonce)); + expect(captured.accessToken, equals(null)); + }); + + test('PhoneAuthProvider signInWithCredential', () async { + final PhoneAuthCredential credential = PhoneAuthProvider.credential( + verificationId: kMockVerificationId, + smsCode: kMockSmsCode, + ); + await auth.signInWithCredential(credential); + final PhoneAuthCredential captured = + verify(mockAuthPlatform.signInWithCredential(captureAny)) + .captured + .single; + expect(captured.providerId, equals('phone')); + expect(captured.verificationId, equals(kMockVerificationId)); + expect(captured.smsCode, equals(kMockSmsCode)); + }); + + test('FacebookAuthProvider signInWithCredential', () async { + final AuthCredential credential = + FacebookAuthProvider.credential(kMockAccessToken); + await auth.signInWithCredential(credential); + final captured = + verify(mockAuthPlatform.signInWithCredential(captureAny)) + .captured + .single; + expect(captured, isA()); + expect(captured.providerId, equals('facebook.com')); + expect(captured.accessToken, equals(kMockAccessToken)); + }); + }); + + group('signInWithCustomToken()', () { + test('should call delegate method', () async { + await auth.signInWithCustomToken(kMockCustomToken); + verify(mockAuthPlatform.signInWithCustomToken(kMockCustomToken)); + }); + }); + + group('signInWithEmailAndPassword()', () { + test('should call delegate method', () async { + await auth.signInWithEmailAndPassword( + email: kMockEmail, password: kMockPassword); + verify(mockAuthPlatform.signInWithEmailAndPassword( + kMockEmail, kMockPassword)); + }); + }); + + group('signInWithEmailLink()', () { + test('should call delegate method', () async { + await auth.signInWithEmailLink(email: kMockEmail, emailLink: kMockURL); + verify(mockAuthPlatform.signInWithEmailLink(kMockEmail, kMockURL)); + }); + }); + + group('signInWithPhoneNumber()', () { + test('should call delegate method', () async { + await auth.signInWithPhoneNumber(kMockPhoneNumber, mockVerifier); + verify(mockAuthPlatform.signInWithPhoneNumber(kMockPhoneNumber, any)); + }); + }); + + group('signInWithPopup()', () { + test('should call delegate method', () async { + await auth.signInWithPopup(testAuthProvider); + verify(mockAuthPlatform.signInWithPopup(testAuthProvider)); + }); + }); + + group('signInWithRedirect()', () { + test('should call delegate method', () async { + await auth.signInWithRedirect(testAuthProvider); + verify(mockAuthPlatform.signInWithRedirect(testAuthProvider)); + }); + }); + + group('signOut()', () { + test('should call delegate method', () async { + // Necessary as we otherwise get a "null is not a Future" error + when(mockAuthPlatform.signOut()).thenAnswer((i) async {}); + + await auth.signOut(); + verify(mockAuthPlatform.signOut()); + }); + }); + + group('verifyPasswordResetCode()', () { + test('should call delegate method', () async { + // Necessary as we otherwise get a "null is not a Future" error + when(mockAuthPlatform.verifyPasswordResetCode(any)) + .thenAnswer((i) async => ''); + + await auth.verifyPasswordResetCode(kMockOobCode); + verify(mockAuthPlatform.verifyPasswordResetCode(kMockOobCode)); + }); + }); + + group('verifyPhoneNumber()', () { + test('should call delegate method', () async { + // Necessary as we otherwise get a "null is not a Future" error + when(mockAuthPlatform.verifyPhoneNumber( + autoRetrievedSmsCodeForTesting: + anyNamed('autoRetrievedSmsCodeForTesting'), + codeAutoRetrievalTimeout: anyNamed('codeAutoRetrievalTimeout'), + codeSent: anyNamed('codeSent'), + forceResendingToken: anyNamed('forceResendingToken'), + phoneNumber: anyNamed('phoneNumber'), + timeout: anyNamed('timeout'), + verificationCompleted: anyNamed('verificationCompleted'), + verificationFailed: anyNamed('verificationFailed'), + )).thenAnswer((i) async {}); + + final PhoneVerificationCompleted verificationCompleted = + (PhoneAuthCredential phoneAuthCredential) {}; + final PhoneVerificationFailed verificationFailed = + (FirebaseAuthException authException) {}; + final PhoneCodeSent codeSent = + (String verificationId, [int? forceResendingToken]) async {}; + final PhoneCodeAutoRetrievalTimeout autoRetrievalTimeout = + (String verificationId) {}; + + await auth.verifyPhoneNumber( + phoneNumber: kMockPhoneNumber, + verificationCompleted: verificationCompleted, + verificationFailed: verificationFailed, + codeSent: codeSent, + codeAutoRetrievalTimeout: autoRetrievalTimeout, + ); + + verify( + mockAuthPlatform.verifyPhoneNumber( + phoneNumber: kMockPhoneNumber, + verificationCompleted: verificationCompleted, + verificationFailed: verificationFailed, + codeSent: codeSent, + codeAutoRetrievalTimeout: autoRetrievalTimeout, + ), + ); + }); + }); + + group('revokeAccessToken()', () { + test('should call delegate method', () async { + // Necessary as we otherwise get a "null is not a Future" error + when(mockAuthPlatform.revokeAccessToken(kMockAuthToken)) + .thenAnswer((i) async {}); + + await auth.revokeAccessToken(kMockAuthToken); + verify(mockAuthPlatform.revokeAccessToken(kMockAuthToken)); + }); + }); + + group('passwordPolicy', () { + test('passwordPolicy should be initialized with correct parameters', + () async { + PasswordPolicyImpl passwordPolicy = + PasswordPolicyImpl(kMockPasswordPolicyObject); + expect(passwordPolicy.policy, equals(kMockPasswordPolicyObject)); + }); + + PasswordPolicyImpl passwordPolicy = + PasswordPolicyImpl(kMockPasswordPolicyObject); + + test('should return true for valid password', () async { + final PasswordValidationStatus status = + passwordPolicy.isPasswordValid(kMockValidPassword); + expect(status.isValid, isTrue); + }); + + test('should return false for invalid password that is too short', + () async { + final PasswordValidationStatus status = + passwordPolicy.isPasswordValid(kMockInvalidPassword); + expect(status.isValid, isFalse); + }); + + test( + 'should return false for invalid password with no capital characters', + () async { + final PasswordValidationStatus status = + passwordPolicy.isPasswordValid(kMockInvalidPassword2); + expect(status.isValid, isFalse); + }); + + test( + 'should return false for invalid password with no lowercase characters', + () async { + final PasswordValidationStatus status = + passwordPolicy.isPasswordValid(kMockInvalidPassword3); + expect(status.isValid, isFalse); + }); + + test('should return false for invalid password with no numbers', + () async { + final PasswordValidationStatus status = + passwordPolicy.isPasswordValid(kMockInvalidPassword4); + expect(status.isValid, isFalse); + }); + + test('should return false for invalid password with no symbols', + () async { + final PasswordValidationStatus status = + passwordPolicy.isPasswordValid(kMockInvalidPassword5); + expect(status.isValid, isFalse); + }); + }); + + test('toString()', () async { + expect( + auth.toString(), + equals('FirebaseAuth(app: $testCount)'), + ); + }); + }); +} + +class MockFirebaseAuth extends Mock + with MockPlatformInterfaceMixin + implements TestFirebaseAuthPlatform { + @override + Stream userChanges() { + return super.noSuchMethod( + Invocation.method(#userChanges, []), + returnValue: const Stream.empty(), + returnValueForMissingStub: const Stream.empty(), + ); + } + + @override + Stream idTokenChanges() { + return super.noSuchMethod( + Invocation.method(#idTokenChanges, []), + returnValue: const Stream.empty(), + returnValueForMissingStub: const Stream.empty(), + ); + } + + @override + Stream authStateChanges() { + return super.noSuchMethod( + Invocation.method(#authStateChanges, []), + returnValue: const Stream.empty(), + returnValueForMissingStub: const Stream.empty(), + ); + } + + @override + FirebaseAuthPlatform delegateFor( + {FirebaseApp? app, Persistence? persistence}) { + return super.noSuchMethod( + Invocation.method(#delegateFor, [], {#app: app}), + returnValue: TestFirebaseAuthPlatform(), + returnValueForMissingStub: TestFirebaseAuthPlatform(), + ); + } + + @override + Future createUserWithEmailAndPassword( + String? email, + String? password, + ) { + return super.noSuchMethod( + Invocation.method(#createUserWithEmailAndPassword, [email, password]), + returnValue: neverEndingFuture(), + returnValueForMissingStub: neverEndingFuture(), + ); + } + + @override + Future signInWithPhoneNumber( + String? phoneNumber, + RecaptchaVerifierFactoryPlatform? applicationVerifier, + ) { + return super.noSuchMethod( + Invocation.method( + #signInWithPhoneNumber, + [phoneNumber, applicationVerifier], + ), + returnValue: neverEndingFuture(), + returnValueForMissingStub: + neverEndingFuture(), + ); + } + + @override + Future signInWithCredential( + AuthCredential? credential, + ) { + return super.noSuchMethod( + Invocation.method(#signInWithCredential, [credential]), + returnValue: neverEndingFuture(), + returnValueForMissingStub: neverEndingFuture(), + ); + } + + @override + Future signInWithCustomToken(String? token) { + return super.noSuchMethod( + Invocation.method(#signInWithCustomToken, [token]), + returnValue: neverEndingFuture(), + returnValueForMissingStub: neverEndingFuture(), + ); + } + + @override + Future signInWithEmailAndPassword( + String? email, + String? password, + ) { + return super.noSuchMethod( + Invocation.method(#signInWithEmailAndPassword, [email, password]), + returnValue: neverEndingFuture(), + returnValueForMissingStub: neverEndingFuture(), + ); + } + + @override + Future signInWithPopup(AuthProvider? provider) { + return super.noSuchMethod( + Invocation.method(#signInWithPopup, [provider]), + returnValue: neverEndingFuture(), + returnValueForMissingStub: neverEndingFuture(), + ); + } + + @override + Future signInWithEmailLink( + String? email, + String? emailLink, + ) { + return super.noSuchMethod( + Invocation.method(#signInWithEmailLink, [email, emailLink]), + returnValue: neverEndingFuture(), + returnValueForMissingStub: neverEndingFuture(), + ); + } + + @override + Future signInWithRedirect(AuthProvider? provider) { + return super.noSuchMethod( + Invocation.method(#signInWithRedirect, [provider]), + returnValue: neverEndingFuture(), + returnValueForMissingStub: neverEndingFuture(), + ); + } + + @override + Future signInAnonymously() { + return super.noSuchMethod( + Invocation.method(#signInAnonymously, []), + returnValue: neverEndingFuture(), + returnValueForMissingStub: neverEndingFuture(), + ); + } + + @override + FirebaseAuthPlatform setInitialValues({ + InternalUserDetails? currentUser, + String? languageCode, + }) { + return super.noSuchMethod( + Invocation.method(#signInAnonymously, [], { + #currentUser: currentUser, + #languageCode: languageCode, + }), + returnValue: TestFirebaseAuthPlatform(), + returnValueForMissingStub: TestFirebaseAuthPlatform(), + ); + } + + @override + Future getRedirectResult() { + return super.noSuchMethod( + Invocation.method(#getRedirectResult, []), + returnValue: neverEndingFuture(), + returnValueForMissingStub: neverEndingFuture(), + ); + } + + @override + Future setLanguageCode(String? languageCode) { + return super.noSuchMethod( + Invocation.method(#setLanguageCode, [languageCode]), + returnValue: neverEndingFuture(), + returnValueForMissingStub: neverEndingFuture(), + ); + } + + @override + Future useAuthEmulator(String host, int port) { + return super.noSuchMethod( + Invocation.method(#useEmulator, [host, port]), + returnValue: neverEndingFuture(), + returnValueForMissingStub: neverEndingFuture(), + ); + } + + @override + Future checkActionCode(String? code) { + return super.noSuchMethod( + Invocation.method(#checkActionCode, [code]), + returnValue: neverEndingFuture(), + returnValueForMissingStub: neverEndingFuture(), + ); + } + + @override + Future confirmPasswordReset(String? code, String? newPassword) { + return super.noSuchMethod( + Invocation.method(#confirmPasswordReset, [code, newPassword]), + returnValue: neverEndingFuture(), + returnValueForMissingStub: neverEndingFuture(), + ); + } + + @override + bool isSignInWithEmailLink(String? emailLink) { + return super.noSuchMethod( + Invocation.method(#isSignInWithEmailLink, [emailLink]), + returnValue: false, + returnValueForMissingStub: false, + ); + } + + @override + Future sendPasswordResetEmail( + String? email, [ + ActionCodeSettings? actionCodeSettings, + ]) { + return super.noSuchMethod( + Invocation.method(#sendPasswordResetEmail, [email, actionCodeSettings]), + returnValue: neverEndingFuture(), + returnValueForMissingStub: neverEndingFuture(), + ); + } + + @override + Future sendSignInLinkToEmail( + String? email, + ActionCodeSettings? actionCodeSettings, + ) { + return super.noSuchMethod( + Invocation.method(#sendSignInLinkToEmail, [email, actionCodeSettings]), + returnValue: neverEndingFuture(), + returnValueForMissingStub: neverEndingFuture(), + ); + } + + @override + Future setSettings({ + bool? appVerificationDisabledForTesting, + String? userAccessGroup, + String? phoneNumber, + String? smsCode, + bool? forceRecaptchaFlow, + }) { + return super.noSuchMethod( + Invocation.method(#setSettings, [ + appVerificationDisabledForTesting, + userAccessGroup, + phoneNumber, + smsCode, + forceRecaptchaFlow, + ]), + returnValue: neverEndingFuture(), + returnValueForMissingStub: neverEndingFuture(), + ); + } + + @override + Future setPersistence(Persistence? persistence) { + return super.noSuchMethod( + Invocation.method(#setPersistence, [persistence]), + returnValue: neverEndingFuture(), + returnValueForMissingStub: neverEndingFuture(), + ); + } + + @override + Future signOut() { + return super.noSuchMethod( + Invocation.method(#signOut, [signOut]), + returnValue: neverEndingFuture(), + returnValueForMissingStub: neverEndingFuture(), + ); + } + + @override + Future verifyPasswordResetCode(String? code) { + return super.noSuchMethod( + Invocation.method(#verifyPasswordResetCode, [code]), + returnValue: neverEndingFuture(), + returnValueForMissingStub: neverEndingFuture(), + ); + } + + @override + Future verifyPhoneNumber({ + String? phoneNumber, + PhoneMultiFactorInfo? multiFactorInfo, + MultiFactorSession? multiFactorSession, + Object? verificationCompleted, + Object? verificationFailed, + Object? codeSent, + Object? codeAutoRetrievalTimeout, + Duration? timeout = const Duration(seconds: 30), + int? forceResendingToken, + String? autoRetrievedSmsCodeForTesting, + }) { + return super.noSuchMethod( + Invocation.method(#verifyPhoneNumber, [], { + #phoneNumber: phoneNumber, + #verificationCompleted: verificationCompleted, + #verificationFailed: verificationFailed, + #codeSent: codeSent, + #codeAutoRetrievalTimeout: codeAutoRetrievalTimeout, + #timeout: timeout, + #forceResendingToken: forceResendingToken, + #autoRetrievedSmsCodeForTesting: autoRetrievedSmsCodeForTesting, + }), + returnValue: neverEndingFuture(), + returnValueForMissingStub: neverEndingFuture(), + ); + } + + @override + Future revokeAccessToken(String accessToken) { + return super.noSuchMethod( + Invocation.method(#revokeAccessToken, [accessToken]), + returnValue: neverEndingFuture(), + returnValueForMissingStub: neverEndingFuture(), + ); + } +} + +class FakeFirebaseAuthPlatform extends Fake + with MockPlatformInterfaceMixin + implements FirebaseAuthPlatform { + FakeFirebaseAuthPlatform({this.tenantId, this.customAuthDomain}); + + @override + String? tenantId; + + @override + String? customAuthDomain; + + @override + FirebaseAuthPlatform delegateFor( + {required FirebaseApp app, Persistence? persistence}) { + return this; + } + + @override + FirebaseAuthPlatform setInitialValues({ + InternalUserDetails? currentUser, + String? languageCode, + }) { + return this; + } +} + +class MockUserPlatform extends Mock + with MockPlatformInterfaceMixin + implements TestUserPlatform { + MockUserPlatform(FirebaseAuthPlatform auth, MultiFactorPlatform multiFactor, + InternalUserDetails _user) { + TestUserPlatform(auth, multiFactor, _user); + } +} + +class MockUserCredentialPlatform extends Mock + with MockPlatformInterfaceMixin + implements TestUserCredentialPlatform { + MockUserCredentialPlatform( + FirebaseAuthPlatform auth, + AdditionalUserInfo additionalUserInfo, + AuthCredential credential, + UserPlatform userPlatform, + ) { + TestUserCredentialPlatform( + auth, + additionalUserInfo, + credential, + userPlatform, + ); + } +} + +class MockConfirmationResultPlatform extends Mock + with MockPlatformInterfaceMixin + implements TestConfirmationResultPlatform { + MockConfirmationResultPlatform() { + TestConfirmationResultPlatform(); + } +} + +class TestConfirmationResultPlatform extends ConfirmationResultPlatform { + TestConfirmationResultPlatform() : super('TEST'); +} + +class TestFirebaseAuthPlatform extends FirebaseAuthPlatform { + TestFirebaseAuthPlatform() : super(); + + void instanceFor({ + FirebaseApp? app, + Map? pluginConstants, + }) {} + + @override + FirebaseAuthPlatform delegateFor( + {FirebaseApp? app, Persistence? persistence}) { + return this; + } + + @override + FirebaseAuthPlatform setInitialValues({ + InternalUserDetails? currentUser, + String? languageCode, + }) { + return this; + } +} + +class MockRecaptchaVerifier extends Mock + with MockPlatformInterfaceMixin + implements TestRecaptchaVerifier { + MockRecaptchaVerifier() { + TestRecaptchaVerifier(); + } + + RecaptchaVerifierFactoryPlatform get mockDelegate { + return MockRecaptchaVerifierFactoryPlatform(); + } + + @override + RecaptchaVerifierFactoryPlatform get delegate { + return super.noSuchMethod( + Invocation.getter(#delegate), + returnValue: MockRecaptchaVerifierFactoryPlatform(), + returnValueForMissingStub: MockRecaptchaVerifierFactoryPlatform(), + ); + } +} + +class MockRecaptchaVerifierFactoryPlatform extends Mock + with MockPlatformInterfaceMixin + implements TestRecaptchaVerifierFactoryPlatform { + MockRecaptchaVerifierFactoryPlatform() { + TestRecaptchaVerifierFactoryPlatform(); + } +} + +class TestRecaptchaVerifier implements RecaptchaVerifier { + TestRecaptchaVerifier() : super(); + + @override + void clear() {} + + @override + RecaptchaVerifierFactoryPlatform get delegate => + TestRecaptchaVerifierFactoryPlatform(); + + @override + Future render() { + throw UnimplementedError(); + } + + @override + String get type => throw UnimplementedError(); + + @override + Future verify() { + throw UnimplementedError(); + } +} + +class TestRecaptchaVerifierFactoryPlatform + extends RecaptchaVerifierFactoryPlatform {} + +class TestAuthProvider extends AuthProvider { + TestAuthProvider() : super('TEST'); +} + +class TestUserPlatform extends UserPlatform { + TestUserPlatform(FirebaseAuthPlatform auth, MultiFactorPlatform multiFactor, + InternalUserDetails data) + : super(auth, multiFactor, data); +} + +class TestMultiFactorPlatform extends MultiFactorPlatform { + TestMultiFactorPlatform(FirebaseAuthPlatform auth) : super(auth); +} + +class TestUserCredentialPlatform extends UserCredentialPlatform { + TestUserCredentialPlatform( + FirebaseAuthPlatform auth, + AdditionalUserInfo additionalUserInfo, + AuthCredential credential, + UserPlatform userPlatform, + ) : super( + auth: auth, + additionalUserInfo: additionalUserInfo, + credential: credential, + user: userPlatform, + ); +} + +class EmptyUserCredentialPlatform extends UserCredentialPlatform { + EmptyUserCredentialPlatform() : super(auth: FirebaseAuthPlatform.instance); +} diff --git a/mih_ui/android/build/macos/SourcePackages/firebase_auth-6.5.4/test/mock.dart b/mih_ui/android/build/macos/SourcePackages/firebase_auth-6.5.4/test/mock.dart new file mode 100644 index 00000000..6dc416fb --- /dev/null +++ b/mih_ui/android/build/macos/SourcePackages/firebase_auth-6.5.4/test/mock.dart @@ -0,0 +1,40 @@ +// Copyright 2020 The Chromium Authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +import 'package:firebase_core_platform_interface/test.dart'; +import 'package:flutter/services.dart'; +import 'package:flutter_test/flutter_test.dart'; + +typedef Callback = void Function(MethodCall call); + +void setupFirebaseAuthMocks([Callback? customHandlers]) { + TestWidgetsFlutterBinding.ensureInitialized(); + + setupFirebaseCoreMocks(); + TestFirebaseAppHostApi.setUp(MockFirebaseAppHostApi()); +} + +Future neverEndingFuture() async { + // ignore: literal_only_boolean_expressions + while (true) { + await Future.delayed(const Duration(minutes: 5)); + } +} + +class MockFirebaseAppHostApi implements TestFirebaseAppHostApi { + @override + Future delete(String appName) async {} + + @override + Future setAutomaticDataCollectionEnabled( + String appName, + bool enabled, + ) async {} + + @override + Future setAutomaticResourceManagementEnabled( + String appName, + bool enabled, + ) async {} +} diff --git a/mih_ui/android/build/macos/SourcePackages/firebase_auth-6.5.4/test/user_test.dart b/mih_ui/android/build/macos/SourcePackages/firebase_auth-6.5.4/test/user_test.dart new file mode 100644 index 00000000..967be866 --- /dev/null +++ b/mih_ui/android/build/macos/SourcePackages/firebase_auth-6.5.4/test/user_test.dart @@ -0,0 +1,571 @@ +// ignore_for_file: require_trailing_commas +// Copyright 2020, the Chromium project authors. Please see the AUTHORS file +// for details. All rights reserved. Use of this source code is governed by a +// BSD-style license that can be found in the LICENSE file. + +import 'package:firebase_auth/firebase_auth.dart'; +import 'package:firebase_auth_platform_interface/firebase_auth_platform_interface.dart'; +import 'package:firebase_auth_platform_interface/src/method_channel/method_channel_firebase_auth.dart'; +import 'package:firebase_core/firebase_core.dart'; +import 'package:flutter_test/flutter_test.dart'; +import 'package:mockito/mockito.dart'; +// import 'package:mockito/annotations.dart'; +import 'package:plugin_platform_interface/plugin_platform_interface.dart'; + +// import './user_test.mocks.dart'; +import './mock.dart'; +import 'firebase_auth_test.dart'; + +Map kMockUser1 = { + 'isAnonymous': true, + 'emailVerified': false, + 'displayName': 'displayName', +}; + +// @GenerateMocks([], customMocks: [ +// MockSpec(as: #MockFirebaseAuthPlatform), +// MockSpec(as: #MockUserPlatform), +// ]) +void main() { + setupFirebaseAuthMocks(); + + late FirebaseAuth auth; + + final kMockIdTokenResult = InternalIdTokenResult( + token: '12345', + expirationTimestamp: 123456, + authTimestamp: 1234567, + issuedAtTimestamp: 12345678, + signInProvider: 'password', + claims: { + 'claim1': 'value1', + }, + ); + + final int kMockCreationTimestamp = + DateTime.now().subtract(const Duration(days: 2)).millisecondsSinceEpoch; + final int kMockLastSignInTimestamp = + DateTime.now().subtract(const Duration(days: 1)).millisecondsSinceEpoch; + + final kMockUser = InternalUserDetails( + userInfo: InternalUserInfo( + uid: '12345', + displayName: 'displayName', + creationTimestamp: kMockCreationTimestamp, + lastSignInTimestamp: kMockLastSignInTimestamp, + isAnonymous: true, + isEmailVerified: false, + ), + providerData: [ + { + 'providerId': 'firebase', + 'uid': '12345', + 'displayName': 'Flutter Test User', + 'photoUrl': null, + 'email': 'test@example.com', + 'isAnonymous': true, + 'isEmailVerified': false, + } + ], + ); + late MockUserPlatform mockUserPlatform; + late MockUserCredentialPlatform mockUserCredPlatform; + + AdditionalUserInfo mockAdditionalInfo = AdditionalUserInfo( + isNewUser: false, + username: 'flutterUser', + providerId: 'testProvider', + profile: {'foo': 'bar'}, + ); + + EmailAuthCredential mockCredential = + EmailAuthProvider.credential(email: 'test', password: 'test') + as EmailAuthCredential; + + var mockAuthPlatform = MockFirebaseAuth(); + + group('$User', () { + late InternalUserDetails user; + + // used to generate a unique application name for each test + var testCount = 0; + + setUp(() async { + FirebaseAuthPlatform.instance = mockAuthPlatform = MockFirebaseAuth(); + + // Each test uses a unique FirebaseApp instance to avoid sharing state + final app = await Firebase.initializeApp( + name: '$testCount', + options: const FirebaseOptions( + apiKey: '', + appId: '', + messagingSenderId: '', + projectId: '', + ), + ); + + auth = FirebaseAuth.instanceFor(app: app); + + user = kMockUser; + + mockUserPlatform = MockUserPlatform(mockAuthPlatform, user); + + mockUserCredPlatform = MockUserCredentialPlatform( + FirebaseAuthPlatform.instance, + mockAdditionalInfo, + mockCredential, + mockUserPlatform, + ); + + when(mockAuthPlatform.signInAnonymously()).thenAnswer( + (_) => Future.value(mockUserCredPlatform)); + + when(mockAuthPlatform.currentUser).thenReturn(mockUserPlatform); + + when(mockAuthPlatform.delegateFor( + app: anyNamed('app'), + )).thenAnswer((_) => mockAuthPlatform); + + when(mockAuthPlatform.setInitialValues( + currentUser: anyNamed('currentUser'), + languageCode: anyNamed('languageCode'), + )).thenAnswer((_) => mockAuthPlatform); + + TestDefaultBinaryMessengerBinding.instance.defaultBinaryMessenger + .setMockMethodCallHandler(MethodChannelFirebaseAuth.channel, + (call) async { + switch (call.method) { + default: + return {'user': user}; + } + }); + }); + + tearDown(() => testCount++); + + setUp(() async { + user = kMockUser; + await auth.signInAnonymously(); + }); + + test('delete()', () async { + // Necessary as we otherwise get a "null is not a Future" error + when(mockUserPlatform.delete()).thenAnswer((i) async {}); + + await auth.currentUser!.delete(); + + verify(mockUserPlatform.delete()); + }); + + test('getIdToken()', () async { + // Necessary as we otherwise get a "null is not a Future" error + when(mockUserPlatform.getIdToken(any)).thenAnswer((_) async => 'token'); + + final token = await auth.currentUser!.getIdToken(true); + + verify(mockUserPlatform.getIdToken(true)); + expect(token, isA()); + }); + + test('getIdTokenResult()', () async { + when(mockUserPlatform.getIdTokenResult(any)) + .thenAnswer((_) async => IdTokenResult(kMockIdTokenResult)); + + final idTokenResult = await auth.currentUser!.getIdTokenResult(true); + + verify(mockUserPlatform.getIdTokenResult(true)); + expect(idTokenResult, isA()); + }); + + group('linkWithCredential()', () { + setUp(() { + when(mockUserPlatform.linkWithCredential(any)) + .thenAnswer((_) async => mockUserCredPlatform); + }); + + test('should call linkWithCredential()', () async { + String newEmail = 'new@email.com'; + EmailAuthCredential credential = + EmailAuthProvider.credential(email: newEmail, password: 'test') + as EmailAuthCredential; + + await auth.currentUser!.linkWithCredential(credential); + + verify(mockUserPlatform.linkWithCredential(credential)); + }); + }); + + group('reauthenticateWithCredential()', () { + setUp(() { + when(mockUserPlatform.reauthenticateWithCredential(any)) + .thenAnswer((_) => Future.value(mockUserCredPlatform)); + }); + test('should call reauthenticateWithCredential()', () async { + String newEmail = 'new@email.com'; + EmailAuthCredential credential = + EmailAuthProvider.credential(email: newEmail, password: 'test') + as EmailAuthCredential; + + await auth.currentUser!.reauthenticateWithCredential(credential); + + verify(mockUserPlatform.reauthenticateWithCredential(credential)); + }); + }); + + test('reload()', () async { + // Necessary as we otherwise get a "null is not a Future" error + when(mockUserPlatform.reload()).thenAnswer((i) async {}); + + await auth.currentUser!.reload(); + + verify(mockUserPlatform.reload()); + }); + + test('sendEmailVerification()', () async { + // Necessary as we otherwise get a "null is not a Future" error + when(mockUserPlatform.sendEmailVerification(any)) + .thenAnswer((i) async {}); + + final ActionCodeSettings actionCodeSettings = + ActionCodeSettings(url: 'test'); + + await auth.currentUser!.sendEmailVerification(actionCodeSettings); + + verify(mockUserPlatform.sendEmailVerification(actionCodeSettings)); + }); + + group('unlink()', () { + setUp(() { + when(mockUserPlatform.unlink(any)) + .thenAnswer((_) => Future.value(mockUserPlatform)); + }); + test('should call unlink()', () async { + const String providerId = 'providerId'; + + await auth.currentUser!.unlink(providerId); + + verify(mockUserPlatform.unlink(providerId)); + }); + }); + + group('updatePassword()', () { + test('should call updatePassword()', () async { + // Necessary as we otherwise get a "null is not a Future" error + when(mockUserPlatform.updatePassword(any)).thenAnswer((i) async {}); + + const String newPassword = 'newPassword'; + + await auth.currentUser!.updatePassword(newPassword); + + verify(mockUserPlatform.updatePassword(newPassword)); + }); + }); + group('updatePhoneNumber()', () { + test('should call updatePhoneNumber()', () async { + // Necessary as we otherwise get a "null is not a Future" error + when(mockUserPlatform.updatePhoneNumber(any)).thenAnswer((i) async {}); + + PhoneAuthCredential phoneAuthCredential = PhoneAuthProvider.credential( + verificationId: 'test', + smsCode: 'test', + ); + + await auth.currentUser!.updatePhoneNumber(phoneAuthCredential); + + verify(mockUserPlatform.updatePhoneNumber(phoneAuthCredential)); + }); + }); + + test('updateProfile()', () async { + // Necessary as we otherwise get a "null is not a Future" error + when(mockUserPlatform.updateProfile(any)).thenAnswer((i) async {}); + + const String displayName = 'updatedName'; + const String photoURL = 'testUrl'; + Map data = { + 'displayName': displayName, + 'photoURL': photoURL + }; + + await auth.currentUser! + // ignore: deprecated_member_use_from_same_package + .updateProfile(displayName: displayName, photoURL: photoURL); + + verify(mockUserPlatform.updateProfile(data)); + }); + + group('verifyBeforeUpdateEmail()', () { + test('should call verifyBeforeUpdateEmail()', () async { + // Necessary as we otherwise get a "null is not a Future" error + when(mockUserPlatform.verifyBeforeUpdateEmail(any, any)) + .thenAnswer((i) async {}); + + const newEmail = 'new@email.com'; + ActionCodeSettings actionCodeSettings = ActionCodeSettings(url: 'test'); + + await auth.currentUser! + .verifyBeforeUpdateEmail(newEmail, actionCodeSettings); + + verify(mockUserPlatform.verifyBeforeUpdateEmail( + newEmail, actionCodeSettings)); + }); + }); + + test('toString()', () async { + when(mockAuthPlatform.currentUser).thenReturn(TestUserPlatform( + mockAuthPlatform, TestMultiFactorPlatform(mockAuthPlatform), user)); + + const userInfo = 'UserInfo(' + 'displayName: Flutter Test User, ' + 'email: test@example.com, ' + 'phoneNumber: null, ' + 'photoURL: null, ' + 'providerId: firebase, ' + 'uid: 12345)'; + + final userMetadata = 'UserMetadata(' + 'creationTime: ${DateTime.fromMillisecondsSinceEpoch(kMockCreationTimestamp, isUtc: true)}, ' + 'lastSignInTime: ${DateTime.fromMillisecondsSinceEpoch(kMockLastSignInTimestamp, isUtc: true)})'; + + expect( + auth.currentUser.toString(), + 'User(' + 'displayName: displayName, ' + 'email: null, ' + 'isEmailVerified: false, ' + 'isAnonymous: true, ' + 'metadata: $userMetadata, ' + 'phoneNumber: null, ' + 'photoURL: null, ' + 'providerData, ' + '[$userInfo], ' + 'refreshToken: null, ' + 'tenantId: null, ' + 'uid: 12345)', + ); + }); + }); +} + +class MockFirebaseAuthPlatformBase = TestFirebaseAuthPlatform + with MockPlatformInterfaceMixin; + +class MockUserPlatformBase = TestUserPlatform with MockPlatformInterfaceMixin; + +class MockFirebaseAuth extends Mock + with MockPlatformInterfaceMixin + implements TestFirebaseAuthPlatform { + @override + Future signInAnonymously() { + return super.noSuchMethod( + Invocation.method(#signInAnonymously, const []), + returnValue: neverEndingFuture(), + returnValueForMissingStub: neverEndingFuture(), + ); + } + + @override + FirebaseAuthPlatform delegateFor( + {FirebaseApp? app, Persistence? persistence}) { + return super.noSuchMethod( + Invocation.method(#delegateFor, const [], {#app: app}), + returnValue: TestFirebaseAuthPlatform(), + returnValueForMissingStub: TestFirebaseAuthPlatform(), + ); + } + + @override + FirebaseAuthPlatform setInitialValues({ + InternalUserDetails? currentUser, + String? languageCode, + }) { + return super.noSuchMethod( + Invocation.method(#setInitialValues, const [], { + #currentUser: currentUser, + #languageCode: languageCode, + }), + returnValue: TestFirebaseAuthPlatform(), + returnValueForMissingStub: TestFirebaseAuthPlatform(), + ); + } +} + +class MockUserPlatform extends Mock + with MockPlatformInterfaceMixin + implements TestUserPlatform { + MockUserPlatform(FirebaseAuthPlatform auth, InternalUserDetails _user) { + TestUserPlatform(auth, TestMultiFactorPlatform(auth), _user); + } + + @override + Future delete() { + return super.noSuchMethod( + Invocation.method(#delete, []), + returnValue: neverEndingFuture(), + returnValueForMissingStub: neverEndingFuture(), + ); + } + + @override + Future reload() { + return super.noSuchMethod( + Invocation.method(#reload, []), + returnValue: neverEndingFuture(), + returnValueForMissingStub: neverEndingFuture(), + ); + } + + @override + Future getIdToken(bool? forceRefresh) { + return super.noSuchMethod( + Invocation.method(#getIdToken, [forceRefresh]), + returnValue: neverEndingFuture(), + returnValueForMissingStub: neverEndingFuture(), + ); + } + + @override + Future unlink(String? providerId) { + return super.noSuchMethod( + Invocation.method(#unlink, [providerId]), + returnValue: neverEndingFuture(), + returnValueForMissingStub: neverEndingFuture(), + ); + } + + @override + Future getIdTokenResult(bool? forceRefresh) { + return super.noSuchMethod( + Invocation.method(#getIdTokenResult, [forceRefresh]), + returnValue: neverEndingFuture(), + returnValueForMissingStub: neverEndingFuture(), + ); + } + + @override + Future reauthenticateWithCredential( + AuthCredential? credential, + ) { + return super.noSuchMethod( + Invocation.method(#reauthenticateWithCredential, [credential]), + returnValue: neverEndingFuture(), + returnValueForMissingStub: neverEndingFuture(), + ); + } + + @override + Future linkWithCredential( + AuthCredential? credential, + ) { + return super.noSuchMethod( + Invocation.method(#linkWithCredential, [credential]), + returnValue: neverEndingFuture(), + returnValueForMissingStub: neverEndingFuture(), + ); + } + + @override + Future sendEmailVerification(ActionCodeSettings? actionCodeSettings) { + return super.noSuchMethod( + Invocation.method(#sendEmailVerification, [actionCodeSettings]), + returnValue: neverEndingFuture(), + returnValueForMissingStub: neverEndingFuture(), + ); + } + + @override + Future updatePassword(String? newPassword) { + return super.noSuchMethod( + Invocation.method(#updatePassword, [newPassword]), + returnValue: neverEndingFuture(), + returnValueForMissingStub: neverEndingFuture(), + ); + } + + @override + Future updatePhoneNumber(PhoneAuthCredential? phoneCredential) { + return super.noSuchMethod( + Invocation.method(#updatePhoneNumber, [phoneCredential]), + returnValue: neverEndingFuture(), + returnValueForMissingStub: neverEndingFuture(), + ); + } + + @override + Future updateProfile(Map? profile) { + return super.noSuchMethod( + Invocation.method(#updateProfile, [profile]), + returnValue: neverEndingFuture(), + returnValueForMissingStub: neverEndingFuture(), + ); + } + + @override + Future verifyBeforeUpdateEmail( + String? newEmail, [ + ActionCodeSettings? actionCodeSettings, + ]) { + return super.noSuchMethod( + Invocation.method(#verifyBeforeUpdateEmail, [ + newEmail, + actionCodeSettings, + ]), + returnValue: neverEndingFuture(), + returnValueForMissingStub: neverEndingFuture(), + ); + } +} + +class MockUserCredentialPlatform extends Mock + with MockPlatformInterfaceMixin + implements TestUserCredentialPlatform { + MockUserCredentialPlatform( + FirebaseAuthPlatform auth, + AdditionalUserInfo additionalUserInfo, + AuthCredential credential, + UserPlatform userPlatform, + ) { + TestUserCredentialPlatform( + auth, + additionalUserInfo, + credential, + userPlatform, + ); + } +} + +class TestFirebaseAuthPlatform extends FirebaseAuthPlatform { + TestFirebaseAuthPlatform() : super(); + + @override + FirebaseAuthPlatform delegateFor( + {FirebaseApp? app, Persistence? persistence}) => + this; + + @override + FirebaseAuthPlatform setInitialValues({ + InternalUserDetails? currentUser, + String? languageCode, + }) { + return this; + } +} + +class TestUserPlatform extends UserPlatform { + TestUserPlatform(FirebaseAuthPlatform auth, MultiFactorPlatform multiFactor, + InternalUserDetails data) + : super(auth, multiFactor, data); +} + +class TestUserCredentialPlatform extends UserCredentialPlatform { + TestUserCredentialPlatform( + FirebaseAuthPlatform auth, + AdditionalUserInfo additionalUserInfo, + AuthCredential credential, + UserPlatform userPlatform, + ) : super( + auth: auth, + additionalUserInfo: additionalUserInfo, + credential: credential, + user: userPlatform); +} diff --git a/mih_ui/android/build/macos/SourcePackages/firebase_auth-6.5.4/windows/CMakeLists.txt b/mih_ui/android/build/macos/SourcePackages/firebase_auth-6.5.4/windows/CMakeLists.txt new file mode 100644 index 00000000..74c8f9ab --- /dev/null +++ b/mih_ui/android/build/macos/SourcePackages/firebase_auth-6.5.4/windows/CMakeLists.txt @@ -0,0 +1,123 @@ +# The Flutter tooling requires that developers have a version of Visual Studio +# installed that includes CMake 3.14 or later. You should not increase this +# version, as doing so will cause the plugin to fail to compile for some +# customers of the plugin. +cmake_minimum_required(VERSION 3.14) + +# Project-level configuration. +set(PROJECT_NAME "firebase_auth") +project(${PROJECT_NAME} LANGUAGES CXX) + +# This value is used when generating builds using this plugin, so it must +# not be changed +set(PLUGIN_NAME "firebase_auth_plugin") + +# Any new source files that you add to the plugin should be added here. +list(APPEND PLUGIN_SOURCES + "firebase_auth_plugin.cpp" + "firebase_auth_plugin.h" + "messages.g.cpp" + "messages.g.h" +) + +# Read version from pubspec.yaml +file(STRINGS "../pubspec.yaml" pubspec_content) +foreach(line ${pubspec_content}) + string(FIND ${line} "version: " has_version) + + if("${has_version}" STREQUAL "0") + string(FIND ${line} ": " version_start_pos) + math(EXPR version_start_pos "${version_start_pos} + 2") + string(LENGTH ${line} version_end_pos) + math(EXPR len "${version_end_pos} - ${version_start_pos}") + string(SUBSTRING ${line} ${version_start_pos} ${len} PLUGIN_VERSION) + break() + endif() +endforeach(line) + +configure_file(plugin_version.h.in ${CMAKE_BINARY_DIR}/generated/firebase_auth/plugin_version.h) +include_directories(${CMAKE_BINARY_DIR}/generated/) + +# Define the plugin library target. Its name must not be changed (see comment +# on PLUGIN_NAME above). +add_library(${PLUGIN_NAME} STATIC + "include/firebase_auth/firebase_auth_plugin_c_api.h" + "firebase_auth_plugin_c_api.cpp" + ${PLUGIN_SOURCES} + ${CMAKE_BINARY_DIR}/generated/firebase_auth/plugin_version.h +) + +# Apply a standard set of build settings that are configured in the +# application-level CMakeLists.txt. This can be removed for plugins that want +# full control over build settings. +apply_standard_settings(${PLUGIN_NAME}) + +# Symbols are hidden by default to reduce the chance of accidental conflicts +# between plugins. This should not be removed; any symbols that should be +# exported should be explicitly exported with the FLUTTER_PLUGIN_EXPORT macro. +set_target_properties(${PLUGIN_NAME} PROPERTIES + CXX_VISIBILITY_PRESET hidden) +target_compile_definitions(${PLUGIN_NAME} PUBLIC FLUTTER_PLUGIN_IMPL) +# Enable firebase-cpp-sdk's platform logging api. +target_compile_definitions(${PLUGIN_NAME} PRIVATE -DINTERNAL_EXPERIMENTAL=1) + +# Source include directories and library dependencies. Add any plugin-specific +# dependencies here. +set(MSVC_RUNTIME_MODE MD) +set(firebase_libs firebase_core_plugin firebase_auth) +target_link_libraries(${PLUGIN_NAME} PRIVATE "${firebase_libs}") + +target_include_directories(${PLUGIN_NAME} INTERFACE + "${CMAKE_CURRENT_SOURCE_DIR}/include") +target_link_libraries(${PLUGIN_NAME} PUBLIC flutter flutter_wrapper_plugin) + +# List of absolute paths to libraries that should be bundled with the plugin. +# This list could contain prebuilt libraries, or libraries created by an +# external build triggered from this build file. +set(firebase_auth_bundled_libraries + "" + PARENT_SCOPE +) + +# === Tests === +# These unit tests can be run from a terminal after building the example, or +# from Visual Studio after opening the generated solution file. + +# Only enable test builds when building the example (which sets this variable) +# so that plugin clients aren't building the tests. +if (${include_${PROJECT_NAME}_tests}) +set(TEST_RUNNER "${PROJECT_NAME}_test") +enable_testing() + +# Add the Google Test dependency. +include(FetchContent) +FetchContent_Declare( + googletest + URL https://github.com/google/googletest/archive/release-1.11.0.zip +) +# Prevent overriding the parent project's compiler/linker settings +set(gtest_force_shared_crt ON CACHE BOOL "" FORCE) +# Disable install commands for gtest so it doesn't end up in the bundle. +set(INSTALL_GTEST OFF CACHE BOOL "Disable installation of googletest" FORCE) +FetchContent_MakeAvailable(googletest) + +# The plugin's C API is not very useful for unit testing, so build the sources +# directly into the test binary rather than using the DLL. +add_executable(${TEST_RUNNER} + test/firebase_auth_plugin_test.cpp + ${PLUGIN_SOURCES} +) +apply_standard_settings(${TEST_RUNNER}) +target_include_directories(${TEST_RUNNER} PRIVATE "${CMAKE_CURRENT_SOURCE_DIR}") +target_link_libraries(${TEST_RUNNER} PRIVATE flutter_wrapper_plugin) +target_link_libraries(${TEST_RUNNER} PRIVATE gtest_main gmock) +# flutter_wrapper_plugin has link dependencies on the Flutter DLL. +add_custom_command(TARGET ${TEST_RUNNER} POST_BUILD + COMMAND ${CMAKE_COMMAND} -E copy_if_different + "${FLUTTER_LIBRARY}" $ +) + +# Enable automatic test discovery. +include(GoogleTest) +gtest_discover_tests(${TEST_RUNNER}) +endif() diff --git a/mih_ui/android/build/macos/SourcePackages/firebase_auth-6.5.4/windows/firebase_auth_plugin.cpp b/mih_ui/android/build/macos/SourcePackages/firebase_auth-6.5.4/windows/firebase_auth_plugin.cpp new file mode 100644 index 00000000..a931dac2 --- /dev/null +++ b/mih_ui/android/build/macos/SourcePackages/firebase_auth-6.5.4/windows/firebase_auth_plugin.cpp @@ -0,0 +1,1341 @@ +// Copyright 2023, the Chromium project authors. Please see the AUTHORS file +// for details. All rights reserved. Use of this source code is governed by a +// BSD-style license that can be found in the LICENSE file. + +#include "firebase_auth_plugin.h" + +// This must be included before many other Windows headers. +#include + +#include +#include + +#include "firebase/app.h" +#include "firebase/auth.h" +#include "firebase/future.h" +#include "firebase/log.h" +#include "firebase/util.h" +#include "firebase/variant.h" +#include "firebase_auth/plugin_version.h" +#include "firebase_core/firebase_core_plugin_c_api.h" +#include "messages.g.h" + +// For getPlatformVersion; remove unless needed for your plugin implementation. +#include +#include +#include +#include +#include + +#include +#include +#include +#include +#include +#include +#include +#include +#include + +using ::firebase::App; +using ::firebase::auth::Auth; + +namespace firebase_auth_windows { + +static std::string kLibraryName = "flutter-fire-auth"; +flutter::BinaryMessenger* FirebaseAuthPlugin::binaryMessenger = nullptr; + +// static +void FirebaseAuthPlugin::RegisterWithRegistrar( + flutter::PluginRegistrarWindows* registrar) { + auto plugin = std::make_unique(); + + FirebaseAuthHostApi::SetUp(registrar->messenger(), plugin.get()); + FirebaseAuthUserHostApi::SetUp(registrar->messenger(), plugin.get()); + + RegisterFlutterFirebasePlugin("plugins.flutter.io/firebase_auth", + plugin.get()); + + registrar->AddPlugin(std::move(plugin)); + + binaryMessenger = registrar->messenger(); + + // Register for platform logging + App::RegisterLibrary(kLibraryName.c_str(), getPluginVersion().c_str(), + nullptr); +} + +FirebaseAuthPlugin::FirebaseAuthPlugin() { + firebase::SetLogLevel(firebase::kLogLevelVerbose); +} + +FirebaseAuthPlugin::~FirebaseAuthPlugin() = default; + +Auth* GetAuthFromPigeon(const AuthPigeonFirebaseApp& pigeonApp) { + App* app = App::GetInstance(pigeonApp.app_name().c_str()); + + Auth* auth = Auth::GetAuth(app); + + return auth; +} + +InternalUserCredential ParseAuthResult( + const firebase::auth::AuthResult* authResult) { + InternalUserCredential result = InternalUserCredential(); + result.set_user(FirebaseAuthPlugin::ParseUserDetails(authResult->user)); + result.set_additional_user_info(FirebaseAuthPlugin::ParseAdditionalUserInfo( + authResult->additional_user_info)); + return result; +} + +using flutter::EncodableMap; +using flutter::EncodableValue; + +flutter::EncodableMap +firebase_auth_windows::FirebaseAuthPlugin::ConvertToEncodableMap( + const std::map& originalMap) { + EncodableMap convertedMap; + for (const auto& kv : originalMap) { + EncodableValue key = ConvertToEncodableValue( + kv.first); // convert std::string to EncodableValue + EncodableValue value = ConvertToEncodableValue( + kv.second); // convert FieldValue to EncodableValue + convertedMap[key] = value; // insert into the new map + } + return convertedMap; +} + +flutter::EncodableValue +firebase_auth_windows::FirebaseAuthPlugin::ConvertToEncodableValue( + const firebase::Variant& variant) { + switch (variant.type()) { + case firebase::Variant::kTypeNull: + return EncodableValue(); + case firebase::Variant::kTypeInt64: + return EncodableValue(variant.int64_value()); + case firebase::Variant::kTypeDouble: + return EncodableValue(variant.double_value()); + case firebase::Variant::kTypeBool: + return EncodableValue(variant.bool_value()); + case firebase::Variant::kTypeStaticString: + return EncodableValue(variant.string_value()); + case firebase::Variant::kTypeMutableString: + return EncodableValue(variant.mutable_string()); + case firebase::Variant::kTypeMap: + return FirebaseAuthPlugin::ConvertToEncodableMap(variant.map()); + case firebase::Variant::kTypeStaticBlob: + return EncodableValue(flutter::CustomEncodableValue(variant.blob_data())); + case firebase::Variant::kTypeMutableBlob: + return EncodableValue( + flutter::CustomEncodableValue(variant.mutable_blob_data())); + default: + return EncodableValue(); + } +} + +InternalAdditionalUserInfo FirebaseAuthPlugin::ParseAdditionalUserInfo( + const firebase::auth::AdditionalUserInfo additionalUserInfo) { + // Cannot know if the user is new or not with current API + InternalAdditionalUserInfo result = InternalAdditionalUserInfo(false); + result.set_profile(ConvertToEncodableMap(additionalUserInfo.profile)); + result.set_provider_id(additionalUserInfo.provider_id); + result.set_username(additionalUserInfo.user_name); + return result; +} + +InternalUserDetails FirebaseAuthPlugin::ParseUserDetails( + const firebase::auth::User user) { + InternalUserDetails result = + InternalUserDetails(FirebaseAuthPlugin::ParseUserInfo(&user), + FirebaseAuthPlugin::ParseProviderData(&user)); + + return result; +} + +InternalUserInfo FirebaseAuthPlugin::ParseUserInfo( + const firebase::auth::User* user) { + InternalUserInfo result = InternalUserInfo(user->uid(), user->is_anonymous(), + user->is_email_verified()); + result.set_display_name(user->display_name()); + result.set_email(user->email()); + result.set_phone_number(user->phone_number()); + result.set_photo_url(user->photo_url()); + result.set_provider_id(user->provider_id()); + result.set_uid(user->uid()); + result.set_creation_timestamp(user->metadata().creation_timestamp); + result.set_last_sign_in_timestamp(user->metadata().last_sign_in_timestamp); + + return result; +} + +flutter::EncodableList FirebaseAuthPlugin::ParseProviderData( + const firebase::auth::User* user) { + flutter::EncodableList output; + + for (firebase::auth::UserInfoInterface userInfo : user->provider_data()) { + output.push_back(FirebaseAuthPlugin::ParseUserInfoToMap(&userInfo)); + } + + return flutter::EncodableList(output); +} + +flutter::EncodableValue FirebaseAuthPlugin::ParseUserInfoToMap( + firebase::auth::UserInfoInterface* userInfo) { + return flutter::EncodableValue(flutter::EncodableMap{ + {flutter::EncodableValue("displayName"), + flutter::EncodableValue(userInfo->display_name())}, + {flutter::EncodableValue("email"), + flutter::EncodableValue(userInfo->email())}, + {flutter::EncodableValue("isEmailVerified"), + flutter::EncodableValue(true)}, + {flutter::EncodableValue("phoneNumber"), + flutter::EncodableValue(userInfo->phone_number())}, + {flutter::EncodableValue("photoUrl"), + flutter::EncodableValue(userInfo->photo_url())}, + {flutter::EncodableValue("uid"), + flutter::EncodableValue(userInfo->uid().empty() ? std::string("") + : userInfo->uid())}, + {flutter::EncodableValue("providerId"), + flutter::EncodableValue(userInfo->provider_id())}, + {flutter::EncodableValue("isAnonymous"), + flutter::EncodableValue(false)}}); +} + +std::string FirebaseAuthPlugin::GetAuthErrorCode(AuthError authError) { + switch (authError) { + case firebase::auth::kAuthErrorInvalidCustomToken: + return "invalid-custom-token"; + case firebase::auth::kAuthErrorCustomTokenMismatch: + return "custom-token-mismatch"; + case firebase::auth::kAuthErrorInvalidEmail: + return "invalid-email"; + case firebase::auth::kAuthErrorInvalidCredential: + return "invalid-credential"; + case firebase::auth::kAuthErrorUserDisabled: + return "user-disabled"; + case firebase::auth::kAuthErrorEmailAlreadyInUse: + return "email-already-in-use"; + case firebase::auth::kAuthErrorWrongPassword: + return "wrong-password"; + case firebase::auth::kAuthErrorTooManyRequests: + return "too-many-requests"; + case firebase::auth::kAuthErrorAccountExistsWithDifferentCredentials: + return "account-exists-with-different-credentials"; + case firebase::auth::kAuthErrorRequiresRecentLogin: + return "requires-recent-login"; + case firebase::auth::kAuthErrorProviderAlreadyLinked: + return "provider-already-linked"; + case firebase::auth::kAuthErrorNoSuchProvider: + return "no-such-provider"; + case firebase::auth::kAuthErrorInvalidUserToken: + return "invalid-user-token"; + case firebase::auth::kAuthErrorUserTokenExpired: + return "user-token-expired"; + case firebase::auth::kAuthErrorUserNotFound: + return "user-not-found"; + case firebase::auth::kAuthErrorInvalidApiKey: + return "invalid-api-key"; + case firebase::auth::kAuthErrorCredentialAlreadyInUse: + return "credential-already-in-use"; + case firebase::auth::kAuthErrorOperationNotAllowed: + return "operation-not-allowed"; + case firebase::auth::kAuthErrorWeakPassword: + return "weak-password"; + case firebase::auth::kAuthErrorAppNotAuthorized: + return "app-not-authorized"; + case firebase::auth::kAuthErrorExpiredActionCode: + return "expired-action-code"; + case firebase::auth::kAuthErrorInvalidActionCode: + return "invalid-action-code"; + case firebase::auth::kAuthErrorInvalidMessagePayload: + return "invalid-message-payload"; + case firebase::auth::kAuthErrorInvalidSender: + return "invalid-sender"; + case firebase::auth::kAuthErrorInvalidRecipientEmail: + return "invalid-recipient-email"; + case firebase::auth::kAuthErrorUnauthorizedDomain: + return "unauthorized-domain"; + case firebase::auth::kAuthErrorInvalidContinueUri: + return "invalid-continue-uri"; + case firebase::auth::kAuthErrorMissingContinueUri: + return "missing-continue-uri"; + case firebase::auth::kAuthErrorMissingEmail: + return "missing-email"; + case firebase::auth::kAuthErrorMissingPhoneNumber: + return "missing-phone-number"; + case firebase::auth::kAuthErrorInvalidPhoneNumber: + return "invalid-phone-number"; + case firebase::auth::kAuthErrorMissingVerificationCode: + return "missing-verification-code"; + case firebase::auth::kAuthErrorInvalidVerificationCode: + return "invalid-verification-code"; + case firebase::auth::kAuthErrorMissingVerificationId: + return "missing-verification-id"; + case firebase::auth::kAuthErrorInvalidVerificationId: + return "invalid-verification-id"; + case firebase::auth::kAuthErrorSessionExpired: + return "session-expired"; + case firebase::auth::kAuthErrorQuotaExceeded: + return "quota-exceeded"; + case firebase::auth::kAuthErrorMissingAppCredential: + return "missing-app-credential"; + case firebase::auth::kAuthErrorInvalidAppCredential: + return "invalid-app-credential"; + case firebase::auth::kAuthErrorMissingClientIdentifier: + return "missing-client-identifier"; + case firebase::auth::kAuthErrorTenantIdMismatch: + return "tenant-id-mismatch"; + case firebase::auth::kAuthErrorUnsupportedTenantOperation: + return "unsupported-tenant-operation"; + case firebase::auth::kAuthErrorUserMismatch: + return "user-mismatch"; + case firebase::auth::kAuthErrorNetworkRequestFailed: + return "network-request-failed"; + case firebase::auth::kAuthErrorNoSignedInUser: + return "no-signed-in-user"; + case firebase::auth::kAuthErrorCancelled: + return "cancelled"; + + default: + return "unknown-error"; + } +} + +FlutterError FirebaseAuthPlugin::ParseError( + const firebase::FutureBase& completed_future) { + const AuthError errorCode = + static_cast(completed_future.error()); + + return FlutterError(FirebaseAuthPlugin::GetAuthErrorCode(errorCode), + completed_future.error_message()); +} + +std::string const kFLTFirebaseAuthChannelName = "firebase_auth_plugin"; + +class FlutterIdTokenListener : public firebase::auth::IdTokenListener { + public: + void SetEventSink( + std::unique_ptr> event_sink) { + event_sink_ = std::move(event_sink); + } + + void OnIdTokenChanged(Auth* auth) override { + // Generate your ID Token + firebase::auth::User user = auth->current_user(); + InternalUserDetails userDetails = + FirebaseAuthPlugin::ParseUserDetails(user); + + using flutter::EncodableList; + using flutter::EncodableMap; + using flutter::EncodableValue; + + if (event_sink_) { + if (user.is_valid()) { + EncodableList userDetailsList = EncodableList(); + userDetailsList.push_back(userDetails.user_info().ToEncodableList()); + userDetailsList.push_back(userDetails.provider_data()); + event_sink_->Success(EncodableValue( + EncodableMap{{EncodableValue("user"), userDetailsList}})); + } else { + event_sink_->Success(EncodableValue(EncodableMap{ + {EncodableValue("user"), EncodableValue(std::monostate{})}})); + } + } + } + + private: + std::unique_ptr> event_sink_; +}; + +class IdTokenStreamHandler + : public flutter::StreamHandler { + public: + IdTokenStreamHandler(Auth* auth) { + listener_ = nullptr; + auth_ = auth; + } + + std::unique_ptr> + OnListenInternal( + const flutter::EncodableValue* arguments, + std::unique_ptr>&& events) + override { + listener_ = new FlutterIdTokenListener(); + listener_->SetEventSink(std::move(events)); + auth_->AddIdTokenListener(listener_); + return nullptr; + } + + std::unique_ptr> + OnCancelInternal(const flutter::EncodableValue* arguments) override { + auth_->RemoveIdTokenListener(listener_); + listener_->SetEventSink(nullptr); + listener_ = nullptr; + return nullptr; + } + + private: + FlutterIdTokenListener* listener_; + firebase::auth::Auth* auth_; +}; + +void FirebaseAuthPlugin::RegisterIdTokenListener( + const AuthPigeonFirebaseApp& app, + std::function reply)> result) { + firebase::auth::Auth* firebaseAuth = GetAuthFromPigeon(app); + + std::string name = + kFLTFirebaseAuthChannelName + "/id-token/" + app.app_name(); + + auto id_token_handler = std::make_unique(firebaseAuth); + + flutter::EventChannel channel( + binaryMessenger, name, &flutter::StandardMethodCodec::GetInstance()); + + channel.SetStreamHandler(std::move(id_token_handler)); + + result(ErrorOr(std::string(name))); +} + +class FlutterAuthStateListener : public firebase::auth::AuthStateListener { + public: + void SetEventSink( + std::unique_ptr> event_sink) { + event_sink_ = std::move(event_sink); + } + + void OnAuthStateChanged(Auth* auth) override { + // Generate your ID Token + firebase::auth::User user = auth->current_user(); + InternalUserDetails userDetails = + FirebaseAuthPlugin::ParseUserDetails(user); + + using flutter::EncodableList; + using flutter::EncodableMap; + using flutter::EncodableValue; + + if (event_sink_) { + if (user.is_valid()) { + EncodableList userDetailsList = EncodableList(); + userDetailsList.push_back(userDetails.user_info().ToEncodableList()); + userDetailsList.push_back(userDetails.provider_data()); + + event_sink_->Success(EncodableValue( + EncodableMap{{EncodableValue("user"), userDetailsList}})); + } else { + event_sink_->Success(EncodableValue(EncodableMap{ + {EncodableValue("user"), EncodableValue(std::monostate{})}})); + } + } + } + + private: + std::unique_ptr> event_sink_; +}; + +class AuthStateStreamHandler + : public flutter::StreamHandler { + public: + AuthStateStreamHandler(Auth* auth) { + listener_ = nullptr; + auth_ = auth; + } + + std::unique_ptr> + OnListenInternal( + const flutter::EncodableValue* arguments, + std::unique_ptr>&& events) + override { + listener_ = new FlutterAuthStateListener(); + listener_->SetEventSink(std::move(events)); + + auth_->AddAuthStateListener(listener_); + + return nullptr; + } + + std::unique_ptr> + OnCancelInternal(const flutter::EncodableValue* arguments) override { + auth_->RemoveAuthStateListener(listener_); + + listener_->SetEventSink(nullptr); + listener_ = nullptr; + return nullptr; + } + + private: + FlutterAuthStateListener* listener_; + firebase::auth::Auth* auth_; +}; + +void FirebaseAuthPlugin::RegisterAuthStateListener( + const AuthPigeonFirebaseApp& app, + std::function reply)> result) { + firebase::auth::Auth* firebaseAuth = GetAuthFromPigeon(app); + + std::string name = + kFLTFirebaseAuthChannelName + "/auth-state/" + app.app_name(); + + auto auth_state_handler = + std::make_unique(firebaseAuth); + + flutter::EventChannel channel( + binaryMessenger, name, &flutter::StandardMethodCodec::GetInstance()); + + channel.SetStreamHandler(std::move(auth_state_handler)); + + result(ErrorOr(std::string(name))); +} + +void FirebaseAuthPlugin::UseEmulator( + const AuthPigeonFirebaseApp& app, const std::string& host, int64_t port, + std::function reply)> result) { + firebase::auth::Auth* firebaseAuth = GetAuthFromPigeon(app); + firebaseAuth->UseEmulator(host, static_cast(port)); + result(std::nullopt); +} + +void FirebaseAuthPlugin::ApplyActionCode( + const AuthPigeonFirebaseApp& app, const std::string& code, + std::function reply)> result) { + result(FlutterError("unimplemented", + "ApplyActionCode is not available on this platform yet.", + nullptr)); +} + +void FirebaseAuthPlugin::CheckActionCode( + const AuthPigeonFirebaseApp& app, const std::string& code, + std::function reply)> result) { + result(FlutterError("unimplemented", + "CheckActionCode is not available on this platform yet.", + nullptr)); +} + +void FirebaseAuthPlugin::ConfirmPasswordReset( + const AuthPigeonFirebaseApp& app, const std::string& code, + const std::string& new_password, + std::function reply)> result) { + result(FlutterError( + "unimplemented", + "ConfirmPasswordReset is not available on this platform yet.", nullptr)); +} + +void FirebaseAuthPlugin::CreateUserWithEmailAndPassword( + const AuthPigeonFirebaseApp& app, const std::string& email, + const std::string& password, + std::function reply)> result) { + firebase::auth::Auth* firebaseAuth = GetAuthFromPigeon(app); + + firebase::Future createUserFuture = + firebaseAuth->CreateUserWithEmailAndPassword(email.c_str(), + password.c_str()); + + createUserFuture.OnCompletion( + [result](const firebase::Future& + completed_future) { + // We are probably in a different thread right now. + if (completed_future.error() == 0) { + InternalUserCredential credential = + ParseAuthResult(completed_future.result()); + result(credential); + } else { + result(FirebaseAuthPlugin::ParseError(completed_future)); + } + }); +} + +void FirebaseAuthPlugin::SignInAnonymously( + const AuthPigeonFirebaseApp& app, + std::function reply)> result) { + firebase::auth::Auth* firebaseAuth = GetAuthFromPigeon(app); + + firebase::Future signInFuture = + firebaseAuth->SignInAnonymously(); + + signInFuture.OnCompletion( + [result](const firebase::Future& + completed_future) { + // We are probably in a different thread right now. + if (completed_future.error() == 0) { + InternalUserCredential credential = + ParseAuthResult(completed_future.result()); + result(credential); + } else { + result(FirebaseAuthPlugin::ParseError(completed_future)); + } + }); +} + +// Provider type keys. +std::string const kSignInMethodPassword = "password"; +std::string const kSignInMethodEmailLink = "emailLink"; +std::string const kSignInMethodFacebook = "facebook.com"; +std::string const kSignInMethodGoogle = "google.com"; +std::string const kSignInMethodTwitter = "twitter.com"; +std::string const kSignInMethodGithub = "github.com"; +std::string const kSignInMethodApple = "apple.com"; +std::string const kSignInMethodPhone = "phone"; +std::string const kSignInMethodOAuth = "oauth"; + +// Credential argument keys. +std::string const kArgumentCredential = "credential"; +std::string const kArgumentProviderId = "providerId"; +std::string const kArgumentProviderScope = "scopes"; +std::string const kArgumentProviderCustomParameters = "customParameters"; +std::string const kArgumentSignInMethod = "signInMethod"; +std::string const kArgumentSecret = "secret"; +std::string const kArgumentIdToken = "idToken"; +std::string const kArgumentAccessToken = "accessToken"; +std::string const kArgumentRawNonce = "rawNonce"; +std::string const kArgumentEmail = "email"; +std::string const kArgumentCode = "code"; +std::string const kArgumentNewEmail = "newEmail"; +std::string const kArgumentEmailLink = kSignInMethodEmailLink; +std::string const kArgumentToken = "token"; +std::string const kArgumentVerificationId = "verificationId"; +std::string const kArgumentSmsCode = "smsCode"; +std::string const kArgumentActionCodeSettings = "actionCodeSettings"; + +// Emulating NSDictionary +typedef std::unordered_map Dictionary; + +firebase::auth::Credential getCredentialFromArguments( + flutter::EncodableMap arguments, const AuthPigeonFirebaseApp& app) { + std::string signInMethod = + std::get(arguments[kArgumentSignInMethod]); + + // Password Auth + if (signInMethod == kSignInMethodPassword) { + std::string email = std::get(arguments[kArgumentEmail]); + std::string secret = std::get(arguments[kArgumentSecret]); + return firebase::auth::EmailAuthProvider::GetCredential(email.c_str(), + secret.c_str()); + } + + // Email Link Auth + if (signInMethod == kSignInMethodEmailLink) { + // Firebase C++ SDK doesn't have email link authentication as of my + // knowledge cutoff in September 2021 + std::cout << "Email link authentication is not supported in Firebase C++ " + "SDK as of September 2021.\n"; + return firebase::auth::Credential(); + } + + // Lambda function to extract an optional string from the arguments map. This + // allows us to pass nullptr if no value exists + auto getStringOpt = + [&](const std::string& key) -> std::optional { + auto it = arguments.find(key); + if (it != arguments.end() && + std::holds_alternative(it->second)) { + return std::get(it->second); + } + return std::nullopt; + }; + + std::optional idToken = getStringOpt(kArgumentIdToken); + std::optional accessToken = getStringOpt(kArgumentAccessToken); + + // Facebook Auth + if (signInMethod == kSignInMethodFacebook) { + return firebase::auth::FacebookAuthProvider::GetCredential( + accessToken.value().c_str()); + } + + // Google Auth + if (signInMethod == kSignInMethodGoogle) { + // Both accessToken and idToken arguments can be null. You can use one or + // the other + return firebase::auth::GoogleAuthProvider::GetCredential( + idToken ? idToken.value().c_str() : nullptr, + accessToken ? accessToken.value().c_str() : nullptr); + } + + // Twitter Auth + if (signInMethod == kSignInMethodTwitter) { + std::string secret = std::get(arguments[kArgumentSecret]); + return firebase::auth::TwitterAuthProvider::GetCredential( + idToken.value().c_str(), secret.c_str()); + } + + // GitHub Auth + if (signInMethod == kSignInMethodGithub) { + return firebase::auth::GitHubAuthProvider::GetCredential( + accessToken.value().c_str()); + } + + // OAuth + if (signInMethod == kSignInMethodOAuth) { + std::string providerId = + std::get(arguments[kArgumentProviderId]); + std::optional rawNonce = getStringOpt(kArgumentRawNonce); + // If rawNonce provided use corresponding credential builder + // e.g. AppleID auth through the webView + if (rawNonce) { + return firebase::auth::OAuthProvider::GetCredential( + providerId.c_str(), idToken.value().c_str(), rawNonce.value().c_str(), + accessToken ? accessToken.value().c_str() : nullptr); + } else { + return firebase::auth::OAuthProvider::GetCredential( + providerId.c_str(), idToken.value().c_str(), + accessToken.value().c_str()); + } + } + + // If no known auth method matched + printf( + "Support for an auth provider with identifier '%s' is not implemented.\n", + signInMethod.c_str()); + return firebase::auth::Credential(); +} + +void FirebaseAuthPlugin::SignInWithCredential( + const AuthPigeonFirebaseApp& app, const flutter::EncodableMap& input, + std::function reply)> result) { + firebase::auth::Auth* firebaseAuth = GetAuthFromPigeon(app); + + firebase::Future signInFuture = + firebaseAuth->SignInWithCredential( + getCredentialFromArguments(input, app)); + + signInFuture.OnCompletion( + [result](const firebase::Future& completed_future) { + if (completed_future.error() == 0) { + // TODO: not the right return type from C++ SDK + InternalUserInfo credential = + ParseUserInfo(completed_future.result()); + InternalUserCredential userCredential = InternalUserCredential(); + InternalUserDetails user = + InternalUserDetails(credential, flutter::EncodableList()); + userCredential.set_user(user); + result(userCredential); + } else { + result(FirebaseAuthPlugin::ParseError(completed_future)); + } + }); +} + +void FirebaseAuthPlugin::SignInWithCustomToken( + const AuthPigeonFirebaseApp& app, const std::string& token, + std::function reply)> result) { + firebase::auth::Auth* firebaseAuth = GetAuthFromPigeon(app); + + firebase::Future signInFuture = + firebaseAuth->SignInWithCustomToken(token.c_str()); + + signInFuture.OnCompletion( + [result](const firebase::Future& + completed_future) { + // We are probably in a different thread right now. + if (completed_future.error() == 0) { + InternalUserCredential credential = + ParseAuthResult(completed_future.result()); + result(credential); + } else { + result(FirebaseAuthPlugin::ParseError(completed_future)); + } + }); +} + +void FirebaseAuthPlugin::SignInWithEmailAndPassword( + const AuthPigeonFirebaseApp& app, const std::string& email, + const std::string& password, + std::function reply)> result) { + firebase::auth::Auth* firebaseAuth = GetAuthFromPigeon(app); + + firebase::Future signInFuture = + firebaseAuth->SignInWithEmailAndPassword(email.c_str(), password.c_str()); + + signInFuture.OnCompletion( + [result](const firebase::Future& + completed_future) { + // We are probably in a different thread right now. + if (completed_future.error() == 0) { + InternalUserCredential credential = + ParseAuthResult(completed_future.result()); + result(credential); + } else { + result(FirebaseAuthPlugin::ParseError(completed_future)); + } + }); +} + +void FirebaseAuthPlugin::SignInWithEmailLink( + const AuthPigeonFirebaseApp& app, const std::string& email, + const std::string& email_link, + std::function reply)> result) { + result(FlutterError( + "unimplemented", + "SignInWithEmailLink is not available on this platform yet.", nullptr)); +} + +std::vector TransformEncodableList( + const flutter::EncodableList& encodable_list) { + std::vector transformed_list; + + for (const auto& value : encodable_list) { + if (std::holds_alternative(value)) { + transformed_list.push_back(std::get(value)); + } + } + + return transformed_list; +} + +std::map TransformEncodableMap( + const flutter::EncodableMap& encodable_map) { + std::map transformed_map; + + for (const auto& pair : encodable_map) { + if (std::holds_alternative(pair.first) && + std::holds_alternative(pair.second)) { + transformed_map[std::get(pair.first)] = + std::get(pair.second); + } + } + + return transformed_map; +} + +firebase::auth::FederatedOAuthProvider getProviderFromArguments( + const InternalSignInProvider& sign_in_provider) { + firebase::auth::FederatedOAuthProviderData federatedOAuthProviderData = + firebase::auth::FederatedOAuthProviderData( + sign_in_provider.provider_id().c_str(), + TransformEncodableList(*sign_in_provider.scopes()), + TransformEncodableMap(*sign_in_provider.custom_parameters())); + firebase::auth::FederatedOAuthProvider federatedAuthProvider = + firebase::auth::FederatedOAuthProvider(federatedOAuthProviderData); + + return federatedAuthProvider; +} + +void FirebaseAuthPlugin::SignInWithProvider( + const AuthPigeonFirebaseApp& app, + const InternalSignInProvider& sign_in_provider, + std::function reply)> result) { + firebase::auth::Auth* firebaseAuth = GetAuthFromPigeon(app); + + firebase::Future signInFuture = + firebaseAuth->SignInWithProvider( + &getProviderFromArguments(sign_in_provider)); + + signInFuture.OnCompletion( + [result](const firebase::Future& + completed_future) { + // We are probably in a different thread right now. + if (completed_future.error() == 0) { + InternalUserCredential credential = + ParseAuthResult(completed_future.result()); + result(credential); + } else { + result(FirebaseAuthPlugin::ParseError(completed_future)); + } + }); +} + +void FirebaseAuthPlugin::SignOut( + const AuthPigeonFirebaseApp& app, + std::function reply)> result) { + firebase::auth::Auth* firebaseAuth = GetAuthFromPigeon(app); + + firebaseAuth->SignOut(); + + result(std::nullopt); +} + +flutter::EncodableList TransformStringList( + const std::vector& string_list) { + flutter::EncodableList encodable_list; + + for (const auto& value : string_list) { + encodable_list.push_back(value); + } + + return encodable_list; +} + +void FirebaseAuthPlugin::FetchSignInMethodsForEmail( + const AuthPigeonFirebaseApp& app, const std::string& email, + std::function reply)> result) { + firebase::auth::Auth* firebaseAuth = GetAuthFromPigeon(app); + + firebase::Future signInFuture = + firebaseAuth->FetchProvidersForEmail(email.c_str()); + + signInFuture.OnCompletion( + [result]( + const firebase::Future& + completed_future) { + // We are probably in a different thread right now. + if (completed_future.error() == 0) { + result(TransformStringList(completed_future.result()->providers)); + } else { + result(FirebaseAuthPlugin::ParseError(completed_future)); + } + }); +} + +void FirebaseAuthPlugin::SendPasswordResetEmail( + const AuthPigeonFirebaseApp& app, const std::string& email, + const InternalActionCodeSettings* action_code_settings, + std::function reply)> result) { + firebase::auth::Auth* firebaseAuth = GetAuthFromPigeon(app); + + firebase::Future signInFuture = + firebaseAuth->SendPasswordResetEmail(email.c_str()); + + signInFuture.OnCompletion( + [result](const firebase::Future& completed_future) { + // We are probably in a different thread right now. + if (completed_future.error() == 0) { + result(std::nullopt); + } else { + result(FirebaseAuthPlugin::ParseError(completed_future)); + } + }); +} + +void FirebaseAuthPlugin::SendSignInLinkToEmail( + const AuthPigeonFirebaseApp& app, const std::string& email, + const InternalActionCodeSettings& action_code_settings, + std::function reply)> result) { + result(FlutterError( + "unimplemented", + "SendSignInLinkToEmail is not available on this platform yet.", nullptr)); +} + +void FirebaseAuthPlugin::SetLanguageCode( + const AuthPigeonFirebaseApp& app, const std::string* language_code, + std::function reply)> result) { + firebase::auth::Auth* firebaseAuth = GetAuthFromPigeon(app); + + if (language_code == nullptr) { + firebaseAuth->UseAppLanguage(); + result(firebaseAuth->language_code()); + return; + } + + firebaseAuth->set_language_code(language_code->c_str()); + + result(*language_code); +} + +void FirebaseAuthPlugin::SetSettings( + const AuthPigeonFirebaseApp& app, + const InternalFirebaseAuthSettings& settings, + std::function reply)> result) { + result(FlutterError("unimplemented", + "SetSettings is not available on this platform yet.", + nullptr)); +} + +void FirebaseAuthPlugin::VerifyPasswordResetCode( + const AuthPigeonFirebaseApp& app, const std::string& code, + std::function reply)> result) { + result(FlutterError( + "unimplemented", + "VerifyPasswordResetCode is not available on this platform yet.", + nullptr)); +} + +void FirebaseAuthPlugin::VerifyPhoneNumber( + const AuthPigeonFirebaseApp& app, + const InternalVerifyPhoneNumberRequest& request, + std::function reply)> result) { + result(FlutterError( + "unimplemented", + "VerifyPhoneNumber is not available on this platform yet.", nullptr)); +} + +void FirebaseAuthPlugin::Delete( + const AuthPigeonFirebaseApp& app, + std::function reply)> result) { + firebase::auth::Auth* firebaseAuth = GetAuthFromPigeon(app); + firebase::auth::User user = firebaseAuth->current_user(); + + firebase::Future future = user.Delete(); + + future.OnCompletion([result](const firebase::Future& completed_future) { + // We are probably in a different thread right now. + if (completed_future.error() == 0) { + result(std::nullopt); + } else { + result(FirebaseAuthPlugin::ParseError(completed_future)); + } + }); +} + +void FirebaseAuthPlugin::GetIdToken( + const AuthPigeonFirebaseApp& app, bool force_refresh, + std::function reply)> result) { + firebase::auth::Auth* firebaseAuth = GetAuthFromPigeon(app); + firebase::auth::User user = firebaseAuth->current_user(); + + firebase::Future future = user.GetToken(force_refresh); + + future.OnCompletion( + [result](const firebase::Future& completed_future) { + // We are probably in a different thread right now. + if (completed_future.error() == 0) { + InternalIdTokenResult token_result; + std::string_view sv(*completed_future.result()); + token_result.set_token(sv); + result(token_result); + } else { + result(FirebaseAuthPlugin::ParseError(completed_future)); + } + }); +} + +void FirebaseAuthPlugin::LinkWithCredential( + const AuthPigeonFirebaseApp& app, const flutter::EncodableMap& input, + std::function reply)> result) { + firebase::auth::Auth* firebaseAuth = GetAuthFromPigeon(app); + firebase::auth::User user = firebaseAuth->current_user(); + + firebase::Future future = + user.LinkWithCredential(getCredentialFromArguments(input, app)); + + future.OnCompletion( + [result](const firebase::Future& + completed_future) { + // We are probably in a different thread right now. + if (completed_future.error() == 0) { + InternalUserCredential credential = + ParseAuthResult(completed_future.result()); + result(credential); + } else { + result(FirebaseAuthPlugin::ParseError(completed_future)); + } + }); +} + +void FirebaseAuthPlugin::LinkWithProvider( + const AuthPigeonFirebaseApp& app, + const InternalSignInProvider& sign_in_provider, + std::function reply)> result) { + firebase::auth::Auth* firebaseAuth = GetAuthFromPigeon(app); + firebase::auth::User user = firebaseAuth->current_user(); + + firebase::Future future = + user.LinkWithProvider(&getProviderFromArguments(sign_in_provider)); + + future.OnCompletion( + [result](const firebase::Future& + completed_future) { + // We are probably in a different thread right now. + if (completed_future.error() == 0) { + InternalUserCredential credential = + ParseAuthResult(completed_future.result()); + result(credential); + } else { + result(FirebaseAuthPlugin::ParseError(completed_future)); + } + }); +} + +void FirebaseAuthPlugin::ReauthenticateWithCredential( + const AuthPigeonFirebaseApp& app, const flutter::EncodableMap& input, + std::function reply)> result) { + firebase::auth::Auth* firebaseAuth = GetAuthFromPigeon(app); + firebase::auth::User user = firebaseAuth->current_user(); + + firebase::Future future = + user.Reauthenticate(getCredentialFromArguments(input, app)); + + future.OnCompletion([result](const firebase::Future& completed_future) { + // We are probably in a different thread right now. + if (completed_future.error() == 0) { + // TODO: wrong return type + } else { + result(FirebaseAuthPlugin::ParseError(completed_future)); + } + }); +} + +void FirebaseAuthPlugin::ReauthenticateWithProvider( + const AuthPigeonFirebaseApp& app, + const InternalSignInProvider& sign_in_provider, + std::function reply)> result) { + firebase::auth::Auth* firebaseAuth = GetAuthFromPigeon(app); + firebase::auth::User user = firebaseAuth->current_user(); + + firebase::Future future = + user.ReauthenticateWithProvider( + &getProviderFromArguments(sign_in_provider)); + + future.OnCompletion( + [result](const firebase::Future& + completed_future) { + // We are probably in a different thread right now. + if (completed_future.error() == 0) { + InternalUserCredential credential = + ParseAuthResult(completed_future.result()); + result(credential); + } else { + result(FirebaseAuthPlugin::ParseError(completed_future)); + } + }); +} + +void FirebaseAuthPlugin::Reload( + const AuthPigeonFirebaseApp& app, + std::function reply)> result) { + firebase::auth::Auth* firebaseAuth = GetAuthFromPigeon(app); + firebase::auth::User user = firebaseAuth->current_user(); + + firebase::Future future = user.Reload(); + + future.OnCompletion([result, firebaseAuth]( + const firebase::Future& completed_future) { + // We are probably in a different thread right now. + if (completed_future.error() == 0) { + InternalUserDetails user = ParseUserDetails(firebaseAuth->current_user()); + result(user); + } else { + result(FirebaseAuthPlugin::ParseError(completed_future)); + } + }); +} + +void FirebaseAuthPlugin::SendEmailVerification( + const AuthPigeonFirebaseApp& app, + const InternalActionCodeSettings* action_code_settings, + std::function reply)> result) { + firebase::auth::Auth* firebaseAuth = GetAuthFromPigeon(app); + firebase::auth::User user = firebaseAuth->current_user(); + + firebase::Future future = user.SendEmailVerification(); + + future.OnCompletion([result](const firebase::Future& completed_future) { + // We are probably in a different thread right now. + if (completed_future.error() == 0) { + result(std::nullopt); + } else { + result(FirebaseAuthPlugin::ParseError(completed_future)); + } + }); +} + +void FirebaseAuthPlugin::Unlink( + const AuthPigeonFirebaseApp& app, const std::string& provider_id, + std::function reply)> result) { + firebase::auth::Auth* firebaseAuth = GetAuthFromPigeon(app); + firebase::auth::User user = firebaseAuth->current_user(); + + firebase::Future future = + user.Unlink(provider_id.c_str()); + + future.OnCompletion( + [result](const firebase::Future& + completed_future) { + // We are probably in a different thread right now. + if (completed_future.error() == 0) { + InternalUserCredential credential = + ParseAuthResult(completed_future.result()); + result(credential); + } else { + result(FirebaseAuthPlugin::ParseError(completed_future)); + } + }); +} + +void FirebaseAuthPlugin::UpdateEmail( + const AuthPigeonFirebaseApp& app, const std::string& new_email, + std::function reply)> result) { + firebase::auth::Auth* firebaseAuth = GetAuthFromPigeon(app); + firebase::auth::User user = firebaseAuth->current_user(); + + firebase::Future future = + user.SendEmailVerificationBeforeUpdatingEmail(new_email.c_str()); + + future.OnCompletion([result, firebaseAuth]( + const firebase::Future& completed_future) { + // We are probably in a different thread right now. + if (completed_future.error() == 0) { + InternalUserDetails user = ParseUserDetails(firebaseAuth->current_user()); + result(user); + } else { + result(FirebaseAuthPlugin::ParseError(completed_future)); + } + }); +} + +void FirebaseAuthPlugin::UpdatePassword( + const AuthPigeonFirebaseApp& app, const std::string& new_password, + std::function reply)> result) { + firebase::auth::Auth* firebaseAuth = GetAuthFromPigeon(app); + firebase::auth::User user = firebaseAuth->current_user(); + + firebase::Future future = user.UpdatePassword(new_password.c_str()); + + future.OnCompletion([result, firebaseAuth]( + const firebase::Future& completed_future) { + // We are probably in a different thread right now. + if (completed_future.error() == 0) { + InternalUserDetails user = ParseUserDetails(firebaseAuth->current_user()); + result(user); + } else { + result(FirebaseAuthPlugin::ParseError(completed_future)); + } + }); +} + +firebase::auth::PhoneAuthCredential getPhoneCredentialFromArguments( + flutter::EncodableMap arguments, const AuthPigeonFirebaseApp& app) { + std::string signInMethod = + std::get(arguments[kArgumentSignInMethod]); + + if (signInMethod == kSignInMethodPhone) { + std::string verificationId = + std::get(arguments[kArgumentVerificationId]); + std::string smsCode = std::get(arguments[kArgumentSmsCode]); + + // TODO: we cannot construct a PhoneAuthCredential from the verificationId + return firebase::auth::PhoneAuthCredential::PhoneAuthCredential(); + } + // If no known auth method matched + printf( + "Support for an auth provider with identifier '%s' is not " + "implemented.\n", + signInMethod.c_str()); + throw; +} + +void FirebaseAuthPlugin::UpdatePhoneNumber( + const AuthPigeonFirebaseApp& app, const flutter::EncodableMap& input, + std::function reply)> result) { + firebase::auth::Auth* firebaseAuth = GetAuthFromPigeon(app); + firebase::auth::User user = firebaseAuth->current_user(); + + firebase::Future future = + user.UpdatePhoneNumberCredential( + getPhoneCredentialFromArguments(input, app)); + + future.OnCompletion( + [result](const firebase::Future& completed_future) { + // We are probably in a different thread right now. + if (completed_future.error() == 0) { + InternalUserDetails user = + ParseUserDetails(*completed_future.result()); + result(user); + } else { + result(FirebaseAuthPlugin::ParseError(completed_future)); + } + }); +} + +void FirebaseAuthPlugin::UpdateProfile( + const AuthPigeonFirebaseApp& app, const InternalUserProfile& profile, + std::function reply)> result) { + firebase::auth::Auth* firebaseAuth = GetAuthFromPigeon(app); + firebase::auth::User user = firebaseAuth->current_user(); + + firebase::auth::User::UserProfile userProfile; + + if (profile.display_name_changed()) { + userProfile.display_name = profile.display_name()->c_str(); + } + if (profile.photo_url_changed()) { + userProfile.photo_url = profile.photo_url()->c_str(); + } + + firebase::Future future = user.UpdateUserProfile(userProfile); + + future.OnCompletion([result, firebaseAuth]( + const firebase::Future& completed_future) { + // We are probably in a different thread right now. + if (completed_future.error() == 0) { + InternalUserDetails user = ParseUserDetails(firebaseAuth->current_user()); + result(user); + } else { + result(FirebaseAuthPlugin::ParseError(completed_future)); + } + }); +} + +void FirebaseAuthPlugin::VerifyBeforeUpdateEmail( + const AuthPigeonFirebaseApp& app, const std::string& new_email, + const InternalActionCodeSettings* action_code_settings, + std::function reply)> result) { + firebase::auth::Auth* firebaseAuth = GetAuthFromPigeon(app); + firebase::auth::User user = firebaseAuth->current_user(); + + if (action_code_settings != nullptr) { + printf( + "Firebase C++ SDK does not support using `ActionCodeSettings` for " + "`verifyBeforeUpdateEmail()` API currently"); + } + + firebase::Future future = + user.SendEmailVerificationBeforeUpdatingEmail(new_email.c_str()); + + future.OnCompletion( + [result, firebaseAuth](const firebase::Future& completed_future) { + if (completed_future.error() == 0) { + result(std::nullopt); + } else { + result(FirebaseAuthPlugin::ParseError(completed_future)); + } + }); +} + +void FirebaseAuthPlugin::RevokeTokenWithAuthorizationCode( + const AuthPigeonFirebaseApp& app, const std::string& authorization_code, + std::function reply)> result) { + result(FlutterError( + "unimplemented", + "RevokeTokenWithAuthorizationCode is not available on this platform yet.", + nullptr)); +} + +void FirebaseAuthPlugin::RevokeAccessToken( + const AuthPigeonFirebaseApp& app, const std::string& access_token, + std::function reply)> result) { + result(FlutterError("unimplemented", + "RevokeAccessToken is not available on this platform.", + nullptr)); +} + +void FirebaseAuthPlugin::InitializeRecaptchaConfig( + const AuthPigeonFirebaseApp& app, + std::function reply)> result) { + result(FlutterError( + "unimplemented", + "InitializeRecaptchaConfig is not available on this platform yet.", + nullptr)); +} + +flutter::EncodableMap FirebaseAuthPlugin::GetPluginConstantsForFirebaseApp( + const firebase::App& app) { + flutter::EncodableMap constants; + + Auth* auth = Auth::GetAuth(const_cast(&app)); + firebase::auth::User user = auth->current_user(); + + if (user.is_valid()) { + InternalUserDetails userDetails = ParseUserDetails(user); + flutter::EncodableList userDetailsList; + userDetailsList.push_back( + flutter::EncodableValue(userDetails.user_info().ToEncodableList())); + userDetailsList.push_back( + flutter::EncodableValue(userDetails.provider_data())); + constants[flutter::EncodableValue("APP_CURRENT_USER")] = + flutter::EncodableValue(userDetailsList); + } + + std::string lang = auth->language_code(); + if (!lang.empty()) { + constants[flutter::EncodableValue("APP_LANGUAGE_CODE")] = + flutter::EncodableValue(lang); + } + + return constants; +} + +void FirebaseAuthPlugin::DidReinitializeFirebaseCore() { + // No-op for now. Could be used to reset cached auth instances. +} + +} // namespace firebase_auth_windows diff --git a/mih_ui/android/build/macos/SourcePackages/firebase_auth-6.5.4/windows/firebase_auth_plugin.h b/mih_ui/android/build/macos/SourcePackages/firebase_auth-6.5.4/windows/firebase_auth_plugin.h new file mode 100644 index 00000000..575e201f --- /dev/null +++ b/mih_ui/android/build/macos/SourcePackages/firebase_auth-6.5.4/windows/firebase_auth_plugin.h @@ -0,0 +1,218 @@ +/* + * Copyright 2023, the Chromium project authors. Please see the AUTHORS file + * for details. All rights reserved. Use of this source code is governed by a + * BSD-style license that can be found in the LICENSE file. + */ + +#ifndef FLUTTER_PLUGIN_FIREBASE_AUTH_PLUGIN_H_ +#define FLUTTER_PLUGIN_FIREBASE_AUTH_PLUGIN_H_ + +#include +#include + +#include + +#include "firebase/app.h" +#include "firebase/auth.h" +#include "firebase/auth/types.h" +#include "firebase/future.h" +#include "firebase_core/flutter_firebase_plugin.h" +#include "messages.g.h" + +using firebase::auth::AuthError; + +namespace firebase_auth_windows { + +class FirebaseAuthPlugin : public flutter::Plugin, + public FirebaseAuthHostApi, + public FirebaseAuthUserHostApi, + public FlutterFirebasePlugin { + public: + static void RegisterWithRegistrar(flutter::PluginRegistrarWindows* registrar); + + FirebaseAuthPlugin(); + + virtual ~FirebaseAuthPlugin(); + + // Disallow copy and assign. + FirebaseAuthPlugin(const FirebaseAuthPlugin&) = delete; + FirebaseAuthPlugin& operator=(const FirebaseAuthPlugin&) = delete; + + // Parser functions + static std::string GetAuthErrorCode(AuthError authError); + static FlutterError ParseError(const firebase::FutureBase& future); + + static InternalUserDetails ParseUserDetails(const firebase::auth::User user); + static InternalAdditionalUserInfo ParseAdditionalUserInfo( + const firebase::auth::AdditionalUserInfo user); + static flutter::EncodableMap ConvertToEncodableMap( + const std::map& originalMap); + static flutter::EncodableValue ConvertToEncodableValue( + const firebase::Variant& variant); + static InternalUserInfo ParseUserInfo(const firebase::auth::User* user); + static flutter::EncodableList ParseProviderData( + const firebase::auth::User* user); + static flutter::EncodableValue ParseUserInfoToMap( + firebase::auth::UserInfoInterface* userInfo); + + // FirebaseAuthHostApi methods. + virtual void RegisterIdTokenListener( + const AuthPigeonFirebaseApp& app, + std::function reply)> result) override; + virtual void RegisterAuthStateListener( + const AuthPigeonFirebaseApp& app, + std::function reply)> result) override; + virtual void UseEmulator( + const AuthPigeonFirebaseApp& app, const std::string& host, int64_t port, + std::function reply)> result) override; + virtual void ApplyActionCode( + const AuthPigeonFirebaseApp& app, const std::string& code, + std::function reply)> result) override; + virtual void CheckActionCode( + const AuthPigeonFirebaseApp& app, const std::string& code, + std::function reply)> result) + override; + virtual void ConfirmPasswordReset( + const AuthPigeonFirebaseApp& app, const std::string& code, + const std::string& new_password, + std::function reply)> result) override; + virtual void CreateUserWithEmailAndPassword( + const AuthPigeonFirebaseApp& app, const std::string& email, + const std::string& password, + std::function reply)> result) + override; + virtual void SignInAnonymously( + const AuthPigeonFirebaseApp& app, + std::function reply)> result) + override; + virtual void SignInWithCredential( + const AuthPigeonFirebaseApp& app, const flutter::EncodableMap& input, + std::function reply)> result) + override; + virtual void SignInWithCustomToken( + const AuthPigeonFirebaseApp& app, const std::string& token, + std::function reply)> result) + override; + virtual void SignInWithEmailAndPassword( + const AuthPigeonFirebaseApp& app, const std::string& email, + const std::string& password, + std::function reply)> result) + override; + virtual void SignInWithEmailLink( + const AuthPigeonFirebaseApp& app, const std::string& email, + const std::string& email_link, + std::function reply)> result) + override; + virtual void SignInWithProvider( + const AuthPigeonFirebaseApp& app, + const InternalSignInProvider& sign_in_provider, + std::function reply)> result) + override; + virtual void SignOut( + const AuthPigeonFirebaseApp& app, + std::function reply)> result) override; + virtual void FetchSignInMethodsForEmail( + const AuthPigeonFirebaseApp& app, const std::string& email, + std::function reply)> result) + override; + virtual void SendPasswordResetEmail( + const AuthPigeonFirebaseApp& app, const std::string& email, + const InternalActionCodeSettings* action_code_settings, + std::function reply)> result) override; + virtual void SendSignInLinkToEmail( + const AuthPigeonFirebaseApp& app, const std::string& email, + const InternalActionCodeSettings& action_code_settings, + std::function reply)> result) override; + virtual void SetLanguageCode( + const AuthPigeonFirebaseApp& app, const std::string* language_code, + std::function reply)> result) override; + virtual void SetSettings( + const AuthPigeonFirebaseApp& app, + const InternalFirebaseAuthSettings& settings, + std::function reply)> result) override; + virtual void VerifyPasswordResetCode( + const AuthPigeonFirebaseApp& app, const std::string& code, + std::function reply)> result) override; + virtual void VerifyPhoneNumber( + const AuthPigeonFirebaseApp& app, + const InternalVerifyPhoneNumberRequest& request, + std::function reply)> result) override; + + // FirebaseAuthUserHostApi methods. + virtual void Delete( + const AuthPigeonFirebaseApp& app, + std::function reply)> result) override; + virtual void GetIdToken( + const AuthPigeonFirebaseApp& app, bool force_refresh, + std::function reply)> result) + override; + virtual void LinkWithCredential( + const AuthPigeonFirebaseApp& app, const flutter::EncodableMap& input, + std::function reply)> result) + override; + virtual void LinkWithProvider( + const AuthPigeonFirebaseApp& app, + const InternalSignInProvider& sign_in_provider, + std::function reply)> result) + override; + virtual void ReauthenticateWithCredential( + const AuthPigeonFirebaseApp& app, const flutter::EncodableMap& input, + std::function reply)> result) + override; + virtual void ReauthenticateWithProvider( + const AuthPigeonFirebaseApp& app, + const InternalSignInProvider& sign_in_provider, + std::function reply)> result) + override; + virtual void Reload( + const AuthPigeonFirebaseApp& app, + std::function reply)> result) override; + virtual void SendEmailVerification( + const AuthPigeonFirebaseApp& app, + const InternalActionCodeSettings* action_code_settings, + std::function reply)> result) override; + virtual void Unlink(const AuthPigeonFirebaseApp& app, + const std::string& provider_id, + std::function reply)> + result) override; + virtual void UpdateEmail( + const AuthPigeonFirebaseApp& app, const std::string& new_email, + std::function reply)> result) override; + virtual void UpdatePassword( + const AuthPigeonFirebaseApp& app, const std::string& new_password, + std::function reply)> result) override; + virtual void UpdatePhoneNumber( + const AuthPigeonFirebaseApp& app, const flutter::EncodableMap& input, + std::function reply)> result) override; + virtual void UpdateProfile( + const AuthPigeonFirebaseApp& app, const InternalUserProfile& profile, + std::function reply)> result) override; + virtual void VerifyBeforeUpdateEmail( + const AuthPigeonFirebaseApp& app, const std::string& new_email, + const InternalActionCodeSettings* action_code_settings, + std::function reply)> result) override; + + virtual void RevokeTokenWithAuthorizationCode( + const AuthPigeonFirebaseApp& app, const std::string& authorization_code, + std::function reply)> result) override; + + virtual void RevokeAccessToken( + const AuthPigeonFirebaseApp& app, const std::string& access_token, + std::function reply)> result) override; + + virtual void InitializeRecaptchaConfig( + const AuthPigeonFirebaseApp& app, + std::function reply)> result) override; + + // FlutterFirebasePlugin methods. + flutter::EncodableMap GetPluginConstantsForFirebaseApp( + const firebase::App& app) override; + void DidReinitializeFirebaseCore() override; + + private: + static flutter::BinaryMessenger* binaryMessenger; +}; + +} // namespace firebase_auth_windows + +#endif // FLUTTER_PLUGIN_FIREBASE_AUTH_PLUGIN_H_ diff --git a/mih_ui/android/build/macos/SourcePackages/firebase_auth-6.5.4/windows/firebase_auth_plugin_c_api.cpp b/mih_ui/android/build/macos/SourcePackages/firebase_auth-6.5.4/windows/firebase_auth_plugin_c_api.cpp new file mode 100644 index 00000000..03d93038 --- /dev/null +++ b/mih_ui/android/build/macos/SourcePackages/firebase_auth-6.5.4/windows/firebase_auth_plugin_c_api.cpp @@ -0,0 +1,16 @@ +// Copyright 2023, the Chromium project authors. Please see the AUTHORS file +// for details. All rights reserved. Use of this source code is governed by a +// BSD-style license that can be found in the LICENSE file. + +#include "include/firebase_auth/firebase_auth_plugin_c_api.h" + +#include + +#include "firebase_auth_plugin.h" + +void FirebaseAuthPluginCApiRegisterWithRegistrar( + FlutterDesktopPluginRegistrarRef registrar) { + firebase_auth_windows::FirebaseAuthPlugin::RegisterWithRegistrar( + flutter::PluginRegistrarManager::GetInstance() + ->GetRegistrar(registrar)); +} diff --git a/mih_ui/android/build/macos/SourcePackages/firebase_auth-6.5.4/windows/include/firebase_auth/firebase_auth_plugin_c_api.h b/mih_ui/android/build/macos/SourcePackages/firebase_auth-6.5.4/windows/include/firebase_auth/firebase_auth_plugin_c_api.h new file mode 100644 index 00000000..1c73a633 --- /dev/null +++ b/mih_ui/android/build/macos/SourcePackages/firebase_auth-6.5.4/windows/include/firebase_auth/firebase_auth_plugin_c_api.h @@ -0,0 +1,29 @@ +/* + * Copyright 2023, the Chromium project authors. Please see the AUTHORS file + * for details. All rights reserved. Use of this source code is governed by a + * BSD-style license that can be found in the LICENSE file. + */ + +#ifndef FLUTTER_PLUGIN_FIREBASE_AUTH_PLUGIN_C_API_H_ +#define FLUTTER_PLUGIN_FIREBASE_AUTH_PLUGIN_C_API_H_ + +#include + +#ifdef FLUTTER_PLUGIN_IMPL +#define FLUTTER_PLUGIN_EXPORT __declspec(dllexport) +#else +#define FLUTTER_PLUGIN_EXPORT __declspec(dllimport) +#endif + +#if defined(__cplusplus) +extern "C" { +#endif + +FLUTTER_PLUGIN_EXPORT void FirebaseAuthPluginCApiRegisterWithRegistrar( + FlutterDesktopPluginRegistrarRef registrar); + +#if defined(__cplusplus) +} // extern "C" +#endif + +#endif // FLUTTER_PLUGIN_FIREBASE_AUTH_PLUGIN_C_API_H_ diff --git a/mih_ui/android/build/macos/SourcePackages/firebase_auth-6.5.4/windows/messages.g.cpp b/mih_ui/android/build/macos/SourcePackages/firebase_auth-6.5.4/windows/messages.g.cpp new file mode 100644 index 00000000..ea2200e6 --- /dev/null +++ b/mih_ui/android/build/macos/SourcePackages/firebase_auth-6.5.4/windows/messages.g.cpp @@ -0,0 +1,5562 @@ +// Copyright 2023, the Chromium project authors. Please see the AUTHORS file +// for details. All rights reserved. Use of this source code is governed by a +// BSD-style license that can be found in the LICENSE file. +// Autogenerated from Pigeon (v26.3.4), do not edit directly. +// See also: https://pub.dev/packages/pigeon + +#undef _HAS_EXCEPTIONS + +#include "messages.g.h" + +#include +#include +#include +#include + +#include +#include +#include +#include +#include + +namespace firebase_auth_windows { +using ::flutter::BasicMessageChannel; +using ::flutter::CustomEncodableValue; +using ::flutter::EncodableList; +using ::flutter::EncodableMap; +using ::flutter::EncodableValue; + +FlutterError CreateConnectionError(const std::string channel_name) { + return FlutterError( + "channel-error", + "Unable to establish connection on channel: '" + channel_name + "'.", + EncodableValue("")); +} + +namespace { +template +bool PigeonInternalDeepEquals(const T& a, const T& b); + +bool PigeonInternalDeepEquals(const double& a, const double& b); + +template +bool PigeonInternalDeepEquals(const std::vector& a, const std::vector& b); + +template +bool PigeonInternalDeepEquals(const std::map& a, const std::map& b); + +template +bool PigeonInternalDeepEquals(const std::optional& a, + const std::optional& b); + +template +bool PigeonInternalDeepEquals(const std::unique_ptr& a, + const std::unique_ptr& b); + +bool PigeonInternalDeepEquals(const ::flutter::EncodableValue& a, + const ::flutter::EncodableValue& b); + +template +bool PigeonInternalDeepEquals(const T& a, const T& b) { + return a == b; +} + +template +bool PigeonInternalDeepEquals(const std::vector& a, + const std::vector& b) { + if (a.size() != b.size()) { + return false; + } + for (size_t i = 0; i < a.size(); ++i) { + if (!PigeonInternalDeepEquals(a[i], b[i])) { + return false; + } + } + return true; +} + +template +bool PigeonInternalDeepEquals(const std::map& a, + const std::map& b) { + if (a.size() != b.size()) { + return false; + } + for (const auto& kv : a) { + bool found = false; + for (const auto& b_kv : b) { + if (PigeonInternalDeepEquals(kv.first, b_kv.first)) { + if (PigeonInternalDeepEquals(kv.second, b_kv.second)) { + found = true; + break; + } else { + return false; + } + } + } + if (!found) { + return false; + } + } + return true; +} + +bool PigeonInternalDeepEquals(const double& a, const double& b) { + // Normalize -0.0 to 0.0 and handle NaN equality. + return (a == b) || (std::isnan(a) && std::isnan(b)); +} + +template +bool PigeonInternalDeepEquals(const std::optional& a, + const std::optional& b) { + if (!a && !b) { + return true; + } + if (!a || !b) { + return false; + } + return PigeonInternalDeepEquals(*a, *b); +} + +template +bool PigeonInternalDeepEquals(const std::unique_ptr& a, + const std::unique_ptr& b) { + if (a.get() == b.get()) { + return true; + } + if (!a || !b) { + return false; + } + return PigeonInternalDeepEquals(*a, *b); +} + +bool PigeonInternalDeepEquals(const ::flutter::EncodableValue& a, + const ::flutter::EncodableValue& b) { + if (a.index() != b.index()) { + return false; + } + if (const double* da = std::get_if(&a)) { + return PigeonInternalDeepEquals(*da, std::get(b)); + } else if (const ::flutter::EncodableList* la = + std::get_if<::flutter::EncodableList>(&a)) { + return PigeonInternalDeepEquals(*la, std::get<::flutter::EncodableList>(b)); + } else if (const ::flutter::EncodableMap* ma = + std::get_if<::flutter::EncodableMap>(&a)) { + return PigeonInternalDeepEquals(*ma, std::get<::flutter::EncodableMap>(b)); + } + return a == b; +} + +template +size_t PigeonInternalDeepHash(const T& v); + +size_t PigeonInternalDeepHash(const double& v); + +template +size_t PigeonInternalDeepHash(const std::vector& v); + +template +size_t PigeonInternalDeepHash(const std::map& v); + +template +size_t PigeonInternalDeepHash(const std::optional& v); + +template +size_t PigeonInternalDeepHash(const std::unique_ptr& v); + +size_t PigeonInternalDeepHash(const ::flutter::EncodableValue& v); + +template +size_t PigeonInternalDeepHash(const T& v) { + return std::hash()(v); +} + +template +size_t PigeonInternalDeepHash(const std::vector& v) { + size_t result = 1; + for (const auto& item : v) { + result = result * 31 + PigeonInternalDeepHash(item); + } + return result; +} + +template +size_t PigeonInternalDeepHash(const std::map& v) { + size_t result = 0; + for (const auto& kv : v) { + result += ((PigeonInternalDeepHash(kv.first) * 31) ^ + PigeonInternalDeepHash(kv.second)); + } + return result; +} + +size_t PigeonInternalDeepHash(const double& v) { + if (std::isnan(v)) { + // Normalize NaN to a consistent hash. + return std::hash()(std::numeric_limits::quiet_NaN()); + } + if (v == 0.0) { + // Normalize -0.0 to 0.0 so they have the same hash code. + return std::hash()(0.0); + } + return std::hash()(v); +} + +template +size_t PigeonInternalDeepHash(const std::optional& v) { + return v ? PigeonInternalDeepHash(*v) : 0; +} + +template +size_t PigeonInternalDeepHash(const std::unique_ptr& v) { + return v ? PigeonInternalDeepHash(*v) : 0; +} + +size_t PigeonInternalDeepHash(const ::flutter::EncodableValue& v) { + size_t result = v.index(); + if (const double* dv = std::get_if(&v)) { + result = result * 31 + PigeonInternalDeepHash(*dv); + } else if (const ::flutter::EncodableList* lv = + std::get_if<::flutter::EncodableList>(&v)) { + result = result * 31 + PigeonInternalDeepHash(*lv); + } else if (const ::flutter::EncodableMap* mv = + std::get_if<::flutter::EncodableMap>(&v)) { + result = result * 31 + PigeonInternalDeepHash(*mv); + } else { + std::visit( + [&result](const auto& val) { + using T = std::decay_t; + if constexpr (!std::is_same_v && + !std::is_same_v && + !std::is_same_v && + !std::is_same_v && + !std::is_same_v) { + result = result * 31 + PigeonInternalDeepHash(val); + } + }, + v); + } + return result; +} + +} // namespace +// InternalMultiFactorSession + +InternalMultiFactorSession::InternalMultiFactorSession(const std::string& id) + : id_(id) {} + +const std::string& InternalMultiFactorSession::id() const { return id_; } + +void InternalMultiFactorSession::set_id(std::string_view value_arg) { + id_ = value_arg; +} + +EncodableList InternalMultiFactorSession::ToEncodableList() const { + EncodableList list; + list.reserve(1); + list.push_back(EncodableValue(id_)); + return list; +} + +InternalMultiFactorSession InternalMultiFactorSession::FromEncodableList( + const EncodableList& list) { + InternalMultiFactorSession decoded(std::get(list[0])); + return decoded; +} + +bool InternalMultiFactorSession::operator==( + const InternalMultiFactorSession& other) const { + return PigeonInternalDeepEquals(id_, other.id_); +} + +bool InternalMultiFactorSession::operator!=( + const InternalMultiFactorSession& other) const { + return !(*this == other); +} + +size_t InternalMultiFactorSession::Hash() const { + size_t result = 1; + result = result * 31 + PigeonInternalDeepHash(id_); + return result; +} + +size_t PigeonInternalDeepHash(const InternalMultiFactorSession& v) { + return v.Hash(); +} + +// InternalPhoneMultiFactorAssertion + +InternalPhoneMultiFactorAssertion::InternalPhoneMultiFactorAssertion( + const std::string& verification_id, const std::string& verification_code) + : verification_id_(verification_id), + verification_code_(verification_code) {} + +const std::string& InternalPhoneMultiFactorAssertion::verification_id() const { + return verification_id_; +} + +void InternalPhoneMultiFactorAssertion::set_verification_id( + std::string_view value_arg) { + verification_id_ = value_arg; +} + +const std::string& InternalPhoneMultiFactorAssertion::verification_code() + const { + return verification_code_; +} + +void InternalPhoneMultiFactorAssertion::set_verification_code( + std::string_view value_arg) { + verification_code_ = value_arg; +} + +EncodableList InternalPhoneMultiFactorAssertion::ToEncodableList() const { + EncodableList list; + list.reserve(2); + list.push_back(EncodableValue(verification_id_)); + list.push_back(EncodableValue(verification_code_)); + return list; +} + +InternalPhoneMultiFactorAssertion +InternalPhoneMultiFactorAssertion::FromEncodableList( + const EncodableList& list) { + InternalPhoneMultiFactorAssertion decoded(std::get(list[0]), + std::get(list[1])); + return decoded; +} + +bool InternalPhoneMultiFactorAssertion::operator==( + const InternalPhoneMultiFactorAssertion& other) const { + return PigeonInternalDeepEquals(verification_id_, other.verification_id_) && + PigeonInternalDeepEquals(verification_code_, other.verification_code_); +} + +bool InternalPhoneMultiFactorAssertion::operator!=( + const InternalPhoneMultiFactorAssertion& other) const { + return !(*this == other); +} + +size_t InternalPhoneMultiFactorAssertion::Hash() const { + size_t result = 1; + result = result * 31 + PigeonInternalDeepHash(verification_id_); + result = result * 31 + PigeonInternalDeepHash(verification_code_); + return result; +} + +size_t PigeonInternalDeepHash(const InternalPhoneMultiFactorAssertion& v) { + return v.Hash(); +} + +// InternalMultiFactorInfo + +InternalMultiFactorInfo::InternalMultiFactorInfo(double enrollment_timestamp, + const std::string& uid) + : enrollment_timestamp_(enrollment_timestamp), uid_(uid) {} + +InternalMultiFactorInfo::InternalMultiFactorInfo( + const std::string* display_name, double enrollment_timestamp, + const std::string* factor_id, const std::string& uid, + const std::string* phone_number) + : display_name_(display_name ? std::optional(*display_name) + : std::nullopt), + enrollment_timestamp_(enrollment_timestamp), + factor_id_(factor_id ? std::optional(*factor_id) + : std::nullopt), + uid_(uid), + phone_number_(phone_number ? std::optional(*phone_number) + : std::nullopt) {} + +const std::string* InternalMultiFactorInfo::display_name() const { + return display_name_ ? &(*display_name_) : nullptr; +} + +void InternalMultiFactorInfo::set_display_name( + const std::string_view* value_arg) { + display_name_ = + value_arg ? std::optional(*value_arg) : std::nullopt; +} + +void InternalMultiFactorInfo::set_display_name(std::string_view value_arg) { + display_name_ = value_arg; +} + +double InternalMultiFactorInfo::enrollment_timestamp() const { + return enrollment_timestamp_; +} + +void InternalMultiFactorInfo::set_enrollment_timestamp(double value_arg) { + enrollment_timestamp_ = value_arg; +} + +const std::string* InternalMultiFactorInfo::factor_id() const { + return factor_id_ ? &(*factor_id_) : nullptr; +} + +void InternalMultiFactorInfo::set_factor_id(const std::string_view* value_arg) { + factor_id_ = + value_arg ? std::optional(*value_arg) : std::nullopt; +} + +void InternalMultiFactorInfo::set_factor_id(std::string_view value_arg) { + factor_id_ = value_arg; +} + +const std::string& InternalMultiFactorInfo::uid() const { return uid_; } + +void InternalMultiFactorInfo::set_uid(std::string_view value_arg) { + uid_ = value_arg; +} + +const std::string* InternalMultiFactorInfo::phone_number() const { + return phone_number_ ? &(*phone_number_) : nullptr; +} + +void InternalMultiFactorInfo::set_phone_number( + const std::string_view* value_arg) { + phone_number_ = + value_arg ? std::optional(*value_arg) : std::nullopt; +} + +void InternalMultiFactorInfo::set_phone_number(std::string_view value_arg) { + phone_number_ = value_arg; +} + +EncodableList InternalMultiFactorInfo::ToEncodableList() const { + EncodableList list; + list.reserve(5); + list.push_back(display_name_ ? EncodableValue(*display_name_) + : EncodableValue()); + list.push_back(EncodableValue(enrollment_timestamp_)); + list.push_back(factor_id_ ? EncodableValue(*factor_id_) : EncodableValue()); + list.push_back(EncodableValue(uid_)); + list.push_back(phone_number_ ? EncodableValue(*phone_number_) + : EncodableValue()); + return list; +} + +InternalMultiFactorInfo InternalMultiFactorInfo::FromEncodableList( + const EncodableList& list) { + InternalMultiFactorInfo decoded(std::get(list[1]), + std::get(list[3])); + auto& encodable_display_name = list[0]; + if (!encodable_display_name.IsNull()) { + decoded.set_display_name(std::get(encodable_display_name)); + } + auto& encodable_factor_id = list[2]; + if (!encodable_factor_id.IsNull()) { + decoded.set_factor_id(std::get(encodable_factor_id)); + } + auto& encodable_phone_number = list[4]; + if (!encodable_phone_number.IsNull()) { + decoded.set_phone_number(std::get(encodable_phone_number)); + } + return decoded; +} + +bool InternalMultiFactorInfo::operator==( + const InternalMultiFactorInfo& other) const { + return PigeonInternalDeepEquals(display_name_, other.display_name_) && + PigeonInternalDeepEquals(enrollment_timestamp_, + other.enrollment_timestamp_) && + PigeonInternalDeepEquals(factor_id_, other.factor_id_) && + PigeonInternalDeepEquals(uid_, other.uid_) && + PigeonInternalDeepEquals(phone_number_, other.phone_number_); +} + +bool InternalMultiFactorInfo::operator!=( + const InternalMultiFactorInfo& other) const { + return !(*this == other); +} + +size_t InternalMultiFactorInfo::Hash() const { + size_t result = 1; + result = result * 31 + PigeonInternalDeepHash(display_name_); + result = result * 31 + PigeonInternalDeepHash(enrollment_timestamp_); + result = result * 31 + PigeonInternalDeepHash(factor_id_); + result = result * 31 + PigeonInternalDeepHash(uid_); + result = result * 31 + PigeonInternalDeepHash(phone_number_); + return result; +} + +size_t PigeonInternalDeepHash(const InternalMultiFactorInfo& v) { + return v.Hash(); +} + +// AuthPigeonFirebaseApp + +AuthPigeonFirebaseApp::AuthPigeonFirebaseApp(const std::string& app_name) + : app_name_(app_name) {} + +AuthPigeonFirebaseApp::AuthPigeonFirebaseApp( + const std::string& app_name, const std::string* tenant_id, + const std::string* custom_auth_domain) + : app_name_(app_name), + tenant_id_(tenant_id ? std::optional(*tenant_id) + : std::nullopt), + custom_auth_domain_(custom_auth_domain + ? std::optional(*custom_auth_domain) + : std::nullopt) {} + +const std::string& AuthPigeonFirebaseApp::app_name() const { return app_name_; } + +void AuthPigeonFirebaseApp::set_app_name(std::string_view value_arg) { + app_name_ = value_arg; +} + +const std::string* AuthPigeonFirebaseApp::tenant_id() const { + return tenant_id_ ? &(*tenant_id_) : nullptr; +} + +void AuthPigeonFirebaseApp::set_tenant_id(const std::string_view* value_arg) { + tenant_id_ = + value_arg ? std::optional(*value_arg) : std::nullopt; +} + +void AuthPigeonFirebaseApp::set_tenant_id(std::string_view value_arg) { + tenant_id_ = value_arg; +} + +const std::string* AuthPigeonFirebaseApp::custom_auth_domain() const { + return custom_auth_domain_ ? &(*custom_auth_domain_) : nullptr; +} + +void AuthPigeonFirebaseApp::set_custom_auth_domain( + const std::string_view* value_arg) { + custom_auth_domain_ = + value_arg ? std::optional(*value_arg) : std::nullopt; +} + +void AuthPigeonFirebaseApp::set_custom_auth_domain(std::string_view value_arg) { + custom_auth_domain_ = value_arg; +} + +EncodableList AuthPigeonFirebaseApp::ToEncodableList() const { + EncodableList list; + list.reserve(3); + list.push_back(EncodableValue(app_name_)); + list.push_back(tenant_id_ ? EncodableValue(*tenant_id_) : EncodableValue()); + list.push_back(custom_auth_domain_ ? EncodableValue(*custom_auth_domain_) + : EncodableValue()); + return list; +} + +AuthPigeonFirebaseApp AuthPigeonFirebaseApp::FromEncodableList( + const EncodableList& list) { + AuthPigeonFirebaseApp decoded(std::get(list[0])); + auto& encodable_tenant_id = list[1]; + if (!encodable_tenant_id.IsNull()) { + decoded.set_tenant_id(std::get(encodable_tenant_id)); + } + auto& encodable_custom_auth_domain = list[2]; + if (!encodable_custom_auth_domain.IsNull()) { + decoded.set_custom_auth_domain( + std::get(encodable_custom_auth_domain)); + } + return decoded; +} + +bool AuthPigeonFirebaseApp::operator==( + const AuthPigeonFirebaseApp& other) const { + return PigeonInternalDeepEquals(app_name_, other.app_name_) && + PigeonInternalDeepEquals(tenant_id_, other.tenant_id_) && + PigeonInternalDeepEquals(custom_auth_domain_, + other.custom_auth_domain_); +} + +bool AuthPigeonFirebaseApp::operator!=( + const AuthPigeonFirebaseApp& other) const { + return !(*this == other); +} + +size_t AuthPigeonFirebaseApp::Hash() const { + size_t result = 1; + result = result * 31 + PigeonInternalDeepHash(app_name_); + result = result * 31 + PigeonInternalDeepHash(tenant_id_); + result = result * 31 + PigeonInternalDeepHash(custom_auth_domain_); + return result; +} + +size_t PigeonInternalDeepHash(const AuthPigeonFirebaseApp& v) { + return v.Hash(); +} + +// InternalActionCodeInfoData + +InternalActionCodeInfoData::InternalActionCodeInfoData() {} + +InternalActionCodeInfoData::InternalActionCodeInfoData( + const std::string* email, const std::string* previous_email) + : email_(email ? std::optional(*email) : std::nullopt), + previous_email_(previous_email + ? std::optional(*previous_email) + : std::nullopt) {} + +const std::string* InternalActionCodeInfoData::email() const { + return email_ ? &(*email_) : nullptr; +} + +void InternalActionCodeInfoData::set_email(const std::string_view* value_arg) { + email_ = value_arg ? std::optional(*value_arg) : std::nullopt; +} + +void InternalActionCodeInfoData::set_email(std::string_view value_arg) { + email_ = value_arg; +} + +const std::string* InternalActionCodeInfoData::previous_email() const { + return previous_email_ ? &(*previous_email_) : nullptr; +} + +void InternalActionCodeInfoData::set_previous_email( + const std::string_view* value_arg) { + previous_email_ = + value_arg ? std::optional(*value_arg) : std::nullopt; +} + +void InternalActionCodeInfoData::set_previous_email( + std::string_view value_arg) { + previous_email_ = value_arg; +} + +EncodableList InternalActionCodeInfoData::ToEncodableList() const { + EncodableList list; + list.reserve(2); + list.push_back(email_ ? EncodableValue(*email_) : EncodableValue()); + list.push_back(previous_email_ ? EncodableValue(*previous_email_) + : EncodableValue()); + return list; +} + +InternalActionCodeInfoData InternalActionCodeInfoData::FromEncodableList( + const EncodableList& list) { + InternalActionCodeInfoData decoded; + auto& encodable_email = list[0]; + if (!encodable_email.IsNull()) { + decoded.set_email(std::get(encodable_email)); + } + auto& encodable_previous_email = list[1]; + if (!encodable_previous_email.IsNull()) { + decoded.set_previous_email(std::get(encodable_previous_email)); + } + return decoded; +} + +bool InternalActionCodeInfoData::operator==( + const InternalActionCodeInfoData& other) const { + return PigeonInternalDeepEquals(email_, other.email_) && + PigeonInternalDeepEquals(previous_email_, other.previous_email_); +} + +bool InternalActionCodeInfoData::operator!=( + const InternalActionCodeInfoData& other) const { + return !(*this == other); +} + +size_t InternalActionCodeInfoData::Hash() const { + size_t result = 1; + result = result * 31 + PigeonInternalDeepHash(email_); + result = result * 31 + PigeonInternalDeepHash(previous_email_); + return result; +} + +size_t PigeonInternalDeepHash(const InternalActionCodeInfoData& v) { + return v.Hash(); +} + +// InternalActionCodeInfo + +InternalActionCodeInfo::InternalActionCodeInfo( + const ActionCodeInfoOperation& operation, + const InternalActionCodeInfoData& data) + : operation_(operation), + data_(std::make_unique(data)) {} + +InternalActionCodeInfo::InternalActionCodeInfo( + const InternalActionCodeInfo& other) + : operation_(other.operation_), + data_(std::make_unique(*other.data_)) {} + +InternalActionCodeInfo& InternalActionCodeInfo::operator=( + const InternalActionCodeInfo& other) { + operation_ = other.operation_; + data_ = std::make_unique(*other.data_); + return *this; +} + +const ActionCodeInfoOperation& InternalActionCodeInfo::operation() const { + return operation_; +} + +void InternalActionCodeInfo::set_operation( + const ActionCodeInfoOperation& value_arg) { + operation_ = value_arg; +} + +const InternalActionCodeInfoData& InternalActionCodeInfo::data() const { + return *data_; +} + +void InternalActionCodeInfo::set_data( + const InternalActionCodeInfoData& value_arg) { + data_ = std::make_unique(value_arg); +} + +EncodableList InternalActionCodeInfo::ToEncodableList() const { + EncodableList list; + list.reserve(2); + list.push_back(CustomEncodableValue(operation_)); + list.push_back(CustomEncodableValue(*data_)); + return list; +} + +InternalActionCodeInfo InternalActionCodeInfo::FromEncodableList( + const EncodableList& list) { + InternalActionCodeInfo decoded( + std::any_cast( + std::get(list[0])), + std::any_cast( + std::get(list[1]))); + return decoded; +} + +bool InternalActionCodeInfo::operator==( + const InternalActionCodeInfo& other) const { + return PigeonInternalDeepEquals(operation_, other.operation_) && + PigeonInternalDeepEquals(data_, other.data_); +} + +bool InternalActionCodeInfo::operator!=( + const InternalActionCodeInfo& other) const { + return !(*this == other); +} + +size_t InternalActionCodeInfo::Hash() const { + size_t result = 1; + result = result * 31 + PigeonInternalDeepHash(operation_); + result = result * 31 + PigeonInternalDeepHash(data_); + return result; +} + +size_t PigeonInternalDeepHash(const InternalActionCodeInfo& v) { + return v.Hash(); +} + +// InternalAdditionalUserInfo + +InternalAdditionalUserInfo::InternalAdditionalUserInfo(bool is_new_user) + : is_new_user_(is_new_user) {} + +InternalAdditionalUserInfo::InternalAdditionalUserInfo( + bool is_new_user, const std::string* provider_id, + const std::string* username, const std::string* authorization_code, + const EncodableMap* profile) + : is_new_user_(is_new_user), + provider_id_(provider_id ? std::optional(*provider_id) + : std::nullopt), + username_(username ? std::optional(*username) + : std::nullopt), + authorization_code_(authorization_code + ? std::optional(*authorization_code) + : std::nullopt), + profile_(profile ? std::optional(*profile) : std::nullopt) { +} + +bool InternalAdditionalUserInfo::is_new_user() const { return is_new_user_; } + +void InternalAdditionalUserInfo::set_is_new_user(bool value_arg) { + is_new_user_ = value_arg; +} + +const std::string* InternalAdditionalUserInfo::provider_id() const { + return provider_id_ ? &(*provider_id_) : nullptr; +} + +void InternalAdditionalUserInfo::set_provider_id( + const std::string_view* value_arg) { + provider_id_ = + value_arg ? std::optional(*value_arg) : std::nullopt; +} + +void InternalAdditionalUserInfo::set_provider_id(std::string_view value_arg) { + provider_id_ = value_arg; +} + +const std::string* InternalAdditionalUserInfo::username() const { + return username_ ? &(*username_) : nullptr; +} + +void InternalAdditionalUserInfo::set_username( + const std::string_view* value_arg) { + username_ = value_arg ? std::optional(*value_arg) : std::nullopt; +} + +void InternalAdditionalUserInfo::set_username(std::string_view value_arg) { + username_ = value_arg; +} + +const std::string* InternalAdditionalUserInfo::authorization_code() const { + return authorization_code_ ? &(*authorization_code_) : nullptr; +} + +void InternalAdditionalUserInfo::set_authorization_code( + const std::string_view* value_arg) { + authorization_code_ = + value_arg ? std::optional(*value_arg) : std::nullopt; +} + +void InternalAdditionalUserInfo::set_authorization_code( + std::string_view value_arg) { + authorization_code_ = value_arg; +} + +const EncodableMap* InternalAdditionalUserInfo::profile() const { + return profile_ ? &(*profile_) : nullptr; +} + +void InternalAdditionalUserInfo::set_profile(const EncodableMap* value_arg) { + profile_ = value_arg ? std::optional(*value_arg) : std::nullopt; +} + +void InternalAdditionalUserInfo::set_profile(const EncodableMap& value_arg) { + profile_ = value_arg; +} + +EncodableList InternalAdditionalUserInfo::ToEncodableList() const { + EncodableList list; + list.reserve(5); + list.push_back(EncodableValue(is_new_user_)); + list.push_back(provider_id_ ? EncodableValue(*provider_id_) + : EncodableValue()); + list.push_back(username_ ? EncodableValue(*username_) : EncodableValue()); + list.push_back(authorization_code_ ? EncodableValue(*authorization_code_) + : EncodableValue()); + list.push_back(profile_ ? EncodableValue(*profile_) : EncodableValue()); + return list; +} + +InternalAdditionalUserInfo InternalAdditionalUserInfo::FromEncodableList( + const EncodableList& list) { + InternalAdditionalUserInfo decoded(std::get(list[0])); + auto& encodable_provider_id = list[1]; + if (!encodable_provider_id.IsNull()) { + decoded.set_provider_id(std::get(encodable_provider_id)); + } + auto& encodable_username = list[2]; + if (!encodable_username.IsNull()) { + decoded.set_username(std::get(encodable_username)); + } + auto& encodable_authorization_code = list[3]; + if (!encodable_authorization_code.IsNull()) { + decoded.set_authorization_code( + std::get(encodable_authorization_code)); + } + auto& encodable_profile = list[4]; + if (!encodable_profile.IsNull()) { + decoded.set_profile(std::get(encodable_profile)); + } + return decoded; +} + +bool InternalAdditionalUserInfo::operator==( + const InternalAdditionalUserInfo& other) const { + return PigeonInternalDeepEquals(is_new_user_, other.is_new_user_) && + PigeonInternalDeepEquals(provider_id_, other.provider_id_) && + PigeonInternalDeepEquals(username_, other.username_) && + PigeonInternalDeepEquals(authorization_code_, + other.authorization_code_) && + PigeonInternalDeepEquals(profile_, other.profile_); +} + +bool InternalAdditionalUserInfo::operator!=( + const InternalAdditionalUserInfo& other) const { + return !(*this == other); +} + +size_t InternalAdditionalUserInfo::Hash() const { + size_t result = 1; + result = result * 31 + PigeonInternalDeepHash(is_new_user_); + result = result * 31 + PigeonInternalDeepHash(provider_id_); + result = result * 31 + PigeonInternalDeepHash(username_); + result = result * 31 + PigeonInternalDeepHash(authorization_code_); + result = result * 31 + PigeonInternalDeepHash(profile_); + return result; +} + +size_t PigeonInternalDeepHash(const InternalAdditionalUserInfo& v) { + return v.Hash(); +} + +// InternalAuthCredential + +InternalAuthCredential::InternalAuthCredential( + const std::string& provider_id, const std::string& sign_in_method, + int64_t native_id) + : provider_id_(provider_id), + sign_in_method_(sign_in_method), + native_id_(native_id) {} + +InternalAuthCredential::InternalAuthCredential( + const std::string& provider_id, const std::string& sign_in_method, + int64_t native_id, const std::string* access_token) + : provider_id_(provider_id), + sign_in_method_(sign_in_method), + native_id_(native_id), + access_token_(access_token ? std::optional(*access_token) + : std::nullopt) {} + +const std::string& InternalAuthCredential::provider_id() const { + return provider_id_; +} + +void InternalAuthCredential::set_provider_id(std::string_view value_arg) { + provider_id_ = value_arg; +} + +const std::string& InternalAuthCredential::sign_in_method() const { + return sign_in_method_; +} + +void InternalAuthCredential::set_sign_in_method(std::string_view value_arg) { + sign_in_method_ = value_arg; +} + +int64_t InternalAuthCredential::native_id() const { return native_id_; } + +void InternalAuthCredential::set_native_id(int64_t value_arg) { + native_id_ = value_arg; +} + +const std::string* InternalAuthCredential::access_token() const { + return access_token_ ? &(*access_token_) : nullptr; +} + +void InternalAuthCredential::set_access_token( + const std::string_view* value_arg) { + access_token_ = + value_arg ? std::optional(*value_arg) : std::nullopt; +} + +void InternalAuthCredential::set_access_token(std::string_view value_arg) { + access_token_ = value_arg; +} + +EncodableList InternalAuthCredential::ToEncodableList() const { + EncodableList list; + list.reserve(4); + list.push_back(EncodableValue(provider_id_)); + list.push_back(EncodableValue(sign_in_method_)); + list.push_back(EncodableValue(native_id_)); + list.push_back(access_token_ ? EncodableValue(*access_token_) + : EncodableValue()); + return list; +} + +InternalAuthCredential InternalAuthCredential::FromEncodableList( + const EncodableList& list) { + InternalAuthCredential decoded(std::get(list[0]), + std::get(list[1]), + std::get(list[2])); + auto& encodable_access_token = list[3]; + if (!encodable_access_token.IsNull()) { + decoded.set_access_token(std::get(encodable_access_token)); + } + return decoded; +} + +bool InternalAuthCredential::operator==( + const InternalAuthCredential& other) const { + return PigeonInternalDeepEquals(provider_id_, other.provider_id_) && + PigeonInternalDeepEquals(sign_in_method_, other.sign_in_method_) && + PigeonInternalDeepEquals(native_id_, other.native_id_) && + PigeonInternalDeepEquals(access_token_, other.access_token_); +} + +bool InternalAuthCredential::operator!=( + const InternalAuthCredential& other) const { + return !(*this == other); +} + +size_t InternalAuthCredential::Hash() const { + size_t result = 1; + result = result * 31 + PigeonInternalDeepHash(provider_id_); + result = result * 31 + PigeonInternalDeepHash(sign_in_method_); + result = result * 31 + PigeonInternalDeepHash(native_id_); + result = result * 31 + PigeonInternalDeepHash(access_token_); + return result; +} + +size_t PigeonInternalDeepHash(const InternalAuthCredential& v) { + return v.Hash(); +} + +// InternalUserInfo + +InternalUserInfo::InternalUserInfo(const std::string& uid, bool is_anonymous, + bool is_email_verified) + : uid_(uid), + is_anonymous_(is_anonymous), + is_email_verified_(is_email_verified) {} + +InternalUserInfo::InternalUserInfo( + const std::string& uid, const std::string* email, + const std::string* display_name, const std::string* photo_url, + const std::string* phone_number, bool is_anonymous, bool is_email_verified, + const std::string* provider_id, const std::string* tenant_id, + const std::string* refresh_token, const int64_t* creation_timestamp, + const int64_t* last_sign_in_timestamp) + : uid_(uid), + email_(email ? std::optional(*email) : std::nullopt), + display_name_(display_name ? std::optional(*display_name) + : std::nullopt), + photo_url_(photo_url ? std::optional(*photo_url) + : std::nullopt), + phone_number_(phone_number ? std::optional(*phone_number) + : std::nullopt), + is_anonymous_(is_anonymous), + is_email_verified_(is_email_verified), + provider_id_(provider_id ? std::optional(*provider_id) + : std::nullopt), + tenant_id_(tenant_id ? std::optional(*tenant_id) + : std::nullopt), + refresh_token_(refresh_token ? std::optional(*refresh_token) + : std::nullopt), + creation_timestamp_(creation_timestamp + ? std::optional(*creation_timestamp) + : std::nullopt), + last_sign_in_timestamp_( + last_sign_in_timestamp + ? std::optional(*last_sign_in_timestamp) + : std::nullopt) {} + +const std::string& InternalUserInfo::uid() const { return uid_; } + +void InternalUserInfo::set_uid(std::string_view value_arg) { uid_ = value_arg; } + +const std::string* InternalUserInfo::email() const { + return email_ ? &(*email_) : nullptr; +} + +void InternalUserInfo::set_email(const std::string_view* value_arg) { + email_ = value_arg ? std::optional(*value_arg) : std::nullopt; +} + +void InternalUserInfo::set_email(std::string_view value_arg) { + email_ = value_arg; +} + +const std::string* InternalUserInfo::display_name() const { + return display_name_ ? &(*display_name_) : nullptr; +} + +void InternalUserInfo::set_display_name(const std::string_view* value_arg) { + display_name_ = + value_arg ? std::optional(*value_arg) : std::nullopt; +} + +void InternalUserInfo::set_display_name(std::string_view value_arg) { + display_name_ = value_arg; +} + +const std::string* InternalUserInfo::photo_url() const { + return photo_url_ ? &(*photo_url_) : nullptr; +} + +void InternalUserInfo::set_photo_url(const std::string_view* value_arg) { + photo_url_ = + value_arg ? std::optional(*value_arg) : std::nullopt; +} + +void InternalUserInfo::set_photo_url(std::string_view value_arg) { + photo_url_ = value_arg; +} + +const std::string* InternalUserInfo::phone_number() const { + return phone_number_ ? &(*phone_number_) : nullptr; +} + +void InternalUserInfo::set_phone_number(const std::string_view* value_arg) { + phone_number_ = + value_arg ? std::optional(*value_arg) : std::nullopt; +} + +void InternalUserInfo::set_phone_number(std::string_view value_arg) { + phone_number_ = value_arg; +} + +bool InternalUserInfo::is_anonymous() const { return is_anonymous_; } + +void InternalUserInfo::set_is_anonymous(bool value_arg) { + is_anonymous_ = value_arg; +} + +bool InternalUserInfo::is_email_verified() const { return is_email_verified_; } + +void InternalUserInfo::set_is_email_verified(bool value_arg) { + is_email_verified_ = value_arg; +} + +const std::string* InternalUserInfo::provider_id() const { + return provider_id_ ? &(*provider_id_) : nullptr; +} + +void InternalUserInfo::set_provider_id(const std::string_view* value_arg) { + provider_id_ = + value_arg ? std::optional(*value_arg) : std::nullopt; +} + +void InternalUserInfo::set_provider_id(std::string_view value_arg) { + provider_id_ = value_arg; +} + +const std::string* InternalUserInfo::tenant_id() const { + return tenant_id_ ? &(*tenant_id_) : nullptr; +} + +void InternalUserInfo::set_tenant_id(const std::string_view* value_arg) { + tenant_id_ = + value_arg ? std::optional(*value_arg) : std::nullopt; +} + +void InternalUserInfo::set_tenant_id(std::string_view value_arg) { + tenant_id_ = value_arg; +} + +const std::string* InternalUserInfo::refresh_token() const { + return refresh_token_ ? &(*refresh_token_) : nullptr; +} + +void InternalUserInfo::set_refresh_token(const std::string_view* value_arg) { + refresh_token_ = + value_arg ? std::optional(*value_arg) : std::nullopt; +} + +void InternalUserInfo::set_refresh_token(std::string_view value_arg) { + refresh_token_ = value_arg; +} + +const int64_t* InternalUserInfo::creation_timestamp() const { + return creation_timestamp_ ? &(*creation_timestamp_) : nullptr; +} + +void InternalUserInfo::set_creation_timestamp(const int64_t* value_arg) { + creation_timestamp_ = + value_arg ? std::optional(*value_arg) : std::nullopt; +} + +void InternalUserInfo::set_creation_timestamp(int64_t value_arg) { + creation_timestamp_ = value_arg; +} + +const int64_t* InternalUserInfo::last_sign_in_timestamp() const { + return last_sign_in_timestamp_ ? &(*last_sign_in_timestamp_) : nullptr; +} + +void InternalUserInfo::set_last_sign_in_timestamp(const int64_t* value_arg) { + last_sign_in_timestamp_ = + value_arg ? std::optional(*value_arg) : std::nullopt; +} + +void InternalUserInfo::set_last_sign_in_timestamp(int64_t value_arg) { + last_sign_in_timestamp_ = value_arg; +} + +EncodableList InternalUserInfo::ToEncodableList() const { + EncodableList list; + list.reserve(12); + list.push_back(EncodableValue(uid_)); + list.push_back(email_ ? EncodableValue(*email_) : EncodableValue()); + list.push_back(display_name_ ? EncodableValue(*display_name_) + : EncodableValue()); + list.push_back(photo_url_ ? EncodableValue(*photo_url_) : EncodableValue()); + list.push_back(phone_number_ ? EncodableValue(*phone_number_) + : EncodableValue()); + list.push_back(EncodableValue(is_anonymous_)); + list.push_back(EncodableValue(is_email_verified_)); + list.push_back(provider_id_ ? EncodableValue(*provider_id_) + : EncodableValue()); + list.push_back(tenant_id_ ? EncodableValue(*tenant_id_) : EncodableValue()); + list.push_back(refresh_token_ ? EncodableValue(*refresh_token_) + : EncodableValue()); + list.push_back(creation_timestamp_ ? EncodableValue(*creation_timestamp_) + : EncodableValue()); + list.push_back(last_sign_in_timestamp_ + ? EncodableValue(*last_sign_in_timestamp_) + : EncodableValue()); + return list; +} + +InternalUserInfo InternalUserInfo::FromEncodableList( + const EncodableList& list) { + InternalUserInfo decoded(std::get(list[0]), + std::get(list[5]), std::get(list[6])); + auto& encodable_email = list[1]; + if (!encodable_email.IsNull()) { + decoded.set_email(std::get(encodable_email)); + } + auto& encodable_display_name = list[2]; + if (!encodable_display_name.IsNull()) { + decoded.set_display_name(std::get(encodable_display_name)); + } + auto& encodable_photo_url = list[3]; + if (!encodable_photo_url.IsNull()) { + decoded.set_photo_url(std::get(encodable_photo_url)); + } + auto& encodable_phone_number = list[4]; + if (!encodable_phone_number.IsNull()) { + decoded.set_phone_number(std::get(encodable_phone_number)); + } + auto& encodable_provider_id = list[7]; + if (!encodable_provider_id.IsNull()) { + decoded.set_provider_id(std::get(encodable_provider_id)); + } + auto& encodable_tenant_id = list[8]; + if (!encodable_tenant_id.IsNull()) { + decoded.set_tenant_id(std::get(encodable_tenant_id)); + } + auto& encodable_refresh_token = list[9]; + if (!encodable_refresh_token.IsNull()) { + decoded.set_refresh_token(std::get(encodable_refresh_token)); + } + auto& encodable_creation_timestamp = list[10]; + if (!encodable_creation_timestamp.IsNull()) { + decoded.set_creation_timestamp( + std::get(encodable_creation_timestamp)); + } + auto& encodable_last_sign_in_timestamp = list[11]; + if (!encodable_last_sign_in_timestamp.IsNull()) { + decoded.set_last_sign_in_timestamp( + std::get(encodable_last_sign_in_timestamp)); + } + return decoded; +} + +bool InternalUserInfo::operator==(const InternalUserInfo& other) const { + return PigeonInternalDeepEquals(uid_, other.uid_) && + PigeonInternalDeepEquals(email_, other.email_) && + PigeonInternalDeepEquals(display_name_, other.display_name_) && + PigeonInternalDeepEquals(photo_url_, other.photo_url_) && + PigeonInternalDeepEquals(phone_number_, other.phone_number_) && + PigeonInternalDeepEquals(is_anonymous_, other.is_anonymous_) && + PigeonInternalDeepEquals(is_email_verified_, + other.is_email_verified_) && + PigeonInternalDeepEquals(provider_id_, other.provider_id_) && + PigeonInternalDeepEquals(tenant_id_, other.tenant_id_) && + PigeonInternalDeepEquals(refresh_token_, other.refresh_token_) && + PigeonInternalDeepEquals(creation_timestamp_, + other.creation_timestamp_) && + PigeonInternalDeepEquals(last_sign_in_timestamp_, + other.last_sign_in_timestamp_); +} + +bool InternalUserInfo::operator!=(const InternalUserInfo& other) const { + return !(*this == other); +} + +size_t InternalUserInfo::Hash() const { + size_t result = 1; + result = result * 31 + PigeonInternalDeepHash(uid_); + result = result * 31 + PigeonInternalDeepHash(email_); + result = result * 31 + PigeonInternalDeepHash(display_name_); + result = result * 31 + PigeonInternalDeepHash(photo_url_); + result = result * 31 + PigeonInternalDeepHash(phone_number_); + result = result * 31 + PigeonInternalDeepHash(is_anonymous_); + result = result * 31 + PigeonInternalDeepHash(is_email_verified_); + result = result * 31 + PigeonInternalDeepHash(provider_id_); + result = result * 31 + PigeonInternalDeepHash(tenant_id_); + result = result * 31 + PigeonInternalDeepHash(refresh_token_); + result = result * 31 + PigeonInternalDeepHash(creation_timestamp_); + result = result * 31 + PigeonInternalDeepHash(last_sign_in_timestamp_); + return result; +} + +size_t PigeonInternalDeepHash(const InternalUserInfo& v) { return v.Hash(); } + +// InternalUserDetails + +InternalUserDetails::InternalUserDetails(const InternalUserInfo& user_info, + const EncodableList& provider_data) + : user_info_(std::make_unique(user_info)), + provider_data_(provider_data) {} + +InternalUserDetails::InternalUserDetails(const InternalUserDetails& other) + : user_info_(std::make_unique(*other.user_info_)), + provider_data_(other.provider_data_) {} + +InternalUserDetails& InternalUserDetails::operator=( + const InternalUserDetails& other) { + user_info_ = std::make_unique(*other.user_info_); + provider_data_ = other.provider_data_; + return *this; +} + +const InternalUserInfo& InternalUserDetails::user_info() const { + return *user_info_; +} + +void InternalUserDetails::set_user_info(const InternalUserInfo& value_arg) { + user_info_ = std::make_unique(value_arg); +} + +const EncodableList& InternalUserDetails::provider_data() const { + return provider_data_; +} + +void InternalUserDetails::set_provider_data(const EncodableList& value_arg) { + provider_data_ = value_arg; +} + +EncodableList InternalUserDetails::ToEncodableList() const { + EncodableList list; + list.reserve(2); + list.push_back(CustomEncodableValue(*user_info_)); + list.push_back(EncodableValue(provider_data_)); + return list; +} + +InternalUserDetails InternalUserDetails::FromEncodableList( + const EncodableList& list) { + InternalUserDetails decoded(std::any_cast( + std::get(list[0])), + std::get(list[1])); + return decoded; +} + +bool InternalUserDetails::operator==(const InternalUserDetails& other) const { + return PigeonInternalDeepEquals(user_info_, other.user_info_) && + PigeonInternalDeepEquals(provider_data_, other.provider_data_); +} + +bool InternalUserDetails::operator!=(const InternalUserDetails& other) const { + return !(*this == other); +} + +size_t InternalUserDetails::Hash() const { + size_t result = 1; + result = result * 31 + PigeonInternalDeepHash(user_info_); + result = result * 31 + PigeonInternalDeepHash(provider_data_); + return result; +} + +size_t PigeonInternalDeepHash(const InternalUserDetails& v) { return v.Hash(); } + +// InternalUserCredential + +InternalUserCredential::InternalUserCredential() {} + +InternalUserCredential::InternalUserCredential( + const InternalUserDetails* user, + const InternalAdditionalUserInfo* additional_user_info, + const InternalAuthCredential* credential) + : user_(user ? std::make_unique(*user) : nullptr), + additional_user_info_(additional_user_info + ? std::make_unique( + *additional_user_info) + : nullptr), + credential_(credential + ? std::make_unique(*credential) + : nullptr) {} + +InternalUserCredential::InternalUserCredential( + const InternalUserCredential& other) + : user_(other.user_ ? std::make_unique(*other.user_) + : nullptr), + additional_user_info_(other.additional_user_info_ + ? std::make_unique( + *other.additional_user_info_) + : nullptr), + credential_(other.credential_ ? std::make_unique( + *other.credential_) + : nullptr) {} + +InternalUserCredential& InternalUserCredential::operator=( + const InternalUserCredential& other) { + user_ = other.user_ ? std::make_unique(*other.user_) + : nullptr; + additional_user_info_ = other.additional_user_info_ + ? std::make_unique( + *other.additional_user_info_) + : nullptr; + credential_ = + other.credential_ + ? std::make_unique(*other.credential_) + : nullptr; + return *this; +} + +const InternalUserDetails* InternalUserCredential::user() const { + return user_.get(); +} + +void InternalUserCredential::set_user(const InternalUserDetails* value_arg) { + user_ = + value_arg ? std::make_unique(*value_arg) : nullptr; +} + +void InternalUserCredential::set_user(const InternalUserDetails& value_arg) { + user_ = std::make_unique(value_arg); +} + +const InternalAdditionalUserInfo* InternalUserCredential::additional_user_info() + const { + return additional_user_info_.get(); +} + +void InternalUserCredential::set_additional_user_info( + const InternalAdditionalUserInfo* value_arg) { + additional_user_info_ = + value_arg ? std::make_unique(*value_arg) + : nullptr; +} + +void InternalUserCredential::set_additional_user_info( + const InternalAdditionalUserInfo& value_arg) { + additional_user_info_ = + std::make_unique(value_arg); +} + +const InternalAuthCredential* InternalUserCredential::credential() const { + return credential_.get(); +} + +void InternalUserCredential::set_credential( + const InternalAuthCredential* value_arg) { + credential_ = value_arg ? std::make_unique(*value_arg) + : nullptr; +} + +void InternalUserCredential::set_credential( + const InternalAuthCredential& value_arg) { + credential_ = std::make_unique(value_arg); +} + +EncodableList InternalUserCredential::ToEncodableList() const { + EncodableList list; + list.reserve(3); + list.push_back(user_ ? CustomEncodableValue(*user_) : EncodableValue()); + list.push_back(additional_user_info_ + ? CustomEncodableValue(*additional_user_info_) + : EncodableValue()); + list.push_back(credential_ ? CustomEncodableValue(*credential_) + : EncodableValue()); + return list; +} + +InternalUserCredential InternalUserCredential::FromEncodableList( + const EncodableList& list) { + InternalUserCredential decoded; + auto& encodable_user = list[0]; + if (!encodable_user.IsNull()) { + decoded.set_user(std::any_cast( + std::get(encodable_user))); + } + auto& encodable_additional_user_info = list[1]; + if (!encodable_additional_user_info.IsNull()) { + decoded.set_additional_user_info( + std::any_cast( + std::get(encodable_additional_user_info))); + } + auto& encodable_credential = list[2]; + if (!encodable_credential.IsNull()) { + decoded.set_credential(std::any_cast( + std::get(encodable_credential))); + } + return decoded; +} + +bool InternalUserCredential::operator==( + const InternalUserCredential& other) const { + return PigeonInternalDeepEquals(user_, other.user_) && + PigeonInternalDeepEquals(additional_user_info_, + other.additional_user_info_) && + PigeonInternalDeepEquals(credential_, other.credential_); +} + +bool InternalUserCredential::operator!=( + const InternalUserCredential& other) const { + return !(*this == other); +} + +size_t InternalUserCredential::Hash() const { + size_t result = 1; + result = result * 31 + PigeonInternalDeepHash(user_); + result = result * 31 + PigeonInternalDeepHash(additional_user_info_); + result = result * 31 + PigeonInternalDeepHash(credential_); + return result; +} + +size_t PigeonInternalDeepHash(const InternalUserCredential& v) { + return v.Hash(); +} + +// InternalAuthCredentialInput + +InternalAuthCredentialInput::InternalAuthCredentialInput( + const std::string& provider_id, const std::string& sign_in_method) + : provider_id_(provider_id), sign_in_method_(sign_in_method) {} + +InternalAuthCredentialInput::InternalAuthCredentialInput( + const std::string& provider_id, const std::string& sign_in_method, + const std::string* token, const std::string* access_token) + : provider_id_(provider_id), + sign_in_method_(sign_in_method), + token_(token ? std::optional(*token) : std::nullopt), + access_token_(access_token ? std::optional(*access_token) + : std::nullopt) {} + +const std::string& InternalAuthCredentialInput::provider_id() const { + return provider_id_; +} + +void InternalAuthCredentialInput::set_provider_id(std::string_view value_arg) { + provider_id_ = value_arg; +} + +const std::string& InternalAuthCredentialInput::sign_in_method() const { + return sign_in_method_; +} + +void InternalAuthCredentialInput::set_sign_in_method( + std::string_view value_arg) { + sign_in_method_ = value_arg; +} + +const std::string* InternalAuthCredentialInput::token() const { + return token_ ? &(*token_) : nullptr; +} + +void InternalAuthCredentialInput::set_token(const std::string_view* value_arg) { + token_ = value_arg ? std::optional(*value_arg) : std::nullopt; +} + +void InternalAuthCredentialInput::set_token(std::string_view value_arg) { + token_ = value_arg; +} + +const std::string* InternalAuthCredentialInput::access_token() const { + return access_token_ ? &(*access_token_) : nullptr; +} + +void InternalAuthCredentialInput::set_access_token( + const std::string_view* value_arg) { + access_token_ = + value_arg ? std::optional(*value_arg) : std::nullopt; +} + +void InternalAuthCredentialInput::set_access_token(std::string_view value_arg) { + access_token_ = value_arg; +} + +EncodableList InternalAuthCredentialInput::ToEncodableList() const { + EncodableList list; + list.reserve(4); + list.push_back(EncodableValue(provider_id_)); + list.push_back(EncodableValue(sign_in_method_)); + list.push_back(token_ ? EncodableValue(*token_) : EncodableValue()); + list.push_back(access_token_ ? EncodableValue(*access_token_) + : EncodableValue()); + return list; +} + +InternalAuthCredentialInput InternalAuthCredentialInput::FromEncodableList( + const EncodableList& list) { + InternalAuthCredentialInput decoded(std::get(list[0]), + std::get(list[1])); + auto& encodable_token = list[2]; + if (!encodable_token.IsNull()) { + decoded.set_token(std::get(encodable_token)); + } + auto& encodable_access_token = list[3]; + if (!encodable_access_token.IsNull()) { + decoded.set_access_token(std::get(encodable_access_token)); + } + return decoded; +} + +bool InternalAuthCredentialInput::operator==( + const InternalAuthCredentialInput& other) const { + return PigeonInternalDeepEquals(provider_id_, other.provider_id_) && + PigeonInternalDeepEquals(sign_in_method_, other.sign_in_method_) && + PigeonInternalDeepEquals(token_, other.token_) && + PigeonInternalDeepEquals(access_token_, other.access_token_); +} + +bool InternalAuthCredentialInput::operator!=( + const InternalAuthCredentialInput& other) const { + return !(*this == other); +} + +size_t InternalAuthCredentialInput::Hash() const { + size_t result = 1; + result = result * 31 + PigeonInternalDeepHash(provider_id_); + result = result * 31 + PigeonInternalDeepHash(sign_in_method_); + result = result * 31 + PigeonInternalDeepHash(token_); + result = result * 31 + PigeonInternalDeepHash(access_token_); + return result; +} + +size_t PigeonInternalDeepHash(const InternalAuthCredentialInput& v) { + return v.Hash(); +} + +// InternalActionCodeSettings + +InternalActionCodeSettings::InternalActionCodeSettings(const std::string& url, + bool handle_code_in_app, + bool android_install_app) + : url_(url), + handle_code_in_app_(handle_code_in_app), + android_install_app_(android_install_app) {} + +InternalActionCodeSettings::InternalActionCodeSettings( + const std::string& url, const std::string* dynamic_link_domain, + bool handle_code_in_app, const std::string* i_o_s_bundle_id, + const std::string* android_package_name, bool android_install_app, + const std::string* android_minimum_version, const std::string* link_domain) + : url_(url), + dynamic_link_domain_( + dynamic_link_domain ? std::optional(*dynamic_link_domain) + : std::nullopt), + handle_code_in_app_(handle_code_in_app), + i_o_s_bundle_id_(i_o_s_bundle_id + ? std::optional(*i_o_s_bundle_id) + : std::nullopt), + android_package_name_(android_package_name ? std::optional( + *android_package_name) + : std::nullopt), + android_install_app_(android_install_app), + android_minimum_version_( + android_minimum_version + ? std::optional(*android_minimum_version) + : std::nullopt), + link_domain_(link_domain ? std::optional(*link_domain) + : std::nullopt) {} + +const std::string& InternalActionCodeSettings::url() const { return url_; } + +void InternalActionCodeSettings::set_url(std::string_view value_arg) { + url_ = value_arg; +} + +const std::string* InternalActionCodeSettings::dynamic_link_domain() const { + return dynamic_link_domain_ ? &(*dynamic_link_domain_) : nullptr; +} + +void InternalActionCodeSettings::set_dynamic_link_domain( + const std::string_view* value_arg) { + dynamic_link_domain_ = + value_arg ? std::optional(*value_arg) : std::nullopt; +} + +void InternalActionCodeSettings::set_dynamic_link_domain( + std::string_view value_arg) { + dynamic_link_domain_ = value_arg; +} + +bool InternalActionCodeSettings::handle_code_in_app() const { + return handle_code_in_app_; +} + +void InternalActionCodeSettings::set_handle_code_in_app(bool value_arg) { + handle_code_in_app_ = value_arg; +} + +const std::string* InternalActionCodeSettings::i_o_s_bundle_id() const { + return i_o_s_bundle_id_ ? &(*i_o_s_bundle_id_) : nullptr; +} + +void InternalActionCodeSettings::set_i_o_s_bundle_id( + const std::string_view* value_arg) { + i_o_s_bundle_id_ = + value_arg ? std::optional(*value_arg) : std::nullopt; +} + +void InternalActionCodeSettings::set_i_o_s_bundle_id( + std::string_view value_arg) { + i_o_s_bundle_id_ = value_arg; +} + +const std::string* InternalActionCodeSettings::android_package_name() const { + return android_package_name_ ? &(*android_package_name_) : nullptr; +} + +void InternalActionCodeSettings::set_android_package_name( + const std::string_view* value_arg) { + android_package_name_ = + value_arg ? std::optional(*value_arg) : std::nullopt; +} + +void InternalActionCodeSettings::set_android_package_name( + std::string_view value_arg) { + android_package_name_ = value_arg; +} + +bool InternalActionCodeSettings::android_install_app() const { + return android_install_app_; +} + +void InternalActionCodeSettings::set_android_install_app(bool value_arg) { + android_install_app_ = value_arg; +} + +const std::string* InternalActionCodeSettings::android_minimum_version() const { + return android_minimum_version_ ? &(*android_minimum_version_) : nullptr; +} + +void InternalActionCodeSettings::set_android_minimum_version( + const std::string_view* value_arg) { + android_minimum_version_ = + value_arg ? std::optional(*value_arg) : std::nullopt; +} + +void InternalActionCodeSettings::set_android_minimum_version( + std::string_view value_arg) { + android_minimum_version_ = value_arg; +} + +const std::string* InternalActionCodeSettings::link_domain() const { + return link_domain_ ? &(*link_domain_) : nullptr; +} + +void InternalActionCodeSettings::set_link_domain( + const std::string_view* value_arg) { + link_domain_ = + value_arg ? std::optional(*value_arg) : std::nullopt; +} + +void InternalActionCodeSettings::set_link_domain(std::string_view value_arg) { + link_domain_ = value_arg; +} + +EncodableList InternalActionCodeSettings::ToEncodableList() const { + EncodableList list; + list.reserve(8); + list.push_back(EncodableValue(url_)); + list.push_back(dynamic_link_domain_ ? EncodableValue(*dynamic_link_domain_) + : EncodableValue()); + list.push_back(EncodableValue(handle_code_in_app_)); + list.push_back(i_o_s_bundle_id_ ? EncodableValue(*i_o_s_bundle_id_) + : EncodableValue()); + list.push_back(android_package_name_ ? EncodableValue(*android_package_name_) + : EncodableValue()); + list.push_back(EncodableValue(android_install_app_)); + list.push_back(android_minimum_version_ + ? EncodableValue(*android_minimum_version_) + : EncodableValue()); + list.push_back(link_domain_ ? EncodableValue(*link_domain_) + : EncodableValue()); + return list; +} + +InternalActionCodeSettings InternalActionCodeSettings::FromEncodableList( + const EncodableList& list) { + InternalActionCodeSettings decoded(std::get(list[0]), + std::get(list[2]), + std::get(list[5])); + auto& encodable_dynamic_link_domain = list[1]; + if (!encodable_dynamic_link_domain.IsNull()) { + decoded.set_dynamic_link_domain( + std::get(encodable_dynamic_link_domain)); + } + auto& encodable_i_o_s_bundle_id = list[3]; + if (!encodable_i_o_s_bundle_id.IsNull()) { + decoded.set_i_o_s_bundle_id( + std::get(encodable_i_o_s_bundle_id)); + } + auto& encodable_android_package_name = list[4]; + if (!encodable_android_package_name.IsNull()) { + decoded.set_android_package_name( + std::get(encodable_android_package_name)); + } + auto& encodable_android_minimum_version = list[6]; + if (!encodable_android_minimum_version.IsNull()) { + decoded.set_android_minimum_version( + std::get(encodable_android_minimum_version)); + } + auto& encodable_link_domain = list[7]; + if (!encodable_link_domain.IsNull()) { + decoded.set_link_domain(std::get(encodable_link_domain)); + } + return decoded; +} + +bool InternalActionCodeSettings::operator==( + const InternalActionCodeSettings& other) const { + return PigeonInternalDeepEquals(url_, other.url_) && + PigeonInternalDeepEquals(dynamic_link_domain_, + other.dynamic_link_domain_) && + PigeonInternalDeepEquals(handle_code_in_app_, + other.handle_code_in_app_) && + PigeonInternalDeepEquals(i_o_s_bundle_id_, other.i_o_s_bundle_id_) && + PigeonInternalDeepEquals(android_package_name_, + other.android_package_name_) && + PigeonInternalDeepEquals(android_install_app_, + other.android_install_app_) && + PigeonInternalDeepEquals(android_minimum_version_, + other.android_minimum_version_) && + PigeonInternalDeepEquals(link_domain_, other.link_domain_); +} + +bool InternalActionCodeSettings::operator!=( + const InternalActionCodeSettings& other) const { + return !(*this == other); +} + +size_t InternalActionCodeSettings::Hash() const { + size_t result = 1; + result = result * 31 + PigeonInternalDeepHash(url_); + result = result * 31 + PigeonInternalDeepHash(dynamic_link_domain_); + result = result * 31 + PigeonInternalDeepHash(handle_code_in_app_); + result = result * 31 + PigeonInternalDeepHash(i_o_s_bundle_id_); + result = result * 31 + PigeonInternalDeepHash(android_package_name_); + result = result * 31 + PigeonInternalDeepHash(android_install_app_); + result = result * 31 + PigeonInternalDeepHash(android_minimum_version_); + result = result * 31 + PigeonInternalDeepHash(link_domain_); + return result; +} + +size_t PigeonInternalDeepHash(const InternalActionCodeSettings& v) { + return v.Hash(); +} + +// InternalFirebaseAuthSettings + +InternalFirebaseAuthSettings::InternalFirebaseAuthSettings( + bool app_verification_disabled_for_testing) + : app_verification_disabled_for_testing_( + app_verification_disabled_for_testing) {} + +InternalFirebaseAuthSettings::InternalFirebaseAuthSettings( + bool app_verification_disabled_for_testing, + const std::string* user_access_group, const std::string* phone_number, + const std::string* sms_code, const bool* force_recaptcha_flow) + : app_verification_disabled_for_testing_( + app_verification_disabled_for_testing), + user_access_group_(user_access_group + ? std::optional(*user_access_group) + : std::nullopt), + phone_number_(phone_number ? std::optional(*phone_number) + : std::nullopt), + sms_code_(sms_code ? std::optional(*sms_code) + : std::nullopt), + force_recaptcha_flow_(force_recaptcha_flow + ? std::optional(*force_recaptcha_flow) + : std::nullopt) {} + +bool InternalFirebaseAuthSettings::app_verification_disabled_for_testing() + const { + return app_verification_disabled_for_testing_; +} + +void InternalFirebaseAuthSettings::set_app_verification_disabled_for_testing( + bool value_arg) { + app_verification_disabled_for_testing_ = value_arg; +} + +const std::string* InternalFirebaseAuthSettings::user_access_group() const { + return user_access_group_ ? &(*user_access_group_) : nullptr; +} + +void InternalFirebaseAuthSettings::set_user_access_group( + const std::string_view* value_arg) { + user_access_group_ = + value_arg ? std::optional(*value_arg) : std::nullopt; +} + +void InternalFirebaseAuthSettings::set_user_access_group( + std::string_view value_arg) { + user_access_group_ = value_arg; +} + +const std::string* InternalFirebaseAuthSettings::phone_number() const { + return phone_number_ ? &(*phone_number_) : nullptr; +} + +void InternalFirebaseAuthSettings::set_phone_number( + const std::string_view* value_arg) { + phone_number_ = + value_arg ? std::optional(*value_arg) : std::nullopt; +} + +void InternalFirebaseAuthSettings::set_phone_number( + std::string_view value_arg) { + phone_number_ = value_arg; +} + +const std::string* InternalFirebaseAuthSettings::sms_code() const { + return sms_code_ ? &(*sms_code_) : nullptr; +} + +void InternalFirebaseAuthSettings::set_sms_code( + const std::string_view* value_arg) { + sms_code_ = value_arg ? std::optional(*value_arg) : std::nullopt; +} + +void InternalFirebaseAuthSettings::set_sms_code(std::string_view value_arg) { + sms_code_ = value_arg; +} + +const bool* InternalFirebaseAuthSettings::force_recaptcha_flow() const { + return force_recaptcha_flow_ ? &(*force_recaptcha_flow_) : nullptr; +} + +void InternalFirebaseAuthSettings::set_force_recaptcha_flow( + const bool* value_arg) { + force_recaptcha_flow_ = + value_arg ? std::optional(*value_arg) : std::nullopt; +} + +void InternalFirebaseAuthSettings::set_force_recaptcha_flow(bool value_arg) { + force_recaptcha_flow_ = value_arg; +} + +EncodableList InternalFirebaseAuthSettings::ToEncodableList() const { + EncodableList list; + list.reserve(5); + list.push_back(EncodableValue(app_verification_disabled_for_testing_)); + list.push_back(user_access_group_ ? EncodableValue(*user_access_group_) + : EncodableValue()); + list.push_back(phone_number_ ? EncodableValue(*phone_number_) + : EncodableValue()); + list.push_back(sms_code_ ? EncodableValue(*sms_code_) : EncodableValue()); + list.push_back(force_recaptcha_flow_ ? EncodableValue(*force_recaptcha_flow_) + : EncodableValue()); + return list; +} + +InternalFirebaseAuthSettings InternalFirebaseAuthSettings::FromEncodableList( + const EncodableList& list) { + InternalFirebaseAuthSettings decoded(std::get(list[0])); + auto& encodable_user_access_group = list[1]; + if (!encodable_user_access_group.IsNull()) { + decoded.set_user_access_group( + std::get(encodable_user_access_group)); + } + auto& encodable_phone_number = list[2]; + if (!encodable_phone_number.IsNull()) { + decoded.set_phone_number(std::get(encodable_phone_number)); + } + auto& encodable_sms_code = list[3]; + if (!encodable_sms_code.IsNull()) { + decoded.set_sms_code(std::get(encodable_sms_code)); + } + auto& encodable_force_recaptcha_flow = list[4]; + if (!encodable_force_recaptcha_flow.IsNull()) { + decoded.set_force_recaptcha_flow( + std::get(encodable_force_recaptcha_flow)); + } + return decoded; +} + +bool InternalFirebaseAuthSettings::operator==( + const InternalFirebaseAuthSettings& other) const { + return PigeonInternalDeepEquals( + app_verification_disabled_for_testing_, + other.app_verification_disabled_for_testing_) && + PigeonInternalDeepEquals(user_access_group_, + other.user_access_group_) && + PigeonInternalDeepEquals(phone_number_, other.phone_number_) && + PigeonInternalDeepEquals(sms_code_, other.sms_code_) && + PigeonInternalDeepEquals(force_recaptcha_flow_, + other.force_recaptcha_flow_); +} + +bool InternalFirebaseAuthSettings::operator!=( + const InternalFirebaseAuthSettings& other) const { + return !(*this == other); +} + +size_t InternalFirebaseAuthSettings::Hash() const { + size_t result = 1; + result = result * 31 + + PigeonInternalDeepHash(app_verification_disabled_for_testing_); + result = result * 31 + PigeonInternalDeepHash(user_access_group_); + result = result * 31 + PigeonInternalDeepHash(phone_number_); + result = result * 31 + PigeonInternalDeepHash(sms_code_); + result = result * 31 + PigeonInternalDeepHash(force_recaptcha_flow_); + return result; +} + +size_t PigeonInternalDeepHash(const InternalFirebaseAuthSettings& v) { + return v.Hash(); +} + +// InternalSignInProvider + +InternalSignInProvider::InternalSignInProvider(const std::string& provider_id) + : provider_id_(provider_id) {} + +InternalSignInProvider::InternalSignInProvider( + const std::string& provider_id, const EncodableList* scopes, + const EncodableMap* custom_parameters) + : provider_id_(provider_id), + scopes_(scopes ? std::optional(*scopes) : std::nullopt), + custom_parameters_(custom_parameters + ? std::optional(*custom_parameters) + : std::nullopt) {} + +const std::string& InternalSignInProvider::provider_id() const { + return provider_id_; +} + +void InternalSignInProvider::set_provider_id(std::string_view value_arg) { + provider_id_ = value_arg; +} + +const EncodableList* InternalSignInProvider::scopes() const { + return scopes_ ? &(*scopes_) : nullptr; +} + +void InternalSignInProvider::set_scopes(const EncodableList* value_arg) { + scopes_ = value_arg ? std::optional(*value_arg) : std::nullopt; +} + +void InternalSignInProvider::set_scopes(const EncodableList& value_arg) { + scopes_ = value_arg; +} + +const EncodableMap* InternalSignInProvider::custom_parameters() const { + return custom_parameters_ ? &(*custom_parameters_) : nullptr; +} + +void InternalSignInProvider::set_custom_parameters( + const EncodableMap* value_arg) { + custom_parameters_ = + value_arg ? std::optional(*value_arg) : std::nullopt; +} + +void InternalSignInProvider::set_custom_parameters( + const EncodableMap& value_arg) { + custom_parameters_ = value_arg; +} + +EncodableList InternalSignInProvider::ToEncodableList() const { + EncodableList list; + list.reserve(3); + list.push_back(EncodableValue(provider_id_)); + list.push_back(scopes_ ? EncodableValue(*scopes_) : EncodableValue()); + list.push_back(custom_parameters_ ? EncodableValue(*custom_parameters_) + : EncodableValue()); + return list; +} + +InternalSignInProvider InternalSignInProvider::FromEncodableList( + const EncodableList& list) { + InternalSignInProvider decoded(std::get(list[0])); + auto& encodable_scopes = list[1]; + if (!encodable_scopes.IsNull()) { + decoded.set_scopes(std::get(encodable_scopes)); + } + auto& encodable_custom_parameters = list[2]; + if (!encodable_custom_parameters.IsNull()) { + decoded.set_custom_parameters( + std::get(encodable_custom_parameters)); + } + return decoded; +} + +bool InternalSignInProvider::operator==( + const InternalSignInProvider& other) const { + return PigeonInternalDeepEquals(provider_id_, other.provider_id_) && + PigeonInternalDeepEquals(scopes_, other.scopes_) && + PigeonInternalDeepEquals(custom_parameters_, other.custom_parameters_); +} + +bool InternalSignInProvider::operator!=( + const InternalSignInProvider& other) const { + return !(*this == other); +} + +size_t InternalSignInProvider::Hash() const { + size_t result = 1; + result = result * 31 + PigeonInternalDeepHash(provider_id_); + result = result * 31 + PigeonInternalDeepHash(scopes_); + result = result * 31 + PigeonInternalDeepHash(custom_parameters_); + return result; +} + +size_t PigeonInternalDeepHash(const InternalSignInProvider& v) { + return v.Hash(); +} + +// InternalVerifyPhoneNumberRequest + +InternalVerifyPhoneNumberRequest::InternalVerifyPhoneNumberRequest( + int64_t timeout) + : timeout_(timeout) {} + +InternalVerifyPhoneNumberRequest::InternalVerifyPhoneNumberRequest( + const std::string* phone_number, int64_t timeout, + const int64_t* force_resending_token, + const std::string* auto_retrieved_sms_code_for_testing, + const std::string* multi_factor_info_id, + const std::string* multi_factor_session_id) + : phone_number_(phone_number ? std::optional(*phone_number) + : std::nullopt), + timeout_(timeout), + force_resending_token_( + force_resending_token ? std::optional(*force_resending_token) + : std::nullopt), + auto_retrieved_sms_code_for_testing_( + auto_retrieved_sms_code_for_testing + ? std::optional(*auto_retrieved_sms_code_for_testing) + : std::nullopt), + multi_factor_info_id_(multi_factor_info_id ? std::optional( + *multi_factor_info_id) + : std::nullopt), + multi_factor_session_id_( + multi_factor_session_id + ? std::optional(*multi_factor_session_id) + : std::nullopt) {} + +const std::string* InternalVerifyPhoneNumberRequest::phone_number() const { + return phone_number_ ? &(*phone_number_) : nullptr; +} + +void InternalVerifyPhoneNumberRequest::set_phone_number( + const std::string_view* value_arg) { + phone_number_ = + value_arg ? std::optional(*value_arg) : std::nullopt; +} + +void InternalVerifyPhoneNumberRequest::set_phone_number( + std::string_view value_arg) { + phone_number_ = value_arg; +} + +int64_t InternalVerifyPhoneNumberRequest::timeout() const { return timeout_; } + +void InternalVerifyPhoneNumberRequest::set_timeout(int64_t value_arg) { + timeout_ = value_arg; +} + +const int64_t* InternalVerifyPhoneNumberRequest::force_resending_token() const { + return force_resending_token_ ? &(*force_resending_token_) : nullptr; +} + +void InternalVerifyPhoneNumberRequest::set_force_resending_token( + const int64_t* value_arg) { + force_resending_token_ = + value_arg ? std::optional(*value_arg) : std::nullopt; +} + +void InternalVerifyPhoneNumberRequest::set_force_resending_token( + int64_t value_arg) { + force_resending_token_ = value_arg; +} + +const std::string* +InternalVerifyPhoneNumberRequest::auto_retrieved_sms_code_for_testing() const { + return auto_retrieved_sms_code_for_testing_ + ? &(*auto_retrieved_sms_code_for_testing_) + : nullptr; +} + +void InternalVerifyPhoneNumberRequest::set_auto_retrieved_sms_code_for_testing( + const std::string_view* value_arg) { + auto_retrieved_sms_code_for_testing_ = + value_arg ? std::optional(*value_arg) : std::nullopt; +} + +void InternalVerifyPhoneNumberRequest::set_auto_retrieved_sms_code_for_testing( + std::string_view value_arg) { + auto_retrieved_sms_code_for_testing_ = value_arg; +} + +const std::string* InternalVerifyPhoneNumberRequest::multi_factor_info_id() + const { + return multi_factor_info_id_ ? &(*multi_factor_info_id_) : nullptr; +} + +void InternalVerifyPhoneNumberRequest::set_multi_factor_info_id( + const std::string_view* value_arg) { + multi_factor_info_id_ = + value_arg ? std::optional(*value_arg) : std::nullopt; +} + +void InternalVerifyPhoneNumberRequest::set_multi_factor_info_id( + std::string_view value_arg) { + multi_factor_info_id_ = value_arg; +} + +const std::string* InternalVerifyPhoneNumberRequest::multi_factor_session_id() + const { + return multi_factor_session_id_ ? &(*multi_factor_session_id_) : nullptr; +} + +void InternalVerifyPhoneNumberRequest::set_multi_factor_session_id( + const std::string_view* value_arg) { + multi_factor_session_id_ = + value_arg ? std::optional(*value_arg) : std::nullopt; +} + +void InternalVerifyPhoneNumberRequest::set_multi_factor_session_id( + std::string_view value_arg) { + multi_factor_session_id_ = value_arg; +} + +EncodableList InternalVerifyPhoneNumberRequest::ToEncodableList() const { + EncodableList list; + list.reserve(6); + list.push_back(phone_number_ ? EncodableValue(*phone_number_) + : EncodableValue()); + list.push_back(EncodableValue(timeout_)); + list.push_back(force_resending_token_ + ? EncodableValue(*force_resending_token_) + : EncodableValue()); + list.push_back(auto_retrieved_sms_code_for_testing_ + ? EncodableValue(*auto_retrieved_sms_code_for_testing_) + : EncodableValue()); + list.push_back(multi_factor_info_id_ ? EncodableValue(*multi_factor_info_id_) + : EncodableValue()); + list.push_back(multi_factor_session_id_ + ? EncodableValue(*multi_factor_session_id_) + : EncodableValue()); + return list; +} + +InternalVerifyPhoneNumberRequest +InternalVerifyPhoneNumberRequest::FromEncodableList(const EncodableList& list) { + InternalVerifyPhoneNumberRequest decoded(std::get(list[1])); + auto& encodable_phone_number = list[0]; + if (!encodable_phone_number.IsNull()) { + decoded.set_phone_number(std::get(encodable_phone_number)); + } + auto& encodable_force_resending_token = list[2]; + if (!encodable_force_resending_token.IsNull()) { + decoded.set_force_resending_token( + std::get(encodable_force_resending_token)); + } + auto& encodable_auto_retrieved_sms_code_for_testing = list[3]; + if (!encodable_auto_retrieved_sms_code_for_testing.IsNull()) { + decoded.set_auto_retrieved_sms_code_for_testing( + std::get(encodable_auto_retrieved_sms_code_for_testing)); + } + auto& encodable_multi_factor_info_id = list[4]; + if (!encodable_multi_factor_info_id.IsNull()) { + decoded.set_multi_factor_info_id( + std::get(encodable_multi_factor_info_id)); + } + auto& encodable_multi_factor_session_id = list[5]; + if (!encodable_multi_factor_session_id.IsNull()) { + decoded.set_multi_factor_session_id( + std::get(encodable_multi_factor_session_id)); + } + return decoded; +} + +bool InternalVerifyPhoneNumberRequest::operator==( + const InternalVerifyPhoneNumberRequest& other) const { + return PigeonInternalDeepEquals(phone_number_, other.phone_number_) && + PigeonInternalDeepEquals(timeout_, other.timeout_) && + PigeonInternalDeepEquals(force_resending_token_, + other.force_resending_token_) && + PigeonInternalDeepEquals(auto_retrieved_sms_code_for_testing_, + other.auto_retrieved_sms_code_for_testing_) && + PigeonInternalDeepEquals(multi_factor_info_id_, + other.multi_factor_info_id_) && + PigeonInternalDeepEquals(multi_factor_session_id_, + other.multi_factor_session_id_); +} + +bool InternalVerifyPhoneNumberRequest::operator!=( + const InternalVerifyPhoneNumberRequest& other) const { + return !(*this == other); +} + +size_t InternalVerifyPhoneNumberRequest::Hash() const { + size_t result = 1; + result = result * 31 + PigeonInternalDeepHash(phone_number_); + result = result * 31 + PigeonInternalDeepHash(timeout_); + result = result * 31 + PigeonInternalDeepHash(force_resending_token_); + result = result * 31 + + PigeonInternalDeepHash(auto_retrieved_sms_code_for_testing_); + result = result * 31 + PigeonInternalDeepHash(multi_factor_info_id_); + result = result * 31 + PigeonInternalDeepHash(multi_factor_session_id_); + return result; +} + +size_t PigeonInternalDeepHash(const InternalVerifyPhoneNumberRequest& v) { + return v.Hash(); +} + +// InternalIdTokenResult + +InternalIdTokenResult::InternalIdTokenResult() {} + +InternalIdTokenResult::InternalIdTokenResult( + const std::string* token, const int64_t* expiration_timestamp, + const int64_t* auth_timestamp, const int64_t* issued_at_timestamp, + const std::string* sign_in_provider, const EncodableMap* claims, + const std::string* sign_in_second_factor) + : token_(token ? std::optional(*token) : std::nullopt), + expiration_timestamp_(expiration_timestamp + ? std::optional(*expiration_timestamp) + : std::nullopt), + auth_timestamp_(auth_timestamp ? std::optional(*auth_timestamp) + : std::nullopt), + issued_at_timestamp_(issued_at_timestamp + ? std::optional(*issued_at_timestamp) + : std::nullopt), + sign_in_provider_(sign_in_provider + ? std::optional(*sign_in_provider) + : std::nullopt), + claims_(claims ? std::optional(*claims) : std::nullopt), + sign_in_second_factor_(sign_in_second_factor ? std::optional( + *sign_in_second_factor) + : std::nullopt) {} + +const std::string* InternalIdTokenResult::token() const { + return token_ ? &(*token_) : nullptr; +} + +void InternalIdTokenResult::set_token(const std::string_view* value_arg) { + token_ = value_arg ? std::optional(*value_arg) : std::nullopt; +} + +void InternalIdTokenResult::set_token(std::string_view value_arg) { + token_ = value_arg; +} + +const int64_t* InternalIdTokenResult::expiration_timestamp() const { + return expiration_timestamp_ ? &(*expiration_timestamp_) : nullptr; +} + +void InternalIdTokenResult::set_expiration_timestamp(const int64_t* value_arg) { + expiration_timestamp_ = + value_arg ? std::optional(*value_arg) : std::nullopt; +} + +void InternalIdTokenResult::set_expiration_timestamp(int64_t value_arg) { + expiration_timestamp_ = value_arg; +} + +const int64_t* InternalIdTokenResult::auth_timestamp() const { + return auth_timestamp_ ? &(*auth_timestamp_) : nullptr; +} + +void InternalIdTokenResult::set_auth_timestamp(const int64_t* value_arg) { + auth_timestamp_ = + value_arg ? std::optional(*value_arg) : std::nullopt; +} + +void InternalIdTokenResult::set_auth_timestamp(int64_t value_arg) { + auth_timestamp_ = value_arg; +} + +const int64_t* InternalIdTokenResult::issued_at_timestamp() const { + return issued_at_timestamp_ ? &(*issued_at_timestamp_) : nullptr; +} + +void InternalIdTokenResult::set_issued_at_timestamp(const int64_t* value_arg) { + issued_at_timestamp_ = + value_arg ? std::optional(*value_arg) : std::nullopt; +} + +void InternalIdTokenResult::set_issued_at_timestamp(int64_t value_arg) { + issued_at_timestamp_ = value_arg; +} + +const std::string* InternalIdTokenResult::sign_in_provider() const { + return sign_in_provider_ ? &(*sign_in_provider_) : nullptr; +} + +void InternalIdTokenResult::set_sign_in_provider( + const std::string_view* value_arg) { + sign_in_provider_ = + value_arg ? std::optional(*value_arg) : std::nullopt; +} + +void InternalIdTokenResult::set_sign_in_provider(std::string_view value_arg) { + sign_in_provider_ = value_arg; +} + +const EncodableMap* InternalIdTokenResult::claims() const { + return claims_ ? &(*claims_) : nullptr; +} + +void InternalIdTokenResult::set_claims(const EncodableMap* value_arg) { + claims_ = value_arg ? std::optional(*value_arg) : std::nullopt; +} + +void InternalIdTokenResult::set_claims(const EncodableMap& value_arg) { + claims_ = value_arg; +} + +const std::string* InternalIdTokenResult::sign_in_second_factor() const { + return sign_in_second_factor_ ? &(*sign_in_second_factor_) : nullptr; +} + +void InternalIdTokenResult::set_sign_in_second_factor( + const std::string_view* value_arg) { + sign_in_second_factor_ = + value_arg ? std::optional(*value_arg) : std::nullopt; +} + +void InternalIdTokenResult::set_sign_in_second_factor( + std::string_view value_arg) { + sign_in_second_factor_ = value_arg; +} + +EncodableList InternalIdTokenResult::ToEncodableList() const { + EncodableList list; + list.reserve(7); + list.push_back(token_ ? EncodableValue(*token_) : EncodableValue()); + list.push_back(expiration_timestamp_ ? EncodableValue(*expiration_timestamp_) + : EncodableValue()); + list.push_back(auth_timestamp_ ? EncodableValue(*auth_timestamp_) + : EncodableValue()); + list.push_back(issued_at_timestamp_ ? EncodableValue(*issued_at_timestamp_) + : EncodableValue()); + list.push_back(sign_in_provider_ ? EncodableValue(*sign_in_provider_) + : EncodableValue()); + list.push_back(claims_ ? EncodableValue(*claims_) : EncodableValue()); + list.push_back(sign_in_second_factor_ + ? EncodableValue(*sign_in_second_factor_) + : EncodableValue()); + return list; +} + +InternalIdTokenResult InternalIdTokenResult::FromEncodableList( + const EncodableList& list) { + InternalIdTokenResult decoded; + auto& encodable_token = list[0]; + if (!encodable_token.IsNull()) { + decoded.set_token(std::get(encodable_token)); + } + auto& encodable_expiration_timestamp = list[1]; + if (!encodable_expiration_timestamp.IsNull()) { + decoded.set_expiration_timestamp( + std::get(encodable_expiration_timestamp)); + } + auto& encodable_auth_timestamp = list[2]; + if (!encodable_auth_timestamp.IsNull()) { + decoded.set_auth_timestamp(std::get(encodable_auth_timestamp)); + } + auto& encodable_issued_at_timestamp = list[3]; + if (!encodable_issued_at_timestamp.IsNull()) { + decoded.set_issued_at_timestamp( + std::get(encodable_issued_at_timestamp)); + } + auto& encodable_sign_in_provider = list[4]; + if (!encodable_sign_in_provider.IsNull()) { + decoded.set_sign_in_provider( + std::get(encodable_sign_in_provider)); + } + auto& encodable_claims = list[5]; + if (!encodable_claims.IsNull()) { + decoded.set_claims(std::get(encodable_claims)); + } + auto& encodable_sign_in_second_factor = list[6]; + if (!encodable_sign_in_second_factor.IsNull()) { + decoded.set_sign_in_second_factor( + std::get(encodable_sign_in_second_factor)); + } + return decoded; +} + +bool InternalIdTokenResult::operator==( + const InternalIdTokenResult& other) const { + return PigeonInternalDeepEquals(token_, other.token_) && + PigeonInternalDeepEquals(expiration_timestamp_, + other.expiration_timestamp_) && + PigeonInternalDeepEquals(auth_timestamp_, other.auth_timestamp_) && + PigeonInternalDeepEquals(issued_at_timestamp_, + other.issued_at_timestamp_) && + PigeonInternalDeepEquals(sign_in_provider_, other.sign_in_provider_) && + PigeonInternalDeepEquals(claims_, other.claims_) && + PigeonInternalDeepEquals(sign_in_second_factor_, + other.sign_in_second_factor_); +} + +bool InternalIdTokenResult::operator!=( + const InternalIdTokenResult& other) const { + return !(*this == other); +} + +size_t InternalIdTokenResult::Hash() const { + size_t result = 1; + result = result * 31 + PigeonInternalDeepHash(token_); + result = result * 31 + PigeonInternalDeepHash(expiration_timestamp_); + result = result * 31 + PigeonInternalDeepHash(auth_timestamp_); + result = result * 31 + PigeonInternalDeepHash(issued_at_timestamp_); + result = result * 31 + PigeonInternalDeepHash(sign_in_provider_); + result = result * 31 + PigeonInternalDeepHash(claims_); + result = result * 31 + PigeonInternalDeepHash(sign_in_second_factor_); + return result; +} + +size_t PigeonInternalDeepHash(const InternalIdTokenResult& v) { + return v.Hash(); +} + +// InternalUserProfile + +InternalUserProfile::InternalUserProfile(bool display_name_changed, + bool photo_url_changed) + : display_name_changed_(display_name_changed), + photo_url_changed_(photo_url_changed) {} + +InternalUserProfile::InternalUserProfile(const std::string* display_name, + const std::string* photo_url, + bool display_name_changed, + bool photo_url_changed) + : display_name_(display_name ? std::optional(*display_name) + : std::nullopt), + photo_url_(photo_url ? std::optional(*photo_url) + : std::nullopt), + display_name_changed_(display_name_changed), + photo_url_changed_(photo_url_changed) {} + +const std::string* InternalUserProfile::display_name() const { + return display_name_ ? &(*display_name_) : nullptr; +} + +void InternalUserProfile::set_display_name(const std::string_view* value_arg) { + display_name_ = + value_arg ? std::optional(*value_arg) : std::nullopt; +} + +void InternalUserProfile::set_display_name(std::string_view value_arg) { + display_name_ = value_arg; +} + +const std::string* InternalUserProfile::photo_url() const { + return photo_url_ ? &(*photo_url_) : nullptr; +} + +void InternalUserProfile::set_photo_url(const std::string_view* value_arg) { + photo_url_ = + value_arg ? std::optional(*value_arg) : std::nullopt; +} + +void InternalUserProfile::set_photo_url(std::string_view value_arg) { + photo_url_ = value_arg; +} + +bool InternalUserProfile::display_name_changed() const { + return display_name_changed_; +} + +void InternalUserProfile::set_display_name_changed(bool value_arg) { + display_name_changed_ = value_arg; +} + +bool InternalUserProfile::photo_url_changed() const { + return photo_url_changed_; +} + +void InternalUserProfile::set_photo_url_changed(bool value_arg) { + photo_url_changed_ = value_arg; +} + +EncodableList InternalUserProfile::ToEncodableList() const { + EncodableList list; + list.reserve(4); + list.push_back(display_name_ ? EncodableValue(*display_name_) + : EncodableValue()); + list.push_back(photo_url_ ? EncodableValue(*photo_url_) : EncodableValue()); + list.push_back(EncodableValue(display_name_changed_)); + list.push_back(EncodableValue(photo_url_changed_)); + return list; +} + +InternalUserProfile InternalUserProfile::FromEncodableList( + const EncodableList& list) { + InternalUserProfile decoded(std::get(list[2]), std::get(list[3])); + auto& encodable_display_name = list[0]; + if (!encodable_display_name.IsNull()) { + decoded.set_display_name(std::get(encodable_display_name)); + } + auto& encodable_photo_url = list[1]; + if (!encodable_photo_url.IsNull()) { + decoded.set_photo_url(std::get(encodable_photo_url)); + } + return decoded; +} + +bool InternalUserProfile::operator==(const InternalUserProfile& other) const { + return PigeonInternalDeepEquals(display_name_, other.display_name_) && + PigeonInternalDeepEquals(photo_url_, other.photo_url_) && + PigeonInternalDeepEquals(display_name_changed_, + other.display_name_changed_) && + PigeonInternalDeepEquals(photo_url_changed_, other.photo_url_changed_); +} + +bool InternalUserProfile::operator!=(const InternalUserProfile& other) const { + return !(*this == other); +} + +size_t InternalUserProfile::Hash() const { + size_t result = 1; + result = result * 31 + PigeonInternalDeepHash(display_name_); + result = result * 31 + PigeonInternalDeepHash(photo_url_); + result = result * 31 + PigeonInternalDeepHash(display_name_changed_); + result = result * 31 + PigeonInternalDeepHash(photo_url_changed_); + return result; +} + +size_t PigeonInternalDeepHash(const InternalUserProfile& v) { return v.Hash(); } + +// InternalTotpSecret + +InternalTotpSecret::InternalTotpSecret(const std::string& secret_key) + : secret_key_(secret_key) {} + +InternalTotpSecret::InternalTotpSecret( + const int64_t* code_interval_seconds, const int64_t* code_length, + const int64_t* enrollment_completion_deadline, + const std::string* hashing_algorithm, const std::string& secret_key) + : code_interval_seconds_( + code_interval_seconds ? std::optional(*code_interval_seconds) + : std::nullopt), + code_length_(code_length ? std::optional(*code_length) + : std::nullopt), + enrollment_completion_deadline_( + enrollment_completion_deadline + ? std::optional(*enrollment_completion_deadline) + : std::nullopt), + hashing_algorithm_(hashing_algorithm + ? std::optional(*hashing_algorithm) + : std::nullopt), + secret_key_(secret_key) {} + +const int64_t* InternalTotpSecret::code_interval_seconds() const { + return code_interval_seconds_ ? &(*code_interval_seconds_) : nullptr; +} + +void InternalTotpSecret::set_code_interval_seconds(const int64_t* value_arg) { + code_interval_seconds_ = + value_arg ? std::optional(*value_arg) : std::nullopt; +} + +void InternalTotpSecret::set_code_interval_seconds(int64_t value_arg) { + code_interval_seconds_ = value_arg; +} + +const int64_t* InternalTotpSecret::code_length() const { + return code_length_ ? &(*code_length_) : nullptr; +} + +void InternalTotpSecret::set_code_length(const int64_t* value_arg) { + code_length_ = value_arg ? std::optional(*value_arg) : std::nullopt; +} + +void InternalTotpSecret::set_code_length(int64_t value_arg) { + code_length_ = value_arg; +} + +const int64_t* InternalTotpSecret::enrollment_completion_deadline() const { + return enrollment_completion_deadline_ ? &(*enrollment_completion_deadline_) + : nullptr; +} + +void InternalTotpSecret::set_enrollment_completion_deadline( + const int64_t* value_arg) { + enrollment_completion_deadline_ = + value_arg ? std::optional(*value_arg) : std::nullopt; +} + +void InternalTotpSecret::set_enrollment_completion_deadline(int64_t value_arg) { + enrollment_completion_deadline_ = value_arg; +} + +const std::string* InternalTotpSecret::hashing_algorithm() const { + return hashing_algorithm_ ? &(*hashing_algorithm_) : nullptr; +} + +void InternalTotpSecret::set_hashing_algorithm( + const std::string_view* value_arg) { + hashing_algorithm_ = + value_arg ? std::optional(*value_arg) : std::nullopt; +} + +void InternalTotpSecret::set_hashing_algorithm(std::string_view value_arg) { + hashing_algorithm_ = value_arg; +} + +const std::string& InternalTotpSecret::secret_key() const { + return secret_key_; +} + +void InternalTotpSecret::set_secret_key(std::string_view value_arg) { + secret_key_ = value_arg; +} + +EncodableList InternalTotpSecret::ToEncodableList() const { + EncodableList list; + list.reserve(5); + list.push_back(code_interval_seconds_ + ? EncodableValue(*code_interval_seconds_) + : EncodableValue()); + list.push_back(code_length_ ? EncodableValue(*code_length_) + : EncodableValue()); + list.push_back(enrollment_completion_deadline_ + ? EncodableValue(*enrollment_completion_deadline_) + : EncodableValue()); + list.push_back(hashing_algorithm_ ? EncodableValue(*hashing_algorithm_) + : EncodableValue()); + list.push_back(EncodableValue(secret_key_)); + return list; +} + +InternalTotpSecret InternalTotpSecret::FromEncodableList( + const EncodableList& list) { + InternalTotpSecret decoded(std::get(list[4])); + auto& encodable_code_interval_seconds = list[0]; + if (!encodable_code_interval_seconds.IsNull()) { + decoded.set_code_interval_seconds( + std::get(encodable_code_interval_seconds)); + } + auto& encodable_code_length = list[1]; + if (!encodable_code_length.IsNull()) { + decoded.set_code_length(std::get(encodable_code_length)); + } + auto& encodable_enrollment_completion_deadline = list[2]; + if (!encodable_enrollment_completion_deadline.IsNull()) { + decoded.set_enrollment_completion_deadline( + std::get(encodable_enrollment_completion_deadline)); + } + auto& encodable_hashing_algorithm = list[3]; + if (!encodable_hashing_algorithm.IsNull()) { + decoded.set_hashing_algorithm( + std::get(encodable_hashing_algorithm)); + } + return decoded; +} + +bool InternalTotpSecret::operator==(const InternalTotpSecret& other) const { + return PigeonInternalDeepEquals(code_interval_seconds_, + other.code_interval_seconds_) && + PigeonInternalDeepEquals(code_length_, other.code_length_) && + PigeonInternalDeepEquals(enrollment_completion_deadline_, + other.enrollment_completion_deadline_) && + PigeonInternalDeepEquals(hashing_algorithm_, + other.hashing_algorithm_) && + PigeonInternalDeepEquals(secret_key_, other.secret_key_); +} + +bool InternalTotpSecret::operator!=(const InternalTotpSecret& other) const { + return !(*this == other); +} + +size_t InternalTotpSecret::Hash() const { + size_t result = 1; + result = result * 31 + PigeonInternalDeepHash(code_interval_seconds_); + result = result * 31 + PigeonInternalDeepHash(code_length_); + result = + result * 31 + PigeonInternalDeepHash(enrollment_completion_deadline_); + result = result * 31 + PigeonInternalDeepHash(hashing_algorithm_); + result = result * 31 + PigeonInternalDeepHash(secret_key_); + return result; +} + +size_t PigeonInternalDeepHash(const InternalTotpSecret& v) { return v.Hash(); } + +PigeonInternalCodecSerializer::PigeonInternalCodecSerializer() {} + +EncodableValue PigeonInternalCodecSerializer::ReadValueOfType( + uint8_t type, ::flutter::ByteStreamReader* stream) const { + switch (type) { + case 129: { + const auto& encodable_enum_arg = ReadValue(stream); + const int64_t enum_arg_value = + encodable_enum_arg.IsNull() ? 0 : encodable_enum_arg.LongValue(); + return encodable_enum_arg.IsNull() + ? EncodableValue() + : CustomEncodableValue( + static_cast(enum_arg_value)); + } + case 130: { + return CustomEncodableValue(InternalMultiFactorSession::FromEncodableList( + std::get(ReadValue(stream)))); + } + case 131: { + return CustomEncodableValue( + InternalPhoneMultiFactorAssertion::FromEncodableList( + std::get(ReadValue(stream)))); + } + case 132: { + return CustomEncodableValue(InternalMultiFactorInfo::FromEncodableList( + std::get(ReadValue(stream)))); + } + case 133: { + return CustomEncodableValue(AuthPigeonFirebaseApp::FromEncodableList( + std::get(ReadValue(stream)))); + } + case 134: { + return CustomEncodableValue(InternalActionCodeInfoData::FromEncodableList( + std::get(ReadValue(stream)))); + } + case 135: { + return CustomEncodableValue(InternalActionCodeInfo::FromEncodableList( + std::get(ReadValue(stream)))); + } + case 136: { + return CustomEncodableValue(InternalAdditionalUserInfo::FromEncodableList( + std::get(ReadValue(stream)))); + } + case 137: { + return CustomEncodableValue(InternalAuthCredential::FromEncodableList( + std::get(ReadValue(stream)))); + } + case 138: { + return CustomEncodableValue(InternalUserInfo::FromEncodableList( + std::get(ReadValue(stream)))); + } + case 139: { + return CustomEncodableValue(InternalUserDetails::FromEncodableList( + std::get(ReadValue(stream)))); + } + case 140: { + return CustomEncodableValue(InternalUserCredential::FromEncodableList( + std::get(ReadValue(stream)))); + } + case 141: { + return CustomEncodableValue( + InternalAuthCredentialInput::FromEncodableList( + std::get(ReadValue(stream)))); + } + case 142: { + return CustomEncodableValue(InternalActionCodeSettings::FromEncodableList( + std::get(ReadValue(stream)))); + } + case 143: { + return CustomEncodableValue( + InternalFirebaseAuthSettings::FromEncodableList( + std::get(ReadValue(stream)))); + } + case 144: { + return CustomEncodableValue(InternalSignInProvider::FromEncodableList( + std::get(ReadValue(stream)))); + } + case 145: { + return CustomEncodableValue( + InternalVerifyPhoneNumberRequest::FromEncodableList( + std::get(ReadValue(stream)))); + } + case 146: { + return CustomEncodableValue(InternalIdTokenResult::FromEncodableList( + std::get(ReadValue(stream)))); + } + case 147: { + return CustomEncodableValue(InternalUserProfile::FromEncodableList( + std::get(ReadValue(stream)))); + } + case 148: { + return CustomEncodableValue(InternalTotpSecret::FromEncodableList( + std::get(ReadValue(stream)))); + } + default: + return ::flutter::StandardCodecSerializer::ReadValueOfType(type, stream); + } +} + +void PigeonInternalCodecSerializer::WriteValue( + const EncodableValue& value, ::flutter::ByteStreamWriter* stream) const { + if (const CustomEncodableValue* custom_value = + std::get_if(&value)) { + if (custom_value->type() == typeid(ActionCodeInfoOperation)) { + stream->WriteByte(129); + WriteValue(EncodableValue(static_cast( + std::any_cast(*custom_value))), + stream); + return; + } + if (custom_value->type() == typeid(InternalMultiFactorSession)) { + stream->WriteByte(130); + WriteValue(EncodableValue( + std::any_cast(*custom_value) + .ToEncodableList()), + stream); + return; + } + if (custom_value->type() == typeid(InternalPhoneMultiFactorAssertion)) { + stream->WriteByte(131); + WriteValue( + EncodableValue( + std::any_cast(*custom_value) + .ToEncodableList()), + stream); + return; + } + if (custom_value->type() == typeid(InternalMultiFactorInfo)) { + stream->WriteByte(132); + WriteValue( + EncodableValue(std::any_cast(*custom_value) + .ToEncodableList()), + stream); + return; + } + if (custom_value->type() == typeid(AuthPigeonFirebaseApp)) { + stream->WriteByte(133); + WriteValue( + EncodableValue(std::any_cast(*custom_value) + .ToEncodableList()), + stream); + return; + } + if (custom_value->type() == typeid(InternalActionCodeInfoData)) { + stream->WriteByte(134); + WriteValue(EncodableValue( + std::any_cast(*custom_value) + .ToEncodableList()), + stream); + return; + } + if (custom_value->type() == typeid(InternalActionCodeInfo)) { + stream->WriteByte(135); + WriteValue( + EncodableValue(std::any_cast(*custom_value) + .ToEncodableList()), + stream); + return; + } + if (custom_value->type() == typeid(InternalAdditionalUserInfo)) { + stream->WriteByte(136); + WriteValue(EncodableValue( + std::any_cast(*custom_value) + .ToEncodableList()), + stream); + return; + } + if (custom_value->type() == typeid(InternalAuthCredential)) { + stream->WriteByte(137); + WriteValue( + EncodableValue(std::any_cast(*custom_value) + .ToEncodableList()), + stream); + return; + } + if (custom_value->type() == typeid(InternalUserInfo)) { + stream->WriteByte(138); + WriteValue( + EncodableValue( + std::any_cast(*custom_value).ToEncodableList()), + stream); + return; + } + if (custom_value->type() == typeid(InternalUserDetails)) { + stream->WriteByte(139); + WriteValue( + EncodableValue(std::any_cast(*custom_value) + .ToEncodableList()), + stream); + return; + } + if (custom_value->type() == typeid(InternalUserCredential)) { + stream->WriteByte(140); + WriteValue( + EncodableValue(std::any_cast(*custom_value) + .ToEncodableList()), + stream); + return; + } + if (custom_value->type() == typeid(InternalAuthCredentialInput)) { + stream->WriteByte(141); + WriteValue(EncodableValue( + std::any_cast(*custom_value) + .ToEncodableList()), + stream); + return; + } + if (custom_value->type() == typeid(InternalActionCodeSettings)) { + stream->WriteByte(142); + WriteValue(EncodableValue( + std::any_cast(*custom_value) + .ToEncodableList()), + stream); + return; + } + if (custom_value->type() == typeid(InternalFirebaseAuthSettings)) { + stream->WriteByte(143); + WriteValue(EncodableValue( + std::any_cast(*custom_value) + .ToEncodableList()), + stream); + return; + } + if (custom_value->type() == typeid(InternalSignInProvider)) { + stream->WriteByte(144); + WriteValue( + EncodableValue(std::any_cast(*custom_value) + .ToEncodableList()), + stream); + return; + } + if (custom_value->type() == typeid(InternalVerifyPhoneNumberRequest)) { + stream->WriteByte(145); + WriteValue(EncodableValue(std::any_cast( + *custom_value) + .ToEncodableList()), + stream); + return; + } + if (custom_value->type() == typeid(InternalIdTokenResult)) { + stream->WriteByte(146); + WriteValue( + EncodableValue(std::any_cast(*custom_value) + .ToEncodableList()), + stream); + return; + } + if (custom_value->type() == typeid(InternalUserProfile)) { + stream->WriteByte(147); + WriteValue( + EncodableValue(std::any_cast(*custom_value) + .ToEncodableList()), + stream); + return; + } + if (custom_value->type() == typeid(InternalTotpSecret)) { + stream->WriteByte(148); + WriteValue(EncodableValue(std::any_cast(*custom_value) + .ToEncodableList()), + stream); + return; + } + } + ::flutter::StandardCodecSerializer::WriteValue(value, stream); +} + +/// The codec used by FirebaseAuthHostApi. +const ::flutter::StandardMessageCodec& FirebaseAuthHostApi::GetCodec() { + return ::flutter::StandardMessageCodec::GetInstance( + &PigeonInternalCodecSerializer::GetInstance()); +} + +// Sets up an instance of `FirebaseAuthHostApi` to handle messages through the +// `binary_messenger`. +void FirebaseAuthHostApi::SetUp(::flutter::BinaryMessenger* binary_messenger, + FirebaseAuthHostApi* api) { + FirebaseAuthHostApi::SetUp(binary_messenger, api, ""); +} + +void FirebaseAuthHostApi::SetUp(::flutter::BinaryMessenger* binary_messenger, + FirebaseAuthHostApi* api, + const std::string& message_channel_suffix) { + const std::string prepended_suffix = + message_channel_suffix.length() > 0 + ? std::string(".") + message_channel_suffix + : ""; + { + BasicMessageChannel<> channel( + binary_messenger, + "dev.flutter.pigeon.firebase_auth_platform_interface." + "FirebaseAuthHostApi.registerIdTokenListener" + + prepended_suffix, + &GetCodec()); + if (api != nullptr) { + channel.SetMessageHandler( + [api](const EncodableValue& message, + const ::flutter::MessageReply& reply) { + try { + const auto& args = std::get(message); + const auto& encodable_app_arg = args.at(0); + if (encodable_app_arg.IsNull()) { + reply(WrapError("app_arg unexpectedly null.")); + return; + } + const auto& app_arg = std::any_cast( + std::get(encodable_app_arg)); + api->RegisterIdTokenListener( + app_arg, [reply](ErrorOr&& output) { + if (output.has_error()) { + reply(WrapError(output.error())); + return; + } + EncodableList wrapped; + wrapped.push_back( + EncodableValue(std::move(output).TakeValue())); + reply(EncodableValue(std::move(wrapped))); + }); + } catch (const std::exception& exception) { + reply(WrapError(exception.what())); + } + }); + } else { + channel.SetMessageHandler(nullptr); + } + } + { + BasicMessageChannel<> channel( + binary_messenger, + "dev.flutter.pigeon.firebase_auth_platform_interface." + "FirebaseAuthHostApi.registerAuthStateListener" + + prepended_suffix, + &GetCodec()); + if (api != nullptr) { + channel.SetMessageHandler( + [api](const EncodableValue& message, + const ::flutter::MessageReply& reply) { + try { + const auto& args = std::get(message); + const auto& encodable_app_arg = args.at(0); + if (encodable_app_arg.IsNull()) { + reply(WrapError("app_arg unexpectedly null.")); + return; + } + const auto& app_arg = std::any_cast( + std::get(encodable_app_arg)); + api->RegisterAuthStateListener( + app_arg, [reply](ErrorOr&& output) { + if (output.has_error()) { + reply(WrapError(output.error())); + return; + } + EncodableList wrapped; + wrapped.push_back( + EncodableValue(std::move(output).TakeValue())); + reply(EncodableValue(std::move(wrapped))); + }); + } catch (const std::exception& exception) { + reply(WrapError(exception.what())); + } + }); + } else { + channel.SetMessageHandler(nullptr); + } + } + { + BasicMessageChannel<> channel(binary_messenger, + "dev.flutter.pigeon.firebase_auth_platform_" + "interface.FirebaseAuthHostApi.useEmulator" + + prepended_suffix, + &GetCodec()); + if (api != nullptr) { + channel.SetMessageHandler( + [api](const EncodableValue& message, + const ::flutter::MessageReply& reply) { + try { + const auto& args = std::get(message); + const auto& encodable_app_arg = args.at(0); + if (encodable_app_arg.IsNull()) { + reply(WrapError("app_arg unexpectedly null.")); + return; + } + const auto& app_arg = std::any_cast( + std::get(encodable_app_arg)); + const auto& encodable_host_arg = args.at(1); + if (encodable_host_arg.IsNull()) { + reply(WrapError("host_arg unexpectedly null.")); + return; + } + const auto& host_arg = std::get(encodable_host_arg); + const auto& encodable_port_arg = args.at(2); + if (encodable_port_arg.IsNull()) { + reply(WrapError("port_arg unexpectedly null.")); + return; + } + const int64_t port_arg = encodable_port_arg.LongValue(); + api->UseEmulator(app_arg, host_arg, port_arg, + [reply](std::optional&& output) { + if (output.has_value()) { + reply(WrapError(output.value())); + return; + } + EncodableList wrapped; + wrapped.push_back(EncodableValue()); + reply(EncodableValue(std::move(wrapped))); + }); + } catch (const std::exception& exception) { + reply(WrapError(exception.what())); + } + }); + } else { + channel.SetMessageHandler(nullptr); + } + } + { + BasicMessageChannel<> channel( + binary_messenger, + "dev.flutter.pigeon.firebase_auth_platform_interface." + "FirebaseAuthHostApi.applyActionCode" + + prepended_suffix, + &GetCodec()); + if (api != nullptr) { + channel.SetMessageHandler( + [api](const EncodableValue& message, + const ::flutter::MessageReply& reply) { + try { + const auto& args = std::get(message); + const auto& encodable_app_arg = args.at(0); + if (encodable_app_arg.IsNull()) { + reply(WrapError("app_arg unexpectedly null.")); + return; + } + const auto& app_arg = std::any_cast( + std::get(encodable_app_arg)); + const auto& encodable_code_arg = args.at(1); + if (encodable_code_arg.IsNull()) { + reply(WrapError("code_arg unexpectedly null.")); + return; + } + const auto& code_arg = std::get(encodable_code_arg); + api->ApplyActionCode( + app_arg, code_arg, + [reply](std::optional&& output) { + if (output.has_value()) { + reply(WrapError(output.value())); + return; + } + EncodableList wrapped; + wrapped.push_back(EncodableValue()); + reply(EncodableValue(std::move(wrapped))); + }); + } catch (const std::exception& exception) { + reply(WrapError(exception.what())); + } + }); + } else { + channel.SetMessageHandler(nullptr); + } + } + { + BasicMessageChannel<> channel( + binary_messenger, + "dev.flutter.pigeon.firebase_auth_platform_interface." + "FirebaseAuthHostApi.checkActionCode" + + prepended_suffix, + &GetCodec()); + if (api != nullptr) { + channel.SetMessageHandler( + [api](const EncodableValue& message, + const ::flutter::MessageReply& reply) { + try { + const auto& args = std::get(message); + const auto& encodable_app_arg = args.at(0); + if (encodable_app_arg.IsNull()) { + reply(WrapError("app_arg unexpectedly null.")); + return; + } + const auto& app_arg = std::any_cast( + std::get(encodable_app_arg)); + const auto& encodable_code_arg = args.at(1); + if (encodable_code_arg.IsNull()) { + reply(WrapError("code_arg unexpectedly null.")); + return; + } + const auto& code_arg = std::get(encodable_code_arg); + api->CheckActionCode( + app_arg, code_arg, + [reply](ErrorOr&& output) { + if (output.has_error()) { + reply(WrapError(output.error())); + return; + } + EncodableList wrapped; + wrapped.push_back( + CustomEncodableValue(std::move(output).TakeValue())); + reply(EncodableValue(std::move(wrapped))); + }); + } catch (const std::exception& exception) { + reply(WrapError(exception.what())); + } + }); + } else { + channel.SetMessageHandler(nullptr); + } + } + { + BasicMessageChannel<> channel( + binary_messenger, + "dev.flutter.pigeon.firebase_auth_platform_interface." + "FirebaseAuthHostApi.confirmPasswordReset" + + prepended_suffix, + &GetCodec()); + if (api != nullptr) { + channel.SetMessageHandler( + [api](const EncodableValue& message, + const ::flutter::MessageReply& reply) { + try { + const auto& args = std::get(message); + const auto& encodable_app_arg = args.at(0); + if (encodable_app_arg.IsNull()) { + reply(WrapError("app_arg unexpectedly null.")); + return; + } + const auto& app_arg = std::any_cast( + std::get(encodable_app_arg)); + const auto& encodable_code_arg = args.at(1); + if (encodable_code_arg.IsNull()) { + reply(WrapError("code_arg unexpectedly null.")); + return; + } + const auto& code_arg = std::get(encodable_code_arg); + const auto& encodable_new_password_arg = args.at(2); + if (encodable_new_password_arg.IsNull()) { + reply(WrapError("new_password_arg unexpectedly null.")); + return; + } + const auto& new_password_arg = + std::get(encodable_new_password_arg); + api->ConfirmPasswordReset( + app_arg, code_arg, new_password_arg, + [reply](std::optional&& output) { + if (output.has_value()) { + reply(WrapError(output.value())); + return; + } + EncodableList wrapped; + wrapped.push_back(EncodableValue()); + reply(EncodableValue(std::move(wrapped))); + }); + } catch (const std::exception& exception) { + reply(WrapError(exception.what())); + } + }); + } else { + channel.SetMessageHandler(nullptr); + } + } + { + BasicMessageChannel<> channel( + binary_messenger, + "dev.flutter.pigeon.firebase_auth_platform_interface." + "FirebaseAuthHostApi.createUserWithEmailAndPassword" + + prepended_suffix, + &GetCodec()); + if (api != nullptr) { + channel.SetMessageHandler( + [api](const EncodableValue& message, + const ::flutter::MessageReply& reply) { + try { + const auto& args = std::get(message); + const auto& encodable_app_arg = args.at(0); + if (encodable_app_arg.IsNull()) { + reply(WrapError("app_arg unexpectedly null.")); + return; + } + const auto& app_arg = std::any_cast( + std::get(encodable_app_arg)); + const auto& encodable_email_arg = args.at(1); + if (encodable_email_arg.IsNull()) { + reply(WrapError("email_arg unexpectedly null.")); + return; + } + const auto& email_arg = + std::get(encodable_email_arg); + const auto& encodable_password_arg = args.at(2); + if (encodable_password_arg.IsNull()) { + reply(WrapError("password_arg unexpectedly null.")); + return; + } + const auto& password_arg = + std::get(encodable_password_arg); + api->CreateUserWithEmailAndPassword( + app_arg, email_arg, password_arg, + [reply](ErrorOr&& output) { + if (output.has_error()) { + reply(WrapError(output.error())); + return; + } + EncodableList wrapped; + wrapped.push_back( + CustomEncodableValue(std::move(output).TakeValue())); + reply(EncodableValue(std::move(wrapped))); + }); + } catch (const std::exception& exception) { + reply(WrapError(exception.what())); + } + }); + } else { + channel.SetMessageHandler(nullptr); + } + } + { + BasicMessageChannel<> channel( + binary_messenger, + "dev.flutter.pigeon.firebase_auth_platform_interface." + "FirebaseAuthHostApi.signInAnonymously" + + prepended_suffix, + &GetCodec()); + if (api != nullptr) { + channel.SetMessageHandler( + [api](const EncodableValue& message, + const ::flutter::MessageReply& reply) { + try { + const auto& args = std::get(message); + const auto& encodable_app_arg = args.at(0); + if (encodable_app_arg.IsNull()) { + reply(WrapError("app_arg unexpectedly null.")); + return; + } + const auto& app_arg = std::any_cast( + std::get(encodable_app_arg)); + api->SignInAnonymously( + app_arg, [reply](ErrorOr&& output) { + if (output.has_error()) { + reply(WrapError(output.error())); + return; + } + EncodableList wrapped; + wrapped.push_back( + CustomEncodableValue(std::move(output).TakeValue())); + reply(EncodableValue(std::move(wrapped))); + }); + } catch (const std::exception& exception) { + reply(WrapError(exception.what())); + } + }); + } else { + channel.SetMessageHandler(nullptr); + } + } + { + BasicMessageChannel<> channel( + binary_messenger, + "dev.flutter.pigeon.firebase_auth_platform_interface." + "FirebaseAuthHostApi.signInWithCredential" + + prepended_suffix, + &GetCodec()); + if (api != nullptr) { + channel.SetMessageHandler( + [api](const EncodableValue& message, + const ::flutter::MessageReply& reply) { + try { + const auto& args = std::get(message); + const auto& encodable_app_arg = args.at(0); + if (encodable_app_arg.IsNull()) { + reply(WrapError("app_arg unexpectedly null.")); + return; + } + const auto& app_arg = std::any_cast( + std::get(encodable_app_arg)); + const auto& encodable_input_arg = args.at(1); + if (encodable_input_arg.IsNull()) { + reply(WrapError("input_arg unexpectedly null.")); + return; + } + const auto& input_arg = + std::get(encodable_input_arg); + api->SignInWithCredential( + app_arg, input_arg, + [reply](ErrorOr&& output) { + if (output.has_error()) { + reply(WrapError(output.error())); + return; + } + EncodableList wrapped; + wrapped.push_back( + CustomEncodableValue(std::move(output).TakeValue())); + reply(EncodableValue(std::move(wrapped))); + }); + } catch (const std::exception& exception) { + reply(WrapError(exception.what())); + } + }); + } else { + channel.SetMessageHandler(nullptr); + } + } + { + BasicMessageChannel<> channel( + binary_messenger, + "dev.flutter.pigeon.firebase_auth_platform_interface." + "FirebaseAuthHostApi.signInWithCustomToken" + + prepended_suffix, + &GetCodec()); + if (api != nullptr) { + channel.SetMessageHandler( + [api](const EncodableValue& message, + const ::flutter::MessageReply& reply) { + try { + const auto& args = std::get(message); + const auto& encodable_app_arg = args.at(0); + if (encodable_app_arg.IsNull()) { + reply(WrapError("app_arg unexpectedly null.")); + return; + } + const auto& app_arg = std::any_cast( + std::get(encodable_app_arg)); + const auto& encodable_token_arg = args.at(1); + if (encodable_token_arg.IsNull()) { + reply(WrapError("token_arg unexpectedly null.")); + return; + } + const auto& token_arg = + std::get(encodable_token_arg); + api->SignInWithCustomToken( + app_arg, token_arg, + [reply](ErrorOr&& output) { + if (output.has_error()) { + reply(WrapError(output.error())); + return; + } + EncodableList wrapped; + wrapped.push_back( + CustomEncodableValue(std::move(output).TakeValue())); + reply(EncodableValue(std::move(wrapped))); + }); + } catch (const std::exception& exception) { + reply(WrapError(exception.what())); + } + }); + } else { + channel.SetMessageHandler(nullptr); + } + } + { + BasicMessageChannel<> channel( + binary_messenger, + "dev.flutter.pigeon.firebase_auth_platform_interface." + "FirebaseAuthHostApi.signInWithEmailAndPassword" + + prepended_suffix, + &GetCodec()); + if (api != nullptr) { + channel.SetMessageHandler( + [api](const EncodableValue& message, + const ::flutter::MessageReply& reply) { + try { + const auto& args = std::get(message); + const auto& encodable_app_arg = args.at(0); + if (encodable_app_arg.IsNull()) { + reply(WrapError("app_arg unexpectedly null.")); + return; + } + const auto& app_arg = std::any_cast( + std::get(encodable_app_arg)); + const auto& encodable_email_arg = args.at(1); + if (encodable_email_arg.IsNull()) { + reply(WrapError("email_arg unexpectedly null.")); + return; + } + const auto& email_arg = + std::get(encodable_email_arg); + const auto& encodable_password_arg = args.at(2); + if (encodable_password_arg.IsNull()) { + reply(WrapError("password_arg unexpectedly null.")); + return; + } + const auto& password_arg = + std::get(encodable_password_arg); + api->SignInWithEmailAndPassword( + app_arg, email_arg, password_arg, + [reply](ErrorOr&& output) { + if (output.has_error()) { + reply(WrapError(output.error())); + return; + } + EncodableList wrapped; + wrapped.push_back( + CustomEncodableValue(std::move(output).TakeValue())); + reply(EncodableValue(std::move(wrapped))); + }); + } catch (const std::exception& exception) { + reply(WrapError(exception.what())); + } + }); + } else { + channel.SetMessageHandler(nullptr); + } + } + { + BasicMessageChannel<> channel( + binary_messenger, + "dev.flutter.pigeon.firebase_auth_platform_interface." + "FirebaseAuthHostApi.signInWithEmailLink" + + prepended_suffix, + &GetCodec()); + if (api != nullptr) { + channel.SetMessageHandler( + [api](const EncodableValue& message, + const ::flutter::MessageReply& reply) { + try { + const auto& args = std::get(message); + const auto& encodable_app_arg = args.at(0); + if (encodable_app_arg.IsNull()) { + reply(WrapError("app_arg unexpectedly null.")); + return; + } + const auto& app_arg = std::any_cast( + std::get(encodable_app_arg)); + const auto& encodable_email_arg = args.at(1); + if (encodable_email_arg.IsNull()) { + reply(WrapError("email_arg unexpectedly null.")); + return; + } + const auto& email_arg = + std::get(encodable_email_arg); + const auto& encodable_email_link_arg = args.at(2); + if (encodable_email_link_arg.IsNull()) { + reply(WrapError("email_link_arg unexpectedly null.")); + return; + } + const auto& email_link_arg = + std::get(encodable_email_link_arg); + api->SignInWithEmailLink( + app_arg, email_arg, email_link_arg, + [reply](ErrorOr&& output) { + if (output.has_error()) { + reply(WrapError(output.error())); + return; + } + EncodableList wrapped; + wrapped.push_back( + CustomEncodableValue(std::move(output).TakeValue())); + reply(EncodableValue(std::move(wrapped))); + }); + } catch (const std::exception& exception) { + reply(WrapError(exception.what())); + } + }); + } else { + channel.SetMessageHandler(nullptr); + } + } + { + BasicMessageChannel<> channel( + binary_messenger, + "dev.flutter.pigeon.firebase_auth_platform_interface." + "FirebaseAuthHostApi.signInWithProvider" + + prepended_suffix, + &GetCodec()); + if (api != nullptr) { + channel.SetMessageHandler( + [api](const EncodableValue& message, + const ::flutter::MessageReply& reply) { + try { + const auto& args = std::get(message); + const auto& encodable_app_arg = args.at(0); + if (encodable_app_arg.IsNull()) { + reply(WrapError("app_arg unexpectedly null.")); + return; + } + const auto& app_arg = std::any_cast( + std::get(encodable_app_arg)); + const auto& encodable_sign_in_provider_arg = args.at(1); + if (encodable_sign_in_provider_arg.IsNull()) { + reply(WrapError("sign_in_provider_arg unexpectedly null.")); + return; + } + const auto& sign_in_provider_arg = + std::any_cast( + std::get( + encodable_sign_in_provider_arg)); + api->SignInWithProvider( + app_arg, sign_in_provider_arg, + [reply](ErrorOr&& output) { + if (output.has_error()) { + reply(WrapError(output.error())); + return; + } + EncodableList wrapped; + wrapped.push_back( + CustomEncodableValue(std::move(output).TakeValue())); + reply(EncodableValue(std::move(wrapped))); + }); + } catch (const std::exception& exception) { + reply(WrapError(exception.what())); + } + }); + } else { + channel.SetMessageHandler(nullptr); + } + } + { + BasicMessageChannel<> channel(binary_messenger, + "dev.flutter.pigeon.firebase_auth_platform_" + "interface.FirebaseAuthHostApi.signOut" + + prepended_suffix, + &GetCodec()); + if (api != nullptr) { + channel.SetMessageHandler( + [api](const EncodableValue& message, + const ::flutter::MessageReply& reply) { + try { + const auto& args = std::get(message); + const auto& encodable_app_arg = args.at(0); + if (encodable_app_arg.IsNull()) { + reply(WrapError("app_arg unexpectedly null.")); + return; + } + const auto& app_arg = std::any_cast( + std::get(encodable_app_arg)); + api->SignOut(app_arg, + [reply](std::optional&& output) { + if (output.has_value()) { + reply(WrapError(output.value())); + return; + } + EncodableList wrapped; + wrapped.push_back(EncodableValue()); + reply(EncodableValue(std::move(wrapped))); + }); + } catch (const std::exception& exception) { + reply(WrapError(exception.what())); + } + }); + } else { + channel.SetMessageHandler(nullptr); + } + } + { + BasicMessageChannel<> channel( + binary_messenger, + "dev.flutter.pigeon.firebase_auth_platform_interface." + "FirebaseAuthHostApi.fetchSignInMethodsForEmail" + + prepended_suffix, + &GetCodec()); + if (api != nullptr) { + channel.SetMessageHandler( + [api](const EncodableValue& message, + const ::flutter::MessageReply& reply) { + try { + const auto& args = std::get(message); + const auto& encodable_app_arg = args.at(0); + if (encodable_app_arg.IsNull()) { + reply(WrapError("app_arg unexpectedly null.")); + return; + } + const auto& app_arg = std::any_cast( + std::get(encodable_app_arg)); + const auto& encodable_email_arg = args.at(1); + if (encodable_email_arg.IsNull()) { + reply(WrapError("email_arg unexpectedly null.")); + return; + } + const auto& email_arg = + std::get(encodable_email_arg); + api->FetchSignInMethodsForEmail( + app_arg, email_arg, [reply](ErrorOr&& output) { + if (output.has_error()) { + reply(WrapError(output.error())); + return; + } + EncodableList wrapped; + wrapped.push_back( + EncodableValue(std::move(output).TakeValue())); + reply(EncodableValue(std::move(wrapped))); + }); + } catch (const std::exception& exception) { + reply(WrapError(exception.what())); + } + }); + } else { + channel.SetMessageHandler(nullptr); + } + } + { + BasicMessageChannel<> channel( + binary_messenger, + "dev.flutter.pigeon.firebase_auth_platform_interface." + "FirebaseAuthHostApi.sendPasswordResetEmail" + + prepended_suffix, + &GetCodec()); + if (api != nullptr) { + channel.SetMessageHandler( + [api](const EncodableValue& message, + const ::flutter::MessageReply& reply) { + try { + const auto& args = std::get(message); + const auto& encodable_app_arg = args.at(0); + if (encodable_app_arg.IsNull()) { + reply(WrapError("app_arg unexpectedly null.")); + return; + } + const auto& app_arg = std::any_cast( + std::get(encodable_app_arg)); + const auto& encodable_email_arg = args.at(1); + if (encodable_email_arg.IsNull()) { + reply(WrapError("email_arg unexpectedly null.")); + return; + } + const auto& email_arg = + std::get(encodable_email_arg); + const auto& encodable_action_code_settings_arg = args.at(2); + const auto* action_code_settings_arg = + encodable_action_code_settings_arg.IsNull() + ? nullptr + : &(std::any_cast( + std::get( + encodable_action_code_settings_arg))); + api->SendPasswordResetEmail( + app_arg, email_arg, action_code_settings_arg, + [reply](std::optional&& output) { + if (output.has_value()) { + reply(WrapError(output.value())); + return; + } + EncodableList wrapped; + wrapped.push_back(EncodableValue()); + reply(EncodableValue(std::move(wrapped))); + }); + } catch (const std::exception& exception) { + reply(WrapError(exception.what())); + } + }); + } else { + channel.SetMessageHandler(nullptr); + } + } + { + BasicMessageChannel<> channel( + binary_messenger, + "dev.flutter.pigeon.firebase_auth_platform_interface." + "FirebaseAuthHostApi.sendSignInLinkToEmail" + + prepended_suffix, + &GetCodec()); + if (api != nullptr) { + channel.SetMessageHandler( + [api](const EncodableValue& message, + const ::flutter::MessageReply& reply) { + try { + const auto& args = std::get(message); + const auto& encodable_app_arg = args.at(0); + if (encodable_app_arg.IsNull()) { + reply(WrapError("app_arg unexpectedly null.")); + return; + } + const auto& app_arg = std::any_cast( + std::get(encodable_app_arg)); + const auto& encodable_email_arg = args.at(1); + if (encodable_email_arg.IsNull()) { + reply(WrapError("email_arg unexpectedly null.")); + return; + } + const auto& email_arg = + std::get(encodable_email_arg); + const auto& encodable_action_code_settings_arg = args.at(2); + if (encodable_action_code_settings_arg.IsNull()) { + reply(WrapError("action_code_settings_arg unexpectedly null.")); + return; + } + const auto& action_code_settings_arg = + std::any_cast( + std::get( + encodable_action_code_settings_arg)); + api->SendSignInLinkToEmail( + app_arg, email_arg, action_code_settings_arg, + [reply](std::optional&& output) { + if (output.has_value()) { + reply(WrapError(output.value())); + return; + } + EncodableList wrapped; + wrapped.push_back(EncodableValue()); + reply(EncodableValue(std::move(wrapped))); + }); + } catch (const std::exception& exception) { + reply(WrapError(exception.what())); + } + }); + } else { + channel.SetMessageHandler(nullptr); + } + } + { + BasicMessageChannel<> channel( + binary_messenger, + "dev.flutter.pigeon.firebase_auth_platform_interface." + "FirebaseAuthHostApi.setLanguageCode" + + prepended_suffix, + &GetCodec()); + if (api != nullptr) { + channel.SetMessageHandler( + [api](const EncodableValue& message, + const ::flutter::MessageReply& reply) { + try { + const auto& args = std::get(message); + const auto& encodable_app_arg = args.at(0); + if (encodable_app_arg.IsNull()) { + reply(WrapError("app_arg unexpectedly null.")); + return; + } + const auto& app_arg = std::any_cast( + std::get(encodable_app_arg)); + const auto& encodable_language_code_arg = args.at(1); + const auto* language_code_arg = + std::get_if(&encodable_language_code_arg); + api->SetLanguageCode(app_arg, language_code_arg, + [reply](ErrorOr&& output) { + if (output.has_error()) { + reply(WrapError(output.error())); + return; + } + EncodableList wrapped; + wrapped.push_back(EncodableValue( + std::move(output).TakeValue())); + reply(EncodableValue(std::move(wrapped))); + }); + } catch (const std::exception& exception) { + reply(WrapError(exception.what())); + } + }); + } else { + channel.SetMessageHandler(nullptr); + } + } + { + BasicMessageChannel<> channel(binary_messenger, + "dev.flutter.pigeon.firebase_auth_platform_" + "interface.FirebaseAuthHostApi.setSettings" + + prepended_suffix, + &GetCodec()); + if (api != nullptr) { + channel.SetMessageHandler( + [api](const EncodableValue& message, + const ::flutter::MessageReply& reply) { + try { + const auto& args = std::get(message); + const auto& encodable_app_arg = args.at(0); + if (encodable_app_arg.IsNull()) { + reply(WrapError("app_arg unexpectedly null.")); + return; + } + const auto& app_arg = std::any_cast( + std::get(encodable_app_arg)); + const auto& encodable_settings_arg = args.at(1); + if (encodable_settings_arg.IsNull()) { + reply(WrapError("settings_arg unexpectedly null.")); + return; + } + const auto& settings_arg = + std::any_cast( + std::get(encodable_settings_arg)); + api->SetSettings(app_arg, settings_arg, + [reply](std::optional&& output) { + if (output.has_value()) { + reply(WrapError(output.value())); + return; + } + EncodableList wrapped; + wrapped.push_back(EncodableValue()); + reply(EncodableValue(std::move(wrapped))); + }); + } catch (const std::exception& exception) { + reply(WrapError(exception.what())); + } + }); + } else { + channel.SetMessageHandler(nullptr); + } + } + { + BasicMessageChannel<> channel( + binary_messenger, + "dev.flutter.pigeon.firebase_auth_platform_interface." + "FirebaseAuthHostApi.verifyPasswordResetCode" + + prepended_suffix, + &GetCodec()); + if (api != nullptr) { + channel.SetMessageHandler( + [api](const EncodableValue& message, + const ::flutter::MessageReply& reply) { + try { + const auto& args = std::get(message); + const auto& encodable_app_arg = args.at(0); + if (encodable_app_arg.IsNull()) { + reply(WrapError("app_arg unexpectedly null.")); + return; + } + const auto& app_arg = std::any_cast( + std::get(encodable_app_arg)); + const auto& encodable_code_arg = args.at(1); + if (encodable_code_arg.IsNull()) { + reply(WrapError("code_arg unexpectedly null.")); + return; + } + const auto& code_arg = std::get(encodable_code_arg); + api->VerifyPasswordResetCode( + app_arg, code_arg, [reply](ErrorOr&& output) { + if (output.has_error()) { + reply(WrapError(output.error())); + return; + } + EncodableList wrapped; + wrapped.push_back( + EncodableValue(std::move(output).TakeValue())); + reply(EncodableValue(std::move(wrapped))); + }); + } catch (const std::exception& exception) { + reply(WrapError(exception.what())); + } + }); + } else { + channel.SetMessageHandler(nullptr); + } + } + { + BasicMessageChannel<> channel( + binary_messenger, + "dev.flutter.pigeon.firebase_auth_platform_interface." + "FirebaseAuthHostApi.verifyPhoneNumber" + + prepended_suffix, + &GetCodec()); + if (api != nullptr) { + channel.SetMessageHandler( + [api](const EncodableValue& message, + const ::flutter::MessageReply& reply) { + try { + const auto& args = std::get(message); + const auto& encodable_app_arg = args.at(0); + if (encodable_app_arg.IsNull()) { + reply(WrapError("app_arg unexpectedly null.")); + return; + } + const auto& app_arg = std::any_cast( + std::get(encodable_app_arg)); + const auto& encodable_request_arg = args.at(1); + if (encodable_request_arg.IsNull()) { + reply(WrapError("request_arg unexpectedly null.")); + return; + } + const auto& request_arg = + std::any_cast( + std::get(encodable_request_arg)); + api->VerifyPhoneNumber( + app_arg, request_arg, [reply](ErrorOr&& output) { + if (output.has_error()) { + reply(WrapError(output.error())); + return; + } + EncodableList wrapped; + wrapped.push_back( + EncodableValue(std::move(output).TakeValue())); + reply(EncodableValue(std::move(wrapped))); + }); + } catch (const std::exception& exception) { + reply(WrapError(exception.what())); + } + }); + } else { + channel.SetMessageHandler(nullptr); + } + } + { + BasicMessageChannel<> channel( + binary_messenger, + "dev.flutter.pigeon.firebase_auth_platform_interface." + "FirebaseAuthHostApi.revokeTokenWithAuthorizationCode" + + prepended_suffix, + &GetCodec()); + if (api != nullptr) { + channel.SetMessageHandler( + [api](const EncodableValue& message, + const ::flutter::MessageReply& reply) { + try { + const auto& args = std::get(message); + const auto& encodable_app_arg = args.at(0); + if (encodable_app_arg.IsNull()) { + reply(WrapError("app_arg unexpectedly null.")); + return; + } + const auto& app_arg = std::any_cast( + std::get(encodable_app_arg)); + const auto& encodable_authorization_code_arg = args.at(1); + if (encodable_authorization_code_arg.IsNull()) { + reply(WrapError("authorization_code_arg unexpectedly null.")); + return; + } + const auto& authorization_code_arg = + std::get(encodable_authorization_code_arg); + api->RevokeTokenWithAuthorizationCode( + app_arg, authorization_code_arg, + [reply](std::optional&& output) { + if (output.has_value()) { + reply(WrapError(output.value())); + return; + } + EncodableList wrapped; + wrapped.push_back(EncodableValue()); + reply(EncodableValue(std::move(wrapped))); + }); + } catch (const std::exception& exception) { + reply(WrapError(exception.what())); + } + }); + } else { + channel.SetMessageHandler(nullptr); + } + } + { + BasicMessageChannel<> channel( + binary_messenger, + "dev.flutter.pigeon.firebase_auth_platform_interface." + "FirebaseAuthHostApi.revokeAccessToken" + + prepended_suffix, + &GetCodec()); + if (api != nullptr) { + channel.SetMessageHandler( + [api](const EncodableValue& message, + const ::flutter::MessageReply& reply) { + try { + const auto& args = std::get(message); + const auto& encodable_app_arg = args.at(0); + if (encodable_app_arg.IsNull()) { + reply(WrapError("app_arg unexpectedly null.")); + return; + } + const auto& app_arg = std::any_cast( + std::get(encodable_app_arg)); + const auto& encodable_access_token_arg = args.at(1); + if (encodable_access_token_arg.IsNull()) { + reply(WrapError("access_token_arg unexpectedly null.")); + return; + } + const auto& access_token_arg = + std::get(encodable_access_token_arg); + api->RevokeAccessToken( + app_arg, access_token_arg, + [reply](std::optional&& output) { + if (output.has_value()) { + reply(WrapError(output.value())); + return; + } + EncodableList wrapped; + wrapped.push_back(EncodableValue()); + reply(EncodableValue(std::move(wrapped))); + }); + } catch (const std::exception& exception) { + reply(WrapError(exception.what())); + } + }); + } else { + channel.SetMessageHandler(nullptr); + } + } + { + BasicMessageChannel<> channel( + binary_messenger, + "dev.flutter.pigeon.firebase_auth_platform_interface." + "FirebaseAuthHostApi.initializeRecaptchaConfig" + + prepended_suffix, + &GetCodec()); + if (api != nullptr) { + channel.SetMessageHandler( + [api](const EncodableValue& message, + const ::flutter::MessageReply& reply) { + try { + const auto& args = std::get(message); + const auto& encodable_app_arg = args.at(0); + if (encodable_app_arg.IsNull()) { + reply(WrapError("app_arg unexpectedly null.")); + return; + } + const auto& app_arg = std::any_cast( + std::get(encodable_app_arg)); + api->InitializeRecaptchaConfig( + app_arg, [reply](std::optional&& output) { + if (output.has_value()) { + reply(WrapError(output.value())); + return; + } + EncodableList wrapped; + wrapped.push_back(EncodableValue()); + reply(EncodableValue(std::move(wrapped))); + }); + } catch (const std::exception& exception) { + reply(WrapError(exception.what())); + } + }); + } else { + channel.SetMessageHandler(nullptr); + } + } +} + +EncodableValue FirebaseAuthHostApi::WrapError(std::string_view error_message) { + return EncodableValue( + EncodableList{EncodableValue(std::string(error_message)), + EncodableValue("Error"), EncodableValue()}); +} + +EncodableValue FirebaseAuthHostApi::WrapError(const FlutterError& error) { + return EncodableValue(EncodableList{EncodableValue(error.code()), + EncodableValue(error.message()), + error.details()}); +} + +/// The codec used by FirebaseAuthUserHostApi. +const ::flutter::StandardMessageCodec& FirebaseAuthUserHostApi::GetCodec() { + return ::flutter::StandardMessageCodec::GetInstance( + &PigeonInternalCodecSerializer::GetInstance()); +} + +// Sets up an instance of `FirebaseAuthUserHostApi` to handle messages through +// the `binary_messenger`. +void FirebaseAuthUserHostApi::SetUp( + ::flutter::BinaryMessenger* binary_messenger, + FirebaseAuthUserHostApi* api) { + FirebaseAuthUserHostApi::SetUp(binary_messenger, api, ""); +} + +void FirebaseAuthUserHostApi::SetUp( + ::flutter::BinaryMessenger* binary_messenger, FirebaseAuthUserHostApi* api, + const std::string& message_channel_suffix) { + const std::string prepended_suffix = + message_channel_suffix.length() > 0 + ? std::string(".") + message_channel_suffix + : ""; + { + BasicMessageChannel<> channel(binary_messenger, + "dev.flutter.pigeon.firebase_auth_platform_" + "interface.FirebaseAuthUserHostApi.delete" + + prepended_suffix, + &GetCodec()); + if (api != nullptr) { + channel.SetMessageHandler( + [api](const EncodableValue& message, + const ::flutter::MessageReply& reply) { + try { + const auto& args = std::get(message); + const auto& encodable_app_arg = args.at(0); + if (encodable_app_arg.IsNull()) { + reply(WrapError("app_arg unexpectedly null.")); + return; + } + const auto& app_arg = std::any_cast( + std::get(encodable_app_arg)); + api->Delete(app_arg, + [reply](std::optional&& output) { + if (output.has_value()) { + reply(WrapError(output.value())); + return; + } + EncodableList wrapped; + wrapped.push_back(EncodableValue()); + reply(EncodableValue(std::move(wrapped))); + }); + } catch (const std::exception& exception) { + reply(WrapError(exception.what())); + } + }); + } else { + channel.SetMessageHandler(nullptr); + } + } + { + BasicMessageChannel<> channel( + binary_messenger, + "dev.flutter.pigeon.firebase_auth_platform_interface." + "FirebaseAuthUserHostApi.getIdToken" + + prepended_suffix, + &GetCodec()); + if (api != nullptr) { + channel.SetMessageHandler( + [api](const EncodableValue& message, + const ::flutter::MessageReply& reply) { + try { + const auto& args = std::get(message); + const auto& encodable_app_arg = args.at(0); + if (encodable_app_arg.IsNull()) { + reply(WrapError("app_arg unexpectedly null.")); + return; + } + const auto& app_arg = std::any_cast( + std::get(encodable_app_arg)); + const auto& encodable_force_refresh_arg = args.at(1); + if (encodable_force_refresh_arg.IsNull()) { + reply(WrapError("force_refresh_arg unexpectedly null.")); + return; + } + const auto& force_refresh_arg = + std::get(encodable_force_refresh_arg); + api->GetIdToken(app_arg, force_refresh_arg, + [reply](ErrorOr&& output) { + if (output.has_error()) { + reply(WrapError(output.error())); + return; + } + EncodableList wrapped; + wrapped.push_back(CustomEncodableValue( + std::move(output).TakeValue())); + reply(EncodableValue(std::move(wrapped))); + }); + } catch (const std::exception& exception) { + reply(WrapError(exception.what())); + } + }); + } else { + channel.SetMessageHandler(nullptr); + } + } + { + BasicMessageChannel<> channel( + binary_messenger, + "dev.flutter.pigeon.firebase_auth_platform_interface." + "FirebaseAuthUserHostApi.linkWithCredential" + + prepended_suffix, + &GetCodec()); + if (api != nullptr) { + channel.SetMessageHandler( + [api](const EncodableValue& message, + const ::flutter::MessageReply& reply) { + try { + const auto& args = std::get(message); + const auto& encodable_app_arg = args.at(0); + if (encodable_app_arg.IsNull()) { + reply(WrapError("app_arg unexpectedly null.")); + return; + } + const auto& app_arg = std::any_cast( + std::get(encodable_app_arg)); + const auto& encodable_input_arg = args.at(1); + if (encodable_input_arg.IsNull()) { + reply(WrapError("input_arg unexpectedly null.")); + return; + } + const auto& input_arg = + std::get(encodable_input_arg); + api->LinkWithCredential( + app_arg, input_arg, + [reply](ErrorOr&& output) { + if (output.has_error()) { + reply(WrapError(output.error())); + return; + } + EncodableList wrapped; + wrapped.push_back( + CustomEncodableValue(std::move(output).TakeValue())); + reply(EncodableValue(std::move(wrapped))); + }); + } catch (const std::exception& exception) { + reply(WrapError(exception.what())); + } + }); + } else { + channel.SetMessageHandler(nullptr); + } + } + { + BasicMessageChannel<> channel( + binary_messenger, + "dev.flutter.pigeon.firebase_auth_platform_interface." + "FirebaseAuthUserHostApi.linkWithProvider" + + prepended_suffix, + &GetCodec()); + if (api != nullptr) { + channel.SetMessageHandler( + [api](const EncodableValue& message, + const ::flutter::MessageReply& reply) { + try { + const auto& args = std::get(message); + const auto& encodable_app_arg = args.at(0); + if (encodable_app_arg.IsNull()) { + reply(WrapError("app_arg unexpectedly null.")); + return; + } + const auto& app_arg = std::any_cast( + std::get(encodable_app_arg)); + const auto& encodable_sign_in_provider_arg = args.at(1); + if (encodable_sign_in_provider_arg.IsNull()) { + reply(WrapError("sign_in_provider_arg unexpectedly null.")); + return; + } + const auto& sign_in_provider_arg = + std::any_cast( + std::get( + encodable_sign_in_provider_arg)); + api->LinkWithProvider( + app_arg, sign_in_provider_arg, + [reply](ErrorOr&& output) { + if (output.has_error()) { + reply(WrapError(output.error())); + return; + } + EncodableList wrapped; + wrapped.push_back( + CustomEncodableValue(std::move(output).TakeValue())); + reply(EncodableValue(std::move(wrapped))); + }); + } catch (const std::exception& exception) { + reply(WrapError(exception.what())); + } + }); + } else { + channel.SetMessageHandler(nullptr); + } + } + { + BasicMessageChannel<> channel( + binary_messenger, + "dev.flutter.pigeon.firebase_auth_platform_interface." + "FirebaseAuthUserHostApi.reauthenticateWithCredential" + + prepended_suffix, + &GetCodec()); + if (api != nullptr) { + channel.SetMessageHandler( + [api](const EncodableValue& message, + const ::flutter::MessageReply& reply) { + try { + const auto& args = std::get(message); + const auto& encodable_app_arg = args.at(0); + if (encodable_app_arg.IsNull()) { + reply(WrapError("app_arg unexpectedly null.")); + return; + } + const auto& app_arg = std::any_cast( + std::get(encodable_app_arg)); + const auto& encodable_input_arg = args.at(1); + if (encodable_input_arg.IsNull()) { + reply(WrapError("input_arg unexpectedly null.")); + return; + } + const auto& input_arg = + std::get(encodable_input_arg); + api->ReauthenticateWithCredential( + app_arg, input_arg, + [reply](ErrorOr&& output) { + if (output.has_error()) { + reply(WrapError(output.error())); + return; + } + EncodableList wrapped; + wrapped.push_back( + CustomEncodableValue(std::move(output).TakeValue())); + reply(EncodableValue(std::move(wrapped))); + }); + } catch (const std::exception& exception) { + reply(WrapError(exception.what())); + } + }); + } else { + channel.SetMessageHandler(nullptr); + } + } + { + BasicMessageChannel<> channel( + binary_messenger, + "dev.flutter.pigeon.firebase_auth_platform_interface." + "FirebaseAuthUserHostApi.reauthenticateWithProvider" + + prepended_suffix, + &GetCodec()); + if (api != nullptr) { + channel.SetMessageHandler( + [api](const EncodableValue& message, + const ::flutter::MessageReply& reply) { + try { + const auto& args = std::get(message); + const auto& encodable_app_arg = args.at(0); + if (encodable_app_arg.IsNull()) { + reply(WrapError("app_arg unexpectedly null.")); + return; + } + const auto& app_arg = std::any_cast( + std::get(encodable_app_arg)); + const auto& encodable_sign_in_provider_arg = args.at(1); + if (encodable_sign_in_provider_arg.IsNull()) { + reply(WrapError("sign_in_provider_arg unexpectedly null.")); + return; + } + const auto& sign_in_provider_arg = + std::any_cast( + std::get( + encodable_sign_in_provider_arg)); + api->ReauthenticateWithProvider( + app_arg, sign_in_provider_arg, + [reply](ErrorOr&& output) { + if (output.has_error()) { + reply(WrapError(output.error())); + return; + } + EncodableList wrapped; + wrapped.push_back( + CustomEncodableValue(std::move(output).TakeValue())); + reply(EncodableValue(std::move(wrapped))); + }); + } catch (const std::exception& exception) { + reply(WrapError(exception.what())); + } + }); + } else { + channel.SetMessageHandler(nullptr); + } + } + { + BasicMessageChannel<> channel(binary_messenger, + "dev.flutter.pigeon.firebase_auth_platform_" + "interface.FirebaseAuthUserHostApi.reload" + + prepended_suffix, + &GetCodec()); + if (api != nullptr) { + channel.SetMessageHandler( + [api](const EncodableValue& message, + const ::flutter::MessageReply& reply) { + try { + const auto& args = std::get(message); + const auto& encodable_app_arg = args.at(0); + if (encodable_app_arg.IsNull()) { + reply(WrapError("app_arg unexpectedly null.")); + return; + } + const auto& app_arg = std::any_cast( + std::get(encodable_app_arg)); + api->Reload( + app_arg, [reply](ErrorOr&& output) { + if (output.has_error()) { + reply(WrapError(output.error())); + return; + } + EncodableList wrapped; + wrapped.push_back( + CustomEncodableValue(std::move(output).TakeValue())); + reply(EncodableValue(std::move(wrapped))); + }); + } catch (const std::exception& exception) { + reply(WrapError(exception.what())); + } + }); + } else { + channel.SetMessageHandler(nullptr); + } + } + { + BasicMessageChannel<> channel( + binary_messenger, + "dev.flutter.pigeon.firebase_auth_platform_interface." + "FirebaseAuthUserHostApi.sendEmailVerification" + + prepended_suffix, + &GetCodec()); + if (api != nullptr) { + channel.SetMessageHandler( + [api](const EncodableValue& message, + const ::flutter::MessageReply& reply) { + try { + const auto& args = std::get(message); + const auto& encodable_app_arg = args.at(0); + if (encodable_app_arg.IsNull()) { + reply(WrapError("app_arg unexpectedly null.")); + return; + } + const auto& app_arg = std::any_cast( + std::get(encodable_app_arg)); + const auto& encodable_action_code_settings_arg = args.at(1); + const auto* action_code_settings_arg = + encodable_action_code_settings_arg.IsNull() + ? nullptr + : &(std::any_cast( + std::get( + encodable_action_code_settings_arg))); + api->SendEmailVerification( + app_arg, action_code_settings_arg, + [reply](std::optional&& output) { + if (output.has_value()) { + reply(WrapError(output.value())); + return; + } + EncodableList wrapped; + wrapped.push_back(EncodableValue()); + reply(EncodableValue(std::move(wrapped))); + }); + } catch (const std::exception& exception) { + reply(WrapError(exception.what())); + } + }); + } else { + channel.SetMessageHandler(nullptr); + } + } + { + BasicMessageChannel<> channel(binary_messenger, + "dev.flutter.pigeon.firebase_auth_platform_" + "interface.FirebaseAuthUserHostApi.unlink" + + prepended_suffix, + &GetCodec()); + if (api != nullptr) { + channel.SetMessageHandler( + [api](const EncodableValue& message, + const ::flutter::MessageReply& reply) { + try { + const auto& args = std::get(message); + const auto& encodable_app_arg = args.at(0); + if (encodable_app_arg.IsNull()) { + reply(WrapError("app_arg unexpectedly null.")); + return; + } + const auto& app_arg = std::any_cast( + std::get(encodable_app_arg)); + const auto& encodable_provider_id_arg = args.at(1); + if (encodable_provider_id_arg.IsNull()) { + reply(WrapError("provider_id_arg unexpectedly null.")); + return; + } + const auto& provider_id_arg = + std::get(encodable_provider_id_arg); + api->Unlink(app_arg, provider_id_arg, + [reply](ErrorOr&& output) { + if (output.has_error()) { + reply(WrapError(output.error())); + return; + } + EncodableList wrapped; + wrapped.push_back(CustomEncodableValue( + std::move(output).TakeValue())); + reply(EncodableValue(std::move(wrapped))); + }); + } catch (const std::exception& exception) { + reply(WrapError(exception.what())); + } + }); + } else { + channel.SetMessageHandler(nullptr); + } + } + { + BasicMessageChannel<> channel( + binary_messenger, + "dev.flutter.pigeon.firebase_auth_platform_interface." + "FirebaseAuthUserHostApi.updateEmail" + + prepended_suffix, + &GetCodec()); + if (api != nullptr) { + channel.SetMessageHandler( + [api](const EncodableValue& message, + const ::flutter::MessageReply& reply) { + try { + const auto& args = std::get(message); + const auto& encodable_app_arg = args.at(0); + if (encodable_app_arg.IsNull()) { + reply(WrapError("app_arg unexpectedly null.")); + return; + } + const auto& app_arg = std::any_cast( + std::get(encodable_app_arg)); + const auto& encodable_new_email_arg = args.at(1); + if (encodable_new_email_arg.IsNull()) { + reply(WrapError("new_email_arg unexpectedly null.")); + return; + } + const auto& new_email_arg = + std::get(encodable_new_email_arg); + api->UpdateEmail(app_arg, new_email_arg, + [reply](ErrorOr&& output) { + if (output.has_error()) { + reply(WrapError(output.error())); + return; + } + EncodableList wrapped; + wrapped.push_back(CustomEncodableValue( + std::move(output).TakeValue())); + reply(EncodableValue(std::move(wrapped))); + }); + } catch (const std::exception& exception) { + reply(WrapError(exception.what())); + } + }); + } else { + channel.SetMessageHandler(nullptr); + } + } + { + BasicMessageChannel<> channel( + binary_messenger, + "dev.flutter.pigeon.firebase_auth_platform_interface." + "FirebaseAuthUserHostApi.updatePassword" + + prepended_suffix, + &GetCodec()); + if (api != nullptr) { + channel.SetMessageHandler( + [api](const EncodableValue& message, + const ::flutter::MessageReply& reply) { + try { + const auto& args = std::get(message); + const auto& encodable_app_arg = args.at(0); + if (encodable_app_arg.IsNull()) { + reply(WrapError("app_arg unexpectedly null.")); + return; + } + const auto& app_arg = std::any_cast( + std::get(encodable_app_arg)); + const auto& encodable_new_password_arg = args.at(1); + if (encodable_new_password_arg.IsNull()) { + reply(WrapError("new_password_arg unexpectedly null.")); + return; + } + const auto& new_password_arg = + std::get(encodable_new_password_arg); + api->UpdatePassword( + app_arg, new_password_arg, + [reply](ErrorOr&& output) { + if (output.has_error()) { + reply(WrapError(output.error())); + return; + } + EncodableList wrapped; + wrapped.push_back( + CustomEncodableValue(std::move(output).TakeValue())); + reply(EncodableValue(std::move(wrapped))); + }); + } catch (const std::exception& exception) { + reply(WrapError(exception.what())); + } + }); + } else { + channel.SetMessageHandler(nullptr); + } + } + { + BasicMessageChannel<> channel( + binary_messenger, + "dev.flutter.pigeon.firebase_auth_platform_interface." + "FirebaseAuthUserHostApi.updatePhoneNumber" + + prepended_suffix, + &GetCodec()); + if (api != nullptr) { + channel.SetMessageHandler( + [api](const EncodableValue& message, + const ::flutter::MessageReply& reply) { + try { + const auto& args = std::get(message); + const auto& encodable_app_arg = args.at(0); + if (encodable_app_arg.IsNull()) { + reply(WrapError("app_arg unexpectedly null.")); + return; + } + const auto& app_arg = std::any_cast( + std::get(encodable_app_arg)); + const auto& encodable_input_arg = args.at(1); + if (encodable_input_arg.IsNull()) { + reply(WrapError("input_arg unexpectedly null.")); + return; + } + const auto& input_arg = + std::get(encodable_input_arg); + api->UpdatePhoneNumber( + app_arg, input_arg, + [reply](ErrorOr&& output) { + if (output.has_error()) { + reply(WrapError(output.error())); + return; + } + EncodableList wrapped; + wrapped.push_back( + CustomEncodableValue(std::move(output).TakeValue())); + reply(EncodableValue(std::move(wrapped))); + }); + } catch (const std::exception& exception) { + reply(WrapError(exception.what())); + } + }); + } else { + channel.SetMessageHandler(nullptr); + } + } + { + BasicMessageChannel<> channel( + binary_messenger, + "dev.flutter.pigeon.firebase_auth_platform_interface." + "FirebaseAuthUserHostApi.updateProfile" + + prepended_suffix, + &GetCodec()); + if (api != nullptr) { + channel.SetMessageHandler( + [api](const EncodableValue& message, + const ::flutter::MessageReply& reply) { + try { + const auto& args = std::get(message); + const auto& encodable_app_arg = args.at(0); + if (encodable_app_arg.IsNull()) { + reply(WrapError("app_arg unexpectedly null.")); + return; + } + const auto& app_arg = std::any_cast( + std::get(encodable_app_arg)); + const auto& encodable_profile_arg = args.at(1); + if (encodable_profile_arg.IsNull()) { + reply(WrapError("profile_arg unexpectedly null.")); + return; + } + const auto& profile_arg = + std::any_cast( + std::get(encodable_profile_arg)); + api->UpdateProfile( + app_arg, profile_arg, + [reply](ErrorOr&& output) { + if (output.has_error()) { + reply(WrapError(output.error())); + return; + } + EncodableList wrapped; + wrapped.push_back( + CustomEncodableValue(std::move(output).TakeValue())); + reply(EncodableValue(std::move(wrapped))); + }); + } catch (const std::exception& exception) { + reply(WrapError(exception.what())); + } + }); + } else { + channel.SetMessageHandler(nullptr); + } + } + { + BasicMessageChannel<> channel( + binary_messenger, + "dev.flutter.pigeon.firebase_auth_platform_interface." + "FirebaseAuthUserHostApi.verifyBeforeUpdateEmail" + + prepended_suffix, + &GetCodec()); + if (api != nullptr) { + channel.SetMessageHandler( + [api](const EncodableValue& message, + const ::flutter::MessageReply& reply) { + try { + const auto& args = std::get(message); + const auto& encodable_app_arg = args.at(0); + if (encodable_app_arg.IsNull()) { + reply(WrapError("app_arg unexpectedly null.")); + return; + } + const auto& app_arg = std::any_cast( + std::get(encodable_app_arg)); + const auto& encodable_new_email_arg = args.at(1); + if (encodable_new_email_arg.IsNull()) { + reply(WrapError("new_email_arg unexpectedly null.")); + return; + } + const auto& new_email_arg = + std::get(encodable_new_email_arg); + const auto& encodable_action_code_settings_arg = args.at(2); + const auto* action_code_settings_arg = + encodable_action_code_settings_arg.IsNull() + ? nullptr + : &(std::any_cast( + std::get( + encodable_action_code_settings_arg))); + api->VerifyBeforeUpdateEmail( + app_arg, new_email_arg, action_code_settings_arg, + [reply](std::optional&& output) { + if (output.has_value()) { + reply(WrapError(output.value())); + return; + } + EncodableList wrapped; + wrapped.push_back(EncodableValue()); + reply(EncodableValue(std::move(wrapped))); + }); + } catch (const std::exception& exception) { + reply(WrapError(exception.what())); + } + }); + } else { + channel.SetMessageHandler(nullptr); + } + } +} + +EncodableValue FirebaseAuthUserHostApi::WrapError( + std::string_view error_message) { + return EncodableValue( + EncodableList{EncodableValue(std::string(error_message)), + EncodableValue("Error"), EncodableValue()}); +} + +EncodableValue FirebaseAuthUserHostApi::WrapError(const FlutterError& error) { + return EncodableValue(EncodableList{EncodableValue(error.code()), + EncodableValue(error.message()), + error.details()}); +} + +/// The codec used by MultiFactorUserHostApi. +const ::flutter::StandardMessageCodec& MultiFactorUserHostApi::GetCodec() { + return ::flutter::StandardMessageCodec::GetInstance( + &PigeonInternalCodecSerializer::GetInstance()); +} + +// Sets up an instance of `MultiFactorUserHostApi` to handle messages through +// the `binary_messenger`. +void MultiFactorUserHostApi::SetUp(::flutter::BinaryMessenger* binary_messenger, + MultiFactorUserHostApi* api) { + MultiFactorUserHostApi::SetUp(binary_messenger, api, ""); +} + +void MultiFactorUserHostApi::SetUp(::flutter::BinaryMessenger* binary_messenger, + MultiFactorUserHostApi* api, + const std::string& message_channel_suffix) { + const std::string prepended_suffix = + message_channel_suffix.length() > 0 + ? std::string(".") + message_channel_suffix + : ""; + { + BasicMessageChannel<> channel( + binary_messenger, + "dev.flutter.pigeon.firebase_auth_platform_interface." + "MultiFactorUserHostApi.enrollPhone" + + prepended_suffix, + &GetCodec()); + if (api != nullptr) { + channel.SetMessageHandler( + [api](const EncodableValue& message, + const ::flutter::MessageReply& reply) { + try { + const auto& args = std::get(message); + const auto& encodable_app_arg = args.at(0); + if (encodable_app_arg.IsNull()) { + reply(WrapError("app_arg unexpectedly null.")); + return; + } + const auto& app_arg = std::any_cast( + std::get(encodable_app_arg)); + const auto& encodable_assertion_arg = args.at(1); + if (encodable_assertion_arg.IsNull()) { + reply(WrapError("assertion_arg unexpectedly null.")); + return; + } + const auto& assertion_arg = + std::any_cast( + std::get(encodable_assertion_arg)); + const auto& encodable_display_name_arg = args.at(2); + const auto* display_name_arg = + std::get_if(&encodable_display_name_arg); + api->EnrollPhone(app_arg, assertion_arg, display_name_arg, + [reply](std::optional&& output) { + if (output.has_value()) { + reply(WrapError(output.value())); + return; + } + EncodableList wrapped; + wrapped.push_back(EncodableValue()); + reply(EncodableValue(std::move(wrapped))); + }); + } catch (const std::exception& exception) { + reply(WrapError(exception.what())); + } + }); + } else { + channel.SetMessageHandler(nullptr); + } + } + { + BasicMessageChannel<> channel( + binary_messenger, + "dev.flutter.pigeon.firebase_auth_platform_interface." + "MultiFactorUserHostApi.enrollTotp" + + prepended_suffix, + &GetCodec()); + if (api != nullptr) { + channel.SetMessageHandler( + [api](const EncodableValue& message, + const ::flutter::MessageReply& reply) { + try { + const auto& args = std::get(message); + const auto& encodable_app_arg = args.at(0); + if (encodable_app_arg.IsNull()) { + reply(WrapError("app_arg unexpectedly null.")); + return; + } + const auto& app_arg = std::any_cast( + std::get(encodable_app_arg)); + const auto& encodable_assertion_id_arg = args.at(1); + if (encodable_assertion_id_arg.IsNull()) { + reply(WrapError("assertion_id_arg unexpectedly null.")); + return; + } + const auto& assertion_id_arg = + std::get(encodable_assertion_id_arg); + const auto& encodable_display_name_arg = args.at(2); + const auto* display_name_arg = + std::get_if(&encodable_display_name_arg); + api->EnrollTotp(app_arg, assertion_id_arg, display_name_arg, + [reply](std::optional&& output) { + if (output.has_value()) { + reply(WrapError(output.value())); + return; + } + EncodableList wrapped; + wrapped.push_back(EncodableValue()); + reply(EncodableValue(std::move(wrapped))); + }); + } catch (const std::exception& exception) { + reply(WrapError(exception.what())); + } + }); + } else { + channel.SetMessageHandler(nullptr); + } + } + { + BasicMessageChannel<> channel( + binary_messenger, + "dev.flutter.pigeon.firebase_auth_platform_interface." + "MultiFactorUserHostApi.getSession" + + prepended_suffix, + &GetCodec()); + if (api != nullptr) { + channel.SetMessageHandler( + [api](const EncodableValue& message, + const ::flutter::MessageReply& reply) { + try { + const auto& args = std::get(message); + const auto& encodable_app_arg = args.at(0); + if (encodable_app_arg.IsNull()) { + reply(WrapError("app_arg unexpectedly null.")); + return; + } + const auto& app_arg = std::any_cast( + std::get(encodable_app_arg)); + api->GetSession( + app_arg, + [reply](ErrorOr&& output) { + if (output.has_error()) { + reply(WrapError(output.error())); + return; + } + EncodableList wrapped; + wrapped.push_back( + CustomEncodableValue(std::move(output).TakeValue())); + reply(EncodableValue(std::move(wrapped))); + }); + } catch (const std::exception& exception) { + reply(WrapError(exception.what())); + } + }); + } else { + channel.SetMessageHandler(nullptr); + } + } + { + BasicMessageChannel<> channel(binary_messenger, + "dev.flutter.pigeon.firebase_auth_platform_" + "interface.MultiFactorUserHostApi.unenroll" + + prepended_suffix, + &GetCodec()); + if (api != nullptr) { + channel.SetMessageHandler( + [api](const EncodableValue& message, + const ::flutter::MessageReply& reply) { + try { + const auto& args = std::get(message); + const auto& encodable_app_arg = args.at(0); + if (encodable_app_arg.IsNull()) { + reply(WrapError("app_arg unexpectedly null.")); + return; + } + const auto& app_arg = std::any_cast( + std::get(encodable_app_arg)); + const auto& encodable_factor_uid_arg = args.at(1); + if (encodable_factor_uid_arg.IsNull()) { + reply(WrapError("factor_uid_arg unexpectedly null.")); + return; + } + const auto& factor_uid_arg = + std::get(encodable_factor_uid_arg); + api->Unenroll(app_arg, factor_uid_arg, + [reply](std::optional&& output) { + if (output.has_value()) { + reply(WrapError(output.value())); + return; + } + EncodableList wrapped; + wrapped.push_back(EncodableValue()); + reply(EncodableValue(std::move(wrapped))); + }); + } catch (const std::exception& exception) { + reply(WrapError(exception.what())); + } + }); + } else { + channel.SetMessageHandler(nullptr); + } + } + { + BasicMessageChannel<> channel( + binary_messenger, + "dev.flutter.pigeon.firebase_auth_platform_interface." + "MultiFactorUserHostApi.getEnrolledFactors" + + prepended_suffix, + &GetCodec()); + if (api != nullptr) { + channel.SetMessageHandler( + [api](const EncodableValue& message, + const ::flutter::MessageReply& reply) { + try { + const auto& args = std::get(message); + const auto& encodable_app_arg = args.at(0); + if (encodable_app_arg.IsNull()) { + reply(WrapError("app_arg unexpectedly null.")); + return; + } + const auto& app_arg = std::any_cast( + std::get(encodable_app_arg)); + api->GetEnrolledFactors( + app_arg, [reply](ErrorOr&& output) { + if (output.has_error()) { + reply(WrapError(output.error())); + return; + } + EncodableList wrapped; + wrapped.push_back( + EncodableValue(std::move(output).TakeValue())); + reply(EncodableValue(std::move(wrapped))); + }); + } catch (const std::exception& exception) { + reply(WrapError(exception.what())); + } + }); + } else { + channel.SetMessageHandler(nullptr); + } + } +} + +EncodableValue MultiFactorUserHostApi::WrapError( + std::string_view error_message) { + return EncodableValue( + EncodableList{EncodableValue(std::string(error_message)), + EncodableValue("Error"), EncodableValue()}); +} + +EncodableValue MultiFactorUserHostApi::WrapError(const FlutterError& error) { + return EncodableValue(EncodableList{EncodableValue(error.code()), + EncodableValue(error.message()), + error.details()}); +} + +/// The codec used by MultiFactoResolverHostApi. +const ::flutter::StandardMessageCodec& MultiFactoResolverHostApi::GetCodec() { + return ::flutter::StandardMessageCodec::GetInstance( + &PigeonInternalCodecSerializer::GetInstance()); +} + +// Sets up an instance of `MultiFactoResolverHostApi` to handle messages through +// the `binary_messenger`. +void MultiFactoResolverHostApi::SetUp( + ::flutter::BinaryMessenger* binary_messenger, + MultiFactoResolverHostApi* api) { + MultiFactoResolverHostApi::SetUp(binary_messenger, api, ""); +} + +void MultiFactoResolverHostApi::SetUp( + ::flutter::BinaryMessenger* binary_messenger, + MultiFactoResolverHostApi* api, const std::string& message_channel_suffix) { + const std::string prepended_suffix = + message_channel_suffix.length() > 0 + ? std::string(".") + message_channel_suffix + : ""; + { + BasicMessageChannel<> channel( + binary_messenger, + "dev.flutter.pigeon.firebase_auth_platform_interface." + "MultiFactoResolverHostApi.resolveSignIn" + + prepended_suffix, + &GetCodec()); + if (api != nullptr) { + channel.SetMessageHandler([api](const EncodableValue& message, + const ::flutter::MessageReply< + EncodableValue>& reply) { + try { + const auto& args = std::get(message); + const auto& encodable_resolver_id_arg = args.at(0); + if (encodable_resolver_id_arg.IsNull()) { + reply(WrapError("resolver_id_arg unexpectedly null.")); + return; + } + const auto& resolver_id_arg = + std::get(encodable_resolver_id_arg); + const auto& encodable_assertion_arg = args.at(1); + const auto* assertion_arg = + encodable_assertion_arg.IsNull() + ? nullptr + : &(std::any_cast( + std::get( + encodable_assertion_arg))); + const auto& encodable_totp_assertion_id_arg = args.at(2); + const auto* totp_assertion_id_arg = + std::get_if(&encodable_totp_assertion_id_arg); + api->ResolveSignIn( + resolver_id_arg, assertion_arg, totp_assertion_id_arg, + [reply](ErrorOr&& output) { + if (output.has_error()) { + reply(WrapError(output.error())); + return; + } + EncodableList wrapped; + wrapped.push_back( + CustomEncodableValue(std::move(output).TakeValue())); + reply(EncodableValue(std::move(wrapped))); + }); + } catch (const std::exception& exception) { + reply(WrapError(exception.what())); + } + }); + } else { + channel.SetMessageHandler(nullptr); + } + } +} + +EncodableValue MultiFactoResolverHostApi::WrapError( + std::string_view error_message) { + return EncodableValue( + EncodableList{EncodableValue(std::string(error_message)), + EncodableValue("Error"), EncodableValue()}); +} + +EncodableValue MultiFactoResolverHostApi::WrapError(const FlutterError& error) { + return EncodableValue(EncodableList{EncodableValue(error.code()), + EncodableValue(error.message()), + error.details()}); +} + +/// The codec used by MultiFactorTotpHostApi. +const ::flutter::StandardMessageCodec& MultiFactorTotpHostApi::GetCodec() { + return ::flutter::StandardMessageCodec::GetInstance( + &PigeonInternalCodecSerializer::GetInstance()); +} + +// Sets up an instance of `MultiFactorTotpHostApi` to handle messages through +// the `binary_messenger`. +void MultiFactorTotpHostApi::SetUp(::flutter::BinaryMessenger* binary_messenger, + MultiFactorTotpHostApi* api) { + MultiFactorTotpHostApi::SetUp(binary_messenger, api, ""); +} + +void MultiFactorTotpHostApi::SetUp(::flutter::BinaryMessenger* binary_messenger, + MultiFactorTotpHostApi* api, + const std::string& message_channel_suffix) { + const std::string prepended_suffix = + message_channel_suffix.length() > 0 + ? std::string(".") + message_channel_suffix + : ""; + { + BasicMessageChannel<> channel( + binary_messenger, + "dev.flutter.pigeon.firebase_auth_platform_interface." + "MultiFactorTotpHostApi.generateSecret" + + prepended_suffix, + &GetCodec()); + if (api != nullptr) { + channel.SetMessageHandler( + [api](const EncodableValue& message, + const ::flutter::MessageReply& reply) { + try { + const auto& args = std::get(message); + const auto& encodable_session_id_arg = args.at(0); + if (encodable_session_id_arg.IsNull()) { + reply(WrapError("session_id_arg unexpectedly null.")); + return; + } + const auto& session_id_arg = + std::get(encodable_session_id_arg); + api->GenerateSecret( + session_id_arg, + [reply](ErrorOr&& output) { + if (output.has_error()) { + reply(WrapError(output.error())); + return; + } + EncodableList wrapped; + wrapped.push_back( + CustomEncodableValue(std::move(output).TakeValue())); + reply(EncodableValue(std::move(wrapped))); + }); + } catch (const std::exception& exception) { + reply(WrapError(exception.what())); + } + }); + } else { + channel.SetMessageHandler(nullptr); + } + } + { + BasicMessageChannel<> channel( + binary_messenger, + "dev.flutter.pigeon.firebase_auth_platform_interface." + "MultiFactorTotpHostApi.getAssertionForEnrollment" + + prepended_suffix, + &GetCodec()); + if (api != nullptr) { + channel.SetMessageHandler( + [api](const EncodableValue& message, + const ::flutter::MessageReply& reply) { + try { + const auto& args = std::get(message); + const auto& encodable_secret_key_arg = args.at(0); + if (encodable_secret_key_arg.IsNull()) { + reply(WrapError("secret_key_arg unexpectedly null.")); + return; + } + const auto& secret_key_arg = + std::get(encodable_secret_key_arg); + const auto& encodable_one_time_password_arg = args.at(1); + if (encodable_one_time_password_arg.IsNull()) { + reply(WrapError("one_time_password_arg unexpectedly null.")); + return; + } + const auto& one_time_password_arg = + std::get(encodable_one_time_password_arg); + api->GetAssertionForEnrollment( + secret_key_arg, one_time_password_arg, + [reply](ErrorOr&& output) { + if (output.has_error()) { + reply(WrapError(output.error())); + return; + } + EncodableList wrapped; + wrapped.push_back( + EncodableValue(std::move(output).TakeValue())); + reply(EncodableValue(std::move(wrapped))); + }); + } catch (const std::exception& exception) { + reply(WrapError(exception.what())); + } + }); + } else { + channel.SetMessageHandler(nullptr); + } + } + { + BasicMessageChannel<> channel( + binary_messenger, + "dev.flutter.pigeon.firebase_auth_platform_interface." + "MultiFactorTotpHostApi.getAssertionForSignIn" + + prepended_suffix, + &GetCodec()); + if (api != nullptr) { + channel.SetMessageHandler( + [api](const EncodableValue& message, + const ::flutter::MessageReply& reply) { + try { + const auto& args = std::get(message); + const auto& encodable_enrollment_id_arg = args.at(0); + if (encodable_enrollment_id_arg.IsNull()) { + reply(WrapError("enrollment_id_arg unexpectedly null.")); + return; + } + const auto& enrollment_id_arg = + std::get(encodable_enrollment_id_arg); + const auto& encodable_one_time_password_arg = args.at(1); + if (encodable_one_time_password_arg.IsNull()) { + reply(WrapError("one_time_password_arg unexpectedly null.")); + return; + } + const auto& one_time_password_arg = + std::get(encodable_one_time_password_arg); + api->GetAssertionForSignIn( + enrollment_id_arg, one_time_password_arg, + [reply](ErrorOr&& output) { + if (output.has_error()) { + reply(WrapError(output.error())); + return; + } + EncodableList wrapped; + wrapped.push_back( + EncodableValue(std::move(output).TakeValue())); + reply(EncodableValue(std::move(wrapped))); + }); + } catch (const std::exception& exception) { + reply(WrapError(exception.what())); + } + }); + } else { + channel.SetMessageHandler(nullptr); + } + } +} + +EncodableValue MultiFactorTotpHostApi::WrapError( + std::string_view error_message) { + return EncodableValue( + EncodableList{EncodableValue(std::string(error_message)), + EncodableValue("Error"), EncodableValue()}); +} + +EncodableValue MultiFactorTotpHostApi::WrapError(const FlutterError& error) { + return EncodableValue(EncodableList{EncodableValue(error.code()), + EncodableValue(error.message()), + error.details()}); +} + +/// The codec used by MultiFactorTotpSecretHostApi. +const ::flutter::StandardMessageCodec& +MultiFactorTotpSecretHostApi::GetCodec() { + return ::flutter::StandardMessageCodec::GetInstance( + &PigeonInternalCodecSerializer::GetInstance()); +} + +// Sets up an instance of `MultiFactorTotpSecretHostApi` to handle messages +// through the `binary_messenger`. +void MultiFactorTotpSecretHostApi::SetUp( + ::flutter::BinaryMessenger* binary_messenger, + MultiFactorTotpSecretHostApi* api) { + MultiFactorTotpSecretHostApi::SetUp(binary_messenger, api, ""); +} + +void MultiFactorTotpSecretHostApi::SetUp( + ::flutter::BinaryMessenger* binary_messenger, + MultiFactorTotpSecretHostApi* api, + const std::string& message_channel_suffix) { + const std::string prepended_suffix = + message_channel_suffix.length() > 0 + ? std::string(".") + message_channel_suffix + : ""; + { + BasicMessageChannel<> channel( + binary_messenger, + "dev.flutter.pigeon.firebase_auth_platform_interface." + "MultiFactorTotpSecretHostApi.generateQrCodeUrl" + + prepended_suffix, + &GetCodec()); + if (api != nullptr) { + channel.SetMessageHandler( + [api](const EncodableValue& message, + const ::flutter::MessageReply& reply) { + try { + const auto& args = std::get(message); + const auto& encodable_secret_key_arg = args.at(0); + if (encodable_secret_key_arg.IsNull()) { + reply(WrapError("secret_key_arg unexpectedly null.")); + return; + } + const auto& secret_key_arg = + std::get(encodable_secret_key_arg); + const auto& encodable_account_name_arg = args.at(1); + const auto* account_name_arg = + std::get_if(&encodable_account_name_arg); + const auto& encodable_issuer_arg = args.at(2); + const auto* issuer_arg = + std::get_if(&encodable_issuer_arg); + api->GenerateQrCodeUrl( + secret_key_arg, account_name_arg, issuer_arg, + [reply](ErrorOr&& output) { + if (output.has_error()) { + reply(WrapError(output.error())); + return; + } + EncodableList wrapped; + wrapped.push_back( + EncodableValue(std::move(output).TakeValue())); + reply(EncodableValue(std::move(wrapped))); + }); + } catch (const std::exception& exception) { + reply(WrapError(exception.what())); + } + }); + } else { + channel.SetMessageHandler(nullptr); + } + } + { + BasicMessageChannel<> channel( + binary_messenger, + "dev.flutter.pigeon.firebase_auth_platform_interface." + "MultiFactorTotpSecretHostApi.openInOtpApp" + + prepended_suffix, + &GetCodec()); + if (api != nullptr) { + channel.SetMessageHandler( + [api](const EncodableValue& message, + const ::flutter::MessageReply& reply) { + try { + const auto& args = std::get(message); + const auto& encodable_secret_key_arg = args.at(0); + if (encodable_secret_key_arg.IsNull()) { + reply(WrapError("secret_key_arg unexpectedly null.")); + return; + } + const auto& secret_key_arg = + std::get(encodable_secret_key_arg); + const auto& encodable_qr_code_url_arg = args.at(1); + if (encodable_qr_code_url_arg.IsNull()) { + reply(WrapError("qr_code_url_arg unexpectedly null.")); + return; + } + const auto& qr_code_url_arg = + std::get(encodable_qr_code_url_arg); + api->OpenInOtpApp(secret_key_arg, qr_code_url_arg, + [reply](std::optional&& output) { + if (output.has_value()) { + reply(WrapError(output.value())); + return; + } + EncodableList wrapped; + wrapped.push_back(EncodableValue()); + reply(EncodableValue(std::move(wrapped))); + }); + } catch (const std::exception& exception) { + reply(WrapError(exception.what())); + } + }); + } else { + channel.SetMessageHandler(nullptr); + } + } +} + +EncodableValue MultiFactorTotpSecretHostApi::WrapError( + std::string_view error_message) { + return EncodableValue( + EncodableList{EncodableValue(std::string(error_message)), + EncodableValue("Error"), EncodableValue()}); +} + +EncodableValue MultiFactorTotpSecretHostApi::WrapError( + const FlutterError& error) { + return EncodableValue(EncodableList{EncodableValue(error.code()), + EncodableValue(error.message()), + error.details()}); +} + +/// The codec used by GenerateInterfaces. +const ::flutter::StandardMessageCodec& GenerateInterfaces::GetCodec() { + return ::flutter::StandardMessageCodec::GetInstance( + &PigeonInternalCodecSerializer::GetInstance()); +} + +// Sets up an instance of `GenerateInterfaces` to handle messages through the +// `binary_messenger`. +void GenerateInterfaces::SetUp(::flutter::BinaryMessenger* binary_messenger, + GenerateInterfaces* api) { + GenerateInterfaces::SetUp(binary_messenger, api, ""); +} + +void GenerateInterfaces::SetUp(::flutter::BinaryMessenger* binary_messenger, + GenerateInterfaces* api, + const std::string& message_channel_suffix) { + const std::string prepended_suffix = + message_channel_suffix.length() > 0 + ? std::string(".") + message_channel_suffix + : ""; + { + BasicMessageChannel<> channel( + binary_messenger, + "dev.flutter.pigeon.firebase_auth_platform_interface." + "GenerateInterfaces.pigeonInterface" + + prepended_suffix, + &GetCodec()); + if (api != nullptr) { + channel.SetMessageHandler( + [api](const EncodableValue& message, + const ::flutter::MessageReply& reply) { + try { + const auto& args = std::get(message); + const auto& encodable_info_arg = args.at(0); + if (encodable_info_arg.IsNull()) { + reply(WrapError("info_arg unexpectedly null.")); + return; + } + const auto& info_arg = + std::any_cast( + std::get(encodable_info_arg)); + std::optional output = + api->PigeonInterface(info_arg); + if (output.has_value()) { + reply(WrapError(output.value())); + return; + } + EncodableList wrapped; + wrapped.push_back(EncodableValue()); + reply(EncodableValue(std::move(wrapped))); + } catch (const std::exception& exception) { + reply(WrapError(exception.what())); + } + }); + } else { + channel.SetMessageHandler(nullptr); + } + } +} + +EncodableValue GenerateInterfaces::WrapError(std::string_view error_message) { + return EncodableValue( + EncodableList{EncodableValue(std::string(error_message)), + EncodableValue("Error"), EncodableValue()}); +} + +EncodableValue GenerateInterfaces::WrapError(const FlutterError& error) { + return EncodableValue(EncodableList{EncodableValue(error.code()), + EncodableValue(error.message()), + error.details()}); +} + +} // namespace firebase_auth_windows diff --git a/mih_ui/android/build/macos/SourcePackages/firebase_auth-6.5.4/windows/messages.g.h b/mih_ui/android/build/macos/SourcePackages/firebase_auth-6.5.4/windows/messages.g.h new file mode 100644 index 00000000..e1e1af02 --- /dev/null +++ b/mih_ui/android/build/macos/SourcePackages/firebase_auth-6.5.4/windows/messages.g.h @@ -0,0 +1,1531 @@ +// Copyright 2023, the Chromium project authors. Please see the AUTHORS file +// for details. All rights reserved. Use of this source code is governed by a +// BSD-style license that can be found in the LICENSE file. +// Autogenerated from Pigeon (v26.3.4), do not edit directly. +// See also: https://pub.dev/packages/pigeon + +#ifndef PIGEON_MESSAGES_G_H_ +#define PIGEON_MESSAGES_G_H_ +#include +#include +#include +#include + +#include +#include +#include + +namespace firebase_auth_windows { + +// Generated class from Pigeon. + +class FlutterError { + public: + explicit FlutterError(const std::string& code) : code_(code) {} + explicit FlutterError(const std::string& code, const std::string& message) + : code_(code), message_(message) {} + explicit FlutterError(const std::string& code, const std::string& message, + const ::flutter::EncodableValue& details) + : code_(code), message_(message), details_(details) {} + + const std::string& code() const { return code_; } + const std::string& message() const { return message_; } + const ::flutter::EncodableValue& details() const { return details_; } + + private: + std::string code_; + std::string message_; + ::flutter::EncodableValue details_; +}; + +template +class ErrorOr { + public: + ErrorOr(const T& rhs) : v_(rhs) {} + ErrorOr(const T&& rhs) : v_(std::move(rhs)) {} + ErrorOr(const FlutterError& rhs) : v_(rhs) {} + ErrorOr(const FlutterError&& rhs) : v_(std::move(rhs)) {} + + bool has_error() const { return std::holds_alternative(v_); } + const T& value() const { return std::get(v_); }; + const FlutterError& error() const { return std::get(v_); }; + + private: + friend class FirebaseAuthHostApi; + friend class FirebaseAuthUserHostApi; + friend class MultiFactorUserHostApi; + friend class MultiFactoResolverHostApi; + friend class MultiFactorTotpHostApi; + friend class MultiFactorTotpSecretHostApi; + friend class GenerateInterfaces; + ErrorOr() = default; + T TakeValue() && { return std::get(std::move(v_)); } + + std::variant v_; +}; + +// The type of operation that generated the action code from calling +// [checkActionCode]. +enum class ActionCodeInfoOperation { + // Unknown operation. + kUnknown = 0, + // Password reset code generated via [sendPasswordResetEmail]. + kPasswordReset = 1, + // Email verification code generated via [User.sendEmailVerification]. + kVerifyEmail = 2, + // Email change revocation code generated via [User.updateEmail]. + kRecoverEmail = 3, + // Email sign in code generated via [sendSignInLinkToEmail]. + kEmailSignIn = 4, + // Verify and change email code generated via [User.verifyBeforeUpdateEmail]. + kVerifyAndChangeEmail = 5, + // Action code for reverting second factor addition. + kRevertSecondFactorAddition = 6 +}; + +// Generated class from Pigeon that represents data sent in messages. +class InternalMultiFactorSession { + public: + // Constructs an object setting all fields. + explicit InternalMultiFactorSession(const std::string& id); + + const std::string& id() const; + void set_id(std::string_view value_arg); + + bool operator==(const InternalMultiFactorSession& other) const; + bool operator!=(const InternalMultiFactorSession& other) const; + /// Returns a hash code value for the object. This method is supported for the + /// benefit of hash tables. + size_t Hash() const; + + private: + static InternalMultiFactorSession FromEncodableList( + const ::flutter::EncodableList& list); + + public: + ::flutter::EncodableList ToEncodableList() const; + + private: + friend class FirebaseAuthHostApi; + friend class FirebaseAuthUserHostApi; + friend class MultiFactorUserHostApi; + friend class MultiFactoResolverHostApi; + friend class MultiFactorTotpHostApi; + friend class MultiFactorTotpSecretHostApi; + friend class GenerateInterfaces; + friend class PigeonInternalCodecSerializer; + std::string id_; +}; + +// Generated class from Pigeon that represents data sent in messages. +class InternalPhoneMultiFactorAssertion { + public: + // Constructs an object setting all fields. + explicit InternalPhoneMultiFactorAssertion( + const std::string& verification_id, const std::string& verification_code); + + const std::string& verification_id() const; + void set_verification_id(std::string_view value_arg); + + const std::string& verification_code() const; + void set_verification_code(std::string_view value_arg); + + bool operator==(const InternalPhoneMultiFactorAssertion& other) const; + bool operator!=(const InternalPhoneMultiFactorAssertion& other) const; + /// Returns a hash code value for the object. This method is supported for the + /// benefit of hash tables. + size_t Hash() const; + + private: + static InternalPhoneMultiFactorAssertion FromEncodableList( + const ::flutter::EncodableList& list); + + public: + ::flutter::EncodableList ToEncodableList() const; + + private: + friend class FirebaseAuthHostApi; + friend class FirebaseAuthUserHostApi; + friend class MultiFactorUserHostApi; + friend class MultiFactoResolverHostApi; + friend class MultiFactorTotpHostApi; + friend class MultiFactorTotpSecretHostApi; + friend class GenerateInterfaces; + friend class PigeonInternalCodecSerializer; + std::string verification_id_; + std::string verification_code_; +}; + +// Generated class from Pigeon that represents data sent in messages. +class InternalMultiFactorInfo { + public: + // Constructs an object setting all non-nullable fields. + explicit InternalMultiFactorInfo(double enrollment_timestamp, + const std::string& uid); + + // Constructs an object setting all fields. + explicit InternalMultiFactorInfo(const std::string* display_name, + double enrollment_timestamp, + const std::string* factor_id, + const std::string& uid, + const std::string* phone_number); + + const std::string* display_name() const; + void set_display_name(const std::string_view* value_arg); + void set_display_name(std::string_view value_arg); + + double enrollment_timestamp() const; + void set_enrollment_timestamp(double value_arg); + + const std::string* factor_id() const; + void set_factor_id(const std::string_view* value_arg); + void set_factor_id(std::string_view value_arg); + + const std::string& uid() const; + void set_uid(std::string_view value_arg); + + const std::string* phone_number() const; + void set_phone_number(const std::string_view* value_arg); + void set_phone_number(std::string_view value_arg); + + bool operator==(const InternalMultiFactorInfo& other) const; + bool operator!=(const InternalMultiFactorInfo& other) const; + /// Returns a hash code value for the object. This method is supported for the + /// benefit of hash tables. + size_t Hash() const; + + private: + static InternalMultiFactorInfo FromEncodableList( + const ::flutter::EncodableList& list); + + public: + ::flutter::EncodableList ToEncodableList() const; + + private: + friend class FirebaseAuthHostApi; + friend class FirebaseAuthUserHostApi; + friend class MultiFactorUserHostApi; + friend class MultiFactoResolverHostApi; + friend class MultiFactorTotpHostApi; + friend class MultiFactorTotpSecretHostApi; + friend class GenerateInterfaces; + friend class PigeonInternalCodecSerializer; + std::optional display_name_; + double enrollment_timestamp_; + std::optional factor_id_; + std::string uid_; + std::optional phone_number_; +}; + +// Generated class from Pigeon that represents data sent in messages. +class AuthPigeonFirebaseApp { + public: + // Constructs an object setting all non-nullable fields. + explicit AuthPigeonFirebaseApp(const std::string& app_name); + + // Constructs an object setting all fields. + explicit AuthPigeonFirebaseApp(const std::string& app_name, + const std::string* tenant_id, + const std::string* custom_auth_domain); + + const std::string& app_name() const; + void set_app_name(std::string_view value_arg); + + const std::string* tenant_id() const; + void set_tenant_id(const std::string_view* value_arg); + void set_tenant_id(std::string_view value_arg); + + const std::string* custom_auth_domain() const; + void set_custom_auth_domain(const std::string_view* value_arg); + void set_custom_auth_domain(std::string_view value_arg); + + bool operator==(const AuthPigeonFirebaseApp& other) const; + bool operator!=(const AuthPigeonFirebaseApp& other) const; + /// Returns a hash code value for the object. This method is supported for the + /// benefit of hash tables. + size_t Hash() const; + + private: + static AuthPigeonFirebaseApp FromEncodableList( + const ::flutter::EncodableList& list); + + public: + ::flutter::EncodableList ToEncodableList() const; + + private: + friend class FirebaseAuthHostApi; + friend class FirebaseAuthUserHostApi; + friend class MultiFactorUserHostApi; + friend class MultiFactoResolverHostApi; + friend class MultiFactorTotpHostApi; + friend class MultiFactorTotpSecretHostApi; + friend class GenerateInterfaces; + friend class PigeonInternalCodecSerializer; + std::string app_name_; + std::optional tenant_id_; + std::optional custom_auth_domain_; +}; + +// Generated class from Pigeon that represents data sent in messages. +class InternalActionCodeInfoData { + public: + // Constructs an object setting all non-nullable fields. + InternalActionCodeInfoData(); + + // Constructs an object setting all fields. + explicit InternalActionCodeInfoData(const std::string* email, + const std::string* previous_email); + + const std::string* email() const; + void set_email(const std::string_view* value_arg); + void set_email(std::string_view value_arg); + + const std::string* previous_email() const; + void set_previous_email(const std::string_view* value_arg); + void set_previous_email(std::string_view value_arg); + + bool operator==(const InternalActionCodeInfoData& other) const; + bool operator!=(const InternalActionCodeInfoData& other) const; + /// Returns a hash code value for the object. This method is supported for the + /// benefit of hash tables. + size_t Hash() const; + + private: + static InternalActionCodeInfoData FromEncodableList( + const ::flutter::EncodableList& list); + + public: + ::flutter::EncodableList ToEncodableList() const; + + private: + friend class InternalActionCodeInfo; + friend class FirebaseAuthHostApi; + friend class FirebaseAuthUserHostApi; + friend class MultiFactorUserHostApi; + friend class MultiFactoResolverHostApi; + friend class MultiFactorTotpHostApi; + friend class MultiFactorTotpSecretHostApi; + friend class GenerateInterfaces; + friend class PigeonInternalCodecSerializer; + std::optional email_; + std::optional previous_email_; +}; + +// Generated class from Pigeon that represents data sent in messages. +class InternalActionCodeInfo { + public: + // Constructs an object setting all fields. + explicit InternalActionCodeInfo(const ActionCodeInfoOperation& operation, + const InternalActionCodeInfoData& data); + + ~InternalActionCodeInfo() = default; + InternalActionCodeInfo(const InternalActionCodeInfo& other); + InternalActionCodeInfo& operator=(const InternalActionCodeInfo& other); + InternalActionCodeInfo(InternalActionCodeInfo&& other) = default; + InternalActionCodeInfo& operator=(InternalActionCodeInfo&& other) noexcept = + default; + const ActionCodeInfoOperation& operation() const; + void set_operation(const ActionCodeInfoOperation& value_arg); + + const InternalActionCodeInfoData& data() const; + void set_data(const InternalActionCodeInfoData& value_arg); + + bool operator==(const InternalActionCodeInfo& other) const; + bool operator!=(const InternalActionCodeInfo& other) const; + /// Returns a hash code value for the object. This method is supported for the + /// benefit of hash tables. + size_t Hash() const; + + private: + static InternalActionCodeInfo FromEncodableList( + const ::flutter::EncodableList& list); + + public: + ::flutter::EncodableList ToEncodableList() const; + + private: + friend class FirebaseAuthHostApi; + friend class FirebaseAuthUserHostApi; + friend class MultiFactorUserHostApi; + friend class MultiFactoResolverHostApi; + friend class MultiFactorTotpHostApi; + friend class MultiFactorTotpSecretHostApi; + friend class GenerateInterfaces; + friend class PigeonInternalCodecSerializer; + ActionCodeInfoOperation operation_; + std::unique_ptr data_; +}; + +// Generated class from Pigeon that represents data sent in messages. +class InternalAdditionalUserInfo { + public: + // Constructs an object setting all non-nullable fields. + explicit InternalAdditionalUserInfo(bool is_new_user); + + // Constructs an object setting all fields. + explicit InternalAdditionalUserInfo(bool is_new_user, + const std::string* provider_id, + const std::string* username, + const std::string* authorization_code, + const ::flutter::EncodableMap* profile); + + bool is_new_user() const; + void set_is_new_user(bool value_arg); + + const std::string* provider_id() const; + void set_provider_id(const std::string_view* value_arg); + void set_provider_id(std::string_view value_arg); + + const std::string* username() const; + void set_username(const std::string_view* value_arg); + void set_username(std::string_view value_arg); + + const std::string* authorization_code() const; + void set_authorization_code(const std::string_view* value_arg); + void set_authorization_code(std::string_view value_arg); + + const ::flutter::EncodableMap* profile() const; + void set_profile(const ::flutter::EncodableMap* value_arg); + void set_profile(const ::flutter::EncodableMap& value_arg); + + bool operator==(const InternalAdditionalUserInfo& other) const; + bool operator!=(const InternalAdditionalUserInfo& other) const; + /// Returns a hash code value for the object. This method is supported for the + /// benefit of hash tables. + size_t Hash() const; + + private: + static InternalAdditionalUserInfo FromEncodableList( + const ::flutter::EncodableList& list); + + public: + ::flutter::EncodableList ToEncodableList() const; + + private: + friend class InternalUserCredential; + friend class FirebaseAuthHostApi; + friend class FirebaseAuthUserHostApi; + friend class MultiFactorUserHostApi; + friend class MultiFactoResolverHostApi; + friend class MultiFactorTotpHostApi; + friend class MultiFactorTotpSecretHostApi; + friend class GenerateInterfaces; + friend class PigeonInternalCodecSerializer; + bool is_new_user_; + std::optional provider_id_; + std::optional username_; + std::optional authorization_code_; + std::optional<::flutter::EncodableMap> profile_; +}; + +// Generated class from Pigeon that represents data sent in messages. +class InternalAuthCredential { + public: + // Constructs an object setting all non-nullable fields. + explicit InternalAuthCredential(const std::string& provider_id, + const std::string& sign_in_method, + int64_t native_id); + + // Constructs an object setting all fields. + explicit InternalAuthCredential(const std::string& provider_id, + const std::string& sign_in_method, + int64_t native_id, + const std::string* access_token); + + const std::string& provider_id() const; + void set_provider_id(std::string_view value_arg); + + const std::string& sign_in_method() const; + void set_sign_in_method(std::string_view value_arg); + + int64_t native_id() const; + void set_native_id(int64_t value_arg); + + const std::string* access_token() const; + void set_access_token(const std::string_view* value_arg); + void set_access_token(std::string_view value_arg); + + bool operator==(const InternalAuthCredential& other) const; + bool operator!=(const InternalAuthCredential& other) const; + /// Returns a hash code value for the object. This method is supported for the + /// benefit of hash tables. + size_t Hash() const; + + private: + static InternalAuthCredential FromEncodableList( + const ::flutter::EncodableList& list); + + public: + ::flutter::EncodableList ToEncodableList() const; + + private: + friend class InternalUserCredential; + friend class FirebaseAuthHostApi; + friend class FirebaseAuthUserHostApi; + friend class MultiFactorUserHostApi; + friend class MultiFactoResolverHostApi; + friend class MultiFactorTotpHostApi; + friend class MultiFactorTotpSecretHostApi; + friend class GenerateInterfaces; + friend class PigeonInternalCodecSerializer; + std::string provider_id_; + std::string sign_in_method_; + int64_t native_id_; + std::optional access_token_; +}; + +// Generated class from Pigeon that represents data sent in messages. +class InternalUserInfo { + public: + // Constructs an object setting all non-nullable fields. + explicit InternalUserInfo(const std::string& uid, bool is_anonymous, + bool is_email_verified); + + // Constructs an object setting all fields. + explicit InternalUserInfo( + const std::string& uid, const std::string* email, + const std::string* display_name, const std::string* photo_url, + const std::string* phone_number, bool is_anonymous, + bool is_email_verified, const std::string* provider_id, + const std::string* tenant_id, const std::string* refresh_token, + const int64_t* creation_timestamp, const int64_t* last_sign_in_timestamp); + + const std::string& uid() const; + void set_uid(std::string_view value_arg); + + const std::string* email() const; + void set_email(const std::string_view* value_arg); + void set_email(std::string_view value_arg); + + const std::string* display_name() const; + void set_display_name(const std::string_view* value_arg); + void set_display_name(std::string_view value_arg); + + const std::string* photo_url() const; + void set_photo_url(const std::string_view* value_arg); + void set_photo_url(std::string_view value_arg); + + const std::string* phone_number() const; + void set_phone_number(const std::string_view* value_arg); + void set_phone_number(std::string_view value_arg); + + bool is_anonymous() const; + void set_is_anonymous(bool value_arg); + + bool is_email_verified() const; + void set_is_email_verified(bool value_arg); + + const std::string* provider_id() const; + void set_provider_id(const std::string_view* value_arg); + void set_provider_id(std::string_view value_arg); + + const std::string* tenant_id() const; + void set_tenant_id(const std::string_view* value_arg); + void set_tenant_id(std::string_view value_arg); + + const std::string* refresh_token() const; + void set_refresh_token(const std::string_view* value_arg); + void set_refresh_token(std::string_view value_arg); + + const int64_t* creation_timestamp() const; + void set_creation_timestamp(const int64_t* value_arg); + void set_creation_timestamp(int64_t value_arg); + + const int64_t* last_sign_in_timestamp() const; + void set_last_sign_in_timestamp(const int64_t* value_arg); + void set_last_sign_in_timestamp(int64_t value_arg); + + bool operator==(const InternalUserInfo& other) const; + bool operator!=(const InternalUserInfo& other) const; + /// Returns a hash code value for the object. This method is supported for the + /// benefit of hash tables. + size_t Hash() const; + + private: + static InternalUserInfo FromEncodableList( + const ::flutter::EncodableList& list); + + public: + ::flutter::EncodableList ToEncodableList() const; + + private: + friend class InternalUserDetails; + friend class FirebaseAuthHostApi; + friend class FirebaseAuthUserHostApi; + friend class MultiFactorUserHostApi; + friend class MultiFactoResolverHostApi; + friend class MultiFactorTotpHostApi; + friend class MultiFactorTotpSecretHostApi; + friend class GenerateInterfaces; + friend class PigeonInternalCodecSerializer; + std::string uid_; + std::optional email_; + std::optional display_name_; + std::optional photo_url_; + std::optional phone_number_; + bool is_anonymous_; + bool is_email_verified_; + std::optional provider_id_; + std::optional tenant_id_; + std::optional refresh_token_; + std::optional creation_timestamp_; + std::optional last_sign_in_timestamp_; +}; + +// Generated class from Pigeon that represents data sent in messages. +class InternalUserDetails { + public: + // Constructs an object setting all fields. + explicit InternalUserDetails(const InternalUserInfo& user_info, + const ::flutter::EncodableList& provider_data); + + ~InternalUserDetails() = default; + InternalUserDetails(const InternalUserDetails& other); + InternalUserDetails& operator=(const InternalUserDetails& other); + InternalUserDetails(InternalUserDetails&& other) = default; + InternalUserDetails& operator=(InternalUserDetails&& other) noexcept = + default; + const InternalUserInfo& user_info() const; + void set_user_info(const InternalUserInfo& value_arg); + + const ::flutter::EncodableList& provider_data() const; + void set_provider_data(const ::flutter::EncodableList& value_arg); + + bool operator==(const InternalUserDetails& other) const; + bool operator!=(const InternalUserDetails& other) const; + /// Returns a hash code value for the object. This method is supported for the + /// benefit of hash tables. + size_t Hash() const; + + private: + static InternalUserDetails FromEncodableList( + const ::flutter::EncodableList& list); + + public: + ::flutter::EncodableList ToEncodableList() const; + + private: + friend class InternalUserCredential; + friend class FirebaseAuthHostApi; + friend class FirebaseAuthUserHostApi; + friend class MultiFactorUserHostApi; + friend class MultiFactoResolverHostApi; + friend class MultiFactorTotpHostApi; + friend class MultiFactorTotpSecretHostApi; + friend class GenerateInterfaces; + friend class PigeonInternalCodecSerializer; + std::unique_ptr user_info_; + ::flutter::EncodableList provider_data_; +}; + +// Generated class from Pigeon that represents data sent in messages. +class InternalUserCredential { + public: + // Constructs an object setting all non-nullable fields. + InternalUserCredential(); + + // Constructs an object setting all fields. + explicit InternalUserCredential( + const InternalUserDetails* user, + const InternalAdditionalUserInfo* additional_user_info, + const InternalAuthCredential* credential); + + ~InternalUserCredential() = default; + InternalUserCredential(const InternalUserCredential& other); + InternalUserCredential& operator=(const InternalUserCredential& other); + InternalUserCredential(InternalUserCredential&& other) = default; + InternalUserCredential& operator=(InternalUserCredential&& other) noexcept = + default; + const InternalUserDetails* user() const; + void set_user(const InternalUserDetails* value_arg); + void set_user(const InternalUserDetails& value_arg); + + const InternalAdditionalUserInfo* additional_user_info() const; + void set_additional_user_info(const InternalAdditionalUserInfo* value_arg); + void set_additional_user_info(const InternalAdditionalUserInfo& value_arg); + + const InternalAuthCredential* credential() const; + void set_credential(const InternalAuthCredential* value_arg); + void set_credential(const InternalAuthCredential& value_arg); + + bool operator==(const InternalUserCredential& other) const; + bool operator!=(const InternalUserCredential& other) const; + /// Returns a hash code value for the object. This method is supported for the + /// benefit of hash tables. + size_t Hash() const; + + private: + static InternalUserCredential FromEncodableList( + const ::flutter::EncodableList& list); + + public: + ::flutter::EncodableList ToEncodableList() const; + + private: + friend class FirebaseAuthHostApi; + friend class FirebaseAuthUserHostApi; + friend class MultiFactorUserHostApi; + friend class MultiFactoResolverHostApi; + friend class MultiFactorTotpHostApi; + friend class MultiFactorTotpSecretHostApi; + friend class GenerateInterfaces; + friend class PigeonInternalCodecSerializer; + std::unique_ptr user_; + std::unique_ptr additional_user_info_; + std::unique_ptr credential_; +}; + +// Generated class from Pigeon that represents data sent in messages. +class InternalAuthCredentialInput { + public: + // Constructs an object setting all non-nullable fields. + explicit InternalAuthCredentialInput(const std::string& provider_id, + const std::string& sign_in_method); + + // Constructs an object setting all fields. + explicit InternalAuthCredentialInput(const std::string& provider_id, + const std::string& sign_in_method, + const std::string* token, + const std::string* access_token); + + const std::string& provider_id() const; + void set_provider_id(std::string_view value_arg); + + const std::string& sign_in_method() const; + void set_sign_in_method(std::string_view value_arg); + + const std::string* token() const; + void set_token(const std::string_view* value_arg); + void set_token(std::string_view value_arg); + + const std::string* access_token() const; + void set_access_token(const std::string_view* value_arg); + void set_access_token(std::string_view value_arg); + + bool operator==(const InternalAuthCredentialInput& other) const; + bool operator!=(const InternalAuthCredentialInput& other) const; + /// Returns a hash code value for the object. This method is supported for the + /// benefit of hash tables. + size_t Hash() const; + + private: + static InternalAuthCredentialInput FromEncodableList( + const ::flutter::EncodableList& list); + + public: + ::flutter::EncodableList ToEncodableList() const; + + private: + friend class FirebaseAuthHostApi; + friend class FirebaseAuthUserHostApi; + friend class MultiFactorUserHostApi; + friend class MultiFactoResolverHostApi; + friend class MultiFactorTotpHostApi; + friend class MultiFactorTotpSecretHostApi; + friend class GenerateInterfaces; + friend class PigeonInternalCodecSerializer; + std::string provider_id_; + std::string sign_in_method_; + std::optional token_; + std::optional access_token_; +}; + +// Generated class from Pigeon that represents data sent in messages. +class InternalActionCodeSettings { + public: + // Constructs an object setting all non-nullable fields. + explicit InternalActionCodeSettings(const std::string& url, + bool handle_code_in_app, + bool android_install_app); + + // Constructs an object setting all fields. + explicit InternalActionCodeSettings( + const std::string& url, const std::string* dynamic_link_domain, + bool handle_code_in_app, const std::string* i_o_s_bundle_id, + const std::string* android_package_name, bool android_install_app, + const std::string* android_minimum_version, + const std::string* link_domain); + + const std::string& url() const; + void set_url(std::string_view value_arg); + + const std::string* dynamic_link_domain() const; + void set_dynamic_link_domain(const std::string_view* value_arg); + void set_dynamic_link_domain(std::string_view value_arg); + + bool handle_code_in_app() const; + void set_handle_code_in_app(bool value_arg); + + const std::string* i_o_s_bundle_id() const; + void set_i_o_s_bundle_id(const std::string_view* value_arg); + void set_i_o_s_bundle_id(std::string_view value_arg); + + const std::string* android_package_name() const; + void set_android_package_name(const std::string_view* value_arg); + void set_android_package_name(std::string_view value_arg); + + bool android_install_app() const; + void set_android_install_app(bool value_arg); + + const std::string* android_minimum_version() const; + void set_android_minimum_version(const std::string_view* value_arg); + void set_android_minimum_version(std::string_view value_arg); + + const std::string* link_domain() const; + void set_link_domain(const std::string_view* value_arg); + void set_link_domain(std::string_view value_arg); + + bool operator==(const InternalActionCodeSettings& other) const; + bool operator!=(const InternalActionCodeSettings& other) const; + /// Returns a hash code value for the object. This method is supported for the + /// benefit of hash tables. + size_t Hash() const; + + private: + static InternalActionCodeSettings FromEncodableList( + const ::flutter::EncodableList& list); + + public: + ::flutter::EncodableList ToEncodableList() const; + + private: + friend class FirebaseAuthHostApi; + friend class FirebaseAuthUserHostApi; + friend class MultiFactorUserHostApi; + friend class MultiFactoResolverHostApi; + friend class MultiFactorTotpHostApi; + friend class MultiFactorTotpSecretHostApi; + friend class GenerateInterfaces; + friend class PigeonInternalCodecSerializer; + std::string url_; + std::optional dynamic_link_domain_; + bool handle_code_in_app_; + std::optional i_o_s_bundle_id_; + std::optional android_package_name_; + bool android_install_app_; + std::optional android_minimum_version_; + std::optional link_domain_; +}; + +// Generated class from Pigeon that represents data sent in messages. +class InternalFirebaseAuthSettings { + public: + // Constructs an object setting all non-nullable fields. + explicit InternalFirebaseAuthSettings( + bool app_verification_disabled_for_testing); + + // Constructs an object setting all fields. + explicit InternalFirebaseAuthSettings( + bool app_verification_disabled_for_testing, + const std::string* user_access_group, const std::string* phone_number, + const std::string* sms_code, const bool* force_recaptcha_flow); + + bool app_verification_disabled_for_testing() const; + void set_app_verification_disabled_for_testing(bool value_arg); + + const std::string* user_access_group() const; + void set_user_access_group(const std::string_view* value_arg); + void set_user_access_group(std::string_view value_arg); + + const std::string* phone_number() const; + void set_phone_number(const std::string_view* value_arg); + void set_phone_number(std::string_view value_arg); + + const std::string* sms_code() const; + void set_sms_code(const std::string_view* value_arg); + void set_sms_code(std::string_view value_arg); + + const bool* force_recaptcha_flow() const; + void set_force_recaptcha_flow(const bool* value_arg); + void set_force_recaptcha_flow(bool value_arg); + + bool operator==(const InternalFirebaseAuthSettings& other) const; + bool operator!=(const InternalFirebaseAuthSettings& other) const; + /// Returns a hash code value for the object. This method is supported for the + /// benefit of hash tables. + size_t Hash() const; + + private: + static InternalFirebaseAuthSettings FromEncodableList( + const ::flutter::EncodableList& list); + + public: + ::flutter::EncodableList ToEncodableList() const; + + private: + friend class FirebaseAuthHostApi; + friend class FirebaseAuthUserHostApi; + friend class MultiFactorUserHostApi; + friend class MultiFactoResolverHostApi; + friend class MultiFactorTotpHostApi; + friend class MultiFactorTotpSecretHostApi; + friend class GenerateInterfaces; + friend class PigeonInternalCodecSerializer; + bool app_verification_disabled_for_testing_; + std::optional user_access_group_; + std::optional phone_number_; + std::optional sms_code_; + std::optional force_recaptcha_flow_; +}; + +// Generated class from Pigeon that represents data sent in messages. +class InternalSignInProvider { + public: + // Constructs an object setting all non-nullable fields. + explicit InternalSignInProvider(const std::string& provider_id); + + // Constructs an object setting all fields. + explicit InternalSignInProvider( + const std::string& provider_id, const ::flutter::EncodableList* scopes, + const ::flutter::EncodableMap* custom_parameters); + + const std::string& provider_id() const; + void set_provider_id(std::string_view value_arg); + + const ::flutter::EncodableList* scopes() const; + void set_scopes(const ::flutter::EncodableList* value_arg); + void set_scopes(const ::flutter::EncodableList& value_arg); + + const ::flutter::EncodableMap* custom_parameters() const; + void set_custom_parameters(const ::flutter::EncodableMap* value_arg); + void set_custom_parameters(const ::flutter::EncodableMap& value_arg); + + bool operator==(const InternalSignInProvider& other) const; + bool operator!=(const InternalSignInProvider& other) const; + /// Returns a hash code value for the object. This method is supported for the + /// benefit of hash tables. + size_t Hash() const; + + private: + static InternalSignInProvider FromEncodableList( + const ::flutter::EncodableList& list); + + public: + ::flutter::EncodableList ToEncodableList() const; + + private: + friend class FirebaseAuthHostApi; + friend class FirebaseAuthUserHostApi; + friend class MultiFactorUserHostApi; + friend class MultiFactoResolverHostApi; + friend class MultiFactorTotpHostApi; + friend class MultiFactorTotpSecretHostApi; + friend class GenerateInterfaces; + friend class PigeonInternalCodecSerializer; + std::string provider_id_; + std::optional<::flutter::EncodableList> scopes_; + std::optional<::flutter::EncodableMap> custom_parameters_; +}; + +// Generated class from Pigeon that represents data sent in messages. +class InternalVerifyPhoneNumberRequest { + public: + // Constructs an object setting all non-nullable fields. + explicit InternalVerifyPhoneNumberRequest(int64_t timeout); + + // Constructs an object setting all fields. + explicit InternalVerifyPhoneNumberRequest( + const std::string* phone_number, int64_t timeout, + const int64_t* force_resending_token, + const std::string* auto_retrieved_sms_code_for_testing, + const std::string* multi_factor_info_id, + const std::string* multi_factor_session_id); + + const std::string* phone_number() const; + void set_phone_number(const std::string_view* value_arg); + void set_phone_number(std::string_view value_arg); + + int64_t timeout() const; + void set_timeout(int64_t value_arg); + + const int64_t* force_resending_token() const; + void set_force_resending_token(const int64_t* value_arg); + void set_force_resending_token(int64_t value_arg); + + const std::string* auto_retrieved_sms_code_for_testing() const; + void set_auto_retrieved_sms_code_for_testing( + const std::string_view* value_arg); + void set_auto_retrieved_sms_code_for_testing(std::string_view value_arg); + + const std::string* multi_factor_info_id() const; + void set_multi_factor_info_id(const std::string_view* value_arg); + void set_multi_factor_info_id(std::string_view value_arg); + + const std::string* multi_factor_session_id() const; + void set_multi_factor_session_id(const std::string_view* value_arg); + void set_multi_factor_session_id(std::string_view value_arg); + + bool operator==(const InternalVerifyPhoneNumberRequest& other) const; + bool operator!=(const InternalVerifyPhoneNumberRequest& other) const; + /// Returns a hash code value for the object. This method is supported for the + /// benefit of hash tables. + size_t Hash() const; + + private: + static InternalVerifyPhoneNumberRequest FromEncodableList( + const ::flutter::EncodableList& list); + + public: + ::flutter::EncodableList ToEncodableList() const; + + private: + friend class FirebaseAuthHostApi; + friend class FirebaseAuthUserHostApi; + friend class MultiFactorUserHostApi; + friend class MultiFactoResolverHostApi; + friend class MultiFactorTotpHostApi; + friend class MultiFactorTotpSecretHostApi; + friend class GenerateInterfaces; + friend class PigeonInternalCodecSerializer; + std::optional phone_number_; + int64_t timeout_; + std::optional force_resending_token_; + std::optional auto_retrieved_sms_code_for_testing_; + std::optional multi_factor_info_id_; + std::optional multi_factor_session_id_; +}; + +// Generated class from Pigeon that represents data sent in messages. +class InternalIdTokenResult { + public: + // Constructs an object setting all non-nullable fields. + InternalIdTokenResult(); + + // Constructs an object setting all fields. + explicit InternalIdTokenResult(const std::string* token, + const int64_t* expiration_timestamp, + const int64_t* auth_timestamp, + const int64_t* issued_at_timestamp, + const std::string* sign_in_provider, + const ::flutter::EncodableMap* claims, + const std::string* sign_in_second_factor); + + const std::string* token() const; + void set_token(const std::string_view* value_arg); + void set_token(std::string_view value_arg); + + const int64_t* expiration_timestamp() const; + void set_expiration_timestamp(const int64_t* value_arg); + void set_expiration_timestamp(int64_t value_arg); + + const int64_t* auth_timestamp() const; + void set_auth_timestamp(const int64_t* value_arg); + void set_auth_timestamp(int64_t value_arg); + + const int64_t* issued_at_timestamp() const; + void set_issued_at_timestamp(const int64_t* value_arg); + void set_issued_at_timestamp(int64_t value_arg); + + const std::string* sign_in_provider() const; + void set_sign_in_provider(const std::string_view* value_arg); + void set_sign_in_provider(std::string_view value_arg); + + const ::flutter::EncodableMap* claims() const; + void set_claims(const ::flutter::EncodableMap* value_arg); + void set_claims(const ::flutter::EncodableMap& value_arg); + + const std::string* sign_in_second_factor() const; + void set_sign_in_second_factor(const std::string_view* value_arg); + void set_sign_in_second_factor(std::string_view value_arg); + + bool operator==(const InternalIdTokenResult& other) const; + bool operator!=(const InternalIdTokenResult& other) const; + /// Returns a hash code value for the object. This method is supported for the + /// benefit of hash tables. + size_t Hash() const; + + private: + static InternalIdTokenResult FromEncodableList( + const ::flutter::EncodableList& list); + + public: + ::flutter::EncodableList ToEncodableList() const; + + private: + friend class FirebaseAuthHostApi; + friend class FirebaseAuthUserHostApi; + friend class MultiFactorUserHostApi; + friend class MultiFactoResolverHostApi; + friend class MultiFactorTotpHostApi; + friend class MultiFactorTotpSecretHostApi; + friend class GenerateInterfaces; + friend class PigeonInternalCodecSerializer; + std::optional token_; + std::optional expiration_timestamp_; + std::optional auth_timestamp_; + std::optional issued_at_timestamp_; + std::optional sign_in_provider_; + std::optional<::flutter::EncodableMap> claims_; + std::optional sign_in_second_factor_; +}; + +// Generated class from Pigeon that represents data sent in messages. +class InternalUserProfile { + public: + // Constructs an object setting all non-nullable fields. + explicit InternalUserProfile(bool display_name_changed, + bool photo_url_changed); + + // Constructs an object setting all fields. + explicit InternalUserProfile(const std::string* display_name, + const std::string* photo_url, + bool display_name_changed, + bool photo_url_changed); + + const std::string* display_name() const; + void set_display_name(const std::string_view* value_arg); + void set_display_name(std::string_view value_arg); + + const std::string* photo_url() const; + void set_photo_url(const std::string_view* value_arg); + void set_photo_url(std::string_view value_arg); + + bool display_name_changed() const; + void set_display_name_changed(bool value_arg); + + bool photo_url_changed() const; + void set_photo_url_changed(bool value_arg); + + bool operator==(const InternalUserProfile& other) const; + bool operator!=(const InternalUserProfile& other) const; + /// Returns a hash code value for the object. This method is supported for the + /// benefit of hash tables. + size_t Hash() const; + + private: + static InternalUserProfile FromEncodableList( + const ::flutter::EncodableList& list); + + public: + ::flutter::EncodableList ToEncodableList() const; + + private: + friend class FirebaseAuthHostApi; + friend class FirebaseAuthUserHostApi; + friend class MultiFactorUserHostApi; + friend class MultiFactoResolverHostApi; + friend class MultiFactorTotpHostApi; + friend class MultiFactorTotpSecretHostApi; + friend class GenerateInterfaces; + friend class PigeonInternalCodecSerializer; + std::optional display_name_; + std::optional photo_url_; + bool display_name_changed_; + bool photo_url_changed_; +}; + +// Generated class from Pigeon that represents data sent in messages. +class InternalTotpSecret { + public: + // Constructs an object setting all non-nullable fields. + explicit InternalTotpSecret(const std::string& secret_key); + + // Constructs an object setting all fields. + explicit InternalTotpSecret(const int64_t* code_interval_seconds, + const int64_t* code_length, + const int64_t* enrollment_completion_deadline, + const std::string* hashing_algorithm, + const std::string& secret_key); + + const int64_t* code_interval_seconds() const; + void set_code_interval_seconds(const int64_t* value_arg); + void set_code_interval_seconds(int64_t value_arg); + + const int64_t* code_length() const; + void set_code_length(const int64_t* value_arg); + void set_code_length(int64_t value_arg); + + const int64_t* enrollment_completion_deadline() const; + void set_enrollment_completion_deadline(const int64_t* value_arg); + void set_enrollment_completion_deadline(int64_t value_arg); + + const std::string* hashing_algorithm() const; + void set_hashing_algorithm(const std::string_view* value_arg); + void set_hashing_algorithm(std::string_view value_arg); + + const std::string& secret_key() const; + void set_secret_key(std::string_view value_arg); + + bool operator==(const InternalTotpSecret& other) const; + bool operator!=(const InternalTotpSecret& other) const; + /// Returns a hash code value for the object. This method is supported for the + /// benefit of hash tables. + size_t Hash() const; + + private: + static InternalTotpSecret FromEncodableList( + const ::flutter::EncodableList& list); + + public: + ::flutter::EncodableList ToEncodableList() const; + + private: + friend class FirebaseAuthHostApi; + friend class FirebaseAuthUserHostApi; + friend class MultiFactorUserHostApi; + friend class MultiFactoResolverHostApi; + friend class MultiFactorTotpHostApi; + friend class MultiFactorTotpSecretHostApi; + friend class GenerateInterfaces; + friend class PigeonInternalCodecSerializer; + std::optional code_interval_seconds_; + std::optional code_length_; + std::optional enrollment_completion_deadline_; + std::optional hashing_algorithm_; + std::string secret_key_; +}; + +class PigeonInternalCodecSerializer + : public ::flutter::StandardCodecSerializer { + public: + PigeonInternalCodecSerializer(); + inline static PigeonInternalCodecSerializer& GetInstance() { + static PigeonInternalCodecSerializer sInstance; + return sInstance; + } + + void WriteValue(const ::flutter::EncodableValue& value, + ::flutter::ByteStreamWriter* stream) const override; + + protected: + ::flutter::EncodableValue ReadValueOfType( + uint8_t type, ::flutter::ByteStreamReader* stream) const override; +}; + +// Generated interface from Pigeon that represents a handler of messages from +// Flutter. +class FirebaseAuthHostApi { + public: + FirebaseAuthHostApi(const FirebaseAuthHostApi&) = delete; + FirebaseAuthHostApi& operator=(const FirebaseAuthHostApi&) = delete; + virtual ~FirebaseAuthHostApi() {} + virtual void RegisterIdTokenListener( + const AuthPigeonFirebaseApp& app, + std::function reply)> result) = 0; + virtual void RegisterAuthStateListener( + const AuthPigeonFirebaseApp& app, + std::function reply)> result) = 0; + virtual void UseEmulator( + const AuthPigeonFirebaseApp& app, const std::string& host, int64_t port, + std::function reply)> result) = 0; + virtual void ApplyActionCode( + const AuthPigeonFirebaseApp& app, const std::string& code, + std::function reply)> result) = 0; + virtual void CheckActionCode( + const AuthPigeonFirebaseApp& app, const std::string& code, + std::function reply)> result) = 0; + virtual void ConfirmPasswordReset( + const AuthPigeonFirebaseApp& app, const std::string& code, + const std::string& new_password, + std::function reply)> result) = 0; + virtual void CreateUserWithEmailAndPassword( + const AuthPigeonFirebaseApp& app, const std::string& email, + const std::string& password, + std::function reply)> result) = 0; + virtual void SignInAnonymously( + const AuthPigeonFirebaseApp& app, + std::function reply)> result) = 0; + virtual void SignInWithCredential( + const AuthPigeonFirebaseApp& app, const ::flutter::EncodableMap& input, + std::function reply)> result) = 0; + virtual void SignInWithCustomToken( + const AuthPigeonFirebaseApp& app, const std::string& token, + std::function reply)> result) = 0; + virtual void SignInWithEmailAndPassword( + const AuthPigeonFirebaseApp& app, const std::string& email, + const std::string& password, + std::function reply)> result) = 0; + virtual void SignInWithEmailLink( + const AuthPigeonFirebaseApp& app, const std::string& email, + const std::string& email_link, + std::function reply)> result) = 0; + virtual void SignInWithProvider( + const AuthPigeonFirebaseApp& app, + const InternalSignInProvider& sign_in_provider, + std::function reply)> result) = 0; + virtual void SignOut( + const AuthPigeonFirebaseApp& app, + std::function reply)> result) = 0; + virtual void FetchSignInMethodsForEmail( + const AuthPigeonFirebaseApp& app, const std::string& email, + std::function reply)> result) = 0; + virtual void SendPasswordResetEmail( + const AuthPigeonFirebaseApp& app, const std::string& email, + const InternalActionCodeSettings* action_code_settings, + std::function reply)> result) = 0; + virtual void SendSignInLinkToEmail( + const AuthPigeonFirebaseApp& app, const std::string& email, + const InternalActionCodeSettings& action_code_settings, + std::function reply)> result) = 0; + virtual void SetLanguageCode( + const AuthPigeonFirebaseApp& app, const std::string* language_code, + std::function reply)> result) = 0; + virtual void SetSettings( + const AuthPigeonFirebaseApp& app, + const InternalFirebaseAuthSettings& settings, + std::function reply)> result) = 0; + virtual void VerifyPasswordResetCode( + const AuthPigeonFirebaseApp& app, const std::string& code, + std::function reply)> result) = 0; + virtual void VerifyPhoneNumber( + const AuthPigeonFirebaseApp& app, + const InternalVerifyPhoneNumberRequest& request, + std::function reply)> result) = 0; + virtual void RevokeTokenWithAuthorizationCode( + const AuthPigeonFirebaseApp& app, const std::string& authorization_code, + std::function reply)> result) = 0; + virtual void RevokeAccessToken( + const AuthPigeonFirebaseApp& app, const std::string& access_token, + std::function reply)> result) = 0; + virtual void InitializeRecaptchaConfig( + const AuthPigeonFirebaseApp& app, + std::function reply)> result) = 0; + + // The codec used by FirebaseAuthHostApi. + static const ::flutter::StandardMessageCodec& GetCodec(); + // Sets up an instance of `FirebaseAuthHostApi` to handle messages through the + // `binary_messenger`. + static void SetUp(::flutter::BinaryMessenger* binary_messenger, + FirebaseAuthHostApi* api); + static void SetUp(::flutter::BinaryMessenger* binary_messenger, + FirebaseAuthHostApi* api, + const std::string& message_channel_suffix); + static ::flutter::EncodableValue WrapError(std::string_view error_message); + static ::flutter::EncodableValue WrapError(const FlutterError& error); + + protected: + FirebaseAuthHostApi() = default; +}; +// Generated interface from Pigeon that represents a handler of messages from +// Flutter. +class FirebaseAuthUserHostApi { + public: + FirebaseAuthUserHostApi(const FirebaseAuthUserHostApi&) = delete; + FirebaseAuthUserHostApi& operator=(const FirebaseAuthUserHostApi&) = delete; + virtual ~FirebaseAuthUserHostApi() {} + virtual void Delete( + const AuthPigeonFirebaseApp& app, + std::function reply)> result) = 0; + virtual void GetIdToken( + const AuthPigeonFirebaseApp& app, bool force_refresh, + std::function reply)> result) = 0; + virtual void LinkWithCredential( + const AuthPigeonFirebaseApp& app, const ::flutter::EncodableMap& input, + std::function reply)> result) = 0; + virtual void LinkWithProvider( + const AuthPigeonFirebaseApp& app, + const InternalSignInProvider& sign_in_provider, + std::function reply)> result) = 0; + virtual void ReauthenticateWithCredential( + const AuthPigeonFirebaseApp& app, const ::flutter::EncodableMap& input, + std::function reply)> result) = 0; + virtual void ReauthenticateWithProvider( + const AuthPigeonFirebaseApp& app, + const InternalSignInProvider& sign_in_provider, + std::function reply)> result) = 0; + virtual void Reload( + const AuthPigeonFirebaseApp& app, + std::function reply)> result) = 0; + virtual void SendEmailVerification( + const AuthPigeonFirebaseApp& app, + const InternalActionCodeSettings* action_code_settings, + std::function reply)> result) = 0; + virtual void Unlink( + const AuthPigeonFirebaseApp& app, const std::string& provider_id, + std::function reply)> result) = 0; + virtual void UpdateEmail( + const AuthPigeonFirebaseApp& app, const std::string& new_email, + std::function reply)> result) = 0; + virtual void UpdatePassword( + const AuthPigeonFirebaseApp& app, const std::string& new_password, + std::function reply)> result) = 0; + virtual void UpdatePhoneNumber( + const AuthPigeonFirebaseApp& app, const ::flutter::EncodableMap& input, + std::function reply)> result) = 0; + virtual void UpdateProfile( + const AuthPigeonFirebaseApp& app, const InternalUserProfile& profile, + std::function reply)> result) = 0; + virtual void VerifyBeforeUpdateEmail( + const AuthPigeonFirebaseApp& app, const std::string& new_email, + const InternalActionCodeSettings* action_code_settings, + std::function reply)> result) = 0; + + // The codec used by FirebaseAuthUserHostApi. + static const ::flutter::StandardMessageCodec& GetCodec(); + // Sets up an instance of `FirebaseAuthUserHostApi` to handle messages through + // the `binary_messenger`. + static void SetUp(::flutter::BinaryMessenger* binary_messenger, + FirebaseAuthUserHostApi* api); + static void SetUp(::flutter::BinaryMessenger* binary_messenger, + FirebaseAuthUserHostApi* api, + const std::string& message_channel_suffix); + static ::flutter::EncodableValue WrapError(std::string_view error_message); + static ::flutter::EncodableValue WrapError(const FlutterError& error); + + protected: + FirebaseAuthUserHostApi() = default; +}; +// Generated interface from Pigeon that represents a handler of messages from +// Flutter. +class MultiFactorUserHostApi { + public: + MultiFactorUserHostApi(const MultiFactorUserHostApi&) = delete; + MultiFactorUserHostApi& operator=(const MultiFactorUserHostApi&) = delete; + virtual ~MultiFactorUserHostApi() {} + virtual void EnrollPhone( + const AuthPigeonFirebaseApp& app, + const InternalPhoneMultiFactorAssertion& assertion, + const std::string* display_name, + std::function reply)> result) = 0; + virtual void EnrollTotp( + const AuthPigeonFirebaseApp& app, const std::string& assertion_id, + const std::string* display_name, + std::function reply)> result) = 0; + virtual void GetSession( + const AuthPigeonFirebaseApp& app, + std::function reply)> + result) = 0; + virtual void Unenroll( + const AuthPigeonFirebaseApp& app, const std::string& factor_uid, + std::function reply)> result) = 0; + virtual void GetEnrolledFactors( + const AuthPigeonFirebaseApp& app, + std::function reply)> result) = 0; + + // The codec used by MultiFactorUserHostApi. + static const ::flutter::StandardMessageCodec& GetCodec(); + // Sets up an instance of `MultiFactorUserHostApi` to handle messages through + // the `binary_messenger`. + static void SetUp(::flutter::BinaryMessenger* binary_messenger, + MultiFactorUserHostApi* api); + static void SetUp(::flutter::BinaryMessenger* binary_messenger, + MultiFactorUserHostApi* api, + const std::string& message_channel_suffix); + static ::flutter::EncodableValue WrapError(std::string_view error_message); + static ::flutter::EncodableValue WrapError(const FlutterError& error); + + protected: + MultiFactorUserHostApi() = default; +}; +// Generated interface from Pigeon that represents a handler of messages from +// Flutter. +class MultiFactoResolverHostApi { + public: + MultiFactoResolverHostApi(const MultiFactoResolverHostApi&) = delete; + MultiFactoResolverHostApi& operator=(const MultiFactoResolverHostApi&) = + delete; + virtual ~MultiFactoResolverHostApi() {} + virtual void ResolveSignIn( + const std::string& resolver_id, + const InternalPhoneMultiFactorAssertion* assertion, + const std::string* totp_assertion_id, + std::function reply)> result) = 0; + + // The codec used by MultiFactoResolverHostApi. + static const ::flutter::StandardMessageCodec& GetCodec(); + // Sets up an instance of `MultiFactoResolverHostApi` to handle messages + // through the `binary_messenger`. + static void SetUp(::flutter::BinaryMessenger* binary_messenger, + MultiFactoResolverHostApi* api); + static void SetUp(::flutter::BinaryMessenger* binary_messenger, + MultiFactoResolverHostApi* api, + const std::string& message_channel_suffix); + static ::flutter::EncodableValue WrapError(std::string_view error_message); + static ::flutter::EncodableValue WrapError(const FlutterError& error); + + protected: + MultiFactoResolverHostApi() = default; +}; +// Generated interface from Pigeon that represents a handler of messages from +// Flutter. +class MultiFactorTotpHostApi { + public: + MultiFactorTotpHostApi(const MultiFactorTotpHostApi&) = delete; + MultiFactorTotpHostApi& operator=(const MultiFactorTotpHostApi&) = delete; + virtual ~MultiFactorTotpHostApi() {} + virtual void GenerateSecret( + const std::string& session_id, + std::function reply)> result) = 0; + virtual void GetAssertionForEnrollment( + const std::string& secret_key, const std::string& one_time_password, + std::function reply)> result) = 0; + virtual void GetAssertionForSignIn( + const std::string& enrollment_id, const std::string& one_time_password, + std::function reply)> result) = 0; + + // The codec used by MultiFactorTotpHostApi. + static const ::flutter::StandardMessageCodec& GetCodec(); + // Sets up an instance of `MultiFactorTotpHostApi` to handle messages through + // the `binary_messenger`. + static void SetUp(::flutter::BinaryMessenger* binary_messenger, + MultiFactorTotpHostApi* api); + static void SetUp(::flutter::BinaryMessenger* binary_messenger, + MultiFactorTotpHostApi* api, + const std::string& message_channel_suffix); + static ::flutter::EncodableValue WrapError(std::string_view error_message); + static ::flutter::EncodableValue WrapError(const FlutterError& error); + + protected: + MultiFactorTotpHostApi() = default; +}; +// Generated interface from Pigeon that represents a handler of messages from +// Flutter. +class MultiFactorTotpSecretHostApi { + public: + MultiFactorTotpSecretHostApi(const MultiFactorTotpSecretHostApi&) = delete; + MultiFactorTotpSecretHostApi& operator=(const MultiFactorTotpSecretHostApi&) = + delete; + virtual ~MultiFactorTotpSecretHostApi() {} + virtual void GenerateQrCodeUrl( + const std::string& secret_key, const std::string* account_name, + const std::string* issuer, + std::function reply)> result) = 0; + virtual void OpenInOtpApp( + const std::string& secret_key, const std::string& qr_code_url, + std::function reply)> result) = 0; + + // The codec used by MultiFactorTotpSecretHostApi. + static const ::flutter::StandardMessageCodec& GetCodec(); + // Sets up an instance of `MultiFactorTotpSecretHostApi` to handle messages + // through the `binary_messenger`. + static void SetUp(::flutter::BinaryMessenger* binary_messenger, + MultiFactorTotpSecretHostApi* api); + static void SetUp(::flutter::BinaryMessenger* binary_messenger, + MultiFactorTotpSecretHostApi* api, + const std::string& message_channel_suffix); + static ::flutter::EncodableValue WrapError(std::string_view error_message); + static ::flutter::EncodableValue WrapError(const FlutterError& error); + + protected: + MultiFactorTotpSecretHostApi() = default; +}; +// Only used to generate the object interface that are use outside of the Pigeon +// interface +// +// Generated interface from Pigeon that represents a handler of messages from +// Flutter. +class GenerateInterfaces { + public: + GenerateInterfaces(const GenerateInterfaces&) = delete; + GenerateInterfaces& operator=(const GenerateInterfaces&) = delete; + virtual ~GenerateInterfaces() {} + virtual std::optional PigeonInterface( + const InternalMultiFactorInfo& info) = 0; + + // The codec used by GenerateInterfaces. + static const ::flutter::StandardMessageCodec& GetCodec(); + // Sets up an instance of `GenerateInterfaces` to handle messages through the + // `binary_messenger`. + static void SetUp(::flutter::BinaryMessenger* binary_messenger, + GenerateInterfaces* api); + static void SetUp(::flutter::BinaryMessenger* binary_messenger, + GenerateInterfaces* api, + const std::string& message_channel_suffix); + static ::flutter::EncodableValue WrapError(std::string_view error_message); + static ::flutter::EncodableValue WrapError(const FlutterError& error); + + protected: + GenerateInterfaces() = default; +}; +} // namespace firebase_auth_windows +#endif // PIGEON_MESSAGES_G_H_ diff --git a/mih_ui/android/build/macos/SourcePackages/firebase_auth-6.5.4/windows/plugin_version.h.in b/mih_ui/android/build/macos/SourcePackages/firebase_auth-6.5.4/windows/plugin_version.h.in new file mode 100644 index 00000000..3a8915c4 --- /dev/null +++ b/mih_ui/android/build/macos/SourcePackages/firebase_auth-6.5.4/windows/plugin_version.h.in @@ -0,0 +1,13 @@ +// Copyright 2023, the Chromium project authors. Please see the AUTHORS file +// for details. All rights reserved. Use of this source code is governed by a +// BSD-style license that can be found in the LICENSE file. + +#ifndef PLUGIN_VERSION_CONFIG_H +#define PLUGIN_VERSION_CONFIG_H + +namespace firebase_auth_windows { + +std::string getPluginVersion() { return "@PLUGIN_VERSION@"; } +} // namespace firebase_auth_windows + +#endif // PLUGIN_VERSION_CONFIG_H diff --git a/mih_ui/android/build/macos/SourcePackages/firebase_auth-6.5.4/windows/test/firebase_auth_plugin_test.cpp b/mih_ui/android/build/macos/SourcePackages/firebase_auth-6.5.4/windows/test/firebase_auth_plugin_test.cpp new file mode 100644 index 00000000..7c8110cf --- /dev/null +++ b/mih_ui/android/build/macos/SourcePackages/firebase_auth-6.5.4/windows/test/firebase_auth_plugin_test.cpp @@ -0,0 +1,47 @@ +// Copyright 2023, the Chromium project authors. Please see the AUTHORS file +// for details. All rights reserved. Use of this source code is governed by a +// BSD-style license that can be found in the LICENSE file. + +#include "firebase_auth_plugin.h" + +#include +#include +#include +#include +#include + +#include +#include +#include + +namespace firebase_auth { +namespace test { + +namespace { + +using flutter::EncodableMap; +using flutter::EncodableValue; +using flutter::MethodCall; +using flutter::MethodResultFunctions; + +} // namespace + +TEST(FirebaseAuthPlugin, GetPlatformVersion) { + FirebaseAuthPlugin plugin; + // Save the reply value from the success callback. + std::string result_string; + plugin.HandleMethodCall( + MethodCall("getPlatformVersion", std::make_unique()), + std::make_unique>( + [&result_string](const EncodableValue* result) { + result_string = std::get(*result); + }, + nullptr, nullptr)); + + // Since the exact string varies by host, just ensure that it's a string + // with the expected format. + EXPECT_TRUE(result_string.rfind("Windows ", 0) == 0); +} + +} // namespace test +} // namespace firebase_auth diff --git a/mih_ui/android/build/reports/problems/problems-report.html b/mih_ui/android/build/reports/problems/problems-report.html index 0784829f..d88b7854 100644 --- a/mih_ui/android/build/reports/problems/problems-report.html +++ b/mih_ui/android/build/reports/problems/problems-report.html @@ -650,12 +650,12 @@ code + .copy-button { diff --git a/mih_ui/android/gradle/wrapper/gradle-wrapper.properties b/mih_ui/android/gradle/wrapper/gradle-wrapper.properties index ac3b4792..e4ef43fb 100644 --- a/mih_ui/android/gradle/wrapper/gradle-wrapper.properties +++ b/mih_ui/android/gradle/wrapper/gradle-wrapper.properties @@ -2,4 +2,4 @@ distributionBase=GRADLE_USER_HOME distributionPath=wrapper/dists zipStoreBase=GRADLE_USER_HOME zipStorePath=wrapper/dists -distributionUrl=https\://services.gradle.org/distributions/gradle-8.12-all.zip +distributionUrl=https\://services.gradle.org/distributions/gradle-8.14-all.zip diff --git a/mih_ui/android/settings.gradle.kts b/mih_ui/android/settings.gradle.kts index bd7522f7..4960023a 100644 --- a/mih_ui/android/settings.gradle.kts +++ b/mih_ui/android/settings.gradle.kts @@ -18,11 +18,11 @@ pluginManagement { plugins { id("dev.flutter.flutter-plugin-loader") version "1.0.0" - id("com.android.application") version "8.7.3" apply false + id("com.android.application") version "8.11.1" apply false // START: FlutterFire Configuration - id("com.google.gms.google-services") version("4.3.15") apply false + id("com.google.gms.google-services") version("4.4.2") apply false // END: FlutterFire Configuration - id("org.jetbrains.kotlin.android") version "2.1.0" apply false + id("org.jetbrains.kotlin.android") version "2.2.20" apply false } include(":app") diff --git a/mih_ui/android_build_logs.txt b/mih_ui/android_build_logs.txt new file mode 100644 index 00000000..8fe410f7 --- /dev/null +++ b/mih_ui/android_build_logs.txt @@ -0,0 +1,399 @@ + +Launching lib/main_dev.dart on sdk gphone64 arm64 in debug mode... +Running Gradle task 'assembleDebug'... +Checking the license for package NDK (Side by side) 28.2.13676358 in /Users/yaso_meth/Library/Android/sdk/licenses +License for package NDK (Side by side) 28.2.13676358 accepted. +Preparing "Install NDK (Side by side) 28.2.13676358 v.28.2.13676358". +Warning: An error occurred while preparing SDK package NDK (Side by side) 28.2.13676358: No space left on device.: +java.io.IOException: No space left on device + at java.base/sun.nio.ch.UnixFileDispatcherImpl.write0(Native Method) + at java.base/sun.nio.ch.UnixFileDispatcherImpl.write(Unknown Source) + at java.base/sun.nio.ch.IOUtil.writeFromNativeBuffer(Unknown Source) + at java.base/sun.nio.ch.IOUtil.write(Unknown Source) + at java.base/sun.nio.ch.IOUtil.write(Unknown Source) + at java.base/sun.nio.ch.FileChannelImpl.write(Unknown Source) + at java.base/sun.nio.ch.ChannelOutputStream.writeFully(Unknown Source) + at java.base/sun.nio.ch.ChannelOutputStream.write(Unknown Source) + at java.base/java.io.BufferedOutputStream.implWrite(Unknown Source) + at java.base/java.io.BufferedOutputStream.write(Unknown Source) + at com.android.repository.util.InstallerUtil.readZipEntry(InstallerUtil.java:192) + at com.android.repository.util.InstallerUtil.unzip(InstallerUtil.java:148) + at com.android.repository.impl.installer.BasicInstaller.doPrepare(BasicInstaller.java:91) + at com.android.repository.impl.installer.AbstractPackageOperation.prepare(AbstractPackageOperation.java:340) + at com.android.builder.sdk.DefaultSdkLoader.installRemotePackages(DefaultSdkLoader.java:365) + at com.android.builder.sdk.DefaultSdkLoader.installSdkTool(DefaultSdkLoader.java:454) + at com.android.build.gradle.internal.SdkHandler.installNdk(SdkHandler.java:329) + at com.android.build.gradle.internal.cxx.configure.NdkLocatorKt.findNdkPathImpl(NdkLocator.kt:242) + at com.android.build.gradle.internal.cxx.configure.NdkLocator.findNdkPath(NdkLocator.kt:425) + at com.android.build.gradle.internal.ndk.NdkHandler.getNdkStatus(NdkHandler.kt:83) + at com.android.build.gradle.internal.ndk.NdkHandler.getNdkPlatform(NdkHandler.kt:96) + at com.android.build.gradle.internal.cxx.gradle.generator.CxxConfigurationModelKt.tryCreateConfigurationParameters(CxxConfigurationModel.kt:213) + at com.android.build.gradle.internal.cxx.configure.CxxCreateGradleTasksKt.createCxxTasks(CxxCreateGradleTasks.kt:89) + at com.android.build.gradle.internal.VariantTaskManager.createTopLevelTasks(VariantTaskManager.kt:217) + at com.android.build.gradle.internal.VariantTaskManager.createTasks(VariantTaskManager.kt:141) + at com.android.build.gradle.internal.plugins.BasePlugin.createAndroidTasks(BasePlugin.kt:770) + at com.android.build.gradle.internal.plugins.BasePlugin$createTasks$2$1.call(BasePlugin.kt:612) + at com.android.builder.profile.ThreadRecorder.record(ThreadRecorder.java:69) + at com.android.builder.profile.ThreadRecorder.record(ThreadRecorder.java:54) + at com.android.build.gradle.internal.profile.AnalyticsResourceManager.recordBlockAtConfiguration(AnalyticsResourceManager.kt:222) + at com.android.build.gradle.internal.profile.AnalyticsConfiguratorService.recordBlock(AnalyticsConfiguratorService.kt:111) + at com.android.build.gradle.internal.plugins.BasePlugin$createTasks$2.accept(BasePlugin.kt:607) + at com.android.build.gradle.internal.plugins.BasePlugin$createTasks$2.accept(BasePlugin.kt:604) + at com.android.build.gradle.internal.crash.CrashReporting$afterEvaluate$1.execute(crash_reporting.kt:37) + at com.android.build.gradle.internal.crash.CrashReporting$afterEvaluate$1.execute(crash_reporting.kt:35) + at org.gradle.internal.code.DefaultUserCodeApplicationContext$CurrentApplication$1.execute(DefaultUserCodeApplicationContext.java:124) + at org.gradle.configuration.internal.DefaultListenerBuildOperationDecorator$BuildOperationEmittingAction$1.run(DefaultListenerBuildOperationDecorator.java:173) + at org.gradle.internal.operations.DefaultBuildOperationRunner$1.execute(DefaultBuildOperationRunner.java:30) + at org.gradle.internal.operations.DefaultBuildOperationRunner$1.execute(DefaultBuildOperationRunner.java:27) + at org.gradle.internal.operations.DefaultBuildOperationRunner$2.execute(DefaultBuildOperationRunner.java:67) + at org.gradle.internal.operations.DefaultBuildOperationRunner$2.execute(DefaultBuildOperationRunner.java:60) + at org.gradle.internal.operations.DefaultBuildOperationRunner.execute(DefaultBuildOperationRunner.java:167) + at org.gradle.internal.operations.DefaultBuildOperationRunner.execute(DefaultBuildOperationRunner.java:60) + at org.gradle.internal.operations.DefaultBuildOperationRunner.run(DefaultBuildOperationRunner.java:48) + at org.gradle.configuration.internal.DefaultListenerBuildOperationDecorator$BuildOperationEmittingAction.execute(DefaultListenerBuildOperationDecorator.java:170) + at org.gradle.internal.event.BroadcastDispatch$ActionInvocationHandler.dispatch(BroadcastDispatch.java:99) + at org.gradle.internal.event.BroadcastDispatch$ActionInvocationHandler.dispatch(BroadcastDispatch.java:87) + at org.gradle.internal.event.AbstractBroadcastDispatch.dispatch(AbstractBroadcastDispatch.java:44) + at org.gradle.internal.event.BroadcastDispatch$SingletonDispatch.dispatch(BroadcastDispatch.java:268) + at org.gradle.internal.event.BroadcastDispatch$SingletonDispatch.dispatch(BroadcastDispatch.java:170) + at org.gradle.internal.event.AbstractBroadcastDispatch.dispatch(AbstractBroadcastDispatch.java:84) + at org.gradle.internal.event.AbstractBroadcastDispatch.dispatch(AbstractBroadcastDispatch.java:70) + at org.gradle.internal.event.BroadcastDispatch$CompositeDispatch.dispatch(BroadcastDispatch.java:380) + at org.gradle.internal.event.BroadcastDispatch$CompositeDispatch.dispatch(BroadcastDispatch.java:272) + at org.gradle.internal.event.ListenerBroadcast.dispatch(ListenerBroadcast.java:160) + at org.gradle.internal.event.ListenerBroadcast.dispatch(ListenerBroadcast.java:37) + at org.gradle.internal.dispatch.ProxyDispatchAdapter$DispatchingInvocationHandler.invoke(ProxyDispatchAdapter.java:92) + at jdk.proxy1/jdk.proxy1.$Proxy78.afterEvaluate(Unknown Source) + at org.gradle.configuration.project.LifecycleProjectEvaluator$NotifyAfterEvaluate$1.execute(LifecycleProjectEvaluator.java:247) + at org.gradle.configuration.project.LifecycleProjectEvaluator$NotifyAfterEvaluate$1.execute(LifecycleProjectEvaluator.java:244) + at org.gradle.api.internal.project.DefaultProject.stepEvaluationListener(DefaultProject.java:1603) + at org.gradle.configuration.project.LifecycleProjectEvaluator$NotifyAfterEvaluate.run(LifecycleProjectEvaluator.java:253) + at org.gradle.internal.operations.DefaultBuildOperationRunner$1.execute(DefaultBuildOperationRunner.java:30) + at org.gradle.internal.operations.DefaultBuildOperationRunner$1.execute(DefaultBuildOperationRunner.java:27) + at org.gradle.internal.operations.DefaultBuildOperationRunner$2.execute(DefaultBuildOperationRunner.java:67) + at org.gradle.internal.operations.DefaultBuildOperationRunner$2.execute(DefaultBuildOperationRunner.java:60) + at org.gradle.internal.operations.DefaultBuildOperationRunner.execute(DefaultBuildOperationRunner.java:167) + at org.gradle.internal.operations.DefaultBuildOperationRunner.execute(DefaultBuildOperationRunner.java:60) + at org.gradle.internal.operations.DefaultBuildOperationRunner.run(DefaultBuildOperationRunner.java:48) + at org.gradle.configuration.project.LifecycleProjectEvaluator$EvaluateProject.lambda$run$0(LifecycleProjectEvaluator.java:114) + at org.gradle.api.internal.project.DefaultProjectStateRegistry$ProjectStateImpl.lambda$applyToMutableState$1(DefaultProjectStateRegistry.java:435) + at org.gradle.api.internal.project.DefaultProjectStateRegistry$ProjectStateImpl.lambda$fromMutableState$2(DefaultProjectStateRegistry.java:458) + at org.gradle.internal.work.DefaultWorkerLeaseService.withReplacedLocks(DefaultWorkerLeaseService.java:359) + at org.gradle.api.internal.project.DefaultProjectStateRegistry$ProjectStateImpl.fromMutableState(DefaultProjectStateRegistry.java:458) + at org.gradle.api.internal.project.DefaultProjectStateRegistry$ProjectStateImpl.applyToMutableState(DefaultProjectStateRegistry.java:434) + at org.gradle.configuration.project.LifecycleProjectEvaluator$EvaluateProject.run(LifecycleProjectEvaluator.java:100) + at org.gradle.internal.operations.DefaultBuildOperationRunner$1.execute(DefaultBuildOperationRunner.java:30) + at org.gradle.internal.operations.DefaultBuildOperationRunner$1.execute(DefaultBuildOperationRunner.java:27) + at org.gradle.internal.operations.DefaultBuildOperationRunner$2.execute(DefaultBuildOperationRunner.java:67) + at org.gradle.internal.operations.DefaultBuildOperationRunner$2.execute(DefaultBuildOperationRunner.java:60) + at org.gradle.internal.operations.DefaultBuildOperationRunner.execute(DefaultBuildOperationRunner.java:167) + at org.gradle.internal.operations.DefaultBuildOperationRunner.execute(DefaultBuildOperationRunner.java:60) + at org.gradle.internal.operations.DefaultBuildOperationRunner.run(DefaultBuildOperationRunner.java:48) + at org.gradle.configuration.project.LifecycleProjectEvaluator.evaluate(LifecycleProjectEvaluator.java:72) + at org.gradle.api.internal.project.DefaultProject.evaluateUnchecked(DefaultProject.java:827) + at org.gradle.api.internal.project.ProjectLifecycleController.lambda$ensureSelfConfigured$2(ProjectLifecycleController.java:88) + at org.gradle.internal.model.StateTransitionController.lambda$doTransition$14(StateTransitionController.java:255) + at org.gradle.internal.model.StateTransitionController.doTransition(StateTransitionController.java:266) + at org.gradle.internal.model.StateTransitionController.doTransition(StateTransitionController.java:254) + at org.gradle.internal.model.StateTransitionController.lambda$maybeTransitionIfNotCurrentlyTransitioning$10(StateTransitionController.java:199) + at org.gradle.internal.work.DefaultSynchronizer.withLock(DefaultSynchronizer.java:36) + at org.gradle.internal.model.StateTransitionController.maybeTransitionIfNotCurrentlyTransitioning(StateTransitionController.java:195) + at org.gradle.api.internal.project.ProjectLifecycleController.ensureSelfConfigured(ProjectLifecycleController.java:88) + at org.gradle.api.internal.project.DefaultProjectStateRegistry$ProjectStateImpl.ensureConfigured(DefaultProjectStateRegistry.java:400) + at org.gradle.execution.TaskPathProjectEvaluator.configure(TaskPathProjectEvaluator.java:70) + at org.gradle.execution.TaskPathProjectEvaluator.configureHierarchy(TaskPathProjectEvaluator.java:86) + at org.gradle.configuration.DefaultProjectsPreparer.prepareProjects(DefaultProjectsPreparer.java:50) + at org.gradle.configuration.BuildTreePreparingProjectsPreparer.prepareProjects(BuildTreePreparingProjectsPreparer.java:65) + at org.gradle.configuration.BuildOperationFiringProjectsPreparer$ConfigureBuild.run(BuildOperationFiringProjectsPreparer.java:52) + at org.gradle.internal.operations.DefaultBuildOperationRunner$1.execute(DefaultBuildOperationRunner.java:30) + at org.gradle.internal.operations.DefaultBuildOperationRunner$1.execute(DefaultBuildOperationRunner.java:27) + at org.gradle.internal.operations.DefaultBuildOperationRunner$2.execute(DefaultBuildOperationRunner.java:67) + at org.gradle.internal.operations.DefaultBuildOperationRunner$2.execute(DefaultBuildOperationRunner.java:60) + at org.gradle.internal.operations.DefaultBuildOperationRunner.execute(DefaultBuildOperationRunner.java:167) + at org.gradle.internal.operations.DefaultBuildOperationRunner.execute(DefaultBuildOperationRunner.java:60) + at org.gradle.internal.operations.DefaultBuildOperationRunner.run(DefaultBuildOperationRunner.java:48) + at org.gradle.configuration.BuildOperationFiringProjectsPreparer.prepareProjects(BuildOperationFiringProjectsPreparer.java:40) + at org.gradle.initialization.VintageBuildModelController.lambda$prepareProjects$2(VintageBuildModelController.java:84) + at org.gradle.internal.model.StateTransitionController.lambda$doTransition$14(StateTransitionController.java:255) + at org.gradle.internal.model.StateTransitionController.doTransition(StateTransitionController.java:266) + at org.gradle.internal.model.StateTransitionController.doTransition(StateTransitionController.java:254) + at org.gradle.internal.model.StateTransitionController.lambda$transitionIfNotPreviously$11(StateTransitionController.java:213) + at org.gradle.internal.work.DefaultSynchronizer.withLock(DefaultSynchronizer.java:36) + at org.gradle.internal.model.StateTransitionController.transitionIfNotPreviously(StateTransitionController.java:209) + at org.gradle.initialization.VintageBuildModelController.prepareProjects(VintageBuildModelController.java:84) + at org.gradle.initialization.VintageBuildModelController.prepareToScheduleTasks(VintageBuildModelController.java:71) + at org.gradle.internal.build.DefaultBuildLifecycleController.lambda$prepareToScheduleTasks$6(DefaultBuildLifecycleController.java:175) + at org.gradle.internal.model.StateTransitionController.lambda$doTransition$14(StateTransitionController.java:255) + at org.gradle.internal.model.StateTransitionController.doTransition(StateTransitionController.java:266) + at org.gradle.internal.model.StateTransitionController.doTransition(StateTransitionController.java:254) + at org.gradle.internal.model.StateTransitionController.lambda$maybeTransition$9(StateTransitionController.java:190) + at org.gradle.internal.work.DefaultSynchronizer.withLock(DefaultSynchronizer.java:36) + at org.gradle.internal.model.StateTransitionController.maybeTransition(StateTransitionController.java:186) + at org.gradle.internal.build.DefaultBuildLifecycleController.prepareToScheduleTasks(DefaultBuildLifecycleController.java:173) + at org.gradle.internal.buildtree.DefaultBuildTreeWorkPreparer.scheduleRequestedTasks(DefaultBuildTreeWorkPreparer.java:36) + at org.gradle.internal.cc.impl.VintageBuildTreeWorkController$scheduleAndRunRequestedTasks$1.apply(VintageBuildTreeWorkController.kt:36) + at org.gradle.internal.cc.impl.VintageBuildTreeWorkController$scheduleAndRunRequestedTasks$1.apply(VintageBuildTreeWorkController.kt:35) + at org.gradle.composite.internal.DefaultIncludedBuildTaskGraph.withNewWorkGraph(DefaultIncludedBuildTaskGraph.java:112) + at org.gradle.internal.cc.impl.VintageBuildTreeWorkController.scheduleAndRunRequestedTasks(VintageBuildTreeWorkController.kt:35) + at org.gradle.internal.buildtree.DefaultBuildTreeLifecycleController.lambda$scheduleAndRunTasks$1(DefaultBuildTreeLifecycleController.java:77) + at org.gradle.internal.buildtree.DefaultBuildTreeLifecycleController.lambda$runBuild$4(DefaultBuildTreeLifecycleController.java:120) + at org.gradle.internal.model.StateTransitionController.lambda$transition$6(StateTransitionController.java:169) + at org.gradle.internal.model.StateTransitionController.doTransition(StateTransitionController.java:266) + at org.gradle.internal.model.StateTransitionController.lambda$transition$7(StateTransitionController.java:169) + at org.gradle.internal.work.DefaultSynchronizer.withLock(DefaultSynchronizer.java:46) + at org.gradle.internal.model.StateTransitionController.transition(StateTransitionController.java:169) + at org.gradle.internal.buildtree.DefaultBuildTreeLifecycleController.runBuild(DefaultBuildTreeLifecycleController.java:117) + at org.gradle.internal.buildtree.DefaultBuildTreeLifecycleController.scheduleAndRunTasks(DefaultBuildTreeLifecycleController.java:77) + at org.gradle.internal.buildtree.DefaultBuildTreeLifecycleController.scheduleAndRunTasks(DefaultBuildTreeLifecycleController.java:72) + at org.gradle.tooling.internal.provider.ExecuteBuildActionRunner.run(ExecuteBuildActionRunner.java:31) + at org.gradle.launcher.exec.ChainingBuildActionRunner.run(ChainingBuildActionRunner.java:35) + at org.gradle.internal.buildtree.ProblemReportingBuildActionRunner.run(ProblemReportingBuildActionRunner.java:49) + at org.gradle.launcher.exec.BuildOutcomeReportingBuildActionRunner.run(BuildOutcomeReportingBuildActionRunner.java:71) + at org.gradle.tooling.internal.provider.FileSystemWatchingBuildActionRunner.run(FileSystemWatchingBuildActionRunner.java:135) + at org.gradle.launcher.exec.BuildCompletionNotifyingBuildActionRunner.run(BuildCompletionNotifyingBuildActionRunner.java:41) + at org.gradle.launcher.exec.RootBuildLifecycleBuildActionExecutor.lambda$execute$0(RootBuildLifecycleBuildActionExecutor.java:54) + at org.gradle.composite.internal.DefaultRootBuildState.run(DefaultRootBuildState.java:130) + at org.gradle.launcher.exec.RootBuildLifecycleBuildActionExecutor.execute(RootBuildLifecycleBuildActionExecutor.java:54) + at org.gradle.internal.buildtree.InitDeprecationLoggingActionExecutor.execute(InitDeprecationLoggingActionExecutor.java:62) + at org.gradle.internal.buildtree.InitProblems.execute(InitProblems.java:36) + at org.gradle.internal.buildtree.DefaultBuildTreeContext.execute(DefaultBuildTreeContext.java:40) + at org.gradle.launcher.exec.BuildTreeLifecycleBuildActionExecutor.lambda$execute$0(BuildTreeLifecycleBuildActionExecutor.java:71) + at org.gradle.internal.buildtree.BuildTreeState.run(BuildTreeState.java:60) + at org.gradle.launcher.exec.BuildTreeLifecycleBuildActionExecutor.execute(BuildTreeLifecycleBuildActionExecutor.java:71) + at org.gradle.launcher.exec.RunAsBuildOperationBuildActionExecutor$2.call(RunAsBuildOperationBuildActionExecutor.java:67) + at org.gradle.launcher.exec.RunAsBuildOperationBuildActionExecutor$2.call(RunAsBuildOperationBuildActionExecutor.java:63) + at org.gradle.internal.operations.DefaultBuildOperationRunner$CallableBuildOperationWorker.execute(DefaultBuildOperationRunner.java:210) + at org.gradle.internal.operations.DefaultBuildOperationRunner$CallableBuildOperationWorker.execute(DefaultBuildOperationRunner.java:205) + at org.gradle.internal.operations.DefaultBuildOperationRunner$2.execute(DefaultBuildOperationRunner.java:67) + at org.gradle.internal.operations.DefaultBuildOperationRunner$2.execute(DefaultBuildOperationRunner.java:60) + at org.gradle.internal.operations.DefaultBuildOperationRunner.execute(DefaultBuildOperationRunner.java:167) + at org.gradle.internal.operations.DefaultBuildOperationRunner.execute(DefaultBuildOperationRunner.java:60) + at org.gradle.internal.operations.DefaultBuildOperationRunner.call(DefaultBuildOperationRunner.java:54) + at org.gradle.launcher.exec.RunAsBuildOperationBuildActionExecutor.execute(RunAsBuildOperationBuildActionExecutor.java:63) + at org.gradle.launcher.exec.RunAsWorkerThreadBuildActionExecutor.lambda$execute$0(RunAsWorkerThreadBuildActionExecutor.java:36) + at org.gradle.internal.work.DefaultWorkerLeaseService.withLocks(DefaultWorkerLeaseService.java:263) + at org.gradle.internal.work.DefaultWorkerLeaseService.runAsWorkerThread(DefaultWorkerLeaseService.java:127) + at org.gradle.launcher.exec.RunAsWorkerThreadBuildActionExecutor.execute(RunAsWorkerThreadBuildActionExecutor.java:36) + at org.gradle.tooling.internal.provider.continuous.ContinuousBuildActionExecutor.execute(ContinuousBuildActionExecutor.java:110) + at org.gradle.tooling.internal.provider.SubscribableBuildActionExecutor.execute(SubscribableBuildActionExecutor.java:64) + at org.gradle.internal.session.DefaultBuildSessionContext.execute(DefaultBuildSessionContext.java:46) + at org.gradle.internal.buildprocess.execution.BuildSessionLifecycleBuildActionExecutor$ActionImpl.apply(BuildSessionLifecycleBuildActionExecutor.java:92) + at org.gradle.internal.buildprocess.execution.BuildSessionLifecycleBuildActionExecutor$ActionImpl.apply(BuildSessionLifecycleBuildActionExecutor.java:80) + at org.gradle.internal.session.BuildSessionState.run(BuildSessionState.java:73) + at org.gradle.internal.buildprocess.execution.BuildSessionLifecycleBuildActionExecutor.execute(BuildSessionLifecycleBuildActionExecutor.java:62) + at org.gradle.internal.buildprocess.execution.BuildSessionLifecycleBuildActionExecutor.execute(BuildSessionLifecycleBuildActionExecutor.java:41) + at org.gradle.internal.buildprocess.execution.StartParamsValidatingActionExecutor.execute(StartParamsValidatingActionExecutor.java:64) + at org.gradle.internal.buildprocess.execution.StartParamsValidatingActionExecutor.execute(StartParamsValidatingActionExecutor.java:32) + at org.gradle.internal.buildprocess.execution.SessionFailureReportingActionExecutor.execute(SessionFailureReportingActionExecutor.java:51) + at org.gradle.internal.buildprocess.execution.SessionFailureReportingActionExecutor.execute(SessionFailureReportingActionExecutor.java:39) + at org.gradle.internal.buildprocess.execution.SetupLoggingActionExecutor.execute(SetupLoggingActionExecutor.java:47) + at org.gradle.internal.buildprocess.execution.SetupLoggingActionExecutor.execute(SetupLoggingActionExecutor.java:31) + at org.gradle.launcher.daemon.server.exec.ExecuteBuild.doBuild(ExecuteBuild.java:70) + at org.gradle.launcher.daemon.server.exec.BuildCommandOnly.execute(BuildCommandOnly.java:37) + at org.gradle.launcher.daemon.server.api.DaemonCommandExecution.proceed(DaemonCommandExecution.java:104) + at org.gradle.launcher.daemon.server.exec.WatchForDisconnection.execute(WatchForDisconnection.java:39) + at org.gradle.launcher.daemon.server.api.DaemonCommandExecution.proceed(DaemonCommandExecution.java:104) + at org.gradle.launcher.daemon.server.exec.ResetDeprecationLogger.execute(ResetDeprecationLogger.java:29) + at org.gradle.launcher.daemon.server.api.DaemonCommandExecution.proceed(DaemonCommandExecution.java:104) + at org.gradle.launcher.daemon.server.exec.RequestStopIfSingleUsedDaemon.execute(RequestStopIfSingleUsedDaemon.java:35) + at org.gradle.launcher.daemon.server.api.DaemonCommandExecution.proceed(DaemonCommandExecution.java:104) + at org.gradle.launcher.daemon.server.exec.ForwardClientInput.lambda$execute$0(ForwardClientInput.java:40) + at org.gradle.internal.daemon.clientinput.ClientInputForwarder.forwardInput(ClientInputForwarder.java:80) + at org.gradle.launcher.daemon.server.exec.ForwardClientInput.execute(ForwardClientInput.java:37) + at org.gradle.launcher.daemon.server.api.DaemonCommandExecution.proceed(DaemonCommandExecution.java:104) + at org.gradle.launcher.daemon.server.exec.LogAndCheckHealth.execute(LogAndCheckHealth.java:64) + at org.gradle.launcher.daemon.server.api.DaemonCommandExecution.proceed(DaemonCommandExecution.java:104) + at org.gradle.launcher.daemon.server.exec.LogToClient.doBuild(LogToClient.java:63) + at org.gradle.launcher.daemon.server.exec.BuildCommandOnly.execute(BuildCommandOnly.java:37) + at org.gradle.launcher.daemon.server.api.DaemonCommandExecution.proceed(DaemonCommandExecution.java:104) + at org.gradle.launcher.daemon.server.exec.EstablishBuildEnvironment.doBuild(EstablishBuildEnvironment.java:84) + at org.gradle.launcher.daemon.server.exec.BuildCommandOnly.execute(BuildCommandOnly.java:37) + at org.gradle.launcher.daemon.server.api.DaemonCommandExecution.proceed(DaemonCommandExecution.java:104) + at org.gradle.launcher.daemon.server.exec.StartBuildOrRespondWithBusy$1.run(StartBuildOrRespondWithBusy.java:52) + at org.gradle.launcher.daemon.server.DaemonStateCoordinator.lambda$runCommand$0(DaemonStateCoordinator.java:321) + at org.gradle.internal.concurrent.ExecutorPolicy$CatchAndRecordFailures.onExecute(ExecutorPolicy.java:64) + at org.gradle.internal.concurrent.AbstractManagedExecutor$1.run(AbstractManagedExecutor.java:48) + at java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(Unknown Source) + at java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source) + at java.base/java.lang.Thread.run(Unknown Source) +"Install NDK (Side by side) 28.2.13676358 v.28.2.13676358" failed. + +FAILURE: Build completed with 4 failures. + +1: Task failed with an exception. +----------- +* What went wrong: +A problem occurred configuring project ':jni'. +> java.lang.RuntimeException: com.android.builder.sdk.InstallFailedException: Failed to install the following SDK components: + ndk;28.2.13676358 NDK (Side by side) 28.2.13676358 + Install the missing components using the SDK manager in Android Studio. + + +* Try: +> Run with --stacktrace option to get the stack trace. +> Run with --info or --debug option to get more log output. +> Run with --scan to get full insights. +> Get more help at https://help.gradle.org. +============================================================================== + +2: Task failed with an exception. +----------- +* What went wrong: +java.io.FileNotFoundException: /Users/yaso_meth/Git/flutter/packages/flutter_tools/gradle/.kotlin/errors/errors-cfe3ff1f-8e73-4358-83a4-d984868e3a0f-1782895248380.log (No such file or directory) +> /Users/yaso_meth/Git/flutter/packages/flutter_tools/gradle/.kotlin/errors/errors-cfe3ff1f-8e73-4358-83a4-d984868e3a0f-1782895248380.log (No such file or directory) + +* Try: +> Run with --stacktrace option to get the stack trace. +> Run with --info or --debug option to get more log output. +> Run with --scan to get full insights. +> Get more help at https://help.gradle.org. +============================================================================== + +3: Task failed with an exception. +----------- +* What went wrong: +java.io.FileNotFoundException: /Users/yaso_meth/Git/mih_main/mih-project/mih_ui/android/.kotlin/errors/errors-8942e788-d3b6-4d60-a7ca-9e186e964ac2-1782895248413.log (No such file or directory) +> /Users/yaso_meth/Git/mih_main/mih-project/mih_ui/android/.kotlin/errors/errors-8942e788-d3b6-4d60-a7ca-9e186e964ac2-1782895248413.log (No such file or directory) + +* Try: +> Run with --stacktrace option to get the stack trace. +> Run with --info or --debug option to get more log output. +> Run with --scan to get full insights. +> Get more help at https://help.gradle.org. +============================================================================== + +4: Task failed with an exception. +----------- +* What went wrong: +java.io.IOException: No space left on device + +* Try: +> Run with --stacktrace option to get the stack trace. +> Run with --info or --debug option to get more log output. +> Run with --scan to get full insights. +> Get more help at https://help.gradle.org. +============================================================================== + +BUILD FAILED in 3m 38s + +FAILURE: Build failed with an exception. + +* What went wrong: +Could not stop all services. +> Failed to release lock on Build Output Cleanup Cache (/Users/yaso_meth/Git/mih_main/mih-project/mih_ui/android/.gradle/buildOutputCleanup) +> Could not stop all services. + > Failed to release lock on cache directory md-supplier (/Users/yaso_meth/.gradle/caches/8.14/md-supplier) + > Could not stop all services. + > Failed to release lock on Build Output Cleanup Cache (/Users/yaso_meth/Git/flutter/packages/flutter_tools/gradle/.gradle/buildOutputCleanup) + > Failed to release lock on execution history cache (/Users/yaso_meth/Git/flutter/packages/flutter_tools/gradle/.gradle/8.14/executionHistory) + > Failed to release lock on cache directory md-rule (/Users/yaso_meth/.gradle/caches/8.14/md-rule) + +* Try: +> Run with --stacktrace option to get the stack trace. +> Run with --info or --debug option to get more log output. +> Run with --scan to get full insights. +> Get more help at https://help.gradle.org. + +BUILD FAILED in 3m 38s +Running Gradle task 'assembleDebug'... 218,7s +[!] Gradle threw an error while downloading artifacts from the network. +Retrying Gradle Build: #1, wait time: 100ms +Running Gradle task 'assembleDebug'... +OpenJDK 64-Bit Server VM warning: Insufficient space for shared memory file: + 6368 +Try using the -Djava.io.tmpdir= option to select an alternate temp location. + + +FAILURE: Build completed with 4 failures. + +1: Task failed with an exception. +----------- +* What went wrong: +A problem occurred configuring project ':file_saver'. +> Could not resolve all dependencies for configuration 'classpath'. + > Problems writing to Binary store in /Users/yaso_meth/.gradle/.tmp/gradle14945273148192102443.bin (exist: true) +> Failed to notify project evaluation listener. + > java.lang.NullPointerException (no error message) + > java.lang.NullPointerException (no error message) + +* Try: +> Run with --stacktrace option to get the stack trace. +> Run with --info or --debug option to get more log output. +> Run with --scan to get full insights. +> Get more help at https://help.gradle.org. +============================================================================== + +2: Task failed with an exception. +----------- +* What went wrong: +java.io.FileNotFoundException: /Users/yaso_meth/Git/flutter/packages/flutter_tools/gradle/.kotlin/errors/errors-b524f85e-ee83-40c2-b330-d89a3d4ac323-1782895250713.log (No such file or directory) +> /Users/yaso_meth/Git/flutter/packages/flutter_tools/gradle/.kotlin/errors/errors-b524f85e-ee83-40c2-b330-d89a3d4ac323-1782895250713.log (No such file or directory) + +* Try: +> Run with --stacktrace option to get the stack trace. +> Run with --info or --debug option to get more log output. +> Run with --scan to get full insights. +> Get more help at https://help.gradle.org. +============================================================================== + +3: Task failed with an exception. +----------- +* What went wrong: +java.io.FileNotFoundException: /Users/yaso_meth/Git/mih_main/mih-project/mih_ui/android/.kotlin/errors/errors-96cad8c6-4794-43ef-b397-a9bd8ca89b67-1782895250715.log (No such file or directory) +> /Users/yaso_meth/Git/mih_main/mih-project/mih_ui/android/.kotlin/errors/errors-96cad8c6-4794-43ef-b397-a9bd8ca89b67-1782895250715.log (No such file or directory) + +* Try: +> Run with --stacktrace option to get the stack trace. +> Run with --info or --debug option to get more log output. +> Run with --scan to get full insights. +> Get more help at https://help.gradle.org. +============================================================================== + +4: Task failed with an exception. +----------- +* What went wrong: +java.io.IOException: No space left on device + +* Try: +> Run with --stacktrace option to get the stack trace. +> Run with --info or --debug option to get more log output. +> Run with --scan to get full insights. +> Get more help at https://help.gradle.org. +============================================================================== + +BUILD FAILED in 1s + +FAILURE: Build failed with an exception. + +* What went wrong: +Could not stop all services. +> Failed to release lock on Build Output Cleanup Cache (/Users/yaso_meth/Git/mih_main/mih-project/mih_ui/android/.gradle/buildOutputCleanup) +> Could not stop all services. + > Failed to release lock on cache directory md-supplier (/Users/yaso_meth/.gradle/caches/8.14/md-supplier) + > Could not stop all services. + > Failed to release lock on Build Output Cleanup Cache (/Users/yaso_meth/Git/flutter/packages/flutter_tools/gradle/.gradle/buildOutputCleanup) + > Failed to release lock on execution history cache (/Users/yaso_meth/Git/flutter/packages/flutter_tools/gradle/.gradle/8.14/executionHistory) + > Failed to release lock on cache directory md-rule (/Users/yaso_meth/.gradle/caches/8.14/md-rule) + +* Try: +> Run with --stacktrace option to get the stack trace. +> Run with --info or --debug option to get more log output. +> Run with --scan to get full insights. +> Get more help at https://help.gradle.org. + +BUILD FAILED in 1s +Running Gradle task 'assembleDebug'... 1 649ms + +┌─ Flutter Fix ────────────────────────────────────────────────────────────────────────┐ +│ [!] Starting AGP 9+, only the new DSL interface will be read. │ +│ This results in a build failure when applying the Flutter Gradle plugin at │ +│ /Users/yaso_meth/Git/mih_main/mih-project/mih_ui/android/app/build.gradle.kts. │ +│ │ +│ To resolve this update flutter or opt out of `android.newDsl`. │ +│ For instructions on how to opt out, see: │ +│ https://developer.android.com/build/releases/agp-9-0-0-release-notes │ +│ │ +│ If you are not upgrading to AGP 9+, run `flutter analyze --suggestions` to check for │ +│ incompatible dependencies. │ +└──────────────────────────────────────────────────────────────────────────────────────┘ +Error: Gradle task assembleDebug failed with exit code 1 diff --git a/mih_ui/ios/Runner.xcodeproj/project.pbxproj b/mih_ui/ios/Runner.xcodeproj/project.pbxproj index 107db2fa..6e608c2c 100644 --- a/mih_ui/ios/Runner.xcodeproj/project.pbxproj +++ b/mih_ui/ios/Runner.xcodeproj/project.pbxproj @@ -17,6 +17,7 @@ 97C146FE1CF9000F007C117D /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 97C146FD1CF9000F007C117D /* Assets.xcassets */; }; 97C147011CF9000F007C117D /* LaunchScreen.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 97C146FF1CF9000F007C117D /* LaunchScreen.storyboard */; }; BB6B9D1B18FA0FA6EA8CED1C /* Pods_RunnerTests.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = A290F9A90D1B4F51A7E7DD19 /* Pods_RunnerTests.framework */; }; + 78A318202AECB46A00862997 /* FlutterGeneratedPluginSwiftPackage in Frameworks */ = {isa = PBXBuildFile; productRef = 78A3181F2AECB46A00862997 /* FlutterGeneratedPluginSwiftPackage */; }; /* End PBXBuildFile section */ /* Begin PBXContainerItemProxy section */ @@ -68,6 +69,7 @@ 97C147021CF9000F007C117D /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; 9885C899E803B0DD96117EDD /* Pods-RunnerTests.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.release.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.release.xcconfig"; sourceTree = ""; }; A290F9A90D1B4F51A7E7DD19 /* Pods_RunnerTests.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_RunnerTests.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + 78E0A7A72DC9AD7400C4905E /* FlutterGeneratedPluginSwiftPackage */ = {isa = PBXFileReference; lastKnownFileType = wrapper; name = FlutterGeneratedPluginSwiftPackage; path = Flutter/ephemeral/Packages/FlutterGeneratedPluginSwiftPackage; sourceTree = ""; }; /* End PBXFileReference section */ /* Begin PBXFrameworksBuildPhase section */ @@ -75,6 +77,7 @@ isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( + 78A318202AECB46A00862997 /* FlutterGeneratedPluginSwiftPackage in Frameworks */, 71E3C54FEF20104FD7A5C7E5 /* Pods_Runner.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; @@ -123,6 +126,7 @@ 9740EEB11CF90186004384FC /* Flutter */ = { isa = PBXGroup; children = ( + 78E0A7A72DC9AD7400C4905E /* FlutterGeneratedPluginSwiftPackage */, 3B3967151E833CAA004F5970 /* AppFrameworkInfo.plist */, 9740EEB21CF90195004384FC /* Debug.xcconfig */, 7AFA3C8E1D35360C0083082E /* Release.xcconfig */, @@ -192,6 +196,9 @@ productType = "com.apple.product-type.bundle.unit-test"; }; 97C146ED1CF9000F007C117D /* Runner */ = { + packageProductDependencies = ( + 78A3181F2AECB46A00862997 /* FlutterGeneratedPluginSwiftPackage */, + ); isa = PBXNativeTarget; buildConfigurationList = 97C147051CF9000F007C117D /* Build configuration list for PBXNativeTarget "Runner" */; buildPhases = ( @@ -218,6 +225,9 @@ /* Begin PBXProject section */ 97C146E61CF9000F007C117D /* Project object */ = { + packageReferences = ( + 781AD8BC2B33823900A9FFBB /* XCLocalSwiftPackageReference "Flutter/ephemeral/Packages/FlutterGeneratedPluginSwiftPackage" */, + ); isa = PBXProject; attributes = { BuildIndependentTargetsInParallel = YES; @@ -773,6 +783,18 @@ defaultConfigurationName = Release; }; /* End XCConfigurationList section */ +/* Begin XCLocalSwiftPackageReference section */ + 781AD8BC2B33823900A9FFBB /* XCLocalSwiftPackageReference "Flutter/ephemeral/Packages/FlutterGeneratedPluginSwiftPackage" */ = { + isa = XCLocalSwiftPackageReference; + relativePath = Flutter/ephemeral/Packages/FlutterGeneratedPluginSwiftPackage; + }; +/* End XCLocalSwiftPackageReference section */ +/* Begin XCSwiftPackageProductDependency section */ + 78A3181F2AECB46A00862997 /* FlutterGeneratedPluginSwiftPackage */ = { + isa = XCSwiftPackageProductDependency; + productName = FlutterGeneratedPluginSwiftPackage; + }; +/* End XCSwiftPackageProductDependency section */ }; rootObject = 97C146E61CF9000F007C117D /* Project object */; } diff --git a/mih_ui/ios/Runner.xcodeproj/project.xcworkspace/xcshareddata/swiftpm/Package.resolved b/mih_ui/ios/Runner.xcodeproj/project.xcworkspace/xcshareddata/swiftpm/Package.resolved new file mode 100644 index 00000000..e2607570 --- /dev/null +++ b/mih_ui/ios/Runner.xcodeproj/project.xcworkspace/xcshareddata/swiftpm/Package.resolved @@ -0,0 +1,149 @@ +{ + "pins" : [ + { + "identity" : "abseil-cpp-binary", + "kind" : "remoteSourceControl", + "location" : "https://github.com/google/abseil-cpp-binary.git", + "state" : { + "revision" : "bbe8b69694d7873315fd3a4ad41efe043e1c07c5", + "version" : "1.2024072200.0" + } + }, + { + "identity" : "app-check", + "kind" : "remoteSourceControl", + "location" : "https://github.com/google/app-check.git", + "state" : { + "revision" : "bb4002485ff867768dec13bf904a2ddb050bd1b1", + "version" : "11.3.0" + } + }, + { + "identity" : "firebase-ios-sdk", + "kind" : "remoteSourceControl", + "location" : "https://github.com/firebase/firebase-ios-sdk", + "state" : { + "revision" : "42e81d245e30e49ea6a5830cf2842d44a1591270", + "version" : "12.15.0" + } + }, + { + "identity" : "google-ads-on-device-conversion-ios-sdk", + "kind" : "remoteSourceControl", + "location" : "https://github.com/googleads/google-ads-on-device-conversion-ios-sdk", + "state" : { + "revision" : "dc39082d8881109d35b94b1c122164c0e8d08a55", + "version" : "3.6.1" + } + }, + { + "identity" : "googleappmeasurement", + "kind" : "remoteSourceControl", + "location" : "https://github.com/google/GoogleAppMeasurement.git", + "state" : { + "revision" : "144855f40d8668927f256a3045f7fdc4c3f4338b", + "version" : "12.15.0" + } + }, + { + "identity" : "googledatatransport", + "kind" : "remoteSourceControl", + "location" : "https://github.com/google/GoogleDataTransport.git", + "state" : { + "revision" : "617af071af9aa1d6a091d59a202910ac482128f9", + "version" : "10.1.0" + } + }, + { + "identity" : "googleutilities", + "kind" : "remoteSourceControl", + "location" : "https://github.com/google/GoogleUtilities.git", + "state" : { + "revision" : "9f183ae842be978784f2963a343682e0c46d8fb3", + "version" : "8.1.2" + } + }, + { + "identity" : "grpc-binary", + "kind" : "remoteSourceControl", + "location" : "https://github.com/google/grpc-binary.git", + "state" : { + "revision" : "75b31c842f664a0f46a2e590a570e370249fd8f6", + "version" : "1.69.1" + } + }, + { + "identity" : "gtm-session-fetcher", + "kind" : "remoteSourceControl", + "location" : "https://github.com/google/gtm-session-fetcher.git", + "state" : { + "revision" : "c0ac7575d70050c2973ba2318bd5af47f8e8153a", + "version" : "5.3.0" + } + }, + { + "identity" : "interop-ios-for-google-sdks", + "kind" : "remoteSourceControl", + "location" : "https://github.com/google/interop-ios-for-google-sdks.git", + "state" : { + "revision" : "040d087ac2267d2ddd4cca36c757d1c6a05fdbfe", + "version" : "101.0.0" + } + }, + { + "identity" : "leveldb", + "kind" : "remoteSourceControl", + "location" : "https://github.com/firebase/leveldb.git", + "state" : { + "revision" : "a0bc79961d7be727d258d33d5a6b2f1023270ba1", + "version" : "1.22.5" + } + }, + { + "identity" : "nanopb", + "kind" : "remoteSourceControl", + "location" : "https://github.com/firebase/nanopb.git", + "state" : { + "revision" : "3851d94a41890dea16dc3db34caf60e585cb4163", + "version" : "2.30910.1" + } + }, + { + "identity" : "promises", + "kind" : "remoteSourceControl", + "location" : "https://github.com/google/promises.git", + "state" : { + "revision" : "f4a19a3c313dc2616c70bb49d29a799fb16be837", + "version" : "2.4.1" + } + }, + { + "identity" : "recaptcha-enterprise-mobile-sdk", + "kind" : "remoteSourceControl", + "location" : "https://github.com/GoogleCloudPlatform/recaptcha-enterprise-mobile-sdk.git", + "state" : { + "revision" : "85588690041e63784be7bcb4b631c32565127ba2", + "version" : "18.9.1" + } + }, + { + "identity" : "swift-package-manager-google-mobile-ads", + "kind" : "remoteSourceControl", + "location" : "https://github.com/googleads/swift-package-manager-google-mobile-ads", + "state" : { + "revision" : "7651abff585dc8dacd1744222d5f03bdd2a8532a", + "version" : "13.6.0" + } + }, + { + "identity" : "swift-package-manager-google-user-messaging-platform", + "kind" : "remoteSourceControl", + "location" : "https://github.com/googleads/swift-package-manager-google-user-messaging-platform.git", + "state" : { + "revision" : "13b248eaa73b7826f0efb1bcf455e251d65ecb1b", + "version" : "3.1.0" + } + } + ], + "version" : 2 +} diff --git a/mih_ui/ios/Runner.xcodeproj/xcshareddata/xcschemes/Runner.xcscheme b/mih_ui/ios/Runner.xcodeproj/xcshareddata/xcschemes/Runner.xcscheme index e3773d42..c3fedb29 100644 --- a/mih_ui/ios/Runner.xcodeproj/xcshareddata/xcschemes/Runner.xcscheme +++ b/mih_ui/ios/Runner.xcodeproj/xcshareddata/xcschemes/Runner.xcscheme @@ -5,6 +5,24 @@ + + + + + + + + + + ('user_box'); + await Hive.openBox('business_box'); + await Hive.openBox('business_user_box'); + await Hive.openBox('user_consent_box'); + await Hive.openBox('image_urls_box'); + await Hive.openBox('personal_profile_links_box'); + await Hive.openBox('business_profile_links_box'); + await Hive.openBox('business_employees_box'); + // Mzansi Wallet Data + await Hive.openBox('loyalty_card_box'); + await Hive.openBox('fav_loyalty_card_box'); + await Hive.openBox('wallet_modifications_queue'); + // About MIH Data + await Hive.openBox('about_mih_box'); + // Mih Calendar Data + await Hive.openBox('personal_calendar_box'); + await Hive.openBox('business_calendar_box'); + // await Firebase.initializeApp( - // options: DefaultFirebaseOptions.currentPlatform, + // // options: DefaultFirebaseOptions.currentPlatform, + // options: (Platform.isLinux) + // ? DefaultFirebaseOptions.web // Forces Linux to use the Web config + // : DefaultFirebaseOptions.currentPlatform, // ); if (!kIsWeb && (Platform.isAndroid || Platform.isIOS)) { + const List testDeviceIds = ['733d4c68-9b54-453a-9622-2df407310f40']; + MobileAds.instance.updateRequestConfiguration( + RequestConfiguration( + testDeviceIds: testDeviceIds, + ), + ); MobileAds.instance.initialize(); } else { usePathUrlStrategy(); @@ -33,7 +74,7 @@ void main() async { debugPrint('APP INSTALLED!'); }); final GoRouter appRouter = MihGoRouter().mihRouter; - (MzansiInnovationHub( + runApp(MzansiInnovationHub( router: appRouter, )); } diff --git a/mih_ui/lib/mih_package_components/mih_circle_avatar.dart b/mih_ui/lib/mih_package_components/mih_circle_avatar.dart index e00a2493..51b41329 100644 --- a/mih_ui/lib/mih_package_components/mih_circle_avatar.dart +++ b/mih_ui/lib/mih_package_components/mih_circle_avatar.dart @@ -129,8 +129,7 @@ class _MihCircleAvatarState extends State { ), onPressed: () async { try { - FilePickerResult? result = - await FilePicker.platform.pickFiles( + FilePickerResult? result = await FilePicker.pickFiles( type: FileType.image, ); // print("Here 1"); diff --git a/mih_ui/lib/mih_package_components/mih_image_display.dart b/mih_ui/lib/mih_package_components/mih_image_display.dart index f8ad1f09..aafbfd58 100644 --- a/mih_ui/lib/mih_package_components/mih_image_display.dart +++ b/mih_ui/lib/mih_package_components/mih_image_display.dart @@ -98,8 +98,7 @@ class _MihImageDisplayState extends State { color: MihColors.primary(), onPressed: () async { try { - FilePickerResult? result = - await FilePicker.platform.pickFiles( + FilePickerResult? result = await FilePicker.pickFiles( type: FileType.image, ); // print("Here 1"); diff --git a/mih_ui/lib/mih_packages/mzansi_profile/business_profile/package_tools/mih_business_qr_code.dart b/mih_ui/lib/mih_packages/mzansi_profile/business_profile/package_tools/mih_business_qr_code.dart index f2939170..97057c06 100644 --- a/mih_ui/lib/mih_packages/mzansi_profile/business_profile/package_tools/mih_business_qr_code.dart +++ b/mih_ui/lib/mih_packages/mzansi_profile/business_profile/package_tools/mih_business_qr_code.dart @@ -75,14 +75,13 @@ class _MihBusinessQrCodeState extends State { } else if (defaultTargetPlatform == TargetPlatform.linux || defaultTargetPlatform == TargetPlatform.windows) { // Use File Picker to get a save path on Desktop - String? outputFile = await FilePicker.platform.saveFile( + String? outputFile = await FilePicker.saveFile( dialogTitle: 'Please select where to save your QR Code:', fileName: filename, + bytes: imageBytes, ); if (outputFile != null) { - final file = File(outputFile); - await file.writeAsBytes(imageBytes); KenLogger.success("Saved to $outputFile"); } } else { diff --git a/mih_ui/lib/mih_packages/mzansi_profile/personal_profile/package_tools/mih_personal_qr_code.dart b/mih_ui/lib/mih_packages/mzansi_profile/personal_profile/package_tools/mih_personal_qr_code.dart index c01110ef..55814fec 100644 --- a/mih_ui/lib/mih_packages/mzansi_profile/personal_profile/package_tools/mih_personal_qr_code.dart +++ b/mih_ui/lib/mih_packages/mzansi_profile/personal_profile/package_tools/mih_personal_qr_code.dart @@ -1,4 +1,3 @@ -import 'dart:io'; import 'package:cached_network_image/cached_network_image.dart'; import 'package:file_picker/file_picker.dart'; import 'package:file_saver/file_saver.dart'; @@ -75,13 +74,14 @@ class _MihPersonalQrCodeState extends State { } else if (defaultTargetPlatform == TargetPlatform.linux || defaultTargetPlatform == TargetPlatform.windows) { // Use File Picker to get a save path on Desktop - String? outputFile = await FilePicker.platform.saveFile( + String? outputFile = await FilePicker.saveFile( dialogTitle: 'Please select where to save your QR Code:', fileName: filename, + bytes: imageBytes, ); if (outputFile != null) { - final file = File(outputFile); - await file.writeAsBytes(imageBytes); + // final file = File(outputFile); + // await file.writeAsBytes(imageBytes); KenLogger.success("Saved to $outputFile"); } } else { diff --git a/mih_ui/lib/mih_packages/patient_manager/pat_profile/package_tools/patient_documents.dart b/mih_ui/lib/mih_packages/patient_manager/pat_profile/package_tools/patient_documents.dart index c8b83d01..603b7ba0 100644 --- a/mih_ui/lib/mih_packages/patient_manager/pat_profile/package_tools/patient_documents.dart +++ b/mih_ui/lib/mih_packages/patient_manager/pat_profile/package_tools/patient_documents.dart @@ -164,11 +164,9 @@ class _PatientDocumentsState extends State { const SizedBox(width: 10), MihButton( onPressed: () async { - FilePickerResult? result = - await FilePicker.platform.pickFiles( + FilePickerResult? result = await FilePicker.pickFiles( type: FileType.custom, allowedExtensions: ['jpg', 'png', 'pdf'], - withData: true, ); if (result == null) return; final selectedFile = result.files.first; diff --git a/mih_ui/lib/mih_providers/ollama_provider.dart b/mih_ui/lib/mih_providers/ollama_provider.dart index 31e7dc78..5b9bdf9b 100644 --- a/mih_ui/lib/mih_providers/ollama_provider.dart +++ b/mih_ui/lib/mih_providers/ollama_provider.dart @@ -1,41 +1,43 @@ import 'dart:convert'; import 'package:flutter/foundation.dart'; -import 'package:flutter_ai_toolkit/flutter_ai_toolkit.dart'; +import 'package:flutter_ai_toolkit/flutter_ai_toolkit.dart' as ai_toolkit; import 'package:ken_logger/ken_logger.dart'; -import 'package:ollama_dart/ollama_dart.dart'; +import 'package:ollama_dart/ollama_dart.dart' as ollama; import 'package:cross_file/cross_file.dart'; -class OllamaProvider extends LlmProvider with ChangeNotifier { +class OllamaProvider extends ai_toolkit.LlmProvider with ChangeNotifier { OllamaProvider({ - String? baseUrl, - Map? headers, - Map? queryParams, + required String baseUrl, + // required Map headers, + // required Map queryParams, required String model, String? systemPrompt, bool? think, - }) : _client = OllamaClient( - baseUrl: baseUrl, - headers: headers, - queryParams: queryParams, + }) : _client = ollama.OllamaClient( + config: ollama.OllamaConfig( + baseUrl: baseUrl, + // defaultHeaders: headers, + // defaultQueryParams: queryParams, + ), ), _model = model, _systemPrompt = systemPrompt, _think = think, _history = []; - final OllamaClient _client; + final ollama.OllamaClient _client; final String _model; - final List _history; + final List _history; final String? _systemPrompt; final bool? _think; @override Stream generateStream( String prompt, { - Iterable attachments = const [], + Iterable attachments = const [], }) async* { final messages = _mapToOllamaMessages([ - ChatMessage.user(prompt, attachments), + ai_toolkit.ChatMessage.user(prompt, attachments), ]); yield* _generateStream(messages); } @@ -43,7 +45,7 @@ class OllamaProvider extends LlmProvider with ChangeNotifier { Stream speechToText(XFile audioFile) async* { KenLogger.success("Inside Custom speechToText funtion"); // 1. Convert the XFile to the attachment format needed for the LLM. - final attachments = [await FileAttachment.fromFile(audioFile)]; + final attachments = [await ai_toolkit.FileAttachment.fromFile(audioFile)]; KenLogger.success("added attachment for audio file"); // 2. Define the transcription prompt, mirroring the logic from LlmChatView. @@ -66,11 +68,11 @@ class OllamaProvider extends LlmProvider with ChangeNotifier { @override Stream sendMessageStream( String prompt, { - Iterable attachments = const [], + Iterable attachments = const [], }) async* { KenLogger.success("sendMessageStream called with: $prompt"); - final userMessage = ChatMessage.user(prompt, attachments); - final llmMessage = ChatMessage.llm(); + final userMessage = ai_toolkit.ChatMessage.user(prompt, attachments); + final llmMessage = ai_toolkit.ChatMessage.llm(); _history.addAll([userMessage, llmMessage]); notifyListeners(); KenLogger.success("History after adding messages: ${_history.length}"); @@ -86,7 +88,7 @@ class OllamaProvider extends LlmProvider with ChangeNotifier { } @override - Iterable get history => _history; + Iterable get history => _history; void resetChat() { _history.clear(); @@ -94,48 +96,41 @@ class OllamaProvider extends LlmProvider with ChangeNotifier { } @override - set history(Iterable history) { + set history(Iterable history) { _history.clear(); _history.addAll(history); notifyListeners(); } - Stream _generateStream(List messages) async* { - final allMessages = []; + Stream _generateStream(List messages) async* { + final allMessages = []; if (_systemPrompt != null && _systemPrompt.isNotEmpty) { KenLogger.success("Adding system prompt to the conversation"); - allMessages.add(Message( - role: MessageRole.system, - content: _systemPrompt, + allMessages.add(ollama.ChatMessage.system( + _systemPrompt, )); } allMessages.addAll(messages); - final stream = _client.generateChatCompletionStream( - request: GenerateChatCompletionRequest( + final stream = _client.chat.createStream( + request: ollama.ChatRequest( model: _model, messages: allMessages, - think: _think ?? false, + think: ollama.ThinkValue.enabled(_think ?? false), ), ); - // final stream = _client.generateChatCompletionStream( - // request: GenerateChatCompletionRequest( - // model: _model, - // messages: messages, - // ), - // ); - yield* stream.map((res) => res.message.content); + yield* stream.map((res) => res.message?.content ?? ''); } - List _mapToOllamaMessages(List messages) { + List _mapToOllamaMessages( + List messages) { return messages.map((message) { switch (message.origin) { - case MessageOrigin.user: + case ai_toolkit.MessageOrigin.user: if (message.attachments.isEmpty) { - return Message( - role: MessageRole.user, - content: message.text ?? '', + return ollama.ChatMessage.user( + message.text ?? '', ); } final imageAttachments = []; @@ -144,32 +139,30 @@ class OllamaProvider extends LlmProvider with ChangeNotifier { docAttachments.add(message.text!); } for (final attachment in message.attachments) { - if (attachment is FileAttachment) { + if (attachment is ai_toolkit.FileAttachment) { final mimeType = attachment.mimeType.toLowerCase(); if (mimeType.startsWith('image/')) { imageAttachments.add(base64Encode(attachment.bytes)); } else if (mimeType == 'application/pdf' || mimeType.startsWith('text/')) { - throw LlmFailureException( + throw ai_toolkit.LlmFailureException( "\n\nAww, that file is a little too advanced for us right now ($mimeType)! We're still learning, but we'll get there! Please try sending us a different file type.\n\nHint: We can handle images quite well!", ); } } else { - throw LlmFailureException( + throw ai_toolkit.LlmFailureException( 'Unsupported attachment type: $attachment', ); } } - return Message( - role: MessageRole.user, - content: docAttachments.join(' '), + return ollama.ChatMessage.user( + docAttachments.join(' '), images: imageAttachments, ); - case MessageOrigin.llm: - return Message( - role: MessageRole.assistant, - content: message.text ?? '', + case ai_toolkit.MessageOrigin.llm: + return ollama.ChatMessage.assistant( + message.text ?? '', ); } }).toList(growable: false); @@ -177,7 +170,7 @@ class OllamaProvider extends LlmProvider with ChangeNotifier { @override void dispose() { - _client.endSession(); + _client.close(); super.dispose(); } } diff --git a/mih_ui/linux/flutter/generated_plugin_registrant.cc b/mih_ui/linux/flutter/generated_plugin_registrant.cc index 4f4c5872..6c9fa3d1 100644 --- a/mih_ui/linux/flutter/generated_plugin_registrant.cc +++ b/mih_ui/linux/flutter/generated_plugin_registrant.cc @@ -10,6 +10,7 @@ #include #include #include +#include #include void fl_register_plugins(FlPluginRegistry* registry) { @@ -25,6 +26,9 @@ void fl_register_plugins(FlPluginRegistry* registry) { g_autoptr(FlPluginRegistrar) record_linux_registrar = fl_plugin_registry_get_registrar_for_plugin(registry, "RecordLinuxPlugin"); record_linux_plugin_register_with_registrar(record_linux_registrar); + g_autoptr(FlPluginRegistrar) syncfusion_pdfviewer_linux_registrar = + fl_plugin_registry_get_registrar_for_plugin(registry, "SyncfusionPdfviewerLinuxPlugin"); + syncfusion_pdfviewer_linux_plugin_register_with_registrar(syncfusion_pdfviewer_linux_registrar); g_autoptr(FlPluginRegistrar) url_launcher_linux_registrar = fl_plugin_registry_get_registrar_for_plugin(registry, "UrlLauncherPlugin"); url_launcher_plugin_register_with_registrar(url_launcher_linux_registrar); diff --git a/mih_ui/linux/flutter/generated_plugins.cmake b/mih_ui/linux/flutter/generated_plugins.cmake index 1061886b..18ac4ce6 100644 --- a/mih_ui/linux/flutter/generated_plugins.cmake +++ b/mih_ui/linux/flutter/generated_plugins.cmake @@ -7,6 +7,7 @@ list(APPEND FLUTTER_PLUGIN_LIST file_selector_linux printing record_linux + syncfusion_pdfviewer_linux url_launcher_linux ) diff --git a/mih_ui/pubspec.lock b/mih_ui/pubspec.lock index a180a0cf..9f3c1832 100644 --- a/mih_ui/pubspec.lock +++ b/mih_ui/pubspec.lock @@ -297,14 +297,22 @@ packages: url: "https://pub.dev" source: hosted version: "3.4.1" + cross_cache: + dependency: transitive + description: + name: cross_cache + sha256: "4983a16603cc99b0a14de6a772fa8ee4533411f46f3c423f1386fea7566049c5" + url: "https://pub.dev" + source: hosted + version: "1.1.0" cross_file: dependency: "direct main" description: name: cross_file - sha256: "28bb3ae56f117b5aec029d702a90f57d285cd975c3c5c281eaca38dbc47c5937" + sha256: d687bec93342bf6a764a116d15c8694ebeff10e633dc28a39dd3144f7195024e url: "https://pub.dev" source: hosted - version: "0.3.5+2" + version: "0.3.5+3" crypto: dependency: transitive description: @@ -349,26 +357,26 @@ packages: dependency: transitive description: name: dbus - sha256: "0ce9b0a839e6dee59a37a623d2fc26a35bbbe6404213e419b0d6411023d62645" + sha256: "792974a4007974fbc5c1b5433eb2330a9db3e368c3f906253af4c007d0f49a91" url: "https://pub.dev" source: hosted - version: "0.7.14" + version: "0.7.13" device_info_plus: dependency: transitive description: name: device_info_plus - sha256: "98f28b42168cc509abc92f88518882fd58061ea372d7999aecc424345c7bff6a" + sha256: "0891702f96b2e465fe567b7ec448380e6b1c14f60af552a8536d9f583b6b8442" url: "https://pub.dev" source: hosted - version: "11.5.0" + version: "13.2.0" device_info_plus_platform_interface: dependency: transitive description: name: device_info_plus_platform_interface - sha256: e1ea89119e34903dca74b883d0dd78eb762814f97fb6c76f35e9ff74d261a18f + sha256: "04b173a92e2d9161dfead145667037c8d834db725ce2e7b942bfe18fd2f45a46" url: "https://pub.dev" source: hosted - version: "7.0.3" + version: "8.1.0" diacritic: dependency: transitive description: @@ -389,18 +397,18 @@ packages: dependency: transitive description: name: dio - sha256: aff32c08f92787a557dd5c0145ac91536481831a01b4648136373cddb0e64f8c + sha256: ea2bad3c89a27635ce2d85cce4d6b199da49a5a48ec77b03e45b65a3b90922b0 url: "https://pub.dev" source: hosted - version: "5.9.2" + version: "5.10.0" dio_web_adapter: dependency: transitive description: name: dio_web_adapter - sha256: "2f9e64323a7c3c7ef69567d5c800424a11f8337b8b228bad02524c9fb3c1f340" + sha256: dd58dc3861eb36edb13b217efc006a1c21e5bbc341de8c229b85634fa5e362e4 url: "https://pub.dev" source: hosted - version: "2.1.2" + version: "2.2.0" equatable: dependency: transitive description: @@ -425,6 +433,14 @@ packages: url: "https://pub.dev" source: hosted version: "2.2.0" + ffi_leak_tracker: + dependency: transitive + description: + name: ffi_leak_tracker + sha256: "4093d4ef9ca06ffe2786e73bfb25e22aa92112b9bb4ec941f11e3e6b61489a97" + url: "https://pub.dev" + source: hosted + version: "0.1.2" file: dependency: transitive description: @@ -437,18 +453,18 @@ packages: dependency: "direct main" description: name: file_picker - sha256: "57d9a1dd5063f85fa3107fb42d1faffda52fdc948cefd5fe5ea85267a5fc7343" + sha256: fdc6a37f715d19f35b131decf1ce39242eeed5ddae18c0818c3eccb731ab76be url: "https://pub.dev" source: hosted - version: "10.3.10" + version: "12.0.0-beta.7" file_saver: dependency: "direct main" description: name: file_saver - sha256: "9d93db09bd4da9e43238f9dd485360fc51a5c138eea5ef5f407ec56e58079ac0" + sha256: "68c9a085d9bb4546e0a31d1e583a48d7c17a6987d538788ea064f0043b1fc02d" url: "https://pub.dev" source: hosted - version: "0.3.1" + version: "0.4.0" file_selector: dependency: transitive description: @@ -618,10 +634,10 @@ packages: dependency: "direct main" description: name: flutter_ai_toolkit - sha256: b653814f9aac05d84f15db0daf1bf90e9bd9177abeba378c6f1d4a75bb2099a5 + sha256: "070a27e5ceb7154d15dffd165b3f7d60ec12d0a78b4d7a4063466c5657e13843" url: "https://pub.dev" source: hosted - version: "0.10.0" + version: "1.0.0" flutter_cache_manager: dependency: transitive description: @@ -630,6 +646,14 @@ packages: url: "https://pub.dev" source: hosted version: "3.4.1" + flutter_chat_core: + dependency: transitive + description: + name: flutter_chat_core + sha256: "8c46790f64f106bf6e610e2a7324b3844320e9e295867c06d45d9deb134d848d" + url: "https://pub.dev" + source: hosted + version: "2.9.0" flutter_chat_types: dependency: "direct main" description: @@ -642,18 +666,18 @@ packages: dependency: "direct main" description: name: flutter_chat_ui - sha256: "168a4231464ad00a17ea5f0813f1b58393bdd4035683ea4dc37bbe26be62891e" + sha256: cfbaac38f429beb33d9cc1ca920ae7ccbadbed282c99335d590d61306d3a3d0f url: "https://pub.dev" source: hosted - version: "1.6.15" + version: "2.11.1" flutter_context_menu: dependency: transitive description: name: flutter_context_menu - sha256: "79fe00cd7e3ac3840a552cb3e653d8eb61d827b6c04c559e219973a1dc769165" + sha256: "7040c03fb9cb2a113282d836edadf32b6cdff67cccdf3d158e7411ecc15d7712" url: "https://pub.dev" source: hosted - version: "0.3.0" + version: "0.4.2" flutter_launcher_icons: dependency: "direct main" description: @@ -662,22 +686,6 @@ packages: url: "https://pub.dev" source: hosted version: "0.14.4" - flutter_link_previewer: - dependency: transitive - description: - name: flutter_link_previewer - sha256: "007069e60f42419fb59872beb7a3cc3ea21e9f1bdff5d40239f376fa62ca9f20" - url: "https://pub.dev" - source: hosted - version: "3.2.2" - flutter_linkify: - dependency: transitive - description: - name: flutter_linkify - sha256: "74669e06a8f358fee4512b4320c0b80e51cffc496607931de68d28f099254073" - url: "https://pub.dev" - source: hosted - version: "6.0.0" flutter_lints: dependency: "direct dev" description: @@ -702,14 +710,6 @@ packages: url: "https://pub.dev" source: hosted version: "2.4.8" - flutter_parsed_text: - dependency: transitive - description: - name: flutter_parsed_text - sha256: "529cf5793b7acdf16ee0f97b158d0d4ba0bf06e7121ef180abe1a5b59e32c1e2" - url: "https://pub.dev" - source: hosted - version: "2.2.1" flutter_picture_taker: dependency: transitive description: @@ -788,10 +788,10 @@ packages: dependency: "direct main" description: name: geolocator - sha256: "79939537046c9025be47ec645f35c8090ecadb6fe98eba146a0d25e8c1357516" + sha256: e146a6d63776582651e97a79cbe459f8e1211b100101fadcd84db83361fa599f url: "https://pub.dev" source: hosted - version: "14.0.2" + version: "14.0.3" geolocator_android: dependency: transitive description: @@ -812,10 +812,10 @@ packages: dependency: "direct main" description: name: geolocator_linux - sha256: d64112a205931926f4363bb6bd48f14cb38e7326833041d170615586cd143797 + sha256: "3da7420f11c3496511a5bd3c18fd67b88e5659f12e46b7ce00a788f6996e850a" url: "https://pub.dev" source: hosted - version: "0.2.4" + version: "0.2.6" geolocator_platform_interface: dependency: transitive description: @@ -852,18 +852,18 @@ packages: dependency: "direct main" description: name: gma_mediation_meta - sha256: "765367719c81043ee9cde12c854fae9c8de00c619bb0811fd8ce63541d962710" + sha256: d65dd79c51f6161aaac8c9b07f9a921f73a560d275a15106f440be2016c766bc url: "https://pub.dev" source: hosted - version: "1.5.0" + version: "1.5.2" go_router: dependency: "direct main" description: name: go_router - sha256: d8f590a69729f719177ea68eb1e598295e8dbc41bbc247fed78b2c8a25660d7c + sha256: "5922b2861e2235a3504896f0d6fa07d84141b480cf52eecd2f42cd25585a9e8a" url: "https://pub.dev" source: hosted - version: "16.3.0" + version: "17.3.0" google_fonts: dependency: transitive description: @@ -876,10 +876,10 @@ packages: dependency: "direct main" description: name: google_mobile_ads - sha256: a4f59019f2c32769fb6c60ed8aa321e9c21a36297e2c4f23452b3e779a3e7a26 + sha256: "50549f6c945d7a445d53c04f34d025b1a1723fbd02719de9e67de432e2597f40" url: "https://pub.dev" source: hosted - version: "6.0.0" + version: "8.0.0" graphs: dependency: transitive description: @@ -960,22 +960,30 @@ packages: url: "https://pub.dev" source: hosted version: "4.1.2" + idb_shim: + dependency: transitive + description: + name: idb_shim + sha256: a3b70c0c49c90dfbb3ffcaf6a1e376a83d542dc59124e6f29b1e84487c481c30 + url: "https://pub.dev" + source: hosted + version: "2.9.6" image: dependency: transitive description: name: image - sha256: f9881ff4998044947ec38d098bc7c8316ae1186fa786eddffdb867b9bc94dfce + sha256: "6300175e00616bbc832e2fc91bfa4d776af5402c81c7151bee6905bb08473c52" url: "https://pub.dev" source: hosted - version: "4.8.0" + version: "4.9.1" image_picker: dependency: transitive description: name: image_picker - sha256: "91c025426c2881c551100bce834e201c835a170151545f58d17da5180ca7d9ac" + sha256: d8402284df184bc05f4a2210c6c23983b0720f4cd87cbd05c5390a78af602667 url: "https://pub.dev" source: hosted - version: "1.2.2" + version: "1.2.3" image_picker_android: dependency: transitive description: @@ -1120,14 +1128,6 @@ packages: url: "https://pub.dev" source: hosted version: "3.0.2" - linkify: - dependency: transitive - description: - name: linkify - sha256: "4139ea77f4651ab9c315b577da2dd108d9aa0bd84b5d03d33323f1970c645832" - url: "https://pub.dev" - source: hosted - version: "5.0.0" lints: dependency: transitive description: @@ -1212,10 +1212,10 @@ packages: dependency: "direct main" description: name: math_expressions - sha256: e32d803d758ace61cc6c4bdfed1226ff60a6a23646b35685670d28b5616139f8 + sha256: "2e1ceb974c2b1893c809a68c7005f1b63f7324db0add800a0e792b1ac8ff9f03" url: "https://pub.dev" source: hosted - version: "2.6.0" + version: "3.1.0" measure_size: dependency: transitive description: @@ -1292,10 +1292,10 @@ packages: dependency: "direct main" description: name: ollama_dart - sha256: "55a45e381f3cf24791df510e287f353e776d376f556d34ba49b09bc918eee319" + sha256: ec1ed4d10ca53ca5014b50db2c189fe88634e3ba4203b328cb436562f884fe17 url: "https://pub.dev" source: hosted - version: "0.2.5" + version: "2.3.0" os_detect: dependency: transitive description: @@ -1316,18 +1316,18 @@ packages: dependency: transitive description: name: package_info_plus - sha256: "468c26b4254ab01979fa5e4a98cb343ea3631b9acee6f21028997419a80e1a20" + sha256: f5c435dc0e0d461e5b32471a870f769b6a1cc46930637efe24fbc535314e78ad url: "https://pub.dev" source: hosted - version: "9.0.1" + version: "10.2.0" package_info_plus_platform_interface: dependency: transitive description: name: package_info_plus_platform_interface - sha256: "202a487f08836a592a6bd4f901ac69b3a8f146af552bbd14407b6b41e1c3f086" + sha256: db762cb2f4f25ee60fb6359773861b0f199e00b90d237bd85a76a1e806b46ef4 url: "https://pub.dev" source: hosted - version: "3.2.1" + version: "4.1.0" path: dependency: transitive description: @@ -1396,10 +1396,10 @@ packages: dependency: transitive description: name: pdf - sha256: e47a275b267873d5944ad5f5ff0dcc7ac2e36c02b3046a0ffac9b72fd362c44b + sha256: "517df47af468734a23c8b513c0c6a8a62357403ab1b8ab7fad1606576a9dbdd0" url: "https://pub.dev" source: hosted - version: "3.12.0" + version: "3.13.0" pdf_widget_wrapper: dependency: transitive description: @@ -1416,14 +1416,6 @@ packages: url: "https://pub.dev" source: hosted version: "7.0.2" - photo_view: - dependency: transitive - description: - name: photo_view - sha256: "1fc3d970a91295fbd1364296575f854c9863f225505c28c46e0a03e48960c75e" - url: "https://pub.dev" - source: hosted - version: "0.15.0" platform: dependency: transitive description: @@ -1460,10 +1452,10 @@ packages: dependency: "direct main" description: name: printing - sha256: "689170c9ddb1bda85826466ba80378aa8993486d3c959a71cd7d2d80cb606692" + sha256: f6cd14c768c1352dd37a958a3ee351aa9ce305b398218d3acd86389d5f7ecad1 url: "https://pub.dev" source: hosted - version: "5.14.3" + version: "5.15.0" protobuf: dependency: transitive description: @@ -1704,30 +1696,38 @@ packages: url: "https://pub.dev" source: hosted version: "3.0.0" - scroll_to_index: + scrollview_observer: dependency: transitive description: - name: scroll_to_index - sha256: b707546e7500d9f070d63e5acf74fd437ec7eeeb68d3412ef7b0afada0b4f176 + name: scrollview_observer + sha256: "5ce907c5757d0805de974de8b17c0185f982dfe805dde22a0acb016b39182ece" url: "https://pub.dev" source: hosted - version: "3.0.1" + version: "1.27.0" + sembast: + dependency: transitive + description: + name: sembast + sha256: a58b26925e23071cf0f4754d8449aabe829e9a9930a872fb18e6ae4c2c88e025 + url: "https://pub.dev" + source: hosted + version: "3.8.9+1" share_plus: dependency: "direct main" description: name: share_plus - sha256: d7dc0630a923883c6328ca31b89aa682bacbf2f8304162d29f7c6aaff03a27a1 + sha256: "9eee8283462d91a7a1c8bdb67d08874abd75a2f8fae3bc0ca033035e375fb3d8" url: "https://pub.dev" source: hosted - version: "11.1.0" + version: "13.2.0" share_plus_platform_interface: dependency: transitive description: name: share_plus_platform_interface - sha256: "88023e53a13429bd65d8e85e11a9b484f49d4c190abbd96c7932b74d6927cc9a" + sha256: "7f7ae28cf400d13f811e297ff37742dba83b79e0a6f5dce14eec0248274e6ce9" url: "https://pub.dev" source: hosted - version: "6.1.0" + version: "7.1.0" shared_preferences: dependency: transitive description: @@ -1929,66 +1929,74 @@ packages: dependency: "direct main" description: name: syncfusion_flutter_core - sha256: bee87cdfe527b31705190162e3bd27bf468d591ae7c68182244bdfd94e21f737 + sha256: f054f5636c618dbf1a155409d0b5f3e70f8e9beb7ac7a8fdc870653968875e7d url: "https://pub.dev" source: hosted - version: "29.2.11" + version: "33.2.15" syncfusion_flutter_pdf: dependency: transitive description: name: syncfusion_flutter_pdf - sha256: "08fc998934dab953e980ab3b98482e994beda2e736b88c9fec99cdcf04036509" + sha256: "63ebe5bb3261e83c586a9105c12ae55d8b70863c7f7bb867048f081b9bf46d6e" url: "https://pub.dev" source: hosted - version: "29.2.11" + version: "33.2.15" syncfusion_flutter_pdfviewer: dependency: "direct main" description: name: syncfusion_flutter_pdfviewer - sha256: "240c3c50e5a9a0ed2ca9d0449414f83ddcb09dafc798362bf8d8db11dabffdfe" + sha256: ac0c2bfe233ab1253746de72a46d32c69b1f13267e245989e13dc55970fbb50a url: "https://pub.dev" source: hosted - version: "29.2.11" + version: "33.2.15" syncfusion_flutter_signaturepad: dependency: transitive description: name: syncfusion_flutter_signaturepad - sha256: "903dcd8a6afcd94488be296f9e45c28e2ea6634849eccb70066e310db4198edc" + sha256: f127af6fcb7de2dae74a0856f005747d27869fb176c8b92346136fe2254d73dc url: "https://pub.dev" source: hosted - version: "29.2.11" + version: "33.2.15" + syncfusion_pdfviewer_linux: + dependency: transitive + description: + name: syncfusion_pdfviewer_linux + sha256: "8f24e911178b126f9ed65158880ebb1478519e351f45b2a6da87ea1d4e66c8b8" + url: "https://pub.dev" + source: hosted + version: "33.2.15" syncfusion_pdfviewer_macos: dependency: transitive description: name: syncfusion_pdfviewer_macos - sha256: "529befb03610bc5f647ddba84150355bea18a25f5ce8329f3065971a498b89d1" + sha256: ca72847813956eb01a0f580827fdb7784eeff1bbbb2565d4253bf32325c911da url: "https://pub.dev" source: hosted - version: "29.2.11" + version: "33.2.15" syncfusion_pdfviewer_platform_interface: dependency: transitive description: name: syncfusion_pdfviewer_platform_interface - sha256: e27a16b987b7b0d241a153ac96119c2bf753075cae93301e0143ebf7c139503b + sha256: f4dc6151e9f5a8ca1a385773ada3f23e1a5f96ece867045620f7e7600653717b url: "https://pub.dev" source: hosted - version: "29.2.11" + version: "33.2.15" syncfusion_pdfviewer_web: dependency: transitive description: name: syncfusion_pdfviewer_web - sha256: "1cf1d8f8871fd421e454e7e38f1044b6b170bb0201a5bee8634210d27aa79e2e" + sha256: b3a455f0806bee6de2d0d6a13b12bb2d3fa598111b36927a5c8dcbb2a6f316ef url: "https://pub.dev" source: hosted - version: "29.2.11" + version: "33.2.15" syncfusion_pdfviewer_windows: dependency: transitive description: name: syncfusion_pdfviewer_windows - sha256: cc6826cdae73657d010bd4480b5c6f06a78589e86185eeec9f6ec931c4c4276a + sha256: "983ae0f6b3a0682692a4050f82a52fb61187454cdd3322e67494db16731bc74d" url: "https://pub.dev" source: hosted - version: "29.2.11" + version: "33.2.15" synchronized: dependency: transitive description: @@ -2057,10 +2065,10 @@ packages: dependency: "direct main" description: name: upgrader - sha256: "3fae4eb861c7e8567f91412d9ca4a287e024e58d6f79f98da79e3f6d78da74ba" + sha256: "6282524d4b664e48e24736ce343eedd115dcc1ce79198fc0bd46f14692e1f05e" url: "https://pub.dev" source: hosted - version: "12.5.0" + version: "13.5.0" url_launcher: dependency: "direct main" description: @@ -2173,14 +2181,6 @@ packages: url: "https://pub.dev" source: hosted version: "3.0.2" - visibility_detector: - dependency: transitive - description: - name: visibility_detector - sha256: dd5cc11e13494f432d15939c3aa8ae76844c42b723398643ce9addb88a5ed420 - url: "https://pub.dev" - source: hosted - version: "0.4.0+2" vm_service: dependency: transitive description: @@ -2273,18 +2273,18 @@ packages: dependency: transitive description: name: win32 - sha256: d7cb55e04cd34096cd3a79b3330245f54cb96a370a1c27adb3c84b917de8b08e + sha256: ba6f4bba816c8d7e3c1580e170f3786d216951cc6b94babc3b814c08d2cb2738 url: "https://pub.dev" source: hosted - version: "5.15.0" + version: "6.3.0" win32_registry: dependency: transitive description: name: win32_registry - sha256: "6f1b564492d0147b330dd794fee8f512cec4977957f310f9951b5f9d83618dae" + sha256: "73b1d78920a9d6e03f8b4e43e612b87bf3152a0e5c5e5150267762b7c4116904" url: "https://pub.dev" source: hosted - version: "2.1.0" + version: "3.0.3" xdg_directories: dependency: transitive description: @@ -2297,10 +2297,10 @@ packages: dependency: transitive description: name: xml - sha256: "971043b3a0d3da28727e40ed3e0b5d18b742fa5a68665cca88e74b7876d5e025" + sha256: "67f0aff7be013d107995e9b75bf4e7f2c3ef2dfdb2c8e68024bba0a7fd5756a4" url: "https://pub.dev" source: hosted - version: "6.6.1" + version: "7.0.1" yaml: dependency: transitive description: diff --git a/mih_ui/pubspec.yaml b/mih_ui/pubspec.yaml index b90b2080..5867089b 100644 --- a/mih_ui/pubspec.yaml +++ b/mih_ui/pubspec.yaml @@ -1,7 +1,7 @@ name: mzansi_innovation_hub description: "" publish_to: "none" # Remove this line if you wish to publish to pub.dev -version: 1.4.0+134 +version: 1.4.0+135 environment: sdk: ">=3.5.3 <4.0.0" @@ -16,10 +16,10 @@ dependencies: font_awesome_flutter: ^11.0.0 # firebase_core: ^4.4.0 # firebase_core_desktop: ^1.0.2 - syncfusion_flutter_core: ^29.2.10 - syncfusion_flutter_pdfviewer: ^29.2.10 + syncfusion_flutter_core: ^33.2.15 + syncfusion_flutter_pdfviewer: ^33.2.15 universal_html: ^2.2.4 - file_picker: ^10.1.9 + file_picker: ^12.0.0-beta.7 supertokens_flutter: ^0.6.3 http: ^1.2.1 # args: ^2.7.0 @@ -35,30 +35,30 @@ dependencies: url_launcher: ^6.3.1 fl_downloader: ^2.0.2 local_auth: ^2.3.0 - math_expressions: ^2.6.0 - ollama_dart: ^0.2.2+1 - flutter_chat_ui: ^1.6.15 + math_expressions: ^3.1.0 + ollama_dart: ^2.3.0 + flutter_chat_ui: ^2.11.1 flutter_chat_types: ^3.6.2 uuid: ^4.5.1 flutter_tts: ^4.2.3 flutter_speed_dial: ^7.0.0 - share_plus: ^11.0.0 + share_plus: ^13.2.0 #app_settings: ^6.1.1 pwa_install: ^0.0.6 - google_mobile_ads: ^6.0.0 + google_mobile_ads: ^8.0.0 gma_mediation_meta: ^1.4.1 redacted: ^1.0.13 custom_rating_bar: ^3.0.0 country_code_picker: ^3.3.0 ken_logger: ^0.0.3 - go_router: ^16.1.0 + go_router: ^17.3.0 screen_brightness: ^2.1.6 cached_network_image: ^3.4.1 - upgrader: ^12.0.0 + upgrader: ^13.5.0 screenshot: ^3.0.0 - file_saver: ^0.3.1 + file_saver: ^0.4.0 provider: ^6.1.5+1 - flutter_ai_toolkit: ^0.10.0 + flutter_ai_toolkit: ^1.0.0 flutter_markdown_plus: ^1.0.5 cross_file: ^0.3.5+1 quick_actions: ^1.1.0